@storm-software/unbuild 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,7 +21,7 @@ This package is part of the <b>⚡Storm-Ops</b> monorepo. The Storm-Ops packages
21
21
 
22
22
  <h3 align="center">💻 Visit <a href="https://stormsoftware.com" target="_blank">stormsoftware.com</a> to stay up to date with this developer</h3><br />
23
23
 
24
- [![Version](https://img.shields.io/badge/version-0.15.2-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://prettier.io/)&nbsp;[![Nx](https://img.shields.io/badge/Nx-17.0.2-lightgrey?style=for-the-badge&logo=nx&logoWidth=20&&color=1fb2a6)](http://nx.dev/)&nbsp;[![NextJs](https://img.shields.io/badge/Next.js-14.0.2-lightgrey?style=for-the-badge&logo=nextdotjs&logoWidth=20&color=1fb2a6)](https://nextjs.org/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;[![documented with Fumadocs](https://img.shields.io/badge/documented_with-fumadocs-success.svg?style=for-the-badge&logo=readthedocs&color=1fb2a6)](https://fumadocs.vercel.app/)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/storm-ops/cr.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
24
+ [![Version](https://img.shields.io/badge/version-0.16.0-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://prettier.io/)&nbsp;[![Nx](https://img.shields.io/badge/Nx-17.0.2-lightgrey?style=for-the-badge&logo=nx&logoWidth=20&&color=1fb2a6)](http://nx.dev/)&nbsp;[![NextJs](https://img.shields.io/badge/Next.js-14.0.2-lightgrey?style=for-the-badge&logo=nextdotjs&logoWidth=20&color=1fb2a6)](https://nextjs.org/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;[![documented with Fumadocs](https://img.shields.io/badge/documented_with-fumadocs-success.svg?style=for-the-badge&logo=readthedocs&color=1fb2a6)](https://fumadocs.vercel.app/)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/storm-ops/cr.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
25
25
 
26
26
  <!-- prettier-ignore-start -->
27
27
  <!-- markdownlint-disable -->
@@ -0,0 +1,607 @@
1
+ #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
18
+ // If the importer is in node compatibility mode or this is not an ESM
19
+ // file that has been converted to a CommonJS file using a Babel-
20
+ // compatible transform (i.e. "__esModule" has not been set), then set
21
+ // "default" to the CommonJS "module.exports" for node compatibility.
22
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
23
+ mod
24
+ ));
25
+
26
+ // bin/unbuild.ts
27
+ var import_create_storm_config2 = require("@storm-software/config-tools/create-storm-config");
28
+ var import_console4 = require("@storm-software/config-tools/logger/console");
29
+ var import_find_workspace_root2 = require("@storm-software/config-tools/utilities/find-workspace-root");
30
+ var import_process_handler = require("@storm-software/config-tools/utilities/process-handler");
31
+ var import_commander = require("commander");
32
+
33
+ // src/build.ts
34
+ var import_node2 = require("@humanfs/node");
35
+ var import_devkit3 = require("@nx/devkit");
36
+ var import_js = require("@nx/js");
37
+ var import_buildable_libs_utils3 = require("@nx/js/src/utils/buildable-libs-utils");
38
+ var import_build_tools = require("@storm-software/build-tools");
39
+ var import_create_storm_config = require("@storm-software/config-tools/create-storm-config");
40
+ var import_console3 = require("@storm-software/config-tools/logger/console");
41
+ var import_get_log_level = require("@storm-software/config-tools/logger/get-log-level");
42
+ var import_types = require("@storm-software/config-tools/types");
43
+ var import_correct_paths = require("@storm-software/config-tools/utilities/correct-paths");
44
+ var import_defu = __toESM(require("defu"), 1);
45
+ var import_node_path3 = require("path");
46
+ var import_find_workspace_root = require("nx/src/utils/find-workspace-root");
47
+ var import_unbuild = require("unbuild");
48
+
49
+ // src/clean.ts
50
+ var import_node = require("@humanfs/node");
51
+ var import_console = require("@storm-software/config-tools/logger/console");
52
+ async function clean(name = "Unbuild", directory, config) {
53
+ (0, import_console.writeDebug)(` \u{1F9F9} Cleaning ${name} output path: ${directory}`, config);
54
+ const stopwatch = (0, import_console.getStopwatch)(`${name} output clean`);
55
+ await import_node.hfs.deleteAll(directory);
56
+ stopwatch();
57
+ }
58
+ __name(clean, "clean");
59
+
60
+ // src/plugins/analyze.ts
61
+ var import_config_tools = require("@storm-software/config-tools");
62
+ var formatBytes = /* @__PURE__ */ __name((bytes) => {
63
+ if (bytes === 0) return "0 Byte";
64
+ const k = 1e3;
65
+ const dm = 3;
66
+ const sizes = [
67
+ "Bytes",
68
+ "KB",
69
+ "MB",
70
+ "GB"
71
+ ];
72
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
73
+ return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;
74
+ }, "formatBytes");
75
+ var analyzePlugin = /* @__PURE__ */ __name((options, resolvedOptions) => {
76
+ return {
77
+ name: "storm:analyzer",
78
+ renderChunk(source, chunk) {
79
+ const sourceBytes = formatBytes(source.length);
80
+ const fileName = chunk.fileName;
81
+ (0, import_config_tools.writeInfo)(` - ${fileName} ${sourceBytes}`, resolvedOptions.config);
82
+ }
83
+ };
84
+ }, "analyzePlugin");
85
+
86
+ // src/plugins/on-error.ts
87
+ var import_config_tools2 = require("@storm-software/config-tools");
88
+ var onErrorPlugin = /* @__PURE__ */ __name((options, resolvedOptions) => ({
89
+ name: "storm:on-error",
90
+ buildEnd(error) {
91
+ if (error) {
92
+ (0, import_config_tools2.writeError)(`The following errors occurred during the build:
93
+ ${error ? error.message : "Unknown build error"}
94
+
95
+ `, resolvedOptions.config);
96
+ throw new Error("Storm unbuild process failed with errors.");
97
+ }
98
+ },
99
+ renderError(error) {
100
+ (0, import_config_tools2.writeError)(`The following errors occurred during the build:
101
+ ${error ? error.message : "Unknown build error"}
102
+
103
+ `, resolvedOptions.config);
104
+ throw new Error("Storm unbuild process failed with errors.");
105
+ }
106
+ }), "onErrorPlugin");
107
+
108
+ // src/plugins/swc.ts
109
+ var swcPlugin = /* @__PURE__ */ __name((options, resolvedOptions) => {
110
+ const { transform } = require("@swc/core");
111
+ return {
112
+ name: "storm:swc",
113
+ transform(code, filename) {
114
+ return transform(code, {
115
+ filename,
116
+ jsc: {
117
+ transform: {
118
+ react: {
119
+ runtime: "automatic"
120
+ }
121
+ }
122
+ }
123
+ });
124
+ }
125
+ };
126
+ }, "swcPlugin");
127
+
128
+ // src/plugins/tsc.ts
129
+ var import_devkit2 = require("@nx/devkit");
130
+ var import_buildable_libs_utils2 = require("@nx/js/src/utils/buildable-libs-utils");
131
+ var import_compiler_helper_dependency = require("@nx/js/src/utils/compiler-helper-dependency");
132
+ var import_rollup_plugin_typescript2 = __toESM(require("rollup-plugin-typescript2"), 1);
133
+
134
+ // src/utilities/helpers.ts
135
+ var import_devkit = require("@nx/devkit");
136
+ var import_buildable_libs_utils = require("@nx/js/src/utils/buildable-libs-utils");
137
+ var import_console2 = require("@storm-software/config-tools/logger/console");
138
+ var import_node_path = require("path");
139
+ var import_node_url = require("url");
140
+ var import_typescript = __toESM(require("typescript"), 1);
141
+ async function loadConfig(configPath) {
142
+ if (!/\.(js|mjs)$/.test((0, import_node_path.extname)(configPath))) {
143
+ throw new Error("Unsupported config file format");
144
+ }
145
+ return import((0, import_node_url.pathToFileURL)(configPath).toString()).then((config) => config.default);
146
+ }
147
+ __name(loadConfig, "loadConfig");
148
+ async function createTsCompilerOptions(config, tsConfigPath, projectRoot, dependencies) {
149
+ const tsConfigFile = import_typescript.default.readConfigFile((0, import_devkit.joinPathFragments)(config.workspaceRoot, projectRoot, tsConfigPath), import_typescript.default.sys.readFile);
150
+ const tsConfig = import_typescript.default.parseJsonConfigFileContent(tsConfigFile.config, import_typescript.default.sys, (0, import_node_path.dirname)((0, import_devkit.joinPathFragments)(config.workspaceRoot, projectRoot, tsConfigPath)));
151
+ const compilerOptions = {
152
+ rootDir: projectRoot,
153
+ declaration: true,
154
+ paths: (0, import_buildable_libs_utils.computeCompilerOptionsPaths)(tsConfig, dependencies ?? [])
155
+ };
156
+ (0, import_console2.writeTrace)(compilerOptions, config);
157
+ return compilerOptions;
158
+ }
159
+ __name(createTsCompilerOptions, "createTsCompilerOptions");
160
+
161
+ // src/plugins/tsc.ts
162
+ var tscPlugin = /* @__PURE__ */ __name(async (options, resolvedOptions) => {
163
+ const projectGraph = await (0, import_devkit2.createProjectGraphAsync)({
164
+ exitOnError: true
165
+ });
166
+ const result = (0, import_buildable_libs_utils2.calculateProjectBuildableDependencies)(void 0, projectGraph, resolvedOptions.config.workspaceRoot, resolvedOptions.projectName, process.env.NX_TASK_TARGET_TARGET || "build", process.env.NX_TASK_TARGET_CONFIGURATION || "production", true);
167
+ let dependencies = result.dependencies;
168
+ const tsLibDependency = (0, import_compiler_helper_dependency.getHelperDependency)(import_compiler_helper_dependency.HelperDependency.tsc, resolvedOptions.tsconfig, dependencies, projectGraph, true);
169
+ if (tsLibDependency) {
170
+ dependencies = dependencies.filter((deps) => deps.name !== tsLibDependency.name);
171
+ dependencies.push(tsLibDependency);
172
+ }
173
+ return (0, import_rollup_plugin_typescript2.default)({
174
+ check: options.emitTypes !== false,
175
+ tsconfig: resolvedOptions.tsconfig,
176
+ tsconfigOverride: {
177
+ compilerOptions: await createTsCompilerOptions(resolvedOptions.config, resolvedOptions.tsconfig, resolvedOptions.projectRoot, dependencies)
178
+ }
179
+ });
180
+ }, "tscPlugin");
181
+
182
+ // src/plugins/type-definitions.ts
183
+ var import_node_path2 = require("path");
184
+ var typeDefinitions = /* @__PURE__ */ __name((options, resolvedOptions) => ({
185
+ name: "storm:dts-bundle",
186
+ async generateBundle(_opts, bundle) {
187
+ for (const file of Object.values(bundle)) {
188
+ if (file.type === "asset" || !file.isEntry || file.facadeModuleId == null) {
189
+ continue;
190
+ }
191
+ const hasDefaultExport = file.exports.includes("default");
192
+ const entrySourceFileName = (0, import_node_path2.relative)(options.projectRoot, file.facadeModuleId);
193
+ const entrySourceDtsName = entrySourceFileName.replace(/\.[cm]?[jt]sx?$/, "");
194
+ const dtsFileName = file.fileName.replace(/\.[cm]?js$/, ".d.ts");
195
+ const relativeSourceDtsName = JSON.stringify("./" + entrySourceDtsName);
196
+ const dtsFileSource = hasDefaultExport ? `
197
+ export * from ${relativeSourceDtsName};
198
+ export { default } from ${relativeSourceDtsName};
199
+ ` : `export * from ${relativeSourceDtsName};
200
+ `;
201
+ this.emitFile({
202
+ type: "asset",
203
+ fileName: dtsFileName,
204
+ source: dtsFileSource
205
+ });
206
+ }
207
+ }
208
+ }), "typeDefinitions");
209
+
210
+ // src/config.ts
211
+ var getDefaultBuildPlugins = /* @__PURE__ */ __name(async (options, resolvedOptions) => Promise.all([
212
+ analyzePlugin(options, resolvedOptions),
213
+ swcPlugin(options, resolvedOptions),
214
+ typeDefinitions(options, resolvedOptions),
215
+ tscPlugin(options, resolvedOptions),
216
+ onErrorPlugin(options, resolvedOptions)
217
+ ].map((plugin) => Promise.resolve(plugin))), "getDefaultBuildPlugins");
218
+
219
+ // src/build.ts
220
+ async function resolveOptions(options) {
221
+ const projectRoot = options.projectRoot;
222
+ if (!projectRoot) {
223
+ throw new Error("Cannot find project root");
224
+ }
225
+ const outputPath = options.outputPath || (0, import_correct_paths.joinPaths)("dist", projectRoot);
226
+ const workspaceRoot = (0, import_find_workspace_root.findWorkspaceRoot)(projectRoot);
227
+ if (!workspaceRoot) {
228
+ throw new Error("Cannot find workspace root");
229
+ }
230
+ const config = await (0, import_create_storm_config.loadStormConfig)(workspaceRoot.dir);
231
+ (0, import_console3.writeDebug)(" \u2699\uFE0F Resolving build options", config);
232
+ const stopwatch = (0, import_console3.getStopwatch)("Build options resolution");
233
+ if (options.configPath) {
234
+ const configFile = await loadConfig(options.configPath);
235
+ if (configFile) {
236
+ options = (0, import_defu.default)(options, configFile);
237
+ }
238
+ }
239
+ const projectGraph = await (0, import_devkit3.createProjectGraphAsync)({
240
+ exitOnError: true
241
+ });
242
+ const projectJsonPath = (0, import_correct_paths.joinPaths)(config.workspaceRoot, projectRoot, "project.json");
243
+ if (!await import_node2.hfs.isFile(projectJsonPath)) {
244
+ throw new Error("Cannot find project.json configuration");
245
+ }
246
+ const projectJson = await import_node2.hfs.json(projectJsonPath);
247
+ const projectName = projectJson.name;
248
+ const packageJsonPath = (0, import_correct_paths.joinPaths)(workspaceRoot.dir, projectRoot, "package.json");
249
+ if (!await import_node2.hfs.isFile(packageJsonPath)) {
250
+ throw new Error("Cannot find package.json configuration");
251
+ }
252
+ const packageJson = await import_node2.hfs.json(packageJsonPath);
253
+ let tsconfig = options.tsconfig;
254
+ if (!tsconfig) {
255
+ tsconfig = (0, import_correct_paths.joinPaths)(workspaceRoot.dir, projectRoot, "tsconfig.json");
256
+ }
257
+ if (!await import_node2.hfs.isFile(tsconfig)) {
258
+ throw new Error("Cannot find tsconfig.json configuration");
259
+ }
260
+ let sourceRoot = projectJson.sourceRoot;
261
+ if (!sourceRoot) {
262
+ sourceRoot = (0, import_correct_paths.joinPaths)(projectRoot, "src");
263
+ }
264
+ if (!await import_node2.hfs.isDirectory(sourceRoot)) {
265
+ throw new Error("Cannot find sourceRoot directory");
266
+ }
267
+ const projectConfigurations = (0, import_devkit3.readProjectsConfigurationFromProjectGraph)(projectGraph);
268
+ if (!projectConfigurations?.projects?.[projectName]) {
269
+ 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.");
270
+ }
271
+ const result = (0, import_buildable_libs_utils3.calculateProjectBuildableDependencies)(void 0, projectGraph, workspaceRoot.dir, projectName, process.env.NX_TASK_TARGET_TARGET || "build", process.env.NX_TASK_TARGET_CONFIGURATION || "production", true);
272
+ let dependencies = result.dependencies;
273
+ const tsLibDependency = (0, import_js.getHelperDependency)(import_js.HelperDependency.tsc, tsconfig, dependencies, projectGraph, true);
274
+ if (tsLibDependency) {
275
+ dependencies = dependencies.filter((deps) => deps.name !== tsLibDependency.name);
276
+ dependencies.push(tsLibDependency);
277
+ }
278
+ const resolvedOptions = {
279
+ name: projectName,
280
+ config,
281
+ projectRoot,
282
+ sourceRoot,
283
+ projectName,
284
+ tsconfig,
285
+ clean: false,
286
+ entries: [
287
+ {
288
+ builder: "mkdist",
289
+ input: `.${sourceRoot.replace(projectRoot, "")}`,
290
+ outDir: (0, import_correct_paths.joinPaths)((0, import_node_path3.relative)((0, import_correct_paths.joinPaths)(config.workspaceRoot, projectRoot), config.workspaceRoot).replaceAll("\\", "/"), outputPath, "dist").replaceAll("\\", "/"),
291
+ declaration: options.emitTypes !== false,
292
+ format: "esm"
293
+ },
294
+ {
295
+ builder: "mkdist",
296
+ input: `.${sourceRoot.replace(projectRoot, "")}`,
297
+ outDir: (0, import_correct_paths.joinPaths)((0, import_node_path3.relative)((0, import_correct_paths.joinPaths)(config.workspaceRoot, projectRoot), config.workspaceRoot).replaceAll("\\", "/"), outputPath, "dist").replaceAll("\\", "/"),
298
+ declaration: options.emitTypes !== false,
299
+ format: "cjs",
300
+ ext: "cjs"
301
+ }
302
+ ],
303
+ declaration: options.emitTypes !== false ? "compatible" : false,
304
+ failOnWarn: false,
305
+ sourcemap: options.sourcemap ?? !!options.debug,
306
+ outDir: outputPath,
307
+ parallel: true,
308
+ stub: false,
309
+ stubOptions: {
310
+ jiti: {}
311
+ },
312
+ externals: options.external ?? [],
313
+ dependencies: [],
314
+ peerDependencies: [],
315
+ devDependencies: [],
316
+ hooks: {},
317
+ alias: {},
318
+ replace: {},
319
+ rollup: {
320
+ replace: {},
321
+ alias: {},
322
+ json: {},
323
+ commonjs: {
324
+ sourceMap: options.sourcemap ?? true
325
+ },
326
+ emitCJS: true,
327
+ cjsBridge: true,
328
+ dts: {
329
+ respectExternal: true,
330
+ tsconfig
331
+ },
332
+ output: {
333
+ banner: options.banner || `
334
+ // \u26A1 Built by Storm Software
335
+ `,
336
+ footer: options.footer
337
+ },
338
+ resolve: {
339
+ preferBuiltins: true,
340
+ extensions: [
341
+ ".cjs",
342
+ ".mjs",
343
+ ".js",
344
+ ".jsx",
345
+ ".ts",
346
+ ".tsx",
347
+ ".json"
348
+ ]
349
+ },
350
+ esbuild: {
351
+ minify: !!options.minify,
352
+ splitting: options.splitting !== false,
353
+ treeShaking: options.treeShaking !== false,
354
+ color: true,
355
+ logLevel: config.logLevel === import_types.LogLevelLabel.FATAL ? import_types.LogLevelLabel.ERROR : (0, import_get_log_level.isVerbose)() ? "verbose" : config.logLevel
356
+ }
357
+ }
358
+ };
359
+ dependencies = dependencies.filter((dep) => dep.node.type === "npm" || dep.node.type === "lib" || dep.node.type === "app");
360
+ if (dependencies.length > 0) {
361
+ resolvedOptions.dependencies = dependencies.map((dep) => dep.name);
362
+ }
363
+ if (packageJson.devDependencies) {
364
+ resolvedOptions.devDependencies = Object.keys(packageJson.devDependencies);
365
+ }
366
+ if (packageJson.peerDependencies) {
367
+ resolvedOptions.peerDependencies = Object.keys(packageJson.peerDependencies);
368
+ }
369
+ if (options.rollup) {
370
+ let rollup = {};
371
+ if (typeof options.rollup === "string") {
372
+ const rollupFile = await loadConfig(options.rollup);
373
+ if (rollupFile) {
374
+ rollup = rollupFile;
375
+ }
376
+ } else {
377
+ rollup = options.rollup;
378
+ }
379
+ resolvedOptions.rollup = (0, import_defu.default)(resolvedOptions.rollup ?? {}, rollup);
380
+ }
381
+ resolvedOptions.hooks = {
382
+ "rollup:options": /* @__PURE__ */ __name(async (ctx, opts) => {
383
+ opts.plugins = options.plugins ?? await getDefaultBuildPlugins(options, resolvedOptions);
384
+ }, "rollup:options")
385
+ };
386
+ stopwatch();
387
+ return resolvedOptions;
388
+ }
389
+ __name(resolveOptions, "resolveOptions");
390
+ async function generatePackageJson(options) {
391
+ if (options.generatePackageJson !== false && await import_node2.hfs.isFile((0, import_correct_paths.joinPaths)(options.projectRoot, "package.json"))) {
392
+ (0, import_console3.writeDebug)(" \u270D\uFE0F Writing package.json file", options.config);
393
+ const stopwatch = (0, import_console3.getStopwatch)("Write package.json file");
394
+ const packageJsonPath = (0, import_correct_paths.joinPaths)(options.projectRoot, "project.json");
395
+ if (!await import_node2.hfs.isFile(packageJsonPath)) {
396
+ throw new Error("Cannot find package.json configuration");
397
+ }
398
+ let packageJson = await import_node2.hfs.json((0, import_correct_paths.joinPaths)(options.config.workspaceRoot, options.projectRoot, "package.json"));
399
+ if (!packageJson) {
400
+ throw new Error("Cannot find package.json configuration file");
401
+ }
402
+ packageJson = await (0, import_build_tools.addPackageDependencies)(options.config.workspaceRoot, options.projectRoot, options.projectName, packageJson);
403
+ packageJson = await (0, import_build_tools.addWorkspacePackageJsonFields)(options.config, options.projectRoot, options.sourceRoot, options.projectName, false, packageJson);
404
+ packageJson = await (0, import_build_tools.addPackageJsonExports)(options.sourceRoot, packageJson);
405
+ await (0, import_devkit3.writeJsonFile)((0, import_correct_paths.joinPaths)(options.outDir, "package.json"), packageJson);
406
+ stopwatch();
407
+ }
408
+ return options;
409
+ }
410
+ __name(generatePackageJson, "generatePackageJson");
411
+ async function executeUnbuild(options) {
412
+ (0, import_console3.writeDebug)(` \u{1F680} Running ${options.name} (${options.projectRoot}) build`, options.config);
413
+ const stopwatch = (0, import_console3.getStopwatch)(`${options.name} (${options.projectRoot}) build`);
414
+ try {
415
+ await (0, import_unbuild.build)(options.projectRoot, false, {
416
+ ...options,
417
+ rootDir: options.projectRoot
418
+ });
419
+ } finally {
420
+ stopwatch();
421
+ }
422
+ return options;
423
+ }
424
+ __name(executeUnbuild, "executeUnbuild");
425
+ async function copyBuildAssets(options) {
426
+ (0, import_console3.writeDebug)(` \u{1F4CB} Copying asset files to output directory: ${options.outDir}`, options.config);
427
+ const stopwatch = (0, import_console3.getStopwatch)(`${options.name} asset copy`);
428
+ await (0, import_build_tools.copyAssets)(options.config, options.assets ?? [], options.outDir, options.projectRoot, options.projectName, options.sourceRoot, options.generatePackageJson, options.includeSrc);
429
+ stopwatch();
430
+ return options;
431
+ }
432
+ __name(copyBuildAssets, "copyBuildAssets");
433
+ async function cleanOutputPath(options) {
434
+ if (options.clean !== false && options.outDir) {
435
+ await clean(options.name, options.outDir, options.config);
436
+ }
437
+ return options;
438
+ }
439
+ __name(cleanOutputPath, "cleanOutputPath");
440
+ async function build(options) {
441
+ (0, import_console3.writeDebug)(` \u26A1 Executing Storm Unbuild pipeline`);
442
+ const stopwatch = (0, import_console3.getStopwatch)("Unbuild pipeline");
443
+ try {
444
+ const resolvedOptions = await resolveOptions(options);
445
+ await cleanOutputPath(resolvedOptions);
446
+ await generatePackageJson(resolvedOptions);
447
+ await executeUnbuild(resolvedOptions);
448
+ await copyBuildAssets(resolvedOptions);
449
+ (0, import_console3.writeSuccess)(` \u{1F3C1} The ${resolvedOptions.name} build completed successfully`, resolvedOptions.config);
450
+ } catch (error) {
451
+ (0, import_console3.writeFatal)(" \u274C Fatal errors occurred during the build that could not be recovered from. The build process has been terminated.");
452
+ throw error;
453
+ } finally {
454
+ stopwatch();
455
+ }
456
+ }
457
+ __name(build, "build");
458
+
459
+ // bin/unbuild.ts
460
+ async function createProgram(config) {
461
+ try {
462
+ (0, import_console4.writeInfo)("\u26A1 Running Storm Unbuild pipeline", config);
463
+ const root = (0, import_find_workspace_root2.findWorkspaceRootSafe)();
464
+ process.env.STORM_WORKSPACE_ROOT ??= root;
465
+ process.env.NX_WORKSPACE_ROOT_PATH ??= root;
466
+ root && process.chdir(root);
467
+ const program = new import_commander.Command("storm-unbuild");
468
+ program.version("1.0.0", "-v --version", "display CLI version");
469
+ program.description("\u26A1 Run the Storm Unbuild pipeline").showHelpAfterError().showSuggestionAfterError();
470
+ const projectRootOption = new import_commander.Option("-p --project-root <path>", "The path to the root of the project to build. This path is defined relative to the workspace root.").makeOptionMandatory(true);
471
+ const sourceRootOption = new import_commander.Option("-s --source-root <path>", "The path of the project's source folder to build");
472
+ const nameOption = new import_commander.Option("-n --name <value>", "The name of the project to build");
473
+ const outputPathOption = new import_commander.Option("-o --output-path <path>", "The path of the project's source folder to build").default("dist/{projectRoot}");
474
+ const platformOption = new import_commander.Option("-p --platform <value>", "The platform to build the distribution for").choices([
475
+ "node",
476
+ "neutral",
477
+ "browser"
478
+ ]).default("node");
479
+ const formatOption = new import_commander.Option("-f, --format <value...>", "The format to build the distribution in").choices([
480
+ "esm",
481
+ "cjs",
482
+ "iife"
483
+ ]).argParser((value, previous) => {
484
+ if (previous === void 0) {
485
+ return [
486
+ value
487
+ ];
488
+ } else if (!previous.includes(value)) {
489
+ previous.push(value);
490
+ }
491
+ return previous;
492
+ }).default("esm");
493
+ const cleanOption = new import_commander.Option("-c --clean", "Should the output directory be cleaned before building").default(true);
494
+ const noCleanOption = new import_commander.Option("--no-clean", "Should the output directory be cleaned before building").default(false);
495
+ const bundleOption = new import_commander.Option("-b --bundle", "Should the output be bundled").default(true);
496
+ const noBundleOption = new import_commander.Option("--no-bundle", "Should the output be bundled").default(false);
497
+ const targetOption = new import_commander.Option("-t --target <value>", "The target to build the distribution for").choices([
498
+ "ESNext",
499
+ "ES2015",
500
+ "ES2016",
501
+ "ES2017",
502
+ "ES2018",
503
+ "ES2019",
504
+ "ES2020",
505
+ "ES2021",
506
+ "ES2022",
507
+ "ES2023"
508
+ ]).default("ESNext");
509
+ const watchOption = new import_commander.Option("-w --watch", "Should the build process watch for changes").default(false);
510
+ const debugOption = new import_commander.Option("-d --debug", "Should the build process run in debug mode").default(false);
511
+ const bannerOption = new import_commander.Option("--banner <value>", "The banner to prepend to the output");
512
+ const footerOption = new import_commander.Option("--footer <value>", "The footer to prepend to the output");
513
+ const splittingOption = new import_commander.Option("--splitting", "Should the output be split into multiple files").default(true);
514
+ const treeShakingOption = new import_commander.Option("--tree-shaking", "Should tree shaking be enabled").default(true);
515
+ const generatePackageJsonOption = new import_commander.Option("--generate-package-json", "Should a package.json be generated for the output").default(true);
516
+ const emitOnAllOption = new import_commander.Option("--emit-on-all", "Should the output be emitted on all platforms").default(false);
517
+ const metafileOption = new import_commander.Option("--metafile", "Should a metafile be generated for the output").default(true);
518
+ const minifyOption = new import_commander.Option("--minify", "Should the output be minified").default(true);
519
+ const includeSrcOption = new import_commander.Option("--include-src", "Should the source files be included in the output").default(false);
520
+ const verboseOption = new import_commander.Option("--verbose", "Should the build process be verbose").default(false);
521
+ const emitTypesOption = new import_commander.Option("--emit-types", "Should types be emitted for the output").default(true);
522
+ program.command("build", {
523
+ isDefault: true
524
+ }).alias("bundle").description("Run a TypeScript build using Unbuild.").addOption(nameOption).addOption(projectRootOption).addOption(sourceRootOption).addOption(outputPathOption).addOption(platformOption).addOption(formatOption).addOption(targetOption).addOption(bundleOption).addOption(noBundleOption).addOption(cleanOption).addOption(noCleanOption).addOption(watchOption).addOption(debugOption).addOption(bannerOption).addOption(footerOption).addOption(splittingOption).addOption(treeShakingOption).addOption(generatePackageJsonOption).addOption(emitOnAllOption).addOption(metafileOption).addOption(minifyOption).addOption(includeSrcOption).addOption(verboseOption).addOption(emitTypesOption).action(buildAction(config));
525
+ program.command("clean").alias("clear").description("Clean the output directory of the project. This command will remove the 'dist' folder.").addOption(nameOption).action(cleanAction(config));
526
+ return program;
527
+ } catch (e) {
528
+ (0, import_console4.writeFatal)(`A fatal error occurred while running the program: ${e.message}`, config);
529
+ process.exit(1);
530
+ }
531
+ }
532
+ __name(createProgram, "createProgram");
533
+ var buildAction = /* @__PURE__ */ __name((config) => async (options) => {
534
+ try {
535
+ await build({
536
+ ...options,
537
+ sourcemap: !!options.debug,
538
+ replace: {},
539
+ alias: {},
540
+ stub: false,
541
+ watchOptions: {
542
+ buildDelay: 5e3,
543
+ chokidar: {},
544
+ clearScreen: true,
545
+ skipWrite: true
546
+ },
547
+ stubOptions: {
548
+ jiti: {}
549
+ },
550
+ dependencies: [],
551
+ peerDependencies: [],
552
+ devDependencies: [],
553
+ rollup: {
554
+ emitCJS: false,
555
+ watch: false,
556
+ cjsBridge: false,
557
+ dts: {
558
+ respectExternal: true
559
+ },
560
+ replace: {},
561
+ alias: {},
562
+ resolve: {},
563
+ json: {},
564
+ commonjs: {},
565
+ esbuild: {
566
+ target: options.target,
567
+ format: "esm",
568
+ platform: options.platform,
569
+ minify: options.minify,
570
+ treeShaking: options.treeShaking
571
+ }
572
+ }
573
+ });
574
+ } catch (e) {
575
+ (0, import_console4.writeFatal)(`A fatal error occurred while cleaning the Unbuild output directory: ${e.message}`, config);
576
+ (0, import_process_handler.exitWithError)(config);
577
+ process.exit(1);
578
+ }
579
+ }, "buildAction");
580
+ var cleanAction = /* @__PURE__ */ __name((config) => async (options) => {
581
+ try {
582
+ await clean(options.name, options.output, config);
583
+ } catch (e) {
584
+ (0, import_console4.writeFatal)(`A fatal error occurred while cleaning the ESBuild output directory: ${e.message}`, config);
585
+ (0, import_process_handler.exitWithError)(config);
586
+ process.exit(1);
587
+ }
588
+ }, "cleanAction");
589
+ void (async () => {
590
+ const config = await (0, import_create_storm_config2.loadStormConfig)();
591
+ const stopwatch = (0, import_console4.getStopwatch)("Storm ESBuild executable");
592
+ try {
593
+ (0, import_process_handler.handleProcess)(config);
594
+ const program = await createProgram(config);
595
+ await program.parseAsync(process.argv);
596
+ (0, import_console4.writeSuccess)(`\u{1F389} Storm ESBuild executable has completed successfully!`, config);
597
+ (0, import_process_handler.exitWithSuccess)(config);
598
+ } catch (error) {
599
+ (0, import_console4.writeFatal)(`A fatal error occurred while running Storm ESBuild executable:
600
+
601
+ ${error.message}`, config);
602
+ (0, import_process_handler.exitWithError)(config);
603
+ process.exit(1);
604
+ } finally {
605
+ stopwatch();
606
+ }
607
+ })();
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@storm-software/unbuild","version":"0.16.0","type":"module","description":"A package containing `unbuild` utilities for building Storm Software libraries and applications","repository":{"type":"github","url":"https://github.com/storm-software/storm-ops.git","directory":"packages/unbuild"},"homepage":"https://stormsoftware.com","bugs":"https://github.com/storm-software/storm-ops/issues","author":{"name":"Storm Software","email":"contact@stormsoftware.com","url":"https://stormsoftware.com"},"maintainers":[{"name":"Storm Software","email":"contact@stormsoftware.com","url":"https://stormsoftware.com"},{"name":"Pat Sullivan","email":"admin@stormsoftware.com","url":"https://patsullivan.org"}],"contributors":[{"name":"Storm Software","email":"contact@stormsoftware.com","url":"https://stormsoftware.com"}],"funding":{"type":"github","url":"https://github.com/sponsors/storm-software"},"license":"Apache-2.0","private":false,"packageManager":"pnpm@9.15.2","engines":{"node":">=22.4.0","pnpm":">=9.15.2"},"bin":{"storm-unbuild":"./bin/unbuild.js","storm-unbuild-cjs":"./bin/unbuild.cjs","storm-unbuild-esm":"./bin/unbuild.js"},"main":"./dist/index.cjs","module":"./dist/index.js","exports":{"./package.json":"./package.json","./types":{"import":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"require":{"types":"./dist/types.d.cts","default":"./dist/types.cjs"},"default":{"types":"./dist/types.d.ts","default":"./dist/types.js"}},"./index":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./config":{"import":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"require":{"types":"./dist/config.d.cts","default":"./dist/config.cjs"},"default":{"types":"./dist/config.d.ts","default":"./dist/config.js"}},"./clean":{"import":{"types":"./dist/clean.d.ts","default":"./dist/clean.js"},"require":{"types":"./dist/clean.d.cts","default":"./dist/clean.cjs"},"default":{"types":"./dist/clean.d.ts","default":"./dist/clean.js"}},"./build":{"import":{"types":"./dist/build/index.d.ts","default":"./dist/build/index.js"},"require":{"types":"./dist/build/index.d.cts","default":"./dist/build/index.cjs"},"default":{"types":"./dist/build/index.d.ts","default":"./dist/build/index.js"}},"./plugins/*":{"import":{"types":"./dist/plugins/*.d.ts","default":"./dist/plugins/*.js"},"require":{"types":"./dist/plugins/*.d.cts","default":"./dist/plugins/*.cjs"},"default":{"types":"./dist/plugins/*.d.ts","default":"./dist/plugins/*.js"}}},"types":"./dist/index.d.ts","files":["dist/**/*"],"keywords":["acidic","cyclone-ui","monorepo","storm","storm-ops","storm-stack","sullivanpj","unbuild"],"peerDependencies":{"@nx/devkit":"^20.3.1","@nx/js":"^20.3.1","@storm-software/build-tools":"workspace:*","@storm-software/config-tools":"workspace:*","@swc/core":"1.7.26","nx":"^20.3.1","rollup":"^4.29.1","typescript":"^5.7.2","unbuild":"^3.2.0"},"peerDependenciesMeta":{"@nx/devkit":{"optional":false},"@nx/js":{"optional":false},"@storm-software/build-tools":{"optional":false},"@storm-software/config-tools":{"optional":false},"@swc/core":{"optional":true},"nx":{"optional":false},"rollup":{"optional":false},"typescript":{"optional":false},"unbuild":{"optional":false}},"dependencies":{"@humanfs/node":"^0.16.6","commander":"^12.1.0","defu":"6.1.4","rollup":"^4.29.1","rollup-plugin-typescript2":"0.36.0"},"devDependencies":{"@nx/devkit":"^20.3.1","@nx/js":"^20.3.1","@storm-software/build-tools":"0.124.0","@storm-software/config":"1.93.0","@storm-software/config-tools":"1.132.0","@swc/core":"1.7.26","@types/node":"^22.10.2","nx":"^20.3.1","tsup":"8.3.5","typescript":"^5.7.2","unbuild":"^3.2.0"},"publishConfig":{"access":"public"},"sideEffects":false}
1
+ {"name":"@storm-software/unbuild","version":"0.17.0","type":"module","description":"A package containing `unbuild` utilities for building Storm Software libraries and applications","repository":{"type":"github","url":"https://github.com/storm-software/storm-ops.git","directory":"packages/unbuild"},"homepage":"https://stormsoftware.com","bugs":"https://github.com/storm-software/storm-ops/issues","author":{"name":"Storm Software","email":"contact@stormsoftware.com","url":"https://stormsoftware.com"},"maintainers":[{"name":"Storm Software","email":"contact@stormsoftware.com","url":"https://stormsoftware.com"},{"name":"Pat Sullivan","email":"admin@stormsoftware.com","url":"https://patsullivan.org"}],"contributors":[{"name":"Storm Software","email":"contact@stormsoftware.com","url":"https://stormsoftware.com"}],"funding":{"type":"github","url":"https://github.com/sponsors/storm-software"},"license":"Apache-2.0","private":false,"packageManager":"pnpm@9.15.2","engines":{"node":">=22.4.0","pnpm":">=9.15.2"},"bin":{"storm-unbuild":"./bin/unbuild.js","storm-unbuild-cjs":"./bin/unbuild.cjs","storm-unbuild-esm":"./bin/unbuild.js"},"main":"./dist/index.cjs","module":"./dist/index.js","exports":{"./package.json":"./package.json","./types":{"import":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"require":{"types":"./dist/types.d.cts","default":"./dist/types.cjs"},"default":{"types":"./dist/types.d.ts","default":"./dist/types.js"}},"./index":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./config":{"import":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"require":{"types":"./dist/config.d.cts","default":"./dist/config.cjs"},"default":{"types":"./dist/config.d.ts","default":"./dist/config.js"}},"./clean":{"import":{"types":"./dist/clean.d.ts","default":"./dist/clean.js"},"require":{"types":"./dist/clean.d.cts","default":"./dist/clean.cjs"},"default":{"types":"./dist/clean.d.ts","default":"./dist/clean.js"}},"./build":{"import":{"types":"./dist/build/index.d.ts","default":"./dist/build/index.js"},"require":{"types":"./dist/build/index.d.cts","default":"./dist/build/index.cjs"},"default":{"types":"./dist/build/index.d.ts","default":"./dist/build/index.js"}},"./plugins/*":{"import":{"types":"./dist/plugins/*.d.ts","default":"./dist/plugins/*.js"},"require":{"types":"./dist/plugins/*.d.cts","default":"./dist/plugins/*.cjs"},"default":{"types":"./dist/plugins/*.d.ts","default":"./dist/plugins/*.js"}}},"types":"./dist/index.d.ts","files":["dist/**/*"],"keywords":["acidic","cyclone-ui","monorepo","storm","storm-ops","storm-stack","sullivanpj","unbuild"],"peerDependencies":{"@nx/devkit":"^20.3.1","@nx/js":"^20.3.1","@storm-software/build-tools":"workspace:*","@storm-software/config-tools":"workspace:*","@swc/core":"1.7.26","nx":"^20.3.1","rollup":"^4.29.1","typescript":"^5.7.2","unbuild":"^3.2.0"},"peerDependenciesMeta":{"@nx/devkit":{"optional":false},"@nx/js":{"optional":false},"@storm-software/build-tools":{"optional":false},"@storm-software/config-tools":{"optional":false},"@swc/core":{"optional":true},"nx":{"optional":false},"rollup":{"optional":false},"typescript":{"optional":false},"unbuild":{"optional":false}},"dependencies":{"@humanfs/node":"^0.16.6","commander":"^12.1.0","defu":"6.1.4","rollup":"^4.29.1","rollup-plugin-typescript2":"0.36.0"},"devDependencies":{"@nx/devkit":"^20.3.1","@nx/js":"^20.3.1","@storm-software/build-tools":"0.124.1","@storm-software/config":"1.93.1","@storm-software/config-tools":"1.132.1","@swc/core":"1.7.26","@types/node":"^22.10.2","nx":"^20.3.1","tsup":"8.3.5","typescript":"^5.7.2","unbuild":"^3.2.0"},"publishConfig":{"access":"public"},"sideEffects":false}