@devramps/sdk-typescript 0.1.3 → 0.1.4

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.
@@ -1,4 +1,4 @@
1
- import type { ZodType, z } from "zod";
1
+ import type { ZodType } from "zod";
2
2
  import type { StepLogger } from "../logging/step-logger";
3
3
  import type { PrepareOutput } from "../output/step-output";
4
4
  import type { ZodStandardJSONSchemaPayload } from "zod/v4/core";
@@ -38,10 +38,3 @@ export declare abstract class BaseStep<TParams = unknown> {
38
38
  */
39
39
  prepare(_params: TParams): Promise<PrepareOutput>;
40
40
  }
41
- /**
42
- * Type representing a class constructor that produces a BaseStep instance
43
- * with the getMetadata method available.
44
- */
45
- export type StepClass<S extends ZodType = ZodType> = new (...args: any[]) => BaseStep<z.infer<S>> & {
46
- getMetadata(): StepMetadata<S>;
47
- };
@@ -35,4 +35,4 @@ class BaseStep {
35
35
  }
36
36
  }
37
37
  exports.BaseStep = BaseStep;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UvYmFzZS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHdEQUFvRDtBQUVwRCx1REFBb0Q7QUFrQnBEOzs7R0FHRztBQUNILE1BQXNCLFFBQVE7SUFDbEIsTUFBTSxHQUFlLElBQUksd0JBQVUsRUFBRSxDQUFDO0lBRWhEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxNQUFrQjtRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IseUVBQXlFLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBZ0I7UUFDNUIsOERBQThEO1FBQzlELGlFQUFpRTtRQUNqRSxPQUFPLHlCQUFXLENBQUMsTUFBTSxDQUN2QixzQ0FBc0MsRUFDdEMseUJBQXlCLENBQzFCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFsQ0QsNEJBa0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBab2RUeXBlLCB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTdGVwTG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmcvc3RlcC1sb2dnZXJcIjtcbmltcG9ydCB7IE5vT3BMb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZy9zdGVwLWxvZ2dlclwiO1xuaW1wb3J0IHR5cGUgeyBQcmVwYXJlT3V0cHV0IH0gZnJvbSBcIi4uL291dHB1dC9zdGVwLW91dHB1dFwiO1xuaW1wb3J0IHsgU3RlcE91dHB1dHMgfSBmcm9tIFwiLi4vb3V0cHV0L3N0ZXAtb3V0cHV0XCI7XG5pbXBvcnQgdHlwZSB7IFpvZFN0YW5kYXJkSlNPTlNjaGVtYVBheWxvYWQgfSBmcm9tIFwiem9kL3Y0L2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgU3RlcEtpbmQgPSBcInNpbXBsZVwiIHwgXCJwb2xsaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcE1ldGFkYXRhPFMgZXh0ZW5kcyBab2RUeXBlID0gWm9kVHlwZT4ge1xuICBuYW1lPzogc3RyaW5nO1xuICBzaG9ydERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsb25nRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHlhbWxFeGFtcGxlPzogc3RyaW5nO1xuICBzY2hlbWE6IFM7XG4gIHN0ZXBLaW5kOiBTdGVwS2luZDtcbiAgcmVxdWlyZXNBcHByb3ZhbDogYm9vbGVhbjtcbiAgc3RlcFR5cGU6IHN0cmluZztcbiAganNvblNjaGVtYTogWm9kU3RhbmRhcmRKU09OU2NoZW1hUGF5bG9hZDxTPjtcbiAgZG9jdW1lbnRhdGlvblVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgc3RlcHMuXG4gKiBQcm92aWRlcyBsb2dnaW5nIGFuZCBjb21tb24gZnVuY3Rpb25hbGl0eS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTdGVwPFRQYXJhbXMgPSB1bmtub3duPiB7XG4gIHByb3RlY3RlZCBsb2dnZXI6IFN0ZXBMb2dnZXIgPSBuZXcgTm9PcExvZ2dlcigpO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJlZ2lzdHJ5IHRvIGluamVjdCB0aGUgbG9nZ2VyIGJlZm9yZSBleGVjdXRpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3NldExvZ2dlcihsb2dnZXI6IFN0ZXBMb2dnZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG1ldGFkYXRhIGFib3V0IHRoaXMgc3RlcC5cbiAgICogSW1wbGVtZW50ZWQgYnkgdGhlIEBTdGVwIGRlY29yYXRvci5cbiAgICovXG4gIGdldE1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJnZXRNZXRhZGF0YSBub3QgaW1wbGVtZW50ZWQuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCB0aGUgQFN0ZXAgZGVjb3JhdG9yP1wiXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBwcmVwYXJlIG1ldGhvZCBmb3IgYXBwcm92YWwgZmxvdy5cbiAgICogT3ZlcnJpZGUgdGhpcyB0byByZXF1aXJlIGFwcHJvdmFsIGJlZm9yZSBleGVjdXRpb24uXG4gICAqIElmIG5vdCBvdmVycmlkZGVuLCB0aGUgc3RlcCB3aWxsIG5vdCByZXF1aXJlIGFwcHJvdmFsLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZShfcGFyYW1zOiBUUGFyYW1zKTogUHJvbWlzZTxQcmVwYXJlT3V0cHV0PiB7XG4gICAgLy8gRGVmYXVsdDogbm8gYXBwcm92YWwgcmVxdWlyZWQgLSB0aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWRcbiAgICAvLyBUaGUgcmVnaXN0cnkgY2hlY2tzIGlmIHByZXBhcmUgaXMgb3ZlcnJpZGRlbiBiZWZvcmUgY2FsbGluZyBpdFxuICAgIHJldHVybiBTdGVwT3V0cHV0cy5mYWlsZWQoXG4gICAgICBcInByZXBhcmUoKSBjYWxsZWQgYnV0IG5vdCBpbXBsZW1lbnRlZFwiLFxuICAgICAgXCJQUkVQQVJFX05PVF9JTVBMRU1FTlRFRFwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIGEgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBwcm9kdWNlcyBhIEJhc2VTdGVwIGluc3RhbmNlXG4gKiB3aXRoIHRoZSBnZXRNZXRhZGF0YSBtZXRob2QgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgdHlwZSBTdGVwQ2xhc3M8UyBleHRlbmRzIFpvZFR5cGUgPSBab2RUeXBlPiA9IG5ldyAoXG4gIC4uLmFyZ3M6IGFueVtdXG4pID0+IEJhc2VTdGVwPHouaW5mZXI8Uz4+ICYge1xuICBnZXRNZXRhZGF0YSgpOiBTdGVwTWV0YWRhdGE8Uz47XG59O1xuIl19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UvYmFzZS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHdEQUFvRDtBQUVwRCx1REFBb0Q7QUFrQnBEOzs7R0FHRztBQUNILE1BQXNCLFFBQVE7SUFDbEIsTUFBTSxHQUFlLElBQUksd0JBQVUsRUFBRSxDQUFDO0lBRWhEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxNQUFrQjtRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IseUVBQXlFLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBZ0I7UUFDNUIsOERBQThEO1FBQzlELGlFQUFpRTtRQUNqRSxPQUFPLHlCQUFXLENBQUMsTUFBTSxDQUN2QixzQ0FBc0MsRUFDdEMseUJBQXlCLENBQzFCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFsQ0QsNEJBa0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBab2RUeXBlIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTdGVwTG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmcvc3RlcC1sb2dnZXJcIjtcbmltcG9ydCB7IE5vT3BMb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZy9zdGVwLWxvZ2dlclwiO1xuaW1wb3J0IHR5cGUgeyBQcmVwYXJlT3V0cHV0IH0gZnJvbSBcIi4uL291dHB1dC9zdGVwLW91dHB1dFwiO1xuaW1wb3J0IHsgU3RlcE91dHB1dHMgfSBmcm9tIFwiLi4vb3V0cHV0L3N0ZXAtb3V0cHV0XCI7XG5pbXBvcnQgdHlwZSB7IFpvZFN0YW5kYXJkSlNPTlNjaGVtYVBheWxvYWQgfSBmcm9tIFwiem9kL3Y0L2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgU3RlcEtpbmQgPSBcInNpbXBsZVwiIHwgXCJwb2xsaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcE1ldGFkYXRhPFMgZXh0ZW5kcyBab2RUeXBlID0gWm9kVHlwZT4ge1xuICBuYW1lPzogc3RyaW5nO1xuICBzaG9ydERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsb25nRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHlhbWxFeGFtcGxlPzogc3RyaW5nO1xuICBzY2hlbWE6IFM7XG4gIHN0ZXBLaW5kOiBTdGVwS2luZDtcbiAgcmVxdWlyZXNBcHByb3ZhbDogYm9vbGVhbjtcbiAgc3RlcFR5cGU6IHN0cmluZztcbiAganNvblNjaGVtYTogWm9kU3RhbmRhcmRKU09OU2NoZW1hUGF5bG9hZDxTPjtcbiAgZG9jdW1lbnRhdGlvblVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgc3RlcHMuXG4gKiBQcm92aWRlcyBsb2dnaW5nIGFuZCBjb21tb24gZnVuY3Rpb25hbGl0eS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTdGVwPFRQYXJhbXMgPSB1bmtub3duPiB7XG4gIHByb3RlY3RlZCBsb2dnZXI6IFN0ZXBMb2dnZXIgPSBuZXcgTm9PcExvZ2dlcigpO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJlZ2lzdHJ5IHRvIGluamVjdCB0aGUgbG9nZ2VyIGJlZm9yZSBleGVjdXRpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3NldExvZ2dlcihsb2dnZXI6IFN0ZXBMb2dnZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG1ldGFkYXRhIGFib3V0IHRoaXMgc3RlcC5cbiAgICogSW1wbGVtZW50ZWQgYnkgdGhlIEBTdGVwIGRlY29yYXRvci5cbiAgICovXG4gIGdldE1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJnZXRNZXRhZGF0YSBub3QgaW1wbGVtZW50ZWQuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCB0aGUgQFN0ZXAgZGVjb3JhdG9yP1wiXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBwcmVwYXJlIG1ldGhvZCBmb3IgYXBwcm92YWwgZmxvdy5cbiAgICogT3ZlcnJpZGUgdGhpcyB0byByZXF1aXJlIGFwcHJvdmFsIGJlZm9yZSBleGVjdXRpb24uXG4gICAqIElmIG5vdCBvdmVycmlkZGVuLCB0aGUgc3RlcCB3aWxsIG5vdCByZXF1aXJlIGFwcHJvdmFsLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZShfcGFyYW1zOiBUUGFyYW1zKTogUHJvbWlzZTxQcmVwYXJlT3V0cHV0PiB7XG4gICAgLy8gRGVmYXVsdDogbm8gYXBwcm92YWwgcmVxdWlyZWQgLSB0aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWRcbiAgICAvLyBUaGUgcmVnaXN0cnkgY2hlY2tzIGlmIHByZXBhcmUgaXMgb3ZlcnJpZGRlbiBiZWZvcmUgY2FsbGluZyBpdFxuICAgIHJldHVybiBTdGVwT3V0cHV0cy5mYWlsZWQoXG4gICAgICBcInByZXBhcmUoKSBjYWxsZWQgYnV0IG5vdCBpbXBsZW1lbnRlZFwiLFxuICAgICAgXCJQUkVQQVJFX05PVF9JTVBMRU1FTlRFRFwiXG4gICAgKTtcbiAgfVxufVxuXG4iXX0=
@@ -10,6 +10,8 @@ import type { ApprovalContext, PollOutput, StepOutput, TriggerOutput } from "../
10
10
  *
11
11
  * Optionally override `prepare` to require approval before triggering.
12
12
  *
13
+ * Steps can accept constructor parameters for dependency injection.
14
+ *
13
15
  * @typeParam TParams - The input parameters type (validated by schema)
14
16
  * @typeParam TPollingState - The polling state type passed between poll calls
15
17
  *
@@ -20,25 +22,36 @@ import type { ApprovalContext, PollOutput, StepOutput, TriggerOutput } from "../
20
22
  *
21
23
  * @Step({ name: "Long Job", type: "long-job", schema: jobSchema })
22
24
  * class LongJobStep extends PollingStep<JobParams, JobPollingState> {
25
+ * constructor(private jobService: JobService) {
26
+ * super();
27
+ * }
28
+ *
23
29
  * async trigger(params: JobParams): Promise<TriggerOutput<JobPollingState>> {
24
- * const jobId = await startJob(params);
30
+ * const jobId = await this.jobService.start(params);
25
31
  * return StepOutputs.triggered({ jobId, startedAt: Date.now() });
26
32
  * }
27
33
  *
28
34
  * async poll(params: JobParams, state: JobPollingState): Promise<PollOutput<JobPollingState>> {
29
- * const status = await checkJob(state.jobId);
35
+ * const status = await this.jobService.checkStatus(state.jobId);
30
36
  * if (status === "running") {
31
37
  * return StepOutputs.pollAgain(state, 5000);
32
38
  * }
33
39
  * return StepOutputs.success({ result: status });
34
40
  * }
35
41
  * }
42
+ *
43
+ * // Register with dependency injected
44
+ * StepRegistry.run([new LongJobStep(jobService)]);
36
45
  * ```
37
46
  *
38
47
  * @example With approval
39
48
  * ```typescript
40
49
  * @Step({ name: "Dangerous Job", type: "dangerous-job", schema: dangerousSchema })
41
50
  * class DangerousJobStep extends PollingStep<DangerousParams, DangerousPollingState> {
51
+ * constructor(private jobService: JobService) {
52
+ * super();
53
+ * }
54
+ *
42
55
  * async prepare(params: DangerousParams): Promise<PrepareOutput> {
43
56
  * return StepOutputs.approvalRequired({
44
57
  * message: `Run dangerous job on ${params.target}?`,
@@ -46,12 +59,16 @@ import type { ApprovalContext, PollOutput, StepOutput, TriggerOutput } from "../
46
59
  * }
47
60
  *
48
61
  * async trigger(params: DangerousParams, approval: ApprovalContext): Promise<TriggerOutput<DangerousPollingState>> {
49
- * const jobId = await startDangerousJob(params);
62
+ * const jobId = await this.jobService.startDangerous(params);
50
63
  * return StepOutputs.triggered({ jobId });
51
64
  * }
52
65
  *
53
66
  * async poll(params: DangerousParams, state: DangerousPollingState): Promise<PollOutput<DangerousPollingState>> {
54
- * // ... check status
67
+ * const status = await this.jobService.checkStatus(state.jobId);
68
+ * if (status === "running") {
69
+ * return StepOutputs.pollAgain(state, 5000);
70
+ * }
71
+ * return StepOutputs.success();
55
72
  * }
56
73
  * }
57
74
  * ```
@@ -11,6 +11,8 @@ const base_step_1 = require("./base-step");
11
11
  *
12
12
  * Optionally override `prepare` to require approval before triggering.
13
13
  *
14
+ * Steps can accept constructor parameters for dependency injection.
15
+ *
14
16
  * @typeParam TParams - The input parameters type (validated by schema)
15
17
  * @typeParam TPollingState - The polling state type passed between poll calls
16
18
  *
@@ -21,25 +23,36 @@ const base_step_1 = require("./base-step");
21
23
  *
22
24
  * @Step({ name: "Long Job", type: "long-job", schema: jobSchema })
23
25
  * class LongJobStep extends PollingStep<JobParams, JobPollingState> {
26
+ * constructor(private jobService: JobService) {
27
+ * super();
28
+ * }
29
+ *
24
30
  * async trigger(params: JobParams): Promise<TriggerOutput<JobPollingState>> {
25
- * const jobId = await startJob(params);
31
+ * const jobId = await this.jobService.start(params);
26
32
  * return StepOutputs.triggered({ jobId, startedAt: Date.now() });
27
33
  * }
28
34
  *
29
35
  * async poll(params: JobParams, state: JobPollingState): Promise<PollOutput<JobPollingState>> {
30
- * const status = await checkJob(state.jobId);
36
+ * const status = await this.jobService.checkStatus(state.jobId);
31
37
  * if (status === "running") {
32
38
  * return StepOutputs.pollAgain(state, 5000);
33
39
  * }
34
40
  * return StepOutputs.success({ result: status });
35
41
  * }
36
42
  * }
43
+ *
44
+ * // Register with dependency injected
45
+ * StepRegistry.run([new LongJobStep(jobService)]);
37
46
  * ```
38
47
  *
39
48
  * @example With approval
40
49
  * ```typescript
41
50
  * @Step({ name: "Dangerous Job", type: "dangerous-job", schema: dangerousSchema })
42
51
  * class DangerousJobStep extends PollingStep<DangerousParams, DangerousPollingState> {
52
+ * constructor(private jobService: JobService) {
53
+ * super();
54
+ * }
55
+ *
43
56
  * async prepare(params: DangerousParams): Promise<PrepareOutput> {
44
57
  * return StepOutputs.approvalRequired({
45
58
  * message: `Run dangerous job on ${params.target}?`,
@@ -47,12 +60,16 @@ const base_step_1 = require("./base-step");
47
60
  * }
48
61
  *
49
62
  * async trigger(params: DangerousParams, approval: ApprovalContext): Promise<TriggerOutput<DangerousPollingState>> {
50
- * const jobId = await startDangerousJob(params);
63
+ * const jobId = await this.jobService.startDangerous(params);
51
64
  * return StepOutputs.triggered({ jobId });
52
65
  * }
53
66
  *
54
67
  * async poll(params: DangerousParams, state: DangerousPollingState): Promise<PollOutput<DangerousPollingState>> {
55
- * // ... check status
68
+ * const status = await this.jobService.checkStatus(state.jobId);
69
+ * if (status === "running") {
70
+ * return StepOutputs.pollAgain(state, 5000);
71
+ * }
72
+ * return StepOutputs.success();
56
73
  * }
57
74
  * }
58
75
  * ```
@@ -77,4 +94,4 @@ class PollingStep extends base_step_1.BaseStep {
77
94
  }
78
95
  }
79
96
  exports.PollingStep = PollingStep;
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbGluZy1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UvcG9sbGluZy1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJDQUF1QztBQVF2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0RHO0FBQ0gsTUFBc0IsV0FHcEIsU0FBUSxvQkFBaUI7SUF1QnpCOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQ2xCLE1BQWUsRUFDZixRQUEwQjtRQUUxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUNmLE1BQWUsRUFDZixZQUEyQjtRQUUzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYix5RUFBeUUsQ0FDMUUsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXJERCxrQ0FxREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0ZXBNZXRhZGF0YSB9IGZyb20gXCIuL2Jhc2Utc3RlcFwiO1xuaW1wb3J0IHsgQmFzZVN0ZXAgfSBmcm9tIFwiLi9iYXNlLXN0ZXBcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXBwcm92YWxDb250ZXh0LFxuICBQb2xsT3V0cHV0LFxuICBTdGVwT3V0cHV0LFxuICBUcmlnZ2VyT3V0cHV0LFxufSBmcm9tIFwiLi4vb3V0cHV0L3N0ZXAtb3V0cHV0XCI7XG5cbi8qKlxuICogQSBwb2xsaW5nIHN0ZXAgZm9yIGxvbmctcnVubmluZyBvcGVyYXRpb25zIHRoYXQgbmVlZCBzdGF0dXMgY2hlY2tzLlxuICpcbiAqIFVzZXJzIGV4dGVuZCB0aGlzIGNsYXNzIGFuZCBpbXBsZW1lbnQ6XG4gKiAtIGB0cmlnZ2VyKHBhcmFtcylgIC0gU3RhcnQgdGhlIG9wZXJhdGlvbiwgcmV0dXJuIGluaXRpYWwgcG9sbGluZyBzdGF0ZVxuICogLSBgcG9sbChwYXJhbXMsIHBvbGxpbmdTdGF0ZSlgIC0gQ2hlY2sgc3RhdHVzLCByZXR1cm4gUE9MTF9BR0FJTiwgU1VDQ0VTUywgb3IgRkFJTEVEXG4gKlxuICogT3B0aW9uYWxseSBvdmVycmlkZSBgcHJlcGFyZWAgdG8gcmVxdWlyZSBhcHByb3ZhbCBiZWZvcmUgdHJpZ2dlcmluZy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQYXJhbXMgLSBUaGUgaW5wdXQgcGFyYW1ldGVycyB0eXBlICh2YWxpZGF0ZWQgYnkgc2NoZW1hKVxuICogQHR5cGVQYXJhbSBUUG9sbGluZ1N0YXRlIC0gVGhlIHBvbGxpbmcgc3RhdGUgdHlwZSBwYXNzZWQgYmV0d2VlbiBwb2xsIGNhbGxzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHR5cGUgSm9iUGFyYW1zID0geyB0YXJnZXQ6IHN0cmluZyB9O1xuICogdHlwZSBKb2JQb2xsaW5nU3RhdGUgPSB7IGpvYklkOiBzdHJpbmc7IHN0YXJ0ZWRBdDogbnVtYmVyIH07XG4gKlxuICogQFN0ZXAoeyBuYW1lOiBcIkxvbmcgSm9iXCIsIHR5cGU6IFwibG9uZy1qb2JcIiwgc2NoZW1hOiBqb2JTY2hlbWEgfSlcbiAqIGNsYXNzIExvbmdKb2JTdGVwIGV4dGVuZHMgUG9sbGluZ1N0ZXA8Sm9iUGFyYW1zLCBKb2JQb2xsaW5nU3RhdGU+IHtcbiAqICAgYXN5bmMgdHJpZ2dlcihwYXJhbXM6IEpvYlBhcmFtcyk6IFByb21pc2U8VHJpZ2dlck91dHB1dDxKb2JQb2xsaW5nU3RhdGU+PiB7XG4gKiAgICAgY29uc3Qgam9iSWQgPSBhd2FpdCBzdGFydEpvYihwYXJhbXMpO1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy50cmlnZ2VyZWQoeyBqb2JJZCwgc3RhcnRlZEF0OiBEYXRlLm5vdygpIH0pO1xuICogICB9XG4gKlxuICogICBhc3luYyBwb2xsKHBhcmFtczogSm9iUGFyYW1zLCBzdGF0ZTogSm9iUG9sbGluZ1N0YXRlKTogUHJvbWlzZTxQb2xsT3V0cHV0PEpvYlBvbGxpbmdTdGF0ZT4+IHtcbiAqICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBjaGVja0pvYihzdGF0ZS5qb2JJZCk7XG4gKiAgICAgaWYgKHN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHtcbiAqICAgICAgIHJldHVybiBTdGVwT3V0cHV0cy5wb2xsQWdhaW4oc3RhdGUsIDUwMDApO1xuICogICAgIH1cbiAqICAgICByZXR1cm4gU3RlcE91dHB1dHMuc3VjY2Vzcyh7IHJlc3VsdDogc3RhdHVzIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIGFwcHJvdmFsXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAU3RlcCh7IG5hbWU6IFwiRGFuZ2Vyb3VzIEpvYlwiLCB0eXBlOiBcImRhbmdlcm91cy1qb2JcIiwgc2NoZW1hOiBkYW5nZXJvdXNTY2hlbWEgfSlcbiAqIGNsYXNzIERhbmdlcm91c0pvYlN0ZXAgZXh0ZW5kcyBQb2xsaW5nU3RlcDxEYW5nZXJvdXNQYXJhbXMsIERhbmdlcm91c1BvbGxpbmdTdGF0ZT4ge1xuICogICBhc3luYyBwcmVwYXJlKHBhcmFtczogRGFuZ2Vyb3VzUGFyYW1zKTogUHJvbWlzZTxQcmVwYXJlT3V0cHV0PiB7XG4gKiAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLmFwcHJvdmFsUmVxdWlyZWQoe1xuICogICAgICAgbWVzc2FnZTogYFJ1biBkYW5nZXJvdXMgam9iIG9uICR7cGFyYW1zLnRhcmdldH0/YCxcbiAqICAgICB9KTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgdHJpZ2dlcihwYXJhbXM6IERhbmdlcm91c1BhcmFtcywgYXBwcm92YWw6IEFwcHJvdmFsQ29udGV4dCk6IFByb21pc2U8VHJpZ2dlck91dHB1dDxEYW5nZXJvdXNQb2xsaW5nU3RhdGU+PiB7XG4gKiAgICAgY29uc3Qgam9iSWQgPSBhd2FpdCBzdGFydERhbmdlcm91c0pvYihwYXJhbXMpO1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy50cmlnZ2VyZWQoeyBqb2JJZCB9KTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgcG9sbChwYXJhbXM6IERhbmdlcm91c1BhcmFtcywgc3RhdGU6IERhbmdlcm91c1BvbGxpbmdTdGF0ZSk6IFByb21pc2U8UG9sbE91dHB1dDxEYW5nZXJvdXNQb2xsaW5nU3RhdGU+PiB7XG4gKiAgICAgLy8gLi4uIGNoZWNrIHN0YXR1c1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvbGxpbmdTdGVwPFxuICBUUGFyYW1zLFxuICBUUG9sbGluZ1N0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuPiBleHRlbmRzIEJhc2VTdGVwPFRQYXJhbXM+IHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZhbGlkYXRlZCBpbnB1dCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBhcHByb3ZhbCAtIEFwcHJvdmFsIGNvbnRleHQgaWYgdGhpcyBzdGVwIHJlcXVpcmVzIGFwcHJvdmFsIChoYXMgcHJlcGFyZSBtZXRob2QpXG4gICAqIEByZXR1cm5zIFRSSUdHRVJFRCB3aXRoIGluaXRpYWwgcG9sbGluZyBzdGF0ZSwgb3IgRkFJTEVEXG4gICAqL1xuICBhYnN0cmFjdCB0cmlnZ2VyKFxuICAgIHBhcmFtczogVFBhcmFtcyxcbiAgICBhcHByb3ZhbD86IEFwcHJvdmFsQ29udGV4dFxuICApOiBQcm9taXNlPFRyaWdnZXJPdXRwdXQ8VFBvbGxpbmdTdGF0ZT4+O1xuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgb3JpZ2luYWwgaW5wdXQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcG9sbGluZ1N0YXRlIC0gU3RhdGUgZnJvbSBwcmV2aW91cyB0cmlnZ2VyKCkgb3IgcG9sbCgpIGNhbGxcbiAgICogQHJldHVybnMgUE9MTF9BR0FJTiB3aXRoIHVwZGF0ZWQgc3RhdGUsIFNVQ0NFU1MsIG9yIEZBSUxFRFxuICAgKi9cbiAgYWJzdHJhY3QgcG9sbChcbiAgICBwYXJhbXM6IFRQYXJhbXMsXG4gICAgcG9sbGluZ1N0YXRlOiBUUG9sbGluZ1N0YXRlXG4gICk6IFByb21pc2U8UG9sbE91dHB1dDxUUG9sbGluZ1N0YXRlPj47XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcmVnaXN0cnkgdG8gZXhlY3V0ZSB0aGUgdHJpZ2dlciBwaGFzZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhc3luYyBleGVjdXRlVHJpZ2dlcihcbiAgICBwYXJhbXM6IFRQYXJhbXMsXG4gICAgYXBwcm92YWw/OiBBcHByb3ZhbENvbnRleHRcbiAgKTogUHJvbWlzZTxTdGVwT3V0cHV0PiB7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlcihwYXJhbXMsIGFwcHJvdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJlZ2lzdHJ5IHRvIGV4ZWN1dGUgdGhlIHBvbGwgcGhhc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZVBvbGwoXG4gICAgcGFyYW1zOiBUUGFyYW1zLFxuICAgIHBvbGxpbmdTdGF0ZTogVFBvbGxpbmdTdGF0ZVxuICApOiBQcm9taXNlPFN0ZXBPdXRwdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5wb2xsKHBhcmFtcywgcG9sbGluZ1N0YXRlKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJnZXRNZXRhZGF0YSBub3QgaW1wbGVtZW50ZWQuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCB0aGUgQFN0ZXAgZGVjb3JhdG9yP1wiXG4gICAgKTtcbiAgfVxufVxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbGluZy1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UvcG9sbGluZy1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJDQUF1QztBQVF2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RUc7QUFDSCxNQUFzQixXQUdwQixTQUFRLG9CQUFpQjtJQXVCekI7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FDbEIsTUFBZSxFQUNmLFFBQTBCO1FBRTFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQ2YsTUFBZSxFQUNmLFlBQTJCO1FBRTNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLElBQUksS0FBSyxDQUNiLHlFQUF5RSxDQUMxRSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBckRELGtDQXFEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RlcE1ldGFkYXRhIH0gZnJvbSBcIi4vYmFzZS1zdGVwXCI7XG5pbXBvcnQgeyBCYXNlU3RlcCB9IGZyb20gXCIuL2Jhc2Utc3RlcFwiO1xuaW1wb3J0IHR5cGUge1xuICBBcHByb3ZhbENvbnRleHQsXG4gIFBvbGxPdXRwdXQsXG4gIFN0ZXBPdXRwdXQsXG4gIFRyaWdnZXJPdXRwdXQsXG59IGZyb20gXCIuLi9vdXRwdXQvc3RlcC1vdXRwdXRcIjtcblxuLyoqXG4gKiBBIHBvbGxpbmcgc3RlcCBmb3IgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbnMgdGhhdCBuZWVkIHN0YXR1cyBjaGVja3MuXG4gKlxuICogVXNlcnMgZXh0ZW5kIHRoaXMgY2xhc3MgYW5kIGltcGxlbWVudDpcbiAqIC0gYHRyaWdnZXIocGFyYW1zKWAgLSBTdGFydCB0aGUgb3BlcmF0aW9uLCByZXR1cm4gaW5pdGlhbCBwb2xsaW5nIHN0YXRlXG4gKiAtIGBwb2xsKHBhcmFtcywgcG9sbGluZ1N0YXRlKWAgLSBDaGVjayBzdGF0dXMsIHJldHVybiBQT0xMX0FHQUlOLCBTVUNDRVNTLCBvciBGQUlMRURcbiAqXG4gKiBPcHRpb25hbGx5IG92ZXJyaWRlIGBwcmVwYXJlYCB0byByZXF1aXJlIGFwcHJvdmFsIGJlZm9yZSB0cmlnZ2VyaW5nLlxuICpcbiAqIFN0ZXBzIGNhbiBhY2NlcHQgY29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUUGFyYW1zIC0gVGhlIGlucHV0IHBhcmFtZXRlcnMgdHlwZSAodmFsaWRhdGVkIGJ5IHNjaGVtYSlcbiAqIEB0eXBlUGFyYW0gVFBvbGxpbmdTdGF0ZSAtIFRoZSBwb2xsaW5nIHN0YXRlIHR5cGUgcGFzc2VkIGJldHdlZW4gcG9sbCBjYWxsc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0eXBlIEpvYlBhcmFtcyA9IHsgdGFyZ2V0OiBzdHJpbmcgfTtcbiAqIHR5cGUgSm9iUG9sbGluZ1N0YXRlID0geyBqb2JJZDogc3RyaW5nOyBzdGFydGVkQXQ6IG51bWJlciB9O1xuICpcbiAqIEBTdGVwKHsgbmFtZTogXCJMb25nIEpvYlwiLCB0eXBlOiBcImxvbmctam9iXCIsIHNjaGVtYTogam9iU2NoZW1hIH0pXG4gKiBjbGFzcyBMb25nSm9iU3RlcCBleHRlbmRzIFBvbGxpbmdTdGVwPEpvYlBhcmFtcywgSm9iUG9sbGluZ1N0YXRlPiB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgam9iU2VydmljZTogSm9iU2VydmljZSkge1xuICogICAgIHN1cGVyKCk7XG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHRyaWdnZXIocGFyYW1zOiBKb2JQYXJhbXMpOiBQcm9taXNlPFRyaWdnZXJPdXRwdXQ8Sm9iUG9sbGluZ1N0YXRlPj4ge1xuICogICAgIGNvbnN0IGpvYklkID0gYXdhaXQgdGhpcy5qb2JTZXJ2aWNlLnN0YXJ0KHBhcmFtcyk7XG4gKiAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLnRyaWdnZXJlZCh7IGpvYklkLCBzdGFydGVkQXQ6IERhdGUubm93KCkgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHBvbGwocGFyYW1zOiBKb2JQYXJhbXMsIHN0YXRlOiBKb2JQb2xsaW5nU3RhdGUpOiBQcm9taXNlPFBvbGxPdXRwdXQ8Sm9iUG9sbGluZ1N0YXRlPj4ge1xuICogICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuam9iU2VydmljZS5jaGVja1N0YXR1cyhzdGF0ZS5qb2JJZCk7XG4gKiAgICAgaWYgKHN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHtcbiAqICAgICAgIHJldHVybiBTdGVwT3V0cHV0cy5wb2xsQWdhaW4oc3RhdGUsIDUwMDApO1xuICogICAgIH1cbiAqICAgICByZXR1cm4gU3RlcE91dHB1dHMuc3VjY2Vzcyh7IHJlc3VsdDogc3RhdHVzIH0pO1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gUmVnaXN0ZXIgd2l0aCBkZXBlbmRlbmN5IGluamVjdGVkXG4gKiBTdGVwUmVnaXN0cnkucnVuKFtuZXcgTG9uZ0pvYlN0ZXAoam9iU2VydmljZSldKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggYXBwcm92YWxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBTdGVwKHsgbmFtZTogXCJEYW5nZXJvdXMgSm9iXCIsIHR5cGU6IFwiZGFuZ2Vyb3VzLWpvYlwiLCBzY2hlbWE6IGRhbmdlcm91c1NjaGVtYSB9KVxuICogY2xhc3MgRGFuZ2Vyb3VzSm9iU3RlcCBleHRlbmRzIFBvbGxpbmdTdGVwPERhbmdlcm91c1BhcmFtcywgRGFuZ2Vyb3VzUG9sbGluZ1N0YXRlPiB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgam9iU2VydmljZTogSm9iU2VydmljZSkge1xuICogICAgIHN1cGVyKCk7XG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHByZXBhcmUocGFyYW1zOiBEYW5nZXJvdXNQYXJhbXMpOiBQcm9taXNlPFByZXBhcmVPdXRwdXQ+IHtcbiAqICAgICByZXR1cm4gU3RlcE91dHB1dHMuYXBwcm92YWxSZXF1aXJlZCh7XG4gKiAgICAgICBtZXNzYWdlOiBgUnVuIGRhbmdlcm91cyBqb2Igb24gJHtwYXJhbXMudGFyZ2V0fT9gLFxuICogICAgIH0pO1xuICogICB9XG4gKlxuICogICBhc3luYyB0cmlnZ2VyKHBhcmFtczogRGFuZ2Vyb3VzUGFyYW1zLCBhcHByb3ZhbDogQXBwcm92YWxDb250ZXh0KTogUHJvbWlzZTxUcmlnZ2VyT3V0cHV0PERhbmdlcm91c1BvbGxpbmdTdGF0ZT4+IHtcbiAqICAgICBjb25zdCBqb2JJZCA9IGF3YWl0IHRoaXMuam9iU2VydmljZS5zdGFydERhbmdlcm91cyhwYXJhbXMpO1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy50cmlnZ2VyZWQoeyBqb2JJZCB9KTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgcG9sbChwYXJhbXM6IERhbmdlcm91c1BhcmFtcywgc3RhdGU6IERhbmdlcm91c1BvbGxpbmdTdGF0ZSk6IFByb21pc2U8UG9sbE91dHB1dDxEYW5nZXJvdXNQb2xsaW5nU3RhdGU+PiB7XG4gKiAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5qb2JTZXJ2aWNlLmNoZWNrU3RhdHVzKHN0YXRlLmpvYklkKTtcbiAqICAgICBpZiAoc3RhdHVzID09PSBcInJ1bm5pbmdcIikge1xuICogICAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLnBvbGxBZ2FpbihzdGF0ZSwgNTAwMCk7XG4gKiAgICAgfVxuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy5zdWNjZXNzKCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9sbGluZ1N0ZXA8XG4gIFRQYXJhbXMsXG4gIFRQb2xsaW5nU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4+IGV4dGVuZHMgQmFzZVN0ZXA8VFBhcmFtcz4ge1xuICAvKipcbiAgICogU3RhcnQgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgdmFsaWRhdGVkIGlucHV0IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIGFwcHJvdmFsIC0gQXBwcm92YWwgY29udGV4dCBpZiB0aGlzIHN0ZXAgcmVxdWlyZXMgYXBwcm92YWwgKGhhcyBwcmVwYXJlIG1ldGhvZClcbiAgICogQHJldHVybnMgVFJJR0dFUkVEIHdpdGggaW5pdGlhbCBwb2xsaW5nIHN0YXRlLCBvciBGQUlMRURcbiAgICovXG4gIGFic3RyYWN0IHRyaWdnZXIoXG4gICAgcGFyYW1zOiBUUGFyYW1zLFxuICAgIGFwcHJvdmFsPzogQXBwcm92YWxDb250ZXh0XG4gICk6IFByb21pc2U8VHJpZ2dlck91dHB1dDxUUG9sbGluZ1N0YXRlPj47XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvcmlnaW5hbCBpbnB1dCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBwb2xsaW5nU3RhdGUgLSBTdGF0ZSBmcm9tIHByZXZpb3VzIHRyaWdnZXIoKSBvciBwb2xsKCkgY2FsbFxuICAgKiBAcmV0dXJucyBQT0xMX0FHQUlOIHdpdGggdXBkYXRlZCBzdGF0ZSwgU1VDQ0VTUywgb3IgRkFJTEVEXG4gICAqL1xuICBhYnN0cmFjdCBwb2xsKFxuICAgIHBhcmFtczogVFBhcmFtcyxcbiAgICBwb2xsaW5nU3RhdGU6IFRQb2xsaW5nU3RhdGVcbiAgKTogUHJvbWlzZTxQb2xsT3V0cHV0PFRQb2xsaW5nU3RhdGU+PjtcblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSByZWdpc3RyeSB0byBleGVjdXRlIHRoZSB0cmlnZ2VyIHBoYXNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVUcmlnZ2VyKFxuICAgIHBhcmFtczogVFBhcmFtcyxcbiAgICBhcHByb3ZhbD86IEFwcHJvdmFsQ29udGV4dFxuICApOiBQcm9taXNlPFN0ZXBPdXRwdXQ+IHtcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyKHBhcmFtcywgYXBwcm92YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcmVnaXN0cnkgdG8gZXhlY3V0ZSB0aGUgcG9sbCBwaGFzZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhc3luYyBleGVjdXRlUG9sbChcbiAgICBwYXJhbXM6IFRQYXJhbXMsXG4gICAgcG9sbGluZ1N0YXRlOiBUUG9sbGluZ1N0YXRlXG4gICk6IFByb21pc2U8U3RlcE91dHB1dD4ge1xuICAgIHJldHVybiB0aGlzLnBvbGwocGFyYW1zLCBwb2xsaW5nU3RhdGUpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoKTogU3RlcE1ldGFkYXRhIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImdldE1ldGFkYXRhIG5vdCBpbXBsZW1lbnRlZC4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIHRoZSBAU3RlcCBkZWNvcmF0b3I/XCJcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -7,21 +7,35 @@ import type { ApprovalContext, RunOutput, StepOutput } from "../output/step-outp
7
7
  * Users extend this class and implement the `run` method.
8
8
  * Optionally override `prepare` to require approval before execution.
9
9
  *
10
+ * Steps can accept constructor parameters for dependency injection.
11
+ *
10
12
  * @example
11
13
  * ```typescript
12
14
  * @Step({ name: "Deploy", type: "deploy", schema: deploySchema })
13
15
  * class DeployStep extends SimpleStep<DeployParams> {
16
+ * constructor(private deployService: DeployService) {
17
+ * super();
18
+ * }
19
+ *
14
20
  * async run(params: DeployParams): Promise<RunOutput> {
15
21
  * this.logger.info("Deploying", { target: params.target });
16
- * return StepOutputs.success({ deploymentId: "123" });
22
+ * const result = await this.deployService.deploy(params.target);
23
+ * return StepOutputs.success({ deploymentId: result.id });
17
24
  * }
18
25
  * }
26
+ *
27
+ * // Register with dependency injected
28
+ * StepRegistry.run([new DeployStep(deployService)]);
19
29
  * ```
20
30
  *
21
31
  * @example With approval
22
32
  * ```typescript
23
33
  * @Step({ name: "Delete User", type: "delete-user", schema: deleteUserSchema })
24
34
  * class DeleteUserStep extends SimpleStep<DeleteUserParams> {
35
+ * constructor(private userService: UserService) {
36
+ * super();
37
+ * }
38
+ *
25
39
  * async prepare(params: DeleteUserParams): Promise<PrepareOutput> {
26
40
  * return StepOutputs.approvalRequired({
27
41
  * message: `Delete user ${params.userId}?`,
@@ -30,6 +44,7 @@ import type { ApprovalContext, RunOutput, StepOutput } from "../output/step-outp
30
44
  *
31
45
  * async run(params: DeleteUserParams, approval: ApprovalContext): Promise<RunOutput> {
32
46
  * this.logger.info("Deleting user", { approvedBy: approval.approverId });
47
+ * await this.userService.delete(params.userId);
33
48
  * return StepOutputs.success();
34
49
  * }
35
50
  * }
@@ -8,21 +8,35 @@ const base_step_1 = require("./base-step");
8
8
  * Users extend this class and implement the `run` method.
9
9
  * Optionally override `prepare` to require approval before execution.
10
10
  *
11
+ * Steps can accept constructor parameters for dependency injection.
12
+ *
11
13
  * @example
12
14
  * ```typescript
13
15
  * @Step({ name: "Deploy", type: "deploy", schema: deploySchema })
14
16
  * class DeployStep extends SimpleStep<DeployParams> {
17
+ * constructor(private deployService: DeployService) {
18
+ * super();
19
+ * }
20
+ *
15
21
  * async run(params: DeployParams): Promise<RunOutput> {
16
22
  * this.logger.info("Deploying", { target: params.target });
17
- * return StepOutputs.success({ deploymentId: "123" });
23
+ * const result = await this.deployService.deploy(params.target);
24
+ * return StepOutputs.success({ deploymentId: result.id });
18
25
  * }
19
26
  * }
27
+ *
28
+ * // Register with dependency injected
29
+ * StepRegistry.run([new DeployStep(deployService)]);
20
30
  * ```
21
31
  *
22
32
  * @example With approval
23
33
  * ```typescript
24
34
  * @Step({ name: "Delete User", type: "delete-user", schema: deleteUserSchema })
25
35
  * class DeleteUserStep extends SimpleStep<DeleteUserParams> {
36
+ * constructor(private userService: UserService) {
37
+ * super();
38
+ * }
39
+ *
26
40
  * async prepare(params: DeleteUserParams): Promise<PrepareOutput> {
27
41
  * return StepOutputs.approvalRequired({
28
42
  * message: `Delete user ${params.userId}?`,
@@ -31,6 +45,7 @@ const base_step_1 = require("./base-step");
31
45
  *
32
46
  * async run(params: DeleteUserParams, approval: ApprovalContext): Promise<RunOutput> {
33
47
  * this.logger.info("Deleting user", { approvedBy: approval.approverId });
48
+ * await this.userService.delete(params.userId);
34
49
  * return StepOutputs.success();
35
50
  * }
36
51
  * }
@@ -49,4 +64,4 @@ class SimpleStep extends base_step_1.BaseStep {
49
64
  }
50
65
  }
51
66
  exports.SimpleStep = SimpleStep;
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFzZS9zaW1wbGUtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyQ0FBdUM7QUFHdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQXNCLFVBQW9CLFNBQVEsb0JBQWlCO0lBUWpFOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBZSxFQUFFLFFBQTBCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLElBQUksS0FBSyxDQUNiLHlFQUF5RSxDQUMxRSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBckJELGdDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RlcE1ldGFkYXRhIH0gZnJvbSBcIi4vYmFzZS1zdGVwXCI7XG5pbXBvcnQgeyBCYXNlU3RlcCB9IGZyb20gXCIuL2Jhc2Utc3RlcFwiO1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbENvbnRleHQsIFJ1bk91dHB1dCwgU3RlcE91dHB1dCB9IGZyb20gXCIuLi9vdXRwdXQvc3RlcC1vdXRwdXRcIjtcblxuLyoqXG4gKiBBIHNpbXBsZSBzdGVwIHRoYXQgcnVucyBvbmNlIHdpdGggdGhlIHByb3ZpZGVkIHBhcmFtcy5cbiAqXG4gKiBVc2VycyBleHRlbmQgdGhpcyBjbGFzcyBhbmQgaW1wbGVtZW50IHRoZSBgcnVuYCBtZXRob2QuXG4gKiBPcHRpb25hbGx5IG92ZXJyaWRlIGBwcmVwYXJlYCB0byByZXF1aXJlIGFwcHJvdmFsIGJlZm9yZSBleGVjdXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBTdGVwKHsgbmFtZTogXCJEZXBsb3lcIiwgdHlwZTogXCJkZXBsb3lcIiwgc2NoZW1hOiBkZXBsb3lTY2hlbWEgfSlcbiAqIGNsYXNzIERlcGxveVN0ZXAgZXh0ZW5kcyBTaW1wbGVTdGVwPERlcGxveVBhcmFtcz4ge1xuICogICBhc3luYyBydW4ocGFyYW1zOiBEZXBsb3lQYXJhbXMpOiBQcm9taXNlPFJ1bk91dHB1dD4ge1xuICogICAgIHRoaXMubG9nZ2VyLmluZm8oXCJEZXBsb3lpbmdcIiwgeyB0YXJnZXQ6IHBhcmFtcy50YXJnZXQgfSk7XG4gKiAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLnN1Y2Nlc3MoeyBkZXBsb3ltZW50SWQ6IFwiMTIzXCIgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggYXBwcm92YWxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBTdGVwKHsgbmFtZTogXCJEZWxldGUgVXNlclwiLCB0eXBlOiBcImRlbGV0ZS11c2VyXCIsIHNjaGVtYTogZGVsZXRlVXNlclNjaGVtYSB9KVxuICogY2xhc3MgRGVsZXRlVXNlclN0ZXAgZXh0ZW5kcyBTaW1wbGVTdGVwPERlbGV0ZVVzZXJQYXJhbXM+IHtcbiAqICAgYXN5bmMgcHJlcGFyZShwYXJhbXM6IERlbGV0ZVVzZXJQYXJhbXMpOiBQcm9taXNlPFByZXBhcmVPdXRwdXQ+IHtcbiAqICAgICByZXR1cm4gU3RlcE91dHB1dHMuYXBwcm92YWxSZXF1aXJlZCh7XG4gKiAgICAgICBtZXNzYWdlOiBgRGVsZXRlIHVzZXIgJHtwYXJhbXMudXNlcklkfT9gLFxuICogICAgIH0pO1xuICogICB9XG4gKlxuICogICBhc3luYyBydW4ocGFyYW1zOiBEZWxldGVVc2VyUGFyYW1zLCBhcHByb3ZhbDogQXBwcm92YWxDb250ZXh0KTogUHJvbWlzZTxSdW5PdXRwdXQ+IHtcbiAqICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiRGVsZXRpbmcgdXNlclwiLCB7IGFwcHJvdmVkQnk6IGFwcHJvdmFsLmFwcHJvdmVySWQgfSk7XG4gKiAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLnN1Y2Nlc3MoKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTaW1wbGVTdGVwPFRQYXJhbXM+IGV4dGVuZHMgQmFzZVN0ZXA8VFBhcmFtcz4ge1xuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgc3RlcCBsb2dpYy5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2YWxpZGF0ZWQgaW5wdXQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gYXBwcm92YWwgLSBBcHByb3ZhbCBjb250ZXh0IGlmIHRoaXMgc3RlcCByZXF1aXJlcyBhcHByb3ZhbCAoaGFzIHByZXBhcmUgbWV0aG9kKVxuICAgKi9cbiAgYWJzdHJhY3QgcnVuKHBhcmFtczogVFBhcmFtcywgYXBwcm92YWw/OiBBcHByb3ZhbENvbnRleHQpOiBQcm9taXNlPFJ1bk91dHB1dD47XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcmVnaXN0cnkgdG8gZXhlY3V0ZSB0aGlzIHN0ZXAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShwYXJhbXM6IFRQYXJhbXMsIGFwcHJvdmFsPzogQXBwcm92YWxDb250ZXh0KTogUHJvbWlzZTxTdGVwT3V0cHV0PiB7XG4gICAgcmV0dXJuIHRoaXMucnVuKHBhcmFtcywgYXBwcm92YWwpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoKTogU3RlcE1ldGFkYXRhIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImdldE1ldGFkYXRhIG5vdCBpbXBsZW1lbnRlZC4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIHRoZSBAU3RlcCBkZWNvcmF0b3I/XCJcbiAgICApO1xuICB9XG59XG4iXX0=
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFzZS9zaW1wbGUtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyQ0FBdUM7QUFHdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdERztBQUNILE1BQXNCLFVBQW9CLFNBQVEsb0JBQWlCO0lBUWpFOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBZSxFQUFFLFFBQTBCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLElBQUksS0FBSyxDQUNiLHlFQUF5RSxDQUMxRSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBckJELGdDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RlcE1ldGFkYXRhIH0gZnJvbSBcIi4vYmFzZS1zdGVwXCI7XG5pbXBvcnQgeyBCYXNlU3RlcCB9IGZyb20gXCIuL2Jhc2Utc3RlcFwiO1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbENvbnRleHQsIFJ1bk91dHB1dCwgU3RlcE91dHB1dCB9IGZyb20gXCIuLi9vdXRwdXQvc3RlcC1vdXRwdXRcIjtcblxuLyoqXG4gKiBBIHNpbXBsZSBzdGVwIHRoYXQgcnVucyBvbmNlIHdpdGggdGhlIHByb3ZpZGVkIHBhcmFtcy5cbiAqXG4gKiBVc2VycyBleHRlbmQgdGhpcyBjbGFzcyBhbmQgaW1wbGVtZW50IHRoZSBgcnVuYCBtZXRob2QuXG4gKiBPcHRpb25hbGx5IG92ZXJyaWRlIGBwcmVwYXJlYCB0byByZXF1aXJlIGFwcHJvdmFsIGJlZm9yZSBleGVjdXRpb24uXG4gKlxuICogU3RlcHMgY2FuIGFjY2VwdCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQFN0ZXAoeyBuYW1lOiBcIkRlcGxveVwiLCB0eXBlOiBcImRlcGxveVwiLCBzY2hlbWE6IGRlcGxveVNjaGVtYSB9KVxuICogY2xhc3MgRGVwbG95U3RlcCBleHRlbmRzIFNpbXBsZVN0ZXA8RGVwbG95UGFyYW1zPiB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGVwbG95U2VydmljZTogRGVwbG95U2VydmljZSkge1xuICogICAgIHN1cGVyKCk7XG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHJ1bihwYXJhbXM6IERlcGxveVBhcmFtcyk6IFByb21pc2U8UnVuT3V0cHV0PiB7XG4gKiAgICAgdGhpcy5sb2dnZXIuaW5mbyhcIkRlcGxveWluZ1wiLCB7IHRhcmdldDogcGFyYW1zLnRhcmdldCB9KTtcbiAqICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRlcGxveVNlcnZpY2UuZGVwbG95KHBhcmFtcy50YXJnZXQpO1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy5zdWNjZXNzKHsgZGVwbG95bWVudElkOiByZXN1bHQuaWQgfSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBSZWdpc3RlciB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0ZWRcbiAqIFN0ZXBSZWdpc3RyeS5ydW4oW25ldyBEZXBsb3lTdGVwKGRlcGxveVNlcnZpY2UpXSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIGFwcHJvdmFsXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAU3RlcCh7IG5hbWU6IFwiRGVsZXRlIFVzZXJcIiwgdHlwZTogXCJkZWxldGUtdXNlclwiLCBzY2hlbWE6IGRlbGV0ZVVzZXJTY2hlbWEgfSlcbiAqIGNsYXNzIERlbGV0ZVVzZXJTdGVwIGV4dGVuZHMgU2ltcGxlU3RlcDxEZWxldGVVc2VyUGFyYW1zPiB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XG4gKiAgICAgc3VwZXIoKTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgcHJlcGFyZShwYXJhbXM6IERlbGV0ZVVzZXJQYXJhbXMpOiBQcm9taXNlPFByZXBhcmVPdXRwdXQ+IHtcbiAqICAgICByZXR1cm4gU3RlcE91dHB1dHMuYXBwcm92YWxSZXF1aXJlZCh7XG4gKiAgICAgICBtZXNzYWdlOiBgRGVsZXRlIHVzZXIgJHtwYXJhbXMudXNlcklkfT9gLFxuICogICAgIH0pO1xuICogICB9XG4gKlxuICogICBhc3luYyBydW4ocGFyYW1zOiBEZWxldGVVc2VyUGFyYW1zLCBhcHByb3ZhbDogQXBwcm92YWxDb250ZXh0KTogUHJvbWlzZTxSdW5PdXRwdXQ+IHtcbiAqICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiRGVsZXRpbmcgdXNlclwiLCB7IGFwcHJvdmVkQnk6IGFwcHJvdmFsLmFwcHJvdmVySWQgfSk7XG4gKiAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5kZWxldGUocGFyYW1zLnVzZXJJZCk7XG4gKiAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLnN1Y2Nlc3MoKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTaW1wbGVTdGVwPFRQYXJhbXM+IGV4dGVuZHMgQmFzZVN0ZXA8VFBhcmFtcz4ge1xuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgc3RlcCBsb2dpYy5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2YWxpZGF0ZWQgaW5wdXQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gYXBwcm92YWwgLSBBcHByb3ZhbCBjb250ZXh0IGlmIHRoaXMgc3RlcCByZXF1aXJlcyBhcHByb3ZhbCAoaGFzIHByZXBhcmUgbWV0aG9kKVxuICAgKi9cbiAgYWJzdHJhY3QgcnVuKHBhcmFtczogVFBhcmFtcywgYXBwcm92YWw/OiBBcHByb3ZhbENvbnRleHQpOiBQcm9taXNlPFJ1bk91dHB1dD47XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcmVnaXN0cnkgdG8gZXhlY3V0ZSB0aGlzIHN0ZXAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShwYXJhbXM6IFRQYXJhbXMsIGFwcHJvdmFsPzogQXBwcm92YWxDb250ZXh0KTogUHJvbWlzZTxTdGVwT3V0cHV0PiB7XG4gICAgcmV0dXJuIHRoaXMucnVuKHBhcmFtcywgYXBwcm92YWwpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoKTogU3RlcE1ldGFkYXRhIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImdldE1ldGFkYXRhIG5vdCBpbXBsZW1lbnRlZC4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIHRoZSBAU3RlcCBkZWNvcmF0b3I/XCJcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -18,10 +18,18 @@ export interface StepConfig<S extends ZodType> {
18
18
  * ```typescript
19
19
  * @Step({ name: "My Step", type: "my-step", schema: mySchema })
20
20
  * class MyStep extends SimpleStep<MyParams> {
21
+ * constructor(private apiClient: ApiClient) {
22
+ * super();
23
+ * }
24
+ *
21
25
  * async run(params: MyParams): Promise<RunOutput> {
26
+ * await this.apiClient.doSomething();
22
27
  * return StepOutputs.success();
23
28
  * }
24
29
  * }
30
+ *
31
+ * // Register with dependencies injected
32
+ * StepRegistry.run([new MyStep(apiClient)]);
25
33
  * ```
26
34
  */
27
35
  export declare function Step<S extends ZodType>(config: StepConfig<S>): <T extends new (...args: any[]) => BaseStep<z.infer<S>>>(Base: T) => T;
@@ -13,10 +13,18 @@ const base_step_1 = require("../base/base-step");
13
13
  * ```typescript
14
14
  * @Step({ name: "My Step", type: "my-step", schema: mySchema })
15
15
  * class MyStep extends SimpleStep<MyParams> {
16
+ * constructor(private apiClient: ApiClient) {
17
+ * super();
18
+ * }
19
+ *
16
20
  * async run(params: MyParams): Promise<RunOutput> {
21
+ * await this.apiClient.doSomething();
17
22
  * return StepOutputs.success();
18
23
  * }
19
24
  * }
25
+ *
26
+ * // Register with dependencies injected
27
+ * StepRegistry.run([new MyStep(apiClient)]);
20
28
  * ```
21
29
  */
22
30
  function Step(config) {
@@ -47,4 +55,4 @@ function Step(config) {
47
55
  return Enhanced;
48
56
  };
49
57
  }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL3N0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE2QkEsb0JBa0NDO0FBL0RELDZCQUFzQztBQUV0QyxpREFBNkM7QUFXN0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFvQixNQUFxQjtJQUMzRCxPQUFPLFVBQ0wsSUFBTztRQUVQLE1BQU0sUUFBUSxHQUFHLEtBQU0sU0FBUSxJQUFJO1lBQ3hCLFdBQVc7Z0JBQ2xCLHVEQUF1RDtnQkFDdkQsTUFBTSxpQkFBaUIsR0FDckIsU0FBUyxJQUFJLElBQUk7b0JBQ2pCLE9BQVEsSUFBWSxDQUFDLE9BQU8sS0FBSyxVQUFVO29CQUMzQyxNQUFNLElBQUksSUFBSTtvQkFDZCxPQUFRLElBQVksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO2dCQUUzQyxNQUFNLFFBQVEsR0FBYSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBRXBFLG9FQUFvRTtnQkFDcEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLG9CQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFFckUsT0FBTztvQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDckIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtvQkFDekMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO29CQUN2QyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0JBQy9CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtvQkFDckIsVUFBVSxFQUFFLE9BQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQkFDekMsUUFBUTtvQkFDUixnQkFBZ0I7aUJBQ2pCLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQztRQUVGLE9BQU8sUUFBYSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFpvZFR5cGUsIHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXBLaW5kLCBTdGVwTWV0YWRhdGEgfSBmcm9tIFwiLi4vYmFzZS9iYXNlLXN0ZXBcIjtcbmltcG9ydCB7IEJhc2VTdGVwIH0gZnJvbSBcIi4uL2Jhc2UvYmFzZS1zdGVwXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcENvbmZpZzxTIGV4dGVuZHMgWm9kVHlwZT4ge1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHNob3J0RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxvbmdEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgeWFtbEV4YW1wbGU/OiBzdHJpbmc7XG4gIHNjaGVtYTogUztcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBhZGRzIG1ldGFkYXRhIHRvIGEgc3RlcCBjbGFzcy5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBzdGVwcyB0byBiZSByZWdpc3RlcmVkIHdpdGggU3RlcFJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBkZWNvcmF0ZWQgY2xhc3MgbXVzdCBleHRlbmQgU2ltcGxlU3RlcCBvciBQb2xsaW5nU3RlcC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQFN0ZXAoeyBuYW1lOiBcIk15IFN0ZXBcIiwgdHlwZTogXCJteS1zdGVwXCIsIHNjaGVtYTogbXlTY2hlbWEgfSlcbiAqIGNsYXNzIE15U3RlcCBleHRlbmRzIFNpbXBsZVN0ZXA8TXlQYXJhbXM+IHtcbiAqICAgYXN5bmMgcnVuKHBhcmFtczogTXlQYXJhbXMpOiBQcm9taXNlPFJ1bk91dHB1dD4ge1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy5zdWNjZXNzKCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gU3RlcDxTIGV4dGVuZHMgWm9kVHlwZT4oY29uZmlnOiBTdGVwQ29uZmlnPFM+KSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IEJhc2VTdGVwPHouaW5mZXI8Uz4+PihcbiAgICBCYXNlOiBUXG4gICk6IFQge1xuICAgIGNvbnN0IEVuaGFuY2VkID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHtcbiAgICAgIG92ZXJyaWRlIGdldE1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YTxTPiB7XG4gICAgICAgIC8vIERldGVjdCBzdGVwIGtpbmQgYnkgY2hlY2tpbmcgZm9yIFBvbGxpbmdTdGVwIG1ldGhvZHNcbiAgICAgICAgY29uc3QgaGFzUG9sbGluZ01ldGhvZHMgPVxuICAgICAgICAgIFwidHJpZ2dlclwiIGluIHRoaXMgJiZcbiAgICAgICAgICB0eXBlb2YgKHRoaXMgYXMgYW55KS50cmlnZ2VyID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICBcInBvbGxcIiBpbiB0aGlzICYmXG4gICAgICAgICAgdHlwZW9mICh0aGlzIGFzIGFueSkucG9sbCA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICAgIGNvbnN0IHN0ZXBLaW5kOiBTdGVwS2luZCA9IGhhc1BvbGxpbmdNZXRob2RzID8gXCJwb2xsaW5nXCIgOiBcInNpbXBsZVwiO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHByZXBhcmUgaXMgb3ZlcnJpZGRlbiAobm90IHRoZSBkZWZhdWx0IEJhc2VTdGVwLnByZXBhcmUpXG4gICAgICAgIGNvbnN0IHJlcXVpcmVzQXBwcm92YWwgPSB0aGlzLnByZXBhcmUgIT09IEJhc2VTdGVwLnByb3RvdHlwZS5wcmVwYXJlO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgICAgc3RlcFR5cGU6IGNvbmZpZy50eXBlLFxuICAgICAgICAgIHNob3J0RGVzY3JpcHRpb246IGNvbmZpZy5zaG9ydERlc2NyaXB0aW9uLFxuICAgICAgICAgIGxvbmdEZXNjcmlwdGlvbjogY29uZmlnLmxvbmdEZXNjcmlwdGlvbixcbiAgICAgICAgICB5YW1sRXhhbXBsZTogY29uZmlnLnlhbWxFeGFtcGxlLFxuICAgICAgICAgIHNjaGVtYTogY29uZmlnLnNjaGVtYSxcbiAgICAgICAgICBqc29uU2NoZW1hOiB6LnRvSlNPTlNjaGVtYShjb25maWcuc2NoZW1hKSxcbiAgICAgICAgICBzdGVwS2luZCxcbiAgICAgICAgICByZXF1aXJlc0FwcHJvdmFsLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gRW5oYW5jZWQgYXMgVDtcbiAgfTtcbn1cbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL3N0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFxQ0Esb0JBa0NDO0FBdkVELDZCQUFzQztBQUV0QyxpREFBNkM7QUFXN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFvQixNQUFxQjtJQUMzRCxPQUFPLFVBQ0wsSUFBTztRQUVQLE1BQU0sUUFBUSxHQUFHLEtBQU0sU0FBUSxJQUFJO1lBQ3hCLFdBQVc7Z0JBQ2xCLHVEQUF1RDtnQkFDdkQsTUFBTSxpQkFBaUIsR0FDckIsU0FBUyxJQUFJLElBQUk7b0JBQ2pCLE9BQVEsSUFBWSxDQUFDLE9BQU8sS0FBSyxVQUFVO29CQUMzQyxNQUFNLElBQUksSUFBSTtvQkFDZCxPQUFRLElBQVksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO2dCQUUzQyxNQUFNLFFBQVEsR0FBYSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBRXBFLG9FQUFvRTtnQkFDcEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLG9CQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFFckUsT0FBTztvQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDckIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtvQkFDekMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO29CQUN2QyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0JBQy9CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtvQkFDckIsVUFBVSxFQUFFLE9BQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQkFDekMsUUFBUTtvQkFDUixnQkFBZ0I7aUJBQ2pCLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQztRQUVGLE9BQU8sUUFBYSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFpvZFR5cGUsIHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXBLaW5kLCBTdGVwTWV0YWRhdGEgfSBmcm9tIFwiLi4vYmFzZS9iYXNlLXN0ZXBcIjtcbmltcG9ydCB7IEJhc2VTdGVwIH0gZnJvbSBcIi4uL2Jhc2UvYmFzZS1zdGVwXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcENvbmZpZzxTIGV4dGVuZHMgWm9kVHlwZT4ge1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHNob3J0RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxvbmdEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgeWFtbEV4YW1wbGU/OiBzdHJpbmc7XG4gIHNjaGVtYTogUztcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBhZGRzIG1ldGFkYXRhIHRvIGEgc3RlcCBjbGFzcy5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBzdGVwcyB0byBiZSByZWdpc3RlcmVkIHdpdGggU3RlcFJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBkZWNvcmF0ZWQgY2xhc3MgbXVzdCBleHRlbmQgU2ltcGxlU3RlcCBvciBQb2xsaW5nU3RlcC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQFN0ZXAoeyBuYW1lOiBcIk15IFN0ZXBcIiwgdHlwZTogXCJteS1zdGVwXCIsIHNjaGVtYTogbXlTY2hlbWEgfSlcbiAqIGNsYXNzIE15U3RlcCBleHRlbmRzIFNpbXBsZVN0ZXA8TXlQYXJhbXM+IHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlDbGllbnQ6IEFwaUNsaWVudCkge1xuICogICAgIHN1cGVyKCk7XG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHJ1bihwYXJhbXM6IE15UGFyYW1zKTogUHJvbWlzZTxSdW5PdXRwdXQ+IHtcbiAqICAgICBhd2FpdCB0aGlzLmFwaUNsaWVudC5kb1NvbWV0aGluZygpO1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy5zdWNjZXNzKCk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBSZWdpc3RlciB3aXRoIGRlcGVuZGVuY2llcyBpbmplY3RlZFxuICogU3RlcFJlZ2lzdHJ5LnJ1bihbbmV3IE15U3RlcChhcGlDbGllbnQpXSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFN0ZXA8UyBleHRlbmRzIFpvZFR5cGU+KGNvbmZpZzogU3RlcENvbmZpZzxTPikge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBCYXNlU3RlcDx6LmluZmVyPFM+Pj4oXG4gICAgQmFzZTogVFxuICApOiBUIHtcbiAgICBjb25zdCBFbmhhbmNlZCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7XG4gICAgICBvdmVycmlkZSBnZXRNZXRhZGF0YSgpOiBTdGVwTWV0YWRhdGE8Uz4ge1xuICAgICAgICAvLyBEZXRlY3Qgc3RlcCBraW5kIGJ5IGNoZWNraW5nIGZvciBQb2xsaW5nU3RlcCBtZXRob2RzXG4gICAgICAgIGNvbnN0IGhhc1BvbGxpbmdNZXRob2RzID1cbiAgICAgICAgICBcInRyaWdnZXJcIiBpbiB0aGlzICYmXG4gICAgICAgICAgdHlwZW9mICh0aGlzIGFzIGFueSkudHJpZ2dlciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgXCJwb2xsXCIgaW4gdGhpcyAmJlxuICAgICAgICAgIHR5cGVvZiAodGhpcyBhcyBhbnkpLnBvbGwgPT09IFwiZnVuY3Rpb25cIjtcblxuICAgICAgICBjb25zdCBzdGVwS2luZDogU3RlcEtpbmQgPSBoYXNQb2xsaW5nTWV0aG9kcyA/IFwicG9sbGluZ1wiIDogXCJzaW1wbGVcIjtcblxuICAgICAgICAvLyBDaGVjayBpZiBwcmVwYXJlIGlzIG92ZXJyaWRkZW4gKG5vdCB0aGUgZGVmYXVsdCBCYXNlU3RlcC5wcmVwYXJlKVxuICAgICAgICBjb25zdCByZXF1aXJlc0FwcHJvdmFsID0gdGhpcy5wcmVwYXJlICE9PSBCYXNlU3RlcC5wcm90b3R5cGUucHJlcGFyZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICAgIHN0ZXBUeXBlOiBjb25maWcudHlwZSxcbiAgICAgICAgICBzaG9ydERlc2NyaXB0aW9uOiBjb25maWcuc2hvcnREZXNjcmlwdGlvbixcbiAgICAgICAgICBsb25nRGVzY3JpcHRpb246IGNvbmZpZy5sb25nRGVzY3JpcHRpb24sXG4gICAgICAgICAgeWFtbEV4YW1wbGU6IGNvbmZpZy55YW1sRXhhbXBsZSxcbiAgICAgICAgICBzY2hlbWE6IGNvbmZpZy5zY2hlbWEsXG4gICAgICAgICAganNvblNjaGVtYTogei50b0pTT05TY2hlbWEoY29uZmlnLnNjaGVtYSksXG4gICAgICAgICAgc3RlcEtpbmQsXG4gICAgICAgICAgcmVxdWlyZXNBcHByb3ZhbCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIEVuaGFuY2VkIGFzIFQ7XG4gIH07XG59XG4iXX0=
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { BaseStep, StepClass, StepMetadata, StepKind } from "./base/base-step";
1
+ export { BaseStep, StepMetadata, StepKind } from "./base/base-step";
2
2
  export { SimpleStep } from "./base/simple-step";
3
3
  export { PollingStep } from "./base/polling-step";
4
4
  export { Step, StepConfig } from "./decorators/step";
package/dist/index.js CHANGED
@@ -32,4 +32,4 @@ Object.defineProperty(exports, "StepRegistryInputSchema", { enumerable: true, ge
32
32
  // Logging
33
33
  var step_logger_1 = require("./logging/step-logger");
34
34
  Object.defineProperty(exports, "StepLogger", { enumerable: true, get: function () { return step_logger_1.StepLogger; } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGdGQUFnRjtBQUNoRix3QkFBd0I7QUFDeEIsZ0ZBQWdGOzs7QUFFaEYsa0NBQWtDO0FBQ2xDLDhDQUErRTtBQUF0RSxxR0FBQSxRQUFRLE9BQUE7QUFDakIsa0RBQWdEO0FBQXZDLHlHQUFBLFVBQVUsT0FBQTtBQUNuQixvREFBa0Q7QUFBekMsMkdBQUEsV0FBVyxPQUFBO0FBRXBCLHlDQUF5QztBQUN6QywwQ0FBcUQ7QUFBNUMsNEZBQUEsSUFBSSxPQUFBO0FBRWIsb0NBQW9DO0FBQ3BDLG9EQXlCOEI7QUF0QjVCLG9IQUFBLHFCQUFxQixPQUFBO0FBY3JCLGdDQUFnQztBQUNoQyxrSEFBQSxtQkFBbUIsT0FBQTtBQUNuQiw4R0FBQSxlQUFlLE9BQUE7QUFDZixrSEFBQSxtQkFBbUIsT0FBQTtBQUNuQiwrR0FBQSxnQkFBZ0IsT0FBQTtBQUNoQiwrR0FBQSxnQkFBZ0IsT0FBQTtBQUNoQixtQkFBbUI7QUFDbkIsMEdBQUEsV0FBVyxPQUFBO0FBR2IsNkJBQTZCO0FBQzdCLDBEQUFvRztBQUEzRiw2R0FBQSxZQUFZLE9BQUE7QUFBcUIsd0hBQUEsdUJBQXVCLE9BQUE7QUFFakUsVUFBVTtBQUNWLHFEQUF5RjtBQUFoRix5R0FBQSxVQUFVLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3RlcCBTREsgLSBQdWJsaWMgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBCYXNlIGNsYXNzZXMgZm9yIGNyZWF0aW5nIHN0ZXBzXG5leHBvcnQgeyBCYXNlU3RlcCwgU3RlcENsYXNzLCBTdGVwTWV0YWRhdGEsIFN0ZXBLaW5kIH0gZnJvbSBcIi4vYmFzZS9iYXNlLXN0ZXBcIjtcbmV4cG9ydCB7IFNpbXBsZVN0ZXAgfSBmcm9tIFwiLi9iYXNlL3NpbXBsZS1zdGVwXCI7XG5leHBvcnQgeyBQb2xsaW5nU3RlcCB9IGZyb20gXCIuL2Jhc2UvcG9sbGluZy1zdGVwXCI7XG5cbi8vIERlY29yYXRvciBmb3IgYWRkaW5nIG1ldGFkYXRhIHRvIHN0ZXBzXG5leHBvcnQgeyBTdGVwLCBTdGVwQ29uZmlnIH0gZnJvbSBcIi4vZGVjb3JhdG9ycy9zdGVwXCI7XG5cbi8vIE91dHB1dCB0eXBlcyBhbmQgaGVscGVyIGZ1bmN0aW9uc1xuZXhwb3J0IHtcbiAgLy8gQXBwcm92YWwgY29udGV4dFxuICBBcHByb3ZhbENvbnRleHQsXG4gIEFwcHJvdmFsQ29udGV4dFNjaGVtYSxcbiAgLy8gUGhhc2Utc3BlY2lmaWMgb3V0cHV0c1xuICBQcmVwYXJlT3V0cHV0LFxuICBSdW5PdXRwdXQsXG4gIFRyaWdnZXJPdXRwdXQsXG4gIFRyaWdnZXJlZE91dHB1dCxcbiAgUG9sbE91dHB1dCxcbiAgUG9sbEFnYWluT3V0cHV0LFxuICAvLyBDb21tb24gb3V0cHV0c1xuICBTdWNjZXNzT3V0cHV0LFxuICBGYWlsZWRPdXRwdXQsXG4gIEFwcHJvdmFsUmVxdWlyZWRPdXRwdXQsXG4gIC8vIENvbWJpbmVkIG91dHB1dCB0eXBlXG4gIFN0ZXBPdXRwdXQsXG4gIC8vIE91dHB1dCBzY2hlbWFzIGZvciB2YWxpZGF0aW9uXG4gIFByZXBhcmVPdXRwdXRTY2hlbWEsXG4gIFJ1bk91dHB1dFNjaGVtYSxcbiAgVHJpZ2dlck91dHB1dFNjaGVtYSxcbiAgUG9sbE91dHB1dFNjaGVtYSxcbiAgU3RlcE91dHB1dFNjaGVtYSxcbiAgLy8gSGVscGVyIGZ1bmN0aW9uc1xuICBTdGVwT3V0cHV0cyxcbn0gZnJvbSBcIi4vb3V0cHV0L3N0ZXAtb3V0cHV0XCI7XG5cbi8vIFJlZ2lzdHJ5IGZvciBydW5uaW5nIHN0ZXBzXG5leHBvcnQgeyBTdGVwUmVnaXN0cnksIFN0ZXBSZWdpc3RyeUlucHV0LCBTdGVwUmVnaXN0cnlJbnB1dFNjaGVtYSB9IGZyb20gXCIuL3JlZ2lzdHJ5L3N0ZXAtcmVnaXN0cnlcIjtcblxuLy8gTG9nZ2luZ1xuZXhwb3J0IHsgU3RlcExvZ2dlciwgU3RlcExvZ2dlckNvbmZpZywgTG9nRW50cnksIExvZ0xldmVsIH0gZnJvbSBcIi4vbG9nZ2luZy9zdGVwLWxvZ2dlclwiO1xuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGdGQUFnRjtBQUNoRix3QkFBd0I7QUFDeEIsZ0ZBQWdGOzs7QUFFaEYsa0NBQWtDO0FBQ2xDLDhDQUFvRTtBQUEzRCxxR0FBQSxRQUFRLE9BQUE7QUFDakIsa0RBQWdEO0FBQXZDLHlHQUFBLFVBQVUsT0FBQTtBQUNuQixvREFBa0Q7QUFBekMsMkdBQUEsV0FBVyxPQUFBO0FBRXBCLHlDQUF5QztBQUN6QywwQ0FBcUQ7QUFBNUMsNEZBQUEsSUFBSSxPQUFBO0FBRWIsb0NBQW9DO0FBQ3BDLG9EQXlCOEI7QUF0QjVCLG9IQUFBLHFCQUFxQixPQUFBO0FBY3JCLGdDQUFnQztBQUNoQyxrSEFBQSxtQkFBbUIsT0FBQTtBQUNuQiw4R0FBQSxlQUFlLE9BQUE7QUFDZixrSEFBQSxtQkFBbUIsT0FBQTtBQUNuQiwrR0FBQSxnQkFBZ0IsT0FBQTtBQUNoQiwrR0FBQSxnQkFBZ0IsT0FBQTtBQUNoQixtQkFBbUI7QUFDbkIsMEdBQUEsV0FBVyxPQUFBO0FBR2IsNkJBQTZCO0FBQzdCLDBEQUFvRztBQUEzRiw2R0FBQSxZQUFZLE9BQUE7QUFBcUIsd0hBQUEsdUJBQXVCLE9BQUE7QUFFakUsVUFBVTtBQUNWLHFEQUF5RjtBQUFoRix5R0FBQSxVQUFVLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3RlcCBTREsgLSBQdWJsaWMgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBCYXNlIGNsYXNzZXMgZm9yIGNyZWF0aW5nIHN0ZXBzXG5leHBvcnQgeyBCYXNlU3RlcCwgU3RlcE1ldGFkYXRhLCBTdGVwS2luZCB9IGZyb20gXCIuL2Jhc2UvYmFzZS1zdGVwXCI7XG5leHBvcnQgeyBTaW1wbGVTdGVwIH0gZnJvbSBcIi4vYmFzZS9zaW1wbGUtc3RlcFwiO1xuZXhwb3J0IHsgUG9sbGluZ1N0ZXAgfSBmcm9tIFwiLi9iYXNlL3BvbGxpbmctc3RlcFwiO1xuXG4vLyBEZWNvcmF0b3IgZm9yIGFkZGluZyBtZXRhZGF0YSB0byBzdGVwc1xuZXhwb3J0IHsgU3RlcCwgU3RlcENvbmZpZyB9IGZyb20gXCIuL2RlY29yYXRvcnMvc3RlcFwiO1xuXG4vLyBPdXRwdXQgdHlwZXMgYW5kIGhlbHBlciBmdW5jdGlvbnNcbmV4cG9ydCB7XG4gIC8vIEFwcHJvdmFsIGNvbnRleHRcbiAgQXBwcm92YWxDb250ZXh0LFxuICBBcHByb3ZhbENvbnRleHRTY2hlbWEsXG4gIC8vIFBoYXNlLXNwZWNpZmljIG91dHB1dHNcbiAgUHJlcGFyZU91dHB1dCxcbiAgUnVuT3V0cHV0LFxuICBUcmlnZ2VyT3V0cHV0LFxuICBUcmlnZ2VyZWRPdXRwdXQsXG4gIFBvbGxPdXRwdXQsXG4gIFBvbGxBZ2Fpbk91dHB1dCxcbiAgLy8gQ29tbW9uIG91dHB1dHNcbiAgU3VjY2Vzc091dHB1dCxcbiAgRmFpbGVkT3V0cHV0LFxuICBBcHByb3ZhbFJlcXVpcmVkT3V0cHV0LFxuICAvLyBDb21iaW5lZCBvdXRwdXQgdHlwZVxuICBTdGVwT3V0cHV0LFxuICAvLyBPdXRwdXQgc2NoZW1hcyBmb3IgdmFsaWRhdGlvblxuICBQcmVwYXJlT3V0cHV0U2NoZW1hLFxuICBSdW5PdXRwdXRTY2hlbWEsXG4gIFRyaWdnZXJPdXRwdXRTY2hlbWEsXG4gIFBvbGxPdXRwdXRTY2hlbWEsXG4gIFN0ZXBPdXRwdXRTY2hlbWEsXG4gIC8vIEhlbHBlciBmdW5jdGlvbnNcbiAgU3RlcE91dHB1dHMsXG59IGZyb20gXCIuL291dHB1dC9zdGVwLW91dHB1dFwiO1xuXG4vLyBSZWdpc3RyeSBmb3IgcnVubmluZyBzdGVwc1xuZXhwb3J0IHsgU3RlcFJlZ2lzdHJ5LCBTdGVwUmVnaXN0cnlJbnB1dCwgU3RlcFJlZ2lzdHJ5SW5wdXRTY2hlbWEgfSBmcm9tIFwiLi9yZWdpc3RyeS9zdGVwLXJlZ2lzdHJ5XCI7XG5cbi8vIExvZ2dpbmdcbmV4cG9ydCB7IFN0ZXBMb2dnZXIsIFN0ZXBMb2dnZXJDb25maWcsIExvZ0VudHJ5LCBMb2dMZXZlbCB9IGZyb20gXCIuL2xvZ2dpbmcvc3RlcC1sb2dnZXJcIjtcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import z from "zod";
2
- import type { StepClass } from "../base/base-step";
2
+ import type { BaseStep } from "../base/base-step";
3
3
  export declare const StepRegistryInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4
4
  job: z.ZodLiteral<"EXECUTE">;
5
5
  type: z.ZodString;
@@ -25,7 +25,10 @@ export declare class StepRegistry {
25
25
  *
26
26
  * Usage in user's entrypoint file:
27
27
  * ```
28
- * StepRegistry.run([MyStep1, MyStep2, ...]);
28
+ * StepRegistry.run([
29
+ * new MyStep1(dependency1, dependency2),
30
+ * new MyStep2(config)
31
+ * ]);
29
32
  * ```
30
33
  *
31
34
  * CLI arguments:
@@ -34,7 +37,7 @@ export declare class StepRegistry {
34
37
  * - --log-dir: Directory for log files (default: /tmp/step-logs)
35
38
  * - --execution-id: Unique ID for this execution (required for logging)
36
39
  */
37
- static run(steps: StepClass[]): Promise<void>;
40
+ static run(steps: BaseStep<unknown>[]): Promise<void>;
38
41
  private execute;
39
42
  private synthesizeMetadata;
40
43
  private executeStep;
@@ -79,10 +79,9 @@ class StepRegistry {
79
79
  this.outputPath = outputPath;
80
80
  this.logDir = logDir;
81
81
  this.executionId = executionId;
82
- for (const StepCls of steps) {
83
- const instance = new StepCls();
82
+ for (const instance of steps) {
84
83
  const metadata = instance.getMetadata();
85
- this.steps.set(metadata.stepType, StepCls);
84
+ this.steps.set(metadata.stepType, instance);
86
85
  }
87
86
  }
88
87
  /**
@@ -91,7 +90,10 @@ class StepRegistry {
91
90
  *
92
91
  * Usage in user's entrypoint file:
93
92
  * ```
94
- * StepRegistry.run([MyStep1, MyStep2, ...]);
93
+ * StepRegistry.run([
94
+ * new MyStep1(dependency1, dependency2),
95
+ * new MyStep2(config)
96
+ * ]);
95
97
  * ```
96
98
  *
97
99
  * CLI arguments:
@@ -130,20 +132,18 @@ class StepRegistry {
130
132
  }
131
133
  synthesizeMetadata() {
132
134
  const metadata = [];
133
- for (const StepCls of this.steps.values()) {
134
- const instance = new StepCls();
135
+ for (const instance of this.steps.values()) {
135
136
  metadata.push(instance.getMetadata());
136
137
  }
137
138
  return metadata;
138
139
  }
139
140
  async executeStep(type, params, approvalContext, pollingState) {
140
- const StepCls = this.steps.get(type);
141
- if (!StepCls) {
141
+ const instance = this.steps.get(type);
142
+ if (!instance) {
142
143
  this.writeOutput(step_output_1.StepOutputs.failed(`No step registered with type: ${type}`, "STEP_NOT_FOUND"));
143
144
  return;
144
145
  }
145
146
  try {
146
- const instance = new StepCls();
147
147
  const metadata = instance.getMetadata();
148
148
  // Inject logger
149
149
  const logger = new step_logger_1.StepLogger({
@@ -235,4 +235,4 @@ class StepRegistry {
235
235
  }
236
236
  }
237
237
  exports.StepRegistry = StepRegistry;
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1yZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWdpc3RyeS9zdGVwLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isd0RBQWdDO0FBQ2hDLDhDQUFvQjtBQUlwQix3REFBb0Q7QUFFcEQsdURBQTJFO0FBRTNFLGdGQUFnRjtBQUNoRixnQkFBZ0I7QUFDaEIsZ0ZBQWdGO0FBRWhGLE1BQU0sNEJBQTRCLEdBQUcsYUFBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxHQUFHLEVBQUUsYUFBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztDQUN0QyxDQUFDLENBQUM7QUFFSCxNQUFNLHlCQUF5QixHQUFHLGFBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekMsR0FBRyxFQUFFLGFBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3pCLElBQUksRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLE1BQU0sRUFBRSxhQUFDLENBQUMsTUFBTSxDQUFDLGFBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDckMsNERBQTREO0lBQzVELGVBQWUsRUFBRSxtQ0FBcUIsQ0FBQyxRQUFRLEVBQUU7SUFDakQsWUFBWSxFQUFFLGFBQUMsQ0FBQyxNQUFNLENBQUMsYUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN2RCxDQUFDLENBQUM7QUFFVSxRQUFBLHVCQUF1QixHQUFHLGFBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7SUFDakUseUJBQXlCO0lBQ3pCLDRCQUE0QjtDQUM3QixDQUFDLENBQUM7QUFJSCxnRkFBZ0Y7QUFDaEYsZ0JBQWdCO0FBQ2hCLGdGQUFn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QztRQUVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RCLHdDQUF3QztZQUN4QyxPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsc0RBQXNEO1lBQ3RELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFrQjtRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFqUUQsb0NBaVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgbWluaW1pc3QgZnJvbSBcIm1pbmltaXN0XCI7XG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VTdGVwLCBTdGVwQ2xhc3MsIFN0ZXBNZXRhZGF0YSB9IGZyb20gXCIuLi9iYXNlL2Jhc2Utc3RlcFwiO1xuaW1wb3J0IHR5cGUgeyBTaW1wbGVTdGVwIH0gZnJvbSBcIi4uL2Jhc2Uvc2ltcGxlLXN0ZXBcIjtcbmltcG9ydCB0eXBlIHsgUG9sbGluZ1N0ZXAgfSBmcm9tIFwiLi4vYmFzZS9wb2xsaW5nLXN0ZXBcIjtcbmltcG9ydCB7IFN0ZXBMb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZy9zdGVwLWxvZ2dlclwiO1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbENvbnRleHQsIFN0ZXBPdXRwdXQgfSBmcm9tIFwiLi4vb3V0cHV0L3N0ZXAtb3V0cHV0XCI7XG5pbXBvcnQgeyBBcHByb3ZhbENvbnRleHRTY2hlbWEsIFN0ZXBPdXRwdXRzIH0gZnJvbSBcIi4uL291dHB1dC9zdGVwLW91dHB1dFwiO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5wdXQgU2NoZW1hc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3RlcFJlZ2lzdHJ5U3ludGhlc2l6ZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgam9iOiB6LmxpdGVyYWwoXCJTWU5USEVTSVpFLU1FVEFEQVRBXCIpLFxufSk7XG5cbmNvbnN0IFN0ZXBSZWdpc3RyeUV4ZWN1dGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGpvYjogei5saXRlcmFsKFwiRVhFQ1VURVwiKSxcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcGFyYW1zOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gT3B0aW9uYWwgY29udGV4dCAtIHByZXNlbmNlIGRldGVybWluZXMgd2hpY2ggcGhhc2UgdG8gcnVuXG4gIGFwcHJvdmFsQ29udGV4dDogQXBwcm92YWxDb250ZXh0U2NoZW1hLm9wdGlvbmFsKCksXG4gIHBvbGxpbmdTdGF0ZTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgU3RlcFJlZ2lzdHJ5SW5wdXRTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcImpvYlwiLCBbXG4gIFN0ZXBSZWdpc3RyeUV4ZWN1dGVTY2hlbWEsXG4gIFN0ZXBSZWdpc3RyeVN5bnRoZXNpemVTY2hlbWEsXG5dKTtcblxuZXhwb3J0IHR5cGUgU3RlcFJlZ2lzdHJ5SW5wdXQgPSB6LmluZmVyPHR5cGVvZiBTdGVwUmVnaXN0cnlJbnB1dFNjaGVtYT47XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25maWd1cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBERUZBVUxUX09VVFBVVF9QQVRIID0gXCIvdG1wL3N0ZXAtb3V0cHV0Lmpzb25cIjtcbmNvbnN0IERFRkFVTFRfTE9HX0RJUiA9IFwiL3RtcC9zdGVwLWxvZ3NcIjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFN0ZXBSZWdpc3RyeVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNsYXNzIFN0ZXBSZWdpc3RyeSB7XG4gIHByaXZhdGUgc3RlcHM6IE1hcDxzdHJpbmcsIFN0ZXBDbGFzcz47XG4gIHByaXZhdGUgb3V0cHV0UGF0aDogc3RyaW5nO1xuICBwcml2YXRlIGxvZ0Rpcjogc3RyaW5nO1xuICBwcml2YXRlIGV4ZWN1dGlvbklkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICBzdGVwczogU3RlcENsYXNzW10sXG4gICAgb3V0cHV0UGF0aDogc3RyaW5nLFxuICAgIGxvZ0Rpcjogc3RyaW5nLFxuICAgIGV4ZWN1dGlvbklkOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5zdGVwcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgIHRoaXMubG9nRGlyID0gbG9nRGlyO1xuICAgIHRoaXMuZXhlY3V0aW9uSWQgPSBleGVjdXRpb25JZDtcblxuICAgIGZvciAoY29uc3QgU3RlcENscyBvZiBzdGVwcykge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgU3RlcENscygpO1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBpbnN0YW5jZS5nZXRNZXRhZGF0YSgpO1xuICAgICAgdGhpcy5zdGVwcy5zZXQobWV0YWRhdGEuc3RlcFR5cGUsIFN0ZXBDbHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWluIGVudHJ5cG9pbnQgZm9yIHJ1bm5pbmcgc3RlcHMuXG4gICAqIFBhcnNlcyBDTEkgYXJncyBhbmQgZWl0aGVyIHN5bnRoZXNpemVzIG1ldGFkYXRhIG9yIGV4ZWN1dGVzIGEgc3RlcC5cbiAgICpcbiAgICogVXNhZ2UgaW4gdXNlcidzIGVudHJ5cG9pbnQgZmlsZTpcbiAgICogYGBgXG4gICAqIFN0ZXBSZWdpc3RyeS5ydW4oW015U3RlcDEsIE15U3RlcDIsIC4uLl0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQ0xJIGFyZ3VtZW50czpcbiAgICogLSAtLWlucHV0OiBKU09OIGJsb2Igd2l0aCBqb2IgdHlwZSBhbmQgcGFyYW1ldGVyc1xuICAgKiAtIC0tb3V0cHV0OiBQYXRoIHRvIHdyaXRlIG91dHB1dCBKU09OIChkZWZhdWx0OiAvdG1wL3N0ZXAtb3V0cHV0Lmpzb24pXG4gICAqIC0gLS1sb2ctZGlyOiBEaXJlY3RvcnkgZm9yIGxvZyBmaWxlcyAoZGVmYXVsdDogL3RtcC9zdGVwLWxvZ3MpXG4gICAqIC0gLS1leGVjdXRpb24taWQ6IFVuaXF1ZSBJRCBmb3IgdGhpcyBleGVjdXRpb24gKHJlcXVpcmVkIGZvciBsb2dnaW5nKVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJ1bihzdGVwczogU3RlcENsYXNzW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhcmdzID0gbWluaW1pc3QocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gYXJnc1tcIm91dHB1dFwiXSB8fCBERUZBVUxUX09VVFBVVF9QQVRIO1xuICAgIGNvbnN0IGxvZ0RpciA9IGFyZ3NbXCJsb2ctZGlyXCJdIHx8IERFRkFVTFRfTE9HX0RJUjtcbiAgICBjb25zdCBleGVjdXRpb25JZCA9IGFyZ3NbXCJleGVjdXRpb24taWRcIl0gfHwgYGV4ZWMtJHtEYXRlLm5vdygpfWA7XG5cbiAgICBjb25zdCByZWdpc3RyeSA9IG5ldyBTdGVwUmVnaXN0cnkoc3RlcHMsIG91dHB1dFBhdGgsIGxvZ0RpciwgZXhlY3V0aW9uSWQpO1xuICAgIGF3YWl0IHJlZ2lzdHJ5LmV4ZWN1dGUoYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGUoYXJnczogbWluaW1pc3QuUGFyc2VkQXJncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnB1dCA9IFN0ZXBSZWdpc3RyeUlucHV0U2NoZW1hLnBhcnNlKEpTT04ucGFyc2UoYXJnc1tcImlucHV0XCJdKSk7XG5cbiAgICAgIHN3aXRjaCAoaW5wdXQuam9iKSB7XG4gICAgICAgIGNhc2UgXCJTWU5USEVTSVpFLU1FVEFEQVRBXCI6IHtcbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuc3ludGhlc2l6ZU1ldGFkYXRhKCk7XG4gICAgICAgICAgdGhpcy53cml0ZU91dHB1dCh7IHN0YXR1czogXCJTVUNDRVNTXCIsIGRhdGE6IHsgbWV0YWRhdGEgfSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJFWEVDVVRFXCI6IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVTdGVwKFxuICAgICAgICAgICAgaW5wdXQudHlwZSxcbiAgICAgICAgICAgIGlucHV0LnBhcmFtcyxcbiAgICAgICAgICAgIGlucHV0LmFwcHJvdmFsQ29udGV4dCxcbiAgICAgICAgICAgIGlucHV0LnBvbGxpbmdTdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgdGhpcy53cml0ZU91dHB1dChTdGVwT3V0cHV0cy5mYWlsZWQoZXJyb3JNZXNzYWdlLCBcIlJFR0lTVFJZX0VSUk9SXCIpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN5bnRoZXNpemVNZXRhZGF0YSgpOiBTdGVwTWV0YWRhdGFbXSB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFN0ZXBNZXRhZGF0YVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFN0ZXBDbHMgb2YgdGhpcy5zdGVwcy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgU3RlcENscygpO1xuICAgICAgbWV0YWRhdGEucHVzaChpbnN0YW5jZS5nZXRNZXRhZGF0YSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVTdGVwKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGFwcHJvdmFsQ29udGV4dD86IEFwcHJvdmFsQ29udGV4dCxcbiAgICBwb2xsaW5nU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBTdGVwQ2xzID0gdGhpcy5zdGVwcy5nZXQodHlwZSk7XG5cbiAgICBpZiAoIVN0ZXBDbHMpIHtcbiAgICAgIHRoaXMud3JpdGVPdXRwdXQoXG4gICAgICAgIFN0ZXBPdXRwdXRzLmZhaWxlZChcbiAgICAgICAgICBgTm8gc3RlcCByZWdpc3RlcmVkIHdpdGggdHlwZTogJHt0eXBlfWAsXG4gICAgICAgICAgXCJTVEVQX05PVF9GT1VORFwiXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFN0ZXBDbHMoKTtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gaW5zdGFuY2UuZ2V0TWV0YWRhdGEoKTtcblxuICAgICAgLy8gSW5qZWN0IGxvZ2dlclxuICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IFN0ZXBMb2dnZXIoe1xuICAgICAgICBsb2dEaXI6IHRoaXMubG9nRGlyLFxuICAgICAgICBleGVjdXRpb25JZDogdGhpcy5leGVjdXRpb25JZCxcbiAgICAgICAgc3RlcFR5cGU6IG1ldGFkYXRhLnN0ZXBUeXBlLFxuICAgICAgfSk7XG4gICAgICBpbnN0YW5jZS5fc2V0TG9nZ2VyKGxvZ2dlcik7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHBhcmFtcyBhZ2FpbnN0IHRoZSBzdGVwJ3Mgc2NoZW1hXG4gICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IG1ldGFkYXRhLnNjaGVtYS5zYWZlUGFyc2UocGFyYW1zKTtcbiAgICAgIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aGlzLndyaXRlT3V0cHV0KFxuICAgICAgICAgIFN0ZXBPdXRwdXRzLmZhaWxlZChcbiAgICAgICAgICAgIGBJbnZhbGlkIHBhcmFtczogJHtwYXJzZVJlc3VsdC5lcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgICBcIklOVkFMSURfUEFSQU1TXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVkUGFyYW1zID0gcGFyc2VSZXN1bHQuZGF0YTtcblxuICAgICAgLy8gUm91dGUgdG8gYXBwcm9wcmlhdGUgcGhhc2UgYmFzZWQgb24gc3RlcCBraW5kIGFuZCBpbnB1dCBjb250ZXh0XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLnJvdXRlRXhlY3V0aW9uKFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIHZhbGlkYXRlZFBhcmFtcyxcbiAgICAgICAgYXBwcm92YWxDb250ZXh0LFxuICAgICAgICBwb2xsaW5nU3RhdGVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMud3JpdGVPdXRwdXQob3V0cHV0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgdGhpcy53cml0ZU91dHB1dChTdGVwT3V0cHV0cy5mYWlsZWQoZXJyb3JNZXNzYWdlLCBcIkVYRUNVVElPTl9FUlJPUlwiKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByb3V0ZUV4ZWN1dGlvbihcbiAgICBpbnN0YW5jZTogQmFzZVN0ZXA8dW5rbm93bj4sXG4gICAgbWV0YWRhdGE6IFN0ZXBNZXRhZGF0YSxcbiAgICBwYXJhbXM6IHVua25vd24sXG4gICAgYXBwcm92YWxDb250ZXh0PzogQXBwcm92YWxDb250ZXh0LFxuICAgIHBvbGxpbmdTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8U3RlcE91dHB1dD4ge1xuICAgIGNvbnN0IHJlcXVpcmVzQXBwcm92YWwgPSBtZXRhZGF0YS5yZXF1aXJlc0FwcHJvdmFsO1xuXG4gICAgaWYgKG1ldGFkYXRhLnN0ZXBLaW5kID09PSBcInNpbXBsZVwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVNpbXBsZVN0ZXAoXG4gICAgICAgIGluc3RhbmNlIGFzIFNpbXBsZVN0ZXA8dW5rbm93bj4sXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgcmVxdWlyZXNBcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxDb250ZXh0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS5zdGVwS2luZCA9PT0gXCJwb2xsaW5nXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUG9sbGluZ1N0ZXAoXG4gICAgICAgIGluc3RhbmNlIGFzIFBvbGxpbmdTdGVwPHVua25vd24sIFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICByZXF1aXJlc0FwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbENvbnRleHQsXG4gICAgICAgIHBvbGxpbmdTdGF0ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RlcE91dHB1dHMuZmFpbGVkKFxuICAgICAgYFVua25vd24gc3RlcCBraW5kOiAke21ldGFkYXRhLnN0ZXBLaW5kfWAsXG4gICAgICBcIlVOS05PV05fU1RFUF9LSU5EXCJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdXRlIFNpbXBsZVN0ZXAgZXhlY3V0aW9uIGJhc2VkIG9uIGFwcHJvdmFsIHN0YXRlLlxuICAgKlxuICAgKiB8IHJlcXVpcmVzQXBwcm92YWwgfCBhcHByb3ZhbENvbnRleHQgcHJvdmlkZWQ/IHwgQWN0aW9uICAgICAgICAgICAgICB8XG4gICAqIHwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAgICogfCBObyAgICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcnVuKHBhcmFtcykgICAgfFxuICAgKiB8IFllcyAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwcmVwYXJlKHBhcmFtcyl8XG4gICAqIHwgWWVzICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHJ1bihwYXJhbXMsIGFwcHJvdmFsKSB8XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJvdXRlU2ltcGxlU3RlcChcbiAgICBpbnN0YW5jZTogU2ltcGxlU3RlcDx1bmtub3duPixcbiAgICBwYXJhbXM6IHVua25vd24sXG4gICAgcmVxdWlyZXNBcHByb3ZhbDogYm9vbGVhbixcbiAgICBhcHByb3ZhbENvbnRleHQ/OiBBcHByb3ZhbENvbnRleHRcbiAgKTogUHJvbWlzZTxTdGVwT3V0cHV0PiB7XG4gICAgaWYgKCFyZXF1aXJlc0FwcHJvdmFsKSB7XG4gICAgICAvLyBObyBhcHByb3ZhbCBuZWVkZWQgLSBqdXN0IHJ1blxuICAgICAgcmV0dXJuIGluc3RhbmNlLmV4ZWN1dGUocGFyYW1zLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGlmICghYXBwcm92YWxDb250ZXh0KSB7XG4gICAgICAvLyBOZWVkcyBhcHByb3ZhbCBidXQgZG9uJ3QgaGF2ZSBpdCB5ZXQgLSBjYWxsIHByZXBhcmVcbiAgICAgIHJldHVybiBpbnN0YW5jZS5wcmVwYXJlKHBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gSGF2ZSBhcHByb3ZhbCAtIHJ1biB3aXRoIGFwcHJvdmFsIGNvbnRleHRcbiAgICByZXR1cm4gaW5zdGFuY2UuZXhlY3V0ZShwYXJhbXMsIGFwcHJvdmFsQ29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogUm91dGUgUG9sbGluZ1N0ZXAgZXhlY3V0aW9uIGJhc2VkIG9uIGFwcHJvdmFsIGFuZCBwb2xsaW5nIHN0YXRlLlxuICAgKlxuICAgKiB8IHJlcXVpcmVzQXBwcm92YWwgfCBhcHByb3ZhbENvbnRleHQ/IHwgcG9sbGluZ1N0YXRlPyB8IEFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gICAqIHwgTm8gICAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgIHwgQ2FsbCB0cmlnZ2VyKHBhcmFtcykgICAgICAgICAgfFxuICAgKiB8IE5vICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICB8IENhbGwgcG9sbChwYXJhbXMsIHBvbGxpbmdTdGF0ZSl8XG4gICAqIHwgWWVzICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgIHwgQ2FsbCBwcmVwYXJlKHBhcmFtcykgICAgICAgICAgfFxuICAgKiB8IFllcyAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICB8IENhbGwgdHJpZ2dlcihwYXJhbXMsIGFwcHJvdmFsKXxcbiAgICogfCBZZXMgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgfCBDYWxsIHBvbGwocGFyYW1zLCBwb2xsaW5nU3RhdGUpfFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByb3V0ZVBvbGxpbmdTdGVwKFxuICAgIGluc3RhbmNlOiBQb2xsaW5nU3RlcDx1bmtub3duLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gICAgcGFyYW1zOiB1bmtub3duLFxuICAgIHJlcXVpcmVzQXBwcm92YWw6IGJvb2xlYW4sXG4gICAgYXBwcm92YWxDb250ZXh0PzogQXBwcm92YWxDb250ZXh0LFxuICAgIHBvbGxpbmdTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8U3RlcE91dHB1dD4ge1xuICAgIC8vIElmIHdlIGhhdmUgcG9sbGluZyBzdGF0ZSwgd2UncmUgaW4gdGhlIHBvbGwgcGhhc2UgKHJlZ2FyZGxlc3Mgb2YgYXBwcm92YWwpXG4gICAgaWYgKHBvbGxpbmdTdGF0ZSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLmV4ZWN1dGVQb2xsKHBhcmFtcywgcG9sbGluZ1N0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVpcmVzQXBwcm92YWwpIHtcbiAgICAgIC8vIE5vIGFwcHJvdmFsIG5lZWRlZCAtIHRyaWdnZXIgZGlyZWN0bHlcbiAgICAgIHJldHVybiBpbnN0YW5jZS5leGVjdXRlVHJpZ2dlcihwYXJhbXMsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgaWYgKCFhcHByb3ZhbENvbnRleHQpIHtcbiAgICAgIC8vIE5lZWRzIGFwcHJvdmFsIGJ1dCBkb24ndCBoYXZlIGl0IHlldCAtIGNhbGwgcHJlcGFyZVxuICAgICAgcmV0dXJuIGluc3RhbmNlLnByZXBhcmUocGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBIYXZlIGFwcHJvdmFsIC0gdHJpZ2dlciB3aXRoIGFwcHJvdmFsIGNvbnRleHRcbiAgICByZXR1cm4gaW5zdGFuY2UuZXhlY3V0ZVRyaWdnZXIocGFyYW1zLCBhcHByb3ZhbENvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZU91dHB1dChvdXRwdXQ6IFN0ZXBPdXRwdXQpOiB2b2lkIHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUodGhpcy5vdXRwdXRQYXRoKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3V0cHV0RGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLm91dHB1dFBhdGgsIEpTT04uc3RyaW5naWZ5KG91dHB1dCwgbnVsbCwgMikpO1xuICB9XG59XG4iXX0=
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1yZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWdpc3RyeS9zdGVwLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isd0RBQWdDO0FBQ2hDLDhDQUFvQjtBQUlwQix3REFBb0Q7QUFFcEQsdURBQTJFO0FBRTNFLGdGQUFnRjtBQUNoRixnQkFBZ0I7QUFDaEIsZ0ZBQWdGO0FBRWhGLE1BQU0sNEJBQTRCLEdBQUcsYUFBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxHQUFHLEVBQUUsYUFBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztDQUN0QyxDQUFDLENBQUM7QUFFSCxNQUFNLHlCQUF5QixHQUFHLGFBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekMsR0FBRyxFQUFFLGFBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3pCLElBQUksRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLE1BQU0sRUFBRSxhQUFDLENBQUMsTUFBTSxDQUFDLGFBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDckMsNERBQTREO0lBQzVELGVBQWUsRUFBRSxtQ0FBcUIsQ0FBQyxRQUFRLEVBQUU7SUFDakQsWUFBWSxFQUFFLGFBQUMsQ0FBQyxNQUFNLENBQUMsYUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN2RCxDQUFDLENBQUM7QUFFVSxRQUFBLHVCQUF1QixHQUFHLGFBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7SUFDakUseUJBQXlCO0lBQ3pCLDRCQUE0QjtDQUM3QixDQUFDLENBQUM7QUFJSCxnRkFBZ0Y7QUFDaEYsZ0JBQWdCO0FBQ2hCLGdGQUFn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SUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLHNEQUFzRDtZQUN0RCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTyxXQUFXLENBQUMsTUFBa0I7UUFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM5QixFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztDQUNGO0FBalFELG9DQWlRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IG1pbmltaXN0IGZyb20gXCJtaW5pbWlzdFwiO1xuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlU3RlcCwgU3RlcE1ldGFkYXRhIH0gZnJvbSBcIi4uL2Jhc2UvYmFzZS1zdGVwXCI7XG5pbXBvcnQgdHlwZSB7IFNpbXBsZVN0ZXAgfSBmcm9tIFwiLi4vYmFzZS9zaW1wbGUtc3RlcFwiO1xuaW1wb3J0IHR5cGUgeyBQb2xsaW5nU3RlcCB9IGZyb20gXCIuLi9iYXNlL3BvbGxpbmctc3RlcFwiO1xuaW1wb3J0IHsgU3RlcExvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nL3N0ZXAtbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEFwcHJvdmFsQ29udGV4dCwgU3RlcE91dHB1dCB9IGZyb20gXCIuLi9vdXRwdXQvc3RlcC1vdXRwdXRcIjtcbmltcG9ydCB7IEFwcHJvdmFsQ29udGV4dFNjaGVtYSwgU3RlcE91dHB1dHMgfSBmcm9tIFwiLi4vb3V0cHV0L3N0ZXAtb3V0cHV0XCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJbnB1dCBTY2hlbWFzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBTdGVwUmVnaXN0cnlTeW50aGVzaXplU2NoZW1hID0gei5vYmplY3Qoe1xuICBqb2I6IHoubGl0ZXJhbChcIlNZTlRIRVNJWkUtTUVUQURBVEFcIiksXG59KTtcblxuY29uc3QgU3RlcFJlZ2lzdHJ5RXhlY3V0ZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgam9iOiB6LmxpdGVyYWwoXCJFWEVDVVRFXCIpLFxuICB0eXBlOiB6LnN0cmluZygpLFxuICBwYXJhbXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAvLyBPcHRpb25hbCBjb250ZXh0IC0gcHJlc2VuY2UgZGV0ZXJtaW5lcyB3aGljaCBwaGFzZSB0byBydW5cbiAgYXBwcm92YWxDb250ZXh0OiBBcHByb3ZhbENvbnRleHRTY2hlbWEub3B0aW9uYWwoKSxcbiAgcG9sbGluZ1N0YXRlOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBTdGVwUmVnaXN0cnlJbnB1dFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwiam9iXCIsIFtcbiAgU3RlcFJlZ2lzdHJ5RXhlY3V0ZVNjaGVtYSxcbiAgU3RlcFJlZ2lzdHJ5U3ludGhlc2l6ZVNjaGVtYSxcbl0pO1xuXG5leHBvcnQgdHlwZSBTdGVwUmVnaXN0cnlJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFN0ZXBSZWdpc3RyeUlucHV0U2NoZW1hPjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IERFRkFVTFRfT1VUUFVUX1BBVEggPSBcIi90bXAvc3RlcC1vdXRwdXQuanNvblwiO1xuY29uc3QgREVGQVVMVF9MT0dfRElSID0gXCIvdG1wL3N0ZXAtbG9nc1wiO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3RlcFJlZ2lzdHJ5XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY2xhc3MgU3RlcFJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSBzdGVwczogTWFwPHN0cmluZywgQmFzZVN0ZXA8dW5rbm93bj4+O1xuICBwcml2YXRlIG91dHB1dFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSBsb2dEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBleGVjdXRpb25JZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgc3RlcHM6IEJhc2VTdGVwPHVua25vd24+W10sXG4gICAgb3V0cHV0UGF0aDogc3RyaW5nLFxuICAgIGxvZ0Rpcjogc3RyaW5nLFxuICAgIGV4ZWN1dGlvbklkOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5zdGVwcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgIHRoaXMubG9nRGlyID0gbG9nRGlyO1xuICAgIHRoaXMuZXhlY3V0aW9uSWQgPSBleGVjdXRpb25JZDtcblxuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2Ygc3RlcHMpIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gaW5zdGFuY2UuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIHRoaXMuc3RlcHMuc2V0KG1ldGFkYXRhLnN0ZXBUeXBlLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1haW4gZW50cnlwb2ludCBmb3IgcnVubmluZyBzdGVwcy5cbiAgICogUGFyc2VzIENMSSBhcmdzIGFuZCBlaXRoZXIgc3ludGhlc2l6ZXMgbWV0YWRhdGEgb3IgZXhlY3V0ZXMgYSBzdGVwLlxuICAgKlxuICAgKiBVc2FnZSBpbiB1c2VyJ3MgZW50cnlwb2ludCBmaWxlOlxuICAgKiBgYGBcbiAgICogU3RlcFJlZ2lzdHJ5LnJ1bihbXG4gICAqICAgbmV3IE15U3RlcDEoZGVwZW5kZW5jeTEsIGRlcGVuZGVuY3kyKSxcbiAgICogICBuZXcgTXlTdGVwMihjb25maWcpXG4gICAqIF0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQ0xJIGFyZ3VtZW50czpcbiAgICogLSAtLWlucHV0OiBKU09OIGJsb2Igd2l0aCBqb2IgdHlwZSBhbmQgcGFyYW1ldGVyc1xuICAgKiAtIC0tb3V0cHV0OiBQYXRoIHRvIHdyaXRlIG91dHB1dCBKU09OIChkZWZhdWx0OiAvdG1wL3N0ZXAtb3V0cHV0Lmpzb24pXG4gICAqIC0gLS1sb2ctZGlyOiBEaXJlY3RvcnkgZm9yIGxvZyBmaWxlcyAoZGVmYXVsdDogL3RtcC9zdGVwLWxvZ3MpXG4gICAqIC0gLS1leGVjdXRpb24taWQ6IFVuaXF1ZSBJRCBmb3IgdGhpcyBleGVjdXRpb24gKHJlcXVpcmVkIGZvciBsb2dnaW5nKVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJ1bihzdGVwczogQmFzZVN0ZXA8dW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFyZ3MgPSBtaW5pbWlzdChwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBhcmdzW1wib3V0cHV0XCJdIHx8IERFRkFVTFRfT1VUUFVUX1BBVEg7XG4gICAgY29uc3QgbG9nRGlyID0gYXJnc1tcImxvZy1kaXJcIl0gfHwgREVGQVVMVF9MT0dfRElSO1xuICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gYXJnc1tcImV4ZWN1dGlvbi1pZFwiXSB8fCBgZXhlYy0ke0RhdGUubm93KCl9YDtcblxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IFN0ZXBSZWdpc3RyeShzdGVwcywgb3V0cHV0UGF0aCwgbG9nRGlyLCBleGVjdXRpb25JZCk7XG4gICAgYXdhaXQgcmVnaXN0cnkuZXhlY3V0ZShhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShhcmdzOiBtaW5pbWlzdC5QYXJzZWRBcmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gU3RlcFJlZ2lzdHJ5SW5wdXRTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShhcmdzW1wiaW5wdXRcIl0pKTtcblxuICAgICAgc3dpdGNoIChpbnB1dC5qb2IpIHtcbiAgICAgICAgY2FzZSBcIlNZTlRIRVNJWkUtTUVUQURBVEFcIjoge1xuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5zeW50aGVzaXplTWV0YWRhdGEoKTtcbiAgICAgICAgICB0aGlzLndyaXRlT3V0cHV0KHsgc3RhdHVzOiBcIlNVQ0NFU1NcIiwgZGF0YTogeyBtZXRhZGF0YSB9IH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIkVYRUNVVEVcIjoge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVN0ZXAoXG4gICAgICAgICAgICBpbnB1dC50eXBlLFxuICAgICAgICAgICAgaW5wdXQucGFyYW1zLFxuICAgICAgICAgICAgaW5wdXQuYXBwcm92YWxDb250ZXh0LFxuICAgICAgICAgICAgaW5wdXQucG9sbGluZ1N0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICB0aGlzLndyaXRlT3V0cHV0KFN0ZXBPdXRwdXRzLmZhaWxlZChlcnJvck1lc3NhZ2UsIFwiUkVHSVNUUllfRVJST1JcIikpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3ludGhlc2l6ZU1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YVtdIHtcbiAgICBjb25zdCBtZXRhZGF0YTogU3RlcE1ldGFkYXRhW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgdGhpcy5zdGVwcy52YWx1ZXMoKSkge1xuICAgICAgbWV0YWRhdGEucHVzaChpbnN0YW5jZS5nZXRNZXRhZGF0YSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVTdGVwKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGFwcHJvdmFsQ29udGV4dD86IEFwcHJvdmFsQ29udGV4dCxcbiAgICBwb2xsaW5nU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuc3RlcHMuZ2V0KHR5cGUpO1xuXG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgdGhpcy53cml0ZU91dHB1dChcbiAgICAgICAgU3RlcE91dHB1dHMuZmFpbGVkKFxuICAgICAgICAgIGBObyBzdGVwIHJlZ2lzdGVyZWQgd2l0aCB0eXBlOiAke3R5cGV9YCxcbiAgICAgICAgICBcIlNURVBfTk9UX0ZPVU5EXCJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBpbnN0YW5jZS5nZXRNZXRhZGF0YSgpO1xuXG4gICAgICAvLyBJbmplY3QgbG9nZ2VyXG4gICAgICBjb25zdCBsb2dnZXIgPSBuZXcgU3RlcExvZ2dlcih7XG4gICAgICAgIGxvZ0RpcjogdGhpcy5sb2dEaXIsXG4gICAgICAgIGV4ZWN1dGlvbklkOiB0aGlzLmV4ZWN1dGlvbklkLFxuICAgICAgICBzdGVwVHlwZTogbWV0YWRhdGEuc3RlcFR5cGUsXG4gICAgICB9KTtcbiAgICAgIGluc3RhbmNlLl9zZXRMb2dnZXIobG9nZ2VyKTtcblxuICAgICAgLy8gVmFsaWRhdGUgcGFyYW1zIGFnYWluc3QgdGhlIHN0ZXAncyBzY2hlbWFcbiAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gbWV0YWRhdGEuc2NoZW1hLnNhZmVQYXJzZShwYXJhbXMpO1xuICAgICAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMud3JpdGVPdXRwdXQoXG4gICAgICAgICAgU3RlcE91dHB1dHMuZmFpbGVkKFxuICAgICAgICAgICAgYEludmFsaWQgcGFyYW1zOiAke3BhcnNlUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIFwiSU5WQUxJRF9QQVJBTVNcIlxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWxpZGF0ZWRQYXJhbXMgPSBwYXJzZVJlc3VsdC5kYXRhO1xuXG4gICAgICAvLyBSb3V0ZSB0byBhcHByb3ByaWF0ZSBwaGFzZSBiYXNlZCBvbiBzdGVwIGtpbmQgYW5kIGlucHV0IGNvbnRleHRcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMucm91dGVFeGVjdXRpb24oXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgdmFsaWRhdGVkUGFyYW1zLFxuICAgICAgICBhcHByb3ZhbENvbnRleHQsXG4gICAgICAgIHBvbGxpbmdTdGF0ZVxuICAgICAgKTtcblxuICAgICAgdGhpcy53cml0ZU91dHB1dChvdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICB0aGlzLndyaXRlT3V0cHV0KFN0ZXBPdXRwdXRzLmZhaWxlZChlcnJvck1lc3NhZ2UsIFwiRVhFQ1VUSU9OX0VSUk9SXCIpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJvdXRlRXhlY3V0aW9uKFxuICAgIGluc3RhbmNlOiBCYXNlU3RlcDx1bmtub3duPixcbiAgICBtZXRhZGF0YTogU3RlcE1ldGFkYXRhLFxuICAgIHBhcmFtczogdW5rbm93bixcbiAgICBhcHByb3ZhbENvbnRleHQ/OiBBcHByb3ZhbENvbnRleHQsXG4gICAgcG9sbGluZ1N0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxTdGVwT3V0cHV0PiB7XG4gICAgY29uc3QgcmVxdWlyZXNBcHByb3ZhbCA9IG1ldGFkYXRhLnJlcXVpcmVzQXBwcm92YWw7XG5cbiAgICBpZiAobWV0YWRhdGEuc3RlcEtpbmQgPT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlU2ltcGxlU3RlcChcbiAgICAgICAgaW5zdGFuY2UgYXMgU2ltcGxlU3RlcDx1bmtub3duPixcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICByZXF1aXJlc0FwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbENvbnRleHRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLnN0ZXBLaW5kID09PSBcInBvbGxpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVQb2xsaW5nU3RlcChcbiAgICAgICAgaW5zdGFuY2UgYXMgUG9sbGluZ1N0ZXA8dW5rbm93biwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHJlcXVpcmVzQXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsQ29udGV4dCxcbiAgICAgICAgcG9sbGluZ1N0YXRlXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBTdGVwT3V0cHV0cy5mYWlsZWQoXG4gICAgICBgVW5rbm93biBzdGVwIGtpbmQ6ICR7bWV0YWRhdGEuc3RlcEtpbmR9YCxcbiAgICAgIFwiVU5LTk9XTl9TVEVQX0tJTkRcIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUm91dGUgU2ltcGxlU3RlcCBleGVjdXRpb24gYmFzZWQgb24gYXBwcm92YWwgc3RhdGUuXG4gICAqXG4gICAqIHwgcmVxdWlyZXNBcHByb3ZhbCB8IGFwcHJvdmFsQ29udGV4dCBwcm92aWRlZD8gfCBBY3Rpb24gICAgICAgICAgICAgIHxcbiAgICogfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICAgKiB8IE5vICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBydW4ocGFyYW1zKSAgICB8XG4gICAqIHwgWWVzICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHByZXBhcmUocGFyYW1zKXxcbiAgICogfCBZZXMgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcnVuKHBhcmFtcywgYXBwcm92YWwpIHxcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcm91dGVTaW1wbGVTdGVwKFxuICAgIGluc3RhbmNlOiBTaW1wbGVTdGVwPHVua25vd24+LFxuICAgIHBhcmFtczogdW5rbm93bixcbiAgICByZXF1aXJlc0FwcHJvdmFsOiBib29sZWFuLFxuICAgIGFwcHJvdmFsQ29udGV4dD86IEFwcHJvdmFsQ29udGV4dFxuICApOiBQcm9taXNlPFN0ZXBPdXRwdXQ+IHtcbiAgICBpZiAoIXJlcXVpcmVzQXBwcm92YWwpIHtcbiAgICAgIC8vIE5vIGFwcHJvdmFsIG5lZWRlZCAtIGp1c3QgcnVuXG4gICAgICByZXR1cm4gaW5zdGFuY2UuZXhlY3V0ZShwYXJhbXMsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgaWYgKCFhcHByb3ZhbENvbnRleHQpIHtcbiAgICAgIC8vIE5lZWRzIGFwcHJvdmFsIGJ1dCBkb24ndCBoYXZlIGl0IHlldCAtIGNhbGwgcHJlcGFyZVxuICAgICAgcmV0dXJuIGluc3RhbmNlLnByZXBhcmUocGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBIYXZlIGFwcHJvdmFsIC0gcnVuIHdpdGggYXBwcm92YWwgY29udGV4dFxuICAgIHJldHVybiBpbnN0YW5jZS5leGVjdXRlKHBhcmFtcywgYXBwcm92YWxDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3V0ZSBQb2xsaW5nU3RlcCBleGVjdXRpb24gYmFzZWQgb24gYXBwcm92YWwgYW5kIHBvbGxpbmcgc3RhdGUuXG4gICAqXG4gICAqIHwgcmVxdWlyZXNBcHByb3ZhbCB8IGFwcHJvdmFsQ29udGV4dD8gfCBwb2xsaW5nU3RhdGU/IHwgQWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiB8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAgICogfCBObyAgICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgfCBDYWxsIHRyaWdnZXIocGFyYW1zKSAgICAgICAgICB8XG4gICAqIHwgTm8gICAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgIHwgQ2FsbCBwb2xsKHBhcmFtcywgcG9sbGluZ1N0YXRlKXxcbiAgICogfCBZZXMgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgfCBDYWxsIHByZXBhcmUocGFyYW1zKSAgICAgICAgICB8XG4gICAqIHwgWWVzICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgIHwgQ2FsbCB0cmlnZ2VyKHBhcmFtcywgYXBwcm92YWwpfFxuICAgKiB8IFllcyAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICB8IENhbGwgcG9sbChwYXJhbXMsIHBvbGxpbmdTdGF0ZSl8XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJvdXRlUG9sbGluZ1N0ZXAoXG4gICAgaW5zdGFuY2U6IFBvbGxpbmdTdGVwPHVua25vd24sIFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgICBwYXJhbXM6IHVua25vd24sXG4gICAgcmVxdWlyZXNBcHByb3ZhbDogYm9vbGVhbixcbiAgICBhcHByb3ZhbENvbnRleHQ/OiBBcHByb3ZhbENvbnRleHQsXG4gICAgcG9sbGluZ1N0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxTdGVwT3V0cHV0PiB7XG4gICAgLy8gSWYgd2UgaGF2ZSBwb2xsaW5nIHN0YXRlLCB3ZSdyZSBpbiB0aGUgcG9sbCBwaGFzZSAocmVnYXJkbGVzcyBvZiBhcHByb3ZhbClcbiAgICBpZiAocG9sbGluZ1N0YXRlKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UuZXhlY3V0ZVBvbGwocGFyYW1zLCBwb2xsaW5nU3RhdGUpO1xuICAgIH1cblxuICAgIGlmICghcmVxdWlyZXNBcHByb3ZhbCkge1xuICAgICAgLy8gTm8gYXBwcm92YWwgbmVlZGVkIC0gdHJpZ2dlciBkaXJlY3RseVxuICAgICAgcmV0dXJuIGluc3RhbmNlLmV4ZWN1dGVUcmlnZ2VyKHBhcmFtcywgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBpZiAoIWFwcHJvdmFsQ29udGV4dCkge1xuICAgICAgLy8gTmVlZHMgYXBwcm92YWwgYnV0IGRvbid0IGhhdmUgaXQgeWV0IC0gY2FsbCBwcmVwYXJlXG4gICAgICByZXR1cm4gaW5zdGFuY2UucHJlcGFyZShwYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIEhhdmUgYXBwcm92YWwgLSB0cmlnZ2VyIHdpdGggYXBwcm92YWwgY29udGV4dFxuICAgIHJldHVybiBpbnN0YW5jZS5leGVjdXRlVHJpZ2dlcihwYXJhbXMsIGFwcHJvdmFsQ29udGV4dCk7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlT3V0cHV0KG91dHB1dDogU3RlcE91dHB1dCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGguZGlybmFtZSh0aGlzLm91dHB1dFBhdGgpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXREaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMob3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMub3V0cHV0UGF0aCwgSlNPTi5zdHJpbmdpZnkob3V0cHV0LCBudWxsLCAyKSk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devramps/sdk-typescript",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "SDK for building custom deployment steps for DevRamps",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -10,6 +10,9 @@
10
10
  "LICENSE",
11
11
  "README.md"
12
12
  ],
13
+ "bin": {
14
+ "create-step-registry": "./scripts/create-step-registry.js"
15
+ },
13
16
  "exports": {
14
17
  ".": {
15
18
  "import": "./dist/index.js",
@@ -0,0 +1,297 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+ const { execSync } = require("child_process");
6
+
7
+ // Get optional folder name from command line args, default to "step-registry"
8
+ const folderName = process.argv[2] || "step-registry";
9
+
10
+ // Define the base directory
11
+ const baseDir = path.join(process.cwd(), folderName);
12
+
13
+ // Create the folder
14
+ console.log(`Creating ${folderName} folder...`);
15
+ if (!fs.existsSync(baseDir)) {
16
+ fs.mkdirSync(baseDir);
17
+ }
18
+
19
+ // Initialize NPM project
20
+ console.log("Initializing NPM project...");
21
+ execSync("npm init -y", { cwd: baseDir, stdio: "inherit" });
22
+
23
+ // Install dependencies
24
+ console.log("Installing dependencies...");
25
+ execSync("npm install @devramps/sdk-typescript zod", {
26
+ cwd: baseDir,
27
+ stdio: "inherit",
28
+ });
29
+ execSync("npm install --save-dev @types/node jest ts-jest @types/jest", {
30
+ cwd: baseDir,
31
+ stdio: "inherit",
32
+ });
33
+
34
+ // Create src folder structure
35
+ const srcDir = path.join(baseDir, "src");
36
+ const stepsDir = path.join(srcDir, "steps");
37
+ console.log("Creating src/steps folder structure...");
38
+ if (!fs.existsSync(srcDir)) {
39
+ fs.mkdirSync(srcDir);
40
+ }
41
+ if (!fs.existsSync(stepsDir)) {
42
+ fs.mkdirSync(stepsDir, { recursive: true });
43
+ }
44
+
45
+ // Create tst folder structure
46
+ const tstDir = path.join(baseDir, "tst");
47
+ const tstStepsDir = path.join(tstDir, "steps");
48
+ console.log("Creating tst/steps folder structure...");
49
+ if (!fs.existsSync(tstDir)) {
50
+ fs.mkdirSync(tstDir);
51
+ }
52
+ if (!fs.existsSync(tstStepsDir)) {
53
+ fs.mkdirSync(tstStepsDir, { recursive: true });
54
+ }
55
+
56
+ // Create deployment-service.ts (dependency example)
57
+ console.log("Creating deployment-service.ts...");
58
+ const deploymentServiceContent = `export interface DeploymentService {
59
+ deploy(target: string, version?: string): Promise<{ deploymentId: string }>;
60
+ }
61
+
62
+ export class RealDeploymentService implements DeploymentService {
63
+ async deploy(target: string, version?: string): Promise<{ deploymentId: string }> {
64
+ // Simulate a deployment
65
+ console.log(\`Deploying to \${target}\${version ? \` version \${version}\` : ""}\`);
66
+ return { deploymentId: \`deploy-\${Date.now()}\` };
67
+ }
68
+ }
69
+ `;
70
+ fs.writeFileSync(path.join(srcDir, "deployment-service.ts"), deploymentServiceContent);
71
+
72
+ // Create my-first-step.ts
73
+ console.log("Creating my-first-step.ts...");
74
+ const myFirstStepContent = `import {
75
+ RunOutput,
76
+ SimpleStep,
77
+ Step,
78
+ StepOutputs,
79
+ } from "@devramps/sdk-typescript";
80
+ import z from "zod";
81
+ import { DeploymentService } from "../deployment-service";
82
+
83
+ const DeploySchema = z.object({
84
+ target: z.string().describe("A Target"),
85
+ version: z.string().optional(),
86
+ });
87
+
88
+ type DeployParams = z.infer<typeof DeploySchema>;
89
+
90
+ @Step({
91
+ name: "Custom Deployment Action",
92
+ type: "CUSTOM:SCRIPT:DEPLOY",
93
+ schema: DeploySchema,
94
+ })
95
+ export class MyFirstStep extends SimpleStep<DeployParams> {
96
+ constructor(private deploymentService: DeploymentService) {
97
+ super();
98
+ }
99
+
100
+ async run(params: DeployParams): Promise<RunOutput> {
101
+ this.logger.info(\`Deploying with params: \${JSON.stringify(params)}\`);
102
+
103
+ const result = await this.deploymentService.deploy(
104
+ params.target,
105
+ params.version
106
+ );
107
+
108
+ this.logger.info(\`Deployment completed: \${result.deploymentId}\`);
109
+
110
+ return StepOutputs.success({
111
+ deploymentId: result.deploymentId,
112
+ target: params.target,
113
+ version: params.version,
114
+ });
115
+ }
116
+ }
117
+ `;
118
+ fs.writeFileSync(path.join(stepsDir, "my-first-step.ts"), myFirstStepContent);
119
+
120
+ // Create src/index.ts
121
+ console.log("Creating src/index.ts...");
122
+ const indexContent = `import { StepRegistry } from "@devramps/sdk-typescript";
123
+ import { MyFirstStep } from "./steps/my-first-step";
124
+ import { RealDeploymentService } from "./deployment-service";
125
+
126
+ // Instantiate dependencies
127
+ const deploymentService = new RealDeploymentService();
128
+
129
+ // Instantiate steps with their dependencies
130
+ const myFirstStep = new MyFirstStep(deploymentService);
131
+
132
+ // Register step instances
133
+ StepRegistry.run([myFirstStep]);
134
+ `;
135
+ fs.writeFileSync(path.join(srcDir, "index.ts"), indexContent);
136
+
137
+ // Create tsconfig.json
138
+ console.log("Creating tsconfig.json...");
139
+ const tsconfigContent = `{
140
+ "compilerOptions": {
141
+ "target": "ES2022",
142
+ "module": "commonjs",
143
+ "lib": ["ES2022"],
144
+ "types": ["node", "jest"],
145
+ "declaration": true,
146
+ "strict": true,
147
+ "noImplicitAny": true,
148
+ "strictNullChecks": true,
149
+ "noImplicitThis": true,
150
+ "alwaysStrict": true,
151
+ "noUnusedLocals": false,
152
+ "noUnusedParameters": false,
153
+ "noImplicitReturns": true,
154
+ "noFallthroughCasesInSwitch": false,
155
+ "inlineSourceMap": true,
156
+ "inlineSources": true,
157
+ "experimentalDecorators": true,
158
+ "emitDecoratorMetadata": true,
159
+ "strictPropertyInitialization": false,
160
+ "esModuleInterop": true,
161
+ "skipLibCheck": true,
162
+ "outDir": "./dist",
163
+ "rootDir": "./src"
164
+ },
165
+ "include": ["src/**/*", "tst/**/*"],
166
+ "exclude": ["node_modules", "dist"]
167
+ }
168
+ `;
169
+ fs.writeFileSync(path.join(baseDir, "tsconfig.json"), tsconfigContent);
170
+
171
+ // Create jest.config.js
172
+ console.log("Creating jest.config.js...");
173
+ const jestConfigContent = `module.exports = {
174
+ preset: 'ts-jest',
175
+ testEnvironment: 'node',
176
+ roots: ['<rootDir>/tst'],
177
+ testMatch: ['**/*.test.ts'],
178
+ moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
179
+ collectCoverageFrom: [
180
+ 'src/**/*.ts',
181
+ '!src/**/*.d.ts',
182
+ ],
183
+ };
184
+ `;
185
+ fs.writeFileSync(path.join(baseDir, "jest.config.js"), jestConfigContent);
186
+
187
+ // Create test file for my-first-step
188
+ console.log("Creating tst/steps/my-first-step.test.ts...");
189
+ const testContent = `import { MyFirstStep } from "../../src/steps/my-first-step";
190
+ import { DeploymentService } from "../../src/deployment-service";
191
+ import { StepOutputs } from "@devramps/sdk-typescript";
192
+
193
+ // Mock implementation of DeploymentService for testing
194
+ class MockDeploymentService implements DeploymentService {
195
+ async deploy(target: string, version?: string): Promise<{ deploymentId: string }> {
196
+ return { deploymentId: \`mock-deploy-\${target}-\${version || "latest"}\` };
197
+ }
198
+ }
199
+
200
+ describe("MyFirstStep", () => {
201
+ let mockDeploymentService: MockDeploymentService;
202
+ let step: MyFirstStep;
203
+
204
+ beforeEach(() => {
205
+ // Create mock dependency
206
+ mockDeploymentService = new MockDeploymentService();
207
+ // Inject mock into step
208
+ step = new MyFirstStep(mockDeploymentService);
209
+ });
210
+
211
+ it("should run successfully with valid parameters", async () => {
212
+ const params = {
213
+ target: "production",
214
+ version: "1.0.0",
215
+ };
216
+
217
+ const result = await step.run(params);
218
+
219
+ expect(result.status).toBe("SUCCESS");
220
+ if (result.status === "SUCCESS") {
221
+ expect(result.data).toEqual({
222
+ deploymentId: "mock-deploy-production-1.0.0",
223
+ target: "production",
224
+ version: "1.0.0",
225
+ });
226
+ }
227
+ });
228
+
229
+ it("should run successfully without optional version parameter", async () => {
230
+ const params = {
231
+ target: "staging",
232
+ };
233
+
234
+ const result = await step.run(params);
235
+
236
+ expect(result.status).toBe("SUCCESS");
237
+ if (result.status === "SUCCESS") {
238
+ expect(result.data).toEqual({
239
+ deploymentId: "mock-deploy-staging-latest",
240
+ target: "staging",
241
+ version: undefined,
242
+ });
243
+ }
244
+ });
245
+
246
+ it("should call deployment service with correct parameters", async () => {
247
+ const deploySpy = jest.spyOn(mockDeploymentService, "deploy");
248
+ const params = {
249
+ target: "development",
250
+ version: "2.0.0",
251
+ };
252
+
253
+ await step.run(params);
254
+
255
+ expect(deploySpy).toHaveBeenCalledWith("development", "2.0.0");
256
+ });
257
+
258
+ it("should log deployment information", async () => {
259
+ // Access the logger through type assertion to test logging behavior
260
+ const logSpy = jest.spyOn((step as any).logger, "info");
261
+ const params = {
262
+ target: "production",
263
+ version: "3.0.0",
264
+ };
265
+
266
+ await step.run(params);
267
+
268
+ expect(logSpy).toHaveBeenCalledWith(
269
+ \`Deploying with params: \${JSON.stringify(params)}\`
270
+ );
271
+ expect(logSpy).toHaveBeenCalledWith(
272
+ "Deployment completed: mock-deploy-production-3.0.0"
273
+ );
274
+ });
275
+ });
276
+ `;
277
+ fs.writeFileSync(path.join(tstStepsDir, "my-first-step.test.ts"), testContent);
278
+
279
+ // Update package.json to add build and start scripts
280
+ console.log('Adding build and start scripts to package.json...');
281
+ const packageJsonPath = path.join(baseDir, 'package.json');
282
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
283
+ packageJson.scripts = {
284
+ ...packageJson.scripts,
285
+ "build-step-registry": "tsc -p tsconfig.json",
286
+ "start-step-registry": "node ./dist/index.js",
287
+ "test": "jest",
288
+ "test:watch": "jest --watch",
289
+ "test:coverage": "jest --coverage"
290
+ };
291
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
292
+
293
+ console.log(`\nStep registry created successfully in '${folderName}'!`);
294
+ console.log(`\nNext steps:`);
295
+ console.log(` cd ${folderName}`);
296
+ console.log(` npm run build-step-registry`);
297
+ console.log(` npm run test`);