UNPKG

@storm-stack/core

Version:

A build toolkit and runtime used by Storm Software in TypeScript applications

1 lines 16.8 kB
{"version":3,"sources":["../../src/lib/config.ts"],"names":["loadUserConfigFile","projectRoot","jiti","command","mode","resolvedUserConfig","resolvedUserConfigFile","existsSync","joinPaths","undefined","resolved","import","esmResolve","config","isFunction","Promise","resolve","isSsrBuild","isPreview","isSetObject","configFile","result","all","loadConfigC12","cwd","name","envName","globalRc","packageJson","dotenv","rcFile","defu","resolveConfig","context","inlineConfig","userConfig","resolvedProjectRoot","root","getProjectRoot","process","workspaceRoot","options","workspaceConfig","getWorkspaceRoot","getWorkspaceConfig","Error","resolver","mergedUserConfig","resolvedOptions","tsconfig","getTsconfigFilePath","platform","projectType","logLevel","templates","babel","plugins","presets","esbuild","override","unbuild","loaders","output","outputPath","tsconfigRaw","compilerOptions","outDir","outputMode","assets","input","glob","environment","defaultEnvironmentName","sourceRoot","colors","getColors","additionalFiles"],"mappings":"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","file":"chunk-HVMPQ543.cjs","sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport { getColors } from \"@storm-software/config-tools/utilities/colors\";\nimport { existsSync } from \"@stryke/path/exists\";\nimport {\n getProjectRoot,\n getWorkspaceRoot\n} from \"@stryke/path/get-workspace-root\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { isFunction } from \"@stryke/type-checks/is-function\";\nimport { isSetObject } from \"@stryke/type-checks/is-set-object\";\nimport { loadConfig as loadConfigC12 } from \"c12\";\nimport defu from \"defu\";\nimport type { Jiti } from \"jiti\";\nimport { ResolvedOptions } from \"../types/build\";\nimport type {\n InlineConfig,\n OutputConfig,\n ResolvedUserConfig,\n StormStackCommand\n} from \"../types/config\";\nimport { Context } from \"../types/context\";\nimport { getTsconfigFilePath } from \"./typescript/tsconfig\";\n\nexport type PartiallyResolvedContext = {\n options: Partial<Context[\"options\"]>;\n} & Omit<\n Context,\n \"options\" | \"tsconfig\" | \"entry\" | \"vfs\" | \"compiler\" | \"unimport\"\n>;\n\n/**\n * Loads the user configuration file for the project.\n *\n * @param projectRoot - The root directory of the project.\n * @param jiti - An instance of Jiti to resolve modules from\n * @param command - The {@link StormStackCommand} string associated with the current running process\n * @param mode - The mode in which the project is running (default is \"production\").\n * @returns A promise that resolves to the resolved user configuration.\n */\nexport async function loadUserConfigFile(\n projectRoot: string,\n jiti: Jiti,\n command?: StormStackCommand,\n mode?: string\n): Promise<ResolvedUserConfig> {\n let resolvedUserConfig: Partial<ResolvedUserConfig> = {};\n\n const resolvedUserConfigFile = existsSync(\n joinPaths(projectRoot, \"storm.config.ts\")\n )\n ? joinPaths(projectRoot, \"storm.config.ts\")\n : existsSync(joinPaths(projectRoot, \"storm.config.js\"))\n ? joinPaths(projectRoot, \"storm.config.js\")\n : existsSync(joinPaths(projectRoot, \"storm.config.mts\"))\n ? joinPaths(projectRoot, \"storm.config.mts\")\n : existsSync(joinPaths(projectRoot, \"storm.config.mjs\"))\n ? joinPaths(projectRoot, \"storm.config.mjs\")\n : undefined;\n if (resolvedUserConfigFile) {\n const resolved = await jiti.import(jiti.esmResolve(resolvedUserConfigFile));\n if (resolved) {\n let config = {};\n if (isFunction(resolved)) {\n config = await Promise.resolve(\n resolved({\n command,\n mode: mode || \"production\",\n isSsrBuild: false,\n isPreview: false\n })\n );\n }\n\n if (isSetObject(config)) {\n resolvedUserConfig = {\n ...config,\n config,\n configFile: resolvedUserConfigFile\n };\n }\n }\n }\n\n const result = await Promise.all([\n loadConfigC12({\n cwd: projectRoot,\n name: \"storm\",\n envName: mode,\n globalRc: true,\n packageJson: true,\n dotenv: true,\n jiti\n }),\n loadConfigC12({\n cwd: projectRoot,\n name: \"storm.config\",\n rcFile: false,\n globalRc: false,\n packageJson: false,\n dotenv: false,\n jiti\n }),\n loadConfigC12({\n cwd: projectRoot,\n name: \"storm-stack\",\n envName: mode,\n globalRc: true,\n packageJson: \"stormStack\",\n jiti\n })\n ]);\n\n return defu(\n resolvedUserConfig,\n isSetObject(result[0]?.config) ? { ...result[0].config, ...result[0] } : {},\n isSetObject(result[1]?.config) ? { ...result[1].config, ...result[1] } : {},\n isSetObject(result[2]?.config) ? { ...result[2].config, ...result[2] } : {}\n ) as ResolvedUserConfig;\n}\n\n/**\n * Resolves the configuration for the project.\n *\n * @param context - The context containing options and environment paths.\n * @param inlineConfig - The inline project configuration to resolve.\n * @param userConfig - The user-defined configuration options.\n * @param projectRoot - The root directory of the project.\n * @returns A promise that resolves to the resolved project configuration options.\n */\nexport async function resolveConfig(\n context: PartiallyResolvedContext,\n inlineConfig: InlineConfig,\n userConfig?: ResolvedUserConfig,\n projectRoot?: string\n): Promise<ResolvedOptions> {\n const resolvedProjectRoot =\n projectRoot ||\n inlineConfig.root ||\n userConfig?.root ||\n getProjectRoot() ||\n process.cwd();\n const workspaceRoot =\n context.options.workspaceConfig?.workspaceRoot ?? getWorkspaceRoot();\n\n if (!context.options.workspaceConfig) {\n const workspaceConfig = await getWorkspaceConfig();\n context.options.workspaceConfig = defu(workspaceConfig, {\n workspaceRoot\n });\n }\n if (!context.options.workspaceConfig?.workspaceRoot) {\n throw new Error(\n \"The workspace root could not be determined. Please ensure you are in a Storm Stack project.\"\n );\n }\n\n const mode =\n inlineConfig.mode ||\n userConfig?.mode ||\n context.options.workspaceConfig?.mode ||\n \"production\";\n\n const resolvedUserConfig = await loadUserConfigFile(\n resolvedProjectRoot,\n context.resolver,\n context.options.command,\n mode\n );\n\n const workspaceConfig = { ...context.options.workspaceConfig };\n delete workspaceConfig.name;\n\n const mergedUserConfig = defu(userConfig ?? {}, resolvedUserConfig);\n const resolvedOptions = defu(\n {\n inlineConfig,\n userConfig: mergedUserConfig,\n projectRoot: resolvedProjectRoot,\n workspaceConfig: context.options.workspaceConfig\n },\n inlineConfig,\n mergedUserConfig.config ?? {},\n {\n ...context.options,\n mode,\n tsconfig: getTsconfigFilePath(\n resolvedProjectRoot,\n context.options.tsconfig || \"tsconfig.json\"\n )\n },\n workspaceConfig,\n {\n platform: \"neutral\",\n mode: \"production\",\n projectType: \"application\",\n logLevel: \"info\",\n templates: joinPaths(resolvedProjectRoot, \"templates\"),\n isSsrBuild: false,\n isPreview: false,\n babel: {\n plugins: [],\n presets: []\n },\n esbuild: {\n override: {}\n },\n unbuild: {\n override: {},\n loaders: []\n }\n }\n ) as ResolvedOptions;\n\n resolvedOptions.output = defu(\n resolvedOptions.output ?? {},\n {\n outputPath: resolvedOptions.tsconfigRaw?.compilerOptions?.outDir,\n outputMode: resolvedOptions.output?.outputMode\n },\n {\n outputPath:\n resolvedProjectRoot === workspaceRoot\n ? \"dist\"\n : joinPaths(\"dist\", resolvedProjectRoot),\n outputMode: \"memory\",\n assets: [\n {\n input: resolvedProjectRoot,\n glob: \"README.md\",\n output: \"/\"\n },\n {\n input: resolvedProjectRoot,\n glob: \"CHANGELOG.md\",\n output: \"/\"\n },\n {\n input: \"\",\n glob: \"LICENSE\",\n output: \"/\"\n }\n ]\n } as OutputConfig\n );\n\n resolvedOptions.environment ??= defaultEnvironmentName(resolvedOptions);\n resolvedOptions.sourceRoot ??= joinPaths(resolvedOptions.projectRoot, \"src\");\n resolvedOptions.tsconfig ??= getTsconfigFilePath(\n resolvedOptions.projectRoot,\n resolvedOptions.tsconfig\n );\n\n context.options = resolvedOptions;\n context.options.colors = getColors(resolvedOptions);\n\n context.options.logLevel =\n context.options.logLevel === \"silent\"\n ? null\n : context.options.logLevel === \"success\"\n ? \"info\"\n : context.options.logLevel === \"trace\" ||\n context.options.logLevel === \"all\"\n ? \"debug\"\n : context.options.logLevel;\n\n context.options.userConfig!.plugins = mergedUserConfig.plugins ?? [];\n context.options.plugins = {\n config: {\n additionalFiles: []\n }\n };\n\n return resolvedOptions;\n}\n\n/**\n * Returns the default environment name based on the resolved options.\n *\n * @remarks\n * The environment name is determined based on the build context, such as whether it's a server-side rendering (SSR) build, a Node.js platform, or a browser platform. If none of these conditions are met, it defaults to \"shared\".\n *\n * @param options - The resolved options containing the build context.\n * @returns The default environment name.\n */\nexport function defaultEnvironmentName(options: ResolvedOptions) {\n // if (options.isSsrBuild) {\n // return \"ssr\";\n // }\n // if (options.isPreview) {\n // return \"preview\";\n // }\n if (options.platform === \"node\" || options.isSsrBuild) {\n return \"server\";\n }\n if (options.platform === \"browser\") {\n return \"client\";\n }\n\n return \"shared\";\n}\n"]}