@dbx-tools/cli-service 0.9.40 → 0.9.43

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
@@ -26,7 +26,26 @@ await program.parseAsync(process.argv);
26
26
  `defineService` uses the owning package's name, version, and default executable.
27
27
  Use `command.binName` when the package has multiple executable entries. Set
28
28
  `command.executable` to run an existing external program instead of compiling a
29
- package entrypoint.
29
+ package entrypoint. Managed commands default `NODE_ENV` to `production`; an
30
+ explicit `command.environment.NODE_ENV` overrides it.
31
+
32
+ `command.options` accepts either a concrete option object or a Zod object
33
+ schema. Objects serialize their current values. Schemas parse `{}` and serialize
34
+ their defaults. Boolean values become positive or negated flags, arrays become
35
+ repeated flags, and `undefined` values are omitted:
36
+
37
+ ```ts
38
+ defineService(import.meta.url, {
39
+ command: {
40
+ arguments: ["serve"],
41
+ options: {
42
+ host: "127.0.0.1",
43
+ port: 4400,
44
+ telemetry: false,
45
+ },
46
+ },
47
+ });
48
+ ```
30
49
 
31
50
  ## Install And Manage The Service
32
51
 
@@ -69,69 +88,76 @@ reference uses `<cli>` as a placeholder for the consuming program's name.
69
88
 
70
89
  ### `<cli> service`
71
90
 
72
- ```text
73
- Usage: <cli> service [command]
74
-
75
91
  Install and manage the desktop service
76
92
 
77
- Commands:
78
- install [options] Install the service for the current user and start it
79
- start Start the installed service
80
- stop Stop the running service
81
- restart Restart the installed service
82
- status Print service installation and process state as JSON
83
- uninstall Stop and remove the service for the current user
93
+ ```sh
94
+ <cli> service [command]
84
95
  ```
85
96
 
86
- ### `<cli> service install`
97
+ #### Commands
87
98
 
88
- ```text
89
- Usage: <cli> service install [options]
99
+ | Command | Description |
100
+ | ------------------- | ----------------------------------------------------- |
101
+ | `install [options]` | Install the service for the current user and start it |
102
+ | `start` | Start the installed service |
103
+ | `stop` | Stop the running service |
104
+ | `restart` | Restart the installed service |
105
+ | `status` | Print service installation and process state as JSON |
106
+ | `uninstall` | Stop and remove the service for the current user |
107
+
108
+ ### `<cli> service install`
90
109
 
91
110
  Install the service for the current user and start it
92
111
 
93
- Options:
94
- --no-start install without starting the service
112
+ ```sh
113
+ <cli> service install [options]
95
114
  ```
96
115
 
97
- ### `<cli> service start`
116
+ #### Options
98
117
 
99
- ```text
100
- Usage: <cli> service start
118
+ | Option | Description |
119
+ | ------------ | ----------------------------------------------------------------- |
120
+ | `--start` | Start the service after installation. (default: true, env: START) |
121
+ | `--no-start` | Disable start the service after installation. |
122
+
123
+ ### `<cli> service start`
101
124
 
102
125
  Start the installed service
126
+
127
+ ```sh
128
+ <cli> service start
103
129
  ```
104
130
 
105
131
  ### `<cli> service stop`
106
132
 
107
- ```text
108
- Usage: <cli> service stop
109
-
110
133
  Stop the running service
134
+
135
+ ```sh
136
+ <cli> service stop
111
137
  ```
112
138
 
113
139
  ### `<cli> service restart`
114
140
 
115
- ```text
116
- Usage: <cli> service restart
117
-
118
141
  Restart the installed service
142
+
143
+ ```sh
144
+ <cli> service restart
119
145
  ```
120
146
 
121
147
  ### `<cli> service status`
122
148
 
123
- ```text
124
- Usage: <cli> service status
125
-
126
149
  Print service installation and process state as JSON
150
+
151
+ ```sh
152
+ <cli> service status
127
153
  ```
128
154
 
129
155
  ### `<cli> service uninstall`
130
156
 
131
- ```text
132
- Usage: <cli> service uninstall
133
-
134
157
  Stop and remove the service for the current user
158
+
159
+ ```sh
160
+ <cli> service uninstall
135
161
  ```
136
162
 
137
163
  <!-- cli-reference:end -->
package/index.ts CHANGED
@@ -3,13 +3,14 @@
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-service";
6
- export const PACKAGE_VERSION = "0.9.40";
6
+ export const PACKAGE_VERSION = "0.9.43";
7
7
  export * as cli from "./src/cli.ts";
8
8
  export * as definition from "./src/definition.ts";
9
9
  export * as icon from "./src/icon.ts";
10
10
  export * as service from "./src/service.ts";
11
+ export { CliServiceInstallOptionsSchema } from "./src/cli.ts";
11
12
  export type { CliServiceDefinitionSource, CliServiceCliDependencies } from "./src/cli.ts";
12
13
  export { CliServiceCommandSchema, CliServiceMenuItemSchema, CliServiceDefinitionSchema } from "./src/definition.ts";
13
- export type { CliServiceCommand, CliServiceMenuItem, CliServiceDefinition, CliServiceDefinitionOptions } from "./src/definition.ts";
14
+ export type { CliServiceCommand, CliServiceCommandInput, CliServiceMenuItem, CliServiceDefinition, CliServiceDefinitionOptions } from "./src/definition.ts";
14
15
  export { CliService } from "./src/service.ts";
15
- export type { CliServiceCompiler, CliServiceRuntimeInstaller, CliServiceRuntimeOptions, CliServiceInstallOptions, CliServiceStatus, CliServiceLifecycle } from "./src/service.ts";
16
+ export type { CliServiceCompiler, CliServiceRuntimeInstaller, CliServiceRuntimeOptions, CliServiceStatus, CliServiceLifecycle } from "./src/service.ts";
package/lib/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
2
- export declare const PACKAGE_VERSION = "0.9.40";
2
+ export declare const PACKAGE_VERSION = "0.9.43";
3
3
  export * as cli from "./src/cli.ts";
4
4
  export * as definition from "./src/definition.ts";
5
5
  export * as icon from "./src/icon.ts";
6
6
  export * as service from "./src/service.ts";
7
+ export { CliServiceInstallOptionsSchema } from "./src/cli.ts";
7
8
  export type { CliServiceDefinitionSource, CliServiceCliDependencies } from "./src/cli.ts";
8
9
  export { CliServiceCommandSchema, CliServiceMenuItemSchema, CliServiceDefinitionSchema } from "./src/definition.ts";
9
- export type { CliServiceCommand, CliServiceMenuItem, CliServiceDefinition, CliServiceDefinitionOptions } from "./src/definition.ts";
10
+ export type { CliServiceCommand, CliServiceCommandInput, CliServiceMenuItem, CliServiceDefinition, CliServiceDefinitionOptions } from "./src/definition.ts";
10
11
  export { CliService } from "./src/service.ts";
11
- export type { CliServiceCompiler, CliServiceRuntimeInstaller, CliServiceRuntimeOptions, CliServiceInstallOptions, CliServiceStatus, CliServiceLifecycle } from "./src/service.ts";
12
+ export type { CliServiceCompiler, CliServiceRuntimeInstaller, CliServiceRuntimeOptions, CliServiceStatus, CliServiceLifecycle } from "./src/service.ts";
package/lib/index.js CHANGED
@@ -2,11 +2,12 @@
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-service";
5
- export const PACKAGE_VERSION = "0.9.40";
5
+ export const PACKAGE_VERSION = "0.9.43";
6
6
  export * as cli from "./src/cli.js";
7
7
  export * as definition from "./src/definition.js";
8
8
  export * as icon from "./src/icon.js";
9
9
  export * as service from "./src/service.js";
10
+ export { CliServiceInstallOptionsSchema } from "./src/cli.js";
10
11
  export { CliServiceCommandSchema, CliServiceMenuItemSchema, CliServiceDefinitionSchema } from "./src/definition.js";
11
12
  export { CliService } from "./src/service.js";
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NsaS1zZXJ2aWNlXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNDBcIjtcbmV4cG9ydCAqIGFzIGNsaSBmcm9tIFwiLi9zcmMvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZpbml0aW9uIGZyb20gXCIuL3NyYy9kZWZpbml0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBpY29uIGZyb20gXCIuL3NyYy9pY29uLnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2aWNlIGZyb20gXCIuL3NyYy9zZXJ2aWNlLnRzXCI7XG5leHBvcnQgdHlwZSB7IENsaVNlcnZpY2VEZWZpbml0aW9uU291cmNlLCBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0IHsgQ2xpU2VydmljZUNvbW1hbmRTY2hlbWEsIENsaVNlcnZpY2VNZW51SXRlbVNjaGVtYSwgQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEgfSBmcm9tIFwiLi9zcmMvZGVmaW5pdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlQ29tbWFuZCwgQ2xpU2VydmljZU1lbnVJdGVtLCBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgQ2xpU2VydmljZURlZmluaXRpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2RlZmluaXRpb24udHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2UgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlQ29tcGlsZXIsIENsaVNlcnZpY2VSdW50aW1lSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUnVudGltZU9wdGlvbnMsIENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucywgQ2xpU2VydmljZVN0YXR1cywgQ2xpU2VydmljZUxpZmVjeWNsZSB9IGZyb20gXCIuL3NyYy9zZXJ2aWNlLnRzXCI7XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jbGktc2VydmljZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjQzXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZGVmaW5pdGlvbiBmcm9tIFwiLi9zcmMvZGVmaW5pdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgaWNvbiBmcm9tIFwiLi9zcmMvaWNvbi50c1wiO1xuZXhwb3J0ICogYXMgc2VydmljZSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHsgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSwgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hLCBDbGlTZXJ2aWNlTWVudUl0ZW1TY2hlbWEsIENsaVNlcnZpY2VEZWZpbml0aW9uU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2RlZmluaXRpb24udHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2xpU2VydmljZUNvbW1hbmQsIENsaVNlcnZpY2VDb21tYW5kSW5wdXQsIENsaVNlcnZpY2VNZW51SXRlbSwgQ2xpU2VydmljZURlZmluaXRpb24sIENsaVNlcnZpY2VEZWZpbml0aW9uT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9kZWZpbml0aW9uLnRzXCI7XG5leHBvcnQgeyBDbGlTZXJ2aWNlIH0gZnJvbSBcIi4vc3JjL3NlcnZpY2UudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2xpU2VydmljZUNvbXBpbGVyLCBDbGlTZXJ2aWNlUnVudGltZUluc3RhbGxlciwgQ2xpU2VydmljZVJ1bnRpbWVPcHRpb25zLCBDbGlTZXJ2aWNlU3RhdHVzLCBDbGlTZXJ2aWNlTGlmZWN5Y2xlIH0gZnJvbSBcIi4vc3JjL3NlcnZpY2UudHNcIjtcbiJdfQ==
package/lib/src/cli.d.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  * @module
8
8
  */
9
9
  import { Command } from "commander";
10
+ import { z } from "zod";
10
11
  import type { CliServiceDefinition } from "./definition.ts";
11
12
  import { type CliServiceLifecycle } from "./service.ts";
12
13
  /** Static definition or action-time factory used by a service command group. */
@@ -18,5 +19,9 @@ export interface CliServiceCliDependencies {
18
19
  /** Write the JSON result of the status command. */
19
20
  write(value: string): void;
20
21
  }
22
+ export declare const CliServiceInstallOptionsSchema: z.ZodObject<{
23
+ start: z.ZodDefault<z.ZodBoolean>;
24
+ }, z.core.$strict>;
25
+ export type CliServiceInstallOptions = z.output<typeof CliServiceInstallOptionsSchema>;
21
26
  /** Build install, start, stop, restart, status, and uninstall commands for a service. */
22
27
  export declare function buildServiceCommand(source: CliServiceDefinitionSource, dependencies?: CliServiceCliDependencies): Command;
package/lib/src/cli.js CHANGED
@@ -6,12 +6,20 @@
6
6
  *
7
7
  * @module
8
8
  */
9
+ import { addArgs, parseArgs } from "@dbx-tools/cli-args/args";
9
10
  import { Command } from "commander";
11
+ import { z } from "zod";
10
12
  import { CliService } from "./service.js";
11
13
  const DEFAULT_DEPENDENCIES = {
12
14
  create: (definition) => new CliService(definition),
13
15
  write: (value) => process.stdout.write(value),
14
16
  };
17
+ export const CliServiceInstallOptionsSchema = z
18
+ .object({
19
+ start: z.boolean().default(true).describe("Start the service after installation."),
20
+ })
21
+ .strict()
22
+ .describe("Options for installing a current-user CLI service.");
15
23
  /** Build install, start, stop, restart, status, and uninstall commands for a service. */
16
24
  export function buildServiceCommand(source, dependencies = DEFAULT_DEPENDENCIES) {
17
25
  const definition = resolveDefinition(source);
@@ -19,11 +27,9 @@ export function buildServiceCommand(source, dependencies = DEFAULT_DEPENDENCIES)
19
27
  const command = new Command("service").description(typeof source === "function"
20
28
  ? "Install and manage the desktop service"
21
29
  : `Install and manage the ${source.name} desktop service`);
22
- command
23
- .command("install")
24
- .description("Install the service for the current user and start it")
25
- .option("--no-start", "install without starting the service")
26
- .action(async (options) => {
30
+ const install = addArgs(command.command("install").description("Install the service for the current user and start it"), CliServiceInstallOptionsSchema, { scope: [] });
31
+ install.action(async () => {
32
+ const options = parseArgs(install, CliServiceInstallOptionsSchema);
27
33
  await service().install({ start: options.start });
28
34
  });
29
35
  command
@@ -61,4 +67,4 @@ export function buildServiceCommand(source, dependencies = DEFAULT_DEPENDENCIES)
61
67
  function resolveDefinition(source) {
62
68
  return typeof source === "function" ? source : () => source;
63
69
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUdwQyxPQUFPLEVBQUUsVUFBVSxFQUE0QixNQUFNLGNBQWMsQ0FBQztBQWFwRSxNQUFNLG9CQUFvQixHQUE4QjtJQUN0RCxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUNsRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztDQUM5QyxDQUFDO0FBRUYseUZBQXlGO0FBQ3pGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsTUFBa0MsRUFDbEMsZUFBMEMsb0JBQW9CO0lBRTlELE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQ2hELE9BQU8sTUFBTSxLQUFLLFVBQVU7UUFDMUIsQ0FBQyxDQUFDLHdDQUF3QztRQUMxQyxDQUFDLENBQUMsMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUM1RCxDQUFDO0lBRUYsT0FBTztTQUNKLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDbEIsV0FBVyxDQUFDLHVEQUF1RCxDQUFDO1NBQ3BFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsc0NBQXNDLENBQUM7U0FDNUQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUEyQixFQUFFLEVBQUU7UUFDNUMsTUFBTSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUNoQixXQUFXLENBQUMsNkJBQTZCLENBQUM7U0FDMUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE1BQU0sT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUNmLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQztTQUN2QyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsU0FBUyxDQUFDO1NBQ2xCLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQztTQUM1QyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsUUFBUSxDQUFDO1NBQ2pCLFdBQVcsQ0FBQyxzREFBc0QsQ0FBQztTQUNuRSxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakIsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9FLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDcEIsV0FBVyxDQUFDLGtEQUFrRCxDQUFDO1NBQy9ELE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNqQixNQUFNLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsTUFBa0M7SUFDM0QsT0FBTyxPQUFPLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1hbmRlciBjb21tYW5kIGdyb3VwIGZvciB0aGUgc2hhcmVkIHN5c3RlbS10cmF5IHNlcnZpY2UgbGlmZWN5Y2xlLlxuICpcbiAqIENvbnN1bWluZyBDTElzIHNob3VsZCBtb3VudCB7QGxpbmsgYnVpbGRTZXJ2aWNlQ29tbWFuZH0gaW5zdGVhZCBvZiBkZWZpbmluZ1xuICogcGFja2FnZS1sb2NhbCBpbnN0YWxsL3N0YXJ0L3N0b3Avc3RhdHVzIGNvbW1hbmRzIHdpdGggZGl2ZXJnZW50IGJlaGF2aW9yLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuXG5pbXBvcnQgdHlwZSB7IENsaVNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvbi50c1wiO1xuaW1wb3J0IHsgQ2xpU2VydmljZSwgdHlwZSBDbGlTZXJ2aWNlTGlmZWN5Y2xlIH0gZnJvbSBcIi4vc2VydmljZS50c1wiO1xuXG4vKiogU3RhdGljIGRlZmluaXRpb24gb3IgYWN0aW9uLXRpbWUgZmFjdG9yeSB1c2VkIGJ5IGEgc2VydmljZSBjb21tYW5kIGdyb3VwLiAqL1xuZXhwb3J0IHR5cGUgQ2xpU2VydmljZURlZmluaXRpb25Tb3VyY2UgPSBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB8ICgoKSA9PiBDbGlTZXJ2aWNlRGVmaW5pdGlvbik7XG5cbi8qKiBJbmplY3RhYmxlIGxpZmVjeWNsZSBhbmQgb3V0cHV0IGJvdW5kYXJ5IGZvciBzZXJ2aWNlIENMSSB0ZXN0cyBhbmQgY29tcG9zaXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXMge1xuICAvKiogQ29uc3RydWN0IHRoZSBsaWZlY3ljbGUgbWFuYWdlciB1c2VkIGJ5IGNvbW1hbmQgYWN0aW9ucy4gKi9cbiAgY3JlYXRlKGRlZmluaXRpb246IENsaVNlcnZpY2VEZWZpbml0aW9uKTogQ2xpU2VydmljZUxpZmVjeWNsZTtcbiAgLyoqIFdyaXRlIHRoZSBKU09OIHJlc3VsdCBvZiB0aGUgc3RhdHVzIGNvbW1hbmQuICovXG4gIHdyaXRlKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5jb25zdCBERUZBVUxUX0RFUEVOREVOQ0lFUzogQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlOiAoZGVmaW5pdGlvbikgPT4gbmV3IENsaVNlcnZpY2UoZGVmaW5pdGlvbiksXG4gIHdyaXRlOiAodmFsdWUpID0+IHByb2Nlc3Muc3Rkb3V0LndyaXRlKHZhbHVlKSxcbn07XG5cbi8qKiBCdWlsZCBpbnN0YWxsLCBzdGFydCwgc3RvcCwgcmVzdGFydCwgc3RhdHVzLCBhbmQgdW5pbnN0YWxsIGNvbW1hbmRzIGZvciBhIHNlcnZpY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTZXJ2aWNlQ29tbWFuZChcbiAgc291cmNlOiBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSxcbiAgZGVwZW5kZW5jaWVzOiBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzID0gREVGQVVMVF9ERVBFTkRFTkNJRVMsXG4pOiBDb21tYW5kIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IHJlc29sdmVEZWZpbml0aW9uKHNvdXJjZSk7XG4gIGNvbnN0IHNlcnZpY2UgPSAoKSA9PiBkZXBlbmRlbmNpZXMuY3JlYXRlKGRlZmluaXRpb24oKSk7XG4gIGNvbnN0IGNvbW1hbmQgPSBuZXcgQ29tbWFuZChcInNlcnZpY2VcIikuZGVzY3JpcHRpb24oXG4gICAgdHlwZW9mIHNvdXJjZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IFwiSW5zdGFsbCBhbmQgbWFuYWdlIHRoZSBkZXNrdG9wIHNlcnZpY2VcIlxuICAgICAgOiBgSW5zdGFsbCBhbmQgbWFuYWdlIHRoZSAke3NvdXJjZS5uYW1lfSBkZXNrdG9wIHNlcnZpY2VgLFxuICApO1xuXG4gIGNvbW1hbmRcbiAgICAuY29tbWFuZChcImluc3RhbGxcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnN0YWxsIHRoZSBzZXJ2aWNlIGZvciB0aGUgY3VycmVudCB1c2VyIGFuZCBzdGFydCBpdFwiKVxuICAgIC5vcHRpb24oXCItLW5vLXN0YXJ0XCIsIFwiaW5zdGFsbCB3aXRob3V0IHN0YXJ0aW5nIHRoZSBzZXJ2aWNlXCIpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogeyBzdGFydDogYm9vbGVhbiB9KSA9PiB7XG4gICAgICBhd2FpdCBzZXJ2aWNlKCkuaW5zdGFsbCh7IHN0YXJ0OiBvcHRpb25zLnN0YXJ0IH0pO1xuICAgIH0pO1xuXG4gIGNvbW1hbmRcbiAgICAuY29tbWFuZChcInN0YXJ0XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiU3RhcnQgdGhlIGluc3RhbGxlZCBzZXJ2aWNlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXJ2aWNlKCkuc3RhcnQoKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJzdG9wXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiU3RvcCB0aGUgcnVubmluZyBzZXJ2aWNlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXJ2aWNlKCkuc3RvcCgpO1xuICAgIH0pO1xuXG4gIGNvbW1hbmRcbiAgICAuY29tbWFuZChcInJlc3RhcnRcIilcbiAgICAuZGVzY3JpcHRpb24oXCJSZXN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmljZSgpLnJlc3RhcnQoKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJzdGF0dXNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJQcmludCBzZXJ2aWNlIGluc3RhbGxhdGlvbiBhbmQgcHJvY2VzcyBzdGF0ZSBhcyBKU09OXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBkZXBlbmRlbmNpZXMud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoYXdhaXQgc2VydmljZSgpLnN0YXR1cygpLCBudWxsLCAyKX1cXG5gKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJ1bmluc3RhbGxcIilcbiAgICAuZGVzY3JpcHRpb24oXCJTdG9wIGFuZCByZW1vdmUgdGhlIHNlcnZpY2UgZm9yIHRoZSBjdXJyZW50IHVzZXJcIilcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNlcnZpY2UoKS51bmluc3RhbGwoKTtcbiAgICB9KTtcblxuICByZXR1cm4gY29tbWFuZDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlZmluaXRpb24oc291cmNlOiBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSk6ICgpID0+IENsaVNlcnZpY2VEZWZpbml0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiBzb3VyY2UgPT09IFwiZnVuY3Rpb25cIiA/IHNvdXJjZSA6ICgpID0+IHNvdXJjZTtcbn1cbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFHeEIsT0FBTyxFQUFFLFVBQVUsRUFBNEIsTUFBTSxjQUFjLENBQUM7QUFhcEUsTUFBTSxvQkFBb0IsR0FBOEI7SUFDdEQsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDbEQsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Q0FDOUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQUM7S0FDNUMsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLHVDQUF1QyxDQUFDO0NBQ25GLENBQUM7S0FDRCxNQUFNLEVBQUU7S0FDUixRQUFRLENBQUMsb0RBQW9ELENBQUMsQ0FBQztBQUlsRSx5RkFBeUY7QUFDekYsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFrQyxFQUNsQyxlQUEwQyxvQkFBb0I7SUFFOUQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FDaEQsT0FBTyxNQUFNLEtBQUssVUFBVTtRQUMxQixDQUFDLENBQUMsd0NBQXdDO1FBQzFDLENBQUMsQ0FBQywwQkFBMEIsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQzVELENBQUM7SUFFRixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ3JCLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLHVEQUF1RCxDQUFDLEVBQy9GLDhCQUE4QixFQUM5QixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FDZCxDQUFDO0lBQ0YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUN4QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLDhCQUE4QixDQUFDLENBQUM7UUFDbkUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1NBQ0osT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUNoQixXQUFXLENBQUMsNkJBQTZCLENBQUM7U0FDMUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE1BQU0sT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUNmLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQztTQUN2QyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsU0FBUyxDQUFDO1NBQ2xCLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQztTQUM1QyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsUUFBUSxDQUFDO1NBQ2pCLFdBQVcsQ0FBQyxzREFBc0QsQ0FBQztTQUNuRSxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakIsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9FLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDcEIsV0FBVyxDQUFDLGtEQUFrRCxDQUFDO1NBQy9ELE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNqQixNQUFNLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsTUFBa0M7SUFDM0QsT0FBTyxPQUFPLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1hbmRlciBjb21tYW5kIGdyb3VwIGZvciB0aGUgc2hhcmVkIHN5c3RlbS10cmF5IHNlcnZpY2UgbGlmZWN5Y2xlLlxuICpcbiAqIENvbnN1bWluZyBDTElzIHNob3VsZCBtb3VudCB7QGxpbmsgYnVpbGRTZXJ2aWNlQ29tbWFuZH0gaW5zdGVhZCBvZiBkZWZpbmluZ1xuICogcGFja2FnZS1sb2NhbCBpbnN0YWxsL3N0YXJ0L3N0b3Avc3RhdHVzIGNvbW1hbmRzIHdpdGggZGl2ZXJnZW50IGJlaGF2aW9yLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBhZGRBcmdzLCBwYXJzZUFyZ3MgfSBmcm9tIFwiQGRieC10b29scy9jbGktYXJncy9hcmdzXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHR5cGUgeyBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb24udHNcIjtcbmltcG9ydCB7IENsaVNlcnZpY2UsIHR5cGUgQ2xpU2VydmljZUxpZmVjeWNsZSB9IGZyb20gXCIuL3NlcnZpY2UudHNcIjtcblxuLyoqIFN0YXRpYyBkZWZpbml0aW9uIG9yIGFjdGlvbi10aW1lIGZhY3RvcnkgdXNlZCBieSBhIHNlcnZpY2UgY29tbWFuZCBncm91cC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uU291cmNlID0gQ2xpU2VydmljZURlZmluaXRpb24gfCAoKCkgPT4gQ2xpU2VydmljZURlZmluaXRpb24pO1xuXG4vKiogSW5qZWN0YWJsZSBsaWZlY3ljbGUgYW5kIG91dHB1dCBib3VuZGFyeSBmb3Igc2VydmljZSBDTEkgdGVzdHMgYW5kIGNvbXBvc2l0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzIHtcbiAgLyoqIENvbnN0cnVjdCB0aGUgbGlmZWN5Y2xlIG1hbmFnZXIgdXNlZCBieSBjb21tYW5kIGFjdGlvbnMuICovXG4gIGNyZWF0ZShkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbik6IENsaVNlcnZpY2VMaWZlY3ljbGU7XG4gIC8qKiBXcml0ZSB0aGUgSlNPTiByZXN1bHQgb2YgdGhlIHN0YXR1cyBjb21tYW5kLiAqL1xuICB3cml0ZSh2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuY29uc3QgREVGQVVMVF9ERVBFTkRFTkNJRVM6IENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZTogKGRlZmluaXRpb24pID0+IG5ldyBDbGlTZXJ2aWNlKGRlZmluaXRpb24pLFxuICB3cml0ZTogKHZhbHVlKSA9PiBwcm9jZXNzLnN0ZG91dC53cml0ZSh2YWx1ZSksXG59O1xuXG5leHBvcnQgY29uc3QgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzdGFydDogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKS5kZXNjcmliZShcIlN0YXJ0IHRoZSBzZXJ2aWNlIGFmdGVyIGluc3RhbGxhdGlvbi5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJPcHRpb25zIGZvciBpbnN0YWxsaW5nIGEgY3VycmVudC11c2VyIENMSSBzZXJ2aWNlLlwiKTtcblxuZXhwb3J0IHR5cGUgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zID0gei5vdXRwdXQ8dHlwZW9mIENsaVNlcnZpY2VJbnN0YWxsT3B0aW9uc1NjaGVtYT47XG5cbi8qKiBCdWlsZCBpbnN0YWxsLCBzdGFydCwgc3RvcCwgcmVzdGFydCwgc3RhdHVzLCBhbmQgdW5pbnN0YWxsIGNvbW1hbmRzIGZvciBhIHNlcnZpY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTZXJ2aWNlQ29tbWFuZChcbiAgc291cmNlOiBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSxcbiAgZGVwZW5kZW5jaWVzOiBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzID0gREVGQVVMVF9ERVBFTkRFTkNJRVMsXG4pOiBDb21tYW5kIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IHJlc29sdmVEZWZpbml0aW9uKHNvdXJjZSk7XG4gIGNvbnN0IHNlcnZpY2UgPSAoKSA9PiBkZXBlbmRlbmNpZXMuY3JlYXRlKGRlZmluaXRpb24oKSk7XG4gIGNvbnN0IGNvbW1hbmQgPSBuZXcgQ29tbWFuZChcInNlcnZpY2VcIikuZGVzY3JpcHRpb24oXG4gICAgdHlwZW9mIHNvdXJjZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IFwiSW5zdGFsbCBhbmQgbWFuYWdlIHRoZSBkZXNrdG9wIHNlcnZpY2VcIlxuICAgICAgOiBgSW5zdGFsbCBhbmQgbWFuYWdlIHRoZSAke3NvdXJjZS5uYW1lfSBkZXNrdG9wIHNlcnZpY2VgLFxuICApO1xuXG4gIGNvbnN0IGluc3RhbGwgPSBhZGRBcmdzKFxuICAgIGNvbW1hbmQuY29tbWFuZChcImluc3RhbGxcIikuZGVzY3JpcHRpb24oXCJJbnN0YWxsIHRoZSBzZXJ2aWNlIGZvciB0aGUgY3VycmVudCB1c2VyIGFuZCBzdGFydCBpdFwiKSxcbiAgICBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnNTY2hlbWEsXG4gICAgeyBzY29wZTogW10gfSxcbiAgKTtcbiAgaW5zdGFsbC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoaW5zdGFsbCwgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hKTtcbiAgICBhd2FpdCBzZXJ2aWNlKCkuaW5zdGFsbCh7IHN0YXJ0OiBvcHRpb25zLnN0YXJ0IH0pO1xuICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJzdGFydFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIlN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmljZSgpLnN0YXJ0KCk7XG4gICAgfSk7XG5cbiAgY29tbWFuZFxuICAgIC5jb21tYW5kKFwic3RvcFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIlN0b3AgdGhlIHJ1bm5pbmcgc2VydmljZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmljZSgpLnN0b3AoKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJyZXN0YXJ0XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiUmVzdGFydCB0aGUgaW5zdGFsbGVkIHNlcnZpY2VcIilcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNlcnZpY2UoKS5yZXN0YXJ0KCk7XG4gICAgfSk7XG5cbiAgY29tbWFuZFxuICAgIC5jb21tYW5kKFwic3RhdHVzXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiUHJpbnQgc2VydmljZSBpbnN0YWxsYXRpb24gYW5kIHByb2Nlc3Mgc3RhdGUgYXMgSlNPTlwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgZGVwZW5kZW5jaWVzLndyaXRlKGAke0pTT04uc3RyaW5naWZ5KGF3YWl0IHNlcnZpY2UoKS5zdGF0dXMoKSwgbnVsbCwgMil9XFxuYCk7XG4gICAgfSk7XG5cbiAgY29tbWFuZFxuICAgIC5jb21tYW5kKFwidW5pbnN0YWxsXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiU3RvcCBhbmQgcmVtb3ZlIHRoZSBzZXJ2aWNlIGZvciB0aGUgY3VycmVudCB1c2VyXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXJ2aWNlKCkudW5pbnN0YWxsKCk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGNvbW1hbmQ7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEZWZpbml0aW9uKHNvdXJjZTogQ2xpU2VydmljZURlZmluaXRpb25Tb3VyY2UpOiAoKSA9PiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB7XG4gIHJldHVybiB0eXBlb2Ygc291cmNlID09PSBcImZ1bmN0aW9uXCIgPyBzb3VyY2UgOiAoKSA9PiBzb3VyY2U7XG59XG4iXX0=
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @module
9
9
  */
10
+ import { type ArgumentSource } from "@dbx-tools/cli-args/args";
10
11
  import { z } from "zod";
11
12
  /** A process launched by the system-tray service host. */
12
13
  export declare const CliServiceCommandSchema: z.ZodReadonly<z.ZodObject<{
@@ -19,6 +20,13 @@ export declare const CliServiceCommandSchema: z.ZodReadonly<z.ZodObject<{
19
20
  }, z.core.$strip>>;
20
21
  /** A process launched by the system-tray service host. */
21
22
  export type CliServiceCommand = z.infer<typeof CliServiceCommandSchema>;
23
+ /** Command input accepted by {@link defineService} before option serialization. */
24
+ export type CliServiceCommandInput = Omit<CliServiceCommand, "arguments"> & {
25
+ /** Positional or pre-serialized arguments placed before generated options. */
26
+ readonly arguments?: readonly string[];
27
+ /** Zod defaults or concrete option values converted into CLI flags. */
28
+ readonly options?: ArgumentSource;
29
+ };
22
30
  /** A typed custom item inserted between the default service title and Quit item. */
23
31
  export declare const CliServiceMenuItemSchema: z.ZodDiscriminatedUnion<[z.ZodReadonly<z.ZodObject<{
24
32
  type: z.ZodLiteral<"separator">;
@@ -79,7 +87,10 @@ export declare const CliServiceDefinitionSchema: z.ZodReadonly<z.ZodObject<{
79
87
  /** Complete serializable definition consumed by the lifecycle manager and tray host. */
80
88
  export type CliServiceDefinition = z.infer<typeof CliServiceDefinitionSchema>;
81
89
  /** Package-derived service fields plus caller-owned icon, process, and menu options. */
82
- export type CliServiceDefinitionOptions = Omit<CliServiceDefinition, "packageName" | "id" | "name" | "version" | "icon" | "isTemplateIcon"> & Partial<Pick<CliServiceDefinition, "id" | "name" | "version" | "icon" | "isTemplateIcon">>;
90
+ export type CliServiceDefinitionOptions = Omit<CliServiceDefinition, "packageName" | "id" | "name" | "version" | "icon" | "isTemplateIcon" | "command"> & Partial<Pick<CliServiceDefinition, "id" | "name" | "version" | "icon" | "isTemplateIcon">> & {
91
+ /** Service process command with optional schema or object-backed options. */
92
+ readonly command?: CliServiceCommandInput;
93
+ };
83
94
  /** Define a service from an owning module URL or installed package name. */
84
95
  export declare function defineService(packageReference: string, options: CliServiceDefinitionOptions): CliServiceDefinition;
85
96
  /** Resolve a package's single or explicitly named executable entrypoint. */
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @module
9
9
  */
10
+ import { serializeArgs } from "@dbx-tools/cli-args/args";
10
11
  import { z } from "zod";
11
12
  import { resolveServicePackage, servicePackageDefaults } from "./_package.js";
12
13
  import { serviceTrayIcon } from "./icon.js";
@@ -81,18 +82,34 @@ export const CliServiceDefinitionSchema = z
81
82
  export function defineService(packageReference, options) {
82
83
  const pkg = resolveServicePackage(packageReference);
83
84
  const defaults = servicePackageDefaults(pkg);
85
+ const { command, ...definition } = options;
84
86
  return CliServiceDefinitionSchema.parse({
85
- ...options,
87
+ ...definition,
88
+ command: resolveServiceCommand(command),
86
89
  packageName: pkg.name,
87
- id: options.id ?? defaults.id,
88
- name: options.name ?? defaults.name,
89
- version: options.version ?? pkg.version,
90
- icon: options.icon ?? serviceTrayIcon(),
91
- isTemplateIcon: options.isTemplateIcon ?? process.platform === "darwin",
90
+ id: definition.id ?? defaults.id,
91
+ name: definition.name ?? defaults.name,
92
+ version: definition.version ?? pkg.version,
93
+ icon: definition.icon ?? serviceTrayIcon(),
94
+ isTemplateIcon: definition.isTemplateIcon ?? process.platform === "darwin",
95
+ });
96
+ }
97
+ function resolveServiceCommand(command) {
98
+ if (!command)
99
+ return undefined;
100
+ const { options, ...definition } = command;
101
+ const arguments_ = [
102
+ ...(definition.arguments ?? []),
103
+ ...(options === undefined ? [] : serializeArgs(options)),
104
+ ];
105
+ return CliServiceCommandSchema.parse({
106
+ ...definition,
107
+ environment: { NODE_ENV: "production", ...definition.environment },
108
+ ...(arguments_.length > 0 ? { arguments: arguments_ } : {}),
92
109
  });
93
110
  }
94
111
  /** Resolve a package's single or explicitly named executable entrypoint. */
95
112
  export function resolveServicePackageBin(packageReference, binName) {
96
113
  return resolveServicePackage(packageReference).bin(binName);
97
114
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWZpbml0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRW5FLFNBQVMsU0FBUyxDQUFDLEtBQWE7SUFDOUIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQztLQUNyQyxNQUFNLENBQUM7SUFDTixVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3hDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVB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SyxDQUFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzlELENBQUM7S0FDRCxRQUFRLEVBQUUsQ0FBQztBQVlkLDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsYUFBYSxDQUMzQixnQkFBd0IsRUFDeEIsT0FBb0M7SUFFcEMsTUFBTSxHQUFHLEdBQUcscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRCxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxPQUFPLDBCQUEwQixDQUFDLEtBQUssQ0FBQztRQUN0QyxHQUFHLE9BQU87UUFDVixXQUFXLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDckIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUU7UUFDN0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUk7UUFDbkMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU87UUFDdkMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksZUFBZSxFQUFFO1FBQ3ZDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUTtLQUN4RSxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxnQkFBd0IsRUFBRSxPQUFnQjtJQUNqRixPQUFPLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcmlhbGl6YWJsZSBjb25maWd1cmF0aW9uIGZvciBhIHN5c3RlbS10cmF5IENMSSBzZXJ2aWNlLlxuICpcbiAqIFRoaXMgbW9kdWxlIG93bnMgdGhlIGNyb3NzLXBhY2thZ2Ugc2VydmljZSBkZWZpbml0aW9uIGNvbnRyYWN0LCBwYWNrYWdlXG4gKiBpZGVudGl0eSBkZWZhdWx0cywgcHJvY2VzcyBjb21tYW5kLCBpY29uLCBhbmQgbWVudSBzY2hlbWEuIFJldXNlXG4gKiB7QGxpbmsgZGVmaW5lU2VydmljZX0gaW5zdGVhZCBvZiBtYWludGFpbmluZyBhbm90aGVyIHNlcnZpY2UgbWFuaWZlc3Qgc2hhcGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IHJlc29sdmVTZXJ2aWNlUGFja2FnZSwgc2VydmljZVBhY2thZ2VEZWZhdWx0cyB9IGZyb20gXCIuL19wYWNrYWdlLnRzXCI7XG5pbXBvcnQgeyBzZXJ2aWNlVHJheUljb24gfSBmcm9tIFwiLi9pY29uLnRzXCI7XG5cbmNvbnN0IFNBRkVfVVJMX1BST1RPQ09MUyA9IG5ldyBTZXQoW1wiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJtYWlsdG86XCJdKTtcblxuZnVuY3Rpb24gaXNTYWZlVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU0FGRV9VUkxfUFJPVE9DT0xTLmhhcyhuZXcgVVJMKHZhbHVlKS5wcm90b2NvbCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKiogQSBwcm9jZXNzIGxhdW5jaGVkIGJ5IHRoZSBzeXN0ZW0tdHJheSBzZXJ2aWNlIGhvc3QuICovXG5leHBvcnQgY29uc3QgQ2xpU2VydmljZUNvbW1hbmRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGV4ZWN1dGFibGU6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gICAgZW50cnlwb2ludDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgICBiaW5OYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICAgIGFyZ3VtZW50czogei5hcnJheSh6LnN0cmluZygpKS5yZWFkb25seSgpLm9wdGlvbmFsKCksXG4gICAgZW52aXJvbm1lbnQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLnJlYWRvbmx5KCkub3B0aW9uYWwoKSxcbiAgICBjd2Q6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdXBlclJlZmluZSgoY29tbWFuZCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChcbiAgICAgIE51bWJlcihjb21tYW5kLmV4ZWN1dGFibGUgIT09IHVuZGVmaW5lZCkgK1xuICAgICAgICBOdW1iZXIoY29tbWFuZC5lbnRyeXBvaW50ICE9PSB1bmRlZmluZWQpICtcbiAgICAgICAgTnVtYmVyKGNvbW1hbmQuYmluTmFtZSAhPT0gdW5kZWZpbmVkKSA+XG4gICAgICAxXG4gICAgKSB7XG4gICAgICBjb250ZXh0LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgbWVzc2FnZTogXCJjb21tYW5kIGFjY2VwdHMgYXQgbW9zdCBvbmUgb2YgZXhlY3V0YWJsZSwgZW50cnlwb2ludCwgb3IgYmluTmFtZVwiLFxuICAgICAgfSk7XG4gICAgfVxuICB9KVxuICAucmVhZG9ubHkoKTtcblxuLyoqIEEgcHJvY2VzcyBsYXVuY2hlZCBieSB0aGUgc3lzdGVtLXRyYXkgc2VydmljZSBob3N0LiAqL1xuZXhwb3J0IHR5cGUgQ2xpU2VydmljZUNvbW1hbmQgPSB6LmluZmVyPHR5cGVvZiBDbGlTZXJ2aWNlQ29tbWFuZFNjaGVtYT47XG5cbi8qKiBBIHR5cGVkIGN1c3RvbSBpdGVtIGluc2VydGVkIGJldHdlZW4gdGhlIGRlZmF1bHQgc2VydmljZSB0aXRsZSBhbmQgUXVpdCBpdGVtLiAqL1xuZXhwb3J0IGNvbnN0IENsaVNlcnZpY2VNZW51SXRlbVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwic2VwYXJhdG9yXCIpIH0pLnJlYWRvbmx5KCksXG4gIHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHR5cGU6IHoubGl0ZXJhbChcInVybFwiKSxcbiAgICAgIGxhYmVsOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICAgIHVybDogei5zdHJpbmcoKS5yZWZpbmUoaXNTYWZlVXJsLCBcIlVSTCBtdXN0IHVzZSBIVFRQLCBIVFRQUywgb3IgbWFpbHRvXCIpLFxuICAgIH0pXG4gICAgLnJlYWRvbmx5KCksXG4gIHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHR5cGU6IHoubGl0ZXJhbChcImNvbW1hbmRcIiksXG4gICAgICBsYWJlbDogei5zdHJpbmcoKS5taW4oMSksXG4gICAgICBjb21tYW5kOiBDbGlTZXJ2aWNlQ29tbWFuZFNjaGVtYSxcbiAgICB9KVxuICAgIC5yZWFkb25seSgpLFxuXSk7XG5cbi8qKiBBIHR5cGVkIGN1c3RvbSBpdGVtIGluc2VydGVkIGJldHdlZW4gdGhlIGRlZmF1bHQgc2VydmljZSB0aXRsZSBhbmQgUXVpdCBpdGVtLiAqL1xuZXhwb3J0IHR5cGUgQ2xpU2VydmljZU1lbnVJdGVtID0gei5pbmZlcjx0eXBlb2YgQ2xpU2VydmljZU1lbnVJdGVtU2NoZW1hPjtcblxuLyoqIENvbXBsZXRlIHNlcmlhbGl6YWJsZSBkZWZpbml0aW9uIGNvbnN1bWVkIGJ5IHRoZSBsaWZlY3ljbGUgbWFuYWdlciBhbmQgdHJheSBob3N0LiAqL1xuZXhwb3J0IGNvbnN0IENsaVNlcnZpY2VEZWZpbml0aW9uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBpZDogelxuICAgICAgLnN0cmluZygpXG4gICAgICAubWluKDEpXG4gICAgICAubWF4KDEyOClcbiAgICAgIC5yZWdleCgvXlthLXowLTldW2EtejAtOS5fLV0qJC8sIFwic2VydmljZSBpZCBtdXN0IGJlIGZpbGVzeXN0ZW0gc2FmZVwiKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICBwYWNrYWdlTmFtZTogei5zdHJpbmcoKS5taW4oMSksXG4gICAgdmVyc2lvbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgICBpY29uOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICBpc1RlbXBsYXRlSWNvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBkYXRhRGlyZWN0b3J5OiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICAgIGNvbW1hbmQ6IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgbWVudTogei5hcnJheShDbGlTZXJ2aWNlTWVudUl0ZW1TY2hlbWEpLnJlYWRvbmx5KCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnJlYWRvbmx5KCk7XG5cbi8qKiBDb21wbGV0ZSBzZXJpYWxpemFibGUgZGVmaW5pdGlvbiBjb25zdW1lZCBieSB0aGUgbGlmZWN5Y2xlIG1hbmFnZXIgYW5kIHRyYXkgaG9zdC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uID0gei5pbmZlcjx0eXBlb2YgQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWE+O1xuXG4vKiogUGFja2FnZS1kZXJpdmVkIHNlcnZpY2UgZmllbGRzIHBsdXMgY2FsbGVyLW93bmVkIGljb24sIHByb2Nlc3MsIGFuZCBtZW51IG9wdGlvbnMuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlRGVmaW5pdGlvbk9wdGlvbnMgPSBPbWl0PFxuICBDbGlTZXJ2aWNlRGVmaW5pdGlvbixcbiAgXCJwYWNrYWdlTmFtZVwiIHwgXCJpZFwiIHwgXCJuYW1lXCIgfCBcInZlcnNpb25cIiB8IFwiaWNvblwiIHwgXCJpc1RlbXBsYXRlSWNvblwiXG4+ICZcbiAgUGFydGlhbDxQaWNrPENsaVNlcnZpY2VEZWZpbml0aW9uLCBcImlkXCIgfCBcIm5hbWVcIiB8IFwidmVyc2lvblwiIHwgXCJpY29uXCIgfCBcImlzVGVtcGxhdGVJY29uXCI+PjtcblxuLyoqIERlZmluZSBhIHNlcnZpY2UgZnJvbSBhbiBvd25pbmcgbW9kdWxlIFVSTCBvciBpbnN0YWxsZWQgcGFja2FnZSBuYW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVNlcnZpY2UoXG4gIHBhY2thZ2VSZWZlcmVuY2U6IHN0cmluZyxcbiAgb3B0aW9uczogQ2xpU2VydmljZURlZmluaXRpb25PcHRpb25zLFxuKTogQ2xpU2VydmljZURlZmluaXRpb24ge1xuICBjb25zdCBwa2cgPSByZXNvbHZlU2VydmljZVBhY2thZ2UocGFja2FnZVJlZmVyZW5jZSk7XG4gIGNvbnN0IGRlZmF1bHRzID0gc2VydmljZVBhY2thZ2VEZWZhdWx0cyhwa2cpO1xuICByZXR1cm4gQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEucGFyc2Uoe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgcGFja2FnZU5hbWU6IHBrZy5uYW1lLFxuICAgIGlkOiBvcHRpb25zLmlkID8/IGRlZmF1bHRzLmlkLFxuICAgIG5hbWU6IG9wdGlvbnMubmFtZSA/PyBkZWZhdWx0cy5uYW1lLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBwa2cudmVyc2lvbixcbiAgICBpY29uOiBvcHRpb25zLmljb24gPz8gc2VydmljZVRyYXlJY29uKCksXG4gICAgaXNUZW1wbGF0ZUljb246IG9wdGlvbnMuaXNUZW1wbGF0ZUljb24gPz8gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIixcbiAgfSk7XG59XG5cbi8qKiBSZXNvbHZlIGEgcGFja2FnZSdzIHNpbmdsZSBvciBleHBsaWNpdGx5IG5hbWVkIGV4ZWN1dGFibGUgZW50cnlwb2ludC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VydmljZVBhY2thZ2VCaW4ocGFja2FnZVJlZmVyZW5jZTogc3RyaW5nLCBiaW5OYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVTZXJ2aWNlUGFja2FnZShwYWNrYWdlUmVmZXJlbmNlKS5iaW4oYmluTmFtZSk7XG59XG4iXX0=
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWZpbml0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBdUIsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFbkUsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixJQUFJLENBQUM7UUFDSCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDO0tBQ3JDLE1BQU0sQ0FBQztJQUNOLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN4QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FB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QyxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDekQsQ0FBQztJQUNGLE9BQU8sdUJBQXVCLENBQUMsS0FBSyxDQUFDO1FBQ25DLEdBQUcsVUFBVTtRQUNiLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFO1FBQ2xFLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUM1RCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxnQkFBd0IsRUFBRSxPQUFnQjtJQUNqRixPQUFPLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcmlhbGl6YWJsZSBjb25maWd1cmF0aW9uIGZvciBhIHN5c3RlbS10cmF5IENMSSBzZXJ2aWNlLlxuICpcbiAqIFRoaXMgbW9kdWxlIG93bnMgdGhlIGNyb3NzLXBhY2thZ2Ugc2VydmljZSBkZWZpbml0aW9uIGNvbnRyYWN0LCBwYWNrYWdlXG4gKiBpZGVudGl0eSBkZWZhdWx0cywgcHJvY2VzcyBjb21tYW5kLCBpY29uLCBhbmQgbWVudSBzY2hlbWEuIFJldXNlXG4gKiB7QGxpbmsgZGVmaW5lU2VydmljZX0gaW5zdGVhZCBvZiBtYWludGFpbmluZyBhbm90aGVyIHNlcnZpY2UgbWFuaWZlc3Qgc2hhcGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNlcmlhbGl6ZUFyZ3MsIHR5cGUgQXJndW1lbnRTb3VyY2UgfSBmcm9tIFwiQGRieC10b29scy9jbGktYXJncy9hcmdzXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyByZXNvbHZlU2VydmljZVBhY2thZ2UsIHNlcnZpY2VQYWNrYWdlRGVmYXVsdHMgfSBmcm9tIFwiLi9fcGFja2FnZS50c1wiO1xuaW1wb3J0IHsgc2VydmljZVRyYXlJY29uIH0gZnJvbSBcIi4vaWNvbi50c1wiO1xuXG5jb25zdCBTQUZFX1VSTF9QUk9UT0NPTFMgPSBuZXcgU2V0KFtcImh0dHA6XCIsIFwiaHR0cHM6XCIsIFwibWFpbHRvOlwiXSk7XG5cbmZ1bmN0aW9uIGlzU2FmZVVybCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFNBRkVfVVJMX1BST1RPQ09MUy5oYXMobmV3IFVSTCh2YWx1ZSkucHJvdG9jb2wpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIEEgcHJvY2VzcyBsYXVuY2hlZCBieSB0aGUgc3lzdGVtLXRyYXkgc2VydmljZSBob3N0LiAqL1xuZXhwb3J0IGNvbnN0IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBleGVjdXRhYmxlOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICAgIGVudHJ5cG9pbnQ6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gICAgYmluTmFtZTogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgICBhcmd1bWVudHM6IHouYXJyYXkoei5zdHJpbmcoKSkucmVhZG9ubHkoKS5vcHRpb25hbCgpLFxuICAgIGVudmlyb25tZW50OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5yZWFkb25seSgpLm9wdGlvbmFsKCksXG4gICAgY3dkOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3VwZXJSZWZpbmUoKGNvbW1hbmQsIGNvbnRleHQpID0+IHtcbiAgICBpZiAoXG4gICAgICBOdW1iZXIoY29tbWFuZC5leGVjdXRhYmxlICE9PSB1bmRlZmluZWQpICtcbiAgICAgICAgTnVtYmVyKGNvbW1hbmQuZW50cnlwb2ludCAhPT0gdW5kZWZpbmVkKSArXG4gICAgICAgIE51bWJlcihjb21tYW5kLmJpbk5hbWUgIT09IHVuZGVmaW5lZCkgPlxuICAgICAgMVxuICAgICkge1xuICAgICAgY29udGV4dC5hZGRJc3N1ZSh7XG4gICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiY29tbWFuZCBhY2NlcHRzIGF0IG1vc3Qgb25lIG9mIGV4ZWN1dGFibGUsIGVudHJ5cG9pbnQsIG9yIGJpbk5hbWVcIixcbiAgICAgIH0pO1xuICAgIH1cbiAgfSlcbiAgLnJlYWRvbmx5KCk7XG5cbi8qKiBBIHByb2Nlc3MgbGF1bmNoZWQgYnkgdGhlIHN5c3RlbS10cmF5IHNlcnZpY2UgaG9zdC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VDb21tYW5kID0gei5pbmZlcjx0eXBlb2YgQ2xpU2VydmljZUNvbW1hbmRTY2hlbWE+O1xuXG4vKiogQ29tbWFuZCBpbnB1dCBhY2NlcHRlZCBieSB7QGxpbmsgZGVmaW5lU2VydmljZX0gYmVmb3JlIG9wdGlvbiBzZXJpYWxpemF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgQ2xpU2VydmljZUNvbW1hbmRJbnB1dCA9IE9taXQ8Q2xpU2VydmljZUNvbW1hbmQsIFwiYXJndW1lbnRzXCI+ICYge1xuICAvKiogUG9zaXRpb25hbCBvciBwcmUtc2VyaWFsaXplZCBhcmd1bWVudHMgcGxhY2VkIGJlZm9yZSBnZW5lcmF0ZWQgb3B0aW9ucy4gKi9cbiAgcmVhZG9ubHkgYXJndW1lbnRzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBab2QgZGVmYXVsdHMgb3IgY29uY3JldGUgb3B0aW9uIHZhbHVlcyBjb252ZXJ0ZWQgaW50byBDTEkgZmxhZ3MuICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBBcmd1bWVudFNvdXJjZTtcbn07XG5cbi8qKiBBIHR5cGVkIGN1c3RvbSBpdGVtIGluc2VydGVkIGJldHdlZW4gdGhlIGRlZmF1bHQgc2VydmljZSB0aXRsZSBhbmQgUXVpdCBpdGVtLiAqL1xuZXhwb3J0IGNvbnN0IENsaVNlcnZpY2VNZW51SXRlbVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwic2VwYXJhdG9yXCIpIH0pLnJlYWRvbmx5KCksXG4gIHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHR5cGU6IHoubGl0ZXJhbChcInVybFwiKSxcbiAgICAgIGxhYmVsOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICAgIHVybDogei5zdHJpbmcoKS5yZWZpbmUoaXNTYWZlVXJsLCBcIlVSTCBtdXN0IHVzZSBIVFRQLCBIVFRQUywgb3IgbWFpbHRvXCIpLFxuICAgIH0pXG4gICAgLnJlYWRvbmx5KCksXG4gIHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHR5cGU6IHoubGl0ZXJhbChcImNvbW1hbmRcIiksXG4gICAgICBsYWJlbDogei5zdHJpbmcoKS5taW4oMSksXG4gICAgICBjb21tYW5kOiBDbGlTZXJ2aWNlQ29tbWFuZFNjaGVtYSxcbiAgICB9KVxuICAgIC5yZWFkb25seSgpLFxuXSk7XG5cbi8qKiBBIHR5cGVkIGN1c3RvbSBpdGVtIGluc2VydGVkIGJldHdlZW4gdGhlIGRlZmF1bHQgc2VydmljZSB0aXRsZSBhbmQgUXVpdCBpdGVtLiAqL1xuZXhwb3J0IHR5cGUgQ2xpU2VydmljZU1lbnVJdGVtID0gei5pbmZlcjx0eXBlb2YgQ2xpU2VydmljZU1lbnVJdGVtU2NoZW1hPjtcblxuLyoqIENvbXBsZXRlIHNlcmlhbGl6YWJsZSBkZWZpbml0aW9uIGNvbnN1bWVkIGJ5IHRoZSBsaWZlY3ljbGUgbWFuYWdlciBhbmQgdHJheSBob3N0LiAqL1xuZXhwb3J0IGNvbnN0IENsaVNlcnZpY2VEZWZpbml0aW9uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBpZDogelxuICAgICAgLnN0cmluZygpXG4gICAgICAubWluKDEpXG4gICAgICAubWF4KDEyOClcbiAgICAgIC5yZWdleCgvXlthLXowLTldW2EtejAtOS5fLV0qJC8sIFwic2VydmljZSBpZCBtdXN0IGJlIGZpbGVzeXN0ZW0gc2FmZVwiKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICBwYWNrYWdlTmFtZTogei5zdHJpbmcoKS5taW4oMSksXG4gICAgdmVyc2lvbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgICBpY29uOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICBpc1RlbXBsYXRlSWNvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBkYXRhRGlyZWN0b3J5OiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICAgIGNvbW1hbmQ6IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgbWVudTogei5hcnJheShDbGlTZXJ2aWNlTWVudUl0ZW1TY2hlbWEpLnJlYWRvbmx5KCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnJlYWRvbmx5KCk7XG5cbi8qKiBDb21wbGV0ZSBzZXJpYWxpemFibGUgZGVmaW5pdGlvbiBjb25zdW1lZCBieSB0aGUgbGlmZWN5Y2xlIG1hbmFnZXIgYW5kIHRyYXkgaG9zdC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uID0gei5pbmZlcjx0eXBlb2YgQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWE+O1xuXG4vKiogUGFja2FnZS1kZXJpdmVkIHNlcnZpY2UgZmllbGRzIHBsdXMgY2FsbGVyLW93bmVkIGljb24sIHByb2Nlc3MsIGFuZCBtZW51IG9wdGlvbnMuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlRGVmaW5pdGlvbk9wdGlvbnMgPSBPbWl0PFxuICBDbGlTZXJ2aWNlRGVmaW5pdGlvbixcbiAgXCJwYWNrYWdlTmFtZVwiIHwgXCJpZFwiIHwgXCJuYW1lXCIgfCBcInZlcnNpb25cIiB8IFwiaWNvblwiIHwgXCJpc1RlbXBsYXRlSWNvblwiIHwgXCJjb21tYW5kXCJcbj4gJlxuICBQYXJ0aWFsPFBpY2s8Q2xpU2VydmljZURlZmluaXRpb24sIFwiaWRcIiB8IFwibmFtZVwiIHwgXCJ2ZXJzaW9uXCIgfCBcImljb25cIiB8IFwiaXNUZW1wbGF0ZUljb25cIj4+ICYge1xuICAgIC8qKiBTZXJ2aWNlIHByb2Nlc3MgY29tbWFuZCB3aXRoIG9wdGlvbmFsIHNjaGVtYSBvciBvYmplY3QtYmFja2VkIG9wdGlvbnMuICovXG4gICAgcmVhZG9ubHkgY29tbWFuZD86IENsaVNlcnZpY2VDb21tYW5kSW5wdXQ7XG4gIH07XG5cbi8qKiBEZWZpbmUgYSBzZXJ2aWNlIGZyb20gYW4gb3duaW5nIG1vZHVsZSBVUkwgb3IgaW5zdGFsbGVkIHBhY2thZ2UgbmFtZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTZXJ2aWNlKFxuICBwYWNrYWdlUmVmZXJlbmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IENsaVNlcnZpY2VEZWZpbml0aW9uT3B0aW9ucyxcbik6IENsaVNlcnZpY2VEZWZpbml0aW9uIHtcbiAgY29uc3QgcGtnID0gcmVzb2x2ZVNlcnZpY2VQYWNrYWdlKHBhY2thZ2VSZWZlcmVuY2UpO1xuICBjb25zdCBkZWZhdWx0cyA9IHNlcnZpY2VQYWNrYWdlRGVmYXVsdHMocGtnKTtcbiAgY29uc3QgeyBjb21tYW5kLCAuLi5kZWZpbml0aW9uIH0gPSBvcHRpb25zO1xuICByZXR1cm4gQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEucGFyc2Uoe1xuICAgIC4uLmRlZmluaXRpb24sXG4gICAgY29tbWFuZDogcmVzb2x2ZVNlcnZpY2VDb21tYW5kKGNvbW1hbmQpLFxuICAgIHBhY2thZ2VOYW1lOiBwa2cubmFtZSxcbiAgICBpZDogZGVmaW5pdGlvbi5pZCA/PyBkZWZhdWx0cy5pZCxcbiAgICBuYW1lOiBkZWZpbml0aW9uLm5hbWUgPz8gZGVmYXVsdHMubmFtZSxcbiAgICB2ZXJzaW9uOiBkZWZpbml0aW9uLnZlcnNpb24gPz8gcGtnLnZlcnNpb24sXG4gICAgaWNvbjogZGVmaW5pdGlvbi5pY29uID8/IHNlcnZpY2VUcmF5SWNvbigpLFxuICAgIGlzVGVtcGxhdGVJY29uOiBkZWZpbml0aW9uLmlzVGVtcGxhdGVJY29uID8/IHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlU2VydmljZUNvbW1hbmQoXG4gIGNvbW1hbmQ6IENsaVNlcnZpY2VDb21tYW5kSW5wdXQgfCB1bmRlZmluZWQsXG4pOiBDbGlTZXJ2aWNlQ29tbWFuZCB8IHVuZGVmaW5lZCB7XG4gIGlmICghY29tbWFuZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgeyBvcHRpb25zLCAuLi5kZWZpbml0aW9uIH0gPSBjb21tYW5kO1xuICBjb25zdCBhcmd1bWVudHNfID0gW1xuICAgIC4uLihkZWZpbml0aW9uLmFyZ3VtZW50cyA/PyBbXSksXG4gICAgLi4uKG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IFtdIDogc2VyaWFsaXplQXJncyhvcHRpb25zKSksXG4gIF07XG4gIHJldHVybiBDbGlTZXJ2aWNlQ29tbWFuZFNjaGVtYS5wYXJzZSh7XG4gICAgLi4uZGVmaW5pdGlvbixcbiAgICBlbnZpcm9ubWVudDogeyBOT0RFX0VOVjogXCJwcm9kdWN0aW9uXCIsIC4uLmRlZmluaXRpb24uZW52aXJvbm1lbnQgfSxcbiAgICAuLi4oYXJndW1lbnRzXy5sZW5ndGggPiAwID8geyBhcmd1bWVudHM6IGFyZ3VtZW50c18gfSA6IHt9KSxcbiAgfSk7XG59XG5cbi8qKiBSZXNvbHZlIGEgcGFja2FnZSdzIHNpbmdsZSBvciBleHBsaWNpdGx5IG5hbWVkIGV4ZWN1dGFibGUgZW50cnlwb2ludC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VydmljZVBhY2thZ2VCaW4ocGFja2FnZVJlZmVyZW5jZTogc3RyaW5nLCBiaW5OYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVTZXJ2aWNlUGFja2FnZShwYWNrYWdlUmVmZXJlbmNlKS5iaW4oYmluTmFtZSk7XG59XG4iXX0=
package/package.json CHANGED
@@ -23,7 +23,8 @@
23
23
  "typescript": "^5.9.3"
24
24
  },
25
25
  "dependencies": {
26
- "@dbx-tools/core": "^0.9.40",
26
+ "@dbx-tools/cli-args": "^0.9.43",
27
+ "@dbx-tools/core": "^0.9.43",
27
28
  "bun": "1.3.14",
28
29
  "commander": "^15.0.0",
29
30
  "systray2": "^2.1.4",
@@ -59,7 +60,7 @@
59
60
  "./package.json": "./package.json"
60
61
  }
61
62
  },
62
- "version": "0.9.40",
63
+ "version": "0.9.43",
63
64
  "types": "./lib/index.d.ts",
64
65
  "dbxToolsConfig": {
65
66
  "tags": [
package/src/cli.ts CHANGED
@@ -7,7 +7,9 @@
7
7
  * @module
8
8
  */
9
9
 
10
+ import { addArgs, parseArgs } from "@dbx-tools/cli-args/args";
10
11
  import { Command } from "commander";
12
+ import { z } from "zod";
11
13
 
12
14
  import type { CliServiceDefinition } from "./definition.ts";
13
15
  import { CliService, type CliServiceLifecycle } from "./service.ts";
@@ -28,6 +30,15 @@ const DEFAULT_DEPENDENCIES: CliServiceCliDependencies = {
28
30
  write: (value) => process.stdout.write(value),
29
31
  };
30
32
 
33
+ export const CliServiceInstallOptionsSchema = z
34
+ .object({
35
+ start: z.boolean().default(true).describe("Start the service after installation."),
36
+ })
37
+ .strict()
38
+ .describe("Options for installing a current-user CLI service.");
39
+
40
+ export type CliServiceInstallOptions = z.output<typeof CliServiceInstallOptionsSchema>;
41
+
31
42
  /** Build install, start, stop, restart, status, and uninstall commands for a service. */
32
43
  export function buildServiceCommand(
33
44
  source: CliServiceDefinitionSource,
@@ -41,13 +52,15 @@ export function buildServiceCommand(
41
52
  : `Install and manage the ${source.name} desktop service`,
42
53
  );
43
54
 
44
- command
45
- .command("install")
46
- .description("Install the service for the current user and start it")
47
- .option("--no-start", "install without starting the service")
48
- .action(async (options: { start: boolean }) => {
49
- await service().install({ start: options.start });
50
- });
55
+ const install = addArgs(
56
+ command.command("install").description("Install the service for the current user and start it"),
57
+ CliServiceInstallOptionsSchema,
58
+ { scope: [] },
59
+ );
60
+ install.action(async () => {
61
+ const options = parseArgs(install, CliServiceInstallOptionsSchema);
62
+ await service().install({ start: options.start });
63
+ });
51
64
 
52
65
  command
53
66
  .command("start")
package/src/definition.ts CHANGED
@@ -8,6 +8,7 @@
8
8
  * @module
9
9
  */
10
10
 
11
+ import { serializeArgs, type ArgumentSource } from "@dbx-tools/cli-args/args";
11
12
  import { z } from "zod";
12
13
 
13
14
  import { resolveServicePackage, servicePackageDefaults } from "./_package.ts";
@@ -51,6 +52,14 @@ export const CliServiceCommandSchema = z
51
52
  /** A process launched by the system-tray service host. */
52
53
  export type CliServiceCommand = z.infer<typeof CliServiceCommandSchema>;
53
54
 
55
+ /** Command input accepted by {@link defineService} before option serialization. */
56
+ export type CliServiceCommandInput = Omit<CliServiceCommand, "arguments"> & {
57
+ /** Positional or pre-serialized arguments placed before generated options. */
58
+ readonly arguments?: readonly string[];
59
+ /** Zod defaults or concrete option values converted into CLI flags. */
60
+ readonly options?: ArgumentSource;
61
+ };
62
+
54
63
  /** A typed custom item inserted between the default service title and Quit item. */
55
64
  export const CliServiceMenuItemSchema = z.discriminatedUnion("type", [
56
65
  z.object({ type: z.literal("separator") }).readonly(),
@@ -98,9 +107,12 @@ export type CliServiceDefinition = z.infer<typeof CliServiceDefinitionSchema>;
98
107
  /** Package-derived service fields plus caller-owned icon, process, and menu options. */
99
108
  export type CliServiceDefinitionOptions = Omit<
100
109
  CliServiceDefinition,
101
- "packageName" | "id" | "name" | "version" | "icon" | "isTemplateIcon"
110
+ "packageName" | "id" | "name" | "version" | "icon" | "isTemplateIcon" | "command"
102
111
  > &
103
- Partial<Pick<CliServiceDefinition, "id" | "name" | "version" | "icon" | "isTemplateIcon">>;
112
+ Partial<Pick<CliServiceDefinition, "id" | "name" | "version" | "icon" | "isTemplateIcon">> & {
113
+ /** Service process command with optional schema or object-backed options. */
114
+ readonly command?: CliServiceCommandInput;
115
+ };
104
116
 
105
117
  /** Define a service from an owning module URL or installed package name. */
106
118
  export function defineService(
@@ -109,14 +121,32 @@ export function defineService(
109
121
  ): CliServiceDefinition {
110
122
  const pkg = resolveServicePackage(packageReference);
111
123
  const defaults = servicePackageDefaults(pkg);
124
+ const { command, ...definition } = options;
112
125
  return CliServiceDefinitionSchema.parse({
113
- ...options,
126
+ ...definition,
127
+ command: resolveServiceCommand(command),
114
128
  packageName: pkg.name,
115
- id: options.id ?? defaults.id,
116
- name: options.name ?? defaults.name,
117
- version: options.version ?? pkg.version,
118
- icon: options.icon ?? serviceTrayIcon(),
119
- isTemplateIcon: options.isTemplateIcon ?? process.platform === "darwin",
129
+ id: definition.id ?? defaults.id,
130
+ name: definition.name ?? defaults.name,
131
+ version: definition.version ?? pkg.version,
132
+ icon: definition.icon ?? serviceTrayIcon(),
133
+ isTemplateIcon: definition.isTemplateIcon ?? process.platform === "darwin",
134
+ });
135
+ }
136
+
137
+ function resolveServiceCommand(
138
+ command: CliServiceCommandInput | undefined,
139
+ ): CliServiceCommand | undefined {
140
+ if (!command) return undefined;
141
+ const { options, ...definition } = command;
142
+ const arguments_ = [
143
+ ...(definition.arguments ?? []),
144
+ ...(options === undefined ? [] : serializeArgs(options)),
145
+ ];
146
+ return CliServiceCommandSchema.parse({
147
+ ...definition,
148
+ environment: { NODE_ENV: "production", ...definition.environment },
149
+ ...(arguments_.length > 0 ? { arguments: arguments_ } : {}),
120
150
  });
121
151
  }
122
152