@spartacus/schematics
Version:
Spartacus schematics
111 lines • 5.37 kB
JavaScript
;
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