@yohs/esbuild-utils 0.2.3 → 0.2.6

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
@@ -4,6 +4,7 @@ Reusable esbuild helpers that make it easier to bootstrap local dev flows:
4
4
 
5
5
  - Opinionated runners that keep long-lived processes in sync with esbuild outputs
6
6
  - Quality-of-life plugins (clear console, custom logging, persistent spinner)
7
+ - Runtime-artifact helpers for bundled Node services that need generated deploy manifests
7
8
 
8
9
  ## Quick start
9
10
 
@@ -35,9 +36,46 @@ export default {
35
36
  - `@yohs/esbuild-utils` – re-exports everything in this package
36
37
  - `@yohs/esbuild-utils/plugins` – bundled access to every plugin helper
37
38
 
39
+ ## Runtime artifact helpers
40
+
41
+ Bundled Node services often need a deploy artifact whose `package.json` is narrower than the source package manifest. The runtime-artifact helpers support that shape:
42
+
43
+ - registry dependencies are externalized and copied into the generated deploy manifest;
44
+ - `workspace:*` dependencies are treated as source dependencies and bundled;
45
+ - registry dependencies discovered from bundled workspace importers are added to the deploy manifest from the importer package's own dependency spec;
46
+ - undeclared third-party bare imports fail during esbuild resolution.
47
+
48
+ ```ts
49
+ import { createRuntimeDependencyBoundaryContext, deployPackageManifestPlugin, readPackageJson, runtimeDependencyBoundaryPlugin } from '@yohs/esbuild-utils/plugins'
50
+
51
+ const packageJson = await readPackageJson('package.json')
52
+ const boundary = createRuntimeDependencyBoundaryContext({
53
+ workspaceRootPath: process.cwd(),
54
+ packageJson,
55
+ internalPackageScopes: ['@muse'],
56
+ errorPackageJsonPath: 'services/my-service/package.json',
57
+ })
58
+
59
+ export default {
60
+ entryPoints: ['src/main.ts'],
61
+ bundle: true,
62
+ platform: 'node',
63
+ format: 'esm',
64
+ outfile: '.build/main.js',
65
+ plugins: [
66
+ runtimeDependencyBoundaryPlugin(boundary),
67
+ deployPackageManifestPlugin({
68
+ outputPath: '.build/package.json',
69
+ packageJson,
70
+ runtimeDependencies: boundary.runtimeDependencies,
71
+ main: 'main.js',
72
+ }),
73
+ ],
74
+ }
75
+ ```
76
+
38
77
  ## Scripts
39
78
 
40
79
  - `pnpm build` – emits ESM modules and d.ts files via **tsdown**
41
80
  - `pnpm test` – runs the vitest suite
42
81
  - `pnpm lint` / `pnpm typecheck` – local validation helpers
43
-
package/dist/index.d.mts CHANGED
@@ -2,4 +2,5 @@ import { clearConsolePlugin } from "./plugins/clear-console.mjs";
2
2
  import { customLoggingPlugin } from "./plugins/custom-logging.mjs";
3
3
  import { ProcessPluginOptions, runProcessPlugin } from "./plugins/run-process.mjs";
4
4
  import { RunFunctionsPluginOptions, runFunctionsPlugin } from "./plugins/run-functions.mjs";
5
- export { ProcessPluginOptions, RunFunctionsPluginOptions, clearConsolePlugin, customLoggingPlugin, runFunctionsPlugin, runProcessPlugin };
5
+ import { DeployPackageJson, DeployPackageJsonOptions, DeployPackageManifestPluginOptions, PackageJson, RuntimeDependencies, RuntimeDependencyBoundaryContext, RuntimeDependencyBoundaryContextOptions, buildDeployPackageJson, createRuntimeDependencyBoundaryContext, deployPackageManifestPlugin, readPackageJson, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson } from "./plugins/runtime-artifact.mjs";
6
+ export { DeployPackageJson, DeployPackageJsonOptions, DeployPackageManifestPluginOptions, PackageJson, ProcessPluginOptions, RunFunctionsPluginOptions, RuntimeDependencies, RuntimeDependencyBoundaryContext, RuntimeDependencyBoundaryContextOptions, buildDeployPackageJson, clearConsolePlugin, createRuntimeDependencyBoundaryContext, customLoggingPlugin, deployPackageManifestPlugin, readPackageJson, runFunctionsPlugin, runProcessPlugin, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson };
package/dist/index.mjs CHANGED
@@ -2,5 +2,6 @@ import { clearConsolePlugin } from "./plugins/clear-console.mjs";
2
2
  import { customLoggingPlugin } from "./plugins/custom-logging.mjs";
3
3
  import { runProcessPlugin } from "./plugins/run-process.mjs";
4
4
  import { runFunctionsPlugin } from "./plugins/run-functions.mjs";
5
+ import { buildDeployPackageJson, createRuntimeDependencyBoundaryContext, deployPackageManifestPlugin, readPackageJson, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson } from "./plugins/runtime-artifact.mjs";
5
6
 
6
- export { clearConsolePlugin, customLoggingPlugin, runFunctionsPlugin, runProcessPlugin };
7
+ export { buildDeployPackageJson, clearConsolePlugin, createRuntimeDependencyBoundaryContext, customLoggingPlugin, deployPackageManifestPlugin, readPackageJson, runFunctionsPlugin, runProcessPlugin, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson };
@@ -0,0 +1,57 @@
1
+ //#region ../node-utils/src/console/animation.ts
2
+ const spinners = [
3
+ "⠋",
4
+ "⠙",
5
+ "⠹",
6
+ "⠸",
7
+ "⠼",
8
+ "⠴",
9
+ "⠦",
10
+ "⠧",
11
+ "⠇",
12
+ "⠏"
13
+ ];
14
+ let spinnerInterval;
15
+ let spinnerIndex = 0;
16
+ let isWatchMode = false;
17
+ let currentStatus = "Ready";
18
+ const nextSpinner = () => {
19
+ const frame = spinners[spinnerIndex];
20
+ spinnerIndex = (spinnerIndex + 1) % spinners.length;
21
+ return frame;
22
+ };
23
+ const startPersistentSpinner = () => {
24
+ if (spinnerInterval) return;
25
+ spinnerInterval = setInterval(() => {
26
+ process.stdout.write("\x1B[s");
27
+ process.stdout.write("\x1B[H");
28
+ process.stdout.write(`\x1b[K${nextSpinner()} ${currentStatus}`);
29
+ process.stdout.write("\x1B[u");
30
+ }, 100);
31
+ };
32
+ const stopPersistentSpinner = () => {
33
+ if (!spinnerInterval) return;
34
+ clearInterval(spinnerInterval);
35
+ spinnerInterval = void 0;
36
+ process.stdout.write("\x1B[s\x1B[H\x1B[K\x1B[u");
37
+ };
38
+ const updateStatus = (status) => {
39
+ currentStatus = status;
40
+ };
41
+ const getWatchMode = () => isWatchMode;
42
+ const startSpinner = (message) => {
43
+ if (spinnerInterval) return;
44
+ spinnerInterval = setInterval(() => {
45
+ process.stdout.write(`\r${nextSpinner()} ${message}`);
46
+ }, 80);
47
+ };
48
+ const stopSpinner = () => {
49
+ if (!spinnerInterval) return;
50
+ clearInterval(spinnerInterval);
51
+ spinnerInterval = void 0;
52
+ process.stdout.write("\r" + " ".repeat(50) + "\r");
53
+ };
54
+
55
+ //#endregion
56
+ export { getWatchMode, startPersistentSpinner, startSpinner, stopPersistentSpinner, stopSpinner, updateStatus };
57
+ //# sourceMappingURL=animation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation.mjs","names":["spinnerInterval: NodeJS.Timeout | undefined"],"sources":["../../../../../node-utils/src/console/animation.ts"],"sourcesContent":["const spinners = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']\n\nlet spinnerInterval: NodeJS.Timeout | undefined\nlet spinnerIndex = 0\nlet isWatchMode = false\nlet currentStatus = 'Ready'\n\nconst nextSpinner = (): string => {\n\tconst frame = spinners[spinnerIndex]\n\tspinnerIndex = (spinnerIndex + 1) % spinners.length\n\treturn frame\n}\n\nexport const startPersistentSpinner = (): void => {\n\tif (spinnerInterval) return\n\n\tspinnerInterval = setInterval(() => {\n\t\tprocess.stdout.write('\\x1b[s') // Save cursor position\n\t\tprocess.stdout.write('\\x1b[H') // Move to top-left corner\n\t\tprocess.stdout.write(`\\x1b[K${nextSpinner()} ${currentStatus}`)\n\t\tprocess.stdout.write('\\x1b[u') // Restore cursor position\n\t}, 100)\n}\n\nexport const stopPersistentSpinner = (): void => {\n\tif (!spinnerInterval) return\n\tclearInterval(spinnerInterval)\n\tspinnerInterval = undefined\n\tprocess.stdout.write('\\x1b[s\\x1b[H\\x1b[K\\x1b[u')\n}\n\nexport const updateStatus = (status: string): void => {\n\tcurrentStatus = status\n}\n\nexport const setWatchMode = (watchMode: boolean): void => {\n\tisWatchMode = watchMode\n}\n\nexport const getWatchMode = (): boolean => isWatchMode\n\nexport const startSpinner = (message: string): void => {\n\tif (spinnerInterval) return\n\tspinnerInterval = setInterval(() => {\n\t\tprocess.stdout.write(`\\r${nextSpinner()} ${message}`)\n\t}, 80)\n}\n\nexport const stopSpinner = (): void => {\n\tif (!spinnerInterval) return\n\tclearInterval(spinnerInterval)\n\tspinnerInterval = undefined\n\tprocess.stdout.write('\\r' + ' '.repeat(50) + '\\r')\n}\n\nexport const createProgressBar = (total: number) => {\n\tlet current = 0\n\tconst barLength = 20\n\n\treturn {\n\t\tupdate: (increment: number = 1) => {\n\t\t\tcurrent += increment\n\t\t\tconst progress = Math.min(current / total, 1)\n\t\t\tconst filled = Math.round(barLength * progress)\n\t\t\tconst empty = barLength - filled\n\t\t\tconst bar = '█'.repeat(filled) + '░'.repeat(empty)\n\t\t\tconst percentage = Math.round(progress * 100)\n\t\t\tprocess.stdout.write(`\\r[${bar}] ${percentage}%`)\n\t\t},\n\t\tcomplete: () => {\n\t\t\tprocess.stdout.write('\\r' + ' '.repeat(50) + '\\r')\n\t\t},\n\t}\n}\n\n"],"mappings":";AAAA,MAAM,WAAW;CAAC;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAI;AAEnE,IAAIA;AACJ,IAAI,eAAe;AACnB,IAAI,cAAc;AAClB,IAAI,gBAAgB;AAEpB,MAAM,oBAA4B;CACjC,MAAM,QAAQ,SAAS;AACvB,iBAAgB,eAAe,KAAK,SAAS;AAC7C,QAAO;;AAGR,MAAa,+BAAqC;AACjD,KAAI,gBAAiB;AAErB,mBAAkB,kBAAkB;AACnC,UAAQ,OAAO,MAAM,SAAS;AAC9B,UAAQ,OAAO,MAAM,SAAS;AAC9B,UAAQ,OAAO,MAAM,SAAS,aAAa,CAAC,GAAG,gBAAgB;AAC/D,UAAQ,OAAO,MAAM,SAAS;IAC5B,IAAI;;AAGR,MAAa,8BAAoC;AAChD,KAAI,CAAC,gBAAiB;AACtB,eAAc,gBAAgB;AAC9B,mBAAkB;AAClB,SAAQ,OAAO,MAAM,2BAA2B;;AAGjD,MAAa,gBAAgB,WAAyB;AACrD,iBAAgB;;AAOjB,MAAa,qBAA8B;AAE3C,MAAa,gBAAgB,YAA0B;AACtD,KAAI,gBAAiB;AACrB,mBAAkB,kBAAkB;AACnC,UAAQ,OAAO,MAAM,KAAK,aAAa,CAAC,GAAG,UAAU;IACnD,GAAG;;AAGP,MAAa,oBAA0B;AACtC,KAAI,CAAC,gBAAiB;AACtB,eAAc,gBAAgB;AAC9B,mBAAkB;AAClB,SAAQ,OAAO,MAAM,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK"}
@@ -1,4 +1,4 @@
1
- import { getWatchMode, startPersistentSpinner, startSpinner, stopPersistentSpinner, stopSpinner, updateStatus } from "@yohs/node-utils/console";
1
+ import { getWatchMode, startPersistentSpinner, startSpinner, stopPersistentSpinner, stopSpinner, updateStatus } from "../node-utils/src/console/animation.mjs";
2
2
 
3
3
  //#region src/plugins/custom-logging.ts
4
4
  const customLoggingPlugin = {
@@ -1 +1 @@
1
- {"version":3,"file":"run-process.d.mts","names":[],"sources":["../../src/plugins/run-process.ts"],"sourcesContent":[],"mappings":";;;;;KACK,WAAA,GAAc,kBAAkB;UAOpB,oBAAA;EAPZ,MAAA,EAAA,CAAA,QAAW,EAAA,MAAqB,EAAA,GAQN,iBARF;EAOZ,KAAA,CAAA,EAAA,MAAA;EAOL,UAAA,CAAA,EAJE,WAIkB;AAEhC;KAFY,oBAAA,aAAiC,yBAAyB;cAEzD,kBAAkB"}
1
+ {"version":3,"file":"run-process.d.mts","names":[],"sources":["../../src/plugins/run-process.ts"],"sourcesContent":[],"mappings":";;;;;KACK,WAAA,GAAc,kBAAkB;UAOpB,oBAAA;EAPZ,MAAA,EAAA,CAAA,QAAW,EAAA,MAAA,EAAqB,GAQN,iBARZ;EAOF,KAAA,CAAA,EAAA,MAAA;EAOL,UAAA,CAAA,EAJE,WAIkB;AAEhC;KAFY,oBAAA,aAAiC,yBAAyB;cAEzD,kBAAkB"}
@@ -1,4 +1,4 @@
1
- import { updateStatus } from "@yohs/node-utils/console";
1
+ import { updateStatus } from "../node-utils/src/console/animation.mjs";
2
2
  import { styleText } from "node:util";
3
3
 
4
4
  //#region src/plugins/run-process.ts
@@ -0,0 +1,66 @@
1
+ import { Plugin } from "esbuild";
2
+
3
+ //#region src/plugins/runtime-artifact.d.ts
4
+ interface PackageJson {
5
+ name?: string;
6
+ description?: string;
7
+ author?: string;
8
+ version?: string;
9
+ private?: boolean;
10
+ type?: string;
11
+ engines?: Record<string, string>;
12
+ dependencies?: Record<string, string>;
13
+ peerDependencies?: Record<string, string>;
14
+ optionalDependencies?: Record<string, string>;
15
+ }
16
+ interface RuntimeDependencies {
17
+ [dependencyName: string]: string;
18
+ }
19
+ interface RuntimeDependencyBoundaryContext {
20
+ workspaceRootPath: string;
21
+ runtimeDependencies: RuntimeDependencies;
22
+ workspaceDependencies: Set<string>;
23
+ fallbackPackageJson: PackageJson;
24
+ packageJsonCache: Map<string, PackageJson>;
25
+ internalPackageScopes: string[];
26
+ errorPackageJsonPath: string;
27
+ }
28
+ interface RuntimeDependencyBoundaryContextOptions {
29
+ workspaceRootPath: string;
30
+ packageJson: PackageJson;
31
+ runtimeDependencies?: RuntimeDependencies;
32
+ workspaceDependencies?: Set<string>;
33
+ packageJsonCache?: Map<string, PackageJson>;
34
+ internalPackageScopes?: string[];
35
+ errorPackageJsonPath?: string;
36
+ }
37
+ interface DeployPackageJson {
38
+ name?: string;
39
+ description: string;
40
+ author?: string;
41
+ version?: string;
42
+ private: true;
43
+ type: string;
44
+ main: string;
45
+ engines?: Record<string, string>;
46
+ dependencies: RuntimeDependencies;
47
+ }
48
+ interface DeployPackageJsonOptions {
49
+ packageJson: PackageJson;
50
+ runtimeDependencies: RuntimeDependencies;
51
+ main: string;
52
+ description?: string;
53
+ }
54
+ interface DeployPackageManifestPluginOptions extends DeployPackageJsonOptions {
55
+ outputPath: string;
56
+ }
57
+ declare function readPackageJson(packageJsonPath: string): Promise<PackageJson>;
58
+ declare function createRuntimeDependencyBoundaryContext(options: RuntimeDependencyBoundaryContextOptions): RuntimeDependencyBoundaryContext;
59
+ declare function runtimeDependenciesFromPackageJson(packageJson: PackageJson): RuntimeDependencies;
60
+ declare function workspaceDependenciesFromPackageJson(packageJson: PackageJson): Set<string>;
61
+ declare function runtimeDependencyBoundaryPlugin(context: RuntimeDependencyBoundaryContext): Plugin;
62
+ declare function buildDeployPackageJson(options: DeployPackageJsonOptions): DeployPackageJson;
63
+ declare function deployPackageManifestPlugin(options: DeployPackageManifestPluginOptions): Plugin;
64
+ //#endregion
65
+ export { DeployPackageJson, DeployPackageJsonOptions, DeployPackageManifestPluginOptions, PackageJson, RuntimeDependencies, RuntimeDependencyBoundaryContext, RuntimeDependencyBoundaryContextOptions, buildDeployPackageJson, createRuntimeDependencyBoundaryContext, deployPackageManifestPlugin, readPackageJson, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson };
66
+ //# sourceMappingURL=runtime-artifact.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-artifact.d.mts","names":[],"sources":["../../src/plugins/runtime-artifact.ts"],"sourcesContent":[],"mappings":";;;UAMiB,WAAA;;EAAA,WAAA,CAAA,EAAW,MAAA;EAOjB,MAAA,CAAA,EAAA,MAAA;EACK,OAAA,CAAA,EAAA,MAAA;EACI,OAAA,CAAA,EAAA,OAAA;EACI,IAAA,CAAA,EAAA,MAAA;EAAM,OAAA,CAAA,EAHnB,MAGmB,CAAA,MAAA,EAAA,MAAA,CAAA;EAGb,YAAA,CAAA,EALD,MAKC,CAAmB,MAAA,EAAA,MAAA,CAAA;EAInB,gBAAA,CAAA,EARG,MAQH,CAAA,MAAA,EAAA,MAAgC,CAAA;EAE3B,oBAAA,CAAA,EATE,MASF,CAAA,MAAA,EAAA,MAAA,CAAA;;AAEA,UARL,mBAAA,CAQK;EACS,CAAA,cAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;AAAT,UALL,gCAAA,CAKK;EAKL,iBAAA,EAAA,MAAA;EAEH,mBAAA,EAVQ,mBAUR;EACS,qBAAA,EAVC,GAUD,CAAA,MAAA,CAAA;EACE,mBAAA,EAVH,WAUG;EACO,gBAAA,EAVb,GAUa,CAAA,MAAA,EAVD,WAUC,CAAA;EAAZ,qBAAA,EAAA,MAAA,EAAA;EAAG,oBAAA,EAAA,MAAA;AAKvB;AAYiB,UAtBA,uCAAA,CAwBK;EAKL,iBAAA,EAAA,MAAA;EAIK,WAAA,EA/BR,WA+BuB;EAMrB,mBAAA,CAAA,EApCO,mBAoC+B;EAkBtC,qBAAA,CAAA,EArDS,GAqDT,CAAA,MAAA,CAAA;EAUA,gBAAA,CAAA,EA9DI,GA8DJ,CAAA,MAAA,EA9DgB,WA8DoB,CAAA;EASpC,qBAAA,CAAA,EAAA,MAAA,EAAA;EAeA,oBAAA,CAAA,EAAA,MAAsB;AAgBtC;UAjGiB,iBAAA;;;;;;;;YAQN;gBACI;;UAGE,wBAAA;eACH;uBACQ;;;;UAKL,kCAAA,SAA2C;;;iBAItC,eAAA,2BAA0C,QAAQ;iBAMxD,sCAAA,UAAgD,0CAA0C;iBAkB1F,kCAAA,cAAgD,cAAc;iBAU9D,oCAAA,cAAkD,cAAc;iBAShE,+BAAA,UAAyC,mCAAmC;iBAe5E,sBAAA,UAAgC,2BAA2B;iBAgB3D,2BAAA,UAAqC,qCAAqC"}
@@ -0,0 +1,155 @@
1
+ import { builtinModules } from "node:module";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { readFile, writeFile } from "node:fs/promises";
4
+ import { dirname, resolve } from "node:path";
5
+
6
+ //#region src/plugins/runtime-artifact.ts
7
+ async function readPackageJson(packageJsonPath) {
8
+ const packageJsonRaw = await readFile(packageJsonPath, "utf8");
9
+ return JSON.parse(packageJsonRaw);
10
+ }
11
+ function createRuntimeDependencyBoundaryContext(options) {
12
+ const runtimeDependencies = options.runtimeDependencies ?? runtimeDependenciesFromPackageJson(options.packageJson);
13
+ const workspaceDependencies = options.workspaceDependencies ?? workspaceDependenciesFromPackageJson(options.packageJson);
14
+ const packageJsonCache = options.packageJsonCache ?? /* @__PURE__ */ new Map();
15
+ const internalPackageScopes = options.internalPackageScopes ?? [];
16
+ const errorPackageJsonPath = options.errorPackageJsonPath ?? "package.json";
17
+ return {
18
+ workspaceRootPath: options.workspaceRootPath,
19
+ runtimeDependencies,
20
+ workspaceDependencies,
21
+ fallbackPackageJson: options.packageJson,
22
+ packageJsonCache,
23
+ internalPackageScopes,
24
+ errorPackageJsonPath
25
+ };
26
+ }
27
+ function runtimeDependenciesFromPackageJson(packageJson) {
28
+ const dependencies = {};
29
+ for (const [dependencyName, version] of Object.entries(packageJson.dependencies ?? {})) {
30
+ if (isWorkspaceDependencySpec(version)) continue;
31
+ assertSupportedRuntimeDependencySpec(dependencyName, version);
32
+ dependencies[dependencyName] = version;
33
+ }
34
+ return dependencies;
35
+ }
36
+ function workspaceDependenciesFromPackageJson(packageJson) {
37
+ const dependencyNames = [];
38
+ for (const [dependencyName, version] of Object.entries(packageJson.dependencies ?? {})) if (isWorkspaceDependencySpec(version)) dependencyNames.push(dependencyName);
39
+ return new Set(dependencyNames);
40
+ }
41
+ function runtimeDependencyBoundaryPlugin(context) {
42
+ const runtimeDependencyNames = new Set(Object.keys(context.runtimeDependencies));
43
+ return {
44
+ name: "runtime-dependency-boundary",
45
+ setup(build) {
46
+ build.onResolve({ filter: /^[^./]/ }, (args) => {
47
+ return resolveRuntimeDependency(context, runtimeDependencyNames, args);
48
+ });
49
+ }
50
+ };
51
+ }
52
+ function buildDeployPackageJson(options) {
53
+ const description = options.description ?? `${options.packageJson.description ?? options.packageJson.name ?? "Node service"} deploy artifact`;
54
+ return {
55
+ name: options.packageJson.name,
56
+ description,
57
+ author: options.packageJson.author,
58
+ version: options.packageJson.version,
59
+ private: true,
60
+ type: options.packageJson.type ?? "module",
61
+ main: options.main,
62
+ engines: options.packageJson.engines,
63
+ dependencies: options.runtimeDependencies
64
+ };
65
+ }
66
+ function deployPackageManifestPlugin(options) {
67
+ return {
68
+ name: "deploy-package-manifest",
69
+ setup(build) {
70
+ build.onEnd(async (result) => {
71
+ if (result.errors.length > 0) return;
72
+ const deployPackageJson = buildDeployPackageJson(options);
73
+ await writeFile(options.outputPath, `${JSON.stringify(deployPackageJson, null, 2)}\n`, "utf8");
74
+ });
75
+ }
76
+ };
77
+ }
78
+ function resolveRuntimeDependency(context, runtimeDependencyNames, args) {
79
+ if (isNodeBuiltinImport(args.path)) return {
80
+ path: args.path,
81
+ external: true
82
+ };
83
+ const packageName = barePackageName(args.path);
84
+ if (isInternalWorkspacePackage(packageName, context.workspaceDependencies, context.internalPackageScopes)) return null;
85
+ if (runtimeDependencyNames.has(packageName)) return {
86
+ path: args.path,
87
+ external: true
88
+ };
89
+ addDiscoveredRuntimeDependency(context, packageName, args.importer);
90
+ runtimeDependencyNames.add(packageName);
91
+ return {
92
+ path: args.path,
93
+ external: true
94
+ };
95
+ }
96
+ function addDiscoveredRuntimeDependency(context, dependencyName, importer) {
97
+ if (context.runtimeDependencies[dependencyName]) return;
98
+ const version = runtimeDependencyVersionFromImporter(context, dependencyName, importer);
99
+ if (!version) throw new Error(`Undeclared runtime package import "${dependencyName}" from "${importer}". Add it to the importing package dependencies or to ${context.errorPackageJsonPath} dependencies.`);
100
+ assertSupportedRuntimeDependencySpec(dependencyName, version);
101
+ context.runtimeDependencies[dependencyName] = version;
102
+ }
103
+ function runtimeDependencyVersionFromImporter(context, dependencyName, importer) {
104
+ const packageJson = packageJsonForImporter(context, importer);
105
+ if (!packageJson) return null;
106
+ return dependencyVersionFromPackageJson(packageJson, dependencyName);
107
+ }
108
+ function packageJsonForImporter(context, importer) {
109
+ if (!importer) return context.fallbackPackageJson;
110
+ let currentDirPath = dirname(importer);
111
+ while (currentDirPath.startsWith(context.workspaceRootPath)) {
112
+ const packageJsonPath = resolve(currentDirPath, "package.json");
113
+ if (existsSync(packageJsonPath)) return cachedPackageJson(context.packageJsonCache, packageJsonPath);
114
+ const nextDirPath = dirname(currentDirPath);
115
+ if (nextDirPath === currentDirPath) break;
116
+ currentDirPath = nextDirPath;
117
+ }
118
+ return null;
119
+ }
120
+ function cachedPackageJson(packageJsonCache, packageJsonPath) {
121
+ const cachedPackageJson$1 = packageJsonCache.get(packageJsonPath);
122
+ if (cachedPackageJson$1) return cachedPackageJson$1;
123
+ const packageJsonRaw = readFileSync(packageJsonPath, "utf8");
124
+ const packageJson = JSON.parse(packageJsonRaw);
125
+ packageJsonCache.set(packageJsonPath, packageJson);
126
+ return packageJson;
127
+ }
128
+ function dependencyVersionFromPackageJson(packageJson, dependencyName) {
129
+ return packageJson.dependencies?.[dependencyName] ?? packageJson.peerDependencies?.[dependencyName] ?? packageJson.optionalDependencies?.[dependencyName] ?? null;
130
+ }
131
+ function isWorkspaceDependencySpec(version) {
132
+ return version.startsWith("workspace:");
133
+ }
134
+ function assertSupportedRuntimeDependencySpec(dependencyName, version) {
135
+ if (version.startsWith("link:") || version.startsWith("file:")) throw new Error(`Unsupported runtime dependency spec for ${dependencyName}: ${version}`);
136
+ }
137
+ function isInternalWorkspacePackage(packageName, workspaceDependencies, internalPackageScopes) {
138
+ if (workspaceDependencies.has(packageName)) return true;
139
+ return internalPackageScopes.some((scope) => packageName.startsWith(`${scope}/`));
140
+ }
141
+ function isNodeBuiltinImport(importPath) {
142
+ if (importPath.startsWith("node:")) return true;
143
+ return builtinModules.includes(importPath);
144
+ }
145
+ function barePackageName(importPath) {
146
+ if (importPath.startsWith("@")) {
147
+ const parts = importPath.split("/");
148
+ return `${parts[0]}/${parts[1]}`;
149
+ }
150
+ return importPath.split("/")[0];
151
+ }
152
+
153
+ //#endregion
154
+ export { buildDeployPackageJson, createRuntimeDependencyBoundaryContext, deployPackageManifestPlugin, readPackageJson, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson };
155
+ //# sourceMappingURL=runtime-artifact.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-artifact.mjs","names":["packageJsonRaw: string","runtimeDependencies: RuntimeDependencies","workspaceDependencies: Set<string>","packageJsonCache: Map<string, PackageJson>","internalPackageScopes: string[]","errorPackageJsonPath: string","dependencies: RuntimeDependencies","dependencyNames: string[]","runtimeDependencyNames: Set<string>","description: string","deployPackageJson: DeployPackageJson","packageName: string","version: string | null","packageJson: PackageJson | null","currentDirPath: string","packageJsonPath: string","nextDirPath: string","cachedPackageJson: PackageJson | undefined","cachedPackageJson","packageJson: PackageJson","parts: string[]"],"sources":["../../src/plugins/runtime-artifact.ts"],"sourcesContent":["import type { OnResolveArgs, OnResolveOptions, OnResolveResult, Plugin, PluginBuild } from 'esbuild'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { builtinModules } from 'node:module'\nimport { dirname, resolve } from 'node:path'\n\nexport interface PackageJson {\n\tname?: string\n\tdescription?: string\n\tauthor?: string\n\tversion?: string\n\tprivate?: boolean\n\ttype?: string\n\tengines?: Record<string, string>\n\tdependencies?: Record<string, string>\n\tpeerDependencies?: Record<string, string>\n\toptionalDependencies?: Record<string, string>\n}\n\nexport interface RuntimeDependencies {\n\t[dependencyName: string]: string\n}\n\nexport interface RuntimeDependencyBoundaryContext {\n\tworkspaceRootPath: string\n\truntimeDependencies: RuntimeDependencies\n\tworkspaceDependencies: Set<string>\n\tfallbackPackageJson: PackageJson\n\tpackageJsonCache: Map<string, PackageJson>\n\tinternalPackageScopes: string[]\n\terrorPackageJsonPath: string\n}\n\nexport interface RuntimeDependencyBoundaryContextOptions {\n\tworkspaceRootPath: string\n\tpackageJson: PackageJson\n\truntimeDependencies?: RuntimeDependencies\n\tworkspaceDependencies?: Set<string>\n\tpackageJsonCache?: Map<string, PackageJson>\n\tinternalPackageScopes?: string[]\n\terrorPackageJsonPath?: string\n}\n\nexport interface DeployPackageJson {\n\tname?: string\n\tdescription: string\n\tauthor?: string\n\tversion?: string\n\tprivate: true\n\ttype: string\n\tmain: string\n\tengines?: Record<string, string>\n\tdependencies: RuntimeDependencies\n}\n\nexport interface DeployPackageJsonOptions {\n\tpackageJson: PackageJson\n\truntimeDependencies: RuntimeDependencies\n\tmain: string\n\tdescription?: string\n}\n\nexport interface DeployPackageManifestPluginOptions extends DeployPackageJsonOptions {\n\toutputPath: string\n}\n\nexport async function readPackageJson(packageJsonPath: string): Promise<PackageJson> {\n\tconst packageJsonRaw: string = await readFile(packageJsonPath, 'utf8')\n\tconst packageJson: PackageJson = JSON.parse(packageJsonRaw) as PackageJson\n\treturn packageJson\n}\n\nexport function createRuntimeDependencyBoundaryContext(options: RuntimeDependencyBoundaryContextOptions): RuntimeDependencyBoundaryContext {\n\tconst runtimeDependencies: RuntimeDependencies = options.runtimeDependencies ?? runtimeDependenciesFromPackageJson(options.packageJson)\n\tconst workspaceDependencies: Set<string> = options.workspaceDependencies ?? workspaceDependenciesFromPackageJson(options.packageJson)\n\tconst packageJsonCache: Map<string, PackageJson> = options.packageJsonCache ?? new Map<string, PackageJson>()\n\tconst internalPackageScopes: string[] = options.internalPackageScopes ?? []\n\tconst errorPackageJsonPath: string = options.errorPackageJsonPath ?? 'package.json'\n\tconst context: RuntimeDependencyBoundaryContext = {\n\t\tworkspaceRootPath: options.workspaceRootPath,\n\t\truntimeDependencies,\n\t\tworkspaceDependencies,\n\t\tfallbackPackageJson: options.packageJson,\n\t\tpackageJsonCache,\n\t\tinternalPackageScopes,\n\t\terrorPackageJsonPath,\n\t}\n\treturn context\n}\n\nexport function runtimeDependenciesFromPackageJson(packageJson: PackageJson): RuntimeDependencies {\n\tconst dependencies: RuntimeDependencies = {}\n\tfor (const [dependencyName, version] of Object.entries(packageJson.dependencies ?? {})) {\n\t\tif (isWorkspaceDependencySpec(version)) continue\n\t\tassertSupportedRuntimeDependencySpec(dependencyName, version)\n\t\tdependencies[dependencyName] = version\n\t}\n\treturn dependencies\n}\n\nexport function workspaceDependenciesFromPackageJson(packageJson: PackageJson): Set<string> {\n\tconst dependencyNames: string[] = []\n\tfor (const [dependencyName, version] of Object.entries(packageJson.dependencies ?? {})) {\n\t\tif (isWorkspaceDependencySpec(version)) dependencyNames.push(dependencyName)\n\t}\n\tconst workspaceDependencies: Set<string> = new Set<string>(dependencyNames)\n\treturn workspaceDependencies\n}\n\nexport function runtimeDependencyBoundaryPlugin(context: RuntimeDependencyBoundaryContext): Plugin {\n\tconst runtimeDependencyNames: Set<string> = new Set<string>(Object.keys(context.runtimeDependencies))\n\tconst plugin: Plugin = {\n\t\tname: 'runtime-dependency-boundary',\n\t\tsetup(build: PluginBuild): void {\n\t\t\tconst onResolveOptions: OnResolveOptions = { filter: /^[^./]/ }\n\t\t\tbuild.onResolve(onResolveOptions, (args: OnResolveArgs): OnResolveResult | null => {\n\t\t\t\tconst result: OnResolveResult | null = resolveRuntimeDependency(context, runtimeDependencyNames, args)\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn plugin\n}\n\nexport function buildDeployPackageJson(options: DeployPackageJsonOptions): DeployPackageJson {\n\tconst description: string = options.description ?? `${options.packageJson.description ?? options.packageJson.name ?? 'Node service'} deploy artifact`\n\tconst deployPackageJson: DeployPackageJson = {\n\t\tname: options.packageJson.name,\n\t\tdescription,\n\t\tauthor: options.packageJson.author,\n\t\tversion: options.packageJson.version,\n\t\tprivate: true,\n\t\ttype: options.packageJson.type ?? 'module',\n\t\tmain: options.main,\n\t\tengines: options.packageJson.engines,\n\t\tdependencies: options.runtimeDependencies,\n\t}\n\treturn deployPackageJson\n}\n\nexport function deployPackageManifestPlugin(options: DeployPackageManifestPluginOptions): Plugin {\n\tconst plugin: Plugin = {\n\t\tname: 'deploy-package-manifest',\n\t\tsetup(build: PluginBuild): void {\n\t\t\tbuild.onEnd(async (result) => {\n\t\t\t\tif (result.errors.length > 0) return\n\t\t\t\tconst deployPackageJson: DeployPackageJson = buildDeployPackageJson(options)\n\t\t\t\tawait writeFile(options.outputPath, `${JSON.stringify(deployPackageJson, null, 2)}\\n`, 'utf8')\n\t\t\t})\n\t\t},\n\t}\n\treturn plugin\n}\n\nfunction resolveRuntimeDependency(context: RuntimeDependencyBoundaryContext, runtimeDependencyNames: Set<string>, args: OnResolveArgs): OnResolveResult | null {\n\tif (isNodeBuiltinImport(args.path)) {\n\t\tconst result: OnResolveResult = { path: args.path, external: true }\n\t\treturn result\n\t}\n\n\tconst packageName: string = barePackageName(args.path)\n\tif (isInternalWorkspacePackage(packageName, context.workspaceDependencies, context.internalPackageScopes)) return null\n\tif (runtimeDependencyNames.has(packageName)) {\n\t\tconst result: OnResolveResult = { path: args.path, external: true }\n\t\treturn result\n\t}\n\n\taddDiscoveredRuntimeDependency(context, packageName, args.importer)\n\truntimeDependencyNames.add(packageName)\n\tconst result: OnResolveResult = { path: args.path, external: true }\n\treturn result\n}\n\nfunction addDiscoveredRuntimeDependency(context: RuntimeDependencyBoundaryContext, dependencyName: string, importer: string): void {\n\tif (context.runtimeDependencies[dependencyName]) return\n\n\tconst version: string | null = runtimeDependencyVersionFromImporter(context, dependencyName, importer)\n\tif (!version) throw new Error(`Undeclared runtime package import \"${dependencyName}\" from \"${importer}\". Add it to the importing package dependencies or to ${context.errorPackageJsonPath} dependencies.`)\n\tassertSupportedRuntimeDependencySpec(dependencyName, version)\n\tcontext.runtimeDependencies[dependencyName] = version\n}\n\nfunction runtimeDependencyVersionFromImporter(context: RuntimeDependencyBoundaryContext, dependencyName: string, importer: string): string | null {\n\tconst packageJson: PackageJson | null = packageJsonForImporter(context, importer)\n\tif (!packageJson) return null\n\tconst version: string | null = dependencyVersionFromPackageJson(packageJson, dependencyName)\n\treturn version\n}\n\nfunction packageJsonForImporter(context: RuntimeDependencyBoundaryContext, importer: string): PackageJson | null {\n\tif (!importer) return context.fallbackPackageJson\n\n\tlet currentDirPath: string = dirname(importer)\n\twhile (currentDirPath.startsWith(context.workspaceRootPath)) {\n\t\tconst packageJsonPath: string = resolve(currentDirPath, 'package.json')\n\t\tif (existsSync(packageJsonPath)) {\n\t\t\tconst packageJson: PackageJson = cachedPackageJson(context.packageJsonCache, packageJsonPath)\n\t\t\treturn packageJson\n\t\t}\n\n\t\tconst nextDirPath: string = dirname(currentDirPath)\n\t\tif (nextDirPath === currentDirPath) break\n\t\tcurrentDirPath = nextDirPath\n\t}\n\treturn null\n}\n\nfunction cachedPackageJson(packageJsonCache: Map<string, PackageJson>, packageJsonPath: string): PackageJson {\n\tconst cachedPackageJson: PackageJson | undefined = packageJsonCache.get(packageJsonPath)\n\tif (cachedPackageJson) return cachedPackageJson\n\n\tconst packageJsonRaw: string = readFileSync(packageJsonPath, 'utf8')\n\tconst packageJson: PackageJson = JSON.parse(packageJsonRaw) as PackageJson\n\tpackageJsonCache.set(packageJsonPath, packageJson)\n\treturn packageJson\n}\n\nfunction dependencyVersionFromPackageJson(packageJson: PackageJson, dependencyName: string): string | null {\n\tconst version: string | null = packageJson.dependencies?.[dependencyName] ?? packageJson.peerDependencies?.[dependencyName] ?? packageJson.optionalDependencies?.[dependencyName] ?? null\n\treturn version\n}\n\nfunction isWorkspaceDependencySpec(version: string): boolean {\n\tconst result: boolean = version.startsWith('workspace:')\n\treturn result\n}\n\nfunction assertSupportedRuntimeDependencySpec(dependencyName: string, version: string): void {\n\tif (version.startsWith('link:') || version.startsWith('file:')) throw new Error(`Unsupported runtime dependency spec for ${dependencyName}: ${version}`)\n}\n\nfunction isInternalWorkspacePackage(packageName: string, workspaceDependencies: Set<string>, internalPackageScopes: string[]): boolean {\n\tif (workspaceDependencies.has(packageName)) return true\n\tconst result: boolean = internalPackageScopes.some((scope) => packageName.startsWith(`${scope}/`))\n\treturn result\n}\n\nfunction isNodeBuiltinImport(importPath: string): boolean {\n\tif (importPath.startsWith('node:')) return true\n\tconst result: boolean = builtinModules.includes(importPath)\n\treturn result\n}\n\nfunction barePackageName(importPath: string): string {\n\tif (importPath.startsWith('@')) {\n\t\tconst parts: string[] = importPath.split('/')\n\t\tconst packageName: string = `${parts[0]}/${parts[1]}`\n\t\treturn packageName\n\t}\n\n\tconst parts: string[] = importPath.split('/')\n\tconst packageName: string = parts[0]\n\treturn packageName\n}\n"],"mappings":"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"}
@@ -2,4 +2,5 @@ import { clearConsolePlugin } from "./plugins/clear-console.mjs";
2
2
  import { customLoggingPlugin } from "./plugins/custom-logging.mjs";
3
3
  import { ProcessPluginOptions, runProcessPlugin } from "./plugins/run-process.mjs";
4
4
  import { RunFunctionsPluginOptions, runFunctionsPlugin } from "./plugins/run-functions.mjs";
5
- export { type ProcessPluginOptions, type RunFunctionsPluginOptions, clearConsolePlugin, customLoggingPlugin, runFunctionsPlugin, runProcessPlugin };
5
+ import { DeployPackageJson, DeployPackageJsonOptions, DeployPackageManifestPluginOptions, PackageJson, RuntimeDependencies, RuntimeDependencyBoundaryContext, RuntimeDependencyBoundaryContextOptions, buildDeployPackageJson, createRuntimeDependencyBoundaryContext, deployPackageManifestPlugin, readPackageJson, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson } from "./plugins/runtime-artifact.mjs";
6
+ export { type DeployPackageJson, type DeployPackageJsonOptions, type DeployPackageManifestPluginOptions, type PackageJson, type ProcessPluginOptions, type RunFunctionsPluginOptions, type RuntimeDependencies, type RuntimeDependencyBoundaryContext, type RuntimeDependencyBoundaryContextOptions, buildDeployPackageJson, clearConsolePlugin, createRuntimeDependencyBoundaryContext, customLoggingPlugin, deployPackageManifestPlugin, readPackageJson, runFunctionsPlugin, runProcessPlugin, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson };
package/dist/plugins.mjs CHANGED
@@ -2,5 +2,6 @@ import { clearConsolePlugin } from "./plugins/clear-console.mjs";
2
2
  import { customLoggingPlugin } from "./plugins/custom-logging.mjs";
3
3
  import { runProcessPlugin } from "./plugins/run-process.mjs";
4
4
  import { runFunctionsPlugin } from "./plugins/run-functions.mjs";
5
+ import { buildDeployPackageJson, createRuntimeDependencyBoundaryContext, deployPackageManifestPlugin, readPackageJson, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson } from "./plugins/runtime-artifact.mjs";
5
6
 
6
- export { clearConsolePlugin, customLoggingPlugin, runFunctionsPlugin, runProcessPlugin };
7
+ export { buildDeployPackageJson, clearConsolePlugin, createRuntimeDependencyBoundaryContext, customLoggingPlugin, deployPackageManifestPlugin, readPackageJson, runFunctionsPlugin, runProcessPlugin, runtimeDependenciesFromPackageJson, runtimeDependencyBoundaryPlugin, workspaceDependenciesFromPackageJson };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yohs/esbuild-utils",
3
- "version": "0.2.3",
3
+ "version": "0.2.6",
4
4
  "description": "Reusable esbuild plugins, runners, and CLI helpers",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -21,12 +21,11 @@
21
21
  ],
22
22
  "sideEffects": false,
23
23
  "dependencies": {
24
- "chalk": "^5.6.2",
25
- "@yohs/node-utils": "0.2.0"
24
+ "chalk": "^5.6.2"
26
25
  },
27
26
  "peerDependencies": {
28
- "esbuild": "^0.24.0",
29
- "@yohs/gcp-utils": "0.1.3"
27
+ "@yohs/gcp-utils": "^0.1.5",
28
+ "esbuild": "^0.25"
30
29
  },
31
30
  "peerDependenciesMeta": {
32
31
  "@yohs/gcp-utils": {
@@ -38,7 +37,7 @@
38
37
  "rimraf": "^6.1.2",
39
38
  "tsdown": "^0.16.6",
40
39
  "typescript": "^5.9.3",
41
- "@yohs/gcp-utils": "0.1.3"
40
+ "@yohs/gcp-utils": "0.1.5"
42
41
  },
43
42
  "publishConfig": {
44
43
  "access": "public"