@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
83 lines • 4.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultDialogSubmitMethod = DefaultDialogSubmitMethod;
exports.CoerceDialogComponentRule = CoerceDialogComponentRule;
const schematics_1 = require("@angular-devkit/schematics");
const coerce_class_constructor_1 = require("../coerce-class-constructor");
const coerce_class_method_1 = require("../coerce-class-method");
const coerce_class_property_1 = require("../ts-morph/coerce-class-property");
const coerce_imports_1 = require("../ts-morph/coerce-imports");
const coerce_parameter_declaration_1 = require("../ts-morph/coerce-parameter-declaration");
const add_component_import_1 = require("./add-component-import");
const coerce_component_1 = require("./coerce-component");
function DefaultDialogSubmitMethod(classDeclaration, options) {
(0, coerce_class_method_1.CoerceClassMethod)(classDeclaration, 'submit', {
isAsync: true,
statements: ['this.matDialogRef.close(true);'],
});
}
function CoerceDialogComponentRule(options) {
let { template, coerceSubmitMethod, tsMorphTransform, directory, overwrite, title, dialogName, project, feature, flat, } = options;
// eslint-disable-next-line @typescript-eslint/no-empty-function
tsMorphTransform !== null && tsMorphTransform !== void 0 ? tsMorphTransform : (tsMorphTransform = () => {
});
coerceSubmitMethod !== null && coerceSubmitMethod !== void 0 ? coerceSubmitMethod : (coerceSubmitMethod = DefaultDialogSubmitMethod);
return (0, schematics_1.chain)([
() => console.log('Coerce dialog component ...'),
(0, coerce_component_1.CoerceComponentRule)({
project,
name: dialogName,
feature,
directory,
overwrite,
template,
flat,
tsMorphTransform: (_, [componentSourceFile], [componentClass]) => {
(0, add_component_import_1.AddComponentImport)(componentSourceFile, 'MatDialogModule', '@angular/material/dialog');
(0, add_component_import_1.AddComponentImport)(componentSourceFile, 'MatButtonModule', '@angular/material/button');
(0, add_component_import_1.AddComponentImport)(componentSourceFile, 'MatProgressBarModule', '@angular/material/progress-bar');
(0, add_component_import_1.AddComponentImport)(componentSourceFile, 'CommonModule', '@angular/common');
(0, coerce_class_property_1.CoerceClassProperty)(componentClass, 'loading$', {
initializer: `new ToggleSubject(true)`,
isReadonly: true,
});
(0, coerce_class_property_1.CoerceClassProperty)(componentClass, 'invalid$', {
initializer: `new ToggleSubject(true)`,
isReadonly: true,
});
(0, coerce_imports_1.CoerceImports)(componentSourceFile, [
{
namedImports: ['ToggleSubject'],
moduleSpecifier: '@rxap/rxjs',
},
{
namedImports: ['MatDialogRef', 'MAT_DIALOG_DATA'],
moduleSpecifier: '@angular/material/dialog',
},
{
namedImports: ['Inject'],
moduleSpecifier: '@angular/core',
},
]);
const [constructorDeclaration] = (0, coerce_class_constructor_1.CoerceClassConstructor)(componentClass);
(0, coerce_parameter_declaration_1.CoerceParameterDeclaration)(constructorDeclaration, 'matDialogRef', {
isReadonly: true,
type: 'MatDialogRef<any>',
});
(0, coerce_parameter_declaration_1.CoerceParameterDeclaration)(constructorDeclaration, 'data', {
isReadonly: true,
type: 'any',
decorators: [
{
name: 'Inject',
arguments: ['MAT_DIALOG_DATA'],
},
],
});
tsMorphTransform(_, [componentSourceFile], [componentClass], options);
coerceSubmitMethod(componentClass, options);
},
}),
]);
}
//# sourceMappingURL=coerce-dialog-component.js.map