@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
73 lines • 4.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoerceOpenApiTableActionRule = CoerceOpenApiTableActionRule;
const schematics_utilities_1 = require("@rxap/schematics-utilities");
const ts_morph_1 = require("@rxap/ts-morph");
const utilities_1 = require("@rxap/utilities");
const ts_morph_2 = require("ts-morph");
const coerce_table_action_1 = require("./coerce-table-action");
const toMappingObjectOptions = {
aliasFnc: (key, value) => {
if (['rowId', '_rowId', '__rowId'].includes(value)) {
return '__rowId';
}
return value;
},
};
function CoerceOpenApiTableActionRule(options) {
const { tsMorphTransform = utilities_1.noop, operationId, body, parameters, type, scope, tableName, } = options;
return (0, coerce_table_action_1.CoerceTableActionRule)(Object.assign(Object.assign({}, options), { tsMorphTransform: (project, sourceFile, classDeclaration) => {
var _a;
(0, ts_morph_1.CoerceDependencyInjection)(sourceFile, {
injectionToken: (0, ts_morph_1.OperationIdToRemoteMethodClassName)(operationId),
parameterName: 'method',
scope: ts_morph_2.Scope.Private,
module: ts_morph_1.Module.ANGULAR,
});
(0, ts_morph_1.CoerceImports)(sourceFile, {
namedImports: [(0, ts_morph_1.OperationIdToRemoteMethodClassName)(operationId)],
moduleSpecifier: (0, ts_morph_1.OperationIdToClassRemoteMethodImportPath)(operationId, scope),
});
const statements = [`console.log(\`action row type: ${type}\`, parameters);`];
const tableInterfaceName = `I${(0, schematics_utilities_1.classify)(tableName)}`;
if (body) {
(0, ts_morph_1.CoerceMappingClassMethod)(sourceFile, classDeclaration, {
name: 'getBody',
parameterType: tableInterfaceName,
mapping: body,
returnType: (0, ts_morph_1.OperationIdToRequestBodyClassName)(operationId),
mappingOptions: toMappingObjectOptions,
});
(0, ts_morph_1.CoerceImports)(sourceFile, {
namedImports: [(0, ts_morph_1.OperationIdToRequestBodyClassName)(operationId)],
moduleSpecifier: (0, ts_morph_1.OperationIdToRequestBodyClassImportPath)(operationId, scope),
});
statements.push(`const requestBody = this.getBody(parameters);`);
}
if (parameters) {
(0, ts_morph_1.CoerceMappingClassMethod)(sourceFile, classDeclaration, {
name: 'getParameters',
parameterType: tableInterfaceName,
mapping: parameters,
returnType: (0, ts_morph_1.OperationIdToParameterClassName)(operationId),
mappingOptions: toMappingObjectOptions,
});
(0, ts_morph_1.CoerceImports)(sourceFile, {
namedImports: [(0, ts_morph_1.OperationIdToParameterClassName)(operationId)],
moduleSpecifier: (0, ts_morph_1.OperationIdToParameterClassImportPath)(operationId, scope),
});
statements.push(`const requestParameters = this.getParameters(parameters);`);
}
if (body && parameters) {
statements.push(`return this.method.call({ parameters: requestParameters, requestBody });`);
}
else if (body) {
statements.push(`return this.method.call({ requestBody });`);
}
else if (parameters) {
statements.push(`return this.method.call({ parameters: requestParameters });`);
}
return Object.assign({ statements: statements, returnType: `Promise<any>` }, (_a = tsMorphTransform(project, sourceFile, classDeclaration)) !== null && _a !== void 0 ? _a : {});
} }));
}
//# sourceMappingURL=coerce-open-api-table-action.js.map