dependency-injection-cat
Version:
DI Cat is a truly clean DI-container, which allows you not to pollute your business logic with decorators from DI/IOC libraries!
51 lines (50 loc) • 2.58 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var typescript_1 = __importDefault(require("typescript"));
var config_1 = require("../../external/config");
var getTransformerFactory_1 = require("../../core/transformers/getTransformerFactory");
var libraryName_1 = require("../../constants/libraryName");
var ProgramRepository_1 = require("../../core/program/ProgramRepository");
var initContexts_1 = require("../../core/initContexts");
var uniqId_1 = require("../../core/utils/uniqId");
var IGNORE_TRANSFORM_PROPERTY_KEY = (0, uniqId_1.uniqId)();
function default_1(api, options) {
(0, config_1.initDiConfig)(options);
(0, initContexts_1.initContexts)();
var transformerFactory = (0, getTransformerFactory_1.getTransformerFactory)();
var printer = typescript_1.default.createPrinter();
return {
visitor: {
Program: function (path, meta) {
var _a;
if (path.node[IGNORE_TRANSFORM_PROPERTY_KEY]) {
return;
}
var imports = path.node.body.filter(function (it) { return it.type === 'ImportDeclaration'; });
var hasLibraryImport = imports.some(function (it) {
var _a;
var moduleSpecifier = (_a = it === null || it === void 0 ? void 0 : it.source) === null || _a === void 0 ? void 0 : _a.value;
if (!moduleSpecifier) {
return false;
}
return moduleSpecifier === libraryName_1.libraryName;
});
if (!hasLibraryImport) {
return;
}
var fileText = meta.file.code;
var filePath = meta.filename;
var tsSourceFile = typescript_1.default.createSourceFile(filePath, fileText, (_a = ProgramRepository_1.ProgramRepository.program.getCompilerOptions().target) !== null && _a !== void 0 ? _a : typescript_1.default.ScriptTarget.ESNext, true);
var result = typescript_1.default.transform(tsSourceFile, [transformerFactory]);
var resultText = printer.printFile(result.transformed[0]);
var parsed = api.parse(resultText, meta.file.opts).program;
parsed[IGNORE_TRANSFORM_PROPERTY_KEY] = true;
path.replaceWith(parsed);
}
}
};
}
exports.default = default_1;