@fastkit/plugboy 1.0.0-next.3 → 1.0.0-next.5

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/dist/plugboy.mjs CHANGED
@@ -1,3 +1,2 @@
1
- import { $ as normalizeDTSSettings, A as resolveRawExposeEntriesSettings, B as exitHook, C as findProjectPlugin, D as loadProjectConfig, E as isProjectPackageJson, F as getFilename, G as resolveListable, H as mergeExternals, I as isFileNotFoundException, J as WORKSPACE_REQUIRED_FIELDS, K as PROJECT_REQUIRED_FIELDS, L as pathExists, M as findConfig, N as findFile, O as resolveUserProjectConfig, P as getDirname, Q as normalizeDTSPreserveTypeTarget, R as rmrf, S as extractProjectPlugins, T as defineProjectConfig, U as mergeNoExternals, V as mergeChunkAddons, W as isPromise, X as mergeDTSSettingsList, Y as resolveOptimizeCSSOptions, Z as normalizeDTSPreserveTypeSettings, _ as loadWorkspaceConfig, a as syncWorkspacePackageFields, b as resolveUserWorkspaceConfig, c as Builder, d as getWorkspacePackageJson, et as createHooksDefaults, f as Path, g as isWorkspacePackageJson, h as defineWorkspaceConfig, i as getWorkspace, j as copyDirSync, k as exposeEntries, l as findWorkspacePackages, m as resolveUserHooks, n as PlugboyWorkspace, o as PlugboyProject, p as buildHooks, q as TSDOWN_SYNC_OPTIONS, r as WORKSPACE_PACKAGE_SYNC_FIELDS, s as getProject, t as generateWorkspace, u as getProjectPackageJson, v as resolveRawWorkspaceEntries, w as resolveUserPluginOption, x as definePlugin, y as resolveRawWorkspaceEntry, z as writeFileAtomic } from "./workspace-CVcq6W59.mjs";
2
-
3
- export { Builder, PROJECT_REQUIRED_FIELDS, Path, PlugboyProject, PlugboyWorkspace, TSDOWN_SYNC_OPTIONS, WORKSPACE_PACKAGE_SYNC_FIELDS, WORKSPACE_REQUIRED_FIELDS, buildHooks, copyDirSync, createHooksDefaults, definePlugin, defineProjectConfig, defineWorkspaceConfig, exitHook, exposeEntries, extractProjectPlugins, findConfig, findFile, findProjectPlugin, findWorkspacePackages, generateWorkspace, getDirname, getFilename, getProject, getProjectPackageJson, getWorkspace, getWorkspacePackageJson, isFileNotFoundException, isProjectPackageJson, isPromise, isWorkspacePackageJson, loadProjectConfig, loadWorkspaceConfig, mergeChunkAddons, mergeDTSSettingsList, mergeExternals, mergeNoExternals, normalizeDTSPreserveTypeSettings, normalizeDTSPreserveTypeTarget, normalizeDTSSettings, pathExists, resolveListable, resolveOptimizeCSSOptions, resolveRawExposeEntriesSettings, resolveRawWorkspaceEntries, resolveRawWorkspaceEntry, resolveUserHooks, resolveUserPluginOption, resolveUserProjectConfig, resolveUserWorkspaceConfig, rmrf, syncWorkspacePackageFields, writeFileAtomic };
1
+ import { $ as normalizeDTSSettings, A as resolveRawExposeEntriesSettings, B as exitHook, C as findProjectPlugin, D as loadProjectConfig, E as isProjectPackageJson, F as getFilename, G as resolveListable, H as mergeExternals, I as isFileNotFoundException, J as WORKSPACE_REQUIRED_FIELDS, K as PROJECT_REQUIRED_FIELDS, L as pathExists, M as findConfig, N as findFile, O as resolveUserProjectConfig, P as getDirname, Q as normalizeDTSPreserveTypeTarget, R as rmrf, S as extractProjectPlugins, T as defineProjectConfig, U as mergeNoExternals, V as mergeChunkAddons, W as isPromise, X as mergeDTSSettingsList, Y as resolveOptimizeCSSOptions, Z as normalizeDTSPreserveTypeSettings, _ as loadWorkspaceConfig, a as syncWorkspacePackageFields, b as resolveUserWorkspaceConfig, c as Builder, d as getWorkspacePackageJson, et as createHooksDefaults, f as Path, g as isWorkspacePackageJson, h as defineWorkspaceConfig, i as getWorkspace, j as copyDirSync, k as exposeEntries, l as findWorkspacePackages, m as resolveUserHooks, n as PlugboyWorkspace, o as PlugboyProject, p as buildHooks, q as TSDOWN_SYNC_OPTIONS, r as WORKSPACE_PACKAGE_SYNC_FIELDS, s as getProject, t as generateWorkspace, u as getProjectPackageJson, v as resolveRawWorkspaceEntries, w as resolveUserPluginOption, x as definePlugin, y as resolveRawWorkspaceEntry, z as writeFileAtomic } from "./workspace-VIdL5Yhp.mjs";
2
+ export { Builder, PROJECT_REQUIRED_FIELDS, Path, PlugboyProject, PlugboyWorkspace, TSDOWN_SYNC_OPTIONS, WORKSPACE_PACKAGE_SYNC_FIELDS, WORKSPACE_REQUIRED_FIELDS, buildHooks, copyDirSync, createHooksDefaults, definePlugin, defineProjectConfig, defineWorkspaceConfig, exitHook, exposeEntries, extractProjectPlugins, findConfig, findFile, findProjectPlugin, findWorkspacePackages, generateWorkspace, getDirname, getFilename, getProject, getProjectPackageJson, getWorkspace, getWorkspacePackageJson, isFileNotFoundException, isProjectPackageJson, isPromise, isWorkspacePackageJson, loadProjectConfig, loadWorkspaceConfig, mergeChunkAddons, mergeDTSSettingsList, mergeExternals, mergeNoExternals, normalizeDTSPreserveTypeSettings, normalizeDTSPreserveTypeTarget, normalizeDTSSettings, pathExists, resolveListable, resolveOptimizeCSSOptions, resolveRawExposeEntriesSettings, resolveRawWorkspaceEntries, resolveRawWorkspaceEntry, resolveUserHooks, resolveUserPluginOption, resolveUserProjectConfig, resolveUserWorkspaceConfig, rmrf, syncWorkspacePackageFields, writeFileAtomic };
@@ -1,7 +1,6 @@
1
1
  import { dirname, join } from "node:path";
2
2
  import { fileURLToPath } from "node:url";
3
3
  import { stat } from "node:fs/promises";
4
-
5
4
  //#region src/runtime-utils/path.ts
6
5
  /**
7
6
  * Universal ESM function to get the file path of the caller.
@@ -88,7 +87,7 @@ async function getPackageDir(callerFilePath = getCallerFilePath()) {
88
87
  }
89
88
  throw new Error(`package.json not found for: ${callerFilePath}`);
90
89
  }
91
-
92
90
  //#endregion
93
91
  export { getCallerFile, getCallerFilePath, getPackageDir };
92
+
94
93
  //# sourceMappingURL=runtime-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-utils.mjs","names":[],"sources":["../src/runtime-utils/path.ts"],"sourcesContent":["import { stat } from 'node:fs/promises';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Universal ESM function to get the file path of the caller.\n * Works in Node.js, Deno, and Bun (native ESM environments).\n *\n * - Uses V8 structured stack traces when available (Node/Bun).\n * - Falls back to string-based stack parsing when necessary (e.g., Deno).\n * - Throws a descriptive error when the file path cannot be determined.\n */\n\nclass CallerFileError extends Error {\n info: unknown;\n constructor(message: string, info: unknown = {}) {\n super(message);\n this.name = 'CallerFileError';\n this.info = info;\n }\n}\n\n/**\n * Returns the absolute file path of the calling file.\n *\n * @param {number} depth - 1 = immediate caller, 2 = caller's caller, etc.\n * @returns {string} Absolute file path of the caller.\n * @throws {CallerFileError} If the caller file cannot be determined.\n */\nexport function getCallerFile(depth = 1) {\n if (typeof depth !== 'number' || depth < 1) {\n throw new CallerFileError('Invalid depth argument', { depth });\n }\n\n // --- Primary method: V8 structured stack trace (Node.js / Bun) ---\n try {\n const originalPrepare = Error.prepareStackTrace;\n Error.prepareStackTrace = (_, structuredStackTrace) => structuredStackTrace;\n const err = new Error();\n const { stack } = err;\n Error.prepareStackTrace = originalPrepare;\n\n if (Array.isArray(stack)) {\n const frame = stack[depth];\n if (frame && typeof frame.getFileName === 'function') {\n const file = frame.getFileName();\n if (typeof file === 'string') return file;\n throw new CallerFileError('CallSite#getFileName() returned null', {\n frame,\n });\n } else {\n throw new CallerFileError('Invalid or missing CallSite object', {\n frame,\n });\n }\n } else {\n throw new CallerFileError('Structured stack trace unavailable', {\n stack,\n });\n }\n } catch (v8Error) {\n // --- Fallback: plain text stack parsing (Deno and others) ---\n try {\n const stackStr = new Error().stack;\n if (typeof stackStr !== 'string') {\n throw new CallerFileError('Error.stack is not a string', {\n stack: stackStr,\n });\n }\n\n const lines = stackStr\n .split('\\n')\n .map((l) => l.trim())\n .filter(Boolean);\n const index = 1 + depth;\n if (index >= lines.length) {\n throw new CallerFileError('Stack trace too shallow', { lines });\n }\n\n const line = lines[index];\n\n // Match file URLs or absolute paths\n const match =\n line.match(/(file:\\/\\/[^\\s)]+)/) ||\n line.match(/(\\/[^:\\s)]+)(:\\d+){0,2}/) ||\n line.match(/([A-Za-z]:\\\\[^:\\s)]+)(:\\d+){0,2}/);\n\n if (!match) {\n throw new CallerFileError('No file path pattern found in stack line', {\n line,\n });\n }\n\n const raw = match[1];\n if (raw.startsWith('file://')) {\n const url = new URL(raw);\n return url.pathname;\n }\n\n return raw.replace(/:\\d+(:\\d+)?$/, '');\n } catch (fallbackError) {\n if (fallbackError instanceof CallerFileError) throw fallbackError;\n throw new CallerFileError('Fallback stack parsing failed', {\n cause: fallbackError,\n });\n }\n }\n}\n\n/**\n * Returns the absolute file path of the calling file.\n *\n * @param {number} depth - 1 = immediate caller, 2 = caller's caller, etc.\n * @returns {string} Absolute file path of the caller.\n * @throws {CallerFileError} If the caller file cannot be determined.\n */\nexport function getCallerFilePath(depth = 1) {\n const file = getCallerFile(depth + 1);\n return file.startsWith('file:') ? fileURLToPath(file) : file;\n}\n\n/**\n * Returns the directory that contains the package.json\n * associated with the specified import.meta.url.\n *\n * If no package.json is found while walking up the directory tree,\n * an error will be thrown.\n */\nexport async function getPackageDir(\n callerFilePath = getCallerFilePath(),\n): Promise<string> {\n // const { stat } = await import('node:fs/promises');\n // const { join, dirname } = await import('node:path');\n // const { fileURLToPath } = await import('node:url');\n\n let dir = dirname(callerFilePath);\n\n while (true) {\n const pkgJson = join(dir, 'package.json');\n\n const exists = await stat(pkgJson)\n .then(() => true)\n .catch(() => false);\n if (exists) return dir;\n\n // Move to the parent directory\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n throw new Error(`package.json not found for: ${callerFilePath}`);\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,IAAM,kBAAN,cAA8B,MAAM;CAClC;CACA,YAAY,SAAiB,OAAgB,EAAE,EAAE;AAC/C,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,OAAK,OAAO;;;;;;;;;;AAWhB,SAAgB,cAAc,QAAQ,GAAG;AACvC,KAAI,OAAO,UAAU,YAAY,QAAQ,EACvC,OAAM,IAAI,gBAAgB,0BAA0B,EAAE,OAAO,CAAC;AAIhE,KAAI;EACF,MAAM,kBAAkB,MAAM;AAC9B,QAAM,qBAAqB,GAAG,yBAAyB;EAEvD,MAAM,EAAE,0BADI,IAAI,OAAO;AAEvB,QAAM,oBAAoB;AAE1B,MAAI,MAAM,QAAQ,MAAM,EAAE;GACxB,MAAM,QAAQ,MAAM;AACpB,OAAI,SAAS,OAAO,MAAM,gBAAgB,YAAY;IACpD,MAAM,OAAO,MAAM,aAAa;AAChC,QAAI,OAAO,SAAS,SAAU,QAAO;AACrC,UAAM,IAAI,gBAAgB,wCAAwC,EAChE,OACD,CAAC;SAEF,OAAM,IAAI,gBAAgB,sCAAsC,EAC9D,OACD,CAAC;QAGJ,OAAM,IAAI,gBAAgB,sCAAsC,EAC9D,OACD,CAAC;UAEG,SAAS;AAEhB,MAAI;GACF,MAAM,4BAAW,IAAI,OAAO,EAAC;AAC7B,OAAI,OAAO,aAAa,SACtB,OAAM,IAAI,gBAAgB,+BAA+B,EACvD,OAAO,UACR,CAAC;GAGJ,MAAM,QAAQ,SACX,MAAM,KAAK,CACX,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,OAAO,QAAQ;GAClB,MAAM,QAAQ,IAAI;AAClB,OAAI,SAAS,MAAM,OACjB,OAAM,IAAI,gBAAgB,2BAA2B,EAAE,OAAO,CAAC;GAGjE,MAAM,OAAO,MAAM;GAGnB,MAAM,QACJ,KAAK,MAAM,qBAAqB,IAChC,KAAK,MAAM,0BAA0B,IACrC,KAAK,MAAM,mCAAmC;AAEhD,OAAI,CAAC,MACH,OAAM,IAAI,gBAAgB,4CAA4C,EACpE,MACD,CAAC;GAGJ,MAAM,MAAM,MAAM;AAClB,OAAI,IAAI,WAAW,UAAU,CAE3B,QADY,IAAI,IAAI,IAAI,CACb;AAGb,UAAO,IAAI,QAAQ,gBAAgB,GAAG;WAC/B,eAAe;AACtB,OAAI,yBAAyB,gBAAiB,OAAM;AACpD,SAAM,IAAI,gBAAgB,iCAAiC,EACzD,OAAO,eACR,CAAC;;;;;;;;;;;AAYR,SAAgB,kBAAkB,QAAQ,GAAG;CAC3C,MAAM,OAAO,cAAc,QAAQ,EAAE;AACrC,QAAO,KAAK,WAAW,QAAQ,GAAG,cAAc,KAAK,GAAG;;;;;;;;;AAU1D,eAAsB,cACpB,iBAAiB,mBAAmB,EACnB;CAKjB,IAAI,MAAM,QAAQ,eAAe;AAEjC,QAAO,MAAM;AAMX,MAHe,MAAM,KAFL,KAAK,KAAK,eAAe,CAEP,CAC/B,WAAW,KAAK,CAChB,YAAY,MAAM,CACT,QAAO;EAGnB,MAAM,SAAS,QAAQ,IAAI;AAC3B,MAAI,WAAW,IAAK;AACpB,QAAM;;AAGR,OAAM,IAAI,MAAM,+BAA+B,iBAAiB"}
1
+ {"version":3,"file":"runtime-utils.mjs","names":[],"sources":["../src/runtime-utils/path.ts"],"sourcesContent":["import { stat } from 'node:fs/promises';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Universal ESM function to get the file path of the caller.\n * Works in Node.js, Deno, and Bun (native ESM environments).\n *\n * - Uses V8 structured stack traces when available (Node/Bun).\n * - Falls back to string-based stack parsing when necessary (e.g., Deno).\n * - Throws a descriptive error when the file path cannot be determined.\n */\n\nclass CallerFileError extends Error {\n info: unknown;\n constructor(message: string, info: unknown = {}) {\n super(message);\n this.name = 'CallerFileError';\n this.info = info;\n }\n}\n\n/**\n * Returns the absolute file path of the calling file.\n *\n * @param {number} depth - 1 = immediate caller, 2 = caller's caller, etc.\n * @returns {string} Absolute file path of the caller.\n * @throws {CallerFileError} If the caller file cannot be determined.\n */\nexport function getCallerFile(depth = 1) {\n if (typeof depth !== 'number' || depth < 1) {\n throw new CallerFileError('Invalid depth argument', { depth });\n }\n\n // --- Primary method: V8 structured stack trace (Node.js / Bun) ---\n try {\n const originalPrepare = Error.prepareStackTrace;\n Error.prepareStackTrace = (_, structuredStackTrace) => structuredStackTrace;\n const err = new Error();\n const { stack } = err;\n Error.prepareStackTrace = originalPrepare;\n\n if (Array.isArray(stack)) {\n const frame = stack[depth];\n if (frame && typeof frame.getFileName === 'function') {\n const file = frame.getFileName();\n if (typeof file === 'string') return file;\n throw new CallerFileError('CallSite#getFileName() returned null', {\n frame,\n });\n } else {\n throw new CallerFileError('Invalid or missing CallSite object', {\n frame,\n });\n }\n } else {\n throw new CallerFileError('Structured stack trace unavailable', {\n stack,\n });\n }\n } catch (v8Error) {\n // --- Fallback: plain text stack parsing (Deno and others) ---\n try {\n const stackStr = new Error().stack;\n if (typeof stackStr !== 'string') {\n throw new CallerFileError('Error.stack is not a string', {\n stack: stackStr,\n });\n }\n\n const lines = stackStr\n .split('\\n')\n .map((l) => l.trim())\n .filter(Boolean);\n const index = 1 + depth;\n if (index >= lines.length) {\n throw new CallerFileError('Stack trace too shallow', { lines });\n }\n\n const line = lines[index];\n\n // Match file URLs or absolute paths\n const match =\n line.match(/(file:\\/\\/[^\\s)]+)/) ||\n line.match(/(\\/[^:\\s)]+)(:\\d+){0,2}/) ||\n line.match(/([A-Za-z]:\\\\[^:\\s)]+)(:\\d+){0,2}/);\n\n if (!match) {\n throw new CallerFileError('No file path pattern found in stack line', {\n line,\n });\n }\n\n const raw = match[1];\n if (raw.startsWith('file://')) {\n const url = new URL(raw);\n return url.pathname;\n }\n\n return raw.replace(/:\\d+(:\\d+)?$/, '');\n } catch (fallbackError) {\n if (fallbackError instanceof CallerFileError) throw fallbackError;\n throw new CallerFileError('Fallback stack parsing failed', {\n cause: fallbackError,\n });\n }\n }\n}\n\n/**\n * Returns the absolute file path of the calling file.\n *\n * @param {number} depth - 1 = immediate caller, 2 = caller's caller, etc.\n * @returns {string} Absolute file path of the caller.\n * @throws {CallerFileError} If the caller file cannot be determined.\n */\nexport function getCallerFilePath(depth = 1) {\n const file = getCallerFile(depth + 1);\n return file.startsWith('file:') ? fileURLToPath(file) : file;\n}\n\n/**\n * Returns the directory that contains the package.json\n * associated with the specified import.meta.url.\n *\n * If no package.json is found while walking up the directory tree,\n * an error will be thrown.\n */\nexport async function getPackageDir(\n callerFilePath = getCallerFilePath(),\n): Promise<string> {\n // const { stat } = await import('node:fs/promises');\n // const { join, dirname } = await import('node:path');\n // const { fileURLToPath } = await import('node:url');\n\n let dir = dirname(callerFilePath);\n\n while (true) {\n const pkgJson = join(dir, 'package.json');\n\n const exists = await stat(pkgJson)\n .then(() => true)\n .catch(() => false);\n if (exists) return dir;\n\n // Move to the parent directory\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n throw new Error(`package.json not found for: ${callerFilePath}`);\n}\n"],"mappings":";;;;;;;;;;;;AAaA,IAAM,kBAAN,cAA8B,MAAM;CAClC;CACA,YAAY,SAAiB,OAAgB,CAAC,GAAG;EAC/C,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,OAAO;CACd;AACF;;;;;;;;AASA,SAAgB,cAAc,QAAQ,GAAG;CACvC,IAAI,OAAO,UAAU,YAAY,QAAQ,GACvC,MAAM,IAAI,gBAAgB,0BAA0B,EAAE,MAAM,CAAC;CAI/D,IAAI;EACF,MAAM,kBAAkB,MAAM;EAC9B,MAAM,qBAAqB,GAAG,yBAAyB;EAEvD,MAAM,EAAE,0BAAU,IADF,MACI;EACpB,MAAM,oBAAoB;EAE1B,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxB,MAAM,QAAQ,MAAM;GACpB,IAAI,SAAS,OAAO,MAAM,gBAAgB,YAAY;IACpD,MAAM,OAAO,MAAM,YAAY;IAC/B,IAAI,OAAO,SAAS,UAAU,OAAO;IACrC,MAAM,IAAI,gBAAgB,wCAAwC,EAChE,MACF,CAAC;GACH,OACE,MAAM,IAAI,gBAAgB,sCAAsC,EAC9D,MACF,CAAC;EAEL,OACE,MAAM,IAAI,gBAAgB,sCAAsC,EAC9D,MACF,CAAC;CAEL,SAAS,SAAS;EAEhB,IAAI;GACF,MAAM,4BAAW,IAAI,MAAM,EAAA,CAAE;GAC7B,IAAI,OAAO,aAAa,UACtB,MAAM,IAAI,gBAAgB,+BAA+B,EACvD,OAAO,SACT,CAAC;GAGH,MAAM,QAAQ,SACX,MAAM,IAAI,CAAC,CACX,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,CACpB,OAAO,OAAO;GACjB,MAAM,QAAQ,IAAI;GAClB,IAAI,SAAS,MAAM,QACjB,MAAM,IAAI,gBAAgB,2BAA2B,EAAE,MAAM,CAAC;GAGhE,MAAM,OAAO,MAAM;GAGnB,MAAM,QACJ,KAAK,MAAM,oBAAoB,KAC/B,KAAK,MAAM,yBAAyB,KACpC,KAAK,MAAM,kCAAkC;GAE/C,IAAI,CAAC,OACH,MAAM,IAAI,gBAAgB,4CAA4C,EACpE,KACF,CAAC;GAGH,MAAM,MAAM,MAAM;GAClB,IAAI,IAAI,WAAW,SAAS,GAE1B,OAAO,IADS,IAAI,GACX,CAAC,CAAC;GAGb,OAAO,IAAI,QAAQ,gBAAgB,EAAE;EACvC,SAAS,eAAe;GACtB,IAAI,yBAAyB,iBAAiB,MAAM;GACpD,MAAM,IAAI,gBAAgB,iCAAiC,EACzD,OAAO,cACT,CAAC;EACH;CACF;AACF;;;;;;;;AASA,SAAgB,kBAAkB,QAAQ,GAAG;CAC3C,MAAM,OAAO,cAAc,QAAQ,CAAC;CACpC,OAAO,KAAK,WAAW,OAAO,IAAI,cAAc,IAAI,IAAI;AAC1D;;;;;;;;AASA,eAAsB,cACpB,iBAAiB,kBAAkB,GAClB;CAKjB,IAAI,MAAM,QAAQ,cAAc;CAEhC,OAAO,MAAM;EAMX,IAAI,MAHiB,KAFL,KAAK,KAAK,cAEM,CAAC,CAAC,CAC/B,WAAW,IAAI,CAAC,CAChB,YAAY,KAAK,GACR,OAAO;EAGnB,MAAM,SAAS,QAAQ,GAAG;EAC1B,IAAI,WAAW,KAAK;EACpB,MAAM;CACR;CAEA,MAAM,IAAI,MAAM,+BAA+B,gBAAgB;AACjE"}
@@ -9,7 +9,6 @@ import { execa } from "execa";
9
9
  import { parse } from "acorn";
10
10
  import sortPackageJson from "sort-package-json";
11
11
  import * as prompts from "@inquirer/prompts";
12
-
13
12
  //#region src/types/hook.ts
14
13
  function createHooksDefaults() {
15
14
  return {
@@ -18,7 +17,6 @@ function createHooksDefaults() {
18
17
  preparePackageJSON: []
19
18
  };
20
19
  }
21
-
22
20
  //#endregion
23
21
  //#region src/types/dts.ts
24
22
  function normalizeDTSPreserveTypeTarget(target) {
@@ -61,7 +59,6 @@ function mergeDTSSettingsList(...settingsList) {
61
59
  });
62
60
  return normalizeDTSSettings(merged);
63
61
  }
64
-
65
62
  //#endregion
66
63
  //#region src/types/css.ts
67
64
  function resolveOptimizeCSSOptions(options) {
@@ -73,23 +70,19 @@ function resolveOptimizeCSSOptions(options) {
73
70
  if (cssnano !== false) resolved.cssnano = cssnano === true ? { preset: ["default", { normalizeWhitespace: false }] } : cssnano;
74
71
  return resolved;
75
72
  }
76
-
77
73
  //#endregion
78
74
  //#region src/types/workspace.ts
79
75
  const WORKSPACE_REQUIRED_FIELDS = ["name", "version"];
80
76
  const TSDOWN_SYNC_OPTIONS = [
81
77
  "define",
82
- "noExternal",
83
- "external",
84
78
  "skipNodeModulesBundle",
85
79
  "onSuccess",
86
- "copy"
80
+ "copy",
81
+ "deps"
87
82
  ];
88
-
89
83
  //#endregion
90
84
  //#region src/types/project.ts
91
85
  const PROJECT_REQUIRED_FIELDS = ["name"];
92
-
93
86
  //#endregion
94
87
  //#region src/utils/general.ts
95
88
  function isPromise(obj) {
@@ -109,7 +102,6 @@ async function resolveListable(raw) {
109
102
  }
110
103
  return result;
111
104
  }
112
-
113
105
  //#endregion
114
106
  //#region src/utils/tsdown.ts
115
107
  const _stringChunkToObject = (source) => {
@@ -183,7 +175,6 @@ function mergeNoExternals(base, override) {
183
175
  });
184
176
  };
185
177
  }
186
-
187
178
  //#endregion
188
179
  //#region src/utils/exit-hook.ts
189
180
  const EXIT_SIGNALS = [
@@ -211,7 +202,6 @@ for (const signal of EXIT_SIGNALS) process.on(signal, async () => {
211
202
  process.exit(1);
212
203
  }
213
204
  });
214
-
215
205
  //#endregion
216
206
  //#region src/utils/file.ts
217
207
  function getFilename(importMetaURL) {
@@ -338,7 +328,6 @@ async function writeFileAtomic(filePath, content) {
338
328
  throw error;
339
329
  }
340
330
  }
341
-
342
331
  //#endregion
343
332
  //#region src/utils/expose.ts
344
333
  function resolveRawExposeEntriesSettings(rawSettings) {
@@ -358,7 +347,6 @@ async function exposeEntries(rawSettings) {
358
347
  }
359
348
  return entries;
360
349
  }
361
-
362
350
  //#endregion
363
351
  //#region src/constants.ts
364
352
  const PROJECT_CONFIG_BASENAME = "plugboy.project";
@@ -366,7 +354,6 @@ const WORKSPACE_CONFIG_BASENAME = "plugboy.workspace";
366
354
  const PACKAGE_JSON_FILENAME = "package.json";
367
355
  const WORKSPACE_SPEC_PREFIX = "workspace:";
368
356
  const SEARCH_BUNDLE_EXTENSIONS_MATCH = "(ts|mjs|js|json)";
369
-
370
357
  //#endregion
371
358
  //#region src/utils/project.ts
372
359
  function isProjectPackageJson(json) {
@@ -399,7 +386,6 @@ async function loadProjectConfig(searchDir, depth) {
399
386
  }, searchDir);
400
387
  return resolveUserProjectConfig(await (hit ? (await bundleRequire({ filepath: hit.path })).mod.default : {}));
401
388
  }
402
-
403
389
  //#endregion
404
390
  //#region src/utils/plugin.ts
405
391
  async function resolveUserPluginOption(pluginOption) {
@@ -419,7 +405,6 @@ async function extractProjectPlugins(searchDir) {
419
405
  async function findProjectPlugin(pluginName, searchDir) {
420
406
  return (await extractProjectPlugins(searchDir)).find((plugin) => plugin.name === pluginName);
421
407
  }
422
-
423
408
  //#endregion
424
409
  //#region src/utils/workspace.ts
425
410
  function isWorkspacePackageJson(json) {
@@ -458,7 +443,6 @@ async function loadWorkspaceConfig(searchDir, depth) {
458
443
  }, searchDir);
459
444
  return resolveUserWorkspaceConfig(await (hit ? (await bundleRequire({ filepath: hit.path })).mod.default : {}));
460
445
  }
461
-
462
446
  //#endregion
463
447
  //#region src/utils/hook.ts
464
448
  async function resolveUserHooks(...userHooks) {
@@ -481,7 +465,6 @@ function buildHooks(resolvedHooks) {
481
465
  });
482
466
  return hooks;
483
467
  }
484
-
485
468
  //#endregion
486
469
  //#region src/path.ts
487
470
  var Path = class Path {
@@ -568,7 +551,6 @@ var Path = class Path {
568
551
  }
569
552
  }
570
553
  };
571
-
572
554
  //#endregion
573
555
  //#region src/package.ts
574
556
  async function getProjectPackageJson(searchDir, allowMissing) {
@@ -610,7 +592,6 @@ async function findWorkspacePackages(dir) {
610
592
  });
611
593
  return results;
612
594
  }
613
-
614
595
  //#endregion
615
596
  //#region src/workspace/dts.ts
616
597
  async function runTsc(compiler, opts = {}, ignoreErrors) {
@@ -643,7 +624,6 @@ async function emitDTS(opts) {
643
624
  });
644
625
  else await runTsc(compiler, { ...baseOpts }, ignoreCompilerErrors);
645
626
  }
646
-
647
627
  //#endregion
648
628
  //#region src/env/constants.ts
649
629
  const PLUGBOY_VAR_ENVS_FOR_BUNDLE = {
@@ -654,7 +634,6 @@ const PLUGBOY_VAR_ENVS_FOR_STUB = {
654
634
  __PLUGBOY_STUB__: "true",
655
635
  __PLUGBOY_DEV__: "true"
656
636
  };
657
-
658
637
  //#endregion
659
638
  //#region src/env/utils.ts
660
639
  function applyPlugboyEnvs(config) {
@@ -669,7 +648,6 @@ function applyPlugboyEnvs(config) {
669
648
  function getPlugboyEnvCodeForStub() {
670
649
  return Object.entries(PLUGBOY_VAR_ENVS_FOR_STUB).map(([envName, variable]) => `globalThis.${envName} = ${variable};`).join("\n");
671
650
  }
672
-
673
651
  //#endregion
674
652
  //#region src/env/plugin.ts
675
653
  function findAfterImports(code) {
@@ -710,7 +688,6 @@ function WorkspaceEnvPlugin(_workspace) {
710
688
  }
711
689
  };
712
690
  }
713
-
714
691
  //#endregion
715
692
  //#region src/workspace/builder.ts
716
693
  const SHEBANG_MATCH_RE = /^(#!.+?)\n/;
@@ -727,10 +704,10 @@ var Builder = class {
727
704
  this.workspace = workspace;
728
705
  }
729
706
  async tsdownOptions(overrides) {
730
- let { _tsdownOptions } = this;
707
+ const { _tsdownOptions } = this;
731
708
  if (_tsdownOptions) return _tsdownOptions;
732
709
  const { entry, dts } = this;
733
- _tsdownOptions = {
710
+ const resolvedOptions = {
734
711
  dts: dts.inline || typeof dts.compiler === "function" ? false : dts.compiler === "vue-tsc" ? { vue: true } : true,
735
712
  treeshake: true,
736
713
  css: this.workspace.cssOptions,
@@ -740,11 +717,12 @@ var Builder = class {
740
717
  clean: true,
741
718
  ...overrides
742
719
  };
743
- for (const opt of TSDOWN_SYNC_OPTIONS) _tsdownOptions[opt] = this.workspace.config[opt];
744
- applyPlugboyEnvs(_tsdownOptions);
745
- _tsdownOptions.external = mergeExternals(_tsdownOptions.external, [/^(@fastkit\/)?plugboy(?!\/runtime-utils)/, ...this.workspace.dependencies]);
746
- this._tsdownOptions = _tsdownOptions;
747
- return _tsdownOptions;
720
+ for (const opt of TSDOWN_SYNC_OPTIONS) resolvedOptions[opt] = this.workspace.config[opt];
721
+ applyPlugboyEnvs(resolvedOptions);
722
+ resolvedOptions.deps ??= {};
723
+ resolvedOptions.deps.neverBundle = mergeExternals(resolvedOptions.deps.neverBundle, [/^(@fastkit\/)?plugboy(?!\/runtime-utils)/, ...this.workspace.dependencies]);
724
+ this._tsdownOptions = resolvedOptions;
725
+ return resolvedOptions;
748
726
  }
749
727
  async _stubLinkJS(from, to) {
750
728
  const fromParsed = path.parse(from);
@@ -884,7 +862,6 @@ var Builder = class {
884
862
  else await this.normalizeDTSFiles();
885
863
  }
886
864
  };
887
-
888
865
  //#endregion
889
866
  //#region src/project/project.ts
890
867
  /**
@@ -964,16 +941,15 @@ async function getProject(searchDir, allowMissing, skipLoadConfig) {
964
941
  resolvedWorkspaces
965
942
  });
966
943
  }
967
-
968
944
  //#endregion
969
945
  //#region src/postcss/plugin.ts
970
946
  async function getPostcss(options) {
971
947
  const { layer, media, combineRules, cssnano } = options;
972
948
  const [postcss, _layer, _media, _combineRules, _cssnano] = await Promise.all([
973
949
  import("postcss").then((mod) => mod.default),
974
- layer && import("./optimize-layer-CK8NR_VC.mjs").then((mod) => mod.OptimizeLayer(layer)),
975
- media && import("./optimize-media-Bxy27Cj7.mjs").then((mod) => mod.OptimizeMedia(media)),
976
- combineRules && import("./combine-rules-CWp-M491.mjs").then((mod) => mod.CombineRules(combineRules)),
950
+ layer && import("./optimize-layer-DZdbIjXg.mjs").then((mod) => mod.OptimizeLayer(layer)),
951
+ media && import("./optimize-media-CocGC9bo.mjs").then((mod) => mod.OptimizeMedia(media)),
952
+ combineRules && import("./combine-rules-DKihHyJd.mjs").then((mod) => mod.CombineRules(combineRules)),
977
953
  cssnano && import("cssnano").then((mod) => mod.default(cssnano))
978
954
  ]);
979
955
  const plugins = [];
@@ -1019,7 +995,6 @@ function OptimizeCSSPlugin(workspace) {
1019
995
  }
1020
996
  };
1021
997
  }
1022
-
1023
998
  //#endregion
1024
999
  //#region src/workspace/plugins/raw-loader.ts
1025
1000
  const rawLoaderPlugin = {
@@ -1041,7 +1016,6 @@ const rawLoaderPlugin = {
1041
1016
  return `export default ${JSON.stringify(content)};`;
1042
1017
  }
1043
1018
  };
1044
-
1045
1019
  //#endregion
1046
1020
  //#region src/workspace/plugins/preserve-css-imports.ts
1047
1021
  /**
@@ -1054,7 +1028,7 @@ const rawLoaderPlugin = {
1054
1028
  * Instead, collect external import paths and prepend them to CSS in generateBundle.
1055
1029
  */
1056
1030
  /**
1057
- * Regular expression for CSS @import
1031
+ * Regular expression for CSS @import (with optional layer() support)
1058
1032
  *
1059
1033
  * Supports the following patterns:
1060
1034
  * - @import 'path';
@@ -1062,19 +1036,32 @@ const rawLoaderPlugin = {
1062
1036
  * - @import url(path);
1063
1037
  * - @import url('path');
1064
1038
  * - @import url("path");
1039
+ * - @import url('path') layer(name);
1040
+ * - @import 'path' layer(name);
1041
+ *
1042
+ * Captures:
1043
+ * 1: import path
1044
+ * 2: layer specification (e.g. " layer(fabric.foundation)") or undefined
1065
1045
  */
1066
- const EXTERNAL_IMPORT_REGEX = /@import\s+(?:url\(\s*['"]?|['"])([^'"\s);]+)(?:['"]?\s*\)|['"])\s*;/g;
1046
+ const EXTERNAL_IMPORT_REGEX = /@import\s+(?:url\(\s*['"]?|['"])([^'"\s);]+)(?:['"]?\s*\)|['"])(\s+layer\([^)]+\))?\s*;/g;
1047
+ function externalImportKey(entry) {
1048
+ return entry.layer ? `${entry.path}::${entry.layer}` : entry.path;
1049
+ }
1067
1050
  function createPreserveCssImportsPlugin() {
1068
- const externalCssImports = /* @__PURE__ */ new Set();
1051
+ const externalCssImports = /* @__PURE__ */ new Map();
1069
1052
  return definePlugin({
1070
1053
  name: "preserve-css-imports",
1071
1054
  transform: { handler(code, id) {
1072
1055
  if (!id.endsWith(".css")) return null;
1073
1056
  let hasExternalImports = false;
1074
- const transformed = code.replace(EXTERNAL_IMPORT_REGEX, (match, importPath) => {
1057
+ const transformed = code.replace(EXTERNAL_IMPORT_REGEX, (match, importPath, layerSpec) => {
1075
1058
  if (!importPath.startsWith(".") && !importPath.startsWith("/")) {
1076
1059
  hasExternalImports = true;
1077
- externalCssImports.add(importPath);
1060
+ const entry = {
1061
+ path: importPath,
1062
+ layer: layerSpec?.trim()
1063
+ };
1064
+ externalCssImports.set(externalImportKey(entry), entry);
1078
1065
  return "";
1079
1066
  }
1080
1067
  return match;
@@ -1087,12 +1074,11 @@ function createPreserveCssImportsPlugin() {
1087
1074
  } },
1088
1075
  generateBundle: { handler(_options, bundle) {
1089
1076
  if (externalCssImports.size === 0) return;
1090
- const importStatements = Array.from(externalCssImports).map((path) => `@import '${path}';`).join("\n");
1077
+ const importStatements = Array.from(externalCssImports.values()).map(({ path, layer }) => layer ? `@import '${path}' ${layer};` : `@import '${path}';`).join("\n");
1091
1078
  for (const chunk of Object.values(bundle)) if (chunk.type === "asset" && typeof chunk.source === "string" && chunk.fileName.endsWith(".css")) chunk.source = importStatements + "\n" + chunk.source;
1092
1079
  } }
1093
1080
  });
1094
1081
  }
1095
-
1096
1082
  //#endregion
1097
1083
  //#region src/workspace/workspace.ts
1098
1084
  function extractWorkspaceObjectExport(at) {
@@ -1251,7 +1237,7 @@ var PlugboyWorkspace = class {
1251
1237
  const deps = cloned[prop];
1252
1238
  if (!deps) return;
1253
1239
  Object.keys(deps).forEach((dep) => {
1254
- if (deps[dep].startsWith(WORKSPACE_SPEC_PREFIX)) deps[dep] = `${WORKSPACE_SPEC_PREFIX}^`;
1240
+ if (deps[dep].startsWith("workspace:")) deps[dep] = `${WORKSPACE_SPEC_PREFIX}^`;
1255
1241
  else if (projectPeerDependencies && projectPeerDependencies[dep] && !deps[dep]) deps[dep] = projectPeerDependencies[dep];
1256
1242
  });
1257
1243
  });
@@ -1332,10 +1318,12 @@ async function getWorkspace(searchDir, allowMissing) {
1332
1318
  css: config.css,
1333
1319
  optimizeCSS,
1334
1320
  mergeExternals: (override) => {
1335
- config.external = mergeExternals(config.external, override);
1321
+ config.deps ??= {};
1322
+ config.deps.neverBundle = mergeExternals(config.deps.neverBundle, override);
1336
1323
  },
1337
1324
  mergeNoExternals: (override) => {
1338
- config.noExternal = mergeNoExternals(config.noExternal, override);
1325
+ config.deps ??= {};
1326
+ config.deps.alwaysBundle = mergeNoExternals(config.deps.alwaysBundle, override);
1339
1327
  }
1340
1328
  };
1341
1329
  await hooks.setupWorkspace(ctx, () => {
@@ -1345,7 +1333,6 @@ async function getWorkspace(searchDir, allowMissing) {
1345
1333
  await hooks.createWorkspace(workspace);
1346
1334
  return workspace;
1347
1335
  }
1348
-
1349
1336
  //#endregion
1350
1337
  //#region src/workspace/generate.ts
1351
1338
  async function generateWorkspace(workspaceName, cwd = process.cwd()) {
@@ -1464,7 +1451,7 @@ export default defineWorkspaceConfig({
1464
1451
  await (await getWorkspace(workspaceDir)).preparePackageJSON();
1465
1452
  }
1466
1453
  }
1467
-
1468
1454
  //#endregion
1469
1455
  export { normalizeDTSSettings as $, resolveRawExposeEntriesSettings as A, exitHook as B, findProjectPlugin as C, loadProjectConfig as D, isProjectPackageJson as E, getFilename as F, resolveListable as G, mergeExternals as H, isFileNotFoundException as I, WORKSPACE_REQUIRED_FIELDS as J, PROJECT_REQUIRED_FIELDS as K, pathExists as L, findConfig as M, findFile as N, resolveUserProjectConfig as O, getDirname as P, normalizeDTSPreserveTypeTarget as Q, rmrf as R, extractProjectPlugins as S, defineProjectConfig as T, mergeNoExternals as U, mergeChunkAddons as V, isPromise as W, mergeDTSSettingsList as X, resolveOptimizeCSSOptions as Y, normalizeDTSPreserveTypeSettings as Z, loadWorkspaceConfig as _, syncWorkspacePackageFields as a, resolveUserWorkspaceConfig as b, Builder as c, getWorkspacePackageJson as d, createHooksDefaults as et, Path as f, isWorkspacePackageJson as g, defineWorkspaceConfig as h, getWorkspace as i, copyDirSync as j, exposeEntries as k, findWorkspacePackages as l, resolveUserHooks as m, PlugboyWorkspace as n, PlugboyProject as o, buildHooks as p, TSDOWN_SYNC_OPTIONS as q, WORKSPACE_PACKAGE_SYNC_FIELDS as r, getProject as s, generateWorkspace as t, getProjectPackageJson as u, resolveRawWorkspaceEntries as v, resolveUserPluginOption as w, definePlugin as x, resolveRawWorkspaceEntry as y, writeFileAtomic as z };
1470
- //# sourceMappingURL=workspace-CVcq6W59.mjs.map
1456
+
1457
+ //# sourceMappingURL=workspace-VIdL5Yhp.mjs.map