@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
78 lines • 4.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AddComponentInput = AddComponentInput;
const ts_morph_1 = require("ts-morph");
const coerce_imports_1 = require("../ts-morph/coerce-imports");
const ts_morph_2 = require("@rxap/ts-morph");
const get_component_class_1 = require("./get-component-class");
function AddComponentInput(sourceFile, componentInputDefinition, structures = []) {
const componentClass = (0, get_component_class_1.GetComponentClass)(sourceFile);
if (!componentClass.getConstructors().some(cotr => cotr.getParameters()
.some(param => !!param.getScope() &&
param.getName() ===
componentInputDefinition.name))) {
if (componentInputDefinition.setAccessor) {
if (!componentClass.getSetAccessor(componentInputDefinition.name)) {
componentClass.addSetAccessor({
name: componentInputDefinition.name,
scope: ts_morph_1.Scope.Public,
parameters: [
{
name: componentInputDefinition.name,
type: (0, ts_morph_2.WriteType)(componentInputDefinition.type, sourceFile),
},
],
docs: componentInputDefinition.docs,
statements: [
`this._${componentInputDefinition.name} = ${componentInputDefinition.name};`,
],
decorators: [
{
name: 'Input',
arguments: componentInputDefinition.selector ? [componentInputDefinition.selector] : [],
},
],
});
if (!componentClass.getProperty('_' + componentInputDefinition.name)) {
componentClass.addProperty({
name: '_' + componentInputDefinition.name,
scope: ts_morph_1.Scope.Private,
type: (0, ts_morph_2.WriteType)(componentInputDefinition.type, sourceFile),
initializer: componentInputDefinition.initializer,
hasQuestionToken: !componentInputDefinition.initializer && !componentInputDefinition.required,
hasExclamationToken: !componentInputDefinition.initializer && componentInputDefinition.required,
});
}
(0, coerce_imports_1.CoerceImports)(sourceFile, {
namedImports: ['Input'],
moduleSpecifier: '@angular/core',
});
}
}
else {
if (!componentClass.getProperty(componentInputDefinition.name)) {
componentClass.addProperty({
name: componentInputDefinition.name,
scope: ts_morph_1.Scope.Public,
type: (0, ts_morph_2.WriteType)(componentInputDefinition.type, sourceFile),
initializer: componentInputDefinition.initializer,
hasQuestionToken: !componentInputDefinition.initializer && !componentInputDefinition.required,
hasExclamationToken: !componentInputDefinition.initializer && componentInputDefinition.required,
docs: componentInputDefinition.docs,
decorators: [
{
name: 'Input',
arguments: componentInputDefinition.selector ? [componentInputDefinition.selector] : [],
},
],
});
(0, coerce_imports_1.CoerceImports)(sourceFile, {
namedImports: ['Input'],
moduleSpecifier: '@angular/core',
});
}
}
}
(0, coerce_imports_1.CoerceImports)(sourceFile, structures);
}
//# sourceMappingURL=add-component-input.js.map