@dbx-tools/cli 0.9.131 → 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
@@ -1,10 +1,10 @@
1
1
  # @dbx-tools/cli
2
2
 
3
- Use one CLI to authenticate with Databricks, connect local PostgreSQL tools to
4
- Lakebase, serve Databricks models to coding agents, run graph memory, and share
5
- applications through a gated public URL.
3
+ Use `dbx` to authenticate with Databricks, connect local PostgreSQL tools to
4
+ Lakebase, expose workspace models to local clients, run graph memory, and share
5
+ an application through an access-controlled public URL.
6
6
 
7
- ## Install And Connect
7
+ ## Install and connect
8
8
 
9
9
  ```sh
10
10
  bun add --global @dbx-tools/cli
@@ -12,21 +12,62 @@ bun add --global @dbx-tools/cli
12
12
 
13
13
  `dbx-tools` is an alias for `dbx`. Authentication and a configured Databricks
14
14
  profile are resolved automatically. Pass `--profile` only to override that
15
- selection; examples that use `MY-PROFILE` show the explicit form.
15
+ selection. Examples that use `MY-PROFILE` show the explicit form.
16
16
 
17
- ## Serve Models To Local Tools
17
+ ## Export a brand package
18
18
 
19
19
  ```sh
20
- dbx model-gateway --profile MY-PROFILE --port 4000
20
+ dbx brand "A neighborhood coffee company for morning commuters"
21
21
  ```
22
22
 
23
- Point an OpenAI-compatible client at `http://127.0.0.1:4000/v1`. The generated
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
+
45
+ ## Serve models to local tools
46
+
47
+ ```sh
48
+ dbx model-gateway --profile MY-PROFILE --listen tcp://127.0.0.1:4000
49
+ ```
50
+
51
+ Point an OpenAI-compatible client at
52
+ [http://127.0.0.1:4000/v1](http://127.0.0.1:4000/v1). The generated
24
53
  command reference includes all gateway and desktop-service options.
25
54
 
26
55
  Requests may omit `model` to select the best available chat endpoint. Set a
27
56
  gateway default with `--model` or `--model-class`, or select a class per request
28
57
  with the `x-dbx-tools-model-class` header.
29
58
 
59
+ Run the gateway in the foreground for one terminal session. Install its
60
+ current-user service when local tools need the endpoint after the terminal
61
+ closes:
62
+
63
+ ```sh
64
+ dbx model-gateway service install
65
+ dbx model-gateway service status
66
+ ```
67
+
68
+ Embed [@dbx-tools/appkit-model-gateway](../../node/appkit-model-gateway)
69
+ instead when the gateway belongs inside an AppKit application.
70
+
30
71
  ## Run Genie Code
31
72
 
32
73
  `dbx genie` runs the Databricks Genie Code CLI with dbx-tools model discovery,
@@ -84,16 +125,16 @@ dbx genie --model claude -- exec --ephemeral "Review this repository."
84
125
  Use `--` only when a wrapper option such as `--model` must be sent to Genie
85
126
  instead of being consumed by `dbx genie`.
86
127
 
87
- ## Connect To Lakebase
128
+ ## Connect to Lakebase
88
129
 
89
130
  ```sh
90
- dbx lakebase-proxy --profile MY-PROFILE --port 5432
131
+ dbx lakebase-proxy --profile MY-PROFILE --listen tcp://127.0.0.1:5432
91
132
  ```
92
133
 
93
134
  Connect your PostgreSQL client to the loopback listener. The command reference
94
135
  includes target selection, connection URLs, and service commands.
95
136
 
96
- ## Add Memory Or Share An App
137
+ ## Add memory or share an app
97
138
 
98
139
  ```sh
99
140
  dbx graphiti --profile MY-PROFILE
@@ -103,7 +144,7 @@ dbx tunnel --allow example.com -- bun src/server.ts
103
144
  `graphiti` provides graph memory for agents. `tunnel` adds a public URL with
104
145
  passwordless access to an existing process.
105
146
 
106
- ## Export AppKit Configuration
147
+ ## Export AppKit configuration
107
148
 
108
149
  ```sh
109
150
  eval "$(dbx appkit env --quiet)"
@@ -112,7 +153,7 @@ eval "$(dbx appkit env --quiet)"
112
153
  Use the resolved AppKit environment before starting another process. The AppKit
113
154
  and authentication command groups below include JSON, Windows, and token options.
114
155
 
115
- ## Bootstrap A Workspace
156
+ ## Bootstrap a workspace
116
157
 
117
158
  ```sh
118
159
  dbx dev sync
@@ -130,18 +171,18 @@ bun run sync -- --watch
130
171
  bun run barrels
131
172
  ```
132
173
 
133
- See [`@dbx-tools/projen`](../../../../projen) for workspace configuration and
174
+ See [@dbx-tools/projen](../../../../projen) for workspace configuration and
134
175
  generation. Command implementations are available from `@dbx-tools/cli/appkit`,
135
- `/auth`, `/genie`, `/graphiti`, `/lakebase-proxy`, `/model-gateway`, and
136
- `/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.
137
178
 
138
179
  <!-- cli-reference:start -->
139
180
 
140
- ## Command Reference
181
+ ## Command reference
141
182
 
142
183
  ### `dbx`
143
184
 
144
- 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
145
186
 
146
187
  ```sh
147
188
  dbx [command]
@@ -149,16 +190,17 @@ dbx [command]
149
190
 
150
191
  #### Commands
151
192
 
152
- | Command | Description |
153
- | -------------------------------- | ----------------------------------------------------------------------- |
154
- | `dev [projenArgs...]` | Bootstrap or repair a dbx-tools workspace, then forward to projen |
155
- | `appkit` | AppKit helpers: resolve the environment an AppKit app would start with. |
156
- | `auth [options]` | Authenticate to Databricks with user or machine OAuth |
157
- | `tunnel [options] [command...]` | Front a command with a public tunnel and passwordless auth |
158
- | `lakebase-proxy [options]` | Run a loopback PostgreSQL proxy for Databricks Lakebase |
159
- | `model-gateway [options]` | Run or manage the AppKit Databricks model gateway |
160
- | `genie [options] [genieArgs...]` | Run Genie Code through an authenticated local Databricks model gateway |
161
- | `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 |
162
204
 
163
205
  ### `dbx dev`
164
206
 
@@ -170,9 +212,9 @@ dbx dev [projenArgs...]
170
212
 
171
213
  #### Arguments
172
214
 
173
- | Argument | Description |
174
- | ------------ | --------------------------------------------- |
175
- | `projenArgs` | projen task and arguments (e.g. sync --watch) |
215
+ | Argument | Description |
216
+ | ------------ | --------------------------------------------------- |
217
+ | `projenArgs` | Projen task and arguments, for example sync --watch |
176
218
 
177
219
  ### `dbx appkit`
178
220
 
@@ -294,6 +336,34 @@ Show the resolved authentication client configuration
294
336
  dbx auth status
295
337
  ```
296
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
+
297
367
  ### `dbx tunnel`
298
368
 
299
369
  Front a command with a public tunnel and passwordless auth
@@ -320,6 +390,7 @@ dbx tunnel [options] [command] [command...]
320
390
  | `--allow <value>` | Email allow-list patterns. (env: TUNNEL_AUTH_ALLOW) |
321
391
  | `--subject <value>` | Verification email subject. (env: TUNNEL_AUTH_SUBJECT) |
322
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) |
323
394
  | `-m, --message <value>` | Verification email message. (env: TUNNEL_AUTH_MESSAGE) |
324
395
  | `--session-ttl-seconds <value>` | Session lifetime in seconds. (env: TUNNEL_AUTH_SESSION_TTL) |
325
396
  | `-c, --code-ttl-seconds <value>` | One-time-code lifetime in seconds. (env: TUNNEL_AUTH_CODE_TTL) |
@@ -372,6 +443,7 @@ dbx tunnel run [options] <command...>
372
443
  | `--allow <value>` | Email allow-list patterns. (env: TUNNEL_AUTH_ALLOW) |
373
444
  | `--subject <value>` | Verification email subject. (env: TUNNEL_AUTH_SUBJECT) |
374
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) |
375
447
  | `-m, --message <value>` | Verification email message. (env: TUNNEL_AUTH_MESSAGE) |
376
448
  | `--session-ttl-seconds <value>` | Session lifetime in seconds. (env: TUNNEL_AUTH_SESSION_TTL) |
377
449
  | `-c, --code-ttl-seconds <value>` | One-time-code lifetime in seconds. (env: TUNNEL_AUTH_CODE_TTL) |
@@ -410,6 +482,7 @@ dbx tunnel status [options]
410
482
  | `--allow <value>` | Email allow-list patterns. (env: TUNNEL_AUTH_ALLOW) |
411
483
  | `--subject <value>` | Verification email subject. (env: TUNNEL_AUTH_SUBJECT) |
412
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) |
413
486
  | `-m, --message <value>` | Verification email message. (env: TUNNEL_AUTH_MESSAGE) |
414
487
  | `--session-ttl-seconds <value>` | Session lifetime in seconds. (env: TUNNEL_AUTH_SESSION_TTL) |
415
488
  | `-c, --code-ttl-seconds <value>` | One-time-code lifetime in seconds. (env: TUNNEL_AUTH_CODE_TTL) |
@@ -705,9 +778,9 @@ dbx genie [options] [genieArgs...]
705
778
 
706
779
  #### Arguments
707
780
 
708
- | Argument | Description |
709
- | ----------- | --------------------------------------------------------------------------------------------- |
710
- | `genieArgs` | arguments and unknown flags forwarded to Genie Code; wrapper options may be separated with -- |
781
+ | Argument | Description |
782
+ | ----------- | ------------------------------------------------------------------------------------- |
783
+ | `genieArgs` | Arguments and unknown flags forwarded to Genie Code. Separate wrapper options with -- |
711
784
 
712
785
  #### Options
713
786
 
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.131";
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.131";
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.131";
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLGVBQWUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssWUFBWSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxlQUFlLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxlQUFlLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxLQUFLLHlCQUF5QixNQUFNLHNDQUFzQyxDQUFDO0FBQ2xGLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssb0JBQW9CLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxLQUFLLHFCQUFxQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sS0FBSyxrQkFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLGFBQWEsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLDZCQUE2QixFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDhCQUE4QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFM1AsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NsaVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzMVwiO1xuZXhwb3J0ICogYXMgYXBwa2l0Q2xpIGZyb20gXCIuL3NyYy9hcHBraXQvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyBhcHBraXRFbnZFeHBvcnQgZnJvbSBcIi4vc3JjL2FwcGtpdC9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgKiBhcyBhdXRoQ2xpIGZyb20gXCIuL3NyYy9hdXRoL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgYXV0aE9wdGlvbnMgZnJvbSBcIi4vc3JjL2F1dGgvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgYm9vdHN0cmFwIGZyb20gXCIuL3NyYy9ib290c3RyYXAudHNcIjtcbmV4cG9ydCAqIGFzIGJ1biBmcm9tIFwiLi9zcmMvYnVuLnRzXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlQ2xpIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlQ29uZmlnIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NvbmZpZy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlSW5zdGFsbCBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9pbnN0YWxsLnRzXCI7XG5leHBvcnQgKiBhcyBnZW5pZUNvZGVPcHRpb25zIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL29wdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZVJ1bm5lciBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9ydW5uZXIudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZVJ1bnRpbWUgZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvcnVudGltZS50c1wiO1xuZXhwb3J0ICogYXMgZ3JhcGhpdGlDbGkgZnJvbSBcIi4vc3JjL2dyYXBoaXRpL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ3JhcGhpdGlPcHRpb25zIGZyb20gXCIuL3NyYy9ncmFwaGl0aS9vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZVByb3h5Q2FuY2VsbGF0aW9uIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jYW5jZWxsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlDbGkgZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L2NsaS50c1wiO1xuZXhwb3J0ICogYXMgbGFrZWJhc2VQcm94eU9wdGlvbnMgZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L29wdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlQcm90b2NvbCBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJvdG9jb2wudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlQcm94eSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJveHkudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsR2F0ZXdheUNsaSBmcm9tIFwiLi9zcmMvbW9kZWwtZ2F0ZXdheS9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsR2F0ZXdheVNlcnZlciBmcm9tIFwiLi9zcmMvbW9kZWwtZ2F0ZXdheS9zZXJ2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvb3QgZnJvbSBcIi4vc3JjL3Jvb3QudHNcIjtcbmV4cG9ydCAqIGFzIHR1bm5lbEFwcCBmcm9tIFwiLi9zcmMvdHVubmVsL2FwcC50c1wiO1xuZXhwb3J0ICogYXMgdHVubmVsQ2xpIGZyb20gXCIuL3NyYy90dW5uZWwvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyB0dW5uZWxPcHRpb25zIGZyb20gXCIuL3NyYy90dW5uZWwvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgdHVubmVsUHJveHkgZnJvbSBcIi4vc3JjL3R1bm5lbC9wcm94eS50c1wiO1xuZXhwb3J0IHsgRW52RXhwb3J0Rm9ybWF0U2NoZW1hLCBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9hcHBraXQvZW52LWV4cG9ydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbnZFeHBvcnRGb3JtYXQsIEVudkNvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2FwcGtpdC9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgeyBBdXRoQ2xpT3B0aW9uc1NjaGVtYSwgVG9rZW5Db21tYW5kT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9hdXRoL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXV0aENsaU9wdGlvbnMsIFRva2VuQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvYXV0aC9vcHRpb25zLnRzXCI7XG5leHBvcnQgeyByZXNvbHZlQnVuQXJndiB9IGZyb20gXCIuL3NyYy9idW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVDb2RlQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvY2xpLnRzXCI7XG5leHBvcnQgeyBHRU5JRV9DT0RFX0dBVEVXQVlfUFJPVklERVIgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgV3JpdGVHZW5pZUNvZGVDb25maWdPcHRpb25zLCBHZW5pZUNvZGVQcm9maWxlSG9tZSwgR2VuaWVDb2RlSG9tZSB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBJbnN0YWxsR2VuaWVDb2RlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2luc3RhbGwudHNcIjtcbmV4cG9ydCB7IFJVTk5FUl9PUFRJT05TX0VOViB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL3J1bm5lci50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUNvZGVSdW50aW1lRGVwZW5kZW5jaWVzLCBSdW5HZW5pZUNvZGVPcHRpb25zLCBQcmVwYXJlZEdlbmllQ29kZVJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9ydW50aW1lLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdyYXBoaXRpQ2xpRGVwZW5kZW5jaWVzLCBHcmFwaGl0aVNlcnZpY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2dyYXBoaXRpL2NsaS50c1wiO1xuZXhwb3J0IHsgR1JBUEhJVElfREVGQVVMVFMsIEdyYXBoaXRpQ2xpT3B0aW9uc1NjaGVtYSwgR3JhcGhpdGlPcHRpb25zU2NoZW1hLCBSZXNvbHZlZEdyYXBoaXRpT3B0aW9uc1NjaGVtYSwgZ3JhcGhpdGlPcHRpb25PdmVycmlkZXMsIGdyYXBoaXRpT3B0aW9uc0Vudmlyb25tZW50LCBncmFwaGl0aU9wdGlvbnNGcm9tRW52aXJvbm1lbnQsIHJlc29sdmVHcmFwaGl0aU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZ3JhcGhpdGkvb3B0aW9ucy50c1wiO1xuZXhwb3J0IHR5cGUgeyBHcmFwaGl0aU9wdGlvbnMsIFJlc29sdmVkR3JhcGhpdGlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2dyYXBoaXRpL29wdGlvbnMudHNcIjtcbmV4cG9ydCB7IENhbmNlbGxhdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L2NhbmNlbGxhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBDYW5jZWxsYXRpb25UYXJnZXQsIENhbmNlbGxhdGlvbkZvcndhcmRlciB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jYW5jZWxsYXRpb24udHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJhc2VQcm94eUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jbGkudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlUHJveHlPcHRpb25zU2NoZW1hLCBMYWtlYmFzZVByb3h5VXJsT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IExha2ViYXNlUHJveHlPcHRpb25zLCBSZXNvbHZlZExha2ViYXNlUHJveHlPcHRpb25zLCBMYWtlYmFzZVByb3h5VXJsT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzXCI7XG5leHBvcnQgeyBTU0xfUkVRVUVTVCwgQ0FOQ0VMX1JFUVVFU1QsIFBST1RPQ09MXzMsIFBvc3RncmVzUHJvdG9jb2xFcnJvciB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9wcm90b2NvbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBTdGFydHVwTWVzc2FnZSwgQ2FuY2VsTWVzc2FnZSwgSW5pdGlhbE1lc3NhZ2UgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJvdG9jb2wudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlUHJveHkgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJveHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5Q2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL21vZGVsLWdhdGV3YXkvY2xpLnRzXCI7XG5leHBvcnQgeyB3b3Jrc3BhY2VSb290IH0gZnJvbSBcIi4vc3JjL3Jvb3QudHNcIjtcbmV4cG9ydCB7IFR1bm5lbE9wdGlvbnNTY2hlbWEgfSBmcm9tIFwiLi9zcmMvdHVubmVsL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgVHVubmVsT3B0aW9ucywgUmVzb2x2ZWRUdW5uZWxPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3R1bm5lbC9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy90dW5uZWwvcHJveHkudHNcIjtcbiJdfQ==
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=