UNPKG

angular-server-side-configuration

Version:
139 lines 6.67 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ngsscBuild = ngsscBuild; exports.detectVariablesAndBuildNgsscJson = detectVariablesAndBuildNgsscJson; exports.detectVariables = detectVariables; exports.buildNgssc = buildNgssc; const fs_1 = require("fs"); const path_1 = require("path"); const architect_1 = require("@angular-devkit/architect"); const glob = __importStar(require("glob")); const variable_detector_1 = require("./variable-detector"); async function ngsscBuild(options, context) { const buildTarget = (0, architect_1.targetFromTargetString)(options.buildTarget || options.browserTarget); const rawBuilderOptions = await context.getTargetOptions(buildTarget); const builderName = await context.getBuilderNameForTarget(buildTarget); const builderOptions = await context.validateOptions(rawBuilderOptions, builderName); const scheduledTarget = await context.scheduleTarget(buildTarget); const result = await scheduledTarget.result; if (!result.success) { const buildConfig = buildTarget.configuration ? `:${buildTarget.configuration}` : ''; context.logger.warn(`ngssc: Failed build of ${buildTarget.project}:${buildTarget.target}${buildConfig}. Skipping ngssc build.`); return result; } await detectVariablesAndBuildNgsscJson(options, builderOptions, context, false, builderName !== '@angular-devkit/build-angular:application' ? undefined : 'server' in builderOptions && builderOptions.server ? 'server' : 'browser-only'); return result; } async function detectVariablesAndBuildNgsscJson(options, builderOptions, context, multiple = false, applicationBuilderVariant = undefined) { const ngsscContext = await detectVariables(context, options.searchPattern); const builderOutputPath = typeof builderOptions.outputPath === 'string' ? builderOptions.outputPath : builderOptions.outputPath.base; let outputPath = (0, path_1.join)(context.workspaceRoot, builderOutputPath); const ngssc = buildNgssc(ngsscContext, options, builderOptions, multiple, applicationBuilderVariant); const browserOutputPaths = [(0, path_1.join)(outputPath, 'browser')]; if (typeof builderOptions.outputPath !== 'string' && builderOptions.outputPath.browser) { browserOutputPaths.unshift((0, path_1.join)(outputPath, builderOptions.outputPath.browser)); } outputPath = browserOutputPaths.find(fs_1.existsSync) ?? outputPath; (0, fs_1.writeFileSync)((0, path_1.join)(outputPath, 'ngssc.json'), JSON.stringify(ngssc, null, 2), 'utf8'); } async function detectVariables(context, searchPattern) { const projectName = context.target && context.target.project; if (!projectName) { throw new Error('The builder requires a target.'); } const projectMetadata = await context.getProjectMetadata(projectName); const sourceRoot = projectMetadata.sourceRoot; const defaultSearchPattern = sourceRoot ? `${sourceRoot}/**/environments/environment*.ts` : '**/environments/environment*.ts'; const detector = new variable_detector_1.VariableDetector(context.logger); const typeScriptFiles = await glob.glob(searchPattern || defaultSearchPattern, { absolute: true, cwd: context.workspaceRoot, ignore: ['**/node_modules/**', '**/*.spec.ts', '**/*.d.ts'], }); let ngsscContext = null; for (const file of typeScriptFiles) { const fileContent = (0, fs_1.readFileSync)(file, 'utf8'); const innerNgsscContext = detector.detect(fileContent); if (!innerNgsscContext.variables.length) { continue; } else if (!ngsscContext) { ngsscContext = innerNgsscContext; continue; } if (ngsscContext.variant !== innerNgsscContext.variant) { context.logger.info(`ngssc: Detected conflicting variants (${ngsscContext.variant} and ${innerNgsscContext.variant}) being used`); } ngsscContext.variables.push(...innerNgsscContext.variables.filter((v) => !ngsscContext.variables.includes(v))); } if (!ngsscContext) { return { variant: 'process', variables: [] }; } context.logger.info(`ngssc: Detected variant '${ngsscContext.variant}' with variables ` + `'${ngsscContext.variables.join(', ')}'`); return ngsscContext; } function buildNgssc(ngsscContext, options, builderOptions, multiple = false, applicationBuilderVariant = undefined) { return { environmentVariables: [ ...ngsscContext.variables, ...(options.additionalEnvironmentVariables || []), ], filePattern: options.filePattern || extractFilePattern(builderOptions, multiple, applicationBuilderVariant), variant: ngsscContext.variant, }; } function extractFilePattern(builderOptions, multiple, applicationBuilderVariant = undefined) { if (builderOptions && applicationBuilderVariant === 'server') { return '**/index{.,.server.}html'; } const index = builderOptions?.index; let result = '**/index.html'; if (!index || typeof index === 'boolean') { return result; } else if (typeof index === 'string') { result = (0, path_1.basename)(index); } else if (index.output) { result = (0, path_1.basename)(index.output); } else { result = (0, path_1.basename)(index.input); } return multiple && !result.startsWith('*') ? `**/${result}` : result; } exports.default = (0, architect_1.createBuilder)(ngsscBuild); //# sourceMappingURL=index.js.map