@dbx-tools/cli 0.9.132 → 0.9.136

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
@@ -14,6 +14,34 @@ bun add --global @dbx-tools/cli
14
14
  profile are resolved automatically. Pass `--profile` only to override that
15
15
  selection. Examples that use `MY-PROFILE` show the explicit form.
16
16
 
17
+ ## Export a brand package
18
+
19
+ ```sh
20
+ dbx brand "A neighborhood coffee company for morning commuters"
21
+ ```
22
+
23
+ The command researches the broader web for brand facts and design direction,
24
+ then visits matching iOS App Store and Google Play pages for supplemental
25
+ visual references. It uses the downloaded icons and screenshots during
26
+ multimodal synthesis without treating the mobile designs as the full brand.
27
+
28
+ The default `branding/` directory contains:
29
+
30
+ - `brand.yaml`, compatible with the shared dbx-tools brand context.
31
+ - `brand-package.json`, with source provenance and visual-reference metadata.
32
+ - `references/ios/` and `references/android/`, with the mobile images used for
33
+ visual research.
34
+
35
+ Use `--name` or `--website` to disambiguate the prompt, `--output` to select a
36
+ different package directory, and `--force` to replace an existing package:
37
+
38
+ ```sh
39
+ dbx brand "Retail analytics for store operators" \
40
+ --name "Acme Retail" \
41
+ --website https://acme.example \
42
+ --output branding/acme-retail
43
+ ```
44
+
17
45
  ## Serve models to local tools
18
46
 
19
47
  ```sh
@@ -145,8 +173,8 @@ bun run barrels
145
173
 
146
174
  See [@dbx-tools/projen](../../../../projen) for workspace configuration and
147
175
  generation. Command implementations are available from `@dbx-tools/cli/appkit`,
148
- `/auth`, `/genie`, `/graphiti`, `/lakebase-proxy`, `/model-gateway`, and
149
- `/tunnel` when a Node caller needs to embed one parser.
176
+ `/auth`, `/brand`, `/genie`, `/graphiti`, `/lakebase-proxy`, `/model-gateway`,
177
+ and `/tunnel` when a Node caller needs to embed one parser.
150
178
 
151
179
  <!-- cli-reference:start -->
152
180
 
@@ -154,7 +182,7 @@ generation. Command implementations are available from `@dbx-tools/cli/appkit`,
154
182
 
155
183
  ### `dbx`
156
184
 
157
- Databricks developer tools: workspace lifecycle, AppKit env, auth, tunnels, and local proxies
185
+ Databricks developer tools: workspace lifecycle, AppKit env, auth, brand generation, tunnels, and local proxies
158
186
 
159
187
  ```sh
160
188
  dbx [command]
@@ -162,16 +190,17 @@ dbx [command]
162
190
 
163
191
  #### Commands
164
192
 
165
- | Command | Description |
166
- | -------------------------------- | ----------------------------------------------------------------------- |
167
- | `dev [projenArgs...]` | Bootstrap or repair a dbx-tools workspace, then forward to projen |
168
- | `appkit` | AppKit helpers: resolve the environment an AppKit app would start with. |
169
- | `auth [options]` | Authenticate to Databricks with user or machine OAuth |
170
- | `tunnel [options] [command...]` | Front a command with a public tunnel and passwordless auth |
171
- | `lakebase-proxy [options]` | Run a loopback PostgreSQL proxy for Databricks Lakebase |
172
- | `model-gateway [options]` | Run or manage the AppKit Databricks model gateway |
173
- | `genie [options] [genieArgs...]` | Run Genie Code through an authenticated local Databricks model gateway |
174
- | `graphiti [options]` | Run Graphiti or manage its current-user desktop service |
193
+ | Command | Description |
194
+ | -------------------------------- | ---------------------------------------------------------------------------------- |
195
+ | `dev [projenArgs...]` | Bootstrap or repair a dbx-tools workspace, then forward to projen |
196
+ | `appkit` | AppKit helpers: resolve the environment an AppKit app would start with. |
197
+ | `auth [options]` | Authenticate to Databricks with user or machine OAuth |
198
+ | `brand [options] <prompt>` | Research a brand brief and export brand.yaml with web and mobile visual references |
199
+ | `tunnel [options] [command...]` | Front a command with a public tunnel and passwordless auth |
200
+ | `lakebase-proxy [options]` | Run a loopback PostgreSQL proxy for Databricks Lakebase |
201
+ | `model-gateway [options]` | Run or manage the AppKit Databricks model gateway |
202
+ | `genie [options] [genieArgs...]` | Run Genie Code through an authenticated local Databricks model gateway |
203
+ | `graphiti [options]` | Run Graphiti or manage its current-user desktop service |
175
204
 
176
205
  ### `dbx dev`
177
206
 
@@ -307,6 +336,34 @@ Show the resolved authentication client configuration
307
336
  dbx auth status
308
337
  ```
309
338
 
339
+ ### `dbx brand`
340
+
341
+ Research a brand brief and export brand.yaml with web and mobile visual references
342
+
343
+ ```sh
344
+ dbx brand [options] <prompt>
345
+ ```
346
+
347
+ #### Arguments
348
+
349
+ | Argument | Description |
350
+ | -------- | ---------------------------------------------------- |
351
+ | `prompt` | brand, company, product, or design brief to research |
352
+
353
+ #### Options
354
+
355
+ | Option | Description |
356
+ | --------------------------------- | ------------------------------------------------------------------------------------------------------ |
357
+ | `-p, --profile <value>` | Databricks CLI profile. (env: DATABRICKS_CONFIG_PROFILE) |
358
+ | `-n, --name <value>` | Known canonical brand name. (env: NAME) |
359
+ | `-w, --website <value>` | Known official HTTPS website. (env: WEBSITE) |
360
+ | `-o, --output <value>` | Output directory for brand.yaml, provenance, and visual references. (default: "branding", env: OUTPUT) |
361
+ | `--model <value>` | Optional Databricks model preference for brand synthesis. (env: MODEL) |
362
+ | `--max-sources <value>` | Maximum general web sources to read. (default: 4, env: MAX_SOURCES) |
363
+ | `-s, --source-max-length <value>` | Maximum characters retained from each source page. (default: 8000, env: SOURCE_MAX_LENGTH) |
364
+ | `-f, --force` | Replace files in an existing output directory. (default: false, env: FORCE) |
365
+ | `--no-force` | Disable replace files in an existing output directory. |
366
+
310
367
  ### `dbx tunnel`
311
368
 
312
369
  Front a command with a public tunnel and passwordless auth
@@ -333,6 +390,7 @@ dbx tunnel [options] [command] [command...]
333
390
  | `--allow <value>` | Email allow-list patterns. (env: TUNNEL_AUTH_ALLOW) |
334
391
  | `--subject <value>` | Verification email subject. (env: TUNNEL_AUTH_SUBJECT) |
335
392
  | `--brand-name <value>` | Verification email brand name. (env: TUNNEL_AUTH_BRAND_NAME) |
393
+ | `--passkey-name-prefix <value>` | Prefix for humanized tunnel passkey names. (env: TUNNEL_AUTH_PASSKEY_NAME_PREFIX) |
336
394
  | `-m, --message <value>` | Verification email message. (env: TUNNEL_AUTH_MESSAGE) |
337
395
  | `--session-ttl-seconds <value>` | Session lifetime in seconds. (env: TUNNEL_AUTH_SESSION_TTL) |
338
396
  | `-c, --code-ttl-seconds <value>` | One-time-code lifetime in seconds. (env: TUNNEL_AUTH_CODE_TTL) |
@@ -385,6 +443,7 @@ dbx tunnel run [options] <command...>
385
443
  | `--allow <value>` | Email allow-list patterns. (env: TUNNEL_AUTH_ALLOW) |
386
444
  | `--subject <value>` | Verification email subject. (env: TUNNEL_AUTH_SUBJECT) |
387
445
  | `--brand-name <value>` | Verification email brand name. (env: TUNNEL_AUTH_BRAND_NAME) |
446
+ | `--passkey-name-prefix <value>` | Prefix for humanized tunnel passkey names. (env: TUNNEL_AUTH_PASSKEY_NAME_PREFIX) |
388
447
  | `-m, --message <value>` | Verification email message. (env: TUNNEL_AUTH_MESSAGE) |
389
448
  | `--session-ttl-seconds <value>` | Session lifetime in seconds. (env: TUNNEL_AUTH_SESSION_TTL) |
390
449
  | `-c, --code-ttl-seconds <value>` | One-time-code lifetime in seconds. (env: TUNNEL_AUTH_CODE_TTL) |
@@ -423,6 +482,7 @@ dbx tunnel status [options]
423
482
  | `--allow <value>` | Email allow-list patterns. (env: TUNNEL_AUTH_ALLOW) |
424
483
  | `--subject <value>` | Verification email subject. (env: TUNNEL_AUTH_SUBJECT) |
425
484
  | `--brand-name <value>` | Verification email brand name. (env: TUNNEL_AUTH_BRAND_NAME) |
485
+ | `--passkey-name-prefix <value>` | Prefix for humanized tunnel passkey names. (env: TUNNEL_AUTH_PASSKEY_NAME_PREFIX) |
426
486
  | `-m, --message <value>` | Verification email message. (env: TUNNEL_AUTH_MESSAGE) |
427
487
  | `--session-ttl-seconds <value>` | Session lifetime in seconds. (env: TUNNEL_AUTH_SESSION_TTL) |
428
488
  | `-c, --code-ttl-seconds <value>` | One-time-code lifetime in seconds. (env: TUNNEL_AUTH_CODE_TTL) |
package/index.ts CHANGED
@@ -3,12 +3,16 @@
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/cli";
6
- export const PACKAGE_VERSION = "0.9.132";
6
+ export const PACKAGE_VERSION = "0.9.136";
7
7
  export * as appkitCli from "./src/appkit/cli.ts";
8
8
  export * as appkitEnvExport from "./src/appkit/env-export.ts";
9
9
  export * as authCli from "./src/auth/cli.ts";
10
10
  export * as authOptions from "./src/auth/options.ts";
11
11
  export * as bootstrap from "./src/bootstrap.ts";
12
+ export * as brandCli from "./src/brand/cli.ts";
13
+ export * as brandExport from "./src/brand/export.ts";
14
+ export * as brandOptions from "./src/brand/options.ts";
15
+ export * as brandRun from "./src/brand/run.ts";
12
16
  export * as bun from "./src/bun.ts";
13
17
  export * as cli from "./src/cli.ts";
14
18
  export * as genieCodeCli from "./src/genie-code/cli.ts";
@@ -35,6 +39,11 @@ export { EnvExportFormatSchema, EnvCommandOptionsSchema } from "./src/appkit/env
35
39
  export type { EnvExportFormat, EnvCommandOptions } from "./src/appkit/env-export.ts";
36
40
  export { AuthCliOptionsSchema, TokenCommandOptionsSchema } from "./src/auth/options.ts";
37
41
  export type { AuthCliOptions, TokenCommandOptions } from "./src/auth/options.ts";
42
+ export type { BrandCliDependencies } from "./src/brand/cli.ts";
43
+ export type { WriteBrandPackageOptions, WrittenBrandPackage } from "./src/brand/export.ts";
44
+ export { BrandExportOptionsSchema } from "./src/brand/options.ts";
45
+ export type { BrandExportOptions } from "./src/brand/options.ts";
46
+ export type { BrandExportCallbacks } from "./src/brand/run.ts";
38
47
  export { resolveBunArgv } from "./src/bun.ts";
39
48
  export type { GenieCodeCliDependencies } from "./src/genie-code/cli.ts";
40
49
  export { GENIE_CODE_GATEWAY_PROVIDER } from "./src/genie-code/config.ts";
package/lib/index.d.ts CHANGED
@@ -1,10 +1,14 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli";
2
- export declare const PACKAGE_VERSION = "0.9.132";
2
+ export declare const PACKAGE_VERSION = "0.9.136";
3
3
  export * as appkitCli from "./src/appkit/cli.ts";
4
4
  export * as appkitEnvExport from "./src/appkit/env-export.ts";
5
5
  export * as authCli from "./src/auth/cli.ts";
6
6
  export * as authOptions from "./src/auth/options.ts";
7
7
  export * as bootstrap from "./src/bootstrap.ts";
8
+ export * as brandCli from "./src/brand/cli.ts";
9
+ export * as brandExport from "./src/brand/export.ts";
10
+ export * as brandOptions from "./src/brand/options.ts";
11
+ export * as brandRun from "./src/brand/run.ts";
8
12
  export * as bun from "./src/bun.ts";
9
13
  export * as cli from "./src/cli.ts";
10
14
  export * as genieCodeCli from "./src/genie-code/cli.ts";
@@ -31,6 +35,11 @@ export { EnvExportFormatSchema, EnvCommandOptionsSchema } from "./src/appkit/env
31
35
  export type { EnvExportFormat, EnvCommandOptions } from "./src/appkit/env-export.ts";
32
36
  export { AuthCliOptionsSchema, TokenCommandOptionsSchema } from "./src/auth/options.ts";
33
37
  export type { AuthCliOptions, TokenCommandOptions } from "./src/auth/options.ts";
38
+ export type { BrandCliDependencies } from "./src/brand/cli.ts";
39
+ export type { WriteBrandPackageOptions, WrittenBrandPackage } from "./src/brand/export.ts";
40
+ export { BrandExportOptionsSchema } from "./src/brand/options.ts";
41
+ export type { BrandExportOptions } from "./src/brand/options.ts";
42
+ export type { BrandExportCallbacks } from "./src/brand/run.ts";
34
43
  export { resolveBunArgv } from "./src/bun.ts";
35
44
  export type { GenieCodeCliDependencies } from "./src/genie-code/cli.ts";
36
45
  export { GENIE_CODE_GATEWAY_PROVIDER } from "./src/genie-code/config.ts";
package/lib/index.js CHANGED
@@ -2,12 +2,16 @@
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/cli";
5
- export const PACKAGE_VERSION = "0.9.132";
5
+ export const PACKAGE_VERSION = "0.9.136";
6
6
  export * as appkitCli from "./src/appkit/cli.js";
7
7
  export * as appkitEnvExport from "./src/appkit/env-export.js";
8
8
  export * as authCli from "./src/auth/cli.js";
9
9
  export * as authOptions from "./src/auth/options.js";
10
10
  export * as bootstrap from "./src/bootstrap.js";
11
+ export * as brandCli from "./src/brand/cli.js";
12
+ export * as brandExport from "./src/brand/export.js";
13
+ export * as brandOptions from "./src/brand/options.js";
14
+ export * as brandRun from "./src/brand/run.js";
11
15
  export * as bun from "./src/bun.js";
12
16
  export * as cli from "./src/cli.js";
13
17
  export * as genieCodeCli from "./src/genie-code/cli.js";
@@ -32,6 +36,7 @@ export * as tunnelOptions from "./src/tunnel/options.js";
32
36
  export * as tunnelProxy from "./src/tunnel/proxy.js";
33
37
  export { EnvExportFormatSchema, EnvCommandOptionsSchema } from "./src/appkit/env-export.js";
34
38
  export { AuthCliOptionsSchema, TokenCommandOptionsSchema } from "./src/auth/options.js";
39
+ export { BrandExportOptionsSchema } from "./src/brand/options.js";
35
40
  export { resolveBunArgv } from "./src/bun.js";
36
41
  export { GENIE_CODE_GATEWAY_PROVIDER } from "./src/genie-code/config.js";
37
42
  export { RUNNER_OPTIONS_ENV } from "./src/genie-code/runner.js";
@@ -42,4 +47,4 @@ export { SSL_REQUEST, CANCEL_REQUEST, PROTOCOL_3, PostgresProtocolError } from "
42
47
  export { LakebaseProxy } from "./src/lakebase-proxy/proxy.js";
43
48
  export { workspaceRoot } from "./src/root.js";
44
49
  export { TunnelOptionsSchema } from "./src/tunnel/options.js";
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLGVBQWUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssWUFBWSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxlQUFlLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxlQUFlLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxLQUFLLHlCQUF5QixNQUFNLHNDQUFzQyxDQUFDO0FBQ2xGLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssb0JBQW9CLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxLQUFLLHFCQUFxQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sS0FBSyxrQkFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLGFBQWEsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLDZCQUE2QixFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDhCQUE4QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFM1AsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NsaVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzMlwiO1xuZXhwb3J0ICogYXMgYXBwa2l0Q2xpIGZyb20gXCIuL3NyYy9hcHBraXQvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyBhcHBraXRFbnZFeHBvcnQgZnJvbSBcIi4vc3JjL2FwcGtpdC9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgKiBhcyBhdXRoQ2xpIGZyb20gXCIuL3NyYy9hdXRoL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgYXV0aE9wdGlvbnMgZnJvbSBcIi4vc3JjL2F1dGgvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgYm9vdHN0cmFwIGZyb20gXCIuL3NyYy9ib290c3RyYXAudHNcIjtcbmV4cG9ydCAqIGFzIGJ1biBmcm9tIFwiLi9zcmMvYnVuLnRzXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlQ2xpIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlQ29uZmlnIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NvbmZpZy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlSW5zdGFsbCBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9pbnN0YWxsLnRzXCI7XG5leHBvcnQgKiBhcyBnZW5pZUNvZGVPcHRpb25zIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL29wdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZVJ1bm5lciBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9ydW5uZXIudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZVJ1bnRpbWUgZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvcnVudGltZS50c1wiO1xuZXhwb3J0ICogYXMgZ3JhcGhpdGlDbGkgZnJvbSBcIi4vc3JjL2dyYXBoaXRpL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ3JhcGhpdGlPcHRpb25zIGZyb20gXCIuL3NyYy9ncmFwaGl0aS9vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZVByb3h5Q2FuY2VsbGF0aW9uIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jYW5jZWxsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlDbGkgZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L2NsaS50c1wiO1xuZXhwb3J0ICogYXMgbGFrZWJhc2VQcm94eU9wdGlvbnMgZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L29wdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlQcm90b2NvbCBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJvdG9jb2wudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlQcm94eSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJveHkudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsR2F0ZXdheUNsaSBmcm9tIFwiLi9zcmMvbW9kZWwtZ2F0ZXdheS9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsR2F0ZXdheVNlcnZlciBmcm9tIFwiLi9zcmMvbW9kZWwtZ2F0ZXdheS9zZXJ2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvb3QgZnJvbSBcIi4vc3JjL3Jvb3QudHNcIjtcbmV4cG9ydCAqIGFzIHR1bm5lbEFwcCBmcm9tIFwiLi9zcmMvdHVubmVsL2FwcC50c1wiO1xuZXhwb3J0ICogYXMgdHVubmVsQ2xpIGZyb20gXCIuL3NyYy90dW5uZWwvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyB0dW5uZWxPcHRpb25zIGZyb20gXCIuL3NyYy90dW5uZWwvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgdHVubmVsUHJveHkgZnJvbSBcIi4vc3JjL3R1bm5lbC9wcm94eS50c1wiO1xuZXhwb3J0IHsgRW52RXhwb3J0Rm9ybWF0U2NoZW1hLCBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9hcHBraXQvZW52LWV4cG9ydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbnZFeHBvcnRGb3JtYXQsIEVudkNvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2FwcGtpdC9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgeyBBdXRoQ2xpT3B0aW9uc1NjaGVtYSwgVG9rZW5Db21tYW5kT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9hdXRoL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXV0aENsaU9wdGlvbnMsIFRva2VuQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvYXV0aC9vcHRpb25zLnRzXCI7XG5leHBvcnQgeyByZXNvbHZlQnVuQXJndiB9IGZyb20gXCIuL3NyYy9idW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVDb2RlQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvY2xpLnRzXCI7XG5leHBvcnQgeyBHRU5JRV9DT0RFX0dBVEVXQVlfUFJPVklERVIgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgV3JpdGVHZW5pZUNvZGVDb25maWdPcHRpb25zLCBHZW5pZUNvZGVQcm9maWxlSG9tZSwgR2VuaWVDb2RlSG9tZSB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBJbnN0YWxsR2VuaWVDb2RlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2luc3RhbGwudHNcIjtcbmV4cG9ydCB7IFJVTk5FUl9PUFRJT05TX0VOViB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL3J1bm5lci50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUNvZGVSdW50aW1lRGVwZW5kZW5jaWVzLCBSdW5HZW5pZUNvZGVPcHRpb25zLCBQcmVwYXJlZEdlbmllQ29kZVJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9ydW50aW1lLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdyYXBoaXRpQ2xpRGVwZW5kZW5jaWVzLCBHcmFwaGl0aVNlcnZpY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2dyYXBoaXRpL2NsaS50c1wiO1xuZXhwb3J0IHsgR1JBUEhJVElfREVGQVVMVFMsIEdyYXBoaXRpQ2xpT3B0aW9uc1NjaGVtYSwgR3JhcGhpdGlPcHRpb25zU2NoZW1hLCBSZXNvbHZlZEdyYXBoaXRpT3B0aW9uc1NjaGVtYSwgZ3JhcGhpdGlPcHRpb25PdmVycmlkZXMsIGdyYXBoaXRpT3B0aW9uc0Vudmlyb25tZW50LCBncmFwaGl0aU9wdGlvbnNGcm9tRW52aXJvbm1lbnQsIHJlc29sdmVHcmFwaGl0aU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZ3JhcGhpdGkvb3B0aW9ucy50c1wiO1xuZXhwb3J0IHR5cGUgeyBHcmFwaGl0aU9wdGlvbnMsIFJlc29sdmVkR3JhcGhpdGlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2dyYXBoaXRpL29wdGlvbnMudHNcIjtcbmV4cG9ydCB7IENhbmNlbGxhdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L2NhbmNlbGxhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBDYW5jZWxsYXRpb25UYXJnZXQsIENhbmNlbGxhdGlvbkZvcndhcmRlciB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jYW5jZWxsYXRpb24udHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJhc2VQcm94eUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jbGkudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlUHJveHlPcHRpb25zU2NoZW1hLCBMYWtlYmFzZVByb3h5VXJsT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IExha2ViYXNlUHJveHlPcHRpb25zLCBSZXNvbHZlZExha2ViYXNlUHJveHlPcHRpb25zLCBMYWtlYmFzZVByb3h5VXJsT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzXCI7XG5leHBvcnQgeyBTU0xfUkVRVUVTVCwgQ0FOQ0VMX1JFUVVFU1QsIFBST1RPQ09MXzMsIFBvc3RncmVzUHJvdG9jb2xFcnJvciB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9wcm90b2NvbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBTdGFydHVwTWVzc2FnZSwgQ2FuY2VsTWVzc2FnZSwgSW5pdGlhbE1lc3NhZ2UgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJvdG9jb2wudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlUHJveHkgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJveHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5Q2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL21vZGVsLWdhdGV3YXkvY2xpLnRzXCI7XG5leHBvcnQgeyB3b3Jrc3BhY2VSb290IH0gZnJvbSBcIi4vc3JjL3Jvb3QudHNcIjtcbmV4cG9ydCB7IFR1bm5lbE9wdGlvbnNTY2hlbWEgfSBmcm9tIFwiLi9zcmMvdHVubmVsL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgVHVubmVsT3B0aW9ucywgUmVzb2x2ZWRUdW5uZWxPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3R1bm5lbC9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy90dW5uZWwvcHJveHkudHNcIjtcbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLGVBQWUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxZQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxLQUFLLGVBQWUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxlQUFlLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEtBQUsseUJBQXlCLE1BQU0sc0NBQXNDLENBQUM7QUFDbEYsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxvQkFBb0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEtBQUsscUJBQXFCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUUsT0FBTyxLQUFLLGtCQUFrQixNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sS0FBSyxlQUFlLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLGtCQUFrQixNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssYUFBYSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJeEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU5QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsOEJBQThCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUzUCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUc1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY2xpXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTM2XCI7XG5leHBvcnQgKiBhcyBhcHBraXRDbGkgZnJvbSBcIi4vc3JjL2FwcGtpdC9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIGFwcGtpdEVudkV4cG9ydCBmcm9tIFwiLi9zcmMvYXBwa2l0L2Vudi1leHBvcnQudHNcIjtcbmV4cG9ydCAqIGFzIGF1dGhDbGkgZnJvbSBcIi4vc3JjL2F1dGgvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyBhdXRoT3B0aW9ucyBmcm9tIFwiLi9zcmMvYXV0aC9vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBib290c3RyYXAgZnJvbSBcIi4vc3JjL2Jvb3RzdHJhcC50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmRDbGkgZnJvbSBcIi4vc3JjL2JyYW5kL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmRFeHBvcnQgZnJvbSBcIi4vc3JjL2JyYW5kL2V4cG9ydC50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmRPcHRpb25zIGZyb20gXCIuL3NyYy9icmFuZC9vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBicmFuZFJ1biBmcm9tIFwiLi9zcmMvYnJhbmQvcnVuLnRzXCI7XG5leHBvcnQgKiBhcyBidW4gZnJvbSBcIi4vc3JjL2J1bi50c1wiO1xuZXhwb3J0ICogYXMgY2xpIGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZUNsaSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZUNvbmZpZyBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZUluc3RhbGwgZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvaW5zdGFsbC50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlT3B0aW9ucyBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBnZW5pZUNvZGVSdW5uZXIgZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvcnVubmVyLnRzXCI7XG5leHBvcnQgKiBhcyBnZW5pZUNvZGVSdW50aW1lIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL3J1bnRpbWUudHNcIjtcbmV4cG9ydCAqIGFzIGdyYXBoaXRpQ2xpIGZyb20gXCIuL3NyYy9ncmFwaGl0aS9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIGdyYXBoaXRpT3B0aW9ucyBmcm9tIFwiLi9zcmMvZ3JhcGhpdGkvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgbGFrZWJhc2VQcm94eUNhbmNlbGxhdGlvbiBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvY2FuY2VsbGF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZVByb3h5Q2xpIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlPcHRpb25zIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZVByb3h5UHJvdG9jb2wgZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L3Byb3RvY29sLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZVByb3h5UHJveHkgZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L3Byb3h5LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbEdhdGV3YXlDbGkgZnJvbSBcIi4vc3JjL21vZGVsLWdhdGV3YXkvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbEdhdGV3YXlTZXJ2ZXIgZnJvbSBcIi4vc3JjL21vZGVsLWdhdGV3YXkvc2VydmVyLnRzXCI7XG5leHBvcnQgKiBhcyByb290IGZyb20gXCIuL3NyYy9yb290LnRzXCI7XG5leHBvcnQgKiBhcyB0dW5uZWxBcHAgZnJvbSBcIi4vc3JjL3R1bm5lbC9hcHAudHNcIjtcbmV4cG9ydCAqIGFzIHR1bm5lbENsaSBmcm9tIFwiLi9zcmMvdHVubmVsL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgdHVubmVsT3B0aW9ucyBmcm9tIFwiLi9zcmMvdHVubmVsL29wdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIHR1bm5lbFByb3h5IGZyb20gXCIuL3NyYy90dW5uZWwvcHJveHkudHNcIjtcbmV4cG9ydCB7IEVudkV4cG9ydEZvcm1hdFNjaGVtYSwgRW52Q29tbWFuZE9wdGlvbnNTY2hlbWEgfSBmcm9tIFwiLi9zcmMvYXBwa2l0L2Vudi1leHBvcnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgRW52RXhwb3J0Rm9ybWF0LCBFbnZDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9hcHBraXQvZW52LWV4cG9ydC50c1wiO1xuZXhwb3J0IHsgQXV0aENsaU9wdGlvbnNTY2hlbWEsIFRva2VuQ29tbWFuZE9wdGlvbnNTY2hlbWEgfSBmcm9tIFwiLi9zcmMvYXV0aC9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF1dGhDbGlPcHRpb25zLCBUb2tlbkNvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2F1dGgvb3B0aW9ucy50c1wiO1xuZXhwb3J0IHR5cGUgeyBCcmFuZENsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9icmFuZC9jbGkudHNcIjtcbmV4cG9ydCB0eXBlIHsgV3JpdGVCcmFuZFBhY2thZ2VPcHRpb25zLCBXcml0dGVuQnJhbmRQYWNrYWdlIH0gZnJvbSBcIi4vc3JjL2JyYW5kL2V4cG9ydC50c1wiO1xuZXhwb3J0IHsgQnJhbmRFeHBvcnRPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2JyYW5kL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnJhbmRFeHBvcnRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2JyYW5kL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnJhbmRFeHBvcnRDYWxsYmFja3MgfSBmcm9tIFwiLi9zcmMvYnJhbmQvcnVuLnRzXCI7XG5leHBvcnQgeyByZXNvbHZlQnVuQXJndiB9IGZyb20gXCIuL3NyYy9idW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVDb2RlQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvY2xpLnRzXCI7XG5leHBvcnQgeyBHRU5JRV9DT0RFX0dBVEVXQVlfUFJPVklERVIgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgV3JpdGVHZW5pZUNvZGVDb25maWdPcHRpb25zLCBHZW5pZUNvZGVQcm9maWxlSG9tZSwgR2VuaWVDb2RlSG9tZSB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBJbnN0YWxsR2VuaWVDb2RlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2luc3RhbGwudHNcIjtcbmV4cG9ydCB7IFJVTk5FUl9PUFRJT05TX0VOViB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL3J1bm5lci50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUNvZGVSdW50aW1lRGVwZW5kZW5jaWVzLCBSdW5HZW5pZUNvZGVPcHRpb25zLCBQcmVwYXJlZEdlbmllQ29kZVJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9ydW50aW1lLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdyYXBoaXRpQ2xpRGVwZW5kZW5jaWVzLCBHcmFwaGl0aVNlcnZpY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2dyYXBoaXRpL2NsaS50c1wiO1xuZXhwb3J0IHsgR1JBUEhJVElfREVGQVVMVFMsIEdyYXBoaXRpQ2xpT3B0aW9uc1NjaGVtYSwgR3JhcGhpdGlPcHRpb25zU2NoZW1hLCBSZXNvbHZlZEdyYXBoaXRpT3B0aW9uc1NjaGVtYSwgZ3JhcGhpdGlPcHRpb25PdmVycmlkZXMsIGdyYXBoaXRpT3B0aW9uc0Vudmlyb25tZW50LCBncmFwaGl0aU9wdGlvbnNGcm9tRW52aXJvbm1lbnQsIHJlc29sdmVHcmFwaGl0aU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZ3JhcGhpdGkvb3B0aW9ucy50c1wiO1xuZXhwb3J0IHR5cGUgeyBHcmFwaGl0aU9wdGlvbnMsIFJlc29sdmVkR3JhcGhpdGlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2dyYXBoaXRpL29wdGlvbnMudHNcIjtcbmV4cG9ydCB7IENhbmNlbGxhdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L2NhbmNlbGxhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBDYW5jZWxsYXRpb25UYXJnZXQsIENhbmNlbGxhdGlvbkZvcndhcmRlciB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jYW5jZWxsYXRpb24udHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJhc2VQcm94eUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jbGkudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlUHJveHlPcHRpb25zU2NoZW1hLCBMYWtlYmFzZVByb3h5VXJsT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IExha2ViYXNlUHJveHlPcHRpb25zLCBSZXNvbHZlZExha2ViYXNlUHJveHlPcHRpb25zLCBMYWtlYmFzZVByb3h5VXJsT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzXCI7XG5leHBvcnQgeyBTU0xfUkVRVUVTVCwgQ0FOQ0VMX1JFUVVFU1QsIFBST1RPQ09MXzMsIFBvc3RncmVzUHJvdG9jb2xFcnJvciB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9wcm90b2NvbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBTdGFydHVwTWVzc2FnZSwgQ2FuY2VsTWVzc2FnZSwgSW5pdGlhbE1lc3NhZ2UgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJvdG9jb2wudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlUHJveHkgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJveHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5Q2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL21vZGVsLWdhdGV3YXkvY2xpLnRzXCI7XG5leHBvcnQgeyB3b3Jrc3BhY2VSb290IH0gZnJvbSBcIi4vc3JjL3Jvb3QudHNcIjtcbmV4cG9ydCB7IFR1bm5lbE9wdGlvbnNTY2hlbWEgfSBmcm9tIFwiLi9zcmMvdHVubmVsL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgVHVubmVsT3B0aW9ucywgUmVzb2x2ZWRUdW5uZWxPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3R1bm5lbC9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy90dW5uZWwvcHJveHkudHNcIjtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `dbx brand` researched brand-package export.
3
+ *
4
+ * @module
5
+ */
6
+ import { Command } from "commander";
7
+ import { exportBrandFromPrompt } from "./run.ts";
8
+ /** Replaceable command boundaries used by tests and embedders. */
9
+ export interface BrandCliDependencies {
10
+ readonly exportBrandFromPrompt?: typeof exportBrandFromPrompt;
11
+ readonly writeProgress?: (value: string) => void;
12
+ readonly writeResult?: (value: unknown) => void;
13
+ }
14
+ /** Build the lazily loaded `dbx brand` command. */
15
+ export declare function buildProgram(name?: string, dependencies?: BrandCliDependencies): Command;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `dbx brand` researched brand-package export.
3
+ *
4
+ * @module
5
+ */
6
+ import { addArgs, parseArgs } from "@dbx-tools/cli-args";
7
+ import { Command } from "commander";
8
+ import { BrandExportOptionsSchema } from "./options.js";
9
+ import { exportBrandFromPrompt } from "./run.js";
10
+ /** Build the lazily loaded `dbx brand` command. */
11
+ export function buildProgram(name = "dbx brand", dependencies = {}) {
12
+ const runExport = dependencies.exportBrandFromPrompt ?? exportBrandFromPrompt;
13
+ const writeProgress = dependencies.writeProgress ?? ((value) => process.stderr.write(`${value}\n`));
14
+ const writeResult = dependencies.writeResult ??
15
+ ((value) => process.stdout.write(`${JSON.stringify(value, null, 2)}\n`));
16
+ const program = addArgs(new Command()
17
+ .name(name)
18
+ .description("Research a brand brief and export brand.yaml with web and mobile visual references"), BrandExportOptionsSchema);
19
+ program
20
+ .argument("<prompt>", "brand, company, product, or design brief to research")
21
+ .action(async (prompt) => {
22
+ const options = parseArgs(program, BrandExportOptionsSchema);
23
+ const result = await runExport(prompt, options, {
24
+ onProgress(event) {
25
+ writeProgress(`[${event.stage}] ${event.message}`);
26
+ },
27
+ });
28
+ writeResult({
29
+ brand: result.brandYamlPath,
30
+ manifest: result.manifestPath,
31
+ references: result.referenceCount,
32
+ });
33
+ });
34
+ return program;
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JyYW5kL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFTakQsbURBQW1EO0FBQ25ELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRSxlQUFxQyxFQUFFO0lBQ3RGLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQztJQUM5RSxNQUFNLGFBQWEsR0FDakIsWUFBWSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RixNQUFNLFdBQVcsR0FDZixZQUFZLENBQUMsV0FBVztRQUN4QixDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ3JCLElBQUksT0FBTyxFQUFFO1NBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLFdBQVcsQ0FDVixvRkFBb0YsQ0FDckYsRUFDSCx3QkFBd0IsQ0FDekIsQ0FBQztJQUNGLE9BQU87U0FDSixRQUFRLENBQUMsVUFBVSxFQUFFLHNEQUFzRCxDQUFDO1NBQzVFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBYyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDOUMsVUFBVSxDQUFDLEtBQUs7Z0JBQ2QsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNyRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDO1lBQ1YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsWUFBWTtZQUM3QixVQUFVLEVBQUUsTUFBTSxDQUFDLGNBQWM7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgZGJ4IGJyYW5kYCByZXNlYXJjaGVkIGJyYW5kLXBhY2thZ2UgZXhwb3J0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBhZGRBcmdzLCBwYXJzZUFyZ3MgfSBmcm9tIFwiQGRieC10b29scy9jbGktYXJnc1wiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcblxuaW1wb3J0IHsgQnJhbmRFeHBvcnRPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vb3B0aW9ucy50c1wiO1xuaW1wb3J0IHsgZXhwb3J0QnJhbmRGcm9tUHJvbXB0IH0gZnJvbSBcIi4vcnVuLnRzXCI7XG5cbi8qKiBSZXBsYWNlYWJsZSBjb21tYW5kIGJvdW5kYXJpZXMgdXNlZCBieSB0ZXN0cyBhbmQgZW1iZWRkZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmFuZENsaURlcGVuZGVuY2llcyB7XG4gIHJlYWRvbmx5IGV4cG9ydEJyYW5kRnJvbVByb21wdD86IHR5cGVvZiBleHBvcnRCcmFuZEZyb21Qcm9tcHQ7XG4gIHJlYWRvbmx5IHdyaXRlUHJvZ3Jlc3M/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcmVhZG9ubHkgd3JpdGVSZXN1bHQ/OiAodmFsdWU6IHVua25vd24pID0+IHZvaWQ7XG59XG5cbi8qKiBCdWlsZCB0aGUgbGF6aWx5IGxvYWRlZCBgZGJ4IGJyYW5kYCBjb21tYW5kLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShuYW1lID0gXCJkYnggYnJhbmRcIiwgZGVwZW5kZW5jaWVzOiBCcmFuZENsaURlcGVuZGVuY2llcyA9IHt9KTogQ29tbWFuZCB7XG4gIGNvbnN0IHJ1bkV4cG9ydCA9IGRlcGVuZGVuY2llcy5leHBvcnRCcmFuZEZyb21Qcm9tcHQgPz8gZXhwb3J0QnJhbmRGcm9tUHJvbXB0O1xuICBjb25zdCB3cml0ZVByb2dyZXNzID1cbiAgICBkZXBlbmRlbmNpZXMud3JpdGVQcm9ncmVzcyA/PyAoKHZhbHVlOiBzdHJpbmcpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke3ZhbHVlfVxcbmApKTtcbiAgY29uc3Qgd3JpdGVSZXN1bHQgPVxuICAgIGRlcGVuZGVuY2llcy53cml0ZVJlc3VsdCA/P1xuICAgICgodmFsdWU6IHVua25vd24pID0+IHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1cXG5gKSk7XG4gIGNvbnN0IHByb2dyYW0gPSBhZGRBcmdzKFxuICAgIG5ldyBDb21tYW5kKClcbiAgICAgIC5uYW1lKG5hbWUpXG4gICAgICAuZGVzY3JpcHRpb24oXG4gICAgICAgIFwiUmVzZWFyY2ggYSBicmFuZCBicmllZiBhbmQgZXhwb3J0IGJyYW5kLnlhbWwgd2l0aCB3ZWIgYW5kIG1vYmlsZSB2aXN1YWwgcmVmZXJlbmNlc1wiLFxuICAgICAgKSxcbiAgICBCcmFuZEV4cG9ydE9wdGlvbnNTY2hlbWEsXG4gICk7XG4gIHByb2dyYW1cbiAgICAuYXJndW1lbnQoXCI8cHJvbXB0PlwiLCBcImJyYW5kLCBjb21wYW55LCBwcm9kdWN0LCBvciBkZXNpZ24gYnJpZWYgdG8gcmVzZWFyY2hcIilcbiAgICAuYWN0aW9uKGFzeW5jIChwcm9tcHQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJncyhwcm9ncmFtLCBCcmFuZEV4cG9ydE9wdGlvbnNTY2hlbWEpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRXhwb3J0KHByb21wdCwgb3B0aW9ucywge1xuICAgICAgICBvblByb2dyZXNzKGV2ZW50KSB7XG4gICAgICAgICAgd3JpdGVQcm9ncmVzcyhgWyR7ZXZlbnQuc3RhZ2V9XSAke2V2ZW50Lm1lc3NhZ2V9YCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHdyaXRlUmVzdWx0KHtcbiAgICAgICAgYnJhbmQ6IHJlc3VsdC5icmFuZFlhbWxQYXRoLFxuICAgICAgICBtYW5pZmVzdDogcmVzdWx0Lm1hbmlmZXN0UGF0aCxcbiAgICAgICAgcmVmZXJlbmNlczogcmVzdWx0LnJlZmVyZW5jZUNvdW50LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIHJldHVybiBwcm9ncmFtO1xufVxuIl19
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Brand package filesystem export.
3
+ *
4
+ * @module
5
+ */
6
+ import type { BrandResearch } from "@dbx-tools/appkit-generator";
7
+ import type { BrandPackage } from "@dbx-tools/shared-generator";
8
+ /** Inputs required to write a generated brand package. */
9
+ export interface WriteBrandPackageOptions {
10
+ readonly outputDirectory: string;
11
+ readonly prompt: string;
12
+ readonly brandPackage: BrandPackage;
13
+ readonly research: BrandResearch;
14
+ readonly force?: boolean;
15
+ }
16
+ /** Files written for a generated brand package. */
17
+ export interface WrittenBrandPackage {
18
+ readonly outputDirectory: string;
19
+ readonly brandYamlPath: string;
20
+ readonly manifestPath: string;
21
+ readonly referenceCount: number;
22
+ }
23
+ /**
24
+ * Write a normal `brand.yaml` plus research provenance and downloaded visual
25
+ * references.
26
+ */
27
+ export declare function writeBrandPackage(options: WriteBrandPackageOptions): Promise<WrittenBrandPackage>;
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Brand package filesystem export.
3
+ *
4
+ * @module
5
+ */
6
+ import { access, mkdir, rename, rm, writeFile } from "node:fs/promises";
7
+ import path from "node:path";
8
+ import { BrandPackageSchema } from "@dbx-tools/shared-generator";
9
+ import { stringify } from "yaml";
10
+ function imageExtension(contentType) {
11
+ if (!contentType)
12
+ return ".img";
13
+ const normalized = contentType.split(";", 1)[0].trim().toLowerCase();
14
+ switch (normalized) {
15
+ case "image/avif":
16
+ return ".avif";
17
+ case "image/gif":
18
+ return ".gif";
19
+ case "image/jpeg":
20
+ return ".jpg";
21
+ case "image/png":
22
+ return ".png";
23
+ case "image/svg+xml":
24
+ return ".svg";
25
+ case "image/webp":
26
+ return ".webp";
27
+ default:
28
+ return ".img";
29
+ }
30
+ }
31
+ function fileSlug(value) {
32
+ return (value
33
+ .normalize("NFKD")
34
+ .replace(/[\u0300-\u036f]/g, "")
35
+ .toLowerCase()
36
+ .replace(/[^a-z0-9]+/g, "-")
37
+ .replace(/^-+|-+$/g, "")
38
+ .slice(0, 60) || "reference");
39
+ }
40
+ async function writeAtomic(filePath, content) {
41
+ await mkdir(path.dirname(filePath), { recursive: true });
42
+ const temporaryPath = `${filePath}.${process.pid}.${crypto.randomUUID()}.tmp`;
43
+ await writeFile(temporaryPath, content);
44
+ await rename(temporaryPath, filePath);
45
+ }
46
+ async function fileExists(filePath) {
47
+ try {
48
+ await access(filePath);
49
+ return true;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ /**
56
+ * Write a normal `brand.yaml` plus research provenance and downloaded visual
57
+ * references.
58
+ */
59
+ export async function writeBrandPackage(options) {
60
+ const outputDirectory = path.resolve(options.outputDirectory);
61
+ const brandYamlPath = path.join(outputDirectory, "brand.yaml");
62
+ const packageExists = await fileExists(brandYamlPath);
63
+ if (packageExists && !options.force) {
64
+ throw new Error(`Brand package already exists at ${brandYamlPath}; pass --force to replace it`);
65
+ }
66
+ if (options.force) {
67
+ await rm(path.join(outputDirectory, "references"), { recursive: true, force: true });
68
+ }
69
+ const visualReferences = structuredClone(options.brandPackage.visualReferences);
70
+ let referenceCount = 0;
71
+ for (let referenceIndex = 0; referenceIndex < options.research.visualReferences.length; referenceIndex += 1) {
72
+ const researchReference = options.research.visualReferences[referenceIndex];
73
+ const exportedReference = visualReferences[referenceIndex];
74
+ if (!exportedReference)
75
+ continue;
76
+ for (let imageIndex = 0; imageIndex < researchReference.images.length; imageIndex += 1) {
77
+ const researchImage = researchReference.images[imageIndex];
78
+ const exportedImage = exportedReference.images[imageIndex];
79
+ if (!exportedImage || !researchImage.data)
80
+ continue;
81
+ const fileName = `${fileSlug(researchReference.appName)}-${imageIndex + 1}${imageExtension(researchImage.contentType)}`;
82
+ const relativePath = path.posix.join("references", researchReference.platform, fileName);
83
+ await writeAtomic(path.join(outputDirectory, relativePath), researchImage.data);
84
+ exportedImage.localPath = `./${relativePath}`;
85
+ referenceCount += 1;
86
+ }
87
+ }
88
+ const brandPackage = BrandPackageSchema.parse({
89
+ ...options.brandPackage,
90
+ visualReferences,
91
+ });
92
+ const manifestPath = path.join(outputDirectory, "brand-package.json");
93
+ await writeAtomic(brandYamlPath, stringify(brandPackage.brand, { indent: 2 }));
94
+ await writeAtomic(manifestPath, `${JSON.stringify({
95
+ prompt: options.prompt,
96
+ generatedAt: new Date().toISOString(),
97
+ ...brandPackage,
98
+ }, null, 2)}\n`);
99
+ return {
100
+ outputDirectory,
101
+ brandYamlPath,
102
+ manifestPath,
103
+ referenceCount,
104
+ };
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JyYW5kL2V4cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFHN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQW1CakMsU0FBUyxjQUFjLENBQUMsV0FBb0I7SUFDMUMsSUFBSSxDQUFDLFdBQVc7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNoQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyRSxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssWUFBWTtZQUNmLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLEtBQUssV0FBVztZQUNkLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLEtBQUssWUFBWTtZQUNmLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLEtBQUssV0FBVztZQUNkLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLEtBQUssZUFBZTtZQUNsQixPQUFPLE1BQU0sQ0FBQztRQUNoQixLQUFLLFlBQVk7WUFDZixPQUFPLE9BQU8sQ0FBQztRQUNqQjtZQUNFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBYTtJQUM3QixPQUFPLENBQ0wsS0FBSztTQUNGLFNBQVMsQ0FBQyxNQUFNLENBQUM7U0FDakIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUs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UUFDZixhQUFhO1FBQ2IsWUFBWTtRQUNaLGNBQWM7S0FDZixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJhbmQgcGFja2FnZSBmaWxlc3lzdGVtIGV4cG9ydC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgYWNjZXNzLCBta2RpciwgcmVuYW1lLCBybSwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQnJhbmRSZXNlYXJjaCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1nZW5lcmF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQnJhbmRQYWNrYWdlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgQnJhbmRQYWNrYWdlU2NoZW1hIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSBcInlhbWxcIjtcblxuLyoqIElucHV0cyByZXF1aXJlZCB0byB3cml0ZSBhIGdlbmVyYXRlZCBicmFuZCBwYWNrYWdlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZUJyYW5kUGFja2FnZU9wdGlvbnMge1xuICByZWFkb25seSBvdXRwdXREaXJlY3Rvcnk6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvbXB0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJyYW5kUGFja2FnZTogQnJhbmRQYWNrYWdlO1xuICByZWFkb25seSByZXNlYXJjaDogQnJhbmRSZXNlYXJjaDtcbiAgcmVhZG9ubHkgZm9yY2U/OiBib29sZWFuO1xufVxuXG4vKiogRmlsZXMgd3JpdHRlbiBmb3IgYSBnZW5lcmF0ZWQgYnJhbmQgcGFja2FnZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdHRlbkJyYW5kUGFja2FnZSB7XG4gIHJlYWRvbmx5IG91dHB1dERpcmVjdG9yeTogc3RyaW5nO1xuICByZWFkb25seSBicmFuZFlhbWxQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICByZWFkb25seSByZWZlcmVuY2VDb3VudDogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBpbWFnZUV4dGVuc2lvbihjb250ZW50VHlwZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghY29udGVudFR5cGUpIHJldHVybiBcIi5pbWdcIjtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGNvbnRlbnRUeXBlLnNwbGl0KFwiO1wiLCAxKVswXS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoIChub3JtYWxpemVkKSB7XG4gICAgY2FzZSBcImltYWdlL2F2aWZcIjpcbiAgICAgIHJldHVybiBcIi5hdmlmXCI7XG4gICAgY2FzZSBcImltYWdlL2dpZlwiOlxuICAgICAgcmV0dXJuIFwiLmdpZlwiO1xuICAgIGNhc2UgXCJpbWFnZS9qcGVnXCI6XG4gICAgICByZXR1cm4gXCIuanBnXCI7XG4gICAgY2FzZSBcImltYWdlL3BuZ1wiOlxuICAgICAgcmV0dXJuIFwiLnBuZ1wiO1xuICAgIGNhc2UgXCJpbWFnZS9zdmcreG1sXCI6XG4gICAgICByZXR1cm4gXCIuc3ZnXCI7XG4gICAgY2FzZSBcImltYWdlL3dlYnBcIjpcbiAgICAgIHJldHVybiBcIi53ZWJwXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIi5pbWdcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWxlU2x1Zyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZVxuICAgICAgLm5vcm1hbGl6ZShcIk5GS0RcIilcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCBcIlwiKVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiLVwiKVxuICAgICAgLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIilcbiAgICAgIC5zbGljZSgwLCA2MCkgfHwgXCJyZWZlcmVuY2VcIlxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUF0b21pYyhmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcgfCBVaW50OEFycmF5KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG1rZGlyKHBhdGguZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCB0ZW1wb3JhcnlQYXRoID0gYCR7ZmlsZVBhdGh9LiR7cHJvY2Vzcy5waWR9LiR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0udG1wYDtcbiAgYXdhaXQgd3JpdGVGaWxlKHRlbXBvcmFyeVBhdGgsIGNvbnRlbnQpO1xuICBhd2FpdCByZW5hbWUodGVtcG9yYXJ5UGF0aCwgZmlsZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhY2Nlc3MoZmlsZVBhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZSBhIG5vcm1hbCBgYnJhbmQueWFtbGAgcGx1cyByZXNlYXJjaCBwcm92ZW5hbmNlIGFuZCBkb3dubG9hZGVkIHZpc3VhbFxuICogcmVmZXJlbmNlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlQnJhbmRQYWNrYWdlKFxuICBvcHRpb25zOiBXcml0ZUJyYW5kUGFja2FnZU9wdGlvbnMsXG4pOiBQcm9taXNlPFdyaXR0ZW5CcmFuZFBhY2thZ2U+IHtcbiAgY29uc3Qgb3V0cHV0RGlyZWN0b3J5ID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMub3V0cHV0RGlyZWN0b3J5KTtcbiAgY29uc3QgYnJhbmRZYW1sUGF0aCA9IHBhdGguam9pbihvdXRwdXREaXJlY3RvcnksIFwiYnJhbmQueWFtbFwiKTtcbiAgY29uc3QgcGFja2FnZUV4aXN0cyA9IGF3YWl0IGZpbGVFeGlzdHMoYnJhbmRZYW1sUGF0aCk7XG4gIGlmIChwYWNrYWdlRXhpc3RzICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCcmFuZCBwYWNrYWdlIGFscmVhZHkgZXhpc3RzIGF0ICR7YnJhbmRZYW1sUGF0aH07IHBhc3MgLS1mb3JjZSB0byByZXBsYWNlIGl0YCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuZm9yY2UpIHtcbiAgICBhd2FpdCBybShwYXRoLmpvaW4ob3V0cHV0RGlyZWN0b3J5LCBcInJlZmVyZW5jZXNcIiksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IHZpc3VhbFJlZmVyZW5jZXMgPSBzdHJ1Y3R1cmVkQ2xvbmUob3B0aW9ucy5icmFuZFBhY2thZ2UudmlzdWFsUmVmZXJlbmNlcyk7XG4gIGxldCByZWZlcmVuY2VDb3VudCA9IDA7XG4gIGZvciAoXG4gICAgbGV0IHJlZmVyZW5jZUluZGV4ID0gMDtcbiAgICByZWZlcmVuY2VJbmRleCA8IG9wdGlvbnMucmVzZWFyY2gudmlzdWFsUmVmZXJlbmNlcy5sZW5ndGg7XG4gICAgcmVmZXJlbmNlSW5kZXggKz0gMVxuICApIHtcbiAgICBjb25zdCByZXNlYXJjaFJlZmVyZW5jZSA9IG9wdGlvbnMucmVzZWFyY2gudmlzdWFsUmVmZXJlbmNlc1tyZWZlcmVuY2VJbmRleF07XG4gICAgY29uc3QgZXhwb3J0ZWRSZWZlcmVuY2UgPSB2aXN1YWxSZWZlcmVuY2VzW3JlZmVyZW5jZUluZGV4XTtcbiAgICBpZiAoIWV4cG9ydGVkUmVmZXJlbmNlKSBjb250aW51ZTtcbiAgICBmb3IgKGxldCBpbWFnZUluZGV4ID0gMDsgaW1hZ2VJbmRleCA8IHJlc2VhcmNoUmVmZXJlbmNlLmltYWdlcy5sZW5ndGg7IGltYWdlSW5kZXggKz0gMSkge1xuICAgICAgY29uc3QgcmVzZWFyY2hJbWFnZSA9IHJlc2VhcmNoUmVmZXJlbmNlLmltYWdlc1tpbWFnZUluZGV4XTtcbiAgICAgIGNvbnN0IGV4cG9ydGVkSW1hZ2UgPSBleHBvcnRlZFJlZmVyZW5jZS5pbWFnZXNbaW1hZ2VJbmRleF07XG4gICAgICBpZiAoIWV4cG9ydGVkSW1hZ2UgfHwgIXJlc2VhcmNoSW1hZ2UuZGF0YSkgY29udGludWU7XG4gICAgICBjb25zdCBmaWxlTmFtZSA9IGAke2ZpbGVTbHVnKHJlc2VhcmNoUmVmZXJlbmNlLmFwcE5hbWUpfS0ke2ltYWdlSW5kZXggKyAxfSR7aW1hZ2VFeHRlbnNpb24ocmVzZWFyY2hJbWFnZS5jb250ZW50VHlwZSl9YDtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucG9zaXguam9pbihcInJlZmVyZW5jZXNcIiwgcmVzZWFyY2hSZWZlcmVuY2UucGxhdGZvcm0sIGZpbGVOYW1lKTtcbiAgICAgIGF3YWl0IHdyaXRlQXRvbWljKHBhdGguam9pbihvdXRwdXREaXJlY3RvcnksIHJlbGF0aXZlUGF0aCksIHJlc2VhcmNoSW1hZ2UuZGF0YSk7XG4gICAgICBleHBvcnRlZEltYWdlLmxvY2FsUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gICAgICByZWZlcmVuY2VDb3VudCArPSAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJyYW5kUGFja2FnZSA9IEJyYW5kUGFja2FnZVNjaGVtYS5wYXJzZSh7XG4gICAgLi4ub3B0aW9ucy5icmFuZFBhY2thZ2UsXG4gICAgdmlzdWFsUmVmZXJlbmNlcyxcbiAgfSk7XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbihvdXRwdXREaXJlY3RvcnksIFwiYnJhbmQtcGFja2FnZS5qc29uXCIpO1xuICBhd2FpdCB3cml0ZUF0b21pYyhicmFuZFlhbWxQYXRoLCBzdHJpbmdpZnkoYnJhbmRQYWNrYWdlLmJyYW5kLCB7IGluZGVudDogMiB9KSk7XG4gIGF3YWl0IHdyaXRlQXRvbWljKFxuICAgIG1hbmlmZXN0UGF0aCxcbiAgICBgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgIHtcbiAgICAgICAgcHJvbXB0OiBvcHRpb25zLnByb21wdCxcbiAgICAgICAgZ2VuZXJhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgLi4uYnJhbmRQYWNrYWdlLFxuICAgICAgfSxcbiAgICAgIG51bGwsXG4gICAgICAyLFxuICAgICl9XFxuYCxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIG91dHB1dERpcmVjdG9yeSxcbiAgICBicmFuZFlhbWxQYXRoLFxuICAgIG1hbmlmZXN0UGF0aCxcbiAgICByZWZlcmVuY2VDb3VudCxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ export * as cli from "./cli.ts";
2
+ export * as exportModule from "./export.ts";
3
+ export * as options from "./options.ts";
4
+ export * as run from "./run.ts";
5
+ export type { BrandCliDependencies } from "./cli.ts";
6
+ export type { WriteBrandPackageOptions, WrittenBrandPackage } from "./export.ts";
7
+ export { BrandExportOptionsSchema } from "./options.ts";
8
+ export type { BrandExportOptions } from "./options.ts";
9
+ export type { BrandExportCallbacks } from "./run.ts";
@@ -0,0 +1,9 @@
1
+ // GENERATED by projen watch - DO NOT EDIT.
2
+ // Regenerated from the exporting modules in ./src.
3
+ // Hand edits are overwritten on the next watch; this file is read-only.
4
+ export * as cli from "./cli.js";
5
+ export * as exportModule from "./export.js";
6
+ export * as options from "./options.js";
7
+ export * as run from "./run.js";
8
+ export { BrandExportOptionsSchema } from "./options.js";
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnJhbmQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLG1EQUFtRDtBQUNuRCx3RUFBd0U7QUFFeEUsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLFlBQVksTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFHaEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0ICogYXMgY2xpIGZyb20gXCIuL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZXhwb3J0TW9kdWxlIGZyb20gXCIuL2V4cG9ydC50c1wiO1xuZXhwb3J0ICogYXMgb3B0aW9ucyBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBydW4gZnJvbSBcIi4vcnVuLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vY2xpLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdyaXRlQnJhbmRQYWNrYWdlT3B0aW9ucywgV3JpdHRlbkJyYW5kUGFja2FnZSB9IGZyb20gXCIuL2V4cG9ydC50c1wiO1xuZXhwb3J0IHsgQnJhbmRFeHBvcnRPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vb3B0aW9ucy50c1wiO1xuZXhwb3J0IHR5cGUgeyBCcmFuZEV4cG9ydE9wdGlvbnMgfSBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kRXhwb3J0Q2FsbGJhY2tzIH0gZnJvbSBcIi4vcnVuLnRzXCI7XG4iXX0=
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `dbx brand` option contracts.
3
+ *
4
+ * @module
5
+ */
6
+ import { z } from "zod";
7
+ /** Options for exporting one researched brand package. */
8
+ export declare const BrandExportOptionsSchema: z.ZodObject<{
9
+ profile: z.ZodOptional<z.ZodString>;
10
+ name: z.ZodOptional<z.ZodString>;
11
+ website: z.ZodOptional<z.ZodString>;
12
+ output: z.ZodDefault<z.ZodString>;
13
+ model: z.ZodOptional<z.ZodString>;
14
+ maxSources: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
15
+ sourceMaxLength: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
16
+ force: z.ZodDefault<z.ZodBoolean>;
17
+ }, z.core.$strict>;
18
+ /** Resolved brand export options. */
19
+ export type BrandExportOptions = z.output<typeof BrandExportOptionsSchema>;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `dbx brand` option contracts.
3
+ *
4
+ * @module
5
+ */
6
+ import { DatabricksAuthOptionsSchema } from "@dbx-tools/auth/config";
7
+ import { z } from "zod";
8
+ /** Options for exporting one researched brand package. */
9
+ export const BrandExportOptionsSchema = z
10
+ .object({
11
+ profile: DatabricksAuthOptionsSchema.shape.profile,
12
+ name: z.string().trim().min(1).optional().describe("Known canonical brand name."),
13
+ website: z.string().url().optional().describe("Known official HTTPS website."),
14
+ output: z
15
+ .string()
16
+ .trim()
17
+ .min(1)
18
+ .default("branding")
19
+ .describe("Output directory for brand.yaml, provenance, and visual references."),
20
+ model: z
21
+ .string()
22
+ .trim()
23
+ .min(1)
24
+ .optional()
25
+ .describe("Optional Databricks model preference for brand synthesis."),
26
+ maxSources: z.coerce
27
+ .number()
28
+ .int()
29
+ .min(1)
30
+ .max(8)
31
+ .default(4)
32
+ .describe("Maximum general web sources to read."),
33
+ sourceMaxLength: z.coerce
34
+ .number()
35
+ .int()
36
+ .min(1_000)
37
+ .max(20_000)
38
+ .default(8_000)
39
+ .describe("Maximum characters retained from each source page."),
40
+ force: z.boolean().default(false).describe("Replace files in an existing output directory."),
41
+ })
42
+ .strict()
43
+ .describe("Options for exporting a researched brand package.");
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9icmFuZC9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDO0tBQ3RDLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsT0FBTztJQUNsRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUM7SUFDakYsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUM7SUFDOUUsTUFBTSxFQUFFLENBQUM7U0FDTixNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUNuQixRQUFRLENBQUMscUVBQXFFLENBQUM7SUFDbEYsS0FBSyxFQUFFLENBQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLDJEQUEyRCxDQUFDO0lBQ3hFLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTTtTQUNqQixNQUFNLEVBQUU7U0FDUixHQUFHLEVBQUU7U0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNOLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDVixRQUFRLENBQUMsc0NBQXNDLENBQUM7SUFDbkQsZUFBZSxFQUFFLENBQUMsQ0FBQyxNQUFNO1NBQ3RCLE1BQU0sRUFBRTtTQUNSLEdBQUcsRUFBRTtTQUNMLEdBQUcsQ0FBQyxLQUFLLENBQUM7U0FDVixHQUFHLENBQUMsTUFBTSxDQUFDO1NBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUNkLFFBQVEsQ0FBQyxvREFBb0QsQ0FBQztJQUNqRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0RBQWdELENBQUM7Q0FDN0YsQ0FBQztLQUNELE1BQU0sRUFBRTtLQUNSLFFBQVEsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgZGJ4IGJyYW5kYCBvcHRpb24gY29udHJhY3RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBEYXRhYnJpY2tzQXV0aE9wdGlvbnNTY2hlbWEgfSBmcm9tIFwiQGRieC10b29scy9hdXRoL2NvbmZpZ1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLyoqIE9wdGlvbnMgZm9yIGV4cG9ydGluZyBvbmUgcmVzZWFyY2hlZCBicmFuZCBwYWNrYWdlLiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kRXhwb3J0T3B0aW9uc1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgcHJvZmlsZTogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLnByb2ZpbGUsXG4gICAgbmFtZTogei5zdHJpbmcoKS50cmltKCkubWluKDEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJLbm93biBjYW5vbmljYWwgYnJhbmQgbmFtZS5cIiksXG4gICAgd2Vic2l0ZTogei5zdHJpbmcoKS51cmwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiS25vd24gb2ZmaWNpYWwgSFRUUFMgd2Vic2l0ZS5cIiksXG4gICAgb3V0cHV0OiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5taW4oMSlcbiAgICAgIC5kZWZhdWx0KFwiYnJhbmRpbmdcIilcbiAgICAgIC5kZXNjcmliZShcIk91dHB1dCBkaXJlY3RvcnkgZm9yIGJyYW5kLnlhbWwsIHByb3ZlbmFuY2UsIGFuZCB2aXN1YWwgcmVmZXJlbmNlcy5cIiksXG4gICAgbW9kZWw6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLm1pbigxKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIk9wdGlvbmFsIERhdGFicmlja3MgbW9kZWwgcHJlZmVyZW5jZSBmb3IgYnJhbmQgc3ludGhlc2lzLlwiKSxcbiAgICBtYXhTb3VyY2VzOiB6LmNvZXJjZVxuICAgICAgLm51bWJlcigpXG4gICAgICAuaW50KClcbiAgICAgIC5taW4oMSlcbiAgICAgIC5tYXgoOClcbiAgICAgIC5kZWZhdWx0KDQpXG4gICAgICAuZGVzY3JpYmUoXCJNYXhpbXVtIGdlbmVyYWwgd2ViIHNvdXJjZXMgdG8gcmVhZC5cIiksXG4gICAgc291cmNlTWF4TGVuZ3RoOiB6LmNvZXJjZVxuICAgICAgLm51bWJlcigpXG4gICAgICAuaW50KClcbiAgICAgIC5taW4oMV8wMDApXG4gICAgICAubWF4KDIwXzAwMClcbiAgICAgIC5kZWZhdWx0KDhfMDAwKVxuICAgICAgLmRlc2NyaWJlKFwiTWF4aW11bSBjaGFyYWN0ZXJzIHJldGFpbmVkIGZyb20gZWFjaCBzb3VyY2UgcGFnZS5cIiksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLmRlc2NyaWJlKFwiUmVwbGFjZSBmaWxlcyBpbiBhbiBleGlzdGluZyBvdXRwdXQgZGlyZWN0b3J5LlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIk9wdGlvbnMgZm9yIGV4cG9ydGluZyBhIHJlc2VhcmNoZWQgYnJhbmQgcGFja2FnZS5cIik7XG5cbi8qKiBSZXNvbHZlZCBicmFuZCBleHBvcnQgb3B0aW9ucy4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kRXhwb3J0T3B0aW9ucyA9IHoub3V0cHV0PHR5cGVvZiBCcmFuZEV4cG9ydE9wdGlvbnNTY2hlbWE+O1xuIl19
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Standalone researched brand generation for the consolidated CLI.
3
+ *
4
+ * @module
5
+ */
6
+ import type { BrandGenerationProgressEvent } from "@dbx-tools/shared-generator";
7
+ import { type WrittenBrandPackage } from "./export.ts";
8
+ import type { BrandExportOptions } from "./options.ts";
9
+ /** Optional observers for one CLI brand generation run. */
10
+ export interface BrandExportCallbacks {
11
+ readonly onProgress?: (event: BrandGenerationProgressEvent) => void | Promise<void>;
12
+ }
13
+ /**
14
+ * Research a freeform brand brief, synthesize a portable context, and export
15
+ * the package to disk.
16
+ */
17
+ export declare function exportBrandFromPrompt(prompt: string, options: BrandExportOptions, callbacks?: BrandExportCallbacks): Promise<WrittenBrandPackage>;