UNPKG

@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
"use strict"; 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