@nodetool-ai/config 0.7.0-rc.23 → 0.8.1

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.
Files changed (89) hide show
  1. package/README.md +50 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/__tests__/credit-policy.test.d.ts +2 -0
  4. package/dist/__tests__/credit-policy.test.d.ts.map +1 -0
  5. package/dist/__tests__/credit-policy.test.js +48 -0
  6. package/dist/__tests__/credit-policy.test.js.map +1 -0
  7. package/dist/__tests__/env-file.test.d.ts +2 -0
  8. package/dist/__tests__/env-file.test.d.ts.map +1 -0
  9. package/dist/__tests__/env-file.test.js +100 -0
  10. package/dist/__tests__/env-file.test.js.map +1 -0
  11. package/dist/__tests__/google-workspace.test.d.ts +2 -0
  12. package/dist/__tests__/google-workspace.test.d.ts.map +1 -0
  13. package/dist/__tests__/google-workspace.test.js +40 -0
  14. package/dist/__tests__/google-workspace.test.js.map +1 -0
  15. package/dist/__tests__/retention.test.d.ts +2 -0
  16. package/dist/__tests__/retention.test.d.ts.map +1 -0
  17. package/dist/__tests__/retention.test.js +21 -0
  18. package/dist/__tests__/retention.test.js.map +1 -0
  19. package/dist/byte-limits.d.ts +13 -0
  20. package/dist/byte-limits.d.ts.map +1 -0
  21. package/dist/byte-limits.js +28 -0
  22. package/dist/byte-limits.js.map +1 -0
  23. package/dist/credit-policy.d.ts +25 -0
  24. package/dist/credit-policy.d.ts.map +1 -0
  25. package/dist/credit-policy.js +63 -0
  26. package/dist/credit-policy.js.map +1 -0
  27. package/dist/deployment.d.ts +8 -0
  28. package/dist/deployment.d.ts.map +1 -0
  29. package/dist/deployment.js +19 -0
  30. package/dist/deployment.js.map +1 -0
  31. package/dist/env-file.d.ts +33 -0
  32. package/dist/env-file.d.ts.map +1 -0
  33. package/dist/env-file.js +83 -0
  34. package/dist/env-file.js.map +1 -0
  35. package/dist/environment.d.ts.map +1 -1
  36. package/dist/environment.js +20 -17
  37. package/dist/environment.js.map +1 -1
  38. package/dist/google-workspace.d.ts +3 -0
  39. package/dist/google-workspace.d.ts.map +1 -0
  40. package/dist/google-workspace.js +23 -0
  41. package/dist/google-workspace.js.map +1 -0
  42. package/dist/index.d.ts +12 -3
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +12 -3
  45. package/dist/index.js.map +1 -1
  46. package/dist/logging.d.ts.map +1 -1
  47. package/dist/logging.js +46 -28
  48. package/dist/logging.js.map +1 -1
  49. package/dist/node-import.d.ts +37 -0
  50. package/dist/node-import.d.ts.map +1 -0
  51. package/dist/node-import.js +119 -0
  52. package/dist/node-import.js.map +1 -0
  53. package/dist/optional-modules.d.ts +8 -0
  54. package/dist/optional-modules.d.ts.map +1 -0
  55. package/dist/optional-modules.js +42 -0
  56. package/dist/optional-modules.js.map +1 -0
  57. package/dist/package-asset-registry.d.ts +102 -0
  58. package/dist/package-asset-registry.d.ts.map +1 -0
  59. package/dist/package-asset-registry.js +154 -0
  60. package/dist/package-asset-registry.js.map +1 -0
  61. package/dist/package-assets.d.ts +52 -0
  62. package/dist/package-assets.d.ts.map +1 -0
  63. package/dist/package-assets.js +98 -0
  64. package/dist/package-assets.js.map +1 -0
  65. package/dist/paths.d.ts +52 -23
  66. package/dist/paths.d.ts.map +1 -1
  67. package/dist/paths.js +166 -47
  68. package/dist/paths.js.map +1 -1
  69. package/dist/retention.d.ts +3 -0
  70. package/dist/retention.d.ts.map +1 -0
  71. package/dist/retention.js +19 -0
  72. package/dist/retention.js.map +1 -0
  73. package/dist/setting-catalog.d.ts +28 -0
  74. package/dist/setting-catalog.d.ts.map +1 -0
  75. package/dist/setting-catalog.js +161 -0
  76. package/dist/setting-catalog.js.map +1 -0
  77. package/dist/storage-config.d.ts +45 -0
  78. package/dist/storage-config.d.ts.map +1 -0
  79. package/dist/storage-config.js +62 -0
  80. package/dist/storage-config.js.map +1 -0
  81. package/package.json +23 -8
  82. package/dist/diagnostics.d.ts +0 -27
  83. package/dist/diagnostics.d.ts.map +0 -1
  84. package/dist/diagnostics.js +0 -42
  85. package/dist/diagnostics.js.map +0 -1
  86. package/dist/settings.d.ts +0 -29
  87. package/dist/settings.d.ts.map +0 -1
  88. package/dist/settings.js +0 -29
  89. package/dist/settings.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.js","sourceRoot":"","sources":["../src/env-file.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAqCtD;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK7E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAmCtD;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK7E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
@@ -3,10 +3,15 @@
3
3
  *
4
4
  * Loads .env files in order: .env, .env.{NODE_ENV}, .env.{NODE_ENV}.local
5
5
  * Later files override earlier ones. System env vars always win.
6
+ *
7
+ * `node:fs` and `node:path` are lazy-loaded so the module graph loads
8
+ * on non-Node runtimes (browser, Edge). `loadEnvironment()` is a no-op
9
+ * outside Node.
6
10
  */
7
- import { config as dotenvConfig } from "dotenv";
8
- import { existsSync } from "node:fs";
9
- import { resolve } from "node:path";
11
+ import { loadEnvFile } from "./env-file.js";
12
+ import { IS_NODE, getNodeBuiltinSync } from "./node-import.js";
13
+ const fsSync = getNodeBuiltinSync("node:fs");
14
+ const pathSync = getNodeBuiltinSync("node:path");
10
15
  let loaded = false;
11
16
  const envStore = new Map();
12
17
  /**
@@ -16,26 +21,24 @@ const envStore = new Map();
16
21
  * @param rootDir - Directory containing .env files. Defaults to cwd.
17
22
  */
18
23
  export function loadEnvironment(rootDir) {
24
+ if (!IS_NODE || !fsSync || !pathSync) {
25
+ // Outside Node — no .env files to load.
26
+ loaded = true;
27
+ return;
28
+ }
19
29
  const root = rootDir ?? process.cwd();
20
30
  const nodeEnv = process.env.NODE_ENV ?? "development";
21
- // Load files in order: .env, .env.{NODE_ENV}, .env.{NODE_ENV}.local
22
31
  const files = [
23
- resolve(root, ".env"),
24
- resolve(root, `.env.${nodeEnv}`),
25
- resolve(root, `.env.${nodeEnv}.local`)
32
+ pathSync.resolve(root, ".env"),
33
+ pathSync.resolve(root, `.env.${nodeEnv}`),
34
+ pathSync.resolve(root, `.env.${nodeEnv}.local`)
26
35
  ];
27
- // Start fresh
28
36
  envStore.clear();
29
- // Snapshot system env before loading files
30
37
  const systemEnv = { ...process.env };
31
38
  for (const file of files) {
32
- if (existsSync(file)) {
33
- const result = dotenvConfig({ path: file, override: true });
34
- if (result.parsed) {
35
- for (const [key, value] of Object.entries(result.parsed)) {
36
- envStore.set(key, value);
37
- }
38
- }
39
+ const parsed = loadEnvFile(fsSync, file);
40
+ for (const [key, value] of Object.entries(parsed)) {
41
+ envStore.set(key, value);
39
42
  }
40
43
  }
41
44
  // System env always wins — restore original system values on top
@@ -55,7 +58,7 @@ export function getEnv(key, defaultValue) {
55
58
  if (loaded) {
56
59
  return envStore.get(key) ?? defaultValue;
57
60
  }
58
- return process.env[key] ?? defaultValue;
61
+ return (IS_NODE ? process.env[key] : undefined) ?? defaultValue;
59
62
  }
60
63
  /**
61
64
  * Get a required environment variable. Throws if not set.
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;IAEtD,oEAAoE;IACpE,MAAM,KAAK,GAAG;QACZ,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,OAAO,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,EAAE,QAAQ,OAAO,QAAQ,CAAC;KACvC,CAAC;IAEF,cAAc;IACd,QAAQ,CAAC,KAAK,EAAE,CAAC;IAEjB,2CAA2C;IAC3C,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,YAAqB;IACvD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;IAC3C,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,aAAa,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,MAAM,GAAG,KAAK,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAO/D,MAAM,MAAM,GAAG,kBAAkB,CAAQ,SAAS,CAAC,CAAC;AACpD,MAAM,QAAQ,GAAG,kBAAkB,CAAU,WAAW,CAAC,CAAC;AAE1D,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,wCAAwC;QACxC,MAAM,GAAG,IAAI,CAAC;QACd,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;IAEtD,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,OAAO,EAAE,CAAC;QACzC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,OAAO,QAAQ,CAAC;KAChD,CAAC;IAEF,QAAQ,CAAC,KAAK,EAAE,CAAC;IAEjB,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,YAAqB;IACvD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,aAAa,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,MAAM,GAAG,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Whether the Google Workspace capabilities should be offered. */
2
+ export declare function isGoogleWorkspaceEnabled(): boolean;
3
+ //# sourceMappingURL=google-workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-workspace.d.ts","sourceRoot":"","sources":["../src/google-workspace.ts"],"names":[],"mappings":"AAcA,mEAAmE;AACnE,wBAAgB,wBAAwB,IAAI,OAAO,CAKlD"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Availability gate for the Google Workspace integration (Drive, Gmail, Docs,
3
+ * Sheets, Calendar).
4
+ *
5
+ * The `google` capability module authenticates with the Google access token the
6
+ * user's Supabase Google login hands back — there is no API key to paste. A
7
+ * local install has no login, so the integration would only ever surface an
8
+ * error; it is hidden there instead.
9
+ *
10
+ * Set `NODETOOL_GOOGLE_WORKSPACE=1` to force it on (useful when a local server
11
+ * points at a hosted Supabase project), or `0` to force it off.
12
+ */
13
+ import { isAuthEnforced } from "./deployment.js";
14
+ /** Whether the Google Workspace capabilities should be offered. */
15
+ export function isGoogleWorkspaceEnabled() {
16
+ const override = process.env["NODETOOL_GOOGLE_WORKSPACE"]?.trim();
17
+ if (override === "1" || override === "true")
18
+ return true;
19
+ if (override === "0" || override === "false")
20
+ return false;
21
+ return isAuthEnforced();
22
+ }
23
+ //# sourceMappingURL=google-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-workspace.js","sourceRoot":"","sources":["../src/google-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,mEAAmE;AACnE,MAAM,UAAU,wBAAwB;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,IAAI,EAAE,CAAC;IAClE,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,15 @@
1
+ export { IS_NODE, safeProcessEnv, safeProcessPlatform, importNodeBuiltin, getNodeBuiltinSync, importNodeBuiltinSync, importHidden } from "./node-import.js";
1
2
  export { loadEnvironment, getEnv, requireEnv, resetEnvironment } from "./environment.js";
2
- export { registerSetting, getSettings, clearSettings, type SettingDefinition, type SettingStatus } from "./settings.js";
3
+ export { getByteLimitEnv } from "./byte-limits.js";
4
+ export { isAuthEnforced } from "./deployment.js";
5
+ export { CREDIT_MODELS_ENV, SIGNUP_CREDITS_ENV, DEFAULT_SIGNUP_CREDITS, creditModelAllowlist, isCreditModelAllowed, signupGrantCredits } from "./credit-policy.js";
6
+ export { isGoogleWorkspaceEnabled } from "./google-workspace.js";
7
+ export { isAutomaticStorageCleanupEnabled } from "./retention.js";
8
+ export { settingCatalog, settingDefinition, type SettingCatalogEntry } from "./setting-catalog.js";
3
9
  export { configureLogging, getLogLevel, createLogger, type LogLevel, type LoggingOptions, type Logger } from "./logging.js";
4
- export { diagnoseEnvironment, maskSecret, type DiagnosticResult } from "./diagnostics.js";
5
- export { getNodetoolDataDir, getDefaultDbPath, getDefaultVectorstoreDbPath, getDefaultAssetsPath, getDefaultTransformersJsCacheDir, getAssetFilePath, getAssetDomain, getTempDomain, buildAssetUrl } from "./paths.js";
10
+ export { importOptionalModule } from "./optional-modules.js";
11
+ export { PACKAGE_RUNTIME_ASSETS, PACKAGE_RUNTIME_ASSET_DIRS, SHIPPED_SANDBOX_PACKS_SOURCE_DIR, SHIPPED_SANDBOX_PACKS_BUNDLE_DIR, SHIPPED_SYSTEM_SKILLS_SOURCE_DIR, SHIPPED_SYSTEM_SKILLS_BUNDLE_DIR, findPackageAsset, type PackageAssetRef } from "./package-asset-registry.js";
12
+ export { resolvePackageAssetPath, loadPackageAssetJson, getPackageAssetResolutions, type PackageAssetResolution } from "./package-assets.js";
13
+ export { getNodetoolDataDir, getNodetoolCacheDir, getDefaultDbPath, getPostgresDatabaseUrl, getDefaultVectorstoreDbPath, getDefaultAssetsPath, getDefaultTransformersJsCacheDir, getAssetFilePath, buildAssetUrl, getManagedWorkspacesDir, getManagedWorkspaceDir, managedWorkspaceKey, workspaceStorageKind } from "./paths.js";
14
+ export { loadAssetStorageConfig, loadTempStorageConfig, SIGNED_URL_TTL, type StorageConfig } from "./storage-config.js";
6
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,MAAM,EACN,UAAU,EACV,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,MAAM,EACZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,gCAAgC,EAChC,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,MAAM,EACN,UAAU,EACV,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,MAAM,EACZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,EAChC,gCAAgC,EAChC,gCAAgC,EAChC,gBAAgB,EAChB,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,gCAAgC,EAChC,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,15 @@
1
+ export { IS_NODE, safeProcessEnv, safeProcessPlatform, importNodeBuiltin, getNodeBuiltinSync, importNodeBuiltinSync, importHidden } from "./node-import.js";
1
2
  export { loadEnvironment, getEnv, requireEnv, resetEnvironment } from "./environment.js";
2
- export { registerSetting, getSettings, clearSettings } from "./settings.js";
3
+ export { getByteLimitEnv } from "./byte-limits.js";
4
+ export { isAuthEnforced } from "./deployment.js";
5
+ export { CREDIT_MODELS_ENV, SIGNUP_CREDITS_ENV, DEFAULT_SIGNUP_CREDITS, creditModelAllowlist, isCreditModelAllowed, signupGrantCredits } from "./credit-policy.js";
6
+ export { isGoogleWorkspaceEnabled } from "./google-workspace.js";
7
+ export { isAutomaticStorageCleanupEnabled } from "./retention.js";
8
+ export { settingCatalog, settingDefinition } from "./setting-catalog.js";
3
9
  export { configureLogging, getLogLevel, createLogger } from "./logging.js";
4
- export { diagnoseEnvironment, maskSecret } from "./diagnostics.js";
5
- export { getNodetoolDataDir, getDefaultDbPath, getDefaultVectorstoreDbPath, getDefaultAssetsPath, getDefaultTransformersJsCacheDir, getAssetFilePath, getAssetDomain, getTempDomain, buildAssetUrl } from "./paths.js";
10
+ export { importOptionalModule } from "./optional-modules.js";
11
+ export { PACKAGE_RUNTIME_ASSETS, PACKAGE_RUNTIME_ASSET_DIRS, SHIPPED_SANDBOX_PACKS_SOURCE_DIR, SHIPPED_SANDBOX_PACKS_BUNDLE_DIR, SHIPPED_SYSTEM_SKILLS_SOURCE_DIR, SHIPPED_SYSTEM_SKILLS_BUNDLE_DIR, findPackageAsset } from "./package-asset-registry.js";
12
+ export { resolvePackageAssetPath, loadPackageAssetJson, getPackageAssetResolutions } from "./package-assets.js";
13
+ export { getNodetoolDataDir, getNodetoolCacheDir, getDefaultDbPath, getPostgresDatabaseUrl, getDefaultVectorstoreDbPath, getDefaultAssetsPath, getDefaultTransformersJsCacheDir, getAssetFilePath, buildAssetUrl, getManagedWorkspacesDir, getManagedWorkspaceDir, managedWorkspaceKey, workspaceStorageKind } from "./paths.js";
14
+ export { loadAssetStorageConfig, loadTempStorageConfig, SIGNED_URL_TTL } from "./storage-config.js";
6
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,MAAM,EACN,UAAU,EACV,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EAGd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EAIb,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,EACnB,UAAU,EAEX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,gCAAgC,EAChC,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,MAAM,EACN,UAAU,EACV,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,cAAc,EACd,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EAIb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,EAChC,gCAAgC,EAChC,gCAAgC,EAChC,gBAAgB,EAEjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAE3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,gCAAgC,EAChC,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EAEf,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAgCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,cAAmB,GAAG,IAAI,CAkBhE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAqFD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD"}
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAoCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,cAAmB,GAAG,IAAI,CAiBhE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAgHD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD"}
package/dist/logging.js CHANGED
@@ -7,7 +7,8 @@
7
7
  * log.info("Workflow started", { jobId });
8
8
  * log.debug("Node executing", { nodeId, type });
9
9
  */
10
- import { openSync, writeSync } from "node:fs";
10
+ import { IS_NODE, getNodeBuiltinSync } from "./node-import.js";
11
+ const fsSync = getNodeBuiltinSync("node:fs");
11
12
  const VALID_LEVELS = ["debug", "info", "warn", "error"];
12
13
  const LEVEL_NUM = {
13
14
  debug: 0,
@@ -16,19 +17,22 @@ const LEVEL_NUM = {
16
17
  error: 3
17
18
  };
18
19
  /** Maps Python-style log level names to their JS equivalents. */
19
- const LEVEL_ALIASES = {
20
- warning: "warn",
21
- critical: "error"
22
- };
20
+ const LEVEL_ALIASES = new Map([
21
+ ["warning", "warn"],
22
+ ["critical", "error"]
23
+ ]);
23
24
  function normalizeLevel(raw) {
24
25
  const lower = raw.toLowerCase();
25
- if (VALID_LEVELS.includes(lower))
26
- return lower;
27
- return LEVEL_ALIASES[lower] ?? null;
26
+ return (VALID_LEVELS.find((level) => level === lower) ??
27
+ LEVEL_ALIASES.get(lower) ??
28
+ null);
28
29
  }
29
30
  // Initialize eagerly from env so configureLogging() is optional for entry
30
31
  // points (e.g. the WebSocket server) that skip the explicit call.
31
- let currentLevel = normalizeLevel(process.env["NODETOOL_LOG_LEVEL"] ?? process.env["LOG_LEVEL"] ?? "") ?? "info";
32
+ // Use globalThis.process so the module loads on runtimes (browser, Edge)
33
+ // where `process` is undefined.
34
+ const ENV = IS_NODE ? process.env : {};
35
+ let currentLevel = normalizeLevel(ENV["NODETOOL_LOG_LEVEL"] ?? ENV["LOG_LEVEL"] ?? "") ?? "info";
32
36
  /** File descriptor for log output. Defaults to stderr; set via NODETOOL_LOG_FILE. */
33
37
  let logFd = null;
34
38
  /**
@@ -43,14 +47,14 @@ export function configureLogging(opts = {}) {
43
47
  currentLevel = opts.level;
44
48
  }
45
49
  else {
46
- const envRaw = process.env["NODETOOL_LOG_LEVEL"] ?? process.env["LOG_LEVEL"] ?? "info";
50
+ const envRaw = ENV["NODETOOL_LOG_LEVEL"] ?? ENV["LOG_LEVEL"] ?? "info";
47
51
  currentLevel = normalizeLevel(envRaw) ?? "info";
48
52
  }
49
- // Open log file if configured (lazy import to keep module lightweight)
50
- const logFile = process.env["NODETOOL_LOG_FILE"];
51
- if (logFile && logFd === null) {
53
+ // Open log file if configured (only available on Node)
54
+ const logFile = ENV["NODETOOL_LOG_FILE"];
55
+ if (logFile && logFd === null && fsSync) {
52
56
  try {
53
- logFd = openSync(logFile, "a");
57
+ logFd = fsSync.openSync(logFile, "a");
54
58
  }
55
59
  catch {
56
60
  // Fall back to stderr silently
@@ -61,8 +65,8 @@ export function configureLogging(opts = {}) {
61
65
  export function getLogLevel() {
62
66
  return currentLevel;
63
67
  }
64
- // Colour support
65
- const USE_COLOR = process.stderr.isTTY && !process.env["NO_COLOR"];
68
+ // Colour support — only on Node where process.stderr.isTTY exists.
69
+ const USE_COLOR = IS_NODE && Boolean(process.stderr?.isTTY) && !ENV["NO_COLOR"];
66
70
  const C = {
67
71
  reset: USE_COLOR ? "\x1b[0m" : "",
68
72
  dim: USE_COLOR ? "\x1b[2m" : "",
@@ -85,21 +89,26 @@ function timestamp() {
85
89
  const ss = String(d.getSeconds()).padStart(2, "0");
86
90
  return `${hh}:${mm}:${ss}`;
87
91
  }
88
- // JSON.stringify replacer that unwraps Error instances — their own fields
89
- // (`message`, `stack`, `name`) are non-enumerable, so the default serializer
90
- // produces "{}". Without this, nested errors like `{ provider, error }` lose
91
- // all diagnostic information in the log output.
92
92
  function jsonReplacer(_key, value) {
93
93
  if (value instanceof Error) {
94
- return {
94
+ const serialized = {
95
95
  name: value.name,
96
- message: value.message,
97
- ...(value.stack ? { stack: value.stack } : {}),
98
- ...(value.cause !== undefined ? { cause: value.cause } : {})
96
+ message: value.message
99
97
  };
98
+ if (value.stack) {
99
+ serialized.stack = value.stack;
100
+ }
101
+ if (value.cause !== undefined) {
102
+ serialized.cause = value.cause;
103
+ }
104
+ return serialized;
100
105
  }
101
106
  return value;
102
107
  }
108
+ /** A log argument worth rendering as JSON instead of stringifying. */
109
+ function isStructured(value) {
110
+ return typeof value === "object" && value !== null;
111
+ }
103
112
  function formatArgs(args) {
104
113
  if (args.length === 0)
105
114
  return "";
@@ -108,7 +117,7 @@ function formatArgs(args) {
108
117
  .map((a) => {
109
118
  if (a instanceof Error)
110
119
  return a.stack ?? a.message;
111
- if (typeof a === "object" && a !== null) {
120
+ if (isStructured(a)) {
112
121
  try {
113
122
  return JSON.stringify(a, jsonReplacer);
114
123
  }
@@ -128,12 +137,21 @@ function write(level, name, msg, args) {
128
137
  const lv = `${lc}${level.toUpperCase().padEnd(5)}${C.reset}`;
129
138
  const nm = `${C.cyan}${name}${C.reset}`;
130
139
  const line = `${ts} | ${lv} | ${nm} | ${msg}${formatArgs(args)}\n`;
131
- if (logFd !== null) {
132
- writeSync(logFd, line);
140
+ if (logFd !== null && fsSync) {
141
+ fsSync.writeSync(logFd, line);
133
142
  }
134
- else {
143
+ else if (IS_NODE) {
135
144
  process.stderr.write(line);
136
145
  }
146
+ else {
147
+ // Browser / V8 isolate — use console.
148
+ const fn = level === "error"
149
+ ? console.error
150
+ : level === "warn"
151
+ ? console.warn
152
+ : console.log;
153
+ fn(line.trimEnd());
154
+ }
137
155
  }
138
156
  /**
139
157
  * Create a named logger. Mirrors Python's logging.getLogger(__name__).
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Cross-runtime helpers for loading `node:*` built-ins lazily.
3
+ *
4
+ * Bundlers (Vite, esbuild) try to resolve `node:fs` etc. at build time
5
+ * even when the import is gated behind a runtime check, and `@vite-ignore`
6
+ * comments don't always stop the resolver. We use the `Function`
7
+ * constructor to construct an `import()` call the static analyser never
8
+ * sees.
9
+ *
10
+ * Returns `null` on non-Node runtimes (browser, V8 isolates without
11
+ * Node compat), so callers can fall back to platform-specific paths.
12
+ */
13
+ export declare const IS_NODE: boolean;
14
+ /**
15
+ * `process` is undefined in browser/edge runtimes, where a bare `process.env`
16
+ * read throws `ReferenceError` — including at module scope, which takes the
17
+ * whole bundle down at import time rather than at the call that wanted the
18
+ * variable. Any module that can end up in a browser graph reads env through
19
+ * this instead.
20
+ */
21
+ export declare const safeProcessEnv: () => Record<string, string | undefined>;
22
+ /** `process.platform`, or `""` where there is no `process`. */
23
+ export declare const safeProcessPlatform: () => string;
24
+ export declare function importNodeBuiltin<T>(name: string): Promise<T | null>;
25
+ export declare function getNodeBuiltinSync<T>(name: string): T | null;
26
+ /** Alias for `getNodeBuiltinSync` — synchronous counterpart to `importNodeBuiltin`. */
27
+ export declare const importNodeBuiltinSync: typeof getNodeBuiltinSync;
28
+ /**
29
+ * Dynamic import of an arbitrary module specifier hidden from bundler
30
+ * static analysis. Use for native/Node-only npm packages (e.g. `sharp`,
31
+ * `better-sqlite3`) so a browser/edge bundle doesn't try to bundle them.
32
+ *
33
+ * Returns `null` on non-Node runtimes. Throws if the package can't be
34
+ * resolved on Node — callers should catch if the dependency is optional.
35
+ */
36
+ export declare function importHidden<T>(name: string): Promise<T | null>;
37
+ //# sourceMappingURL=node-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-import.d.ts","sourceRoot":"","sources":["../src/node-import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,eAAO,MAAM,OAAO,SAC8C,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CACD,CAAC;AAEnE,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,QAAO,MACyB,CAAC;AAsCjE,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAS1E;AAoCD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAsB5D;AAED,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,2BAAqB,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAIrE"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Cross-runtime helpers for loading `node:*` built-ins lazily.
3
+ *
4
+ * Bundlers (Vite, esbuild) try to resolve `node:fs` etc. at build time
5
+ * even when the import is gated behind a runtime check, and `@vite-ignore`
6
+ * comments don't always stop the resolver. We use the `Function`
7
+ * constructor to construct an `import()` call the static analyser never
8
+ * sees.
9
+ *
10
+ * Returns `null` on non-Node runtimes (browser, V8 isolates without
11
+ * Node compat), so callers can fall back to platform-specific paths.
12
+ */
13
+ export const IS_NODE = typeof process !== "undefined" && process.versions?.node != null;
14
+ /**
15
+ * `process` is undefined in browser/edge runtimes, where a bare `process.env`
16
+ * read throws `ReferenceError` — including at module scope, which takes the
17
+ * whole bundle down at import time rather than at the call that wanted the
18
+ * variable. Any module that can end up in a browser graph reads env through
19
+ * this instead.
20
+ */
21
+ export const safeProcessEnv = () => typeof process !== "undefined" && process.env ? process.env : {};
22
+ /** `process.platform`, or `""` where there is no `process`. */
23
+ export const safeProcessPlatform = () => typeof process !== "undefined" ? (process.platform ?? "") : "";
24
+ /**
25
+ * Dynamic import that bundlers can't statically resolve.
26
+ *
27
+ * The Function-constructor body hides the `import()` call from Vite /
28
+ * Rollup / esbuild static analysis so they don't try to bundle Node
29
+ * built-ins into a browser graph. At runtime we prefer the constructed
30
+ * function, but in some test loaders (vitest) Function-context dynamic
31
+ * imports don't have access to the loader callback ("A dynamic import
32
+ * callback was not specified.") — in that case we fall back to a plain
33
+ * dynamic `import(name)` evaluated in the calling module's context.
34
+ */
35
+ const hiddenImport = (() => {
36
+ try {
37
+ // SAFETY: the constructed body is exactly `import(id)`, whose resolution
38
+ // value is always a module namespace object.
39
+ return new Function("id", "return import(id)");
40
+ }
41
+ catch {
42
+ return (id) => import(/* @vite-ignore */ id);
43
+ }
44
+ })();
45
+ async function tryImport(name) {
46
+ try {
47
+ return await hiddenImport(name);
48
+ }
49
+ catch (err) {
50
+ const msg = err instanceof Error ? err.message : String(err);
51
+ // Fall back to in-context dynamic import for vitest's VM loader.
52
+ if (msg.includes("dynamic import callback")) {
53
+ return await import(/* @vite-ignore */ name);
54
+ }
55
+ throw err;
56
+ }
57
+ }
58
+ export async function importNodeBuiltin(name) {
59
+ if (!IS_NODE)
60
+ return null;
61
+ try {
62
+ // SAFETY: `T` is the namespace shape the caller names for `name`; the
63
+ // pairing of specifier and type is the caller's to keep honest.
64
+ return (await tryImport(name));
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ /** Whether this Node build exposes the `process.getBuiltinModule` accessor. */
71
+ function hasGetBuiltinModule(proc) {
72
+ return typeof proc?.getBuiltinModule === "function";
73
+ }
74
+ /** Whether this module was loaded from a CJS bundle, which carries `require`. */
75
+ function hasCjsRequire(global) {
76
+ return typeof global.require === "function";
77
+ }
78
+ export function getNodeBuiltinSync(name) {
79
+ if (!IS_NODE)
80
+ return null;
81
+ try {
82
+ // SAFETY: `getBuiltinModule` landed in Node 18.19 and is absent from the
83
+ // `@types/node` `Process` this repo compiles against; the guard below is
84
+ // what decides whether it is really there.
85
+ const proc = globalThis.process;
86
+ if (hasGetBuiltinModule(proc)) {
87
+ // SAFETY: `T` is the namespace shape the caller names for `name`.
88
+ return proc.getBuiltinModule(name);
89
+ }
90
+ // SAFETY: `require` exists only when this module is loaded from a CJS
91
+ // bundle, so it is not on the ESM `globalThis` type; the guard decides.
92
+ const globalScope = globalThis;
93
+ if (hasCjsRequire(globalScope)) {
94
+ // SAFETY: `T` is the export shape the caller names for `name`.
95
+ return globalScope.require(name);
96
+ }
97
+ }
98
+ catch {
99
+ // fall through to null
100
+ }
101
+ return null;
102
+ }
103
+ /** Alias for `getNodeBuiltinSync` — synchronous counterpart to `importNodeBuiltin`. */
104
+ export const importNodeBuiltinSync = getNodeBuiltinSync;
105
+ /**
106
+ * Dynamic import of an arbitrary module specifier hidden from bundler
107
+ * static analysis. Use for native/Node-only npm packages (e.g. `sharp`,
108
+ * `better-sqlite3`) so a browser/edge bundle doesn't try to bundle them.
109
+ *
110
+ * Returns `null` on non-Node runtimes. Throws if the package can't be
111
+ * resolved on Node — callers should catch if the dependency is optional.
112
+ */
113
+ export async function importHidden(name) {
114
+ if (!IS_NODE)
115
+ return null;
116
+ // SAFETY: `T` is the namespace shape the caller names for `name`.
117
+ return (await tryImport(name));
118
+ }
119
+ //# sourceMappingURL=node-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-import.js","sourceRoot":"","sources":["../src/node-import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Import an optional dependency from the normal module graph, or — on Node —
3
+ * from a user-managed `node_modules` directory pointed to by
4
+ * NODETOOL_OPTIONAL_NODE_MODULES. The fallback path is Node-only; on
5
+ * browsers / Edge we just re-throw the original import failure.
6
+ */
7
+ export declare function importOptionalModule<T>(packageName: string): Promise<T>;
8
+ //# sourceMappingURL=optional-modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional-modules.d.ts","sourceRoot":"","sources":["../src/optional-modules.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAqC7E"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Import an optional dependency from the normal module graph, or — on Node —
3
+ * from a user-managed `node_modules` directory pointed to by
4
+ * NODETOOL_OPTIONAL_NODE_MODULES. The fallback path is Node-only; on
5
+ * browsers / Edge we just re-throw the original import failure.
6
+ */
7
+ import { IS_NODE, importNodeBuiltin, importHidden } from "./node-import.js";
8
+ export async function importOptionalModule(packageName) {
9
+ try {
10
+ const mod = await importHidden(packageName);
11
+ if (mod === null) {
12
+ throw new Error(`importOptionalModule: ${packageName} unavailable on non-Node`);
13
+ }
14
+ return mod;
15
+ }
16
+ catch (error) {
17
+ if (!IS_NODE)
18
+ throw error;
19
+ const optionalNodeModules = process.env["NODETOOL_OPTIONAL_NODE_MODULES"];
20
+ if (!optionalNodeModules) {
21
+ throw error;
22
+ }
23
+ try {
24
+ const modMod = await importNodeBuiltin("node:module");
25
+ const pathMod = await importNodeBuiltin("node:path");
26
+ const urlMod = await importNodeBuiltin("node:url");
27
+ if (!modMod || !pathMod || !urlMod)
28
+ throw error;
29
+ const requireFromOptional = modMod.createRequire(pathMod.join(optionalNodeModules, "..", "package.json"));
30
+ const resolved = requireFromOptional.resolve(packageName);
31
+ const fileMod = await importHidden(urlMod.pathToFileURL(resolved).href);
32
+ if (fileMod === null) {
33
+ throw error;
34
+ }
35
+ return fileMod;
36
+ }
37
+ catch {
38
+ throw error;
39
+ }
40
+ }
41
+ }
42
+ //# sourceMappingURL=optional-modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional-modules.js","sourceRoot":"","sources":["../src/optional-modules.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAI,WAAmB;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAI,WAAW,CAAC,CAAC;QAC/C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,0BAA0B,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC;QAC1B,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC1E,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC,aAAa,CACd,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACrC,WAAW,CACZ,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC,UAAU,CACX,CAAC;YACF,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;gBAAE,MAAM,KAAK,CAAC;YAChD,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAC9C,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,cAAc,CAAC,CACxD,CAAC;YACF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,MAAM,YAAY,CAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3E,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}