@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
79 lines • 4.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GetFormGroupNameFromFormDefinitionName = GetFormGroupNameFromFormDefinitionName;
exports.CoerceInterfaceFormTypeGroup = CoerceInterfaceFormTypeGroup;
exports.CoerceFormGroup = CoerceFormGroup;
exports.CoerceFormDefinitionFormGroup = CoerceFormDefinitionFormGroup;
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 GetFormGroupNameFromFormDefinitionName(name, groupName) {
return [name.replace(/Form$/, ''), groupName].join('-');
}
function CoerceInterfaceFormTypeGroup(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 formGroupName = GetFormGroupNameFromFormDefinitionName(classDeclaration.getName(), control.name);
(0, ts_morph_1.CoercePropertyDeclaration)(interfaceDeclaration, (0, schematics_utilities_1.camelize)(control.name)).set({
type: (0, ts_morph_1.WriteType)({
name: (0, form_definition_utilities_1.GetFormDefinitionInterfaceName)({ name: formGroupName }),
moduleSpecifier: (0, form_definition_utilities_1.GetFormDefinitionFileImportPath)({ name: formGroupName }),
}, sourceFile),
hasQuestionToken: control.isOptional,
});
}
function CoerceFormGroup(sourceFile, classDeclaration, formTypeName, control) {
const formGroupName = GetFormGroupNameFromFormDefinitionName(classDeclaration.getName(), control.name);
(0, ts_morph_1.CoerceImports)(sourceFile, {
namedImports: [(0, form_definition_utilities_1.GetFormDefinitionInterfaceName)({ name: formGroupName }), (0, form_definition_utilities_1.GetFormDefinitionClassName)({ name: formGroupName })],
moduleSpecifier: (0, form_definition_utilities_1.GetFormDefinitionFileImportPath)({ name: formGroupName }),
});
const propertyDeclaration = (0, ts_morph_1.CoercePropertyDeclaration)(classDeclaration, (0, schematics_utilities_1.camelize)(control.name)).set({
type: (0, form_definition_utilities_1.GetFormDefinitionClassName)({ name: formGroupName }),
hasExclamationToken: true,
scope: ts_morph_2.Scope.Public,
isReadonly: true,
});
const decoratorDeclaration = (0, ts_morph_1.CoerceDecorator)(propertyDeclaration, 'UseFormGroup').set({
arguments: [
(0, form_definition_utilities_1.GetFormDefinitionClassName)({ name: formGroupName }),
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: ['RxapFormGroup', 'UseFormGroup'],
moduleSpecifier: '@rxap/forms',
});
return {
propertyDeclaration,
decoratorDeclaration,
};
}
function CoerceFormDefinitionFormGroup(options) {
const { coerceFormControl = CoerceFormGroup, coerceFormTypeControl = CoerceInterfaceFormTypeGroup, } = options;
return (0, coerce_form_definition_control_1.CoerceFormDefinitionControl)(Object.assign(Object.assign({}, options), { coerceFormControl,
coerceFormTypeControl }));
}
//# sourceMappingURL=coerce-form-definition-group.js.map