@spartacus/schematics
Version:
Spartacus schematics
169 lines • 6.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.addSpartacusConfiguration = void 0;
const schematics_1 = require("@angular-devkit/schematics");
const constants_1 = require("../shared/constants");
const new_module_utils_1 = require("../shared/utils/new-module-utils");
const package_utils_1 = require("../shared/utils/package-utils");
const program_1 = require("../shared/utils/program");
const project_tsconfig_paths_1 = require("../shared/utils/project-tsconfig-paths");
const transform_utils_1 = require("../shared/utils/transform-utils");
function addSpartacusConfiguration(options) {
return (tree) => {
const { buildPaths } = project_tsconfig_paths_1.getProjectTsConfigPaths(tree, options.project);
if (!buildPaths.length) {
throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot configure SpartacusConfigurationModule.');
}
const basePath = process.cwd();
for (const tsconfigPath of buildPaths) {
addConfiguration(tree, tsconfigPath, basePath, options);
}
return tree;
};
}
exports.addSpartacusConfiguration = addSpartacusConfiguration;
function addConfiguration(tree, tsconfigPath, basePath, options) {
const { appSourceFiles } = program_1.createProgram(tree, basePath, tsconfigPath);
for (const sourceFile of appSourceFiles) {
if (sourceFile
.getFilePath()
.includes(`${constants_1.SPARTACUS_CONFIGURATION_MODULE}.module.ts`)) {
addCommonConfiguration(sourceFile, options);
program_1.saveAndFormat(sourceFile);
break;
}
}
}
function addCommonConfiguration(sourceFile, options) {
new_module_utils_1.addModuleProvider(sourceFile, {
import: [
{
moduleSpecifier: constants_1.SPARTACUS_CORE,
namedImports: [constants_1.PROVIDE_CONFIG_FUNCTION],
},
{
moduleSpecifier: constants_1.SPARTACUS_STOREFRONTLIB,
namedImports: ['layoutConfig'],
},
],
content: `provideConfig(layoutConfig)`,
});
new_module_utils_1.addModuleProvider(sourceFile, {
import: [
{
moduleSpecifier: constants_1.SPARTACUS_CORE,
namedImports: [constants_1.PROVIDE_CONFIG_FUNCTION],
},
{
moduleSpecifier: constants_1.SPARTACUS_STOREFRONTLIB,
namedImports: ['mediaConfig'],
},
],
content: `provideConfig(mediaConfig)`,
});
new_module_utils_1.addModuleProvider(sourceFile, {
import: {
moduleSpecifier: constants_1.SPARTACUS_STOREFRONTLIB,
namedImports: ['defaultCmsContentProviders'],
},
content: `...defaultCmsContentProviders`,
});
addStorefrontConfig(sourceFile, options);
}
function createSiteContextConfig(options) {
const currency = transform_utils_1.parseCSV(options.currency, ['USD']).toUpperCase();
const language = transform_utils_1.parseCSV(options.language, ['en']).toLowerCase();
let contextConfig = `
context: {
currency: [${currency}],
language: [${language}],`;
if (options.baseSite) {
const baseSites = transform_utils_1.parseCSV(options.baseSite);
contextConfig += `\nbaseSite: [${baseSites}],`;
}
if (options.urlParameters) {
const urlParameters = transform_utils_1.parseCSV(options.urlParameters);
contextConfig += `\nurlParameters: [${urlParameters}]`;
}
contextConfig += `},`;
return `provideConfig(<${constants_1.SITE_CONTEXT_CONFIG}>{${contextConfig}})`;
}
/**
* Creates and adds a spartacus config based on the provided `options`.
* @param options
*/
function addStorefrontConfig(sourceFile, options) {
const backendConfig = createBackendConfiguration(options);
new_module_utils_1.addModuleProvider(sourceFile, {
import: [
{
moduleSpecifier: constants_1.SPARTACUS_CORE,
namedImports: [constants_1.PROVIDE_CONFIG_FUNCTION, constants_1.OCC_CONFIG],
},
],
content: backendConfig,
});
const siteContextConfig = createSiteContextConfig(options);
new_module_utils_1.addModuleProvider(sourceFile, {
import: [
{
moduleSpecifier: constants_1.SPARTACUS_CORE,
namedImports: [constants_1.PROVIDE_CONFIG_FUNCTION, constants_1.SITE_CONTEXT_CONFIG],
},
],
content: siteContextConfig,
});
const i18nConfig = createI18NConfiguration();
new_module_utils_1.addModuleProvider(sourceFile, {
import: [
{
moduleSpecifier: constants_1.SPARTACUS_CORE,
namedImports: [constants_1.PROVIDE_CONFIG_FUNCTION, constants_1.I18N_CONFIG],
},
{
moduleSpecifier: constants_1.SPARTACUS_ASSETS,
namedImports: ['translations', 'translationChunksConfig'],
},
],
content: i18nConfig,
});
const featureLevelConfig = createFeatureLevelConfiguration(options);
new_module_utils_1.addModuleProvider(sourceFile, {
import: [
{
moduleSpecifier: constants_1.SPARTACUS_CORE,
namedImports: [constants_1.PROVIDE_CONFIG_FUNCTION, constants_1.FEATURES_CONFIG],
},
],
content: featureLevelConfig,
});
}
function createBackendConfiguration(options) {
const baseUrlPart = `\n baseUrl: '${options.baseUrl}',`;
const occPrefixPart = options.occPrefix
? `prefix: '${options.occPrefix}'`
: '';
return `provideConfig(<${constants_1.OCC_CONFIG}>{
backend: {
occ: {${options.useMetaTags ? '' : baseUrlPart}${occPrefixPart}
}
},
})`;
}
function createI18NConfiguration() {
return `provideConfig(<${constants_1.I18N_CONFIG}>{
i18n: {
resources: translations,
chunks: translationChunksConfig,
fallbackLang: 'en'
},
})`;
}
function createFeatureLevelConfiguration(options) {
const featureLevelConfig = `
features: {
level: '${options.featureLevel || package_utils_1.getSpartacusCurrentFeatureLevel()}'
}`;
return `provideConfig(<${constants_1.FEATURES_CONFIG}>{${featureLevelConfig}})`;
}
//# sourceMappingURL=configuration.js.map