UNPKG

@o3r/rules-engine

Version:

This module provides a rule engine that can be executed on your Otter application to customize your application (translations, placeholders and configs) based on a json file generated by your CMS.

103 lines 5.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ngAdd = void 0; const tslib_1 = require("tslib"); const fs = tslib_1.__importStar(require("node:fs")); const path = tslib_1.__importStar(require("node:path")); const schematics_1 = require("@angular-devkit/schematics"); const utility_1 = require("@schematics/angular/utility"); const ast_utils_1 = require("@schematics/angular/utility/ast-utils"); const ts = tslib_1.__importStar(require("typescript")); const cms_adapter_1 = require("../cms-adapter"); const devtools_registration_1 = require("./helpers/devtools-registration"); const devDependenciesToInstall = [ 'jsonpath-plus' ]; const reportMissingSchematicsDep = (logger) => (reason) => { logger.error(`[ERROR]: Adding @o3r/rules-engine has failed. If the error is related to missing @o3r dependencies you need to install '@o3r/core' to be able to use the rules-engine package. Please run 'ng add @o3r/core' . Otherwise, use the error message as guidance.`); throw reason; }; const updateAppModuleOrAppConfig = (projectName) => async (tree, context) => { const { getAppModuleFilePath } = await Promise.resolve().then(() => tslib_1.__importStar(require('@o3r/schematics'))); const moduleFilePath = getAppModuleFilePath(tree, context, projectName); if (!moduleFilePath) { return () => tree; } const sourceFileContent = tree.readText(moduleFilePath); const sourceFile = ts.createSourceFile(moduleFilePath, sourceFileContent, ts.ScriptTarget.ES2015, true); if ((0, ast_utils_1.isImported)(sourceFile, 'RulesEngineRunnerModule', '@o3r/rules-engine')) { return () => tree; } return (0, utility_1.addRootImport)(projectName, ({ code, external }) => code `\n${external('RulesEngineRunnerModule', '@o3r/rules-engine')}.forRoot()`); }; /** * Add Otter rules-engine to an Angular Project * @param options */ function ngAddFn(options) { /* ng add rules */ return async (tree, context) => { const { setupDependencies, getPackageInstallConfig, getDefaultOptionsForSchematic, getO3rPeerDeps, getProjectNewDependenciesTypes, getWorkspaceConfig, getExternalDependenciesVersionRange, removePackages, setupSchematicsParamsForProject, registerPackageCollectionSchematics } = await Promise.resolve().then(() => tslib_1.__importStar(require('@o3r/schematics'))); options = { ...getDefaultOptionsForSchematic(getWorkspaceConfig(tree), '@o3r/rules-engine', 'ng-add', options), ...options }; const packageJsonPath = path.resolve(__dirname, '..', '..', 'package.json'); const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, { encoding: 'utf8' })); const depsInfo = getO3rPeerDeps(packageJsonPath); if (options.enableMetadataExtract) { depsInfo.o3rPeerDeps = [...depsInfo.o3rPeerDeps, '@o3r/extractors']; } const workspaceProject = options.projectName ? getWorkspaceConfig(tree)?.projects[options.projectName] : undefined; const dependencies = depsInfo.o3rPeerDeps.reduce((acc, dep) => { acc[dep] = { inManifest: [{ range: `${options.exactO3rVersion ? '' : '~'}${depsInfo.packageVersion}`, types: getProjectNewDependenciesTypes(workspaceProject) }], ngAddOptions: { exactO3rVersion: options.exactO3rVersion } }; return acc; }, getPackageInstallConfig(packageJsonPath, tree, options.projectName, false, !!options.exactO3rVersion)); Object.entries(getExternalDependenciesVersionRange(devDependenciesToInstall, packageJsonPath, context.logger)) .forEach(([dep, range]) => { dependencies[dep] = { inManifest: [{ range, types: getProjectNewDependenciesTypes(workspaceProject) }] }; }); const schematicsDefaultOptions = { useRulesEngine: undefined }; const rule = (0, schematics_1.chain)([ registerPackageCollectionSchematics(packageJson), setupSchematicsParamsForProject({ '@o3r/core:component': schematicsDefaultOptions, '@o3r/core:component-container': schematicsDefaultOptions }, options.projectName), removePackages(['@otter/rules-engine', '@otter/rules-engine-core']), setupDependencies({ projectName: options.projectName, dependencies, ngAddToRun: depsInfo.o3rPeerDeps }), ...(options.enableMetadataExtract ? [(0, cms_adapter_1.updateCmsAdapter)(options)] : []), await (0, devtools_registration_1.registerDevtools)(options), updateAppModuleOrAppConfig(options.projectName) ]); context.logger.info(`The package ${depsInfo.packageName} comes with a debug mechanism`); context.logger.info('Get information on https://github.com/AmadeusITGroup/otter/tree/main/docs/rules-engine/how-to-use/debug.md'); return rule; }; } /** * Add Otter rules-engine to an Angular Project * @param options */ const ngAdd = (options) => async (_, { logger }) => { const { createOtterSchematic } = await Promise.resolve().then(() => tslib_1.__importStar(require('@o3r/schematics'))).catch(reportMissingSchematicsDep(logger)); return createOtterSchematic(ngAddFn)(options); }; exports.ngAdd = ngAdd; //# sourceMappingURL=index.js.map