UNPKG

@o3r/apis-manager

Version:

This module provides services to help you communicate with your APIs. Its responsibility is to provide an API configuration to a service factory so that it could instantiate an API with the right configurations. It contains a default configuration and a m

83 lines (82 loc) 4.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateApiDependencies = updateApiDependencies; const schematics_1 = require("@angular-devkit/schematics"); const schematics_2 = require("@o3r/schematics"); const utility_1 = require("@schematics/angular/utility"); const ast_utils_1 = require("@schematics/angular/utility/ast-utils"); const ts = require("typescript"); /** * Update app.module file with api manager, if needed * @param options */ function updateApiDependencies(options) { const updateAppModule = (tree, context) => { const additionalRules = []; const moduleFilePath = (0, schematics_2.getAppModuleFilePath)(tree, context, options.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, 'ApiManagerModule', '@otter/common') || (0, ast_utils_1.isImported)(sourceFile, 'ApiManagerModule', '@o3r/apis-manager')) { return tree; } const recorder = tree.beginUpdate(moduleFilePath); const { moduleIndex } = (0, schematics_2.getModuleIndex)(sourceFile, sourceFileContent); const addImportToModuleFile = (name, file, moduleFunction) => additionalRules.push((0, utility_1.addRootImport)(options.projectName, ({ code, external }) => code `${external(name, file)}${moduleFunction}`)); const insertImportToModuleFile = (name, file, isDefault) => (0, schematics_2.insertImportToModuleFile)(name, file, sourceFile, recorder, moduleFilePath, isDefault); const addProviderToModuleFile = (name, file, customProvider) => additionalRules.push((0, utility_1.addRootProvider)(options.projectName, ({ code, external }) => code `{provide: ${external(name, file)}, ${customProvider}}`)); const insertBeforeModule = (line) => (0, schematics_2.insertBeforeModule)(line, sourceFileContent, recorder, moduleIndex); insertImportToModuleFile('appendPreconnect', '@o3r/apis-manager', false); insertBeforeModule('const PROXY_SERVER = \'https://YOUR_API_ENDPOINT\';'); insertBeforeModule('appendPreconnect(PROXY_SERVER);'); addImportToModuleFile('ApiManagerModule', '@o3r/apis-manager'); if (!options.skipCodeSample) { insertBeforeModule(` export function apiManagerFactory(): ApiManager { const apiClient = new ApiFetchClient({ basePath: PROXY_SERVER, requestPlugins: [new ApiKeyRequest(/* API Key */ 'YOUR_API_KEY', 'Authorization')] }); return new ApiManager(apiClient); }`); addProviderToModuleFile('API_TOKEN', '@o3r/apis-manager', 'useFactory: apiManagerFactory'); insertImportToModuleFile('ApiFetchClient', '@ama-sdk/client-fetch', false); } insertImportToModuleFile('ApiManager', '@o3r/apis-manager', false); insertImportToModuleFile('ApiKeyRequest', '@ama-sdk/core', false); tree.commitUpdate(recorder); context.logger.info('Please update by hand the placeholders for YOUR_API_ENDPOINT and YOUR_API_KEY!'); return (0, schematics_1.chain)(additionalRules)(tree, context); }; const updateTsConfig = (tree, context) => { const workspaceProject = options.projectName ? (0, schematics_2.getWorkspaceConfig)(tree)?.projects[options.projectName] : undefined; const tsconfig = workspaceProject && workspaceProject.architect && workspaceProject.architect.build && workspaceProject.architect.build.options && workspaceProject.architect.build.options.tsConfig; if (!tsconfig) { context.logger.warn('No tsconfig found in build target'); return tree; } ts.parseConfigFileTextToJson(tsconfig, tree.readText(tsconfig)); const tsconfigObj = ts.parseConfigFileTextToJson(tsconfig, tree.readText(tsconfig)).config; if (!tsconfigObj.compilerOptions) { tsconfigObj.compilerOptions = {}; } if (!tsconfigObj.compilerOptions.lib) { tsconfigObj.compilerOptions.lib = []; } tsconfigObj.compilerOptions.lib.push('scripthost', 'es2020', 'dom'); tsconfigObj.compilerOptions.lib = tsconfigObj.compilerOptions.lib.reduce((acc, lib) => acc.includes(lib) ? acc : [...acc, lib], []); tree.overwrite(tsconfig, JSON.stringify(tsconfigObj, null, 2)); return tree; }; return (0, schematics_1.chain)([ updateTsConfig, updateAppModule ]); } //# sourceMappingURL=index.js.map