ts-ioc-container
Version:
Typescript IoC container
47 lines (46 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Filter = exports.List = exports.promisify = exports.constant = exports.pipe = exports.isConstructor = void 0;
exports.isInstance = isInstance;
exports.fillEmptyIndexes = fillEmptyIndexes;
exports.lazyProxy = lazyProxy;
const isConstructor = (T) => typeof T === 'function' && !!T.prototype;
exports.isConstructor = isConstructor;
function isInstance(target) {
return Object.prototype.hasOwnProperty.call(target, 'constructor');
}
const pipe = (...mappers) => (value) => mappers.reduce((acc, current) => current(acc), value);
exports.pipe = pipe;
function fillEmptyIndexes(baseArr, insertArr) {
const a = [...baseArr];
const b = [...insertArr];
for (let i = 0; i < a.length; i++) {
if (a[i] === undefined) {
a[i] = b.shift();
}
}
return a.concat(b);
}
const constant = (value) => () => value;
exports.constant = constant;
function lazyProxy(resolveInstance) {
let instance;
return new Proxy({}, {
get: (_, prop) => {
instance = instance ?? resolveInstance();
// @ts-ignore
return instance[prop];
},
});
}
const promisify = (arg) => (arg instanceof Promise ? arg : Promise.resolve(arg));
exports.promisify = promisify;
exports.List = {
lastOf: (arr) => arr[arr.length - 1],
};
exports.Filter = {
exclude: (arr) => {
const excludeSet = arr instanceof Array ? new Set(arr) : arr;
return (v) => !excludeSet.has(v);
},
};