@solidgrounds/core
Version:
Dependency injection container
73 lines • 2.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GlobalInvokeStack = void 0;
const tslib_1 = require("tslib");
const Value_1 = require("./Value");
const invokeWindowStack = [];
const addCompilerPass = (compilerPass) => {
return getCurrentInvokeWindow().serviceContainer.addCompilerPass(compilerPass);
};
const currentInvokeWindow = () => {
var _a;
return (_a = invokeWindowStack[invokeWindowStack.length - 1]) !== null && _a !== void 0 ? _a : null;
};
const getCurrentInvokeWindow = () => {
const window = invokeWindowStack[invokeWindowStack.length - 1];
if (!window) {
throw new Error('Can only be called withing GlobalInvokeStack');
}
return window;
};
const getRootInvokeWindow = () => {
const window = invokeWindowStack[0];
if (!window) {
throw new Error('Can only be called withing GlobalInvokeStack');
}
return window.serviceContainer.root;
};
function asyncInvokeWindow(window, callback) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
invokeWindowStack.push(window);
try {
yield callback.call(this, window);
}
finally {
invokeWindowStack.splice(invokeWindowStack.indexOf(window), 1);
}
});
}
function invokeWindow(window, callback) {
invokeWindowStack.push(window);
try {
return callback.call(this);
}
finally {
invokeWindowStack.splice(invokeWindowStack.indexOf(window), 1);
}
}
const printInvokeStack = () => {
return invokeWindowStack
.reverse()
.map((window, index) => {
const serviceContainerName = `[${index + 1}]:SC<${window.serviceContainer.name}>`;
if (!Value_1.isFeatureFactoryInvokeWindow(window)) {
return serviceContainerName;
}
const featureFactoryName = `FF<${window.featureFactory.featureFactoryFunction.name}>`;
if (!Value_1.isServiceFactoryInvokeWindow(window)) {
return `${serviceContainerName}.${featureFactoryName}`;
}
return `${serviceContainerName}.${featureFactoryName}.SF<${window.serviceFactory.serviceFactoryFunction.name}>`;
})
.join('\n');
};
exports.GlobalInvokeStack = {
run: invokeWindow,
runAsync: asyncInvokeWindow,
printStack: printInvokeStack,
getCurrent: getCurrentInvokeWindow,
getRoot: getRootInvokeWindow,
current: currentInvokeWindow,
addCompilerPass,
};
//# sourceMappingURL=GlobalInvokeStack.js.map