@huz-com/callback

Base config

Usage no npm install needed!

<script type="module">
  import huzComCallback from 'https://cdn.skypack.dev/@huz-com/callback';
</script>

README

Huz.Com > Component > Callback

  • General callback storage for basic, context, name, pair, entity and route
  • Provides central/easy routing append

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/callback

For Context

const {callback} = require('@huz-com/callback');
// default language for your platform, it based on request or constant
callback.context.add('defaultLanguage', (req) => {return 'tr'});
// current profile language for your platform, it based on request or constant
callback.context.add('currentLanguage', (req) => {return 'tr'});

// and .. whatever

For Entity & Enums

const {callback} = require('@huz-com/callback');
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.findDocAsync = this.findDocAsync.bind(this);
        this.route = this.route.bind(this);
        
        callback.namer.add('Game', this.findNameAsync, this.findNameListAsync);
        callback.pair.add('Game', this.findPairAsync, null);
        callback.doc.add('Game', this.findDocAsync, null);
        callback.route.add('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 findDocAsync(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 {callback} = require('@huz-com/callback');
callback.route.build(router);

At Runtime

Anywhere in your project Supports loosely-coupled architecture, so you don't import Game or Context components

const {callback} = require('@huz-com/callback');
// express's request object
const req = null;
await callback.namer.findAsync('Game', 101, null, req); // returns name of game with id 101
await callback.namer.findListAsync('Game', [101, 102], null, req); // returns name of games with id 101 and 102
await callback.pair.findAsync('Game', 101, null, req); // returns pair of game with id 101
await callback.doc.findAsync('Game', 101, null, req); // returns doc of game with id 101

callback.context.run('currentLanguage', req) // returns profile's language