UNPKG

@spartacus/schematics

Version:
111 lines 5.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.addSSR = void 0; const core_1 = require("@angular-devkit/core"); const schematics_1 = require("@angular-devkit/schematics"); const ast_utils_1 = require("@schematics/angular/utility/ast-utils"); const dependencies_1 = require("@schematics/angular/utility/dependencies"); const dependencies_json_1 = __importDefault(require("../dependencies.json")); const constants_1 = require("../shared/constants"); const file_utils_1 = require("../shared/utils/file-utils"); const html_utils_1 = require("../shared/utils/html-utils"); const lib_utils_1 = require("../shared/utils/lib-utils"); const module_file_utils_1 = require("../shared/utils/module-file-utils"); const package_utils_1 = require("../shared/utils/package-utils"); const DEPENDENCY_NAMES = [ '@angular/platform-server', constants_1.NGUNIVERSAL_EXPRESS_ENGINE, 'ts-loader', ]; function modifyAppServerModuleFile() { return (tree, context) => { const appServerModulePath = file_utils_1.getPathResultsForFile(tree, 'app.server.module.ts', '/src')[0]; if (!appServerModulePath) { throw new schematics_1.SchematicsException(`Project file "app.server.module.ts" not found.`); } module_file_utils_1.addImport(tree, appServerModulePath, 'ServerTransferStateModule', '@angular/platform-server'); module_file_utils_1.addToModuleImportsAndCommitChanges(tree, appServerModulePath, `ServerTransferStateModule`); context.logger.log('info', `✅️ Modified app.server.module.ts file.`); return tree; }; } function modifyIndexHtmlFile(options) { return (tree) => { const buffer = tree.read('src/index.html'); if (buffer) { const indexContent = buffer.toString(); if (!indexContent.includes('<meta name="occ-backend-base-url"')) { const projectIndexHtmlPath = file_utils_1.getIndexHtmlPath(tree); const baseUrl = options.baseUrl || 'OCC_BACKEND_BASE_URL_VALUE'; const metaTags = [ `<meta name="occ-backend-base-url" content="${baseUrl}" />`, ]; metaTags.forEach((metaTag) => { html_utils_1.appendHtmlElementToHead(tree, projectIndexHtmlPath, metaTag); }); } } return tree; }; } function provideServerFile(options) { return schematics_1.apply(schematics_1.url('./files'), [ schematics_1.template(Object.assign(Object.assign(Object.assign({}, core_1.strings), options), { typescriptExt: 'ts', browserDistDirectory: `dist/${options.project}/browser` })), schematics_1.move('.'), ]); } function modifyAppModuleFile() { return (tree, context) => { const appModulePath = file_utils_1.getPathResultsForFile(tree, 'app.module.ts', '/src')[0]; if (!appModulePath) { throw new schematics_1.SchematicsException(`Project file "app.module.ts" not found.`); } const moduleSource = file_utils_1.getTsSourceFile(tree, appModulePath); if (!ast_utils_1.isImported(moduleSource, 'BrowserTransferStateModule', constants_1.ANGULAR_PLATFORM_BROWSER)) { module_file_utils_1.addImport(tree, appModulePath, 'BrowserTransferStateModule', constants_1.ANGULAR_PLATFORM_BROWSER); module_file_utils_1.addToModuleImportsAndCommitChanges(tree, appModulePath, `BrowserTransferStateModule`); } context.logger.log('info', `✅️ Modified app.module.ts file.`); return tree; }; } function prepareDependencies() { const spartacusVersion = package_utils_1.getPrefixedSpartacusSchematicsVersion(); const spartacusDependencies = []; spartacusDependencies.push({ type: dependencies_1.NodeDependencyType.Default, version: spartacusVersion, name: constants_1.SPARTACUS_SETUP, }); const thirdPartyDependencies = []; for (const dependencyName of DEPENDENCY_NAMES) { thirdPartyDependencies.push({ type: dependencies_1.NodeDependencyType.Default, version: dependencies_json_1.default.storefrontapp[dependencyName], name: dependencyName, }); } return spartacusDependencies.concat(thirdPartyDependencies); } function addSSR(options) { return (tree, context) => { const serverTemplate = provideServerFile(options); const packageJson = package_utils_1.readPackageJson(tree); return schematics_1.chain([ lib_utils_1.addPackageJsonDependencies(prepareDependencies(), packageJson), schematics_1.externalSchematic(constants_1.NGUNIVERSAL_EXPRESS_ENGINE, 'ng-add', { project: options.project, }), modifyAppServerModuleFile(), modifyIndexHtmlFile(options), schematics_1.branchAndMerge(schematics_1.chain([schematics_1.mergeWith(serverTemplate, schematics_1.MergeStrategy.Overwrite)]), schematics_1.MergeStrategy.Overwrite), modifyAppModuleFile(), lib_utils_1.installPackageJsonDependencies(), ])(tree, context); }; } exports.addSSR = addSSR; //# sourceMappingURL=index.js.map