@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
86 lines • 4.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoerceFormProvidersFile = CoerceFormProvidersFile;
const schematics_utilities_1 = require("@rxap/schematics-utilities");
const ts_morph_1 = require("ts-morph");
const coerce_source_file_1 = require("../coerce-source-file");
const ts_morph_transform_1 = require("../ts-morph-transform");
const coerce_function_1 = require("../ts-morph/coerce-function");
const coerce_imports_1 = require("../ts-morph/coerce-imports");
const coerce_statements_1 = require("../ts-morph/coerce-statements");
const coerce_form_builder_provider_1 = require("./coerce-form-builder-provider");
const coerce_form_component_provider_1 = require("./coerce-form-component-provider");
const coerce_form_provider_1 = require("./coerce-form-provider");
function CoerceFormProvidersFile(options) {
const { name } = options;
const className = (0, schematics_utilities_1.CoerceSuffix)((0, schematics_utilities_1.classify)(name), 'Form');
const interfaceName = `I${className}`;
return (0, ts_morph_transform_1.TsMorphAngularProjectTransformRule)(options, (project) => {
const sourceFile = (0, coerce_source_file_1.CoerceSourceFile)(project, '/form.providers.ts');
if (sourceFile.getStatements().some(statement => statement.getText().includes(`// rxap-no-index-export`))) {
sourceFile.addStatements('// rxap-no-index-export');
}
(0, coerce_form_provider_1.CoerceFormProvider)(sourceFile, className);
(0, coerce_form_component_provider_1.CoerceFormComponentProvider)(sourceFile, {
provide: 'RXAP_FORM_DEFINITION',
useFactory: 'FormFactory',
deps: ['INJECTOR', '[ new Optional(), RXAP_FORM_INITIAL_STATE ]'],
});
(0, coerce_form_builder_provider_1.CoerceFormBuilderProvider)(sourceFile, {
provide: 'RXAP_FORM_DEFINITION_BUILDER',
useFactory: 'FormBuilderFactory',
deps: ['INJECTOR'],
});
const formFactoryFunctionDeclaration = (0, coerce_function_1.CoerceFunction)(sourceFile, 'FormFactory', {
parameters: [
{
name: 'injector',
type: 'Injector',
},
{
name: 'state',
type: ts_morph_1.Writers.unionType(interfaceName, 'null'),
},
],
returnType: className,
isExported: true,
});
(0, coerce_statements_1.CoerceStatements)(formFactoryFunctionDeclaration, [
`return new RxapFormBuilder<${interfaceName}>(${className}, injector).build(state ?? {});`,
]);
const formBuilderFactoryDeclaration = (0, coerce_function_1.CoerceFunction)(sourceFile, 'FormBuilderFactory', {
parameters: [
{
name: 'injector',
type: 'Injector',
},
],
returnType: `RxapFormBuilder<I${className}>`,
});
(0, coerce_statements_1.CoerceStatements)(formBuilderFactoryDeclaration, [
`return new RxapFormBuilder<${interfaceName}>(${className}, injector);`,
]);
(0, coerce_imports_1.CoerceImports)(sourceFile, {
namedImports: [className, interfaceName],
moduleSpecifier: `./${name}.form`,
});
(0, coerce_imports_1.CoerceImports)(sourceFile, {
namedImports: [
'INJECTOR',
'Injector',
'Optional',
],
moduleSpecifier: '@angular/core',
});
(0, coerce_imports_1.CoerceImports)(sourceFile, {
namedImports: [
'RxapFormBuilder',
'RXAP_FORM_DEFINITION_BUILDER',
'RXAP_FORM_DEFINITION',
'RXAP_FORM_INITIAL_STATE',
],
moduleSpecifier: '@rxap/forms',
});
});
}
//# sourceMappingURL=coerce-form-providers-file.js.map