@rxap/ts-morph
Version:
Provides utilities for manipulating TypeScript code using the ts-morph library. It offers a fluent API to add, modify, and remove code elements such as classes, decorators, imports, and properties in both Angular and NestJS projects. This package simplifi
67 lines • 3.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoerceRxapDataSourceDecorator = CoerceRxapDataSourceDecorator;
exports.CoerceExtendsBaseDataSource = CoerceExtendsBaseDataSource;
exports.CoerceDataSourceClass = CoerceDataSourceClass;
const coerce_class_1 = require("../coerce-class");
const coerce_decorator_1 = require("../coerce-decorator");
const coerce_imports_1 = require("../coerce-imports");
const utilities_1 = require("@rxap/utilities");
function CoerceRxapDataSourceDecorator(sourceFile, classDeclaration, options) {
(0, coerce_decorator_1.CoerceDecorator)(classDeclaration, options.decorator.name, { arguments: [options.decorator.argument] });
(0, coerce_imports_1.CoerceImports)(sourceFile, {
moduleSpecifier: options.decorator.moduleSpecifier,
namedImports: [options.decorator.name],
});
}
function CoerceExtendsBaseDataSource(sourceFile, classDeclaration, options) {
if (!classDeclaration.getExtends()) {
classDeclaration.setExtends(options.extends.name);
(0, coerce_imports_1.CoerceImports)(sourceFile, [
{
moduleSpecifier: options.extends.moduleSpecifier,
namedImports: [options.extends.name],
},
]);
}
}
function CoerceDataSourceClass(sourceFile, options) {
var _a, _b, _c;
var _d;
const { providedInRoot, name, coerceDecorator = CoerceRxapDataSourceDecorator, coerceExtends = CoerceExtendsBaseDataSource, } = options;
// the option object will be used in hooks. so it is required to modify the object directly to keep the reference
// intact instead of using the object destruction
(_a = options.extends) !== null && _a !== void 0 ? _a : (options.extends = {
name: 'BaseDataSource',
moduleSpecifier: '@rxap/data-source',
});
(_b = options.decorator) !== null && _b !== void 0 ? _b : (options.decorator = {
name: 'RxapDataSource',
moduleSpecifier: '@rxap/data-source',
});
(_c = (_d = options.decorator).argument) !== null && _c !== void 0 ? _c : (_d.argument = w => w.quote(options.name));
const className = (0, utilities_1.classify)((0, utilities_1.CoerceSuffix)(name, 'DataSource'));
const classDeclaration = (0, coerce_class_1.CoerceClass)(sourceFile, className, {
isExported: true,
decorators: [
{
name: 'Injectable',
arguments: [
w => {
if (providedInRoot) {
w.write(`{ providedIn: 'root' }`);
}
},
],
},
],
});
coerceDecorator(sourceFile, classDeclaration, options);
coerceExtends(sourceFile, classDeclaration, options);
(0, coerce_imports_1.CoerceImports)(sourceFile, {
moduleSpecifier: '@angular/core',
namedImports: ['Injectable'],
});
return classDeclaration;
}
//# sourceMappingURL=coerce-data-source-class.js.map