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.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CoerceInterfaceFormTypeArray = CoerceInterfaceFormTypeArray; exports.GetFormArrayNameFromFormDefinitionName = GetFormArrayNameFromFormDefinitionName; exports.CoerceFormArray = CoerceFormArray; exports.CoerceFormDefinitionFormArray = CoerceFormDefinitionFormArray; const schematics_utilities_1 = require("@rxap/schematics-utilities"); const ts_morph_1 = require("@rxap/ts-morph"); const ts_morph_2 = require("ts-morph"); const coerce_interface_1 = require("../ts-morph/coerce-interface"); const coerce_form_definition_control_1 = require("./coerce-form-definition-control"); const form_definition_utilities_1 = require("./form-definition-utilities"); function CoerceInterfaceFormTypeArray(sourceFile, classDeclaration, formTypeName, control) { if (sourceFile.getTypeAlias(formTypeName)) { console.log(`Type alias ${formTypeName} already exists! Skip interface generation`); return; } const interfaceDeclaration = (0, coerce_interface_1.CoerceInterface)(sourceFile, formTypeName); interfaceDeclaration.setIsExported(true); const formArrayName = GetFormArrayNameFromFormDefinitionName(classDeclaration.getName(), control.name); (0, ts_morph_1.CoercePropertyDeclaration)(interfaceDeclaration, (0, schematics_utilities_1.camelize)(control.name)).set({ type: (0, ts_morph_1.WriteType)({ type: { name: (0, form_definition_utilities_1.GetFormDefinitionInterfaceName)({ name: formArrayName }), moduleSpecifier: (0, form_definition_utilities_1.GetFormDefinitionFileImportPath)({ name: formArrayName }), }, isArray: true, }, sourceFile), hasQuestionToken: control.isOptional, }); } function GetFormArrayNameFromFormDefinitionName(name, groupName) { return [name.replace(/Form$/, ''), groupName].join('-'); } function CoerceFormArray(sourceFile, classDeclaration, formTypeName, control) { const formArrayName = GetFormArrayNameFromFormDefinitionName(classDeclaration.getName(), control.name); (0, ts_morph_1.CoerceImports)(sourceFile, { namedImports: [(0, form_definition_utilities_1.GetFormDefinitionInterfaceName)({ name: formArrayName }), (0, form_definition_utilities_1.GetFormDefinitionClassName)({ name: formArrayName })], moduleSpecifier: (0, form_definition_utilities_1.GetFormDefinitionFileImportPath)({ name: formArrayName }), }); const propertyDeclaration = (0, ts_morph_1.CoercePropertyDeclaration)(classDeclaration, (0, schematics_utilities_1.camelize)(control.name)).set({ type: w => { w.write('FormDefinitionArray<'); w.write((0, form_definition_utilities_1.GetFormDefinitionClassName)({ name: formArrayName })); w.write('>'); }, hasExclamationToken: true, scope: ts_morph_2.Scope.Public, isReadonly: true, }); const decoratorDeclaration = (0, ts_morph_1.CoerceDecorator)(propertyDeclaration, 'UseFormArrayGroup').set({ arguments: [ (0, form_definition_utilities_1.GetFormDefinitionClassName)({ name: formArrayName }), w => { var _a; const items = {}; if (((_a = control.validatorList) === null || _a === void 0 ? void 0 : _a.length) || control.isRequired) { items['validators'] = (0, coerce_form_definition_control_1.FormControlValidatorCodeBlockWriter)(sourceFile, control); } if (control.state) { items['state'] = (0, coerce_form_definition_control_1.FormControlStateCodeBlockWriter)(sourceFile, control); } else if (control.isArray) { items['state'] = '[]'; } if (Object.keys(items).length) { ts_morph_2.Writers.object(items)(w); } }, ], }); (0, ts_morph_1.CoerceImports)(sourceFile, { namedImports: ['UseFormArrayGroup', 'FormDefinitionArray'], moduleSpecifier: '@rxap/forms', }); return { propertyDeclaration, decoratorDeclaration, }; } function CoerceFormDefinitionFormArray(options) { const { coerceFormControl = CoerceFormArray, coerceFormTypeControl = CoerceInterfaceFormTypeArray, } = options; return (0, coerce_form_definition_control_1.CoerceFormDefinitionControl)(Object.assign(Object.assign({}, options), { coerceFormControl, coerceFormTypeControl })); } //# sourceMappingURL=coerce-form-definition-array.js.map