@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
45 lines • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AddFakeProvider = AddFakeProvider;
const get_array_declaration_1 = require("./get-array-declaration");
const is_array_literal_expression_1 = require("./is-array-literal-expression");
const coerce_variable_declaration_1 = require("./coerce-variable-declaration");
const add_provider_to_array_1 = require("./add-provider-to-array");
const coerce_imports_1 = require("./ts-morph/coerce-imports");
function AddFakeProvider(sourceFile, fakeProviderObject, realProviderObject, fakeName, overwrite = false) {
var _a, _b, _c, _d, _e, _f, _g, _h;
const hasFakeProviderFactory = !!sourceFile.getVariableStatement('FAKE_PROVIDER_FACTORY');
(0, coerce_variable_declaration_1.CoerceVariableDeclaration)(sourceFile, 'FAKE_PROVIDER_FACTORY', {
initializer: `IsFaked('${fakeName}') ? FAKE_PROVIDERS : REAL_PROVIDERS`,
});
const fakeArrayDeclaration = (0, get_array_declaration_1.GetArrayDeclaration)(sourceFile, 'FAKE_PROVIDERS', 'Provider[]');
const realArrayDeclaration = (0, get_array_declaration_1.GetArrayDeclaration)(sourceFile, 'REAL_PROVIDERS', 'Provider[]');
const fakeArrayInitializer = fakeArrayDeclaration.getInitializer();
(0, is_array_literal_expression_1.AssertArrayLiteralExpression)(fakeArrayInitializer, 'FAKE_PROVIDERS');
if (fakeProviderObject) {
(0, add_provider_to_array_1.AddProviderToArray)(fakeProviderObject, fakeArrayInitializer, overwrite);
}
const realArrayInitializer = realArrayDeclaration.getInitializer();
(0, is_array_literal_expression_1.AssertArrayLiteralExpression)(realArrayInitializer, 'REAL_PROVIDERS');
if (realProviderObject) {
(0, add_provider_to_array_1.AddProviderToArray)(realProviderObject, realArrayInitializer, overwrite);
}
(0, coerce_imports_1.CoerceImports)(sourceFile, {
moduleSpecifier: '@angular/core',
namedImports: ['Provider'],
});
(0, coerce_imports_1.CoerceImports)(sourceFile, {
moduleSpecifier: '@rxap/fake',
namedImports: ['IsFaked'],
});
// region order variable statements
// ensures that the variable declaration is before the component decorator
if (!hasFakeProviderFactory) {
// only re order if the member were added in this method
const classOrder = Math.max((_b = (_a = sourceFile.getVariableStatement('FAKE_PROVIDER_FACTORY')) === null || _a === void 0 ? void 0 : _a.getChildIndex()) !== null && _b !== void 0 ? _b : 0, (_d = (_c = sourceFile.getVariableStatement('FAKE_PROVIDERS')) === null || _c === void 0 ? void 0 : _c.getChildIndex()) !== null && _d !== void 0 ? _d : 0, (_f = (_e = sourceFile.getVariableStatement('REAL_PROVIDERS')) === null || _e === void 0 ? void 0 : _e.getChildIndex()) !== null && _f !== void 0 ? _f : 0);
(_g = sourceFile.getVariableStatement('FAKE_PROVIDER_FACTORY')) === null || _g === void 0 ? void 0 : _g.setOrder(classOrder);
(_h = sourceFile.getClasses()[0]) === null || _h === void 0 ? void 0 : _h.setOrder(classOrder);
}
// endregion
}
//# sourceMappingURL=add-fake-provider.js.map