UNPKG

@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

70 lines 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AddProviderToArray = AddProviderToArray; const utilities_1 = require("@rxap/utilities"); const ts_morph_1 = require("ts-morph"); function AddProviderToArray(providerObject, providerArray, overwrite = false, compare = (ole, po) => { var _a; const provideProperty = ole.getProperty('provide'); if (provideProperty === null || provideProperty === void 0 ? void 0 : provideProperty.isKind(ts_morph_1.SyntaxKind.PropertyAssignment)) { return ((_a = provideProperty.getInitializer()) === null || _a === void 0 ? void 0 : _a.getText().trim()) === po.provide; } return false; }) { let expression; if (typeof providerObject === 'string') { const index = providerArray.getElements().findIndex(element => { const text = element.getText().trim(); if (text === providerObject) { return true; } const match = providerObject.match(/^[a-zA-Z0-9]+?\(/); if (match) { return text.startsWith(match[0]); } return false; }); if (index === -1) { expression = providerArray.addElement(providerObject); } else if (overwrite) { providerArray.removeElement(index); expression = providerArray.insertElement(index, providerObject); } else { expression = providerArray.getElements()[index]; } } else { let index = providerArray.getElements().findIndex(element => { if (element.isKind(ts_morph_1.SyntaxKind.ObjectLiteralExpression)) { return compare(element, providerObject); } return false; }); if ((overwrite === true || (Array.isArray(overwrite) && overwrite.includes('provider'))) && index !== -1) { providerArray.removeElement(index); index = -1; } if (index === -1) { expression = providerArray.addElement(ts_morph_1.Writers.object((0, utilities_1.DeleteUndefinedProperties)({ provide: providerObject.provide, useClass: providerObject.useClass, useFactory: providerObject.useFactory, useExisting: providerObject.useExisting, useValue: providerObject.useValue, deps: providerObject.deps ? Array.isArray(providerObject.deps) ? `[ ${providerObject.deps.join(',')} ]` : providerObject.deps : undefined, multi: providerObject.multi === true ? w => w.write('true') : providerObject.multi === false ? w => w.write('false') : undefined, }))); } else { expression = providerArray.getElements()[index]; } } return expression; } //# sourceMappingURL=add-provider-to-array.js.map