@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
62 lines • 2.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoercePipe = CoercePipe;
const ts_morph_1 = require("@rxap/ts-morph");
const utilities_1 = require("@rxap/utilities");
const ts_morph_2 = require("ts-morph");
const ts_morph_transform_1 = require("../ts-morph-transform");
function CoercePipe(options) {
const { name,
// eslint-disable-next-line @typescript-eslint/no-empty-function
tsMorphTransform = () => {
}, pure, valueType = 'any', } = options;
const className = (0, utilities_1.classify)((0, utilities_1.CoerceSuffix)(name, 'Pipe'));
const moduleClassName = (0, utilities_1.classify)((0, utilities_1.CoerceSuffix)(name, 'PipeModule'));
const fileName = (0, utilities_1.CoerceSuffix)(name, '.pipe.ts');
return (0, ts_morph_transform_1.TsMorphAngularProjectTransformRule)(options, (project) => {
const sourceFile = (0, ts_morph_1.CoerceSourceFile)(project, fileName);
const classDeclaration = (0, ts_morph_1.CoerceClass)(sourceFile, className, {
isExported: true,
decorators: [
{
name: 'Pipe',
arguments: [ts_morph_2.Writers.object({
name: w => w.quote((0, utilities_1.camelize)(name)),
pure: pure ? 'true' : 'false',
standalone: 'true',
})],
},
],
implements: ['PipeTransform'],
methods: [
{
name: 'transform',
parameters: [{ name: 'value', type: valueType }],
statements: [
'return value;',
],
},
],
});
(0, ts_morph_1.CoerceClass)(sourceFile, moduleClassName, {
isExported: true,
decorators: [
{
name: 'NgModule',
arguments: [
ts_morph_2.Writers.object({
imports: `[${className}]`,
exports: `[${className}]`,
}),
],
},
],
});
(0, ts_morph_1.CoerceImports)(sourceFile, {
moduleSpecifier: '@angular/core',
namedImports: ['NgModule', 'Pipe', 'PipeTransform'],
});
tsMorphTransform(project, sourceFile, classDeclaration);
});
}
//# sourceMappingURL=coerce-pipe.js.map