UNPKG

@rxap/ts-morph

Version:

Provides utilities for manipulating TypeScript code using the ts-morph library. It offers a fluent API to add, modify, and remove code elements such as classes, decorators, imports, and properties in both Angular and NestJS projects. This package simplifi

69 lines 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Module = void 0; exports.CoerceDependencyInjection = CoerceDependencyInjection; const ts_morph_1 = require("ts-morph"); const coerce_decorator_1 = require("./coerce-decorator"); const coerce_imports_1 = require("./coerce-imports"); const coerce_property_declaration_1 = require("./coerce-property-declaration"); var Module; (function (Module) { Module["ANGULAR"] = "@angular/core"; Module["NEST"] = "@nestjs/common"; })(Module || (exports.Module = Module = {})); function CoerceDependencyInjection(sourceFile, definition, structures = []) { var _a, _b; const classDeclaration = sourceFile.getClasses()[0]; if (!classDeclaration) { throw new Error('Could not find class declaration'); } const constructorDeclaration = classDeclaration.getConstructors()[0]; if (constructorDeclaration) { if (constructorDeclaration.getParameters().some((parameter) => parameter.getName() === definition.parameterName)) { console.warn(`Parameter ${definition.parameterName} already exists in constructor`); return; } } const propertyDeclaration = (0, coerce_property_declaration_1.CoercePropertyDeclaration)(classDeclaration, definition.parameterName, { scope: (_a = definition.scope) !== null && _a !== void 0 ? _a : ts_morph_1.Scope.Public, isReadonly: true, }); if (definition.module === Module.ANGULAR) { if (definition.optional) { propertyDeclaration.setInitializer(`inject(${definition.injectionToken}, { optional: true })`); } else { propertyDeclaration.setInitializer(`inject(${definition.injectionToken})`); } (0, coerce_imports_1.CoerceImports)(sourceFile, { namedImports: ['inject'], moduleSpecifier: definition.module, }); } else { (0, coerce_decorator_1.CoerceDecorator)(propertyDeclaration, 'Inject', { arguments: [definition.injectionToken], }); if (definition.optional) { (0, coerce_decorator_1.CoerceDecorator)(propertyDeclaration, 'Optional', { arguments: [], }); propertyDeclaration.setType(`${definition.type} | null`); propertyDeclaration.setInitializer('null'); (0, coerce_imports_1.CoerceImports)(sourceFile, { namedImports: ['Optional'], moduleSpecifier: definition.module, }); } else { propertyDeclaration.setType((_b = definition.type) !== null && _b !== void 0 ? _b : definition.injectionToken); propertyDeclaration.setHasExclamationToken(true); } (0, coerce_imports_1.CoerceImports)(sourceFile, { namedImports: ['Inject'], moduleSpecifier: definition.module, }); } (0, coerce_imports_1.CoerceImports)(sourceFile, structures); } //# sourceMappingURL=coerce-dependency-injection.js.map