@rxap/schematics-ts-morph
Version:
This package provides utilities for manipulating TypeScript code using ts-morph, particularly for Angular and NestJS projects. It offers functions to add, coerce, and modify code elements like classes, methods, decorators, and imports. The package also in
63 lines • 2.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Module = void 0;
exports.AddDependencyInjection = AddDependencyInjection;
const ts_morph_1 = require("ts-morph");
const coerce_class_constructor_1 = require("../coerce-class-constructor");
const coerce_imports_1 = require("../ts-morph/coerce-imports");
/**
* @deprecated import from @rxap/ts-morph
*/
var Module;
(function (Module) {
Module["ANGULAR"] = "@angular/core";
Module["NEST"] = "@nestjs/common";
})(Module || (exports.Module = Module = {}));
/**
* @deprecated import from @rxap/ts-morph
*/
function AddDependencyInjection(sourceFile, definition, structures = []) {
var _a, _b, _c, _d;
if (!definition.module) {
definition.module = Module.ANGULAR;
}
const classDeclaration = sourceFile.getClasses()[0];
if (!classDeclaration) {
throw new Error('Could not find class declaration');
}
const constructorDeclarations = (0, coerce_class_constructor_1.CoerceClassConstructor)(classDeclaration);
const constructorDeclaration = constructorDeclarations[0];
if (constructorDeclaration.getParameter(definition.parameterName)) {
return;
}
const constructorParameter = {
name: definition.parameterName,
type: (_a = definition.type) !== null && _a !== void 0 ? _a : definition.injectionToken,
scope: (_b = definition.scope) !== null && _b !== void 0 ? _b : ts_morph_1.Scope.Public,
isReadonly: true,
decorators: [
{
name: 'Inject',
arguments: [definition.injectionToken],
},
],
};
if (definition.optional) {
(_c = constructorParameter.decorators) === null || _c === void 0 ? void 0 : _c.unshift({
name: 'Optional',
arguments: [],
});
constructorParameter.type = ts_morph_1.Writers.intersectionType((_d = definition.type) !== null && _d !== void 0 ? _d : definition.injectionToken, 'null');
(0, coerce_imports_1.CoerceImports)(sourceFile, {
namedImports: ['Optional'],
moduleSpecifier: definition.module,
});
}
constructorDeclaration.addParameter(constructorParameter);
(0, coerce_imports_1.CoerceImports)(sourceFile, {
namedImports: ['Inject'],
moduleSpecifier: definition.module,
});
(0, coerce_imports_1.CoerceImports)(sourceFile, structures);
}
//# sourceMappingURL=add-dependency-injection.js.map