UNPKG

@storm-software/terraform-tools

Version:

Tools for managing Terraform infrastructure within a Nx workspace.

1,365 lines (1,229 loc) 106 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _chunkZ6FDQK7Qjs = require('./chunk-Z6FDQK7Q.js'); // src/generators/init/init.ts var _devkit = require('@nx/devkit'); // ../workspace-tools/src/utils/cargo.ts var _child_process = require('child_process'); var _path = require('path'); var path2 = _interopRequireWildcard(_path); var INVALID_CARGO_ARGS = [ "allFeatures", "allTargets", "main", "outputPath", "package", "tsConfig" ]; var buildCargoCommand = (baseCommand, options, context) => { const args = []; if (options.toolchain && options.toolchain !== "stable") { args.push(`+${options.toolchain}`); } args.push(baseCommand); for (const [key, value] of Object.entries(options).filter( ([key2]) => key2 && key2 !== "_" )) { if (key === "toolchain" || key === "release" || INVALID_CARGO_ARGS.includes(key)) { continue; } if (typeof value === "boolean") { if (value) { args.push(`--${key}`); } } else if (Array.isArray(value)) { for (const item of value) { args.push(`--${key}`, String(item)); } } else { args.push(`--${key}`, String(value)); } } if (context.projectName) { args.push("-p", context.projectName); } if (options.allFeatures && !args.includes("--all-features")) { args.push("--all-features"); } if (options.allTargets && !args.includes("--all-targets")) { args.push("--all-targets"); } if (options.release && !args.includes("--profile")) { args.push("--release"); } if (options.outputPath && !args.includes("--target-dir")) { args.push("--target-dir", options.outputPath); } return args; }; async function cargoCommand(workspaceRoot2, ...args) { console.log(`> cargo ${args.join(" ")}`); args.push("--color", "always"); return await Promise.resolve(runProcess(workspaceRoot2, "cargo", ...args)); } function cargoCommandSync(args = "", options) { const normalizedOptions = { stdio: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _2 => _2.stdio]), () => ( "inherit")), env: { ...process.env, ..._optionalChain([options, 'optionalAccess', _3 => _3.env]) } }; try { return { output: _child_process.execSync.call(void 0, `cargo ${args}`, { encoding: "utf8", windowsHide: true, stdio: normalizedOptions.stdio, env: normalizedOptions.env, maxBuffer: 1024 * 1024 * 10 }), success: true }; } catch (e) { return { output: e.message, success: false }; } } function cargoMetadata() { const output2 = cargoCommandSync("metadata --format-version=1", { stdio: "pipe" }); if (!output2.success) { console.error("Failed to get cargo metadata"); return null; } return JSON.parse(output2.output); } function runProcess(workspaceRoot2, processCmd, ...args) { const metadata = cargoMetadata(); const targetDir = _nullishCoalesce(_optionalChain([metadata, 'optionalAccess', _4 => _4.target_directory]), () => ( _devkit.joinPathFragments.call(void 0, workspaceRoot2, "dist"))); return new Promise((resolve2) => { if (process.env.VERCEL) { return resolve2({ success: true }); } _child_process.execSync.call(void 0, `${processCmd} ${args.join(" ")}`, { cwd: process.cwd(), env: { ...process.env, RUSTC_WRAPPER: "", CARGO_TARGET_DIR: targetDir, CARGO_BUILD_TARGET_DIR: targetDir }, windowsHide: true, stdio: ["inherit", "inherit", "inherit"] }); resolve2({ success: true }); }); } // ../workspace-tools/src/executors/cargo-build/executor.ts async function cargoBuildExecutor(options, context) { const command = buildCargoCommand("build", options, context); return await cargoCommand(context.root, ...command); } var executor_default = _chunkZ6FDQK7Qjs.withRunExecutor.call(void 0, "Cargo - Build", cargoBuildExecutor, { skipReadingConfig: false, hooks: { applyDefaultOptions: (options) => { options.outputPath ??= "dist/{projectRoot}/target"; options.toolchain ??= "stable"; return options; } } } ); // ../workspace-tools/src/executors/cargo-check/executor.ts async function cargoCheckExecutor(options, context) { const command = buildCargoCommand("check", options, context); return await cargoCommand(context.root, ...command); } var executor_default2 = _chunkZ6FDQK7Qjs.withRunExecutor.call(void 0, "Cargo - Check", cargoCheckExecutor, { skipReadingConfig: false, hooks: { applyDefaultOptions: (options) => { options.toolchain ??= "stable"; return options; } } } ); // ../workspace-tools/src/executors/cargo-clippy/executor.ts async function cargoClippyExecutor(options, context) { const command = buildCargoCommand("clippy", options, context); return await cargoCommand(context.root, ...command); } var executor_default3 = _chunkZ6FDQK7Qjs.withRunExecutor.call(void 0, "Cargo - Clippy", cargoClippyExecutor, { skipReadingConfig: false, hooks: { applyDefaultOptions: (options) => { options.toolchain ??= "stable"; options.fix ??= false; return options; } } } ); // ../workspace-tools/src/executors/cargo-doc/executor.ts async function cargoDocExecutor(options, context) { const opts = { ...options }; opts["no-deps"] = opts.noDeps; delete opts.noDeps; const command = buildCargoCommand("doc", options, context); return await cargoCommand(context.root, ...command); } var executor_default4 = _chunkZ6FDQK7Qjs.withRunExecutor.call(void 0, "Cargo - Doc", cargoDocExecutor, { skipReadingConfig: false, hooks: { applyDefaultOptions: (options) => { options.outputPath ??= "dist/{projectRoot}/docs"; options.toolchain ??= "stable"; options.release ??= options.profile ? false : true; options.allFeatures ??= true; options.lib ??= true; options.bins ??= true; options.examples ??= true; options.noDeps ??= false; return options; } } } ); // ../workspace-tools/src/executors/cargo-format/executor.ts async function cargoFormatExecutor(options, context) { const command = buildCargoCommand("fmt", options, context); return await cargoCommand(context.root, ...command); } var executor_default5 = _chunkZ6FDQK7Qjs.withRunExecutor.call(void 0, "Cargo - Format", cargoFormatExecutor, { skipReadingConfig: false, hooks: { applyDefaultOptions: (options) => { options.outputPath ??= "dist/{projectRoot}/target"; options.toolchain ??= "stable"; return options; } } } ); // ../workspace-tools/src/executors/cargo-publish/executor.ts var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _https = require('https'); var _https2 = _interopRequireDefault(_https); var LARGE_BUFFER = 1024 * 1e6; // ../build-tools/src/config.ts var DEFAULT_JS_BANNER = ` // --------------------------------------- // \u{1F5F2} Built by Storm Software // --------------------------------------- `; var DEFAULT_CSS_BANNER = ` /* --------------------------------------- \u{1F5F2} Built by Storm Software --------------------------------------- */ `; var DEFAULT_ENVIRONMENT = "production"; var DEFAULT_TARGET = "esnext"; var DEFAULT_ORGANIZATION = "storm-software"; // ../build-tools/src/plugins/swc.ts var _core = require('@swc/core'); // ../build-tools/src/plugins/ts-resolve.ts var _module = require('module'); var _resolve2 = require('resolve'); var _resolve3 = _interopRequireDefault(_resolve2); // ../build-tools/src/plugins/type-definitions.ts // ../build-tools/src/utilities/copy-assets.ts var _copyassetshandler = require('@nx/js/src/utils/assets/copy-assets-handler'); var _glob = require('glob'); var _promises = require('fs/promises'); var _promises2 = _interopRequireDefault(_promises); var copyAssets = async (config, assets, outputPath, projectRoot, sourceRoot, generatePackageJson3 = true, includeSrc = false, banner, footer) => { const pendingAssets = Array.from(_nullishCoalesce(assets, () => ( []))); pendingAssets.push({ input: projectRoot, glob: "*.md", output: "." }); pendingAssets.push({ input: ".", glob: "LICENSE", output: "." }); if (generatePackageJson3 === false) { pendingAssets.push({ input: projectRoot, glob: "package.json", output: "." }); } if (includeSrc === true) { pendingAssets.push({ input: sourceRoot, glob: "**/{*.ts,*.tsx,*.js,*.jsx}", output: "src/" }); } _chunkZ6FDQK7Qjs.writeTrace.call(void 0, `\u{1F4DD} Copying the following assets to the output directory: ${pendingAssets.map((pendingAsset) => typeof pendingAsset === "string" ? ` - ${pendingAsset} -> ${outputPath}` : ` - ${pendingAsset.input}/${pendingAsset.glob} -> ${_chunkZ6FDQK7Qjs.joinPaths.call(void 0, outputPath, pendingAsset.output)}`).join("\n")}`, config ); const assetHandler = new (0, _copyassetshandler.CopyAssetsHandler)({ projectDir: projectRoot, rootDir: config.workspaceRoot, outputDir: outputPath, assets: pendingAssets }); await assetHandler.processAllAssetsOnce(); _chunkZ6FDQK7Qjs.writeTrace.call(void 0, "Completed copying assets to the output directory", config); if (includeSrc === true) { _chunkZ6FDQK7Qjs.writeDebug.call(void 0, `\u{1F4DD} Adding banner and writing source files: ${_chunkZ6FDQK7Qjs.joinPaths.call(void 0, outputPath, "src" )}`, config ); const files = await _glob.glob.call(void 0, [ _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, outputPath, "src/**/*.ts"), _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, outputPath, "src/**/*.tsx"), _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, outputPath, "src/**/*.js"), _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, outputPath, "src/**/*.jsx") ]); await Promise.allSettled( files.map( async (file) => _promises.writeFile.call(void 0, file, `${banner && typeof banner === "string" ? banner.startsWith("//") ? banner : `// ${banner}` : ""} ${await _promises.readFile.call(void 0, file, "utf8")} ${footer && typeof footer === "string" ? footer.startsWith("//") ? footer : `// ${footer}` : ""}` ) ) ); } }; // ../build-tools/src/utilities/generate-package-json.ts var _buildablelibsutils = require('@nx/js/src/utils/buildable-libs-utils'); var _projectgraph = require('nx/src/project-graph/project-graph'); var addPackageDependencies = async (workspaceRoot2, projectRoot, projectName, packageJson) => { let projectGraph; try { projectGraph = _projectgraph.readCachedProjectGraph.call(void 0, ); } catch (e2) { await _projectgraph.createProjectGraphAsync.call(void 0, ); projectGraph = _projectgraph.readCachedProjectGraph.call(void 0, ); } if (!projectGraph) { throw new Error( "The Build process failed because the project graph is not available. Please run the build command again." ); } const projectDependencies = _buildablelibsutils.calculateProjectBuildableDependencies.call(void 0, void 0, projectGraph, workspaceRoot2, projectName, process.env.NX_TASK_TARGET_TARGET || "build", process.env.NX_TASK_TARGET_CONFIGURATION || "production", true ); const localPackages = []; for (const project of projectDependencies.dependencies.filter( (dep) => dep.node.type === "lib" && _optionalChain([dep, 'access', _5 => _5.node, 'access', _6 => _6.data, 'optionalAccess', _7 => _7.root]) !== projectRoot && _optionalChain([dep, 'access', _8 => _8.node, 'access', _9 => _9.data, 'optionalAccess', _10 => _10.root]) !== workspaceRoot2 )) { const projectNode = project.node; if (projectNode.data.root) { const projectPackageJsonPath = _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceRoot2, projectNode.data.root, "package.json" ); if (_fs.existsSync.call(void 0, projectPackageJsonPath)) { const projectPackageJsonContent = await _promises.readFile.call(void 0, projectPackageJsonPath, "utf8" ); const projectPackageJson = JSON.parse(projectPackageJsonContent); if (projectPackageJson.private !== true) { localPackages.push(projectPackageJson); } } } } if (localPackages.length > 0) { _chunkZ6FDQK7Qjs.writeTrace.call(void 0, `\u{1F4E6} Adding local packages to package.json: ${localPackages.map((p) => p.name).join(", ")}` ); const projectJsonFile = await _promises.readFile.call(void 0, _chunkZ6FDQK7Qjs.joinPaths.call(void 0, projectRoot, "project.json"), "utf8" ); const projectJson = JSON.parse(projectJsonFile); const projectName2 = projectJson.name; const projectConfigurations = _projectgraph.readProjectsConfigurationFromProjectGraph.call(void 0, projectGraph); if (!_optionalChain([projectConfigurations, 'optionalAccess', _11 => _11.projects, 'optionalAccess', _12 => _12[projectName2]])) { throw new Error( "The Build process failed because the project does not have a valid configuration in the project.json file. Check if the file exists in the root of the project." ); } const implicitDependencies = _optionalChain([projectConfigurations, 'access', _13 => _13.projects, 'optionalAccess', _14 => _14[projectName2], 'access', _15 => _15.implicitDependencies, 'optionalAccess', _16 => _16.reduce, 'call', _17 => _17((ret, dep) => { if (_optionalChain([projectConfigurations, 'access', _18 => _18.projects, 'optionalAccess', _19 => _19[dep]])) { const depPackageJsonPath = _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceRoot2, projectConfigurations.projects[dep].root, "package.json" ); if (_fs.existsSync.call(void 0, depPackageJsonPath)) { const depPackageJsonContent = _fs.readFileSync.call(void 0, depPackageJsonPath, "utf8" ); const depPackageJson = JSON.parse(depPackageJsonContent); if (depPackageJson.private !== true && !ret.includes(depPackageJson.name)) { ret.push(depPackageJson.name); } } } return ret; }, [])]); packageJson.dependencies = localPackages.reduce((ret, localPackage) => { if (!ret[localPackage.name] && !_optionalChain([implicitDependencies, 'optionalAccess', _20 => _20.includes, 'call', _21 => _21(localPackage.name)]) && _optionalChain([packageJson, 'access', _22 => _22.devDependencies, 'optionalAccess', _23 => _23[localPackage.name]]) === void 0) { ret[localPackage.name] = `^${localPackage.version || "0.0.1"}`; } return ret; }, _nullishCoalesce(packageJson.dependencies, () => ( {}))); packageJson.devDependencies = localPackages.reduce((ret, localPackage) => { if (!ret[localPackage.name] && _optionalChain([implicitDependencies, 'optionalAccess', _24 => _24.includes, 'call', _25 => _25(localPackage.name)]) && _optionalChain([packageJson, 'access', _26 => _26.dependencies, 'optionalAccess', _27 => _27[localPackage.name]]) === void 0) { ret[localPackage.name] = `^${localPackage.version || "0.0.1"}`; } return ret; }, _nullishCoalesce(packageJson.devDependencies, () => ( {}))); } else { _chunkZ6FDQK7Qjs.writeTrace.call(void 0, "\u{1F4E6} No local packages dependencies to add to package.json"); } return packageJson; }; var addWorkspacePackageJsonFields = async (workspaceConfig, projectRoot, sourceRoot, projectName, includeSrc = false, packageJson) => { const workspaceRoot2 = workspaceConfig.workspaceRoot ? workspaceConfig.workspaceRoot : _chunkZ6FDQK7Qjs.findWorkspaceRoot.call(void 0, ); const workspacePackageJsonContent = await _promises.readFile.call(void 0, _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceRoot2, "package.json"), "utf8" ); const workspacePackageJson = JSON.parse(workspacePackageJsonContent); packageJson.type ??= "module"; packageJson.sideEffects ??= false; if (includeSrc === true) { let distSrc = sourceRoot.replace(projectRoot, ""); if (distSrc.startsWith("/")) { distSrc = distSrc.substring(1); } packageJson.source ??= `${_chunkZ6FDQK7Qjs.joinPaths.call(void 0, distSrc, "index.ts").replaceAll("\\", "/")}`; } packageJson.files ??= ["dist/**/*"]; if (includeSrc === true && !packageJson.files.includes("src")) { packageJson.files.push("src/**/*"); } packageJson.publishConfig ??= { access: "public" }; packageJson.description ??= workspacePackageJson.description; packageJson.homepage ??= workspacePackageJson.homepage; packageJson.bugs ??= workspacePackageJson.bugs; packageJson.license ??= workspacePackageJson.license; packageJson.keywords ??= workspacePackageJson.keywords; packageJson.funding ??= workspacePackageJson.funding; packageJson.author ??= workspacePackageJson.author; packageJson.maintainers ??= workspacePackageJson.maintainers; if (!packageJson.maintainers && packageJson.author) { packageJson.maintainers = [packageJson.author]; } packageJson.contributors ??= workspacePackageJson.contributors; if (!packageJson.contributors && packageJson.author) { packageJson.contributors = [packageJson.author]; } packageJson.repository ??= workspacePackageJson.repository; packageJson.repository.directory ??= projectRoot ? projectRoot : _chunkZ6FDQK7Qjs.joinPaths.call(void 0, "packages", projectName); return packageJson; }; var addPackageJsonExport = (file, type = "module", sourceRoot) => { let entry = file.replaceAll("\\", "/"); if (sourceRoot) { entry = entry.replace(sourceRoot, ""); } return { import: { types: `./dist/${entry}.d.${type === "module" ? "ts" : "mts"}`, default: `./dist/${entry}.${type === "module" ? "js" : "mjs"}` }, require: { types: `./dist/${entry}.d.${type === "commonjs" ? "ts" : "cts"}`, default: `./dist/${entry}.${type === "commonjs" ? "js" : "cjs"}` }, default: { types: `./dist/${entry}.d.${type !== "fixed" ? "ts" : "mts"}`, default: `./dist/${entry}.${type !== "fixed" ? "js" : "mjs"}` } }; }; // ../build-tools/src/utilities/get-entry-points.ts // ../build-tools/src/utilities/get-env.ts var getEnv = (builder, options) => { return { STORM_BUILD: builder, STORM_ORG: options.orgName || DEFAULT_ORGANIZATION, STORM_NAME: options.name, STORM_MODE: options.mode || DEFAULT_ENVIRONMENT, STORM_PLATFORM: options.platform, STORM_FORMAT: JSON.stringify(options.format), STORM_TARGET: JSON.stringify(options.target), ...options.env }; }; // ../build-tools/src/utilities/read-nx-config.ts // ../build-tools/src/utilities/task-graph.ts var _createtaskgraph = require('nx/src/tasks-runner/create-task-graph'); // ../esbuild/src/assets.ts async function copyBuildAssets(context) { if (!_optionalChain([context, 'access', _28 => _28.result, 'optionalAccess', _29 => _29.errors, 'access', _30 => _30.length]) && _optionalChain([context, 'access', _31 => _31.options, 'access', _32 => _32.assets, 'optionalAccess', _33 => _33.length])) { _chunkZ6FDQK7Qjs.writeDebug.call(void 0, ` \u{1F4CB} Copying ${context.options.assets.length} asset files to output directory: ${context.outputPath}`, context.workspaceConfig ); const stopwatch = _chunkZ6FDQK7Qjs.getStopwatch.call(void 0, `${context.options.name} asset copy`); await copyAssets( context.workspaceConfig, _nullishCoalesce(context.options.assets, () => ( [])), context.outputPath, context.options.projectRoot, context.sourceRoot, true, false ); stopwatch(); } return context; } // ../esbuild/src/clean.ts async function cleanDirectories(directory) { await _promises.rm.call(void 0, directory, { recursive: true, force: true }); } // ../esbuild/src/context.ts var _defu = require('defu'); var _defu2 = _interopRequireDefault(_defu); var _findworkspaceroot = require('nx/src/utils/find-workspace-root'); // ../esbuild/src/config.ts var DEFAULT_BUILD_OPTIONS = { platform: "node", target: "node22", format: "esm", mode: "production", generatePackageJson: true, includeSrc: false, keepNames: true, metafile: false, treeshake: true, splitting: true, shims: false, watch: false, bundle: true, distDir: "dist", loader: { ".aac": "file", ".css": "file", ".eot": "file", ".flac": "file", ".gif": "file", ".jpeg": "file", ".jpg": "file", ".mp3": "file", ".mp4": "file", ".ogg": "file", ".otf": "file", ".png": "file", ".svg": "file", ".ttf": "file", ".wav": "file", ".webm": "file", ".webp": "file", ".woff": "file", ".woff2": "file" }, banner: { js: DEFAULT_JS_BANNER, css: DEFAULT_CSS_BANNER } }; // ../esbuild/src/context.ts async function resolveContext(userOptions) { const projectRoot = userOptions.projectRoot; const workspaceRoot2 = _findworkspaceroot.findWorkspaceRoot.call(void 0, projectRoot); if (!workspaceRoot2) { throw new Error("Cannot find Nx workspace root"); } const workspaceConfig = await _chunkZ6FDQK7Qjs.getWorkspaceConfig.call(void 0, true, { workspaceRoot: workspaceRoot2.dir }); _chunkZ6FDQK7Qjs.writeDebug.call(void 0, " \u2699\uFE0F Resolving build options", workspaceConfig); const stopwatch = _chunkZ6FDQK7Qjs.getStopwatch.call(void 0, "Build options resolution"); const projectGraph = await _devkit.createProjectGraphAsync.call(void 0, { exitOnError: true }); const projectJsonPath = _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceRoot2.dir, projectRoot, "project.json" ); if (!_fs.existsSync.call(void 0, projectJsonPath)) { throw new Error("Cannot find project.json configuration"); } const projectJsonFile = await _promises2.default.readFile(projectJsonPath, "utf8"); const projectJson = JSON.parse(projectJsonFile); const projectName = projectJson.name || userOptions.name; const projectConfigurations = _devkit.readProjectsConfigurationFromProjectGraph.call(void 0, projectGraph); if (!_optionalChain([projectConfigurations, 'optionalAccess', _34 => _34.projects, 'optionalAccess', _35 => _35[projectName]])) { throw new Error( "The Build process failed because the project does not have a valid configuration in the project.json file. Check if the file exists in the root of the project." ); } const options = _defu2.default.call(void 0, userOptions, DEFAULT_BUILD_OPTIONS); options.name ??= projectName; const packageJsonPath = _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceRoot2.dir, options.projectRoot, "package.json" ); if (!_fs.existsSync.call(void 0, packageJsonPath)) { throw new Error("Cannot find package.json configuration"); } const env = getEnv("esbuild", options); const define = _defu2.default.call(void 0, _nullishCoalesce(options.define, () => ( {})), _nullishCoalesce(env, () => ( {}))); const resolvedOptions = { ...options, tsconfig: userOptions.tsconfig === null ? void 0 : userOptions.tsconfig ? userOptions.tsconfig : _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceRoot2.dir, projectRoot, "tsconfig.json"), metafile: userOptions.mode === "development", clean: false, env, define: { STORM_FORMAT: JSON.stringify(options.format), ...Object.keys(define).filter((key) => define[key] !== void 0).reduce((res, key) => { const value = JSON.stringify(define[key]); const safeKey = key.replaceAll("(", "").replaceAll(")", ""); return { ...res, [`process.env.${safeKey}`]: value, [`import.meta.env.${safeKey}`]: value }; }, {}) } }; stopwatch(); const context = { options: resolvedOptions, clean: userOptions.clean !== false, workspaceConfig, projectConfigurations, projectName, projectGraph, sourceRoot: resolvedOptions.sourceRoot || projectJson.sourceRoot || _chunkZ6FDQK7Qjs.joinPaths.call(void 0, resolvedOptions.projectRoot, "src"), outputPath: resolvedOptions.outputPath || _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceConfig.workspaceRoot, "dist", resolvedOptions.projectRoot ), minify: resolvedOptions.minify || resolvedOptions.mode === "production" }; context.options.esbuildPlugins = [..._nullishCoalesce(context.options.esbuildPlugins, () => ( []))]; if (context.options.verbose) { _chunkZ6FDQK7Qjs.writeDebug.call(void 0, ` \u2699\uFE0F Build options resolved: ${_chunkZ6FDQK7Qjs.formatLogMessage.call(void 0, context.options)}`, workspaceConfig ); } return context; } // ../esbuild/src/package-json.ts async function generatePackageJson(context) { if (context.options.generatePackageJson !== false && _fs.existsSync.call(void 0, _chunkZ6FDQK7Qjs.joinPaths.call(void 0, context.options.projectRoot, "package.json"))) { _chunkZ6FDQK7Qjs.writeDebug.call(void 0, " \u270D\uFE0F Writing package.json file", context.workspaceConfig); const stopwatch = _chunkZ6FDQK7Qjs.getStopwatch.call(void 0, "Write package.json file"); const packageJsonPath = _chunkZ6FDQK7Qjs.joinPaths.call(void 0, context.options.projectRoot, "project.json" ); if (!_fs.existsSync.call(void 0, packageJsonPath)) { throw new Error("Cannot find package.json configuration"); } const packageJsonFile = await _promises2.default.readFile( _chunkZ6FDQK7Qjs.joinPaths.call(void 0, context.workspaceConfig.workspaceRoot, context.options.projectRoot, "package.json" ), "utf8" ); let packageJson = JSON.parse(packageJsonFile); if (!packageJson) { throw new Error("Cannot find package.json configuration file"); } packageJson = await addPackageDependencies( context.workspaceConfig.workspaceRoot, context.options.projectRoot, context.projectName, packageJson ); packageJson = await addWorkspacePackageJsonFields( context.workspaceConfig, context.options.projectRoot, context.sourceRoot, context.projectName, false, packageJson ); if (context.options.entry) { packageJson.exports ??= {}; packageJson.exports["./package.json"] ??= "./package.json"; const entryPoints = Array.isArray(context.options.entry) ? context.options.entry : Object.keys(context.options.entry); if (entryPoints.length > 0) { const defaultEntry = entryPoints.includes("index") ? `.${context.options.distDir ? `/${context.options.distDir}` : ""}/index` : `.${context.options.distDir ? `/${context.options.distDir}` : ""}/${entryPoints[0]}`; const isEsm = Array.isArray(context.options.format) ? context.options.format.includes("esm") : context.options.format === "esm"; const isCjs = Array.isArray(context.options.format) ? context.options.format.includes("cjs") : context.options.format === "cjs"; const isDts = context.options.dts || context.options.experimentalDts; packageJson.exports["."] ??= `${defaultEntry}.${isEsm ? "mjs" : isCjs ? "cjs" : "js"}`; for (const entryPoint of entryPoints) { packageJson.exports[`./${entryPoint}`] ??= {}; if (isEsm) { if (isDts) { packageJson.exports[`./${entryPoint}`].import = { types: `./dist/${entryPoint}.d.mts`, default: `./dist/${entryPoint}.mjs` }; } else { packageJson.exports[`./${entryPoint}`].import = `./dist/${entryPoint}.mjs`; } if (isDts) { packageJson.exports[`./${entryPoint}`].default = { types: `./dist/${entryPoint}.d.mts`, default: `./dist/${entryPoint}.mjs` }; } else { packageJson.exports[`./${entryPoint}`].default = `./dist/${entryPoint}.mjs`; } } if (isCjs) { if (isDts) { packageJson.exports[`./${entryPoint}`].require = { types: `./dist/${entryPoint}.d.cts`, default: `./dist/${entryPoint}.cjs` }; } else { packageJson.exports[`./${entryPoint}`].require = `./dist/${entryPoint}.cjs`; } if (!isEsm) { if (isDts) { packageJson.exports[`./${entryPoint}`].default = { types: `./dist/${entryPoint}.d.cts`, default: `./dist/${entryPoint}.cjs` }; } else { packageJson.exports[`./${entryPoint}`].default = `./dist/${entryPoint}.cjs`; } } } if (!isEsm && !isCjs) { if (isDts) { packageJson.exports[`./${entryPoint}`].default = { types: `./dist/${entryPoint}.d.ts`, default: `./dist/${entryPoint}.js` }; } else { packageJson.exports[`./${entryPoint}`].default = `./dist/${entryPoint}.js`; } } } if (isEsm) { packageJson.module = `${defaultEntry}.mjs`; } else { packageJson.main = `${defaultEntry}.cjs`; } if (isDts) { packageJson.types = `${defaultEntry}.d.${isEsm ? "mts" : isCjs ? "cts" : "ts"}`; } packageJson.exports = Object.keys(packageJson.exports).reduce( (ret, key) => { if (key.endsWith("/index") && !ret[key.replace("/index", "")]) { ret[key.replace("/index", "")] = packageJson.exports[key]; } return ret; }, packageJson.exports ); } } await _devkit.writeJsonFile.call(void 0, _chunkZ6FDQK7Qjs.joinPaths.call(void 0, context.outputPath, "package.json"), packageJson ); stopwatch(); } return context; } // ../tsup/src/index.ts var _tsup = require('tsup'); async function build(options) { if (!options.silent) { _chunkZ6FDQK7Qjs.writeDebug.call(void 0, ` \u{1F680} Running ${options.name || "tsup"} build`, options.workspaceConfig ); } const stopwatch = _chunkZ6FDQK7Qjs.getStopwatch.call(void 0, `${options.name || "tsup"} build`); await _tsup.build.call(void 0, options); if (!options.silent) { stopwatch(); } } // ../esbuild/src/tsup.ts async function executeTsup(context) { _chunkZ6FDQK7Qjs.writeDebug.call(void 0, ` \u{1F680} Running ${context.options.name} build`, context.workspaceConfig ); const stopwatch = _chunkZ6FDQK7Qjs.getStopwatch.call(void 0, `${context.options.name} build`); await build({ ...context.options, outDir: context.options.distDir ? _chunkZ6FDQK7Qjs.joinPaths.call(void 0, context.outputPath, context.options.distDir) : context.outputPath, workspaceConfig: context.workspaceConfig }); stopwatch(); return context; } // ../esbuild/src/build.ts async function reportResults(context) { if (_optionalChain([context, 'access', _36 => _36.result, 'optionalAccess', _37 => _37.errors, 'access', _38 => _38.length]) === 0) { if (context.result.warnings.length > 0) { _chunkZ6FDQK7Qjs.writeWarning.call(void 0, ` \u{1F6A7} The following warnings occurred during the build: ${context.result.warnings.map((warning) => warning.text).join("\n")}`, context.workspaceConfig ); } _chunkZ6FDQK7Qjs.writeSuccess.call(void 0, ` \u{1F4E6} The ${context.options.name} build completed successfully`, context.workspaceConfig ); } else if (_optionalChain([context, 'access', _39 => _39.result, 'optionalAccess', _40 => _40.errors]) && _optionalChain([context, 'access', _41 => _41.result, 'optionalAccess', _42 => _42.errors, 'access', _43 => _43.length]) > 0) { _chunkZ6FDQK7Qjs.writeError.call(void 0, ` \u274C The ${context.options.name} build failed with the following errors: ${context.result.errors.map((error) => error.text).join("\n")}`, context.workspaceConfig ); throw new Error( `The ${context.options.name} build failed with the following errors: ${context.result.errors.map((error) => error.text).join("\n")}` ); } } async function cleanOutputPath(context) { if (context.clean !== false && context.outputPath) { _chunkZ6FDQK7Qjs.writeDebug.call(void 0, ` \u{1F9F9} Cleaning ${context.options.name} output path: ${context.outputPath}`, context.workspaceConfig ); const stopwatch = _chunkZ6FDQK7Qjs.getStopwatch.call(void 0, `${context.options.name} output clean`); await cleanDirectories(context.outputPath); stopwatch(); } return context; } async function build2(options) { _chunkZ6FDQK7Qjs.writeDebug.call(void 0, ` ${_chunkZ6FDQK7Qjs.brandIcon.call(void 0, )} Executing Storm ESBuild pipeline`); const stopwatch = _chunkZ6FDQK7Qjs.getStopwatch.call(void 0, "ESBuild pipeline"); try { const opts = Array.isArray(options) ? options : [options]; if (opts.length === 0) { throw new Error("No build options were provided"); } const context = await resolveContext(options); await cleanOutputPath(context); await Promise.all([ // dependencyCheck(context.options), generatePackageJson(context), copyBuildAssets(context), executeTsup(context) ]); await reportResults(context); _chunkZ6FDQK7Qjs.writeSuccess.call(void 0, " \u{1F3C1} ESBuild pipeline build completed successfully"); } catch (error) { _chunkZ6FDQK7Qjs.writeFatal.call(void 0, "Fatal errors that the build process could not recover from have occured. The build process has been terminated." ); throw error; } finally { stopwatch(); } } // ../workspace-tools/src/executors/esbuild/executor.ts async function esbuildExecutorFn(options, context, config) { _chunkZ6FDQK7Qjs.writeInfo.call(void 0, "\u{1F4E6} Running Storm ESBuild executor on the workspace", config); if (!_optionalChain([context, 'access', _44 => _44.projectsConfigurations, 'optionalAccess', _45 => _45.projects]) || !context.projectName || !context.projectsConfigurations.projects[context.projectName] || !_optionalChain([context, 'access', _46 => _46.projectsConfigurations, 'access', _47 => _47.projects, 'access', _48 => _48[context.projectName], 'optionalAccess', _49 => _49.root])) { throw new Error( "The Build process failed because the context is not valid. Please run this command from a workspace." ); } await build2({ ...options, projectRoot: ( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion _optionalChain([context, 'access', _50 => _50.projectsConfigurations, 'access', _51 => _51.projects, 'optionalAccess', _52 => _52[context.projectName], 'access', _53 => _53.root]) ), name: context.projectName, sourceRoot: _optionalChain([context, 'access', _54 => _54.projectsConfigurations, 'access', _55 => _55.projects, 'optionalAccess', _56 => _56[context.projectName], 'optionalAccess', _57 => _57.sourceRoot]), format: options.format, platform: options.platform }); return { success: true }; } var executor_default6 = _chunkZ6FDQK7Qjs.withRunExecutor.call(void 0, "Storm ESBuild build", esbuildExecutorFn, { skipReadingConfig: false, hooks: { applyDefaultOptions: async (options) => { options.entry ??= ["src/index.ts"]; options.outputPath ??= "dist/{projectRoot}"; options.tsconfig ??= "{projectRoot}/tsconfig.json"; return options; } } } ); // ../workspace-tools/src/executors/napi/executor.ts var _jiti = require('jiti'); var _fileutils = require('nx/src/utils/fileutils'); async function napiExecutor(options, context, config) { const jiti = _jiti.createJiti.call(void 0, config.workspaceRoot, { fsCache: config.skipCache ? false : _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, config.directories.cache || "node_modules/.cache/storm", "jiti" ), interopDefault: true }); const { NapiCli } = await jiti.import( jiti.esmResolve("@napi-rs/cli") ); if (!_optionalChain([context, 'access', _58 => _58.projectGraph, 'optionalAccess', _59 => _59.nodes, 'access', _60 => _60[_nullishCoalesce(context.projectName, () => ( ""))]])) { throw new Error( "The Napi Build process failed because the project could not be found in the project graph. Please run this command from a workspace root directory." ); } const projectRoot = _optionalChain([context, 'access', _61 => _61.projectGraph, 'optionalAccess', _62 => _62.nodes, 'access', _63 => _63[_nullishCoalesce(context.projectName, () => ( ""))], 'optionalAccess', _64 => _64.data, 'access', _65 => _65.root]); const packageJson = _chunkZ6FDQK7Qjs.joinPaths.call(void 0, _nullishCoalesce(projectRoot, () => ( ".")), "package.json"); if (!_fileutils.fileExists.call(void 0, packageJson)) { throw new Error(`Could not find package.json at ${packageJson}`); } const napi = new NapiCli(); const normalizedOptions = { ...options }; const metadata = cargoMetadata(); normalizedOptions.targetDir = options.targetDir || _optionalChain([metadata, 'optionalAccess', _66 => _66.target_directory]) || _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, "dist", "target"); normalizedOptions.outputDir = options.outputPath; normalizedOptions.packageJsonPath ??= packageJson; if (options.cwd) { normalizedOptions.cwd = _chunkZ6FDQK7Qjs.correctPaths.call(void 0, options.cwd); } else { const absoluteProjectRoot = _chunkZ6FDQK7Qjs.correctPaths.call(void 0, _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, projectRoot || ".") ); normalizedOptions.cwd = absoluteProjectRoot; if (normalizedOptions.outputDir) { normalizedOptions.outputDir = _chunkZ6FDQK7Qjs.relative.call(void 0, normalizedOptions.cwd, _chunkZ6FDQK7Qjs.correctPaths.call(void 0, _chunkZ6FDQK7Qjs.isAbsolute.call(void 0, normalizedOptions.outputDir) ? normalizedOptions.outputDir : _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, normalizedOptions.outputDir) ) ); } if (normalizedOptions.packageJsonPath) { normalizedOptions.packageJsonPath = _chunkZ6FDQK7Qjs.relative.call(void 0, normalizedOptions.cwd, _chunkZ6FDQK7Qjs.correctPaths.call(void 0, _chunkZ6FDQK7Qjs.isAbsolute.call(void 0, normalizedOptions.packageJsonPath) ? normalizedOptions.packageJsonPath : _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, normalizedOptions.packageJsonPath) ) ); } if (normalizedOptions.configPath) { normalizedOptions.configPath = _chunkZ6FDQK7Qjs.relative.call(void 0, normalizedOptions.cwd, _chunkZ6FDQK7Qjs.correctPaths.call(void 0, _chunkZ6FDQK7Qjs.isAbsolute.call(void 0, normalizedOptions.configPath) ? normalizedOptions.configPath : _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, normalizedOptions.configPath) ) ); } if (normalizedOptions.manifestPath) { normalizedOptions.manifestPath = _chunkZ6FDQK7Qjs.relative.call(void 0, normalizedOptions.cwd, _chunkZ6FDQK7Qjs.correctPaths.call(void 0, _chunkZ6FDQK7Qjs.isAbsolute.call(void 0, normalizedOptions.manifestPath) ? normalizedOptions.manifestPath : _chunkZ6FDQK7Qjs.joinPaths.call(void 0, config.workspaceRoot, normalizedOptions.manifestPath) ) ); } } if (process.env.VERCEL) { return { success: true }; } _chunkZ6FDQK7Qjs.writeDebug.call(void 0, `Normalized Napi Options: packageJsonPath: ${normalizedOptions.packageJsonPath} outputDir: ${normalizedOptions.outputDir} targetDir: ${normalizedOptions.targetDir} manifestPath: ${normalizedOptions.manifestPath} configPath: ${normalizedOptions.configPath} cwd: ${normalizedOptions.cwd}`, config ); const { task } = await napi.build(normalizedOptions); return { success: true, terminalOutput: await task }; } var executor_default7 = _chunkZ6FDQK7Qjs.withRunExecutor.call(void 0, "Napi - Build Bindings", napiExecutor, { skipReadingConfig: false, hooks: { applyDefaultOptions: (options) => { options.outputPath ??= "{sourceRoot}"; options.toolchain ??= "stable"; options.dtsCache ??= true; options.platform ??= true; options.constEnum ??= false; options.verbose ??= false; options.jsBinding ??= "binding.js"; options.dts ??= "binding.d.ts"; return options; } } } ); // ../npm-tools/src/helpers/get-registry.ts // ../pnpm-tools/src/helpers/replace-deps-aliases.ts var _prettier = require('prettier'); // ../npm-tools/src/helpers/get-version.ts // ../pnpm-tools/src/helpers/catalog.ts var _semver = require('semver'); // ../pnpm-tools/src/helpers/pnpm-workspace.ts var _yaml = require('yaml'); // ../workspace-tools/src/executors/npm-publish/executor.ts // ../workspace-tools/src/utils/github.ts // ../workspace-tools/src/utils/package-helpers.ts // ../package-constants/src/tags.ts var ProjectTagConstants = { Language: { TAG_ID: "language", TYPESCRIPT: "typescript", RUST: "rust" }, ProjectType: { TAG_ID: "type", LIBRARY: "library", APPLICATION: "application" }, ProjectLinking: { TAG_ID: "project-linking", REFERENCE: "reference", ALIAS: "alias" }, DistStyle: { TAG_ID: "dist-style", NORMAL: "normal", CLEAN: "clean" }, Provider: { TAG_ID: "provider" }, Platform: { TAG_ID: "platform", NODE: "node", BROWSER: "browser", NEUTRAL: "neutral", WORKER: "worker" }, Registry: { TAG_ID: "registry", CARGO: "cargo", NPM: "npm", CONTAINER: "container", CYCLONE: "cyclone" }, Plugin: { TAG_ID: "plugin" }, Builder: { TAG_ID: "builder", TSC: "tsc", TSUP: "tsup", TSDOWN: "tsdown", VITE: "vite", ROLLDOWN: "rolldown" } }; var formatProjectTag = (variant, value) => { return `${variant}:${value}`; }; var hasProjectTag = (project, variant) => { project.tags = _nullishCoalesce(project.tags, () => ( [])); const prefix = formatProjectTag(variant, ""); return project.tags.some( (tag) => tag.startsWith(prefix) && tag.length > prefix.length ); }; // ../workspace-tools/src/utils/project-tags.ts var addProjectTag = (project, variant, value, options = { overwrite: false }) => { project.tags = _nullishCoalesce(project.tags, () => ( [])); if (options.overwrite || !hasProjectTag(project, variant)) { project.tags = project.tags.filter( (tag) => !tag.startsWith(formatProjectTag(variant, "")) ); project.tags.push(formatProjectTag(variant, value)); } }; // ../workspace-tools/src/executors/npm-publish/executor.ts var LARGE_BUFFER2 = 1024 * 1e6; // ../workspace-tools/src/executors/size-limit/executor.ts var _esbuild = require('@size-limit/esbuild'); var _esbuild2 = _interopRequireDefault(_esbuild); var _esbuildwhy = require('@size-limit/esbuild-why'); var _esbuildwhy2 = _interopRequireDefault(_esbuildwhy); var _file = require('@size-limit/file'); var _file2 = _interopRequireDefault(_file); var _sizelimit = require('size-limit'); var _sizelimit2 = _interopRequireDefault(_sizelimit); async function sizeLimitExecutorFn(options, context, config) { if (!_optionalChain([context, 'optionalAccess', _67 => _67.projectName]) || !_optionalChain([context, 'access', _68 => _68.projectsConfigurations, 'optionalAccess', _69 => _69.projects]) || !context.projectsConfigurations.projects[context.projectName]) { throw new Error( "The Size-Limit process failed because the context is not valid. Please run this command from a workspace." ); } _chunkZ6FDQK7Qjs.writeInfo.call(void 0, `\u{1F4CF} Running Size-Limit on ${context.projectName}`, config); _sizelimit2.default.call(void 0, [_file2.default, _esbuild2.default, _esbuildwhy2.default], { checks: _nullishCoalesce(_nullishCoalesce(options.entry, () => ( _optionalChain([context, 'access', _70 => _70.projectsConfigurations, 'access', _71 => _71.projects, 'access', _72 => _72[context.projectName], 'optionalAccess', _73 => _73.sourceRoot]))), () => ( _devkit.joinPathFragments.call(void 0, _nullishCoalesce(_optionalChain([context, 'access', _74 => _74.projectsConfigurations, 'access', _75 => _75.projects, 'access', _76 => _76[context.projectName], 'optionalAccess', _77 => _77.root]), () => ( "./")), "src" ))) }).then((result) => { _chunkZ6FDQK7Qjs.writeInfo.call(void 0, `\u{1F4CF} ${context.projectName} Size-Limit result: ${JSON.stringify(result)}`, config ); }); return { success: true }; } var executor_default8 = _chunkZ6FDQK7Qjs.withRunExecutor.call(void 0, "Size-Limit Performance Test Executor", sizeLimitExecutorFn, { skipReadingConfig: false, hooks: { applyDefaultOptions: (options) => { return options; } } } ); // ../tsdown/src/build.ts var _tsdown = require('tsdown'); // ../tsdown/src/clean.ts async function cleanDirectories2(name = "TSDown", directory, config) { await _promises.rm.call(void 0, directory, { recursive: true, force: true }); } // ../tsdown/src/config.ts function getDefaultOptions(config) { return { entry: ["./src/*.ts"], platform: "node", target: "esnext", mode: "production", dts: true, unused: { level: "error", ignore: ["typescript"] }, publint: true, fixedExtension: true, ...config }; } function toTSDownFormat(format4) { if (!format4 || Array.isArray(format4) && format4.length === 0) { return ["cjs", "es"]; } else if (format4 === "esm") { return "es"; } else if (Array.isArray(format4)) { return format4.map((f) => f === "esm" ? "es" : f); } return format4; } // ../tsdown/src/build.ts var resolveOptions = async (userOptions) => { const options = getDefaultOptions(userOptions); const workspaceRoot2 = _chunkZ6FDQK7Qjs.findWorkspaceRoot.call(void 0, options.projectRoot); if (!workspaceRoot2) { throw new Error("Cannot find Nx workspace root"); } const workspaceConfig = await _chunkZ6FDQK7Qjs.getWorkspaceConfig.call(void 0, options.debug === true, { workspaceRoot: workspaceRoot2 }); _chunkZ6FDQK7Qjs.writeDebug.call(void 0, " \u2699\uFE0F Resolving build options", workspaceConfig); const stopwatch = _chunkZ6FDQK7Qjs.getStopwatch.call(void 0, "Build options resolution"); const projectGraph = await _devkit.createProjectGraphAsync.call(void 0, { exitOnError: true }); const projectJsonPath = _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceRoot2, options.projectRoot, "project.json" ); if (!_fs.existsSync.call(void 0, projectJsonPath)) { throw new Error("Cannot find project.json configuration"); } const projectJsonFile = await _promises2.default.readFile(projectJsonPath, "utf8"); const projectJson = JSON.parse(projectJsonFile); const projectName = projectJson.name; const projectConfigurations = _devkit.readProjectsConfigurationFromProjectGraph.call(void 0, projectGraph); if (!_optionalChain([projectConfigurations, 'optionalAccess', _78 => _78.projects, 'optionalAccess', _79 => _79[projectName]])) { throw new Error( "The Build process failed because the project does not have a valid configuration in the project.json file. Check if the file exists in the root of the project." ); } const packageJsonPath = _chunkZ6FDQK7Qjs.joinPaths.call(void 0, workspaceRoot2, options.projectRoot, "package.json" ); if (!_fs.existsSync.call(void 0, packageJsonPath)) { throw new Error("Cannot find package.json configuration"); } const debug = _nullishCoalesce(options.debug, () => ( (options.mode || workspaceConfig.mode) === "development")); const sourceRoot = projectJson.sourceRoot || _chunkZ6FDQK7Qjs.joinPaths.call(void 0, options.projectRoot, "src"); const result = { name: projectName, mode: "production", target: DEFAULT_TARGET, generatePackageJson: true, outDir: _chunkZ6FDQK7Qjs.joinPaths.call(void 0, "dist", options.projectRoot), minify: !debug, plugins: [], assets: [], dts: true, shims: true, silent: !debug, logLevel: workspaceConfig.logLevel === "success" || workspaceConfig.logLevel === "performance" || workspaceConfig.logLevel === "debug" || workspaceConfig.logLevel === "trace" || workspaceConfi