UNPKG

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
"use strict"; 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;