Narnia's Poofy Meatcleaver

    backlib
    TypeScript icon, indicating that this package has built-in type declarations

    0.5.2 • Public • Published

    Minimalist utilities for backend services.

    • Typed Build with typescript for typescript.
    • Modern Node.js 14 and above, compiled with native class fields and null coalescing native support.
    • Minimalist Not a framework, just some libs that can be assembled into an application infrastructure code.
    • PromiseAsync/Await centric Use Promise/async/await patterns for all async calls.
    • Web Async Web request utilities based on koajs over express as it is a modern rewrite of more or less the same API with backed in support for Promise/async/await (simplify many of the usecases)

    NOTE: Version 0.4.0 and above uses ESM module (i.e., type: module) only.

    Log

    Provides a BaseLog class with a LogWriter driver architecture.

    import {BaseLog, LogWriter} from 'backlib';
    
    interface  WebLogRecord { 
      ...
    }
    
    class WebLog extends BaseLog<WebLogRecord>{
    	constructor() {
    		const writers: LogWriter<WebLogRecord>[] = [];
    		const baseName = 'web_log';
    
    		// Add custom writer using redstream (Redis Stream) for realtime login
    		const logStream = getWebLogStream(); // not provided
    		writers.push({
    			name: baseName + '_stream',
    			writeRec: async (rec: WebLogRecord) => {
    				await logStream.xadd(rec);
    			}
    		});
    
    		super({ writers });
    	}
    }
    const _webLog = new WebLog(); // must be after ServiceLog definition
    
    export webLog(rec: WebLogRecord){
      _webLog.log(rec);
    }

    isTop

    Know if a decorator method is at the leaf of the class tree. Usefull when want to apply logic one one per method name.

    // One per decorator
    const leafTracer = newLeafTracer(); 
    
    export function MethodDec() {
    
    	return function (target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) {
    		// original method
    		const method = descriptor.value!;
    		descriptor.value = async function methodDecWrapper() {
    			// must be called on each invocation (because of order of Decoration eval at init time). 
    			// However, flag is cache, so fast check. 
    			const isLeaf = leafTracer.trace(this.constructor, target.constructor, propertyKey);
    
    			if (isLeaf){
    				// here logic to be apply only for the top most method for a given name for this class inheritance tree
    			}
    
    			const result = method.apply(this,arguments);// exec and get result
    
    			if (isLeaf){
    				// eventual logic post execution
    			}
    
    			return result;
    		}
    	}
    }

    Keywords

    none

    Install

    npm i backlib

    DownloadsWeekly Downloads

    7

    Version

    0.5.2

    License

    MIT

    Unpacked Size

    32.9 kB

    Total Files

    23

    Last publish

    Collaborators

    • jeremychone