@dbx-tools/core 0.9.131 → 0.9.133

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,14 +1,10 @@
1
1
  # @dbx-tools/core
2
2
 
3
- Node-only core helpers for layered configuration, binary installation, process
4
- execution, locking, and project discovery.
3
+ Use shared Node and Bun helpers for layered configuration, binary installation,
4
+ process execution, locking, and project discovery. Browser-safe utilities live in
5
+ [@dbx-tools/shared-core](../../shared/core).
5
6
 
6
- It provides the shared configuration, command, project discovery, installer,
7
- and locking behavior used by the Node packages in this repository. Browser-safe
8
- utilities live in
9
- [`@dbx-tools/shared-core`](../../shared/core).
10
-
11
- ## Quick Start
7
+ ## Quick start
12
8
 
13
9
  Resolve a scoped setting through the shared environment and project-file rules:
14
10
 
@@ -20,7 +16,7 @@ const publicDomain = configUtils.string(undefined, "PUBLIC_DOMAIN", {
20
16
  });
21
17
  ```
22
18
 
23
- Key features:
19
+ Use this package for:
24
20
 
25
21
  - Async and sync process execution with consistent stdio handling.
26
22
  - AbortSignal support for long-running subprocesses.
@@ -41,7 +37,7 @@ Key features:
41
37
  - npm dependency resolution from an in-memory `package.json` against the
42
38
  configured registry.
43
39
 
44
- ## Install A Binary
40
+ ## Install a binary
45
41
 
46
42
  ```ts
47
43
  import { join } from "node:path";
@@ -65,10 +61,10 @@ duplicate downloads across processes and worker threads.
65
61
  After the lock, a function URL receives `{ tempDir }` so a local installer can
66
62
  write under that directory. Direct HTTP downloads are selected by default. A `file://` URL is
67
63
  copied without fetching or unpacking. Zip, tar, tar.gz, and tgz archives can
68
- be unpacked automatically; a single-file archive needs no selector, while a
64
+ be unpacked automatically. A single-file archive needs no selector, while a
69
65
  selector can choose a binary from a larger archive. The selected file is
70
66
  normalized to mode `0755` and must report an acceptable version before it is
71
- atomically moved into place; the final renamed path runs the same validation
67
+ atomically moved into place. The final renamed path runs the same validation
72
68
  again before returning.
73
69
 
74
70
  Every candidate runs with `--version` before it is accepted. Set
@@ -76,16 +72,16 @@ Every candidate runs with `--version` before it is accepted. Set
76
72
  or complete numeric floor such as `1`, `1.2`, or `1.3.5`. The default parser
77
73
  searches stdout first, then stderr. It accepts one to three numeric components
78
74
  with common npm/Python suffixes such as `1.2.3-rc.1`, `1.2.3rc1`, or
79
- `1.2.3.patchdev`; candidates with more components rank first, then the highest
75
+ `1.2.3.patchdev`. Candidates with more components rank first, then the highest
80
76
  numeric candidate wins. Supply `versionParser({ stdout, stderr })` for another
81
77
  output format.
82
78
 
83
- Successful installs log an info event with the source URL and destination path;
84
- credentials, query parameters, and fragments are removed from the URL. Set
79
+ Successful installs log an info event with the source URL and destination path.
80
+ Credentials, query parameters, and fragments are removed from the URL. Set
85
81
  `LOG_LEVEL=debug` to trace access checks, version decisions, locking, downloads,
86
82
  archive extraction, and selection.
87
83
 
88
- ## Load Brand Context
84
+ ## Load brand context
89
85
 
90
86
  ```ts
91
87
  import { brandFiles } from "@dbx-tools/core";
@@ -95,11 +91,11 @@ const context = await brandFiles.loadBrandContext();
95
91
 
96
92
  `loadBrandContext()` searches known npm/git project roots for
97
93
  `branding/brand.yaml`, `.yml`, or `.json`, followed by equivalent root-level
98
- files. Missing files return the complete dbx tools default context; malformed
94
+ files. Missing files return the full dbx-tools default context. Malformed
99
95
  files fail validation. Use `loadBrandContextFile(path)` for an explicit file and
100
96
  `resolveBrandAssetPath(path, asset)` for relative asset references.
101
97
 
102
- ## Resolve Configuration
98
+ ## Resolve configuration
103
99
 
104
100
  ```ts
105
101
  import { configUtils } from "@dbx-tools/core";
@@ -117,10 +113,10 @@ bundle configuration, then `app.yaml` / `app.yml` env values. The default
117
113
  `DBX_TOOLS` scope and an optional capability prefix produce names such as
118
114
  `DBX_TOOLS_TUNNEL_PUBLIC_DOMAIN`, then
119
115
  `TUNNEL_PUBLIC_DOMAIN`, then `PUBLIC_DOMAIN`. `.env.production` and `.env.prod`
120
- are checked before `.env` when `NODE_ENV=production`; development uses
116
+ are checked before `.env` when `NODE_ENV=production`. Development uses
121
117
  `.env.development` and `.env.dev`.
122
118
 
123
- Pass one config map or an array of maps through `data`; the first matching value
119
+ Pass one config map or an array of maps through `data`. The first matching value
124
120
  wins before environment lookup by default. When a custom `sources` order omits
125
121
  `config`, passed data is still read and is appended last. This lets a caller put
126
122
  env first without accidentally discarding its fallback config:
@@ -138,7 +134,7 @@ const endpoint = config.resolveValue("lakebaseEndpoint", {
138
134
  Bundle lookup runs `databricks bundle validate --output json` only after earlier
139
135
  sources miss. It reads literal values from the single App's `config.env`, accepts
140
136
  usable partial JSON from a failed validation, and honors the active Databricks
141
- profile. Parsed dotenv records are cached by file path; parsed bundle output is
137
+ profile. Parsed dotenv records are cached by file path. Parsed bundle output is
142
138
  cached by bundle path plus profile. App YAML lookup runs only if the bundle did
143
139
  not resolve the key and reads `env[].value` entries. Bundle `value_from` and App
144
140
  YAML `valueFrom` references resolve supported fields from their named
@@ -160,8 +156,8 @@ deterministic path as CLIs and ordinary Node consumers.
160
156
  Deployed Apps skip dotenv, bundle, and app YAML lookup after
161
157
  `environmentUtils.isDatabricksAppEnv()` from `@dbx-tools/shared-core` recognizes
162
158
  the required App name, HTTP(S) host, and valid port, or the Apps container source
163
- tree. Set `DBX_TOOLS_DATABRICKS_APP_ENV=true` or `false` to force that result;
164
- unrecognized values leave automatic detection in place.
159
+ tree. Set `DBX_TOOLS_DATABRICKS_APP_ENV=true` or `false` to force that result.
160
+ Unrecognized values leave automatic detection in place.
165
161
 
166
162
  `DBX_TOOLS_CONFIG_DOTENV`, `DBX_TOOLS_CONFIG_BUNDLE`, and
167
163
  `DBX_TOOLS_CONFIG_APP` independently force those file sources on or off. A
@@ -169,17 +165,17 @@ recognized boolean takes precedence over App
169
165
  runtime detection, so `true` can enable a local source inside an App and `false`
170
166
  can suppress it during local development. Absent or unrecognized values keep
171
167
  the default: read files outside an App and skip them inside one. Bundle reads
172
- also default off when `NODE_ENV=production`; set
168
+ also default off when `NODE_ENV=production`. Set
173
169
  `DBX_TOOLS_CONFIG_BUNDLE=true` to opt into bundle validation there.
174
170
 
175
171
  Use `config.string()`, `boolean()`, `positiveNumber()`, `positiveInt()`,
176
172
  `port()`, and `list()` to normalize typed options and text-based configuration
177
- through one rule. `config.port()` accepts only TCP ports from 1 through 65535;
173
+ through one rule. `config.port()` accepts only TCP ports from 1 through 65535.
178
174
  `config.ENV_ONLY` disables file fallbacks for exact environment reads.
179
175
  `config.flattenBundleEnv()`, `flattenAppEnv()`, and `getBundlePath()` expose the
180
176
  same parsing logic for callers that already have parsed configuration data.
181
177
 
182
- ## Discover Bundle App Resources
178
+ ## Discover bundle App resources
183
179
 
184
180
  ```ts
185
181
  import { bundle } from "@dbx-tools/core";
@@ -202,7 +198,7 @@ A failed validation that still returns partial App resources attaches
202
198
  nothing. Missing, invalid, or out-of-bound project paths also yield nothing.
203
199
  Malformed successful CLI output throws while the generator is consumed.
204
200
 
205
- ## Run Commands
201
+ ## Run commands
206
202
 
207
203
  ```ts
208
204
  import { exec } from "@dbx-tools/core";
@@ -225,8 +221,8 @@ tree, waits 8 seconds, then force-kills survivors and polls for 4 more seconds.
225
221
  Callers may override those timeouts but not the platform signal policy. Parent
226
222
  termination signals are forwarded through one process-global trap unless
227
223
  `forwardTerminationSignals: false` is set. Subscribe with
228
- `exec.onParentTerminationSignal` instead of adding another `process` listener;
229
- extra listeners change whether that trap re-raises the signal after children
224
+ `exec.onParentTerminationSignal` instead of adding another `process` listener.
225
+ Extra listeners change whether that trap re-raises the signal after children
230
226
  exit.
231
227
 
232
228
  When an executable is missing, `spawn()` and `spawnSync()` return
@@ -237,7 +233,7 @@ Prefer `spawn()` over ad hoc `child_process` calls when command output needs to
237
233
  be captured, streamed line-by-line, or aborted consistently from higher-level
238
234
  tooling.
239
235
 
240
- ## Run Synchronously
236
+ ## Run synchronously
241
237
 
242
238
  ```ts
243
239
  const rev = exec
@@ -252,7 +248,7 @@ control flow is not available. Synchronous children remain in the parent's
252
248
  process group so terminal signals reach both processes. JavaScript signal traps
253
249
  cannot run while the parent is blocked in `spawnSync()`.
254
250
 
255
- ## Split Shell-Like Commands
251
+ ## Split shell-like commands
256
252
 
257
253
  ```ts
258
254
  const argv = exec.shlex('pnpm exec prettier --write "README.md"');
@@ -261,7 +257,7 @@ const argv = exec.shlex('pnpm exec prettier --write "README.md"');
261
257
  `shlex()` is a small parser for command strings that need to become argv arrays.
262
258
  Prefer explicit argv arrays when possible.
263
259
 
264
- ## Serialize Work Across Threads
260
+ ## Serialize work across threads
265
261
 
266
262
  ```ts
267
263
  import { processLock } from "@dbx-tools/core";
@@ -272,14 +268,14 @@ await processLock.withProcessLock(["cache", name], async () => {
272
268
  ```
273
269
 
274
270
  `withProcessLock()` runs the callback while holding the named lock, releasing it
275
- when the callback settles. Callers sharing a key are serialized; distinct keys
271
+ when the callback settles. Callers sharing a key are serialized. Distinct keys
276
272
  run concurrently. The key is any value with a stable identity - a string, a
277
273
  `["invoice", id]` tuple, a config object - canonicalized by `object.toStableKey`,
278
274
  so structure counts: `["invoice", 7]` and `"invoice_7"` are different locks.
279
275
 
280
276
  Use it instead of a module-level promise chain when worker threads are involved.
281
277
  A promise chain only serializes the thread it lives on, so a worker pool runs one
282
- callback per thread; the coordinator here is shared, so the key admits one
278
+ callback per thread. The coordinator here is shared, so the key admits one
283
279
  callback for the whole process.
284
280
 
285
281
  Workers opt in when they are constructed:
@@ -302,10 +298,10 @@ never keeps the process from exiting.
302
298
  The scope is the THREADS of one process - `withProcessLock` shares nothing with a
303
299
  second `node` invocation or another replica. When the critical section spans a
304
300
  deployment, use
305
- [`@dbx-tools/postgres`](../postgres)'s `withAdvisoryLock`, which puts the arbiter
301
+ [@dbx-tools/postgres](../postgres)'s `withAdvisoryLock`, which puts the arbiter
306
302
  in PostgreSQL where every replica can see it.
307
303
 
308
- ## Serialize Work Across Processes
304
+ ## Serialize work across processes
309
305
 
310
306
  ```ts
311
307
  import { fileLock } from "@dbx-tools/core";
@@ -330,7 +326,7 @@ Use `processLock.withProcessLock()` when only threads in one process compete,
330
326
  `fileLock.withFileLock()` when local processes compete, and Postgres advisory
331
327
  locks when multiple app replicas need one arbiter.
332
328
 
333
- ## Discover Project Roots
329
+ ## Discover project roots
334
330
 
335
331
  ```ts
336
332
  import { projectUtils } from "@dbx-tools/core";
@@ -346,10 +342,10 @@ const cwd = projectUtils.resolveWorkingDirectory("");
346
342
  basename. `projectUtils.resolveWorkingDirectory()` normalizes blank, null, omitted,
347
343
  relative, and absolute cwd values for cache decisions. Project subprocess probes
348
344
  share a command/argument result cache only when that resolved path is the live
349
- process cwd; another directory executes directly. Empty command results are
345
+ process cwd. Another directory runs directly. Empty command results are
350
346
  cached too.
351
347
 
352
- ## Resolve npm Dependencies
348
+ ## Resolve npm dependencies
353
349
 
354
350
  ```ts
355
351
  import { readFile } from "node:fs/promises";
@@ -401,7 +397,6 @@ this when a mirror or delayed proxy 404s versions that public npm already has.
401
397
  - `brand` - YAML/JSON discovery, parsing, validation, and asset path resolution.
402
398
  - `config` - scoped environment, dotenv, and validated Databricks bundle lookup,
403
399
  including runtime detection and typed coercion helpers.
404
- - `file` - best-effort filesystem stat.
405
400
  - `fileLock` - portable cross-process lock directories shared by Bun and Node,
406
401
  with an explicit `flock` option.
407
402
  - `processLock` - keyed mutual exclusion across the main thread and its workers,
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
6
- export const PACKAGE_VERSION = "0.9.131";
6
+ export const PACKAGE_VERSION = "0.9.133";
7
7
  export * as bin from "./src/bin.ts";
8
8
  export * as brandFiles from "./src/brand-files.ts";
9
9
  export * as bundle from "./src/bundle.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/core";
2
- export declare const PACKAGE_VERSION = "0.9.131";
2
+ export declare const PACKAGE_VERSION = "0.9.133";
3
3
  export * as bin from "./src/bin.ts";
4
4
  export * as brandFiles from "./src/brand-files.ts";
5
5
  export * as bundle from "./src/bundle.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
5
- export const PACKAGE_VERSION = "0.9.131";
5
+ export const PACKAGE_VERSION = "0.9.133";
6
6
  export * as bin from "./src/bin.js";
7
7
  export * as brandFiles from "./src/brand-files.js";
8
8
  export * as bundle from "./src/bundle.js";
@@ -16,4 +16,4 @@ export * as projectUtils from "./src/project-utils.js";
16
16
  export { BrandContextSchema, defaultBrandContext, parseBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand-files.js";
17
17
  export { MAX_TCP_PORT, ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema, toNumber } from "./src/config-utils.js";
18
18
  export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.js";
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdqTCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xMzFcIjtcbmV4cG9ydCAqIGFzIGJpbiBmcm9tIFwiLi9zcmMvYmluLnRzXCI7XG5leHBvcnQgKiBhcyBicmFuZEZpbGVzIGZyb20gXCIuL3NyYy9icmFuZC1maWxlcy50c1wiO1xuZXhwb3J0ICogYXMgYnVuZGxlIGZyb20gXCIuL3NyYy9idW5kbGUudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZ1V0aWxzIGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCAqIGFzIGRlcGVuZGVuY3lSZXNvbHZlciBmcm9tIFwiLi9zcmMvZGVwZW5kZW5jeS1yZXNvbHZlci50c1wiO1xuZXhwb3J0ICogYXMgZXhlYyBmcm9tIFwiLi9zcmMvZXhlYy50c1wiO1xuZXhwb3J0ICogYXMgZmlsZSBmcm9tIFwiLi9zcmMvZmlsZS50c1wiO1xuZXhwb3J0ICogYXMgZmlsZUxvY2sgZnJvbSBcIi4vc3JjL2ZpbGUtbG9jay50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc0xvY2sgZnJvbSBcIi4vc3JjL3Byb2Nlc3MtbG9jay50c1wiO1xuZXhwb3J0ICogYXMgcHJvamVjdFV0aWxzIGZyb20gXCIuL3NyYy9wcm9qZWN0LXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJpbkNvbnRleHQsIEJpblNlbGVjdGlvbkNvbnRleHQsIEJpblNlbGVjdG9yLCBCaW5WZXJzaW9uT3V0cHV0LCBCaW5WZXJzaW9uUGFyc2VyLCBCaW5PcHRpb25zLCBCaW5QYWNrYWdlT3B0aW9ucywgQmluVXJsUmVzb2x2ZUNvbnRleHQsIEJpblNvdXJjZSwgQmluVXJsIH0gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0IHsgQnJhbmRDb250ZXh0U2NoZW1hLCBkZWZhdWx0QnJhbmRDb250ZXh0LCBwYXJzZUJyYW5kQ29udGV4dCwgYnJhbmRDb250ZXh0SnNvblNjaGVtYSwgYnJhbmRDb250ZXh0UHJvbXB0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCwgQnJhbmRDb250ZXh0SW5wdXQgfSBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCB7IE1BWF9UQ1BfUE9SVCwgRU5WX09OTFksIHZhbHVlU2NoZW1hLCBidW5kbGVSZXNvdXJjZVNjaGVtYSwgYnVuZGxlRW52RW50cnlTY2hlbWEsIGJ1bmRsZUFwcFNjaGVtYSwgYXBwRW52RW50cnlTY2hlbWEsIGFwcFNjaGVtYSwgdG9OdW1iZXIgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IENvbmZpZ01hcFZhbHVlLCBDb25maWdEYXRhLCBDb25maWdTb3VyY2UsIENvbmZpZ09wdGlvbnMsIENvbmZpZ0ZpbGUgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERlcGVuZGVuY3lSZXNvbHZlck9wdGlvbnMsIERlcGVuZGVuY3lJbmZvLCBSZXNvbHZlZE5wbVZlcnNpb24sIE5wbVNwZWNpZmllcklucHV0LCBSZXNvbHZlZE5wbURlcGVuZGVuY2llcywgTWlzc2luZ0RlcGVuZGVuY3lJbmZvIH0gZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB7IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERSB9IGZyb20gXCIuL3NyYy9leGVjLnRzXCI7XG5leHBvcnQgdHlwZSB7IEV4ZWNTdGRpbywgTGluZUhhbmRsZXIsIExpbmVPdXRwdXRPcHRpb25zLCBTdGRpb09wdGlvbiwgRXhlY1Jlc3VsdCwgQ2hpbGRQcm9jZXNzUmVzdWx0LCBDaGlsZFByb2Nlc3NUZXJtaW5hdGlvbk9wdGlvbnMsIEV4ZWNPcHRpb25zLCBTeW5jRXhlY1N0ZGlvLCBTeW5jRXhlY09wdGlvbnMsIFNwYXduQXJncyB9IGZyb20gXCIuL3NyYy9leGVjLnRzXCI7XG5leHBvcnQgdHlwZSB7IEZpbGVMb2NrQmFja2VuZCwgRmlsZUxvY2tBY3F1aXNpdGlvbiwgRmlsZUxvY2tPcHRpb25zLCBGaWxlTG9ja0xlYXNlIH0gZnJvbSBcIi4vc3JjL2ZpbGUtbG9jay50c1wiO1xuZXhwb3J0IHR5cGUgeyBQcm9qZWN0Q29udGV4dCwgUHJvamVjdEdoUmVtb3RlLCBQcm9qZWN0R2hBY2NvdW50LCBSZXNvbHZlUHJvamVjdEdoQWNjb3VudE9wdGlvbnMsIE5wbVJlZ2lzdHJ5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9wcm9qZWN0LXV0aWxzLnRzXCI7XG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdqTCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xMzNcIjtcbmV4cG9ydCAqIGFzIGJpbiBmcm9tIFwiLi9zcmMvYmluLnRzXCI7XG5leHBvcnQgKiBhcyBicmFuZEZpbGVzIGZyb20gXCIuL3NyYy9icmFuZC1maWxlcy50c1wiO1xuZXhwb3J0ICogYXMgYnVuZGxlIGZyb20gXCIuL3NyYy9idW5kbGUudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZ1V0aWxzIGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCAqIGFzIGRlcGVuZGVuY3lSZXNvbHZlciBmcm9tIFwiLi9zcmMvZGVwZW5kZW5jeS1yZXNvbHZlci50c1wiO1xuZXhwb3J0ICogYXMgZXhlYyBmcm9tIFwiLi9zcmMvZXhlYy50c1wiO1xuZXhwb3J0ICogYXMgZmlsZSBmcm9tIFwiLi9zcmMvZmlsZS50c1wiO1xuZXhwb3J0ICogYXMgZmlsZUxvY2sgZnJvbSBcIi4vc3JjL2ZpbGUtbG9jay50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc0xvY2sgZnJvbSBcIi4vc3JjL3Byb2Nlc3MtbG9jay50c1wiO1xuZXhwb3J0ICogYXMgcHJvamVjdFV0aWxzIGZyb20gXCIuL3NyYy9wcm9qZWN0LXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJpbkNvbnRleHQsIEJpblNlbGVjdGlvbkNvbnRleHQsIEJpblNlbGVjdG9yLCBCaW5WZXJzaW9uT3V0cHV0LCBCaW5WZXJzaW9uUGFyc2VyLCBCaW5PcHRpb25zLCBCaW5QYWNrYWdlT3B0aW9ucywgQmluVXJsUmVzb2x2ZUNvbnRleHQsIEJpblNvdXJjZSwgQmluVXJsIH0gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0IHsgQnJhbmRDb250ZXh0U2NoZW1hLCBkZWZhdWx0QnJhbmRDb250ZXh0LCBwYXJzZUJyYW5kQ29udGV4dCwgYnJhbmRDb250ZXh0SnNvblNjaGVtYSwgYnJhbmRDb250ZXh0UHJvbXB0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCwgQnJhbmRDb250ZXh0SW5wdXQgfSBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCB7IE1BWF9UQ1BfUE9SVCwgRU5WX09OTFksIHZhbHVlU2NoZW1hLCBidW5kbGVSZXNvdXJjZVNjaGVtYSwgYnVuZGxlRW52RW50cnlTY2hlbWEsIGJ1bmRsZUFwcFNjaGVtYSwgYXBwRW52RW50cnlTY2hlbWEsIGFwcFNjaGVtYSwgdG9OdW1iZXIgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IENvbmZpZ01hcFZhbHVlLCBDb25maWdEYXRhLCBDb25maWdTb3VyY2UsIENvbmZpZ09wdGlvbnMsIENvbmZpZ0ZpbGUgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERlcGVuZGVuY3lSZXNvbHZlck9wdGlvbnMsIERlcGVuZGVuY3lJbmZvLCBSZXNvbHZlZE5wbVZlcnNpb24sIE5wbVNwZWNpZmllcklucHV0LCBSZXNvbHZlZE5wbURlcGVuZGVuY2llcywgTWlzc2luZ0RlcGVuZGVuY3lJbmZvIH0gZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB7IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERSB9IGZyb20gXCIuL3NyYy9leGVjLnRzXCI7XG5leHBvcnQgdHlwZSB7IEV4ZWNTdGRpbywgTGluZUhhbmRsZXIsIExpbmVPdXRwdXRPcHRpb25zLCBTdGRpb09wdGlvbiwgRXhlY1Jlc3VsdCwgQ2hpbGRQcm9jZXNzUmVzdWx0LCBDaGlsZFByb2Nlc3NUZXJtaW5hdGlvbk9wdGlvbnMsIEV4ZWNPcHRpb25zLCBTeW5jRXhlY1N0ZGlvLCBTeW5jRXhlY09wdGlvbnMsIFNwYXduQXJncyB9IGZyb20gXCIuL3NyYy9leGVjLnRzXCI7XG5leHBvcnQgdHlwZSB7IEZpbGVMb2NrQmFja2VuZCwgRmlsZUxvY2tBY3F1aXNpdGlvbiwgRmlsZUxvY2tPcHRpb25zLCBGaWxlTG9ja0xlYXNlIH0gZnJvbSBcIi4vc3JjL2ZpbGUtbG9jay50c1wiO1xuZXhwb3J0IHR5cGUgeyBQcm9qZWN0Q29udGV4dCwgUHJvamVjdEdoUmVtb3RlLCBQcm9qZWN0R2hBY2NvdW50LCBSZXNvbHZlUHJvamVjdEdoQWNjb3VudE9wdGlvbnMsIE5wbVJlZ2lzdHJ5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9wcm9qZWN0LXV0aWxzLnRzXCI7XG4iXX0=
@@ -44,7 +44,7 @@ export declare const BrandContextSchema: import("zod").ZodObject<{
44
44
  links: import("zod").ZodPrefault<import("zod").ZodObject<{
45
45
  website: import("zod").ZodDefault<import("zod").ZodString>;
46
46
  repository: import("zod").ZodOptional<import("zod").ZodString>;
47
- documentation: import("zod").ZodOptional<import("zod").ZodString>;
47
+ documentation: import("zod").ZodDefault<import("zod").ZodString>;
48
48
  }, import("zod/v4/core").$strict>>;
49
49
  extensions: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
50
50
  }, import("zod/v4/core").$strict>;
@@ -88,8 +88,8 @@ export declare const defaultBrandContext: {
88
88
  };
89
89
  links: {
90
90
  website: string;
91
+ documentation: string;
91
92
  repository?: string | undefined;
92
- documentation?: string | undefined;
93
93
  };
94
94
  extensions: Record<string, unknown>;
95
95
  };
package/package.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "typescript": "^5.9.3"
26
26
  },
27
27
  "dependencies": {
28
- "@dbx-tools/shared-core": "^0.9.131",
28
+ "@dbx-tools/shared-core": "^0.9.133",
29
29
  "extract-zip": "^2.0.1",
30
30
  "proper-lockfile": "^4.1.2",
31
31
  "semver": "^7.7.3",
@@ -91,7 +91,7 @@
91
91
  "./package.json": "./package.json"
92
92
  }
93
93
  },
94
- "version": "0.9.131",
94
+ "version": "0.9.133",
95
95
  "types": "./lib/index.d.ts",
96
96
  "dbxToolsConfig": {
97
97
  "tags": [