UNPKG

@apployees-nx/webserver

Version:

A create-react-app inspired plugin for Nx, with SSR and PWA capabilities.

80 lines (70 loc) 3.21 kB
/******************************************************************************* * © Apployees Inc., 2019 * All Rights Reserved. ******************************************************************************/ import { join, resolve } from "path"; import { getDefaultEnvsFolderForProject, normalizeAssets, normalizeFileReplacements, normalizeOtherEntries, } from "@apployees-nx/common-build-utils"; import { IBuildWebserverBuilderOptions } from "./webserver-types"; import { FILENAMES } from "./common-config"; import { BuilderContext } from "@angular-devkit/architect"; import lessVariablesToJs from "less-vars-to-js"; import { existsSync, readFileSync } from "fs"; export function normalizeBuildOptions( options: IBuildWebserverBuilderOptions, context: BuilderContext, sourceRoot: string, ): IBuildWebserverBuilderOptions { const root = context.workspaceRoot; const outputPath = resolve(root, options.outputPath); const lessVariablesFile = options.lessStyleVariables ? resolve(root, options.lessStyleVariables) : options.lessStyleVariables; return { ...options, root: root, sourceRoot: sourceRoot, outputPath: outputPath, tsConfig: resolve(root, options.tsConfig), assets: normalizeAssets(options.assets, root, sourceRoot), favicon: resolve(root, options.favicon), manifestJson: resolve(root, options.manifestJson), envFolderPath: options.envFolderPath ? resolve(root, options.envFolderPath) : getDefaultEnvsFolderForProject(root, context), buildCacheFolder: options.buildCacheFolder ? resolve(root, options.buildCacheFolder) : join(root, "node_modules", ".buildcache"), additionalEnvFile: options.additionalEnvFile ? resolve(root, options.additionalEnvFile) : options.additionalEnvFile, // eslint-disable-next-line @typescript-eslint/camelcase publicOutputFolder_calculated: resolve(outputPath, FILENAMES.publicFolder), appHtml: resolve(root, options.appHtml), serverMain: resolve(root, options.serverMain), serverFileReplacements: normalizeFileReplacements(root, options.serverFileReplacements), lessStyleVariables: lessVariablesFile, // eslint-disable-next-line @typescript-eslint/camelcase lessStyleVariables_calculated: calculateLessVariables(options, lessVariablesFile), serverWebpackConfig: options.serverWebpackConfig ? resolve(root, options.serverWebpackConfig) : options.serverWebpackConfig, clientMain: resolve(root, options.clientMain), clientOtherEntries: normalizeOtherEntries(root, options.clientOtherEntries), clientFileReplacements: normalizeFileReplacements(root, options.clientFileReplacements), clientWebpackConfig: options.clientWebpackConfig ? resolve(root, options.clientWebpackConfig) : options.clientWebpackConfig, } as IBuildWebserverBuilderOptions; } function calculateLessVariables(options: IBuildWebserverBuilderOptions, normalizedLessVariablesFile: string): object { let variables: object; if (existsSync(normalizedLessVariablesFile)) { variables = lessVariablesToJs(readFileSync(normalizedLessVariablesFile, "utf-8")); } else { variables = {}; } return variables; }