Huz.Com > Component > Registry
- General registry storage for basic, context, name, pair, entity and route
- Provides central/easy routing append
- Fully Qualified Naming support
'FQN'
Standards
- Language:
TS
- Eslint:
Yes
- Static Code Analysis:
Yes
IntelliJ Code Inspections - DDD - Document Driven:
Yes
- EDD - Exception Driven:
Yes
- TDD - Test Driven:
Yes
go to test folder - Standards Complied: Huz Standards
Commands
-
npm run clear
// clears "dist" folder -
npm run lint
// runs eslint for static code analysis -
npm run test
// runs test files in "test" folder -
npm run build
// builds JS files at "dist" folder -
npm publish
ornpm run publix
// publishes "dist" folder to npm
Install
npm i @huz-com/registry
For Context
const {registry} = require('@huz-com/registry');
// default language for your platform, it based on request or constant
registry.addContextFinder('defaultLanguage', (req) => {return 'tr'});
// current profile language for your platform, it based on request or constant
registry.addContextFinder('currentLanguage', (req) => {return 'tr'});
// and .. whatever
For Entity & Enums
const {registry} = require('@huz-com/registry');
class GameService {
constructor () {
// in order to call as callback or function reference
this.findNameAsync = this.findNameAsync.bind(this);
this.findNameListAsync = this.findNameListAsync.bind(this);
this.findPairAsync = this.findPairAsync.bind(this);
this.findRecordAsync = this.findRecordAsync.bind(this);
this.route = this.route.bind(this);
registry.addNameFinder('Game', this.findNameAsync);
registry.addNameListFinder('Game', this.findNameListAsync);
// registry.addReaderFinder('Game', your function)
// registry.addReaderListFinder('Game', your function)
registry.addPairFinder('Game', this.findPairAsync);
// registry.addPairListFinder('Game', your function)
registry.addRecordFinder('Game', this.findRecordAsync);
// registry.addRecordListFinder('Game', your function)
registry.addRouteBuilder('Game', this.route);
}
/**
* @param {string} id
* @param {?Record<string, any>} opt
* @param {?Req} req
* @returns {Promise<string>}
*/
async findNameAsync(id, opt = null, req = null) {
// your own code which returns name of entity
return 'Game-' + id;
}
/**
* @param {Array<string>} ids
* @param {?Record<string, any>} opt
* @param {?Req} req
* @returns {Promise<Array<string>>}
*/
async findNameListAsync(ids, opt = null, req = null) {
// your own code which return name of entities
return ['Game-1', 'Game-2'];
}
/**
* @param {string} id
* @param {?Record<string, any>} opt
* @param {?Req} req
* @returns {Promise<{id: string, name: string}>}
*/
async findPairAsync(id, opt = null, req = null) {
// your own code which returns pair of entity
return {id, name: 'Game-' + id};
}
/**
* @param {string} id
* @param {?Record<string, any>} opt
* @param {?Req} req
* @returns {Promise<{id: string, name: string, description: string}>}
*/
async findRecordAsync(id, opt = null, req = null) {
// your own code which returns record of entity
return {id, name: 'Game-' + id, description: ''};
}
route(router) {
// your custom router
}
}
At Route Initializing
Append all routes to Express route
const {registry} = require('@huz-com/registry');
registry.buildRoutes(router);
At Runtime
Anywhere in your project Supports loosely-coupled architecture, so you don't import Game or Context components
const {registry} = require('@huz-com/registry');
// express's request object
const req = null;
await registry.findNameAsync('Game', 101, null, req); // returns name of game with id 101
await registry.findNameListAsync('Game', [101, 102], null, req); // returns name of games with id 101 and 102
await registry.findPairAsync('Game', 101, null, req); // returns pair of game with id 101
await registry.findRecordAsync('Game', 101, null, req); // returns record of game with id 101
registry.findContext('currentLanguage', req) // returns profile's language
Fully Qualified Naming
Build full qualified name for functions and classes
const {registry} = require('@huz-com/registry');
export namespace huz.notification.firebase {
export class Something {
// ID
public id: number;
public constructor() { }
}
}
registry.patch({ huz });
// when you want to learn which class
console.log(huz.notification.firebase.Something.name);
// huz.notification.firebase.Something, normally it prints Something