@huz-com/registry
TypeScript icon, indicating that this package has built-in type declarations

1.0.13 • Public • Published

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 or npm 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

Readme

Keywords

Package Sidebar

Install

npm i @huz-com/registry

Weekly Downloads

3

Version

1.0.13

License

ISC

Unpacked Size

92.7 kB

Total Files

44

Last publish

Collaborators

  • demiremrece