0.5.2 • Published 3 years ago

backlib v0.5.2

Weekly downloads
140
License
MIT
Repository
github
Last release
3 years ago

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;
		}
	}
}
0.5.2-SNAPSHOT.7

3 years ago

0.5.2-SNAPSHOT.6

3 years ago

0.5.2-SNAPSHOT.5

3 years ago

0.5.2-SNAPSHOT.4

3 years ago

0.5.2-SNAPSHOT.3

3 years ago

0.5.2-SNAPSHOT.2

3 years ago

0.5.2-SNAPSHOT.1

3 years ago

0.5.2-SNAPSHOT.9

3 years ago

0.5.2-SNAPSHOT.8

3 years ago

0.5.2

3 years ago

0.5.0-SNAPSHOT.1

3 years ago

0.4.0-SNAPSHOT.1

3 years ago

0.4.0-SNAPSHOT.2

3 years ago

0.5.0

3 years ago

0.4.0

3 years ago

0.3.3

3 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.3.0

4 years ago

0.2.1

4 years ago

0.2.0-SNAPSHOT-1

5 years ago

0.1.2-SNAPSHOT-1

5 years ago

0.2.0-SNAPSHOT-3

5 years ago

0.2.0

5 years ago

0.2.0-SNAPSHOT-2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago

0.0.2-SNAPSHOT-3

5 years ago

0.0.2-SNAPSHOT-4

5 years ago

0.0.2-SNAPSHOT-2

5 years ago

0.0.2-SNAPSHOT-1

5 years ago

0.0.1

5 years ago