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

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 (94) 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 +14 -4
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +14 -4
  45. package/dist/index.js.map +1 -1
  46. package/dist/logging.d.ts +12 -0
  47. package/dist/logging.d.ts.map +1 -1
  48. package/dist/logging.js +65 -28
  49. package/dist/logging.js.map +1 -1
  50. package/dist/node-import.d.ts +37 -0
  51. package/dist/node-import.d.ts.map +1 -0
  52. package/dist/node-import.js +119 -0
  53. package/dist/node-import.js.map +1 -0
  54. package/dist/optional-modules.d.ts +10 -0
  55. package/dist/optional-modules.d.ts.map +1 -0
  56. package/dist/optional-modules.js +58 -0
  57. package/dist/optional-modules.js.map +1 -0
  58. package/dist/package-asset-registry.d.ts +102 -0
  59. package/dist/package-asset-registry.d.ts.map +1 -0
  60. package/dist/package-asset-registry.js +157 -0
  61. package/dist/package-asset-registry.js.map +1 -0
  62. package/dist/package-assets.d.ts +52 -0
  63. package/dist/package-assets.d.ts.map +1 -0
  64. package/dist/package-assets.js +98 -0
  65. package/dist/package-assets.js.map +1 -0
  66. package/dist/paths.d.ts +52 -23
  67. package/dist/paths.d.ts.map +1 -1
  68. package/dist/paths.js +166 -47
  69. package/dist/paths.js.map +1 -1
  70. package/dist/retention.d.ts +3 -0
  71. package/dist/retention.d.ts.map +1 -0
  72. package/dist/retention.js +19 -0
  73. package/dist/retention.js.map +1 -0
  74. package/dist/setting-catalog.d.ts +28 -0
  75. package/dist/setting-catalog.d.ts.map +1 -0
  76. package/dist/setting-catalog.js +167 -0
  77. package/dist/setting-catalog.js.map +1 -0
  78. package/dist/storage-config.d.ts +45 -0
  79. package/dist/storage-config.d.ts.map +1 -0
  80. package/dist/storage-config.js +62 -0
  81. package/dist/storage-config.js.map +1 -0
  82. package/dist/trace-redaction.d.ts +5 -0
  83. package/dist/trace-redaction.d.ts.map +1 -0
  84. package/dist/trace-redaction.js +51 -0
  85. package/dist/trace-redaction.js.map +1 -0
  86. package/package.json +23 -8
  87. package/dist/diagnostics.d.ts +0 -27
  88. package/dist/diagnostics.d.ts.map +0 -1
  89. package/dist/diagnostics.js +0 -42
  90. package/dist/diagnostics.js.map +0 -1
  91. package/dist/settings.d.ts +0 -29
  92. package/dist/settings.d.ts.map +0 -1
  93. package/dist/settings.js +0 -29
  94. 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,16 @@
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 { 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";
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";
9
+ export { setLogHook, type LogHook, type LogEntry, configureLogging, getLogLevel, createLogger, type LogLevel, type LoggingOptions, type Logger } from "./logging.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";
15
+ export { redactPrivateKeys, redactTraceText } from "./trace-redaction.js";
6
16
  //# 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,UAAU,EACV,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,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;AAE7B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,16 @@
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 { 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";
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";
9
+ export { setLogHook, configureLogging, getLogLevel, createLogger } from "./logging.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";
15
+ export { redactPrivateKeys, redactTraceText } from "./trace-redaction.js";
6
16
  //# 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,UAAU,EAGV,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;AAE7B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/logging.d.ts CHANGED
@@ -17,6 +17,18 @@ export interface Logger {
17
17
  export interface LoggingOptions {
18
18
  level?: LogLevel;
19
19
  }
20
+ export interface LogEntry {
21
+ readonly level: LogLevel;
22
+ readonly source: string;
23
+ readonly message: string;
24
+ readonly args: readonly unknown[];
25
+ }
26
+ export type LogHook = (entry: LogEntry) => {
27
+ message: string;
28
+ args: readonly unknown[];
29
+ };
30
+ /** Install the runtime hook without making configuration depend on telemetry. */
31
+ export declare function setLogHook(hook: LogHook | null): void;
20
32
  /**
21
33
  * Configure the global log level.
22
34
  * Priority: explicit option > NODETOOL_LOG_LEVEL env > LOG_LEVEL env > "info"
@@ -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;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;CACnC;AACD,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC;AAIzF,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAAoB;AAoC1E;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,cAAmB,GAAG,IAAI,CAiBhE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AA2HD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD"}
package/dist/logging.js CHANGED
@@ -7,7 +7,12 @@
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");
12
+ let logHook = null;
13
+ let invokingHook = false;
14
+ /** Install the runtime hook without making configuration depend on telemetry. */
15
+ export function setLogHook(hook) { logHook = hook; }
11
16
  const VALID_LEVELS = ["debug", "info", "warn", "error"];
12
17
  const LEVEL_NUM = {
13
18
  debug: 0,
@@ -16,19 +21,22 @@ const LEVEL_NUM = {
16
21
  error: 3
17
22
  };
18
23
  /** Maps Python-style log level names to their JS equivalents. */
19
- const LEVEL_ALIASES = {
20
- warning: "warn",
21
- critical: "error"
22
- };
24
+ const LEVEL_ALIASES = new Map([
25
+ ["warning", "warn"],
26
+ ["critical", "error"]
27
+ ]);
23
28
  function normalizeLevel(raw) {
24
29
  const lower = raw.toLowerCase();
25
- if (VALID_LEVELS.includes(lower))
26
- return lower;
27
- return LEVEL_ALIASES[lower] ?? null;
30
+ return (VALID_LEVELS.find((level) => level === lower) ??
31
+ LEVEL_ALIASES.get(lower) ??
32
+ null);
28
33
  }
29
34
  // Initialize eagerly from env so configureLogging() is optional for entry
30
35
  // 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";
36
+ // Use globalThis.process so the module loads on runtimes (browser, Edge)
37
+ // where `process` is undefined.
38
+ const ENV = IS_NODE ? process.env : {};
39
+ let currentLevel = normalizeLevel(ENV["NODETOOL_LOG_LEVEL"] ?? ENV["LOG_LEVEL"] ?? "") ?? "info";
32
40
  /** File descriptor for log output. Defaults to stderr; set via NODETOOL_LOG_FILE. */
33
41
  let logFd = null;
34
42
  /**
@@ -43,14 +51,14 @@ export function configureLogging(opts = {}) {
43
51
  currentLevel = opts.level;
44
52
  }
45
53
  else {
46
- const envRaw = process.env["NODETOOL_LOG_LEVEL"] ?? process.env["LOG_LEVEL"] ?? "info";
54
+ const envRaw = ENV["NODETOOL_LOG_LEVEL"] ?? ENV["LOG_LEVEL"] ?? "info";
47
55
  currentLevel = normalizeLevel(envRaw) ?? "info";
48
56
  }
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) {
57
+ // Open log file if configured (only available on Node)
58
+ const logFile = ENV["NODETOOL_LOG_FILE"];
59
+ if (logFile && logFd === null && fsSync) {
52
60
  try {
53
- logFd = openSync(logFile, "a");
61
+ logFd = fsSync.openSync(logFile, "a");
54
62
  }
55
63
  catch {
56
64
  // Fall back to stderr silently
@@ -61,8 +69,8 @@ export function configureLogging(opts = {}) {
61
69
  export function getLogLevel() {
62
70
  return currentLevel;
63
71
  }
64
- // Colour support
65
- const USE_COLOR = process.stderr.isTTY && !process.env["NO_COLOR"];
72
+ // Colour support — only on Node where process.stderr.isTTY exists.
73
+ const USE_COLOR = IS_NODE && Boolean(process.stderr?.isTTY) && !ENV["NO_COLOR"];
66
74
  const C = {
67
75
  reset: USE_COLOR ? "\x1b[0m" : "",
68
76
  dim: USE_COLOR ? "\x1b[2m" : "",
@@ -85,21 +93,26 @@ function timestamp() {
85
93
  const ss = String(d.getSeconds()).padStart(2, "0");
86
94
  return `${hh}:${mm}:${ss}`;
87
95
  }
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
96
  function jsonReplacer(_key, value) {
93
97
  if (value instanceof Error) {
94
- return {
98
+ const serialized = {
95
99
  name: value.name,
96
- message: value.message,
97
- ...(value.stack ? { stack: value.stack } : {}),
98
- ...(value.cause !== undefined ? { cause: value.cause } : {})
100
+ message: value.message
99
101
  };
102
+ if (value.stack) {
103
+ serialized.stack = value.stack;
104
+ }
105
+ if (value.cause !== undefined) {
106
+ serialized.cause = value.cause;
107
+ }
108
+ return serialized;
100
109
  }
101
110
  return value;
102
111
  }
112
+ /** A log argument worth rendering as JSON instead of stringifying. */
113
+ function isStructured(value) {
114
+ return typeof value === "object" && value !== null;
115
+ }
103
116
  function formatArgs(args) {
104
117
  if (args.length === 0)
105
118
  return "";
@@ -108,7 +121,7 @@ function formatArgs(args) {
108
121
  .map((a) => {
109
122
  if (a instanceof Error)
110
123
  return a.stack ?? a.message;
111
- if (typeof a === "object" && a !== null) {
124
+ if (isStructured(a)) {
112
125
  try {
113
126
  return JSON.stringify(a, jsonReplacer);
114
127
  }
@@ -123,17 +136,41 @@ function formatArgs(args) {
123
136
  function write(level, name, msg, args) {
124
137
  if (LEVEL_NUM[level] < LEVEL_NUM[currentLevel])
125
138
  return;
139
+ if (logHook && !invokingHook) {
140
+ invokingHook = true;
141
+ try {
142
+ const output = logHook({ level, source: name, message: msg, args });
143
+ msg = output.message;
144
+ args = [...output.args];
145
+ }
146
+ catch {
147
+ msg = "Log recording failed";
148
+ args = [];
149
+ }
150
+ finally {
151
+ invokingHook = false;
152
+ }
153
+ }
126
154
  const lc = LEVEL_COLOR[level];
127
155
  const ts = `${C.dim}${timestamp()}${C.reset}`;
128
156
  const lv = `${lc}${level.toUpperCase().padEnd(5)}${C.reset}`;
129
157
  const nm = `${C.cyan}${name}${C.reset}`;
130
158
  const line = `${ts} | ${lv} | ${nm} | ${msg}${formatArgs(args)}\n`;
131
- if (logFd !== null) {
132
- writeSync(logFd, line);
159
+ if (logFd !== null && fsSync) {
160
+ fsSync.writeSync(logFd, line);
133
161
  }
134
- else {
162
+ else if (IS_NODE) {
135
163
  process.stderr.write(line);
136
164
  }
165
+ else {
166
+ // Browser / V8 isolate — use console.
167
+ const fn = level === "error"
168
+ ? console.error
169
+ : level === "warn"
170
+ ? console.warn
171
+ : console.log;
172
+ fn(line.trimEnd());
173
+ }
137
174
  }
138
175
  /**
139
176
  * 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,10 @@
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, options?: {
8
+ commonJs?: boolean;
9
+ }): Promise<T>;
10
+ //# 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,EAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,OAAO,CAAC,CAAC,CAAC,CAyDZ"}