@pipeline-builder/pipeline-manager 4.1.13 → 4.1.15

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.
@@ -9,7 +9,8 @@ import { ApiClient } from './api-client.js';
9
9
  *
10
10
  * Failures are non-fatal: a missing plugin or unreachable API logs a warning
11
11
  * and falls through to the deploy-time custom resource path so partial
12
- * platform outages don't block synth/deploy.
12
+ * platform outages don't block synth/deploy. The exception is an image that
13
+ * fails signature verification — that aborts the synth.
13
14
  *
14
15
  * Keyed by `alias || name` to match `PluginLookup.plugin()`.
15
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/plugin-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAoD5C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2ClC"}
1
+ {"version":3,"file":"plugin-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/plugin-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA2E5C;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAgDlC"}
@@ -1,6 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { errorMessage } from '@pipeline-builder/api-core';
3
+ import { ErrorCode, errorMessage } from '@pipeline-builder/api-core';
4
4
  import { ApiClient } from './api-client.js';
5
5
  import { printWarning } from './output-utils.js';
6
6
  /**
@@ -19,7 +19,7 @@ function cacheKey(ref) {
19
19
  */
20
20
  function collectPluginRefs(props) {
21
21
  const refs = [];
22
- const seen = new Set();
22
+ const seen = new Map();
23
23
  const push = (raw) => {
24
24
  if (!raw || typeof raw !== 'object')
25
25
  return;
@@ -27,9 +27,23 @@ function collectPluginRefs(props) {
27
27
  if (!r.name)
28
28
  return;
29
29
  const key = cacheKey(r);
30
- if (seen.has(key))
30
+ // The name the lookup will TARGET — an explicit `filter.name` wins (see
31
+ // below), so two refs that resolve to the same plugin are not a collision.
32
+ const target = r.filter?.name ?? r.name;
33
+ const holder = seen.get(key);
34
+ if (holder !== undefined) {
35
+ // One alias can only ever mean one plugin. Deduplicating on the alias
36
+ // alone kept the FIRST plugin and silently dropped the second, so a step
37
+ // declaring `{ name: 'maven-build', alias: 'build' }` after another
38
+ // declaring `{ name: 'nodejs-build', alias: 'build' }` ran nodejs-build's
39
+ // image and commands — no error, just the wrong build.
40
+ if (holder !== target) {
41
+ throw new Error(`Plugin alias "${key}" is used for two different plugins ("${holder}" and "${target}"). `
42
+ + 'Give each plugin its own alias.');
43
+ }
31
44
  return;
32
- seen.add(key);
45
+ }
46
+ seen.set(key, target);
33
47
  refs.push(r);
34
48
  };
35
49
  const synth = props.synth;
@@ -42,6 +56,11 @@ function collectPluginRefs(props) {
42
56
  }
43
57
  return refs;
44
58
  }
59
+ /** The plugin service's 409 `IMAGE_VERIFICATION_FAILED` answer from `/plugins/lookup`. */
60
+ function isImageVerificationFailure(err) {
61
+ const data = err?.response?.data;
62
+ return !!data && typeof data === 'object' && data.code === ErrorCode.IMAGE_VERIFICATION_FAILED;
63
+ }
45
64
  /**
46
65
  * Pre-resolve plugins by calling the same `POST /api/plugins/lookup` endpoint
47
66
  * the deploy-time custom resource Lambda uses. Returning the full Plugin
@@ -52,7 +71,8 @@ function collectPluginRefs(props) {
52
71
  *
53
72
  * Failures are non-fatal: a missing plugin or unreachable API logs a warning
54
73
  * and falls through to the deploy-time custom resource path so partial
55
- * platform outages don't block synth/deploy.
74
+ * platform outages don't block synth/deploy. The exception is an image that
75
+ * fails signature verification — that aborts the synth.
56
76
  *
57
77
  * Keyed by `alias || name` to match `PluginLookup.plugin()`.
58
78
  */
@@ -93,10 +113,15 @@ export async function resolvePluginsForProps(client, props) {
93
113
  }
94
114
  }
95
115
  catch (err) {
116
+ // A plugin whose image signature doesn't verify is NOT an outage to ride
117
+ // out: falling back would quietly turn it into an unresolved step. Stop.
118
+ if (isImageVerificationFailure(err)) {
119
+ throw new Error(`Plugin "${ref.name}" image failed signature verification: ${errorMessage(err)}`);
120
+ }
96
121
  const msg = errorMessage(err);
97
122
  printWarning(`Plugin "${ref.name}" pre-resolution failed (${msg}) — falling back to deploy-time resolution`);
98
123
  }
99
124
  }));
100
125
  return resolved;
101
126
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBU2pEOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxHQUFjO0lBQzlCLE9BQU8sR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQThCO0lBQ3ZELE1BQU0sSUFBSSxHQUFnQixFQUFFLENBQUM7SUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUUvQixNQUFNLElBQUksR0FBRyxDQUFDLEdBQVksRUFBUSxFQUFFO1FBQ2xDLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDNUMsTUFBTSxDQUFDLEdBQUcsR0FBZ0IsQ0FBQztRQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUF5QyxDQUFDO0lBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFcEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQW9FLENBQUM7SUFDMUYsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7UUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsTUFBaUIsRUFDakIsS0FBOEI7SUFFOUIsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUVqQyxNQUFNLFFBQVEsR0FBNEIsRUFBRSxDQUFDO0lBRTdDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsMkVBQTJFO1FBQzNFLHlFQUF5RTtRQUN6RSx5RUFBeUU7UUFDekUsMEVBQTBFO1FBQzFFLDBFQUEwRTtRQUMxRSw2RUFBNkU7UUFDN0UsMkVBQTJFO1FBQzNFLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFVLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMxRSwwRUFBMEU7WUFDMUUsdURBQXVEO1lBQ3ZELHVFQUF1RTtZQUN2RSx3RUFBd0U7WUFDeEUsK0RBQStEO1lBQy9ELHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsTUFBTSxJQUFJLEdBQUksR0FBMEIsQ0FBQyxJQUFJLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQ1QsSUFBeUMsRUFBRSxNQUFNLENBQUMsdUJBQXVCO21CQUN0RSxHQUE0QixDQUFDLE1BQU0sQ0FBQyxhQUFhO21CQUNsRCxJQUFJLENBQUMsbUJBQW1CO21CQUN4QixHQUFHLENBQUMsQ0FBQyxjQUFjO1lBQ3hCLElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSyxNQUE0QixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvRSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxzRUFBc0UsQ0FBQyxDQUFDO1lBQzFHLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSw0QkFBNEIsR0FBRyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQy9HLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBBcGlDbGllbnQgfSBmcm9tICcuL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHsgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKiogTWluaW1hbCBwbHVnaW4gcmVmZXJlbmNlIHNoYXBlIOKAlCBtYXRjaGVzIFBsdWdpbk9wdGlvbnMgZnJvbSBwaXBlbGluZS1jb3JlLiAqL1xuaW50ZXJmYWNlIFBsdWdpblJlZiB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWxpYXM/OiBzdHJpbmc7XG4gIGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIENhY2hlIGtleSBtYXRjaGluZyBgUGx1Z2luTG9va3VwLm5vcm1hbGl6ZSgpYDogZXhwbGljaXQgYWxpYXMgd2hlbiBzZXQsXG4gKiBvdGhlcndpc2UgYCR7bmFtZX0tYWxpYXNgLiBNdXN0IHN0YXkgaW4gc3luYyB3aXRoIHRoZSBjb25zdW1lcnMgaW5cbiAqIHBpcGVsaW5lLWNvcmUvcGx1Z2luLWxvb2t1cC50cyBhbmQgcGlwZWxpbmUtYnVpbGRlci50cyB0aGF0IHJlYWQgdGhpcyBtYXAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlS2V5KHJlZjogUGx1Z2luUmVmKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlZi5hbGlhcyB8fCBgJHtyZWYubmFtZX0tYWxpYXNgO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHBpcGVsaW5lIHByb3BzIHRyZWUgdG8gY29sbGVjdCBldmVyeSBwbHVnaW4gcmVmZXJlbmNlLiBQbHVnaW5zXG4gKiBhcHBlYXIgYXQgYHN5bnRoLnBsdWdpbmAgYW5kIGF0IGBzdGFnZXNbXS5zdGVwc1tdLnBsdWdpbmAuIEVudHJpZXMgYXJlXG4gKiBkZS1kdXBsaWNhdGVkIGJ5IGBjYWNoZUtleSgpYCDigJQgdGhlIHNhbWUga2V5IGBQbHVnaW5Mb29rdXAucGx1Z2luKClgIHVzZXMsXG4gKiBzbyB0aGUgcmVzb2x2ZWQtcGx1Z2lucyBtYXAgbG9va3VwcyBtYXRjaCBkb3duc3RyZWFtLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0UGx1Z2luUmVmcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQbHVnaW5SZWZbXSB7XG4gIGNvbnN0IHJlZnM6IFBsdWdpblJlZltdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdCBwdXNoID0gKHJhdzogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09ICdvYmplY3QnKSByZXR1cm47XG4gICAgY29uc3QgciA9IHJhdyBhcyBQbHVnaW5SZWY7XG4gICAgaWYgKCFyLm5hbWUpIHJldHVybjtcbiAgICBjb25zdCBrZXkgPSBjYWNoZUtleShyKTtcbiAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgcmV0dXJuO1xuICAgIHNlZW4uYWRkKGtleSk7XG4gICAgcmVmcy5wdXNoKHIpO1xuICB9O1xuXG4gIGNvbnN0IHN5bnRoID0gcHJvcHMuc3ludGggYXMgeyBwbHVnaW4/OiB1bmtub3duIH0gfCB1bmRlZmluZWQ7XG4gIHB1c2goc3ludGg/LnBsdWdpbik7XG5cbiAgY29uc3Qgc3RhZ2VzID0gcHJvcHMuc3RhZ2VzIGFzIEFycmF5PHsgc3RlcHM/OiBBcnJheTx7IHBsdWdpbj86IHVua25vd24gfT4gfT4gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHN0YWdlLnN0ZXBzID8/IFtdKSB7XG4gICAgICBwdXNoKHN0ZXAucGx1Z2luKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVmcztcbn1cblxuLyoqXG4gKiBQcmUtcmVzb2x2ZSBwbHVnaW5zIGJ5IGNhbGxpbmcgdGhlIHNhbWUgYFBPU1QgL2FwaS9wbHVnaW5zL2xvb2t1cGAgZW5kcG9pbnRcbiAqIHRoZSBkZXBsb3ktdGltZSBjdXN0b20gcmVzb3VyY2UgTGFtYmRhIHVzZXMuIFJldHVybmluZyB0aGUgZnVsbCBQbHVnaW5cbiAqIHJlY29yZCBhdCBzeW50aCB0aW1lIGlzIHdoYXQgYWxsb3dzIHRoZSByZXN1bHRpbmcgQ0ZOIHRlbXBsYXRlIHRvIHNoaXBcbiAqIHdpdGggcmVhbCBDb2RlQnVpbGQgaW1hZ2UgVVJJcyAoYDxob3N0Pi88bnM+LzxuYW1lPjo8dmVyc2lvbj5gKSByYXRoZXIgdGhhblxuICogdGhlIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMGAgZmFsbGJhY2sgdGhhdCB0aGUgc3ludGgtdGltZSB0b2tlbiBwYXRoXG4gKiBmb3JjZXMuXG4gKlxuICogRmFpbHVyZXMgYXJlIG5vbi1mYXRhbDogYSBtaXNzaW5nIHBsdWdpbiBvciB1bnJlYWNoYWJsZSBBUEkgbG9ncyBhIHdhcm5pbmdcbiAqIGFuZCBmYWxscyB0aHJvdWdoIHRvIHRoZSBkZXBsb3ktdGltZSBjdXN0b20gcmVzb3VyY2UgcGF0aCBzbyBwYXJ0aWFsXG4gKiBwbGF0Zm9ybSBvdXRhZ2VzIGRvbid0IGJsb2NrIHN5bnRoL2RlcGxveS5cbiAqXG4gKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgdG8gbWF0Y2ggYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGx1Z2luc0ZvclByb3BzKFxuICBjbGllbnQ6IEFwaUNsaWVudCxcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCByZWZzID0gY29sbGVjdFBsdWdpblJlZnMocHJvcHMpO1xuICBpZiAocmVmcy5sZW5ndGggPT09IDApIHJldHVybiB7fTtcblxuICBjb25zdCByZXNvbHZlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBhd2FpdCBQcm9taXNlLmFsbChyZWZzLm1hcChhc3luYyAocmVmKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkocmVmKTtcbiAgICAvLyBUaGUgcGx1Z2luIE5BTUUgbGl2ZXMgb24gdGhlIHJlZiAoYSBzaWJsaW5nIG9mIGBmaWx0ZXJgKSwgTk9UIGluc2lkZSB0aGVcbiAgICAvLyBmaWx0ZXIgb2JqZWN0IOKAlCBidXQgdGhlIGxvb2t1cCBtYXRjaGVzIG9uIHRoZSBmaWx0ZXIuIEEgZmlsdGVyIHdpdGhvdXRcbiAgICAvLyBgbmFtZWAgKGUuZy4gYHt2ZXJzaW9uLCB2aXNpYmlsaXR5LCBpc0FjdGl2ZSwgaXNEZWZhdWx0fWApIG1hdGNoZXMgQU5ZXG4gICAgLy8gcGx1Z2luIHdpdGggdGhvc2UgYXR0cmlidXRlcywgYW5kIHRoZSBlbmRwb2ludCByZXR1cm5zIGFuIGFyYml0cmFyeSBvbmVcbiAgICAvLyAoc2VlbjogYGRvY2tlcmZpbGUtbXVsdGktcHJvdmlkZXJgKS4gVGhhdCBtYWRlIHRoZSBzeW50aCBhbmQgZXZlcnkgc3RlcFxuICAgIC8vIHJlc29sdmUgdG8gdGhlIFdST05HIHBsdWdpbi4gU28gd2hlbiB0aGUgZmlsdGVyIG9taXRzIGBuYW1lYCwgZmFsbCBiYWNrIHRvXG4gICAgLy8gdGhlIHJlZidzIHBsdWdpbiBuYW1lOyBhbiBleHBsaWNpdCBmaWx0ZXIgYG5hbWVgIHN0aWxsIHRha2VzIHByZWNlZGVuY2UuXG4gICAgY29uc3QgZmlsdGVyID0geyBuYW1lOiByZWYubmFtZSwgLi4uKHJlZi5maWx0ZXIgPz8geyBpc0FjdGl2ZTogdHJ1ZSwgaXNEZWZhdWx0OiB0cnVlIH0pIH07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PHVua25vd24+KCcvYXBpL3BsdWdpbnMvbG9va3VwJywgeyBmaWx0ZXIgfSk7XG4gICAgICAvLyBVbndyYXAgdGhlIHBsdWdpbiByZWNvcmQgZnJvbSB3aGF0ZXZlciBlbnZlbG9wZSB0aGUgcmVzcG9uc2UgbWlkZGxld2FyZVxuICAgICAgLy8gYXBwbGllZC4gVGhlIHBsYXRmb3JtJ3Mgc3RhbmRhcmQgc3VjY2VzcyBlbnZlbG9wZSBpc1xuICAgICAgLy8gYHsgc3VjY2Vzcywgc3RhdHVzQ29kZSwgZGF0YTogeyBwbHVnaW46IFBsdWdpbiB9IH1gIChub3RlIHRoZSBET1VCTEVcbiAgICAgIC8vIG5lc3Rpbmc6IGRhdGEucGx1Z2luKSwgYnV0IHRvbGVyYXRlIGB7IGRhdGE6IFBsdWdpbiB9YCwgYHsgcGx1Z2luIH1gLFxuICAgICAgLy8gYW5kIGEgYmFyZSBQbHVnaW4gdG9vLiBPbmx5IHN0b3BwaW5nIGF0IGByZXMuZGF0YWAgKHdoaWNoIGlzXG4gICAgICAvLyBgeyBwbHVnaW46IC4uLiB9YCkgbWFkZSBgLm5hbWVgIHVuZGVmaW5lZCDihpIgZXZlcnkgbG9va3VwIGZlbGwgYmFjayB0b1xuICAgICAgLy8gZGVwbG95LXRpbWUgcmVzb2x1dGlvbiBldmVuIHRob3VnaCB0aGUgY2F0YWxvZyBoYWQgdGhlIHBsdWdpbi5cbiAgICAgIGNvbnN0IGRhdGEgPSAocmVzIGFzIHsgZGF0YT86IHVua25vd24gfSkuZGF0YTtcbiAgICAgIGNvbnN0IHBsdWdpbiA9XG4gICAgICAgIChkYXRhIGFzIHsgcGx1Z2luPzogdW5rbm93biB9IHwgdW5kZWZpbmVkKT8ucGx1Z2luIC8vIHsgZGF0YTogeyBwbHVnaW4gfSB9XG4gICAgICAgID8/IChyZXMgYXMgeyBwbHVnaW4/OiB1bmtub3duIH0pLnBsdWdpbiAvLyB7IHBsdWdpbiB9XG4gICAgICAgID8/IGRhdGEgLy8geyBkYXRhOiBQbHVnaW4gfVxuICAgICAgICA/PyByZXM7IC8vIGJhcmUgUGx1Z2luXG4gICAgICBpZiAocGx1Z2luICYmIHR5cGVvZiBwbHVnaW4gPT09ICdvYmplY3QnICYmIChwbHVnaW4gYXMgeyBuYW1lPzogc3RyaW5nIH0pLm5hbWUpIHtcbiAgICAgICAgcmVzb2x2ZWRba2V5XSA9IHBsdWdpbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByaW50V2FybmluZyhgUGx1Z2luIFwiJHtyZWYubmFtZX1cIiBsb29rdXAgcmV0dXJuZWQgbm8gcmVjb3JkIOKAlCBmYWxsaW5nIGJhY2sgdG8gZGVwbG95LXRpbWUgcmVzb2x1dGlvbmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbXNnID0gZXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBwcmludFdhcm5pbmcoYFBsdWdpbiBcIiR7cmVmLm5hbWV9XCIgcHJlLXJlc29sdXRpb24gZmFpbGVkICgke21zZ30pIOKAlCBmYWxsaW5nIGJhY2sgdG8gZGVwbG95LXRpbWUgcmVzb2x1dGlvbmApO1xuICAgIH1cbiAgfSkpO1xuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cbiJdfQ==
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVNqRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsR0FBYztJQUM5QixPQUFPLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxLQUE4QjtJQUN2RCxNQUFNLElBQUksR0FBZ0IsRUFBRSxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRXZDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBWSxFQUFRLEVBQUU7UUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQUUsT0FBTztRQUM1QyxNQUFNLENBQUMsR0FBRyxHQUFnQixDQUFDO1FBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDcEIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLHdFQUF3RTtRQUN4RSwyRUFBMkU7UUFDM0UsTUFBTSxNQUFNLEdBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUEyQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJ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QixHQUFHLENBQUMsQ0FBQyxjQUFjO1lBQ3hCLElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSyxNQUE0QixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvRSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxzRUFBc0UsQ0FBQyxDQUFDO1lBQzFHLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLHlFQUF5RTtZQUN6RSx5RUFBeUU7WUFDekUsSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksMENBQTBDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEcsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSw0QkFBNEIsR0FBRyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQy9HLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBFcnJvckNvZGUsIGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5cbi8qKiBNaW5pbWFsIHBsdWdpbiByZWZlcmVuY2Ugc2hhcGUg4oCUIG1hdGNoZXMgUGx1Z2luT3B0aW9ucyBmcm9tIHBpcGVsaW5lLWNvcmUuICovXG5pbnRlcmZhY2UgUGx1Z2luUmVmIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhbGlhcz86IHN0cmluZztcbiAgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQ2FjaGUga2V5IG1hdGNoaW5nIGBQbHVnaW5Mb29rdXAubm9ybWFsaXplKClgOiBleHBsaWNpdCBhbGlhcyB3aGVuIHNldCxcbiAqIG90aGVyd2lzZSBgJHtuYW1lfS1hbGlhc2AuIE11c3Qgc3RheSBpbiBzeW5jIHdpdGggdGhlIGNvbnN1bWVycyBpblxuICogcGlwZWxpbmUtY29yZS9wbHVnaW4tbG9va3VwLnRzIGFuZCBwaXBlbGluZS1idWlsZGVyLnRzIHRoYXQgcmVhZCB0aGlzIG1hcC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVLZXkocmVmOiBQbHVnaW5SZWYpOiBzdHJpbmcge1xuICByZXR1cm4gcmVmLmFsaWFzIHx8IGAke3JlZi5uYW1lfS1hbGlhc2A7XG59XG5cbi8qKlxuICogV2FsayB0aGUgcGlwZWxpbmUgcHJvcHMgdHJlZSB0byBjb2xsZWN0IGV2ZXJ5IHBsdWdpbiByZWZlcmVuY2UuIFBsdWdpbnNcbiAqIGFwcGVhciBhdCBgc3ludGgucGx1Z2luYCBhbmQgYXQgYHN0YWdlc1tdLnN0ZXBzW10ucGx1Z2luYC4gRW50cmllcyBhcmVcbiAqIGRlLWR1cGxpY2F0ZWQgYnkgYGNhY2hlS2V5KClgIOKAlCB0aGUgc2FtZSBrZXkgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgdXNlcyxcbiAqIHNvIHRoZSByZXNvbHZlZC1wbHVnaW5zIG1hcCBsb29rdXBzIG1hdGNoIGRvd25zdHJlYW0uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RQbHVnaW5SZWZzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBsdWdpblJlZltdIHtcbiAgY29uc3QgcmVmczogUGx1Z2luUmVmW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3QgcHVzaCA9IChyYXc6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgIGNvbnN0IHIgPSByYXcgYXMgUGx1Z2luUmVmO1xuICAgIGlmICghci5uYW1lKSByZXR1cm47XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkocik7XG4gICAgLy8gVGhlIG5hbWUgdGhlIGxvb2t1cCB3aWxsIFRBUkdFVCDigJQgYW4gZXhwbGljaXQgYGZpbHRlci5uYW1lYCB3aW5zIChzZWVcbiAgICAvLyBiZWxvdyksIHNvIHR3byByZWZzIHRoYXQgcmVzb2x2ZSB0byB0aGUgc2FtZSBwbHVnaW4gYXJlIG5vdCBhIGNvbGxpc2lvbi5cbiAgICBjb25zdCB0YXJnZXQgPSAoci5maWx0ZXI/Lm5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyByLm5hbWU7XG4gICAgY29uc3QgaG9sZGVyID0gc2Vlbi5nZXQoa2V5KTtcbiAgICBpZiAoaG9sZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE9uZSBhbGlhcyBjYW4gb25seSBldmVyIG1lYW4gb25lIHBsdWdpbi4gRGVkdXBsaWNhdGluZyBvbiB0aGUgYWxpYXNcbiAgICAgIC8vIGFsb25lIGtlcHQgdGhlIEZJUlNUIHBsdWdpbiBhbmQgc2lsZW50bHkgZHJvcHBlZCB0aGUgc2Vjb25kLCBzbyBhIHN0ZXBcbiAgICAgIC8vIGRlY2xhcmluZyBgeyBuYW1lOiAnbWF2ZW4tYnVpbGQnLCBhbGlhczogJ2J1aWxkJyB9YCBhZnRlciBhbm90aGVyXG4gICAgICAvLyBkZWNsYXJpbmcgYHsgbmFtZTogJ25vZGVqcy1idWlsZCcsIGFsaWFzOiAnYnVpbGQnIH1gIHJhbiBub2RlanMtYnVpbGQnc1xuICAgICAgLy8gaW1hZ2UgYW5kIGNvbW1hbmRzIOKAlCBubyBlcnJvciwganVzdCB0aGUgd3JvbmcgYnVpbGQuXG4gICAgICBpZiAoaG9sZGVyICE9PSB0YXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQbHVnaW4gYWxpYXMgXCIke2tleX1cIiBpcyB1c2VkIGZvciB0d28gZGlmZmVyZW50IHBsdWdpbnMgKFwiJHtob2xkZXJ9XCIgYW5kIFwiJHt0YXJnZXR9XCIpLiBgXG4gICAgICAgICAgKyAnR2l2ZSBlYWNoIHBsdWdpbiBpdHMgb3duIGFsaWFzLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlZW4uc2V0KGtleSwgdGFyZ2V0KTtcbiAgICByZWZzLnB1c2gocik7XG4gIH07XG5cbiAgY29uc3Qgc3ludGggPSBwcm9wcy5zeW50aCBhcyB7IHBsdWdpbj86IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgcHVzaChzeW50aD8ucGx1Z2luKTtcblxuICBjb25zdCBzdGFnZXMgPSBwcm9wcy5zdGFnZXMgYXMgQXJyYXk8eyBzdGVwcz86IEFycmF5PHsgcGx1Z2luPzogdW5rbm93biB9PiB9PiB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RhZ2Uuc3RlcHMgPz8gW10pIHtcbiAgICAgIHB1c2goc3RlcC5wbHVnaW4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWZzO1xufVxuXG4vKiogVGhlIHBsdWdpbiBzZXJ2aWNlJ3MgNDA5IGBJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEYCBhbnN3ZXIgZnJvbSBgL3BsdWdpbnMvbG9va3VwYC4gKi9cbmZ1bmN0aW9uIGlzSW1hZ2VWZXJpZmljYXRpb25GYWlsdXJlKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhID0gKGVyciBhcyB7IHJlc3BvbnNlPzogeyBkYXRhPzogdW5rbm93biB9IH0gfCB1bmRlZmluZWQpPy5yZXNwb25zZT8uZGF0YTtcbiAgcmV0dXJuICEhZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgKGRhdGEgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlID09PSBFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRDtcbn1cblxuLyoqXG4gKiBQcmUtcmVzb2x2ZSBwbHVnaW5zIGJ5IGNhbGxpbmcgdGhlIHNhbWUgYFBPU1QgL2FwaS9wbHVnaW5zL2xvb2t1cGAgZW5kcG9pbnRcbiAqIHRoZSBkZXBsb3ktdGltZSBjdXN0b20gcmVzb3VyY2UgTGFtYmRhIHVzZXMuIFJldHVybmluZyB0aGUgZnVsbCBQbHVnaW5cbiAqIHJlY29yZCBhdCBzeW50aCB0aW1lIGlzIHdoYXQgYWxsb3dzIHRoZSByZXN1bHRpbmcgQ0ZOIHRlbXBsYXRlIHRvIHNoaXBcbiAqIHdpdGggcmVhbCBDb2RlQnVpbGQgaW1hZ2UgVVJJcyAoYDxob3N0Pi88bnM+LzxuYW1lPjo8dmVyc2lvbj5gKSByYXRoZXIgdGhhblxuICogdGhlIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMGAgZmFsbGJhY2sgdGhhdCB0aGUgc3ludGgtdGltZSB0b2tlbiBwYXRoXG4gKiBmb3JjZXMuXG4gKlxuICogRmFpbHVyZXMgYXJlIG5vbi1mYXRhbDogYSBtaXNzaW5nIHBsdWdpbiBvciB1bnJlYWNoYWJsZSBBUEkgbG9ncyBhIHdhcm5pbmdcbiAqIGFuZCBmYWxscyB0aHJvdWdoIHRvIHRoZSBkZXBsb3ktdGltZSBjdXN0b20gcmVzb3VyY2UgcGF0aCBzbyBwYXJ0aWFsXG4gKiBwbGF0Zm9ybSBvdXRhZ2VzIGRvbid0IGJsb2NrIHN5bnRoL2RlcGxveS4gVGhlIGV4Y2VwdGlvbiBpcyBhbiBpbWFnZSB0aGF0XG4gKiBmYWlscyBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIOKAlCB0aGF0IGFib3J0cyB0aGUgc3ludGguXG4gKlxuICogS2V5ZWQgYnkgYGFsaWFzIHx8IG5hbWVgIHRvIG1hdGNoIGBQbHVnaW5Mb29rdXAucGx1Z2luKClgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpbnNGb3JQcm9wcyhcbiAgY2xpZW50OiBBcGlDbGllbnQsXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgcmVmcyA9IGNvbGxlY3RQbHVnaW5SZWZzKHByb3BzKTtcbiAgaWYgKHJlZnMubGVuZ3RoID09PSAwKSByZXR1cm4ge307XG5cbiAgY29uc3QgcmVzb2x2ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocmVmcy5tYXAoYXN5bmMgKHJlZikgPT4ge1xuICAgIGNvbnN0IGtleSA9IGNhY2hlS2V5KHJlZik7XG4gICAgLy8gVGhlIHBsdWdpbiBOQU1FIGxpdmVzIG9uIHRoZSByZWYgKGEgc2libGluZyBvZiBgZmlsdGVyYCksIE5PVCBpbnNpZGUgdGhlXG4gICAgLy8gZmlsdGVyIG9iamVjdCDigJQgYnV0IHRoZSBsb29rdXAgbWF0Y2hlcyBvbiB0aGUgZmlsdGVyLiBBIGZpbHRlciB3aXRob3V0XG4gICAgLy8gYG5hbWVgIChlLmcuIGB7dmVyc2lvbiwgdmlzaWJpbGl0eSwgaXNBY3RpdmUsIGlzRGVmYXVsdH1gKSBtYXRjaGVzIEFOWVxuICAgIC8vIHBsdWdpbiB3aXRoIHRob3NlIGF0dHJpYnV0ZXMsIGFuZCB0aGUgZW5kcG9pbnQgcmV0dXJucyBhbiBhcmJpdHJhcnkgb25lXG4gICAgLy8gKHNlZW46IGBkb2NrZXJmaWxlLW11bHRpLXByb3ZpZGVyYCkuIFRoYXQgbWFkZSB0aGUgc3ludGggYW5kIGV2ZXJ5IHN0ZXBcbiAgICAvLyByZXNvbHZlIHRvIHRoZSBXUk9ORyBwbHVnaW4uIFNvIHdoZW4gdGhlIGZpbHRlciBvbWl0cyBgbmFtZWAsIGZhbGwgYmFjayB0b1xuICAgIC8vIHRoZSByZWYncyBwbHVnaW4gbmFtZTsgYW4gZXhwbGljaXQgZmlsdGVyIGBuYW1lYCBzdGlsbCB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIGNvbnN0IGZpbHRlciA9IHsgbmFtZTogcmVmLm5hbWUsIC4uLihyZWYuZmlsdGVyID8/IHsgaXNBY3RpdmU6IHRydWUsIGlzRGVmYXVsdDogdHJ1ZSB9KSB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQucG9zdDx1bmtub3duPignL2FwaS9wbHVnaW5zL2xvb2t1cCcsIHsgZmlsdGVyIH0pO1xuICAgICAgLy8gVW53cmFwIHRoZSBwbHVnaW4gcmVjb3JkIGZyb20gd2hhdGV2ZXIgZW52ZWxvcGUgdGhlIHJlc3BvbnNlIG1pZGRsZXdhcmVcbiAgICAgIC8vIGFwcGxpZWQuIFRoZSBwbGF0Zm9ybSdzIHN0YW5kYXJkIHN1Y2Nlc3MgZW52ZWxvcGUgaXNcbiAgICAgIC8vIGB7IHN1Y2Nlc3MsIHN0YXR1c0NvZGUsIGRhdGE6IHsgcGx1Z2luOiBQbHVnaW4gfSB9YCAobm90ZSB0aGUgRE9VQkxFXG4gICAgICAvLyBuZXN0aW5nOiBkYXRhLnBsdWdpbiksIGJ1dCB0b2xlcmF0ZSBgeyBkYXRhOiBQbHVnaW4gfWAsIGB7IHBsdWdpbiB9YCxcbiAgICAgIC8vIGFuZCBhIGJhcmUgUGx1Z2luIHRvby4gT25seSBzdG9wcGluZyBhdCBgcmVzLmRhdGFgICh3aGljaCBpc1xuICAgICAgLy8gYHsgcGx1Z2luOiAuLi4gfWApIG1hZGUgYC5uYW1lYCB1bmRlZmluZWQg4oaSIGV2ZXJ5IGxvb2t1cCBmZWxsIGJhY2sgdG9cbiAgICAgIC8vIGRlcGxveS10aW1lIHJlc29sdXRpb24gZXZlbiB0aG91Z2ggdGhlIGNhdGFsb2cgaGFkIHRoZSBwbHVnaW4uXG4gICAgICBjb25zdCBkYXRhID0gKHJlcyBhcyB7IGRhdGE/OiB1bmtub3duIH0pLmRhdGE7XG4gICAgICBjb25zdCBwbHVnaW4gPVxuICAgICAgICAoZGF0YSBhcyB7IHBsdWdpbj86IHVua25vd24gfSB8IHVuZGVmaW5lZCk/LnBsdWdpbiAvLyB7IGRhdGE6IHsgcGx1Z2luIH0gfVxuICAgICAgICA/PyAocmVzIGFzIHsgcGx1Z2luPzogdW5rbm93biB9KS5wbHVnaW4gLy8geyBwbHVnaW4gfVxuICAgICAgICA/PyBkYXRhIC8vIHsgZGF0YTogUGx1Z2luIH1cbiAgICAgICAgPz8gcmVzOyAvLyBiYXJlIFBsdWdpblxuICAgICAgaWYgKHBsdWdpbiAmJiB0eXBlb2YgcGx1Z2luID09PSAnb2JqZWN0JyAmJiAocGx1Z2luIGFzIHsgbmFtZT86IHN0cmluZyB9KS5uYW1lKSB7XG4gICAgICAgIHJlc29sdmVkW2tleV0gPSBwbHVnaW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmludFdhcm5pbmcoYFBsdWdpbiBcIiR7cmVmLm5hbWV9XCIgbG9va3VwIHJldHVybmVkIG5vIHJlY29yZCDigJQgZmFsbGluZyBiYWNrIHRvIGRlcGxveS10aW1lIHJlc29sdXRpb25gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEEgcGx1Z2luIHdob3NlIGltYWdlIHNpZ25hdHVyZSBkb2Vzbid0IHZlcmlmeSBpcyBOT1QgYW4gb3V0YWdlIHRvIHJpZGVcbiAgICAgIC8vIG91dDogZmFsbGluZyBiYWNrIHdvdWxkIHF1aWV0bHkgdHVybiBpdCBpbnRvIGFuIHVucmVzb2x2ZWQgc3RlcC4gU3RvcC5cbiAgICAgIGlmIChpc0ltYWdlVmVyaWZpY2F0aW9uRmFpbHVyZShlcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIFwiJHtyZWYubmFtZX1cIiBpbWFnZSBmYWlsZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbjogJHtlcnJvck1lc3NhZ2UoZXJyKX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1zZyA9IGVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgcHJpbnRXYXJuaW5nKGBQbHVnaW4gXCIke3JlZi5uYW1lfVwiIHByZS1yZXNvbHV0aW9uIGZhaWxlZCAoJHttc2d9KSDigJQgZmFsbGluZyBiYWNrIHRvIGRlcGxveS10aW1lIHJlc29sdXRpb25gKTtcbiAgICB9XG4gIH0pKTtcblxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG4iXX0=
package/package.json CHANGED
@@ -44,9 +44,9 @@
44
44
  "typescript": "npm:@typescript/typescript6@^6.0.2",
45
45
  "yaml": "2.9.0",
46
46
  "zod": "4.4.3",
47
- "@pipeline-builder/ai-core": "4.1.10",
48
- "@pipeline-builder/api-core": "4.1.10",
49
- "@pipeline-builder/pipeline-core": "4.1.13"
47
+ "@pipeline-builder/ai-core": "4.1.13",
48
+ "@pipeline-builder/api-core": "4.1.13",
49
+ "@pipeline-builder/pipeline-core": "4.1.15"
50
50
  },
51
51
  "keywords": [
52
52
  "ci-cd",
@@ -101,7 +101,7 @@
101
101
  "access": "public",
102
102
  "registry": "https://registry.npmjs.org/"
103
103
  },
104
- "version": "4.1.13",
104
+ "version": "4.1.15",
105
105
  "bugs": {
106
106
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
107
107
  },