UNPKG

nowjs-core

Version:

NowCanDo Javascript Core [nowjs-core] is a library written by TypeScript code maintains under Apache 2.0 licence

103 lines (102 loc) 3.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("reflect-metadata"); const formatMetadataKey = Symbol('format'); function deprecated(message = 'Function {name} is deprecated.') { return (instance, name, descriptor) => { const original = descriptor.value; const localMessage = message.replace('{name}', name); descriptor.value = (...args) => { console.warn(localMessage); return original.apply(instance, args); }; return descriptor; }; } exports.deprecated = deprecated; function deprecateInNextVersion(message = 'Function {name} is deprecate in next version.') { return (instance, name, descriptor) => { const original = descriptor.value; const localMessage = message.replace('{name}', name); descriptor.value = (...args) => { console.warn(localMessage); return original.apply(instance, args); }; return descriptor; }; } exports.deprecateInNextVersion = deprecateInNextVersion; function readonly(Target) { const newConstructor = () => { Target.apply(this); Object.freeze(this); }; newConstructor.prototype = Object.create(Target.prototype); newConstructor.prototype.constructor = Target; return newConstructor; } exports.readonly = readonly; function timeout(milliseconds = 0) { return (target, propertyKey, descriptor) => { const originalMethod = descriptor.value; descriptor.value = (...args) => { setTimeout(() => { originalMethod.apply(this, args); }, milliseconds); }; return descriptor; }; } exports.timeout = timeout; function logProperty(target, key) { let value = target[key]; const getter = () => { console.log(`Get => ${key}`); return value; }; const setter = (newVal) => { console.log(`Set: ${key} => ${newVal}`); value = newVal; }; if (delete target[key]) { Object.defineProperty(target, key, { get: getter, set: setter, enumerable: true, configurable: true, }); } } exports.logProperty = logProperty; function sealed(constructor) { Object.seal(constructor); Object.seal(constructor.prototype); } exports.sealed = sealed; function enumerable(value) { return (target, propertyKey, descriptor) => { descriptor.enumerable = value; }; } exports.enumerable = enumerable; function configurable(value) { return (target, propertyKey, descriptor) => { descriptor.configurable = value; }; } exports.configurable = configurable; function format(formatString) { return Reflect.metadata(formatMetadataKey, formatString); } exports.format = format; function getFormat(target, propertyKey) { return Reflect.getMetadata(formatMetadataKey, target, propertyKey); } exports.getFormat = getFormat; function override(instance, name, descriptor) { const baseType = Object.getPrototypeOf(instance); if (typeof baseType[name] !== 'function') { throw new Error('Method ' + name + ' of ' + instance.constructor.name + ' does not override any base class method.'); } } exports.override = override;