@apployees-nx/webserver
Version:
A create-react-app inspired plugin for Nx, with SSR and PWA capabilities.
80 lines (70 loc) • 3.21 kB
text/typescript
/*******************************************************************************
* © 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;
}