@pipeline-builder/pipeline-core 4.1.15 → 4.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cdk.d.ts +1 -0
- package/lib/cdk.js +2 -1
- package/lib/config/app-config.d.ts +5 -8
- package/lib/config/app-config.js +36 -38
- package/lib/config/config-types.d.ts +9 -112
- package/lib/config/config-types.js +1 -1
- package/lib/config/handler-constants.d.ts +12 -3
- package/lib/config/handler-constants.js +9 -26
- package/lib/config/infrastructure-config.js +44 -43
- package/lib/config/server-config.d.ts +1 -1
- package/lib/config/server-config.js +33 -32
- package/lib/config/service-client.d.ts +3 -7
- package/lib/config/service-client.js +5 -11
- package/lib/core/artifact-manager.d.ts +0 -17
- package/lib/core/artifact-manager.js +1 -17
- package/lib/core/metadata-helpers.d.ts +16 -0
- package/lib/core/metadata-helpers.js +41 -1
- package/lib/core/pipeline-helpers.js +23 -58
- package/lib/core/plugin-contract.d.ts +126 -0
- package/lib/core/plugin-contract.js +217 -0
- package/lib/core/plugin-lookup-envelope.d.ts +14 -0
- package/lib/core/plugin-lookup-envelope.js +29 -0
- package/lib/core/step-manifest.d.ts +50 -0
- package/lib/core/step-manifest.js +47 -0
- package/lib/handlers/platform-credential.d.ts +47 -0
- package/lib/handlers/platform-credential.js +87 -0
- package/lib/handlers/plugin-lookup-handler.d.ts +1 -1
- package/lib/handlers/plugin-lookup-handler.js +48 -42
- package/lib/index.d.ts +8 -8
- package/lib/index.js +10 -9
- package/lib/pipeline/pipeline-builder.d.ts +7 -0
- package/lib/pipeline/pipeline-builder.js +25 -9
- package/lib/pipeline/pipeline-configuration.js +6 -5
- package/lib/pipeline/plugin-lookup.d.ts +0 -1
- package/lib/pipeline/plugin-lookup.js +55 -23
- package/lib/pipeline/plugin-spec.d.ts +41 -0
- package/lib/pipeline/plugin-spec.js +1 -1
- package/lib/pipeline/stage-builder.d.ts +11 -0
- package/lib/pipeline/stage-builder.js +31 -12
- package/lib/pipeline/step-manifest-recorder.d.ts +22 -0
- package/lib/pipeline/step-manifest-recorder.js +57 -0
- package/lib/pipeline/step-types.d.ts +16 -4
- package/lib/pipeline/step-types.js +1 -1
- package/lib/template/index.d.ts +4 -4
- package/lib/template/index.js +5 -5
- package/lib/template/plugin-resolver.js +5 -5
- package/lib/template/tokenizer.d.ts +4 -0
- package/lib/template/tokenizer.js +11 -7
- package/lib/testing/exports.json +72 -0
- package/package.json +36 -8
- package/lib/config/billing-config.d.ts +0 -27
- package/lib/config/billing-config.js +0 -534
- package/lib/config/entitlements.d.ts +0 -23
- package/lib/config/entitlements.js +0 -46
|
@@ -12,6 +12,8 @@ import { Provider } from 'aws-cdk-lib/custom-resources';
|
|
|
12
12
|
import { Construct } from 'constructs';
|
|
13
13
|
import { Config, CoreConstants } from '../config/app-config.js';
|
|
14
14
|
import { UniqueId } from '../core/id-generator.js';
|
|
15
|
+
import { pluginArtifactAlias, pluginLookupFilter } from '../core/plugin-contract.js';
|
|
16
|
+
import { PLACEHOLDER_PLUGIN_ID } from '../core/step-manifest.js';
|
|
15
17
|
const log = createLogger('plugin-lookup');
|
|
16
18
|
// ESM-safe module directory (the package is `type: module`; `__dirname` is
|
|
17
19
|
// not defined under ES modules).
|
|
@@ -101,9 +103,9 @@ export class PluginLookup extends Construct {
|
|
|
101
103
|
const cacheKey = props.alias || props.name;
|
|
102
104
|
const preResolved = this._resolvedPlugins?.[cacheKey];
|
|
103
105
|
// The map is keyed by ALIAS, so check it actually holds THIS plugin. Two
|
|
104
|
-
// steps sharing an alias across different plugins
|
|
105
|
-
// one's record back — the second step silently
|
|
106
|
-
// commands. The CLI refuses such a pipeline too; this covers any other
|
|
106
|
+
// steps sharing an alias across different plugins would otherwise get the
|
|
107
|
+
// first one's record back — the second step silently running the wrong
|
|
108
|
+
// image and commands. The CLI refuses such a pipeline too; this covers any other
|
|
107
109
|
// caller that supplies `resolvedPlugins`.
|
|
108
110
|
// Compare against the name the lookup actually TARGETED: an explicit
|
|
109
111
|
// `filter.name` overrides the ref's `name` by design, and that is not a
|
|
@@ -113,6 +115,13 @@ export class PluginLookup extends Construct {
|
|
|
113
115
|
throw new Error(`Plugin alias "${cacheKey}" resolves to "${preResolved.name}", not "${targetName}". `
|
|
114
116
|
+ 'Each alias must name exactly one plugin.');
|
|
115
117
|
}
|
|
118
|
+
// A qualified reference must have resolved to THAT publisher's listing
|
|
119
|
+
// (an unqualified one may resolve to the org's own plugin or the Official
|
|
120
|
+
// listing).
|
|
121
|
+
if (preResolved && props.publisher && preResolved.publisher !== props.publisher) {
|
|
122
|
+
throw new Error(`Plugin alias "${cacheKey}" resolves to ${preResolved.publisher ? `${preResolved.publisher}/` : 'your organization\'s '}${preResolved.name}, `
|
|
123
|
+
+ `not ${props.publisher}/${targetName}. Each alias must name exactly one plugin.`);
|
|
124
|
+
}
|
|
116
125
|
if (preResolved) {
|
|
117
126
|
log.debug(`Plugin "${props.name}" pre-resolved (alias=${cacheKey}) — skipping custom resource`);
|
|
118
127
|
return preResolved;
|
|
@@ -201,26 +210,18 @@ export class PluginLookup extends Construct {
|
|
|
201
210
|
* Access control (orgId scoping, public/private visibility) is handled by
|
|
202
211
|
* the platform's access control query builder based on the JWT's organizationId.
|
|
203
212
|
*/
|
|
204
|
-
defaultFilter(name) {
|
|
205
|
-
return {
|
|
206
|
-
name,
|
|
207
|
-
isActive: true,
|
|
208
|
-
isDefault: true,
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
213
|
normalize(plugin) {
|
|
212
|
-
|
|
213
|
-
return {
|
|
214
|
-
name: plugin,
|
|
215
|
-
filter: this.defaultFilter(plugin),
|
|
216
|
-
alias: `${plugin}-alias`,
|
|
217
|
-
};
|
|
218
|
-
}
|
|
214
|
+
const ref = typeof plugin === 'string' ? { name: plugin } : plugin;
|
|
219
215
|
return {
|
|
220
|
-
name:
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
216
|
+
name: ref.name,
|
|
217
|
+
...(ref.publisher ? { publisher: ref.publisher } : {}),
|
|
218
|
+
// The resolver cache key: the explicit alias, else `[<publisher>-]<name>-alias`.
|
|
219
|
+
alias: pluginArtifactAlias(ref),
|
|
220
|
+
// The same filter the CLI pre-resolver and the pipeline service's
|
|
221
|
+
// contract check send (`pluginLookupFilter`): name + publisher, then
|
|
222
|
+
// the reference's own filter, else the default version.
|
|
223
|
+
filter: pluginLookupFilter({ name: ref.name, publisher: ref.publisher, filter: ref.filter }),
|
|
224
|
+
metadata: ref.metadata,
|
|
224
225
|
};
|
|
225
226
|
}
|
|
226
227
|
/**
|
|
@@ -241,7 +242,7 @@ export class PluginLookup extends Construct {
|
|
|
241
242
|
static basePlugin() {
|
|
242
243
|
const now = new Date();
|
|
243
244
|
return {
|
|
244
|
-
id:
|
|
245
|
+
id: PLACEHOLDER_PLUGIN_ID,
|
|
245
246
|
orgId: SYSTEM_ORG_ID,
|
|
246
247
|
createdBy: 'system',
|
|
247
248
|
createdAt: now,
|
|
@@ -279,6 +280,37 @@ export class PluginLookup extends Construct {
|
|
|
279
280
|
deletedAt: null,
|
|
280
281
|
deletedBy: null,
|
|
281
282
|
purgeAfter: null,
|
|
283
|
+
quotaResetAt: null,
|
|
284
|
+
summary: null,
|
|
285
|
+
displayName: null,
|
|
286
|
+
documentationUrl: null,
|
|
287
|
+
metadataSources: {},
|
|
288
|
+
requiredMetadata: [],
|
|
289
|
+
requiredVars: [],
|
|
290
|
+
metadataTypes: {},
|
|
291
|
+
varsTypes: {},
|
|
292
|
+
smokeTest: null,
|
|
293
|
+
networkEgress: [],
|
|
294
|
+
readmeMd: null,
|
|
295
|
+
readmeHtml: null,
|
|
296
|
+
license: null,
|
|
297
|
+
changelog: null,
|
|
298
|
+
homepageUrl: null,
|
|
299
|
+
sourceUrl: null,
|
|
300
|
+
icon: null,
|
|
301
|
+
uploadedIcon: null,
|
|
302
|
+
vulnCritical: null,
|
|
303
|
+
vulnHigh: null,
|
|
304
|
+
vulnMedium: null,
|
|
305
|
+
vulnLow: null,
|
|
306
|
+
scannedAt: null,
|
|
307
|
+
runAsRoot: null,
|
|
308
|
+
breaking: false,
|
|
309
|
+
frozenAt: null,
|
|
310
|
+
yankedAt: null,
|
|
311
|
+
yankReason: null,
|
|
312
|
+
deprecatedAt: null,
|
|
313
|
+
deprecationMessage: null,
|
|
282
314
|
};
|
|
283
315
|
}
|
|
284
316
|
/**
|
|
@@ -330,4 +362,4 @@ export class PluginLookup extends Construct {
|
|
|
330
362
|
};
|
|
331
363
|
}
|
|
332
364
|
}
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFMUMsMkVBQTJFO0FBQzNFLGlDQUFpQztBQUNqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFxQzNEOzs7Ozs7Ozs7Ozs7Ozs7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QUFFO2dCQUNSLHVJQUF1STtnQkFDdkksb0lBQW9JO2dCQUNwSSwyR0FBMkc7Z0JBQzNHLFFBQVE7YUFDVDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxTQUFTO1FBQ2QsT0FBTztZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUM1QixJQUFJLEVBQUUsV0FBVztZQUNqQixzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLFFBQVEsRUFBRTtnQkFDUix5R0FBeUc7YUFDMUc7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBTWVNURU1fT1JHX0lEIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFRva2VuLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSdW50aW1lLCBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0IHsgTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcigncGx1Z2luLWxvb2t1cCcpO1xuXG4vLyBFU00tc2FmZSBtb2R1bGUgZGlyZWN0b3J5ICh0aGUgcGFja2FnZSBpcyBgdHlwZTogbW9kdWxlYDsgYF9fZGlybmFtZWAgaXNcbi8vIG5vdCBkZWZpbmVkIHVuZGVyIEVTIG1vZHVsZXMpLlxuY29uc3QgTU9EVUxFX0RJUiA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuaW50ZXJmYWNlIElucHV0UHJvcHMge1xuICByZWFkb25seSBiYXNlVVJMOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbkZpbHRlcjogUGx1Z2luRmlsdGVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Mb29rdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgLyoqIE9yZ2FuaXphdGlvbiBJRCBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIFNlY3JldHMgTWFuYWdlciAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XG4gIC8qKiBMYW1iZGEgdGltZW91dCAoZGVmYXVsdDogMzBzKSAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKiBMYW1iZGEgbWVtb3J5IGluIE1CIChkZWZhdWx0OiA1MTIpICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMYW1iZGEgQ1BVIGFyY2hpdGVjdHVyZSAoZGVmYXVsdDogQVJNXzY0KSAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG4gIC8qKiBSZXNlcnZlZCBjb25jdXJyZW50IGV4ZWN1dGlvbnMgZm9yIHRoZSBsb29rdXAgTGFtYmRhIChkZWZhdWx0OiAzMCkgKi9cbiAgcmVhZG9ubHkgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBsdWdpbnMgcHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAqIEtleWVkIGJ5IGBhbGlhcyB8fCBuYW1lYCAobWF0Y2hlcyB0aGUgY29uc3RydWN0J3Mgbm9ybWFsaXplKCkgb3V0cHV0KS5cbiAgICogV2hlbiBhIGxvb2t1cCBoaXRzIHRoaXMgbWFwLCBgcGx1Z2luKClgIHJldHVybnMgdGhlIHJlc29sdmVkIFBsdWdpblxuICAgKiBkaXJlY3RseSDigJQgbm8gY3VzdG9tIHJlc291cmNlIGlzIGNyZWF0ZWQuIFRoaXMgaXMgd2hhdCBtYWtlcyB0aGVcbiAgICogbmFtZSwgdmVyc2lvbiwgY29tbWFuZHMsIGVudiwgZXRjLiBhdmFpbGFibGUgYXQgc3ludGggdGltZSBzbyB0aGUgcmVzdWx0aW5nXG4gICAqIENGTiB0ZW1wbGF0ZSBzaGlwcyB3aXRoIHRoZSByZWFsIHZhbHVlcyBiYWtlZCBpbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG59XG5cbi8qKlxuICogQ0RLIENvbnN0cnVjdCByZXNwb25zaWJsZSBmb3IgbG9va2luZyB1cCBwbHVnaW4gY29uZmlndXJhdGlvbnMgZnJvbSBhbiBleHRlcm5hbCBwbGF0Zm9ybVxuICogdXNpbmcgQVdTIENsb3VkRm9ybWF0aW9uIEN1c3RvbSBSZXNvdXJjZXMgYmFja2VkIGJ5IGEgTGFtYmRhIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGNyZWF0ZXM6XG4gKiAtIEEgTGFtYmRhIGZ1bmN0aW9uIChwbHVnaW4tbG9va3VwLWhhbmRsZXIpIHRoYXQgZmV0Y2hlcyBwbHVnaW4gY29uZmlnc1xuICogLSBBIENsb3VkV2F0Y2ggTG9nIEdyb3VwIGZvciB0aGUgTGFtYmRhXG4gKiAtIEEgQ3VzdG9tIFJlc291cmNlIFByb3ZpZGVyIHRoYXQgaW52b2tlcyB0aGUgTGFtYmRhXG4gKiAtIEFuIElBTSBwb2xpY3kgZ3JhbnRpbmcgdGhlIExhbWJkYSBhY2Nlc3MgdG8gdGhlIGNyZWRlbnRpYWxzIHNlY3JldFxuICpcbiAqICMjIFByZXJlcXVpc2l0ZXNcbiAqXG4gKiBCZWZvcmUgZGVwbG95aW5nLCBzdG9yZSBhIEpXVCB0b2tlbiBpbiBTZWNyZXRzIE1hbmFnZXI6XG4gKiBgYGBzaFxuICogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLWRheXMgMzAgLS1yZWdpb24gPHJlZ2lvbj5cbiAqIGBgYFxuICpcbiAqIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWU6XG4gKiBge1NFQ1JFVFNfUEFUSF9QUkVGSVh9L3tvcmdJZH0vcGxhdGZvcm1gXG4gKlxuICogQHNlZSBoYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIudHMgZm9yIHRoZSBMYW1iZGEgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkxvb2t1cCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvdmlkZXI6IFByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbGF0Zm9ybVVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydW50aW1lOiBSdW50aW1lO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBEdXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVtb3J5U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3JnSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBsdWdpbkxvb2t1cFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICghcHJvcHMub3JnYW5pemF0aW9uIHx8ICFwcm9wcy5wcm9qZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggb3JnYW5pemF0aW9uIGFuZCBwcm9qZWN0IGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl91bmlxdWVJZCA9IHByb3BzLnVuaXF1ZUlkO1xuICAgIHRoaXMuX3BsYXRmb3JtVXJsID0gcHJvcHMucGxhdGZvcm1Vcmw7XG4gICAgdGhpcy5fb3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLl9ydW50aW1lID0gcHJvcHMucnVudGltZSA/PyBSdW50aW1lLk5PREVKU18yNF9YO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBwcm9wcy50aW1lb3V0ID8/IER1cmF0aW9uLnNlY29uZHMoMzApO1xuICAgIHRoaXMuX21lbW9yeVNpemUgPSBwcm9wcy5tZW1vcnlTaXplID8/IENvbmZpZy5nZXQoJ2F3cycpLmxhbWJkYS5tZW1vcnlTaXplO1xuICAgIHRoaXMuX2FyY2hpdGVjdHVyZSA9IHByb3BzLmFyY2hpdGVjdHVyZSA/PyBBcmNoaXRlY3R1cmUuQVJNXzY0O1xuICAgIHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgPSBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zO1xuICAgIHRoaXMuX3Jlc29sdmVkUGx1Z2lucyA9IHByb3BzLnJlc29sdmVkUGx1Z2lucztcblxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbigpO1xuXG4gICAgLy8gTG9nLWdyb3VwIHN0cmF0ZWd5OlxuICAgIC8vICAgUHJldmlvdXMgY29kZSBjcmVhdGVkIGFuIGBBV1M6OkxvZ3M6OkxvZ0dyb3VwYCByZXNvdXJjZSB3aXRoIGFuXG4gICAgLy8gICBFWFBMSUNJVCBuYW1lIChgL2F3cy9sYW1iZGEvcGx1Z2luLWxvb2t1cC1OYCkuIFRoYXQgYnJlYWtzIGV2ZXJ5XG4gICAgLy8gICByZS1kZXBsb3kgYWZ0ZXIgYSByb2xsZWQtYmFjayBzdGFjazogQVdTIGF1dG8tY3JlYXRlcyB0aGUgZ3JvdXAgb25cbiAgICAvLyAgIGZpcnN0IExhbWJkYSBpbnZvY2F0aW9uLCB0aGUgcm9sbGJhY2sgbGVhdmVzIGl0IGFzIGFuIG9ycGhhbiwgYW5kXG4gICAgLy8gICB0aGUgbmV4dCBDREsgcnVuIGZhaWxzIHdpdGggXCJSZXNvdXJjZSAuLi4gYWxyZWFkeSBleGlzdHNcIiBiZWNhdXNlXG4gICAgLy8gICB0aGUgZXhwbGljaXQgbmFtZSBjb2xsaWRlcyB3aXRoIHRoZSBvcnBoYW4uXG4gICAgLy9cbiAgICAvLyAgIEZpeDogdXNlIGBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKClgIHRvIGFkb3B0LW9yLXBhc3MtdGhyb3VnaC5cbiAgICAvLyAgIElmIHRoZSBncm91cCBleGlzdHMsIENESyByZWZlcmVuY2VzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJlY3JlYXRlLlxuICAgIC8vICAgSWYgaXQgZG9lc24ndCwgQVdTIExhbWJkYSBhdXRvLWNyZWF0ZXMgaXQgb24gZmlyc3QgaW52b2NhdGlvbi5cbiAgICAvLyAgIFJldGVudGlvbiBpcyB0aGVuIHNldCB2aWEgYSBzZXBhcmF0ZSByZXRlbnRpb24tcG9saWN5IGN1c3RvbVxuICAgIC8vICAgcmVzb3VyY2Ugd2hpY2ggaXMgaWRlbXBvdGVudCAoc2FmZSB0byBhcHBseSB0byBleGlzdGluZyBncm91cHMpLlxuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS8ke3RoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdwbHVnaW46bG9va3VwJykucmVwbGFjZSgvOi9nLCAnLScpfWA7XG4gICAgY29uc3QgbG9nR3JvdXAgPSBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdsb2c6Z3JvdXAnKSxcbiAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICApO1xuXG4gICAgdGhpcy5fcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ3Jlc291cmNlOnByb3ZpZGVyJyksIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nR3JvdXAsXG4gICAgfSk7XG5cbiAgICBsb2cuZGVidWcoYFBsdWdpbkxvb2t1cCBpbml0aWFsaXplZCBmb3IgJHtwcm9wcy5vcmdhbml6YXRpb259LyR7cHJvcHMucHJvamVjdH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCBhbmQgcmVzb2x2ZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gdXNpbmcgZWl0aGVyIGEgc2ltcGxlIG5hbWUgb3IgZnVsbCBQbHVnaW5PcHRpb25zIG9iamVjdFxuICAgKiBEdXJpbmcgc3ludGhlc2lzLCBpZiB0aGUgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pLCByZXR1cm5zIGZhbGxiYWNrIHBsdWdpblxuICAgKiBEdXJpbmcgZGVwbG95bWVudCwgYXR0ZW1wdHMgdG8gcGFyc2UgdGhlIGFjdHVhbCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgY3VzdG9tIHJlc291cmNlXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBQbHVnaW4gbmFtZSAoc3RyaW5nKSBvciBjb21wbGV0ZSBQbHVnaW5PcHRpb25zIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUmVzb2x2ZWQgUGx1Z2luIG9iamVjdCBvciBmYWxsYmFjayBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBwbHVnaW4ocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMubm9ybWFsaXplKHBsdWdpbik7XG5cbiAgICAvLyBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSS5cbiAgICAvLyBTa2lwIHRoZSBjdXN0b20gcmVzb3VyY2UgZW50aXJlbHkg4oCUIHdlIGFscmVhZHkga25vdyB0aGUgcGx1Z2luJ3NcbiAgICAvLyBuYW1lLCB2ZXJzaW9uLCBjb21tYW5kcywgZW52LCBldGMuIGF0IHN5bnRoIHRpbWUsIHNvIHRoZSByZXN1bHRpbmcgQ0ZOXG4gICAgLy8gdGVtcGxhdGUgY2FuIHNoaXAgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAgY29uc3QgY2FjaGVLZXkgPSBwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lO1xuICAgIGNvbnN0IHByZVJlc29sdmVkID0gdGhpcy5fcmVzb2x2ZWRQbHVnaW5zPy5bY2FjaGVLZXldO1xuICAgIC8vIFRoZSBtYXAgaXMga2V5ZWQgYnkgQUxJQVMsIHNvIGNoZWNrIGl0IGFjdHVhbGx5IGhvbGRzIFRISVMgcGx1Z2luLiBUd29cbiAgICAvLyBzdGVwcyBzaGFyaW5nIGFuIGFsaWFzIGFjcm9zcyBkaWZmZXJlbnQgcGx1Z2lucyB1c2VkIHRvIGdldCB0aGUgZmlyc3RcbiAgICAvLyBvbmUncyByZWNvcmQgYmFjayDigJQgdGhlIHNlY29uZCBzdGVwIHNpbGVudGx5IHJhbiB0aGUgd3JvbmcgaW1hZ2UgYW5kXG4gICAgLy8gY29tbWFuZHMuIFRoZSBDTEkgcmVmdXNlcyBzdWNoIGEgcGlwZWxpbmUgdG9vOyB0aGlzIGNvdmVycyBhbnkgb3RoZXJcbiAgICAvLyBjYWxsZXIgdGhhdCBzdXBwbGllcyBgcmVzb2x2ZWRQbHVnaW5zYC5cbiAgICAvLyBDb21wYXJlIGFnYWluc3QgdGhlIG5hbWUgdGhlIGxvb2t1cCBhY3R1YWxseSBUQVJHRVRFRDogYW4gZXhwbGljaXRcbiAgICAvLyBgZmlsdGVyLm5hbWVgIG92ZXJyaWRlcyB0aGUgcmVmJ3MgYG5hbWVgIGJ5IGRlc2lnbiwgYW5kIHRoYXQgaXMgbm90IGFcbiAgICAvLyBjb2xsaXNpb24uXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IChwcm9wcy5maWx0ZXIgYXMgeyBuYW1lPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5uYW1lID8/IHByb3BzLm5hbWU7XG4gICAgaWYgKHByZVJlc29sdmVkICYmIHByZVJlc29sdmVkLm5hbWUgIT09IHRhcmdldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBsdWdpbiBhbGlhcyBcIiR7Y2FjaGVLZXl9XCIgcmVzb2x2ZXMgdG8gXCIke3ByZVJlc29sdmVkLm5hbWV9XCIsIG5vdCBcIiR7dGFyZ2V0TmFtZX1cIi4gYFxuICAgICAgICArICdFYWNoIGFsaWFzIG11c3QgbmFtZSBleGFjdGx5IG9uZSBwbHVnaW4uJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcmVSZXNvbHZlZCkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgcHJlLXJlc29sdmVkIChhbGlhcz0ke2NhY2hlS2V5fSkg4oCUIHNraXBwaW5nIGN1c3RvbSByZXNvdXJjZWApO1xuICAgICAgcmV0dXJuIHByZVJlc29sdmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHMpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBjdXN0b20uZ2V0QXR0U3RyaW5nKCdSZXN1bHRWYWx1ZScpO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChlbmNvZGVkKSkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pIGR1cmluZyBzeW50aGVzaXMg4oCUIHVzaW5nIGZhbGxiYWNrLiBUaGUgYWN0dWFsIHBsdWdpbiB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZS5gKTtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcblxuICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCAhZGF0YS5uYW1lIHx8ICFBcnJheS5pc0FycmF5KGRhdGEuY29tbWFuZHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbHVnaW4gcmVzcG9uc2U6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzIChuYW1lLCBjb21tYW5kcyknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgUGx1Z2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIGRhdGE6ICR7ZXJyb3JNc2d9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlci5cbiAgICpcbiAgICogSldUIHRva2VuIGlzIHN0b3JlZCBpbiBhIHByZS1leGlzdGluZyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGF0XG4gICAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWAuIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlXG4gICAqIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWUgdXNpbmcgYENvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWGAuXG4gICAqXG4gICAqIENyZWF0ZSB0aGUgc2VjcmV0IGJlZm9yZSBkZXBsb3lpbmcgd2l0aDpcbiAgICogICBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvbigpOiBOb2RlanNGdW5jdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9vcmdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmdJZCBpcyByZXF1aXJlZCBmb3IgUGx1Z2luTG9va3VwIOKAlCBuZWVkZWQgdG8gcmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aCh0aGlzLl9vcmdJZCwgJ3BsYXRmb3JtJyk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnb25ldmVudDpoYW5kbGVyJyksIHtcbiAgICAgIHJ1bnRpbWU6IHRoaXMuX3J1bnRpbWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLl90aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogdGhpcy5fbWVtb3J5U2l6ZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogdGhpcy5fYXJjaGl0ZWN0dXJlLFxuICAgICAgZW50cnk6IGpvaW4oTU9EVUxFX0RJUiwgJy8uLi9oYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIuanMnKSxcbiAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IGpvaW4oTU9EVUxFX0RJUiwgJy8uLi9oYW5kbGVycy9wbnBtLWxvY2sueWFtbCcpLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogdGhpcy5fcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiBzZWNyZXROYW1lLFxuICAgICAgICAvLyBBbGxvdyBzZWxmLXNpZ25lZCBjZXJ0cyB3aGVuIHBsYXRmb3JtIHVzZXMgSFRUUFMgd2l0aG91dCBhIENBLXNpZ25lZCBjZXJ0aWZpY2F0ZVxuICAgICAgICAuLi4ocHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJzAnICYmIHtcbiAgICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiAnMCcsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgc291cmNlTWFwOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgICAgZXh0ZXJuYWxNb2R1bGVzOiBbXG4gICAgICAgICAgLy8gUHJvdmlkZWQgYnkgdGhlIExhbWJkYSBOb2RlLmpzIHJ1bnRpbWUg4oCUIG5ldmVyIGJ1bmRsZS5cbiAgICAgICAgICAnQGF3cy1zZGsvKicsXG4gICAgICAgICAgLy8gU3ludGgtb25seSBsaWJyYXJpZXMgdGhhdCBtdXN0IE5FVkVSIGVuZCB1cCBpbiBhIExhbWJkYSBidW5kbGUuXG4gICAgICAgICAgLy8gVGhlIGhhbmRsZXIgZG9lc24ndCB1c2UgdGhlbTsgdGhpcyBpcyBhIGd1YXJkIHNvIGEgc3RyYXkgdHJhbnNpdGl2ZVxuICAgICAgICAgIC8vIGltcG9ydCAoZS5nLiB2aWEgYSBjb25maWcgbW9kdWxlIHRoYXQgcHVsbHMgaW5mcmFzdHJ1Y3R1cmUtY29uZmlnIOKGklxuICAgICAgICAgIC8vIGF3cy1jZGstbGliKSBjYW4ndCBkcmFnIHRoZSBlbnRpcmUgfmh1bmRyZWRzLW9mLU1CIENESyBpbnRvIHRoZVxuICAgICAgICAgIC8vIGJ1bmRsZSBhbmQgT09NLWtpbGwgZXNidWlsZCBkdXJpbmcgY29sZC1zdGFydCBzeW50aC4gSWYgb25lIG9mIHRoZXNlXG4gICAgICAgICAgLy8gaXMgZXZlciBnZW51aW5lbHkgcmVhY2hlZCBhdCBydW50aW1lIHRoZSBMYW1iZGEgd2lsbCBmYWlsIGxvdWRseSBhdFxuICAgICAgICAgIC8vIGluaXQgKG1vZHVsZSBub3QgZm91bmQpIHJhdGhlciB0aGFuIHNpbGVudGx5IE9PTSBhdCBzeW50aCDigJQgd2hpY2ggaXNcbiAgICAgICAgICAvLyB0aGUgY29ycmVjdCBzaWduYWwsIHNpbmNlIENESyBoYXMgbm8gYnVzaW5lc3MgcnVubmluZyBpbiB0aGlzIExhbWJkYS5cbiAgICAgICAgICAnYXdzLWNkay1saWInLFxuICAgICAgICAgICdhd3MtY2RrLWxpYi8qJyxcbiAgICAgICAgICAnY29uc3RydWN0cycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgdGhlIExhbWJkYSBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0LlxuICAgIC8vIFRoZSB3aWxkY2FyZCBzdWZmaXggaGFuZGxlcyB0aGUgNi1jaGFyIHJhbmRvbSBJRCB0aGF0IFNlY3JldHMgTWFuYWdlciBhcHBlbmRzLlxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6c2VjcmV0c21hbmFnZXI6KjoqOnNlY3JldDoke3NlY3JldE5hbWV9LSpgXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGRlZmF1bHQgcGx1Z2luIGZpbHRlci5cbiAgICogQWNjZXNzIGNvbnRyb2wgKG9yZ0lkIHNjb3BpbmcsIHB1YmxpYy9wcml2YXRlIHZpc2liaWxpdHkpIGlzIGhhbmRsZWQgYnlcbiAgICogdGhlIHBsYXRmb3JtJ3MgYWNjZXNzIGNvbnRyb2wgcXVlcnkgYnVpbGRlciBiYXNlZCBvbiB0aGUgSldUJ3Mgb3JnYW5pemF0aW9uSWQuXG4gICAqL1xuICBwcml2YXRlIGRlZmF1bHRGaWx0ZXIobmFtZTogc3RyaW5nKTogUGx1Z2luRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZShwbHVnaW46IHN0cmluZyB8IFBsdWdpbk9wdGlvbnMpOiBQbHVnaW5PcHRpb25zIHtcbiAgICBpZiAodHlwZW9mIHBsdWdpbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHBsdWdpbixcbiAgICAgICAgZmlsdGVyOiB0aGlzLmRlZmF1bHRGaWx0ZXIocGx1Z2luKSxcbiAgICAgICAgYWxpYXM6IGAke3BsdWdpbn0tYWxpYXNgLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICBhbGlhczogcGx1Z2luLmFsaWFzID8/IGAke3BsdWdpbi5uYW1lfS1hbGlhc2AsXG4gICAgICBmaWx0ZXI6IHBsdWdpbi5maWx0ZXIgPz8gdGhpcy5kZWZhdWx0RmlsdGVyKHBsdWdpbi5uYW1lKSxcbiAgICAgIG1ldGFkYXRhOiBwbHVnaW4ubWV0YWRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ3VzdG9tUmVzb3VyY2UgaW5zdGFuY2UgdGhhdCB0cmlnZ2VycyBwbHVnaW4gbG9va3VwIGR1cmluZyBkZXBsb3ltZW50XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKHByb3BzOiBQbHVnaW5PcHRpb25zKTogQ3VzdG9tUmVzb3VyY2Uge1xuICAgIGNvbnN0IHJlc291cmNlSWQgPSB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZShwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lKTtcblxuICAgIHJldHVybiBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgcmVzb3VyY2VJZCwge1xuICAgICAgc2VydmljZVRva2VuOiB0aGlzLl9wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OlBsdWdpbkxvb2t1cCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGJhc2VVUkw6IHRoaXMuX3BsYXRmb3JtVXJsLFxuICAgICAgICBwbHVnaW5GaWx0ZXI6IHByb3BzLmZpbHRlcixcbiAgICAgIH0gYXMgSW5wdXRQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBCYXNlIHBsdWdpbiBzaGFwZSB3aXRoIG5vLW9wIGRlZmF1bHRzIGZvciBmaWVsZHMgQ0RLIGRvZXNuJ3QgdXNlLiAqL1xuICBwcml2YXRlIHN0YXRpYyBiYXNlUGx1Z2luKCk6IFBsdWdpbiB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuICAgICAgb3JnSWQ6IFNZU1RFTV9PUkdfSUQsXG4gICAgICBjcmVhdGVkQnk6ICdzeXN0ZW0nLFxuICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICB1cGRhdGVkQnk6ICdzeXN0ZW0nLFxuICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICBuYW1lOiAnZmFsbGJhY2snLFxuICAgICAgZGVzY3JpcHRpb246IG51bGwsXG4gICAgICBrZXl3b3JkczogW10sXG4gICAgICBjYXRlZ29yeTogJ3Vua25vd24nLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgIHBsdWdpblR5cGU6ICdDb2RlQnVpbGRTdGVwJyxcbiAgICAgIGNvbXB1dGVUeXBlOiAnU01BTEwnLFxuICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogJ2ZhaWwnLFxuICAgICAgc2VjcmV0czogW10sXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiAnY2RrLm91dCcsXG4gICAgICBlbnY6IHt9LFxuICAgICAgYnVpbGRBcmdzOiB7fSxcbiAgICAgIGluc3RhbGxDb21tYW5kczogW10sXG4gICAgICBjb21tYW5kczogW10sXG4gICAgICBkb2NrZXJmaWxlOiBudWxsLFxuICAgICAgYnVpbGRUeXBlOiAnbWV0YWRhdGFfb25seScsXG4gICAgICBpbWFnZURpZ2VzdDogbnVsbCxcbiAgICAgIGltYWdlU291cmNlOiBudWxsLFxuICAgICAgb3duZXJJZDogbnVsbCxcbiAgICAgIG93bmVyVHlwZTogbnVsbCxcbiAgICAgIGxpZmVjeWNsZTogJ3Byb2R1Y3Rpb24nLFxuICAgICAgY3JpdGljYWxpdHk6IG51bGwsXG4gICAgICBsYWJlbHM6IHt9LFxuICAgICAgbGlua3M6IFtdLFxuICAgICAgdmlzaWJpbGl0eTogJ3B1YmxpYycsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBkZWxldGVkQXQ6IG51bGwsXG4gICAgICBkZWxldGVkQnk6IG51bGwsXG4gICAgICBwdXJnZUFmdGVyOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmFsbGJhY2sgZm9yIGEgcGx1Z2luIHdob3NlIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQgKG5vdCBpbiB0aGUgcGxhdGZvcm1cbiAgICogY2F0YWxvZyBmb3IgdGhpcyBvcmcpIGFuZCBzbyBjb3VsZCBub3QgYmUgcHJlLXJlc29sdmVkIGF0IHN5bnRoLlxuICAgKlxuICAgKiBUaGlzIHN0ZXAgRkFJTFMgdGhlIGJ1aWxkIChleGl0IDEpIG9uIHB1cnBvc2UuIFRoZSBwcmV2aW91cyBiZWhhdmlvdXIg4oCUXG4gICAqIGBlY2hvIFwi4oCmXCIgJiYgZXhpdCAwYCDigJQgd2FzIGEgZmFsc2UgcG9zaXRpdmU6IGFuIHVucmVzb2x2ZWQgc2VjdXJpdHkvcXVhbGl0eVxuICAgKiBzdGVwIChkZXBlbmRlbmN5LWNoZWNrLCBzZW1ncmVwLCBzcG90YnVncywg4oCmKSByZXBvcnRlZCB0aGUgc3RhZ2UgZ3JlZW4gd2hpbGVcbiAgICogcnVubmluZyBub3RoaW5nLCBnaXZpbmcgZmFsc2UgYXNzdXJhbmNlIHRoYXQgc2NhbnMvYnVpbGRzIGhhZCBwYXNzZWQuIEFcbiAgICogcGx1Z2luIHN0ZXAgdGhhdCBjYW4ndCBydW4gaXRzIHBsdWdpbiBtdXN0IGdvIHJlZCwgY29uc2lzdGVudCB3aXRoXG4gICAqIGBiYXNlUGx1Z2luKCkuZmFpbHVyZUJlaGF2aW9yID09PSAnZmFpbCdgLiBUaGUgbWVzc2FnZSBpcyBhY3Rpb25hYmxlIHNvIHRoZVxuICAgKiBvcGVyYXRvciBrbm93cyB0aGUgY2F0YWxvZyBpcyBlbXB0eS9pbmNvbXBsZXRlLCBub3QgdGhhdCB0aGUgdG9vbCBjcmFzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFjaygpOiBQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5QbHVnaW5Mb29rdXAuYmFzZVBsdWdpbigpLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ2VjaG8gXCJFUlJPUjogcGx1Z2luIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQg4oCUIHRoaXMgcGx1Z2luIGlzIG5vdCBpbiB0aGUgcGxhdGZvcm0gY2F0YWxvZyBmb3IgdGhpcyBvcmcsIHNvIHRoZSBzdGVwIGNhbm5vdCBydW4uXCIgPiYyJyxcbiAgICAgICAgJ2VjaG8gXCJUaGlzIHN0ZXAgZmFpbHMgaW5zdGVhZCBvZiBwYXNzaW5nIGFzIGEgbm8tb3AgKGFuIHVucmVzb2x2ZWQgcGx1Z2luIHJlcG9ydGluZyBzdWNjZXNzIHdvdWxkIGJlIGEgZmFsc2UtcG9zaXRpdmUgZ3JlZW4pLlwiID4mMicsXG4gICAgICAgICdlY2hvIFwiRml4OiBsb2FkIHRoZSBwbHVnaW4gaW50byB0aGUgcGxhdGZvcm0gKGRlcGxveS9iaW4vbG9hZC1wbHVnaW5zLnNoKSwgdGhlbiByZS1ydW4gdGhlIHBpcGVsaW5lLlwiID4mMicsXG4gICAgICAgICdleGl0IDEnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHBsdWdpbiB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgY29tbWFuZHMuIENvbGQtc3RhcnQgYm9vdHN0cmFwIGZvclxuICAgKiB0aGUgc3ludGggc3RlcCB3aGVuIHByZS1yZXNvbHV0aW9uIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoL2RlcGxveWBcbiAgICogZGlkbid0IHBvcHVsYXRlIGByZXNvbHZlZFBsdWdpbnNgIGZvciB0aGUgc3ludGggcGx1Z2luLiBSdW5zIG9uIHRoZVxuICAgKiBjb25maWd1cmVkIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAgKGRlZmF1bHQgYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgKVxuICAgKiBhbmQgc2VsZi1ib290c3RyYXBzIHRoZSByZWFsIHN5bnRoIHZpYVxuICAgKiBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aCAtLWlkICR7UElQRUxJTkVfSUR9YC5cbiAgICpcbiAgICogTm8gYGluc3RhbGxDb21tYW5kc2A6IHRoZSBkZWZhdWx0IGltYWdlIGFscmVhZHkgaGFzIGBwaXBlbGluZS1tYW5hZ2VyYFxuICAgKiBiYWtlZCBpbiAodGhhdCdzIHRoZSB3aG9sZSBwb2ludCBvZiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGApLiBJZiB0aGVcbiAgICogb3BlcmF0b3IgcG9pbnRzIENPREVCVUlMRF9ERUZBVUxUX0lNQUdFIGF0IGFuIGltYWdlIGxhY2tpbmcgaXQgKGUuZy5cbiAgICogdmFuaWxsYSBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMCksIHRoaXMgc3RlcCBleGl0cyAxMjcg4oCUIGZpeCB0aGF0XG4gICAqIGJ5IHVzaW5nIGFuIGltYWdlIHdpdGggcGlwZWxpbmUtbWFuYWdlciByYXRoZXIgdGhhbiBwYXBlcmluZyBvdmVyIGl0XG4gICAqIHdpdGggYSBwZXItYnVpbGQgYG5wbSBpbnN0YWxsIC1nYC5cbiAgICovXG4gIHB1YmxpYyBib290c3RyYXAoKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIG5hbWU6ICdjZGstc3ludGgnLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ3BpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfSAtLXN0b3JlLXRva2VucyAtLXF1aWV0IC0tbm8tbm90aWNlcyAtLW5vLXZlcmlmeS1zc2wnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRSxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFMUMsMkVBQTJFO0FBQzNFLGlD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QVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsSUFBSTtZQUNsQixrQkFBa0IsRUFBRSxJQUFJO1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSyxRQUFRO1FBQ2QsT0FBTztZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUM1QixRQUFRLEVBQUU7Z0JBQ1IsdUlBQXVJO2dCQUN2SSxvSUFBb0k7Z0JBQ3BJLDJHQUEyRztnQkFDM0csUUFBUTthQUNUO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLFNBQVM7UUFDZCxPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLElBQUksRUFBRSxXQUFXO1lBQ2pCLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsUUFBUSxFQUFFO2dCQUNSLHlHQUF5RzthQUMxRztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIFNZU1RFTV9PUkdfSUQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkZpbHRlciwgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgVG9rZW4sIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIEFyY2hpdGVjdHVyZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgeyBMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcy5qcyc7XG5pbXBvcnQgeyBDb25maWcsIENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcbmltcG9ydCB7IHBsdWdpbkFydGlmYWN0QWxpYXMsIHBsdWdpbkxvb2t1cEZpbHRlciB9IGZyb20gJy4uL2NvcmUvcGx1Z2luLWNvbnRyYWN0LmpzJztcbmltcG9ydCB7IFBMQUNFSE9MREVSX1BMVUdJTl9JRCB9IGZyb20gJy4uL2NvcmUvc3RlcC1tYW5pZmVzdC5qcyc7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcigncGx1Z2luLWxvb2t1cCcpO1xuXG4vLyBFU00tc2FmZSBtb2R1bGUgZGlyZWN0b3J5ICh0aGUgcGFja2FnZSBpcyBgdHlwZTogbW9kdWxlYDsgYF9fZGlybmFtZWAgaXNcbi8vIG5vdCBkZWZpbmVkIHVuZGVyIEVTIG1vZHVsZXMpLlxuY29uc3QgTU9EVUxFX0RJUiA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuaW50ZXJmYWNlIElucHV0UHJvcHMge1xuICByZWFkb25seSBiYXNlVVJMOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbkZpbHRlcjogUGx1Z2luRmlsdGVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Mb29rdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgLyoqIE9yZ2FuaXphdGlvbiBJRCBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIFNlY3JldHMgTWFuYWdlciAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XG4gIC8qKiBMYW1iZGEgdGltZW91dCAoZGVmYXVsdDogMzBzKSAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKiBMYW1iZGEgbWVtb3J5IGluIE1CIChkZWZhdWx0OiA1MTIpICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMYW1iZGEgQ1BVIGFyY2hpdGVjdHVyZSAoZGVmYXVsdDogQVJNXzY0KSAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG4gIC8qKiBSZXNlcnZlZCBjb25jdXJyZW50IGV4ZWN1dGlvbnMgZm9yIHRoZSBsb29rdXAgTGFtYmRhIChkZWZhdWx0OiAzMCkgKi9cbiAgcmVhZG9ubHkgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBsdWdpbnMgcHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAqIEtleWVkIGJ5IGBhbGlhcyB8fCBuYW1lYCAobWF0Y2hlcyB0aGUgY29uc3RydWN0J3Mgbm9ybWFsaXplKCkgb3V0cHV0KS5cbiAgICogV2hlbiBhIGxvb2t1cCBoaXRzIHRoaXMgbWFwLCBgcGx1Z2luKClgIHJldHVybnMgdGhlIHJlc29sdmVkIFBsdWdpblxuICAgKiBkaXJlY3RseSDigJQgbm8gY3VzdG9tIHJlc291cmNlIGlzIGNyZWF0ZWQuIFRoaXMgaXMgd2hhdCBtYWtlcyB0aGVcbiAgICogbmFtZSwgdmVyc2lvbiwgY29tbWFuZHMsIGVudiwgZXRjLiBhdmFpbGFibGUgYXQgc3ludGggdGltZSBzbyB0aGUgcmVzdWx0aW5nXG4gICAqIENGTiB0ZW1wbGF0ZSBzaGlwcyB3aXRoIHRoZSByZWFsIHZhbHVlcyBiYWtlZCBpbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG59XG5cbi8qKlxuICogQ0RLIENvbnN0cnVjdCByZXNwb25zaWJsZSBmb3IgbG9va2luZyB1cCBwbHVnaW4gY29uZmlndXJhdGlvbnMgZnJvbSBhbiBleHRlcm5hbCBwbGF0Zm9ybVxuICogdXNpbmcgQVdTIENsb3VkRm9ybWF0aW9uIEN1c3RvbSBSZXNvdXJjZXMgYmFja2VkIGJ5IGEgTGFtYmRhIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGNyZWF0ZXM6XG4gKiAtIEEgTGFtYmRhIGZ1bmN0aW9uIChwbHVnaW4tbG9va3VwLWhhbmRsZXIpIHRoYXQgZmV0Y2hlcyBwbHVnaW4gY29uZmlnc1xuICogLSBBIENsb3VkV2F0Y2ggTG9nIEdyb3VwIGZvciB0aGUgTGFtYmRhXG4gKiAtIEEgQ3VzdG9tIFJlc291cmNlIFByb3ZpZGVyIHRoYXQgaW52b2tlcyB0aGUgTGFtYmRhXG4gKiAtIEFuIElBTSBwb2xpY3kgZ3JhbnRpbmcgdGhlIExhbWJkYSBhY2Nlc3MgdG8gdGhlIGNyZWRlbnRpYWxzIHNlY3JldFxuICpcbiAqICMjIFByZXJlcXVpc2l0ZXNcbiAqXG4gKiBCZWZvcmUgZGVwbG95aW5nLCBzdG9yZSBhIEpXVCB0b2tlbiBpbiBTZWNyZXRzIE1hbmFnZXI6XG4gKiBgYGBzaFxuICogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLWRheXMgMzAgLS1yZWdpb24gPHJlZ2lvbj5cbiAqIGBgYFxuICpcbiAqIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWU6XG4gKiBge1NFQ1JFVFNfUEFUSF9QUkVGSVh9L3tvcmdJZH0vcGxhdGZvcm1gXG4gKlxuICogQHNlZSBoYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIudHMgZm9yIHRoZSBMYW1iZGEgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkxvb2t1cCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvdmlkZXI6IFByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbGF0Zm9ybVVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydW50aW1lOiBSdW50aW1lO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBEdXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVtb3J5U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3JnSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBsdWdpbkxvb2t1cFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICghcHJvcHMub3JnYW5pemF0aW9uIHx8ICFwcm9wcy5wcm9qZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggb3JnYW5pemF0aW9uIGFuZCBwcm9qZWN0IGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl91bmlxdWVJZCA9IHByb3BzLnVuaXF1ZUlkO1xuICAgIHRoaXMuX3BsYXRmb3JtVXJsID0gcHJvcHMucGxhdGZvcm1Vcmw7XG4gICAgdGhpcy5fb3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLl9ydW50aW1lID0gcHJvcHMucnVudGltZSA/PyBSdW50aW1lLk5PREVKU18yNF9YO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBwcm9wcy50aW1lb3V0ID8/IER1cmF0aW9uLnNlY29uZHMoMzApO1xuICAgIHRoaXMuX21lbW9yeVNpemUgPSBwcm9wcy5tZW1vcnlTaXplID8/IENvbmZpZy5nZXQoJ2F3cycpLmxhbWJkYS5tZW1vcnlTaXplO1xuICAgIHRoaXMuX2FyY2hpdGVjdHVyZSA9IHByb3BzLmFyY2hpdGVjdHVyZSA/PyBBcmNoaXRlY3R1cmUuQVJNXzY0O1xuICAgIHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgPSBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zO1xuICAgIHRoaXMuX3Jlc29sdmVkUGx1Z2lucyA9IHByb3BzLnJlc29sdmVkUGx1Z2lucztcblxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbigpO1xuXG4gICAgLy8gTG9nLWdyb3VwIHN0cmF0ZWd5OlxuICAgIC8vICAgUHJldmlvdXMgY29kZSBjcmVhdGVkIGFuIGBBV1M6OkxvZ3M6OkxvZ0dyb3VwYCByZXNvdXJjZSB3aXRoIGFuXG4gICAgLy8gICBFWFBMSUNJVCBuYW1lIChgL2F3cy9sYW1iZGEvcGx1Z2luLWxvb2t1cC1OYCkuIFRoYXQgYnJlYWtzIGV2ZXJ5XG4gICAgLy8gICByZS1kZXBsb3kgYWZ0ZXIgYSByb2xsZWQtYmFjayBzdGFjazogQVdTIGF1dG8tY3JlYXRlcyB0aGUgZ3JvdXAgb25cbiAgICAvLyAgIGZpcnN0IExhbWJkYSBpbnZvY2F0aW9uLCB0aGUgcm9sbGJhY2sgbGVhdmVzIGl0IGFzIGFuIG9ycGhhbiwgYW5kXG4gICAgLy8gICB0aGUgbmV4dCBDREsgcnVuIGZhaWxzIHdpdGggXCJSZXNvdXJjZSAuLi4gYWxyZWFkeSBleGlzdHNcIiBiZWNhdXNlXG4gICAgLy8gICB0aGUgZXhwbGljaXQgbmFtZSBjb2xsaWRlcyB3aXRoIHRoZSBvcnBoYW4uXG4gICAgLy9cbiAgICAvLyAgIEZpeDogdXNlIGBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKClgIHRvIGFkb3B0LW9yLXBhc3MtdGhyb3VnaC5cbiAgICAvLyAgIElmIHRoZSBncm91cCBleGlzdHMsIENESyByZWZlcmVuY2VzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJlY3JlYXRlLlxuICAgIC8vICAgSWYgaXQgZG9lc24ndCwgQVdTIExhbWJkYSBhdXRvLWNyZWF0ZXMgaXQgb24gZmlyc3QgaW52b2NhdGlvbi5cbiAgICAvLyAgIFJldGVudGlvbiBpcyB0aGVuIHNldCB2aWEgYSBzZXBhcmF0ZSByZXRlbnRpb24tcG9saWN5IGN1c3RvbVxuICAgIC8vICAgcmVzb3VyY2Ugd2hpY2ggaXMgaWRlbXBvdGVudCAoc2FmZSB0byBhcHBseSB0byBleGlzdGluZyBncm91cHMpLlxuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS8ke3RoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdwbHVnaW46bG9va3VwJykucmVwbGFjZSgvOi9nLCAnLScpfWA7XG4gICAgY29uc3QgbG9nR3JvdXAgPSBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdsb2c6Z3JvdXAnKSxcbiAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICApO1xuXG4gICAgdGhpcy5fcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ3Jlc291cmNlOnByb3ZpZGVyJyksIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nR3JvdXAsXG4gICAgfSk7XG5cbiAgICBsb2cuZGVidWcoYFBsdWdpbkxvb2t1cCBpbml0aWFsaXplZCBmb3IgJHtwcm9wcy5vcmdhbml6YXRpb259LyR7cHJvcHMucHJvamVjdH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCBhbmQgcmVzb2x2ZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gdXNpbmcgZWl0aGVyIGEgc2ltcGxlIG5hbWUgb3IgZnVsbCBQbHVnaW5PcHRpb25zIG9iamVjdFxuICAgKiBEdXJpbmcgc3ludGhlc2lzLCBpZiB0aGUgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pLCByZXR1cm5zIGZhbGxiYWNrIHBsdWdpblxuICAgKiBEdXJpbmcgZGVwbG95bWVudCwgYXR0ZW1wdHMgdG8gcGFyc2UgdGhlIGFjdHVhbCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgY3VzdG9tIHJlc291cmNlXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBQbHVnaW4gbmFtZSAoc3RyaW5nKSBvciBjb21wbGV0ZSBQbHVnaW5PcHRpb25zIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUmVzb2x2ZWQgUGx1Z2luIG9iamVjdCBvciBmYWxsYmFjayBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBwbHVnaW4ocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMubm9ybWFsaXplKHBsdWdpbik7XG5cbiAgICAvLyBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSS5cbiAgICAvLyBTa2lwIHRoZSBjdXN0b20gcmVzb3VyY2UgZW50aXJlbHkg4oCUIHdlIGFscmVhZHkga25vdyB0aGUgcGx1Z2luJ3NcbiAgICAvLyBuYW1lLCB2ZXJzaW9uLCBjb21tYW5kcywgZW52LCBldGMuIGF0IHN5bnRoIHRpbWUsIHNvIHRoZSByZXN1bHRpbmcgQ0ZOXG4gICAgLy8gdGVtcGxhdGUgY2FuIHNoaXAgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAgY29uc3QgY2FjaGVLZXkgPSBwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lO1xuICAgIGNvbnN0IHByZVJlc29sdmVkID0gdGhpcy5fcmVzb2x2ZWRQbHVnaW5zPy5bY2FjaGVLZXldIGFzIChQbHVnaW4gJiB7IHB1Ymxpc2hlcj86IHN0cmluZyB8IG51bGwgfSkgfCB1bmRlZmluZWQ7XG4gICAgLy8gVGhlIG1hcCBpcyBrZXllZCBieSBBTElBUywgc28gY2hlY2sgaXQgYWN0dWFsbHkgaG9sZHMgVEhJUyBwbHVnaW4uIFR3b1xuICAgIC8vIHN0ZXBzIHNoYXJpbmcgYW4gYWxpYXMgYWNyb3NzIGRpZmZlcmVudCBwbHVnaW5zIHdvdWxkIG90aGVyd2lzZSBnZXQgdGhlXG4gICAgLy8gZmlyc3Qgb25lJ3MgcmVjb3JkIGJhY2sg4oCUIHRoZSBzZWNvbmQgc3RlcCBzaWxlbnRseSBydW5uaW5nIHRoZSB3cm9uZ1xuICAgIC8vIGltYWdlIGFuZCBjb21tYW5kcy4gVGhlIENMSSByZWZ1c2VzIHN1Y2ggYSBwaXBlbGluZSB0b287IHRoaXMgY292ZXJzIGFueSBvdGhlclxuICAgIC8vIGNhbGxlciB0aGF0IHN1cHBsaWVzIGByZXNvbHZlZFBsdWdpbnNgLlxuICAgIC8vIENvbXBhcmUgYWdhaW5zdCB0aGUgbmFtZSB0aGUgbG9va3VwIGFjdHVhbGx5IFRBUkdFVEVEOiBhbiBleHBsaWNpdFxuICAgIC8vIGBmaWx0ZXIubmFtZWAgb3ZlcnJpZGVzIHRoZSByZWYncyBgbmFtZWAgYnkgZGVzaWduLCBhbmQgdGhhdCBpcyBub3QgYVxuICAgIC8vIGNvbGxpc2lvbi5cbiAgICBjb25zdCB0YXJnZXROYW1lID0gKHByb3BzLmZpbHRlciBhcyB7IG5hbWU/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk/Lm5hbWUgPz8gcHJvcHMubmFtZTtcbiAgICBpZiAocHJlUmVzb2x2ZWQgJiYgcHJlUmVzb2x2ZWQubmFtZSAhPT0gdGFyZ2V0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUGx1Z2luIGFsaWFzIFwiJHtjYWNoZUtleX1cIiByZXNvbHZlcyB0byBcIiR7cHJlUmVzb2x2ZWQubmFtZX1cIiwgbm90IFwiJHt0YXJnZXROYW1lfVwiLiBgXG4gICAgICAgICsgJ0VhY2ggYWxpYXMgbXVzdCBuYW1lIGV4YWN0bHkgb25lIHBsdWdpbi4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQSBxdWFsaWZpZWQgcmVmZXJlbmNlIG11c3QgaGF2ZSByZXNvbHZlZCB0byBUSEFUIHB1Ymxpc2hlcidzIGxpc3RpbmdcbiAgICAvLyAoYW4gdW5xdWFsaWZpZWQgb25lIG1heSByZXNvbHZlIHRvIHRoZSBvcmcncyBvd24gcGx1Z2luIG9yIHRoZSBPZmZpY2lhbFxuICAgIC8vIGxpc3RpbmcpLlxuICAgIGlmIChwcmVSZXNvbHZlZCAmJiBwcm9wcy5wdWJsaXNoZXIgJiYgcHJlUmVzb2x2ZWQucHVibGlzaGVyICE9PSBwcm9wcy5wdWJsaXNoZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBsdWdpbiBhbGlhcyBcIiR7Y2FjaGVLZXl9XCIgcmVzb2x2ZXMgdG8gJHtwcmVSZXNvbHZlZC5wdWJsaXNoZXIgPyBgJHtwcmVSZXNvbHZlZC5wdWJsaXNoZXJ9L2AgOiAneW91ciBvcmdhbml6YXRpb25cXCdzICd9JHtwcmVSZXNvbHZlZC5uYW1lfSwgYFxuICAgICAgICArIGBub3QgJHtwcm9wcy5wdWJsaXNoZXJ9LyR7dGFyZ2V0TmFtZX0uIEVhY2ggYWxpYXMgbXVzdCBuYW1lIGV4YWN0bHkgb25lIHBsdWdpbi5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByZVJlc29sdmVkKSB7XG4gICAgICBsb2cuZGVidWcoYFBsdWdpbiBcIiR7cHJvcHMubmFtZX1cIiBwcmUtcmVzb2x2ZWQgKGFsaWFzPSR7Y2FjaGVLZXl9KSDigJQgc2tpcHBpbmcgY3VzdG9tIHJlc291cmNlYCk7XG4gICAgICByZXR1cm4gcHJlUmVzb2x2ZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tID0gdGhpcy5jcmVhdGVDdXN0b21SZXNvdXJjZShwcm9wcyk7XG4gICAgY29uc3QgZW5jb2RlZCA9IGN1c3RvbS5nZXRBdHRTdHJpbmcoJ1Jlc3VsdFZhbHVlJyk7XG5cbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGVuY29kZWQpKSB7XG4gICAgICBsb2cuZGVidWcoYFBsdWdpbiBcIiR7cHJvcHMubmFtZX1cIiB2YWx1ZSBpcyB1bnJlc29sdmVkICh0b2tlbikgZHVyaW5nIHN5bnRoZXNpcyDigJQgdXNpbmcgZmFsbGJhY2suIFRoZSBhY3R1YWwgcGx1Z2luIHdpbGwgYmUgcmVzb2x2ZWQgYXQgZGVwbG95bWVudCB0aW1lLmApO1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2soKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IEJ1ZmZlci5mcm9tKGVuY29kZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRlY29kZWQpO1xuXG4gICAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8ICFkYXRhLm5hbWUgfHwgIUFycmF5LmlzQXJyYXkoZGF0YS5jb21tYW5kcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBsdWdpbiByZXNwb25zZTogbWlzc2luZyByZXF1aXJlZCBmaWVsZHMgKG5hbWUsIGNvbW1hbmRzKScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YSBhcyBQbHVnaW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBwbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgZGF0YTogJHtlcnJvck1zZ31gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgc2VydmVzIGFzIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgY3VzdG9tIHJlc291cmNlIHByb3ZpZGVyLlxuICAgKlxuICAgKiBKV1QgdG9rZW4gaXMgc3RvcmVkIGluIGEgcHJlLWV4aXN0aW5nIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgYXRcbiAgICogYHtTRUNSRVRTX1BBVEhfUFJFRklYfS97b3JnSWR9L3BsYXRmb3JtYC4gVGhlIExhbWJkYSByZXNvbHZlcyB0aGVcbiAgICogc2VjcmV0IGJ5IG5hbWUgYXQgcnVudGltZSB1c2luZyBgQ29yZUNvbnN0YW50cy5TRUNSRVRTX1BBVEhfUFJFRklYYC5cbiAgICpcbiAgICogQ3JlYXRlIHRoZSBzZWNyZXQgYmVmb3JlIGRlcGxveWluZyB3aXRoOlxuICAgKiAgIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIDxyZWdpb24+XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUxhbWJkYUZ1bmN0aW9uKCk6IE5vZGVqc0Z1bmN0aW9uIHtcbiAgICBpZiAoIXRoaXMuX29yZ0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29yZ0lkIGlzIHJlcXVpcmVkIGZvciBQbHVnaW5Mb29rdXAg4oCUIG5lZWRlZCB0byByZXNvbHZlIHRoZSBwZXItb3JnIHBsYXRmb3JtIHNlY3JldCcpO1xuICAgIH1cbiAgICBjb25zdCBzZWNyZXROYW1lID0gQ29yZUNvbnN0YW50cy5zZWNyZXRQYXRoKHRoaXMuX29yZ0lkLCAncGxhdGZvcm0nKTtcblxuICAgIGNvbnN0IGZuID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdvbmV2ZW50OmhhbmRsZXInKSwge1xuICAgICAgcnVudGltZTogdGhpcy5fcnVudGltZSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuX3RpbWVvdXQsXG4gICAgICBtZW1vcnlTaXplOiB0aGlzLl9tZW1vcnlTaXplLFxuICAgICAgYXJjaGl0ZWN0dXJlOiB0aGlzLl9hcmNoaXRlY3R1cmUsXG4gICAgICBlbnRyeTogam9pbihNT0RVTEVfRElSLCAnLy4uL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci5qcycpLFxuICAgICAgZGVwc0xvY2tGaWxlUGF0aDogam9pbihNT0RVTEVfRElSLCAnLy4uL2hhbmRsZXJzL3BucG0tbG9jay55YW1sJyksXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgUExBVEZPUk1fU0VDUkVUX05BTUU6IHNlY3JldE5hbWUsXG4gICAgICAgIC8vIEFsbG93IHNlbGYtc2lnbmVkIGNlcnRzIHdoZW4gcGxhdGZvcm0gdXNlcyBIVFRQUyB3aXRob3V0IGEgQ0Etc2lnbmVkIGNlcnRpZmljYXRlXG4gICAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICAgIE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ6ICcwJyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICBzb3VyY2VNYXA6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICBleHRlcm5hbE1vZHVsZXM6IFtcbiAgICAgICAgICAvLyBQcm92aWRlZCBieSB0aGUgTGFtYmRhIE5vZGUuanMgcnVudGltZSDigJQgbmV2ZXIgYnVuZGxlLlxuICAgICAgICAgICdAYXdzLXNkay8qJyxcbiAgICAgICAgICAvLyBTeW50aC1vbmx5IGxpYnJhcmllcyB0aGF0IG11c3QgTkVWRVIgZW5kIHVwIGluIGEgTGFtYmRhIGJ1bmRsZS5cbiAgICAgICAgICAvLyBUaGUgaGFuZGxlciBkb2Vzbid0IHVzZSB0aGVtOyB0aGlzIGlzIGEgZ3VhcmQgc28gYSBzdHJheSB0cmFuc2l0aXZlXG4gICAgICAgICAgLy8gaW1wb3J0IChlLmcuIHZpYSBhIGNvbmZpZyBtb2R1bGUgdGhhdCBwdWxscyBpbmZyYXN0cnVjdHVyZS1jb25maWcg4oaSXG4gICAgICAgICAgLy8gYXdzLWNkay1saWIpIGNhbid0IGRyYWcgdGhlIGVudGlyZSB+aHVuZHJlZHMtb2YtTUIgQ0RLIGludG8gdGhlXG4gICAgICAgICAgLy8gYnVuZGxlIGFuZCBPT00ta2lsbCBlc2J1aWxkIGR1cmluZyBjb2xkLXN0YXJ0IHN5bnRoLiBJZiBvbmUgb2YgdGhlc2VcbiAgICAgICAgICAvLyBpcyBldmVyIGdlbnVpbmVseSByZWFjaGVkIGF0IHJ1bnRpbWUgdGhlIExhbWJkYSB3aWxsIGZhaWwgbG91ZGx5IGF0XG4gICAgICAgICAgLy8gaW5pdCAobW9kdWxlIG5vdCBmb3VuZCkgcmF0aGVyIHRoYW4gc2lsZW50bHkgT09NIGF0IHN5bnRoIOKAlCB3aGljaCBpc1xuICAgICAgICAgIC8vIHRoZSBjb3JyZWN0IHNpZ25hbCwgc2luY2UgQ0RLIGhhcyBubyBidXNpbmVzcyBydW5uaW5nIGluIHRoaXMgTGFtYmRhLlxuICAgICAgICAgICdhd3MtY2RrLWxpYicsXG4gICAgICAgICAgJ2F3cy1jZGstbGliLyonLFxuICAgICAgICAgICdjb25zdHJ1Y3RzJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCB0aGUgTGFtYmRhIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQuXG4gICAgLy8gVGhlIHdpbGRjYXJkIHN1ZmZpeCBoYW5kbGVzIHRoZSA2LWNoYXIgcmFuZG9tIElEIHRoYXQgU2VjcmV0cyBNYW5hZ2VyIGFwcGVuZHMuXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoqOio6c2VjcmV0OiR7c2VjcmV0TmFtZX0tKmBdLFxuICAgIH0pKTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZGVmYXVsdCBwbHVnaW4gZmlsdGVyLlxuICAgKiBBY2Nlc3MgY29udHJvbCAob3JnSWQgc2NvcGluZywgcHVibGljL3ByaXZhdGUgdmlzaWJpbGl0eSkgaXMgaGFuZGxlZCBieVxuICAgKiB0aGUgcGxhdGZvcm0ncyBhY2Nlc3MgY29udHJvbCBxdWVyeSBidWlsZGVyIGJhc2VkIG9uIHRoZSBKV1QncyBvcmdhbml6YXRpb25JZC5cbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbk9wdGlvbnMge1xuICAgIGNvbnN0IHJlZjogUGx1Z2luT3B0aW9ucyA9IHR5cGVvZiBwbHVnaW4gPT09ICdzdHJpbmcnID8geyBuYW1lOiBwbHVnaW4gfSA6IHBsdWdpbjtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogcmVmLm5hbWUsXG4gICAgICAuLi4ocmVmLnB1Ymxpc2hlciA/IHsgcHVibGlzaGVyOiByZWYucHVibGlzaGVyIH0gOiB7fSksXG4gICAgICAvLyBUaGUgcmVzb2x2ZXIgY2FjaGUga2V5OiB0aGUgZXhwbGljaXQgYWxpYXMsIGVsc2UgYFs8cHVibGlzaGVyPi1dPG5hbWU+LWFsaWFzYC5cbiAgICAgIGFsaWFzOiBwbHVnaW5BcnRpZmFjdEFsaWFzKHJlZiksXG4gICAgICAvLyBUaGUgc2FtZSBmaWx0ZXIgdGhlIENMSSBwcmUtcmVzb2x2ZXIgYW5kIHRoZSBwaXBlbGluZSBzZXJ2aWNlJ3NcbiAgICAgIC8vIGNvbnRyYWN0IGNoZWNrIHNlbmQgKGBwbHVnaW5Mb29rdXBGaWx0ZXJgKTogbmFtZSArIHB1Ymxpc2hlciwgdGhlblxuICAgICAgLy8gdGhlIHJlZmVyZW5jZSdzIG93biBmaWx0ZXIsIGVsc2UgdGhlIGRlZmF1bHQgdmVyc2lvbi5cbiAgICAgIGZpbHRlcjogcGx1Z2luTG9va3VwRmlsdGVyKHsgbmFtZTogcmVmLm5hbWUsIHB1Ymxpc2hlcjogcmVmLnB1Ymxpc2hlciwgZmlsdGVyOiByZWYuZmlsdGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIH0pIGFzIFBsdWdpbkZpbHRlcixcbiAgICAgIG1ldGFkYXRhOiByZWYubWV0YWRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ3VzdG9tUmVzb3VyY2UgaW5zdGFuY2UgdGhhdCB0cmlnZ2VycyBwbHVnaW4gbG9va3VwIGR1cmluZyBkZXBsb3ltZW50XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKHByb3BzOiBQbHVnaW5PcHRpb25zKTogQ3VzdG9tUmVzb3VyY2Uge1xuICAgIGNvbnN0IHJlc291cmNlSWQgPSB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZShwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lKTtcblxuICAgIHJldHVybiBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgcmVzb3VyY2VJZCwge1xuICAgICAgc2VydmljZVRva2VuOiB0aGlzLl9wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OlBsdWdpbkxvb2t1cCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGJhc2VVUkw6IHRoaXMuX3BsYXRmb3JtVXJsLFxuICAgICAgICBwbHVnaW5GaWx0ZXI6IHByb3BzLmZpbHRlcixcbiAgICAgIH0gYXMgSW5wdXRQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBCYXNlIHBsdWdpbiBzaGFwZSB3aXRoIG5vLW9wIGRlZmF1bHRzIGZvciBmaWVsZHMgQ0RLIGRvZXNuJ3QgdXNlLiAqL1xuICBwcml2YXRlIHN0YXRpYyBiYXNlUGx1Z2luKCk6IFBsdWdpbiB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IFBMQUNFSE9MREVSX1BMVUdJTl9JRCxcbiAgICAgIG9yZ0lkOiBTWVNURU1fT1JHX0lELFxuICAgICAgY3JlYXRlZEJ5OiAnc3lzdGVtJyxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgdXBkYXRlZEJ5OiAnc3lzdGVtJyxcbiAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgbmFtZTogJ2ZhbGxiYWNrJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBudWxsLFxuICAgICAga2V5d29yZHM6IFtdLFxuICAgICAgY2F0ZWdvcnk6ICd1bmtub3duJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBtZXRhZGF0YToge30sXG4gICAgICBwbHVnaW5UeXBlOiAnQ29kZUJ1aWxkU3RlcCcsXG4gICAgICBjb21wdXRlVHlwZTogJ1NNQUxMJyxcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6ICdmYWlsJyxcbiAgICAgIHNlY3JldHM6IFtdLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgZW52OiB7fSxcbiAgICAgIGJ1aWxkQXJnczoge30sXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtdLFxuICAgICAgY29tbWFuZHM6IFtdLFxuICAgICAgZG9ja2VyZmlsZTogbnVsbCxcbiAgICAgIGJ1aWxkVHlwZTogJ21ldGFkYXRhX29ubHknLFxuICAgICAgaW1hZ2VEaWdlc3Q6IG51bGwsXG4gICAgICBpbWFnZVNvdXJjZTogbnVsbCxcbiAgICAgIG93bmVySWQ6IG51bGwsXG4gICAgICBvd25lclR5cGU6IG51bGwsXG4gICAgICBsaWZlY3ljbGU6ICdwcm9kdWN0aW9uJyxcbiAgICAgIGNyaXRpY2FsaXR5OiBudWxsLFxuICAgICAgbGFiZWxzOiB7fSxcbiAgICAgIGxpbmtzOiBbXSxcbiAgICAgIHZpc2liaWxpdHk6ICdwdWJsaWMnLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgZGVsZXRlZEF0OiBudWxsLFxuICAgICAgZGVsZXRlZEJ5OiBudWxsLFxuICAgICAgcHVyZ2VBZnRlcjogbnVsbCxcbiAgICAgIHF1b3RhUmVzZXRBdDogbnVsbCxcbiAgICAgIHN1bW1hcnk6IG51bGwsXG4gICAgICBkaXNwbGF5TmFtZTogbnVsbCxcbiAgICAgIGRvY3VtZW50YXRpb25Vcmw6IG51bGwsXG4gICAgICBtZXRhZGF0YVNvdXJjZXM6IHt9LFxuICAgICAgcmVxdWlyZWRNZXRhZGF0YTogW10sXG4gICAgICByZXF1aXJlZFZhcnM6IFtdLFxuICAgICAgbWV0YWRhdGFUeXBlczoge30sXG4gICAgICB2YXJzVHlwZXM6IHt9LFxuICAgICAgc21va2VUZXN0OiBudWxsLFxuICAgICAgbmV0d29ya0VncmVzczogW10sXG4gICAgICByZWFkbWVNZDogbnVsbCxcbiAgICAgIHJlYWRtZUh0bWw6IG51bGwsXG4gICAgICBsaWNlbnNlOiBudWxsLFxuICAgICAgY2hhbmdlbG9nOiBudWxsLFxuICAgICAgaG9tZXBhZ2VVcmw6IG51bGwsXG4gICAgICBzb3VyY2VVcmw6IG51bGwsXG4gICAgICBpY29uOiBudWxsLFxuICAgICAgdXBsb2FkZWRJY29uOiBudWxsLFxuICAgICAgdnVsbkNyaXRpY2FsOiBudWxsLFxuICAgICAgdnVsbkhpZ2g6IG51bGwsXG4gICAgICB2dWxuTWVkaXVtOiBudWxsLFxuICAgICAgdnVsbkxvdzogbnVsbCxcbiAgICAgIHNjYW5uZWRBdDogbnVsbCxcbiAgICAgIHJ1bkFzUm9vdDogbnVsbCxcbiAgICAgIGJyZWFraW5nOiBmYWxzZSxcbiAgICAgIGZyb3plbkF0OiBudWxsLFxuICAgICAgeWFua2VkQXQ6IG51bGwsXG4gICAgICB5YW5rUmVhc29uOiBudWxsLFxuICAgICAgZGVwcmVjYXRlZEF0OiBudWxsLFxuICAgICAgZGVwcmVjYXRpb25NZXNzYWdlOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmFsbGJhY2sgZm9yIGEgcGx1Z2luIHdob3NlIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQgKG5vdCBpbiB0aGUgcGxhdGZvcm1cbiAgICogY2F0YWxvZyBmb3IgdGhpcyBvcmcpIGFuZCBzbyBjb3VsZCBub3QgYmUgcHJlLXJlc29sdmVkIGF0IHN5bnRoLlxuICAgKlxuICAgKiBUaGlzIHN0ZXAgRkFJTFMgdGhlIGJ1aWxkIChleGl0IDEpIG9uIHB1cnBvc2UuIFRoZSBwcmV2aW91cyBiZWhhdmlvdXIg4oCUXG4gICAqIGBlY2hvIFwi4oCmXCIgJiYgZXhpdCAwYCDigJQgd2FzIGEgZmFsc2UgcG9zaXRpdmU6IGFuIHVucmVzb2x2ZWQgc2VjdXJpdHkvcXVhbGl0eVxuICAgKiBzdGVwIChkZXBlbmRlbmN5LWNoZWNrLCBzZW1ncmVwLCBzcG90YnVncywg4oCmKSByZXBvcnRlZCB0aGUgc3RhZ2UgZ3JlZW4gd2hpbGVcbiAgICogcnVubmluZyBub3RoaW5nLCBnaXZpbmcgZmFsc2UgYXNzdXJhbmNlIHRoYXQgc2NhbnMvYnVpbGRzIGhhZCBwYXNzZWQuIEFcbiAgICogcGx1Z2luIHN0ZXAgdGhhdCBjYW4ndCBydW4gaXRzIHBsdWdpbiBtdXN0IGdvIHJlZCwgY29uc2lzdGVudCB3aXRoXG4gICAqIGBiYXNlUGx1Z2luKCkuZmFpbHVyZUJlaGF2aW9yID09PSAnZmFpbCdgLiBUaGUgbWVzc2FnZSBpcyBhY3Rpb25hYmxlIHNvIHRoZVxuICAgKiBvcGVyYXRvciBrbm93cyB0aGUgY2F0YWxvZyBpcyBlbXB0eS9pbmNvbXBsZXRlLCBub3QgdGhhdCB0aGUgdG9vbCBjcmFzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFjaygpOiBQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5QbHVnaW5Mb29rdXAuYmFzZVBsdWdpbigpLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ2VjaG8gXCJFUlJPUjogcGx1Z2luIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQg4oCUIHRoaXMgcGx1Z2luIGlzIG5vdCBpbiB0aGUgcGxhdGZvcm0gY2F0YWxvZyBmb3IgdGhpcyBvcmcsIHNvIHRoZSBzdGVwIGNhbm5vdCBydW4uXCIgPiYyJyxcbiAgICAgICAgJ2VjaG8gXCJUaGlzIHN0ZXAgZmFpbHMgaW5zdGVhZCBvZiBwYXNzaW5nIGFzIGEgbm8tb3AgKGFuIHVucmVzb2x2ZWQgcGx1Z2luIHJlcG9ydGluZyBzdWNjZXNzIHdvdWxkIGJlIGEgZmFsc2UtcG9zaXRpdmUgZ3JlZW4pLlwiID4mMicsXG4gICAgICAgICdlY2hvIFwiRml4OiBsb2FkIHRoZSBwbHVnaW4gaW50byB0aGUgcGxhdGZvcm0gKGRlcGxveS9iaW4vbG9hZC1wbHVnaW5zLnNoKSwgdGhlbiByZS1ydW4gdGhlIHBpcGVsaW5lLlwiID4mMicsXG4gICAgICAgICdleGl0IDEnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHBsdWdpbiB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgY29tbWFuZHMuIENvbGQtc3RhcnQgYm9vdHN0cmFwIGZvclxuICAgKiB0aGUgc3ludGggc3RlcCB3aGVuIHByZS1yZXNvbHV0aW9uIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoL2RlcGxveWBcbiAgICogZGlkbid0IHBvcHVsYXRlIGByZXNvbHZlZFBsdWdpbnNgIGZvciB0aGUgc3ludGggcGx1Z2luLiBSdW5zIG9uIHRoZVxuICAgKiBjb25maWd1cmVkIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAgKGRlZmF1bHQgYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgKVxuICAgKiBhbmQgc2VsZi1ib290c3RyYXBzIHRoZSByZWFsIHN5bnRoIHZpYVxuICAgKiBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aCAtLWlkICR7UElQRUxJTkVfSUR9YC5cbiAgICpcbiAgICogTm8gYGluc3RhbGxDb21tYW5kc2A6IHRoZSBkZWZhdWx0IGltYWdlIGFscmVhZHkgaGFzIGBwaXBlbGluZS1tYW5hZ2VyYFxuICAgKiBiYWtlZCBpbiAodGhhdCdzIHRoZSB3aG9sZSBwb2ludCBvZiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGApLiBJZiB0aGVcbiAgICogb3BlcmF0b3IgcG9pbnRzIENPREVCVUlMRF9ERUZBVUxUX0lNQUdFIGF0IGFuIGltYWdlIGxhY2tpbmcgaXQgKGUuZy5cbiAgICogdmFuaWxsYSBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMCksIHRoaXMgc3RlcCBleGl0cyAxMjcg4oCUIGZpeCB0aGF0XG4gICAqIGJ5IHVzaW5nIGFuIGltYWdlIHdpdGggcGlwZWxpbmUtbWFuYWdlciByYXRoZXIgdGhhbiBwYXBlcmluZyBvdmVyIGl0XG4gICAqIHdpdGggYSBwZXItYnVpbGQgYG5wbSBpbnN0YWxsIC1nYC5cbiAgICovXG4gIHB1YmxpYyBib290c3RyYXAoKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIG5hbWU6ICdjZGstc3ludGgnLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ3BpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfSAtLXN0b3JlLXRva2VucyAtLXF1aWV0IC0tbm8tbm90aWNlcyAtLW5vLXZlcmlmeS1zc2wnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -135,4 +135,45 @@ export interface PluginSpec {
|
|
|
135
135
|
* Optional type declarations for vars keys (same semantics as `metadataTypes`).
|
|
136
136
|
*/
|
|
137
137
|
readonly varsTypes?: Record<string, 'string' | 'number' | 'bool' | 'json'>;
|
|
138
|
+
/**
|
|
139
|
+
* Smoke-test command the build tooling runs against the built image.
|
|
140
|
+
* @example 'trivy --version'
|
|
141
|
+
*/
|
|
142
|
+
readonly smokeTest?: string;
|
|
143
|
+
/**
|
|
144
|
+
* SPDX license identifier of the plugin (validated against an allowlist at upload).
|
|
145
|
+
* @example 'Apache-2.0'
|
|
146
|
+
*/
|
|
147
|
+
readonly license?: string;
|
|
148
|
+
/** Release notes for this version (markdown, ≤ 32 KB). */
|
|
149
|
+
readonly changelog?: string;
|
|
150
|
+
/** Project homepage — `https:` only, no URL shorteners. */
|
|
151
|
+
readonly homepageUrl?: string;
|
|
152
|
+
/** Source repository — `https:` only, no URL shorteners. */
|
|
153
|
+
readonly sourceUrl?: string;
|
|
154
|
+
/** Documentation site — `https:` only, no URL shorteners. */
|
|
155
|
+
readonly documentationUrl?: string;
|
|
156
|
+
/**
|
|
157
|
+
* The catalog card's one-line summary (≤ 160). When absent it is derived from
|
|
158
|
+
* the first sentence of the description.
|
|
159
|
+
*/
|
|
160
|
+
readonly summary?: string;
|
|
161
|
+
/**
|
|
162
|
+
* Curated icon key (`deploy/plugins/_icons/<key>.svg`), or a key plus a
|
|
163
|
+
* corner badge key for language variants.
|
|
164
|
+
* @example 'trivy'
|
|
165
|
+
* @example { key: 'snyk', badge: 'python' }
|
|
166
|
+
*/
|
|
167
|
+
readonly icon?: string | {
|
|
168
|
+
key: string;
|
|
169
|
+
badge?: string;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Declared network access, shown to consumers and compared in review.
|
|
173
|
+
* `egress`: the hostnames the plugin contacts (no scheme, port or path;
|
|
174
|
+
* one leading `*.` wildcard allowed), at most 50.
|
|
175
|
+
*/
|
|
176
|
+
readonly network?: {
|
|
177
|
+
egress?: string[];
|
|
178
|
+
};
|
|
138
179
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
export {};
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZWxpbmUvcGx1Z2luLXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBgUGx1Z2luU3BlY2AgZG9tYWluIHR5cGUg4oCUIHRoZSBzaGFwZSBvZiBhIHBsdWdpbidzIGRlY2xhcmVkIGNvbnRyYWN0IGFzXG4gKiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIGFuZCBleGNoYW5nZWQgb3ZlciB0aGUgQVBJLlxuICpcbiAqIEtlcHQgaW4gaXRzIG93biBtb2R1bGUsIGFwYXJ0IGZyb20gdGhlIHN5bnRoLXRpbWUgYXV0aG9yaW5nIHR5cGVzIGluXG4gKiBgc3RlcC10eXBlcy50c2AsIGJlY2F1c2UgdGhvc2UgcmVmZXJlbmNlIENESyB0eXBlcyAoYENvbnN0cnVjdGAsXG4gKiBgSUZpbGVTZXRQcm9kdWNlcmAsIENvZGVCdWlsZCdzIGBDb21wdXRlVHlwZWApIHdoaWxlIHRoaXMgb25lIGlzIHB1cmUgZGF0YS5cbiAqIEFQSSBzZXJ2aWNlcyBjb25zdW1lIGBQbHVnaW5TcGVjYDsgb25seSB0aGUgQ0RLIGVudHJ5IHBvaW50IGNvbnN1bWVzIHRoZSByZXN0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcHV0ZVR5cGUsIFBsdWdpblR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcblxuLyoqXG4gKiBQbHVnaW4gc3BlYyBkZWZpbmluZyBwbHVnaW4gYmVoYXZpb3IgYW5kIHJlcXVpcmVtZW50cy5cbiAqIFRoaXMgaXMgdHlwaWNhbGx5IGxvYWRlZCBmcm9tIGEgcGx1Z2luIHNwZWMgZmlsZSAocGx1Z2luLXNwZWMueWFtbCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU3BlYyB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBsdWdpblxuICAgKiBAZXhhbXBsZSAnbm9kZWpzLWJ1aWxkJ1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBwbHVnaW4gZG9lc1xuICAgKiBAZXhhbXBsZSAnQnVpbGRzIGFuZCB0ZXN0cyBOb2RlLmpzIGFwcGxpY2F0aW9ucydcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXl3b3JkcyBmb3IgcGx1Z2luIGRpc2NvdmVyeSBhbmQgY2F0ZWdvcml6YXRpb25cbiAgICogQGV4YW1wbGUgWydub2RlanMnLCAndHlwZXNjcmlwdCcsICdidWlsZCcsICd0ZXN0J11cbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBsdWdpbiBjYXRlZ29yeSBmb3IgQUktYXNzaXN0ZWQgc2VsZWN0aW9uIGFuZCBvcmdhbml6YXRpb24uXG4gICAqIE9uZSBvZjogbGFuZ3VhZ2UsIHNlY3VyaXR5LCBxdWFsaXR5LCB0ZXN0aW5nLCBkZXBsb3ksIGFydGlmYWN0LFxuICAgKiAgICAgICAgIGluZnJhc3RydWN0dXJlLCBtb25pdG9yaW5nLCBub3RpZmljYXRpb24sIGFpXG4gICAqL1xuICByZWFkb25seSBjYXRlZ29yeT86IHN0cmluZztcblxuICAvKipcbiAgICogU2VtYW50aWMgdmVyc2lvbiBvZiB0aGUgcGx1Z2luXG4gICAqIEBleGFtcGxlICcxLjAuMCdcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgcGlwZWxpbmUgc3RlcCB0aGlzIHBsdWdpbiBjcmVhdGVzXG4gICAqIEBkZWZhdWx0IFBsdWdpblR5cGUuQ09ERV9CVUlMRF9TVEVQXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5UeXBlPzogUGx1Z2luVHlwZTtcblxuICAvKipcbiAgICogQ29kZUJ1aWxkIGNvbXB1dGUgcmVzb3VyY2Ugc2l6ZSB0byB1c2VcbiAgICogQGRlZmF1bHQgQ29tcHV0ZVR5cGUuU01BTExcbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVUeXBlPzogQ29tcHV0ZVR5cGU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gZXhlY3V0aW9uIHRpbWUgaW4gbWludXRlcy5cbiAgICogVXNlZCBhcyBmYWxsYmFjayB3aGVuIHRoZSBwaXBlbGluZSBzdGVwIGRvZXNuJ3Qgc2V0IHRpbWVvdXQuXG4gICAqIEBkZWZhdWx0IDYwIChBV1MgQ29kZUJ1aWxkIGRlZmF1bHQpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGF0IGhhcHBlbnMgd2hlbiB0aGlzIHN0ZXAgZmFpbHMuXG4gICAqIC0gJ2ZhaWwnOiBTdG9wIHRoZSBwaXBlbGluZSAoZGVmYXVsdClcbiAgICogLSAnd2Fybic6IExvZyBhIHdhcm5pbmcgYW5kIGNvbnRpbnVlXG4gICAqIC0gJ2lnbm9yZSc6IFNpbGVudGx5IGNvbnRpbnVlXG4gICAqIEBkZWZhdWx0ICdmYWlsJ1xuICAgKi9cbiAgcmVhZG9ubHkgZmFpbHVyZUJlaGF2aW9yPzogJ2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc7XG5cbiAgLyoqXG4gICAqIFNlY3JldCByZXF1aXJlbWVudHMgZm9yIHRoaXMgcGx1Z2luLlxuICAgKiBEZWNsYXJlcyBuYW1lZCBzZWNyZXRzIHRoZSBwbHVnaW4gZXhwZWN0cyBhdCBidWlsZCB0aW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0cz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyByZXF1aXJlZDogYm9vbGVhbjsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfT47XG5cbiAgLyoqXG4gICAqIERpcmVjdG9yeSBjb250YWluaW5nIHRoZSBwcmltYXJ5IGJ1aWxkIG91dHB1dCBhcnRpZmFjdHNcbiAgICogQGV4YW1wbGUgJ2Rpc3QnXG4gICAqL1xuICByZWFkb25seSBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YSB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkdXJpbmcgcGx1Z2luIGV4ZWN1dGlvblxuICAgKiBLZXlzIHNob3VsZCB1c2UgdGhlIGZvcm1hdCAnYXdzOmNkazp7bmFtZXNwYWNlfTp7a2V5fScgKGFsbCBsb3dlcmNhc2UpXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIERvY2tlcmZpbGUgb3IgRG9ja2VyZmlsZSBjb250ZW50XG4gICAqIFVzZWQgdG8gYnVpbGQgdGhlIGNvbnRhaW5lciBlbnZpcm9ubWVudCBmb3IgdGhpcyBwbHVnaW5cbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbW1hbmRzIHRvIHJ1biBkdXJpbmcgdGhlIGluc3RhbGwgcGhhc2VcbiAgICogVHlwaWNhbGx5IHVzZWQgZm9yIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzXG4gICAqIEBleGFtcGxlIFsnbnBtIGNpJywgJ25wbSBydW4gYnVpbGQnXVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvbW1hbmRzIHRvIHJ1biBkdXJpbmcgdGhlIGJ1aWxkL2V4ZWN1dGlvbiBwaGFzZVxuICAgKiBUaGVzZSBhcmUgdGhlIG1haW4gY29tbWFuZHMgdGhhdCBwZXJmb3JtIHRoZSBwbHVnaW4ncyB3b3JrXG4gICAqIEBleGFtcGxlIFsnbnBtIHRlc3QnLCAnbnBtIHJ1biBkZXBsb3knXVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnRcbiAgICogQGV4YW1wbGUgeyBBUElfVVJMOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLCBMT0dfTEVWRUw6ICdpbmZvJyB9XG4gICAqL1xuICByZWFkb25seSBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgYnVpbGQgYXJndW1lbnRzIHBhc3NlZCB2aWEgLS1idWlsZC1hcmcgYXQgaW1hZ2UgYnVpbGQgdGltZS5cbiAgICogVXNlZCB0byBwYXJhbWV0ZXJpemUgRG9ja2VyZmlsZSBBUkcgdmFsdWVzIHdoZW4gYnVpbGRpbmcgdGhlIHBsdWdpbiBpbWFnZS5cbiAgICogQGV4YW1wbGUgeyBQWVRIT05fVkVSU0lPTjogJzMuMTInLCBOT0RFX0VOVjogJ3Byb2R1Y3Rpb24nIH1cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQXJncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lIG1ldGFkYXRhIGtleXMgdGhlIHBsdWdpbiByZWZlcmVuY2VzIHZpYSBge3sgcGlwZWxpbmUubWV0YWRhdGEuWCB9fWAuXG4gICAqIERlY2xhcmVkIGFzIGEgY29udHJhY3Qg4oCUIHBpcGVsaW5lcyB1c2luZyB0aGlzIHBsdWdpbiBtdXN0IHN1cHBseSBhbGxcbiAgICogbGlzdGVkIGtleXMgdW5sZXNzIHRoZSB0ZW1wbGF0ZSB1c2VzIGB8IGRlZmF1bHQ6ICcuLi4nYC5cbiAgICogQGV4YW1wbGUgWydlbnYnLCAnbmFtZXNwYWNlJywgJ2NsdXN0ZXJOYW1lJ11cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkTWV0YWRhdGE/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGlwZWxpbmUgdmFycyBrZXlzIHRoZSBwbHVnaW4gcmVmZXJlbmNlcyB2aWEgYHt7IHBpcGVsaW5lLnZhcnMuWCB9fWAuXG4gICAqIEBleGFtcGxlIFsnYnJhbmNoJywgJ3NsYWNrQ2hhbm5lbCddXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZFZhcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBtZXRhZGF0YSBrZXlzIGxpc3RlZCBpbiBgcmVxdWlyZWRNZXRhZGF0YWAuXG4gICAqIFVzZWQgYXQgdXBsb2FkIHRpbWUgdG8gdmVyaWZ5IHRoYXQgY29lcmNpb24gZmlsdGVycyAoYHwgbnVtYmVyYCwgYHwgYm9vbGAsXG4gICAqIGB8IGpzb25gKSBtYXRjaCB0aGUgZGVjbGFyZWQgdHlwZSDigJQgZS5nLiBge3sgcGlwZWxpbmUubWV0YWRhdGEuY291bnQgfCBudW1iZXIgfX1gXG4gICAqIHJlcXVpcmVzIGBjb3VudDogJ251bWJlcidgIGhlcmUsIG90aGVyd2lzZSB0aGUgcGx1Z2luIGlzIHJlamVjdGVkLlxuICAgKiBLZXlzIG5vdCBkZWNsYXJlZCBkZWZhdWx0IHRvIGAnc3RyaW5nJ2AuXG4gICAqIEBleGFtcGxlIHsgY291bnQ6ICdudW1iZXInLCBlbmFibGVkOiAnYm9vbCcgfVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGFUeXBlcz86IFJlY29yZDxzdHJpbmcsICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbCcgfCAnanNvbic+
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZWxpbmUvcGx1Z2luLXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBgUGx1Z2luU3BlY2AgZG9tYWluIHR5cGUg4oCUIHRoZSBzaGFwZSBvZiBhIHBsdWdpbidzIGRlY2xhcmVkIGNvbnRyYWN0IGFzXG4gKiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIGFuZCBleGNoYW5nZWQgb3ZlciB0aGUgQVBJLlxuICpcbiAqIEtlcHQgaW4gaXRzIG93biBtb2R1bGUsIGFwYXJ0IGZyb20gdGhlIHN5bnRoLXRpbWUgYXV0aG9yaW5nIHR5cGVzIGluXG4gKiBgc3RlcC10eXBlcy50c2AsIGJlY2F1c2UgdGhvc2UgcmVmZXJlbmNlIENESyB0eXBlcyAoYENvbnN0cnVjdGAsXG4gKiBgSUZpbGVTZXRQcm9kdWNlcmAsIENvZGVCdWlsZCdzIGBDb21wdXRlVHlwZWApIHdoaWxlIHRoaXMgb25lIGlzIHB1cmUgZGF0YS5cbiAqIEFQSSBzZXJ2aWNlcyBjb25zdW1lIGBQbHVnaW5TcGVjYDsgb25seSB0aGUgQ0RLIGVudHJ5IHBvaW50IGNvbnN1bWVzIHRoZSByZXN0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcHV0ZVR5cGUsIFBsdWdpblR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcblxuLyoqXG4gKiBQbHVnaW4gc3BlYyBkZWZpbmluZyBwbHVnaW4gYmVoYXZpb3IgYW5kIHJlcXVpcmVtZW50cy5cbiAqIFRoaXMgaXMgdHlwaWNhbGx5IGxvYWRlZCBmcm9tIGEgcGx1Z2luIHNwZWMgZmlsZSAocGx1Z2luLXNwZWMueWFtbCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU3BlYyB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBsdWdpblxuICAgKiBAZXhhbXBsZSAnbm9kZWpzLWJ1aWxkJ1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBwbHVnaW4gZG9lc1xuICAgKiBAZXhhbXBsZSAnQnVpbGRzIGFuZCB0ZXN0cyBOb2RlLmpzIGFwcGxpY2F0aW9ucydcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXl3b3JkcyBmb3IgcGx1Z2luIGRpc2NvdmVyeSBhbmQgY2F0ZWdvcml6YXRpb25cbiAgICogQGV4YW1wbGUgWydub2RlanMnLCAndHlwZXNjcmlwdCcsICdidWlsZCcsICd0ZXN0J11cbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBsdWdpbiBjYXRlZ29yeSBmb3IgQUktYXNzaXN0ZWQgc2VsZWN0aW9uIGFuZCBvcmdhbml6YXRpb24uXG4gICAqIE9uZSBvZjogbGFuZ3VhZ2UsIHNlY3VyaXR5LCBxdWFsaXR5LCB0ZXN0aW5nLCBkZXBsb3ksIGFydGlmYWN0LFxuICAgKiAgICAgICAgIGluZnJhc3RydWN0dXJlLCBtb25pdG9yaW5nLCBub3RpZmljYXRpb24sIGFpXG4gICAqL1xuICByZWFkb25seSBjYXRlZ29yeT86IHN0cmluZztcblxuICAvKipcbiAgICogU2VtYW50aWMgdmVyc2lvbiBvZiB0aGUgcGx1Z2luXG4gICAqIEBleGFtcGxlICcxLjAuMCdcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgcGlwZWxpbmUgc3RlcCB0aGlzIHBsdWdpbiBjcmVhdGVzXG4gICAqIEBkZWZhdWx0IFBsdWdpblR5cGUuQ09ERV9CVUlMRF9TVEVQXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5UeXBlPzogUGx1Z2luVHlwZTtcblxuICAvKipcbiAgICogQ29kZUJ1aWxkIGNvbXB1dGUgcmVzb3VyY2Ugc2l6ZSB0byB1c2VcbiAgICogQGRlZmF1bHQgQ29tcHV0ZVR5cGUuU01BTExcbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVUeXBlPzogQ29tcHV0ZVR5cGU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gZXhlY3V0aW9uIHRpbWUgaW4gbWludXRlcy5cbiAgICogVXNlZCBhcyBmYWxsYmFjayB3aGVuIHRoZSBwaXBlbGluZSBzdGVwIGRvZXNuJ3Qgc2V0IHRpbWVvdXQuXG4gICAqIEBkZWZhdWx0IDYwIChBV1MgQ29kZUJ1aWxkIGRlZmF1bHQpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGF0IGhhcHBlbnMgd2hlbiB0aGlzIHN0ZXAgZmFpbHMuXG4gICAqIC0gJ2ZhaWwnOiBTdG9wIHRoZSBwaXBlbGluZSAoZGVmYXVsdClcbiAgICogLSAnd2Fybic6IExvZyBhIHdhcm5pbmcgYW5kIGNvbnRpbnVlXG4gICAqIC0gJ2lnbm9yZSc6IFNpbGVudGx5IGNvbnRpbnVlXG4gICAqIEBkZWZhdWx0ICdmYWlsJ1xuICAgKi9cbiAgcmVhZG9ubHkgZmFpbHVyZUJlaGF2aW9yPzogJ2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc7XG5cbiAgLyoqXG4gICAqIFNlY3JldCByZXF1aXJlbWVudHMgZm9yIHRoaXMgcGx1Z2luLlxuICAgKiBEZWNsYXJlcyBuYW1lZCBzZWNyZXRzIHRoZSBwbHVnaW4gZXhwZWN0cyBhdCBidWlsZCB0aW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0cz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyByZXF1aXJlZDogYm9vbGVhbjsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfT47XG5cbiAgLyoqXG4gICAqIERpcmVjdG9yeSBjb250YWluaW5nIHRoZSBwcmltYXJ5IGJ1aWxkIG91dHB1dCBhcnRpZmFjdHNcbiAgICogQGV4YW1wbGUgJ2Rpc3QnXG4gICAqL1xuICByZWFkb25seSBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YSB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkdXJpbmcgcGx1Z2luIGV4ZWN1dGlvblxuICAgKiBLZXlzIHNob3VsZCB1c2UgdGhlIGZvcm1hdCAnYXdzOmNkazp7bmFtZXNwYWNlfTp7a2V5fScgKGFsbCBsb3dlcmNhc2UpXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIERvY2tlcmZpbGUgb3IgRG9ja2VyZmlsZSBjb250ZW50XG4gICAqIFVzZWQgdG8gYnVpbGQgdGhlIGNvbnRhaW5lciBlbnZpcm9ubWVudCBmb3IgdGhpcyBwbHVnaW5cbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbW1hbmRzIHRvIHJ1biBkdXJpbmcgdGhlIGluc3RhbGwgcGhhc2VcbiAgICogVHlwaWNhbGx5IHVzZWQgZm9yIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzXG4gICAqIEBleGFtcGxlIFsnbnBtIGNpJywgJ25wbSBydW4gYnVpbGQnXVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvbW1hbmRzIHRvIHJ1biBkdXJpbmcgdGhlIGJ1aWxkL2V4ZWN1dGlvbiBwaGFzZVxuICAgKiBUaGVzZSBhcmUgdGhlIG1haW4gY29tbWFuZHMgdGhhdCBwZXJmb3JtIHRoZSBwbHVnaW4ncyB3b3JrXG4gICAqIEBleGFtcGxlIFsnbnBtIHRlc3QnLCAnbnBtIHJ1biBkZXBsb3knXVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnRcbiAgICogQGV4YW1wbGUgeyBBUElfVVJMOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLCBMT0dfTEVWRUw6ICdpbmZvJyB9XG4gICAqL1xuICByZWFkb25seSBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgYnVpbGQgYXJndW1lbnRzIHBhc3NlZCB2aWEgLS1idWlsZC1hcmcgYXQgaW1hZ2UgYnVpbGQgdGltZS5cbiAgICogVXNlZCB0byBwYXJhbWV0ZXJpemUgRG9ja2VyZmlsZSBBUkcgdmFsdWVzIHdoZW4gYnVpbGRpbmcgdGhlIHBsdWdpbiBpbWFnZS5cbiAgICogQGV4YW1wbGUgeyBQWVRIT05fVkVSU0lPTjogJzMuMTInLCBOT0RFX0VOVjogJ3Byb2R1Y3Rpb24nIH1cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQXJncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lIG1ldGFkYXRhIGtleXMgdGhlIHBsdWdpbiByZWZlcmVuY2VzIHZpYSBge3sgcGlwZWxpbmUubWV0YWRhdGEuWCB9fWAuXG4gICAqIERlY2xhcmVkIGFzIGEgY29udHJhY3Qg4oCUIHBpcGVsaW5lcyB1c2luZyB0aGlzIHBsdWdpbiBtdXN0IHN1cHBseSBhbGxcbiAgICogbGlzdGVkIGtleXMgdW5sZXNzIHRoZSB0ZW1wbGF0ZSB1c2VzIGB8IGRlZmF1bHQ6ICcuLi4nYC5cbiAgICogQGV4YW1wbGUgWydlbnYnLCAnbmFtZXNwYWNlJywgJ2NsdXN0ZXJOYW1lJ11cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkTWV0YWRhdGE/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGlwZWxpbmUgdmFycyBrZXlzIHRoZSBwbHVnaW4gcmVmZXJlbmNlcyB2aWEgYHt7IHBpcGVsaW5lLnZhcnMuWCB9fWAuXG4gICAqIEBleGFtcGxlIFsnYnJhbmNoJywgJ3NsYWNrQ2hhbm5lbCddXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZFZhcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBtZXRhZGF0YSBrZXlzIGxpc3RlZCBpbiBgcmVxdWlyZWRNZXRhZGF0YWAuXG4gICAqIFVzZWQgYXQgdXBsb2FkIHRpbWUgdG8gdmVyaWZ5IHRoYXQgY29lcmNpb24gZmlsdGVycyAoYHwgbnVtYmVyYCwgYHwgYm9vbGAsXG4gICAqIGB8IGpzb25gKSBtYXRjaCB0aGUgZGVjbGFyZWQgdHlwZSDigJQgZS5nLiBge3sgcGlwZWxpbmUubWV0YWRhdGEuY291bnQgfCBudW1iZXIgfX1gXG4gICAqIHJlcXVpcmVzIGBjb3VudDogJ251bWJlcidgIGhlcmUsIG90aGVyd2lzZSB0aGUgcGx1Z2luIGlzIHJlamVjdGVkLlxuICAgKiBLZXlzIG5vdCBkZWNsYXJlZCBkZWZhdWx0IHRvIGAnc3RyaW5nJ2AuXG4gICAqIEBleGFtcGxlIHsgY291bnQ6ICdudW1iZXInLCBlbmFibGVkOiAnYm9vbCcgfVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGFUeXBlcz86IFJlY29yZDxzdHJpbmcsICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbCcgfCAnanNvbic+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgdmFycyBrZXlzIChzYW1lIHNlbWFudGljcyBhcyBgbWV0YWRhdGFUeXBlc2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFyc1R5cGVzPzogUmVjb3JkPHN0cmluZywgJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sJyB8ICdqc29uJz47XG5cbiAgLyoqXG4gICAqIFNtb2tlLXRlc3QgY29tbWFuZCB0aGUgYnVpbGQgdG9vbGluZyBydW5zIGFnYWluc3QgdGhlIGJ1aWx0IGltYWdlLlxuICAgKiBAZXhhbXBsZSAndHJpdnkgLS12ZXJzaW9uJ1xuICAgKi9cbiAgcmVhZG9ubHkgc21va2VUZXN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTUERYIGxpY2Vuc2UgaWRlbnRpZmllciBvZiB0aGUgcGx1Z2luICh2YWxpZGF0ZWQgYWdhaW5zdCBhbiBhbGxvd2xpc3QgYXQgdXBsb2FkKS5cbiAgICogQGV4YW1wbGUgJ0FwYWNoZS0yLjAnXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlPzogc3RyaW5nO1xuXG4gIC8qKiBSZWxlYXNlIG5vdGVzIGZvciB0aGlzIHZlcnNpb24gKG1hcmtkb3duLCDiiaQgMzIgS0IpLiAqL1xuICByZWFkb25seSBjaGFuZ2Vsb2c/OiBzdHJpbmc7XG5cbiAgLyoqIFByb2plY3QgaG9tZXBhZ2Ug4oCUIGBodHRwczpgIG9ubHksIG5vIFVSTCBzaG9ydGVuZXJzLiAqL1xuICByZWFkb25seSBob21lcGFnZVVybD86IHN0cmluZztcblxuICAvKiogU291cmNlIHJlcG9zaXRvcnkg4oCUIGBodHRwczpgIG9ubHksIG5vIFVSTCBzaG9ydGVuZXJzLiAqL1xuICByZWFkb25seSBzb3VyY2VVcmw/OiBzdHJpbmc7XG5cbiAgLyoqIERvY3VtZW50YXRpb24gc2l0ZSDigJQgYGh0dHBzOmAgb25seSwgbm8gVVJMIHNob3J0ZW5lcnMuICovXG4gIHJlYWRvbmx5IGRvY3VtZW50YXRpb25Vcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjYXRhbG9nIGNhcmQncyBvbmUtbGluZSBzdW1tYXJ5ICjiiaQgMTYwKS4gV2hlbiBhYnNlbnQgaXQgaXMgZGVyaXZlZCBmcm9tXG4gICAqIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGUgZGVzY3JpcHRpb24uXG4gICAqL1xuICByZWFkb25seSBzdW1tYXJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXJhdGVkIGljb24ga2V5IChgZGVwbG95L3BsdWdpbnMvX2ljb25zLzxrZXk+LnN2Z2ApLCBvciBhIGtleSBwbHVzIGFcbiAgICogY29ybmVyIGJhZGdlIGtleSBmb3IgbGFuZ3VhZ2UgdmFyaWFudHMuXG4gICAqIEBleGFtcGxlICd0cml2eSdcbiAgICogQGV4YW1wbGUgeyBrZXk6ICdzbnlrJywgYmFkZ2U6ICdweXRob24nIH1cbiAgICovXG4gIHJlYWRvbmx5IGljb24/OiBzdHJpbmcgfCB7IGtleTogc3RyaW5nOyBiYWRnZT86IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEZWNsYXJlZCBuZXR3b3JrIGFjY2Vzcywgc2hvd24gdG8gY29uc3VtZXJzIGFuZCBjb21wYXJlZCBpbiByZXZpZXcuXG4gICAqIGBlZ3Jlc3NgOiB0aGUgaG9zdG5hbWVzIHRoZSBwbHVnaW4gY29udGFjdHMgKG5vIHNjaGVtZSwgcG9ydCBvciBwYXRoO1xuICAgKiBvbmUgbGVhZGluZyBgKi5gIHdpbGRjYXJkIGFsbG93ZWQpLCBhdCBtb3N0IDUwLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29yaz86IHsgZWdyZXNzPzogc3RyaW5nW10gfTtcbn1cbiJdfQ==
|
|
@@ -2,6 +2,7 @@ import type { ComputeType as CdkComputeType } from 'aws-cdk-lib/aws-codebuild';
|
|
|
2
2
|
import { CodePipeline } from 'aws-cdk-lib/pipelines';
|
|
3
3
|
import { Construct } from 'constructs';
|
|
4
4
|
import { PluginLookup } from './plugin-lookup.js';
|
|
5
|
+
import type { StepManifestRecorder } from './step-manifest-recorder.js';
|
|
5
6
|
import type { StageOptions } from './step-types.js';
|
|
6
7
|
import { type ArtifactManager } from '../core/artifact-manager.js';
|
|
7
8
|
import { UniqueId } from '../core/id-generator.js';
|
|
@@ -30,7 +31,16 @@ export interface StageBuilderProps {
|
|
|
30
31
|
* on every step.
|
|
31
32
|
*/
|
|
32
33
|
readonly pipelineScope: Record<string, unknown>;
|
|
34
|
+
/** Records each step's resolved plugin for the step manifest. */
|
|
35
|
+
readonly stepManifest?: StepManifestRecorder;
|
|
33
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* The name CodePipeline gives a configured stage: the wave id, i.e. the stage's
|
|
39
|
+
* `alias`, else `<stageName>-alias`. This — not `stageName` — is what appears as
|
|
40
|
+
* `detail.stage` in CodePipeline events, so anything that must MATCH those
|
|
41
|
+
* events (the `pb.deploys` DORA tag) has to be built from this one function.
|
|
42
|
+
*/
|
|
43
|
+
export declare function codePipelineStageName(stage: Pick<StageOptions, 'stageName' | 'alias'>): string;
|
|
34
44
|
/**
|
|
35
45
|
* Builds and adds pipeline stages (waves) to a CodePipeline.
|
|
36
46
|
*
|
|
@@ -64,6 +74,7 @@ export declare class StageBuilder {
|
|
|
64
74
|
private readonly artifactManager?;
|
|
65
75
|
private readonly orgId?;
|
|
66
76
|
private readonly pipelineScope;
|
|
77
|
+
private readonly stepManifest?;
|
|
67
78
|
constructor(props: StageBuilderProps);
|
|
68
79
|
/**
|
|
69
80
|
* Resolves a stage's plugin-based step configs into CodeBuild steps
|
|
@@ -3,10 +3,20 @@
|
|
|
3
3
|
import { CodePipeline } from 'aws-cdk-lib/pipelines';
|
|
4
4
|
import { Construct } from 'constructs';
|
|
5
5
|
import { PluginLookup } from './plugin-lookup.js';
|
|
6
|
-
import {
|
|
6
|
+
import {} from '../core/artifact-manager.js';
|
|
7
7
|
import { UniqueId } from '../core/id-generator.js';
|
|
8
8
|
import { merge, resolveFailureBehavior } from '../core/metadata-helpers.js';
|
|
9
9
|
import { createCodeBuildStep } from '../core/pipeline-helpers.js';
|
|
10
|
+
import { assertPluginContract, contractScopeFromTemplateScope, pluginArtifactAlias, pluginStepIdAlias } from '../core/plugin-contract.js';
|
|
11
|
+
/**
|
|
12
|
+
* The name CodePipeline gives a configured stage: the wave id, i.e. the stage's
|
|
13
|
+
* `alias`, else `<stageName>-alias`. This — not `stageName` — is what appears as
|
|
14
|
+
* `detail.stage` in CodePipeline events, so anything that must MATCH those
|
|
15
|
+
* events (the `pb.deploys` DORA tag) has to be built from this one function.
|
|
16
|
+
*/
|
|
17
|
+
export function codePipelineStageName(stage) {
|
|
18
|
+
return stage.alias ?? `${stage.stageName}-alias`;
|
|
19
|
+
}
|
|
10
20
|
/**
|
|
11
21
|
* Builds and adds pipeline stages (waves) to a CodePipeline.
|
|
12
22
|
*
|
|
@@ -40,6 +50,7 @@ export class StageBuilder {
|
|
|
40
50
|
artifactManager;
|
|
41
51
|
orgId;
|
|
42
52
|
pipelineScope;
|
|
53
|
+
stepManifest;
|
|
43
54
|
constructor(props) {
|
|
44
55
|
this.scope = props.scope;
|
|
45
56
|
this.pluginLookup = props.pluginLookup;
|
|
@@ -49,13 +60,14 @@ export class StageBuilder {
|
|
|
49
60
|
this.artifactManager = props.artifactManager;
|
|
50
61
|
this.orgId = props.orgId;
|
|
51
62
|
this.pipelineScope = props.pipelineScope;
|
|
63
|
+
this.stepManifest = props.stepManifest;
|
|
52
64
|
}
|
|
53
65
|
/**
|
|
54
66
|
* Resolves a stage's plugin-based step configs into CodeBuild steps
|
|
55
67
|
* and adds them as a wave to the pipeline.
|
|
56
68
|
*/
|
|
57
69
|
addStage(pipeline, stage) {
|
|
58
|
-
const stageAlias = stage
|
|
70
|
+
const stageAlias = codePipelineStageName(stage);
|
|
59
71
|
const preSteps = stage.steps
|
|
60
72
|
.filter(s => (s.position ?? 'pre') === 'pre')
|
|
61
73
|
.map(s => this.resolveStep(s, stage.stageName, stageAlias));
|
|
@@ -69,6 +81,10 @@ export class StageBuilder {
|
|
|
69
81
|
}
|
|
70
82
|
resolveStep(stepConfig, stageName, stageAlias) {
|
|
71
83
|
const plugin = this.pluginLookup.plugin(stepConfig.plugin);
|
|
84
|
+
// Contract: the pipeline must supply the plugin's required
|
|
85
|
+
// metadata/vars with the declared types. The API refuses such a pipeline
|
|
86
|
+
// at create/update; this stops one that reached synth another way.
|
|
87
|
+
assertPluginContract(plugin, contractScopeFromTemplateScope(this.pipelineScope), `${stageName}/${pluginStepIdAlias(stepConfig.plugin)}`);
|
|
72
88
|
// Per-step plugin config lives on the plugin reference (`plugin.metadata` —
|
|
73
89
|
// e.g. JAVA_VERSION/KOTLIN_VERSION/computetype overrides). pluginLookup.plugin()
|
|
74
90
|
// returns the resolved CATALOG plugin and drops the reference metadata in the
|
|
@@ -77,15 +93,16 @@ export class StageBuilder {
|
|
|
77
93
|
// Order (last wins): global < plugin-ref metadata < step-level metadata.
|
|
78
94
|
const stepMetadata = merge(this.globalMetadata, stepConfig.plugin.metadata ?? {}, stepConfig.metadata ?? {});
|
|
79
95
|
// TWO different identities, deliberately kept apart:
|
|
80
|
-
// - `stepIdAlias` names the CDK construct.
|
|
81
|
-
// (`alias ?? name`), because changing it
|
|
82
|
-
// logical id and CloudFormation would
|
|
83
|
-
// project on the next deploy — for no
|
|
96
|
+
// - `stepIdAlias` names the CDK construct. For an unqualified reference
|
|
97
|
+
// it stays as it always was (`alias ?? name`), because changing it
|
|
98
|
+
// renames the CodeBuild project's logical id and CloudFormation would
|
|
99
|
+
// REPLACE every unaliased step's project on the next deploy — for no
|
|
100
|
+
// benefit. A `publisher` reference adds the publisher.
|
|
84
101
|
// - `pluginAlias` is the ARTIFACT-KEY segment and must follow the one rule
|
|
85
|
-
// every key consumer uses (`pluginArtifactAlias`).
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
const stepIdAlias = stepConfig.plugin
|
|
102
|
+
// every key consumer uses (`pluginArtifactAlias`). Reusing the construct
|
|
103
|
+
// value would register `…:nodejs-build:dist` for an unaliased step while
|
|
104
|
+
// the UI asks for `…:nodejs-build-alias:dist`, and synth would fail.
|
|
105
|
+
const stepIdAlias = pluginStepIdAlias(stepConfig.plugin);
|
|
89
106
|
const pluginAlias = pluginArtifactAlias(stepConfig.plugin);
|
|
90
107
|
if (stepConfig.inputArtifact && !this.artifactManager) {
|
|
91
108
|
throw new Error(`Step "${stepIdAlias}" requires inputArtifact but no artifactManager is configured.`);
|
|
@@ -102,7 +119,7 @@ export class StageBuilder {
|
|
|
102
119
|
this.artifactManager.getOutput(artifact),
|
|
103
120
|
]))
|
|
104
121
|
: undefined;
|
|
105
|
-
|
|
122
|
+
const step = createCodeBuildStep({
|
|
106
123
|
id: this.uniqueId.generate(`stage:${stageAlias}:${stepIdAlias}`),
|
|
107
124
|
uniqueId: this.uniqueId,
|
|
108
125
|
plugin,
|
|
@@ -127,6 +144,8 @@ export class StageBuilder {
|
|
|
127
144
|
orgId: this.orgId,
|
|
128
145
|
pipelineScope: this.pipelineScope,
|
|
129
146
|
});
|
|
147
|
+
this.stepManifest?.record(step, plugin);
|
|
148
|
+
return step;
|
|
130
149
|
}
|
|
131
150
|
/**
|
|
132
151
|
* Resolves and adds multiple stages as waves to the pipeline, in order.
|
|
@@ -137,4 +156,4 @@ export class StageBuilder {
|
|
|
137
156
|
}
|
|
138
157
|
}
|
|
139
158
|
}
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGFnZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBRSxtQkFBbUIsRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBb0NsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNOLEtBQUssQ0FBWTtJQUNqQixZQUFZLENBQWU7SUFDM0IsUUFBUSxDQUFXO0lBQ25CLGNBQWMsQ0FBZTtJQUM3QixrQkFBa0IsQ0FBa0I7SUFDcEMsZUFBZSxDQUFtQjtJQUNsQyxLQUFLLENBQVU7SUFDZixhQUFhLENBQTBCO0lBRXhELFlBQVksS0FBd0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtC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VUFBVSxDQUFDLEdBQUc7WUFDbkIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxTQUFTO1lBQzFELG9HQUFvRztZQUNwRyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDOUcsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsUUFBc0IsRUFBRSxNQUFzQjtRQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSBhcyBDZGtDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgQ29kZVBpcGVsaW5lIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGx1Z2luTG9va3VwIH0gZnJvbSAnLi9wbHVnaW4tbG9va3VwLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zIH0gZnJvbSAnLi9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB7IHBsdWdpbkFydGlmYWN0QWxpYXMsIHR5cGUgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHsgbWVyZ2UsIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IgfSBmcm9tICcuLi9jb3JlL21ldGFkYXRhLWhlbHBlcnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29kZUJ1aWxkU3RlcCB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtaGVscGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGFEYXRhVHlwZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtdHlwZXMuanMnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFN0YWdlQnVpbGRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlQnVpbGRlclByb3BzIHtcbiAgLyoqIENESyBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGNyZWF0aW5nIGNoaWxkIGNvbnN0cnVjdHMgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKiogUGx1Z2luIGxvb2t1cCBzZXJ2aWNlIGZvciByZXNvbHZpbmcgcGx1Z2luIHJlZmVyZW5jZXMgdG8gQ0RLIGNvbnN0cnVjdHMgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG5cbiAgLyoqIFVuaXF1ZSBJRCBnZW5lcmF0b3IgZm9yIGNyZWF0aW5nIGRldGVybWluaXN0aWMgY29uc3RydWN0IElEcyAqL1xuICByZWFkb25seSB1bmlxdWVJZDogVW5pcXVlSWQ7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHN0YWdlIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqIERlZmF1bHQgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSBmb3Igc3RlcHMgdGhhdCBkb24ndCBzcGVjaWZ5IG9uZSAqL1xuICByZWFkb25seSBkZWZhdWx0Q29tcHV0ZVR5cGU/OiBDZGtDb21wdXRlVHlwZTtcblxuICAvKiogQXJ0aWZhY3QgbWFuYWdlciBmb3IgcmVzb2x2aW5nIGlucHV0IGFydGlmYWN0IGtleXMgdG8gRmlsZVNldHMgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIHNjb3BlIHVzZWQgdG8gcmVzb2x2ZSBge3sgcGlwZWxpbmUuKiB9fWAgdGVtcGxhdGUgdG9rZW5zXG4gICAqIGluc2lkZSBwbHVnaW4gc3BlY3MuIFJlcXVpcmVkIOKAlCBwYXNzZWQgdGhyb3VnaCB0byBgY3JlYXRlQ29kZUJ1aWxkU3RlcGBcbiAgICogb24gZXZlcnkgc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgYWRkcyBwaXBlbGluZSBzdGFnZXMgKHdhdmVzKSB0byBhIENvZGVQaXBlbGluZS5cbiAqXG4gKiBFYWNoIHN0YWdlIGlzIHJlc29sdmVkIGZyb20gaGlnaC1sZXZlbCBjb25maWd1cmF0aW9uIChwbHVnaW4gbmFtZXMpXG4gKiBpbnRvIENESyBDb2RlQnVpbGQgc3RlcHMgdmlhIFBsdWdpbkxvb2t1cCwgdGhlbiBhZGRlZCBhcyBhIHdhdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0YWdlQnVpbGRlciA9IG5ldyBTdGFnZUJ1aWxkZXIoe1xuICogICBzY29wZTogdGhpcyxcbiAqICAgcGx1Z2luTG9va3VwLFxuICogICB1bmlxdWVJZCxcbiAqICAgZ2xvYmFsTWV0YWRhdGE6IG1lcmdlZE1ldGFkYXRhLFxuICogfSk7XG4gKiBzdGFnZUJ1aWxkZXIuYWRkU3RhZ2UocGlwZWxpbmUsIHtcbiAqICAgc3RhZ2VOYW1lOiAnSW50ZWdyYXRpb24gVGVzdHMnLFxuICogICBhbGlhczogJ2ludGVncmF0aW9uJyxcbiAqICAgc3RlcHM6IFtcbiAqICAgICB7IHBsdWdpbjogeyBuYW1lOiAnamVzdC1pbnRlZ3JhdGlvbicgfSB9LFxuICogICAgIHsgcGx1Z2luOiB7IG5hbWU6ICdlMmUtdGVzdHMnLCBhbGlhczogJ2N5cHJlc3MnIH0gfSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdGFnZUJ1aWxkZXJQcm9wcykge1xuICAgIHRoaXMuc2NvcGUgPSBwcm9wcy5zY29wZTtcbiAgICB0aGlzLnBsdWdpbkxvb2t1cCA9IHByb3BzLnBsdWdpbkxvb2t1cDtcbiAgICB0aGlzLnVuaXF1ZUlkID0gcHJvcHMudW5pcXVlSWQ7XG4gICAgdGhpcy5nbG9iYWxNZXRhZGF0YSA9IHByb3BzLmdsb2JhbE1ldGFkYXRhO1xuICAgIHRoaXMuZGVmYXVsdENvbXB1dGVUeXBlID0gcHJvcHMuZGVmYXVsdENvbXB1dGVUeXBlO1xuICAgIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyID0gcHJvcHMuYXJ0aWZhY3RNYW5hZ2VyO1xuICAgIHRoaXMub3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLnBpcGVsaW5lU2NvcGUgPSBwcm9wcy5waXBlbGluZVNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgc3RhZ2UncyBwbHVnaW4tYmFzZWQgc3RlcCBjb25maWdzIGludG8gQ29kZUJ1aWxkIHN0ZXBzXG4gICAqIGFuZCBhZGRzIHRoZW0gYXMgYSB3YXZlIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGFkZFN0YWdlKHBpcGVsaW5lOiBDb2RlUGlwZWxpbmUsIHN0YWdlOiBTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZUFsaWFzID0gc3RhZ2UuYWxpYXMgPz8gYCR7c3RhZ2Uuc3RhZ2VOYW1lfS1hbGlhc2A7XG5cbiAgICBjb25zdCBwcmVTdGVwcyA9IHN0YWdlLnN0ZXBzXG4gICAgICAuZmlsdGVyKHMgPT4gKHMucG9zaXRpb24gPz8gJ3ByZScpID09PSAncHJlJylcbiAgICAgIC5tYXAocyA9PiB0aGlzLnJlc29sdmVTdGVwKHMsIHN0YWdlLnN0YWdlTmFtZSwgc3RhZ2VBbGlhcykpO1xuICAgIGNvbnN0IHBvc3RTdGVwcyA9IHN0YWdlLnN0ZXBzXG4gICAgICAuZmlsdGVyKHMgPT4gcy5wb3NpdGlvbiA9PT0gJ3Bvc3QnKVxuICAgICAgLm1hcChzID0+IHRoaXMucmVzb2x2ZVN0ZXAocywgc3RhZ2Uuc3RhZ2VOYW1lLCBzdGFnZUFsaWFzKSk7XG5cbiAgICBwaXBlbGluZS5hZGRXYXZlKHN0YWdlQWxpYXMsIHtcbiAgICAgIC4uLihwcmVTdGVwcy5sZW5ndGggPiAwICYmIHsgcHJlOiBwcmVTdGVwcyB9KSxcbiAgICAgIC4uLihwb3N0U3RlcHMubGVuZ3RoID4gMCAmJiB7IHBvc3Q6IHBvc3RTdGVwcyB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVN0ZXAoc3RlcENvbmZpZzogU3RhZ2VPcHRpb25zWydzdGVwcyddW251bWJlcl0sIHN0YWdlTmFtZTogc3RyaW5nLCBzdGFnZUFsaWFzOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwbHVnaW4gPSB0aGlzLnBsdWdpbkxvb2t1cC5wbHVnaW4oc3RlcENvbmZpZy5wbHVnaW4pO1xuICAgIC8vIFBlci1zdGVwIHBsdWdpbiBjb25maWcgbGl2ZXMgb24gdGhlIHBsdWdpbiByZWZlcmVuY2UgKGBwbHVnaW4ubWV0YWRhdGFgIOKAlFxuICAgIC8vIGUuZy4gSkFWQV9WRVJTSU9OL0tPVExJTl9WRVJTSU9OL2NvbXB1dGV0eXBlIG92ZXJyaWRlcykuIHBsdWdpbkxvb2t1cC5wbHVnaW4oKVxuICAgIC8vIHJldHVybnMgdGhlIHJlc29sdmVkIENBVEFMT0cgcGx1Z2luIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIG1ldGFkYXRhIGluIHRoZVxuICAgIC8vIHByZS1yZXNvbHZlZCBwYXRoLCBzbyBtZXJnZSBpdCBoZXJlIHRvbyDigJQgb3RoZXJ3aXNlIHBlci1zdGVwIG92ZXJyaWRlcyBhcmVcbiAgICAvLyBzaWxlbnRseSBpZ25vcmVkIGFuZCB0aGUgYnVpbGQgZmFsbHMgYmFjayB0byBwbHVnaW4gZGVmYXVsdHMuXG4gICAgLy8gT3JkZXIgKGxhc3Qgd2lucyk6IGdsb2JhbCA8IHBsdWdpbi1yZWYgbWV0YWRhdGEgPCBzdGVwLWxldmVsIG1ldGFkYXRhLlxuICAgIGNvbnN0IHN0ZXBNZXRhZGF0YSA9IG1lcmdlKHRoaXMuZ2xvYmFsTWV0YWRhdGEsIHN0ZXBDb25maWcucGx1Z2luLm1ldGFkYXRhID8/IHt9LCBzdGVwQ29uZmlnLm1ldGFkYXRhID8/IHt9KTtcbiAgICAvLyBUV08gZGlmZmVyZW50IGlkZW50aXRpZXMsIGRlbGliZXJhdGVseSBrZXB0IGFwYXJ0OlxuICAgIC8vICAtIGBzdGVwSWRBbGlhc2AgbmFtZXMgdGhlIENESyBjb25zdHJ1Y3QuIEl0IHN0YXlzIGFzIGl0IGFsd2F5cyB3YXNcbiAgICAvLyAgICAoYGFsaWFzID8/IG5hbWVgKSwgYmVjYXVzZSBjaGFuZ2luZyBpdCByZW5hbWVzIHRoZSBDb2RlQnVpbGQgcHJvamVjdCdzXG4gICAgLy8gICAgbG9naWNhbCBpZCBhbmQgQ2xvdWRGb3JtYXRpb24gd291bGQgUkVQTEFDRSBldmVyeSB1bmFsaWFzZWQgc3RlcCdzXG4gICAgLy8gICAgcHJvamVjdCBvbiB0aGUgbmV4dCBkZXBsb3kg4oCUIGZvciBubyBiZW5lZml0LlxuICAgIC8vICAtIGBwbHVnaW5BbGlhc2AgaXMgdGhlIEFSVElGQUNULUtFWSBzZWdtZW50IGFuZCBtdXN0IGZvbGxvdyB0aGUgb25lIHJ1bGVcbiAgICAvLyAgICBldmVyeSBrZXkgY29uc3VtZXIgdXNlcyAoYHBsdWdpbkFydGlmYWN0QWxpYXNgKS4gSXQgdXNlZCB0byByZXVzZSB0aGVcbiAgICAvLyAgICBjb25zdHJ1Y3QgdmFsdWUsIHNvIGFuIHVuYWxpYXNlZCBzdGVwIHJlZ2lzdGVyZWQgYOKApjpub2RlanMtYnVpbGQ6ZGlzdGBcbiAgICAvLyAgICB3aGlsZSB0aGUgVUkgYXNrZWQgZm9yIGDigKY6bm9kZWpzLWJ1aWxkLWFsaWFzOmRpc3RgIGFuZCBzeW50aCBmYWlsZWQuXG4gICAgY29uc3Qgc3RlcElkQWxpYXMgPSBzdGVwQ29uZmlnLnBsdWdpbi5hbGlhcyA/PyBzdGVwQ29uZmlnLnBsdWdpbi5uYW1lO1xuICAgIGNvbnN0IHBsdWdpbkFsaWFzID0gcGx1Z2luQXJ0aWZhY3RBbGlhcyhzdGVwQ29uZmlnLnBsdWdpbik7XG5cbiAgICBpZiAoc3RlcENvbmZpZy5pbnB1dEFydGlmYWN0ICYmICF0aGlzLmFydGlmYWN0TWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3RlcCBcIiR7c3RlcElkQWxpYXN9XCIgcmVxdWlyZXMgaW5wdXRBcnRpZmFjdCBidXQgbm8gYXJ0aWZhY3RNYW5hZ2VyIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGVwQ29uZmlnLmFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cz8ubGVuZ3RoICYmICF0aGlzLmFydGlmYWN0TWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3RlcCBcIiR7c3RlcElkQWxpYXN9XCIgcmVxdWlyZXMgYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzIGJ1dCBubyBhcnRpZmFjdE1hbmFnZXIgaXMgY29uZmlndXJlZC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdCAmJiB0aGlzLmFydGlmYWN0TWFuYWdlclxuICAgICAgPyB0aGlzLmFydGlmYWN0TWFuYWdlci5nZXRPdXRwdXQoc3RlcENvbmZpZy5pbnB1dEFydGlmYWN0KVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBhZGRpdGlvbmFsSW5wdXRzID0gc3RlcENvbmZpZy5hZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHM/Lmxlbmd0aCAmJiB0aGlzLmFydGlmYWN0TWFuYWdlclxuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHN0ZXBDb25maWcuYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzLm1hcCgoeyBhcnRpZmFjdCwgZGlyZWN0b3J5IH0pID0+IFtcbiAgICAgICAgICBkaXJlY3RvcnkgfHwgYXJ0aWZhY3Qub3V0cHV0RGlyZWN0b3J5LFxuICAgICAgICAgIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyIS5nZXRPdXRwdXQoYXJ0aWZhY3QpLFxuICAgICAgICBdKSxcbiAgICAgIClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgaWQ6IHRoaXMudW5pcXVlSWQuZ2VuZXJhdGUoYHN0YWdlOiR7c3RhZ2VBbGlhc306JHtzdGVwSWRBbGlhc31gKSxcbiAgICAgIHVuaXF1ZUlkOiB0aGlzLnVuaXF1ZUlkLFxuICAgICAgcGx1Z2luLFxuICAgICAgbWV0YWRhdGE6IHN0ZXBNZXRhZGF0YSxcbiAgICAgIG5ldHdvcms6IHN0ZXBDb25maWcubmV0d29yayxcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxuICAgICAgZGVmYXVsdENvbXB1dGVUeXBlOiB0aGlzLmRlZmF1bHRDb21wdXRlVHlwZSxcbiAgICAgIGlucHV0LFxuICAgICAgYWRkaXRpb25hbElucHV0cyxcbiAgICAgIGFydGlmYWN0TWFuYWdlcjogdGhpcy5hcnRpZmFjdE1hbmFnZXIsXG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUFsaWFzLFxuICAgICAgcGx1Z2luQWxpYXMsXG4gICAgICBwcmVJbnN0YWxsQ29tbWFuZHM6IHN0ZXBDb25maWcucHJlSW5zdGFsbENvbW1hbmRzLFxuICAgICAgcG9zdEluc3RhbGxDb21tYW5kczogc3RlcENvbmZpZy5wb3N0SW5zdGFsbENvbW1hbmRzLFxuICAgICAgcHJlQ29tbWFuZHM6IHN0ZXBDb25maWcucHJlQ29tbWFuZHMsXG4gICAgICBwb3N0Q29tbWFuZHM6IHN0ZXBDb25maWcucG9zdENvbW1hbmRzLFxuICAgICAgZW52OiBzdGVwQ29uZmlnLmVudixcbiAgICAgIHRpbWVvdXQ6IHN0ZXBDb25maWcudGltZW91dCA/PyBwbHVnaW4udGltZW91dCA/PyB1bmRlZmluZWQsXG4gICAgICAvLyBBIHNjYW4vc2VjdXJpdHktY2F0ZWdvcnkgcGx1Z2luIGNhbiBuZXZlciBiZSBkb3duZ3JhZGVkIGZyb20gJ2ZhaWwnIOKAlCBzZWUgcmVzb2x2ZUZhaWx1cmVCZWhhdmlvci5cbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogcmVzb2x2ZUZhaWx1cmVCZWhhdmlvcihwbHVnaW4uY2F0ZWdvcnksIHN0ZXBDb25maWcuZmFpbHVyZUJlaGF2aW9yID8/IHBsdWdpbi5mYWlsdXJlQmVoYXZpb3IpLFxuICAgICAgb3JnSWQ6IHRoaXMub3JnSWQsXG4gICAgICBwaXBlbGluZVNjb3BlOiB0aGlzLnBpcGVsaW5lU2NvcGUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGFkZHMgbXVsdGlwbGUgc3RhZ2VzIGFzIHdhdmVzIHRvIHRoZSBwaXBlbGluZSwgaW4gb3JkZXIuXG4gICAqL1xuICBhZGRTdGFnZXMocGlwZWxpbmU6IENvZGVQaXBlbGluZSwgc3RhZ2VzOiBTdGFnZU9wdGlvbnNbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICB0aGlzLmFkZFN0YWdlKHBpcGVsaW5lLCBzdGFnZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGFnZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSw4QkFBOEIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBc0MxSTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFnRDtJQUNwRixPQUFPLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ04sS0FBSyxDQUFZO0lBQ2pCLFlBQVksQ0FBZTtJQUMzQixRQUFRLENBQVc7SUFDbkIsY0FBYyxDQUFlO0lBQzdCLGtCQUFrQixDQUFrQjtJQUNwQyxlQUFlLENBQW1CO0lBQ2xDLEtBQUssQ0FBVTtJQUNmLGFBQWEsQ0FBMEI7SUFDdkMsWUFBWSxDQUF3QjtJQUVyRCxZQUFZLEtBQXdCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdB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RiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IENvbXB1dGVUeXBlIGFzIENka0NvbXB1dGVUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGVwTWFuaWZlc3RSZWNvcmRlciB9IGZyb20gJy4vc3RlcC1tYW5pZmVzdC1yZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcy5qcyc7XG5pbXBvcnQgeyB0eXBlIEFydGlmYWN0TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvYXJ0aWZhY3QtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcbmltcG9ydCB7IG1lcmdlLCByZXNvbHZlRmFpbHVyZUJlaGF2aW9yIH0gZnJvbSAnLi4vY29yZS9tZXRhZGF0YS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUNvZGVCdWlsZFN0ZXAgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLWhlbHBlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRhRGF0YVR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB7IGFzc2VydFBsdWdpbkNvbnRyYWN0LCBjb250cmFjdFNjb3BlRnJvbVRlbXBsYXRlU2NvcGUsIHBsdWdpbkFydGlmYWN0QWxpYXMsIHBsdWdpblN0ZXBJZEFsaWFzIH0gZnJvbSAnLi4vY29yZS9wbHVnaW4tY29udHJhY3QuanMnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFN0YWdlQnVpbGRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlQnVpbGRlclByb3BzIHtcbiAgLyoqIENESyBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGNyZWF0aW5nIGNoaWxkIGNvbnN0cnVjdHMgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKiogUGx1Z2luIGxvb2t1cCBzZXJ2aWNlIGZvciByZXNvbHZpbmcgcGx1Z2luIHJlZmVyZW5jZXMgdG8gQ0RLIGNvbnN0cnVjdHMgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG5cbiAgLyoqIFVuaXF1ZSBJRCBnZW5lcmF0b3IgZm9yIGNyZWF0aW5nIGRldGVybWluaXN0aWMgY29uc3RydWN0IElEcyAqL1xuICByZWFkb25seSB1bmlxdWVJZDogVW5pcXVlSWQ7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHN0YWdlIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqIERlZmF1bHQgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSBmb3Igc3RlcHMgdGhhdCBkb24ndCBzcGVjaWZ5IG9uZSAqL1xuICByZWFkb25seSBkZWZhdWx0Q29tcHV0ZVR5cGU/OiBDZGtDb21wdXRlVHlwZTtcblxuICAvKiogQXJ0aWZhY3QgbWFuYWdlciBmb3IgcmVzb2x2aW5nIGlucHV0IGFydGlmYWN0IGtleXMgdG8gRmlsZVNldHMgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIHNjb3BlIHVzZWQgdG8gcmVzb2x2ZSBge3sgcGlwZWxpbmUuKiB9fWAgdGVtcGxhdGUgdG9rZW5zXG4gICAqIGluc2lkZSBwbHVnaW4gc3BlY3MuIFJlcXVpcmVkIOKAlCBwYXNzZWQgdGhyb3VnaCB0byBgY3JlYXRlQ29kZUJ1aWxkU3RlcGBcbiAgICogb24gZXZlcnkgc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBSZWNvcmRzIGVhY2ggc3RlcCdzIHJlc29sdmVkIHBsdWdpbiBmb3IgdGhlIHN0ZXAgbWFuaWZlc3QuICovXG4gIHJlYWRvbmx5IHN0ZXBNYW5pZmVzdD86IFN0ZXBNYW5pZmVzdFJlY29yZGVyO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lIENvZGVQaXBlbGluZSBnaXZlcyBhIGNvbmZpZ3VyZWQgc3RhZ2U6IHRoZSB3YXZlIGlkLCBpLmUuIHRoZSBzdGFnZSdzXG4gKiBgYWxpYXNgLCBlbHNlIGA8c3RhZ2VOYW1lPi1hbGlhc2AuIFRoaXMg4oCUIG5vdCBgc3RhZ2VOYW1lYCDigJQgaXMgd2hhdCBhcHBlYXJzIGFzXG4gKiBgZGV0YWlsLnN0YWdlYCBpbiBDb2RlUGlwZWxpbmUgZXZlbnRzLCBzbyBhbnl0aGluZyB0aGF0IG11c3QgTUFUQ0ggdGhvc2VcbiAqIGV2ZW50cyAodGhlIGBwYi5kZXBsb3lzYCBET1JBIHRhZykgaGFzIHRvIGJlIGJ1aWx0IGZyb20gdGhpcyBvbmUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2RlUGlwZWxpbmVTdGFnZU5hbWUoc3RhZ2U6IFBpY2s8U3RhZ2VPcHRpb25zLCAnc3RhZ2VOYW1lJyB8ICdhbGlhcyc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0YWdlLmFsaWFzID8/IGAke3N0YWdlLnN0YWdlTmFtZX0tYWxpYXNgO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgYWRkcyBwaXBlbGluZSBzdGFnZXMgKHdhdmVzKSB0byBhIENvZGVQaXBlbGluZS5cbiAqXG4gKiBFYWNoIHN0YWdlIGlzIHJlc29sdmVkIGZyb20gaGlnaC1sZXZlbCBjb25maWd1cmF0aW9uIChwbHVnaW4gbmFtZXMpXG4gKiBpbnRvIENESyBDb2RlQnVpbGQgc3RlcHMgdmlhIFBsdWdpbkxvb2t1cCwgdGhlbiBhZGRlZCBhcyBhIHdhdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0YWdlQnVpbGRlciA9IG5ldyBTdGFnZUJ1aWxkZXIoe1xuICogICBzY29wZTogdGhpcyxcbiAqICAgcGx1Z2luTG9va3VwLFxuICogICB1bmlxdWVJZCxcbiAqICAgZ2xvYmFsTWV0YWRhdGE6IG1lcmdlZE1ldGFkYXRhLFxuICogfSk7XG4gKiBzdGFnZUJ1aWxkZXIuYWRkU3RhZ2UocGlwZWxpbmUsIHtcbiAqICAgc3RhZ2VOYW1lOiAnSW50ZWdyYXRpb24gVGVzdHMnLFxuICogICBhbGlhczogJ2ludGVncmF0aW9uJyxcbiAqICAgc3RlcHM6IFtcbiAqICAgICB7IHBsdWdpbjogeyBuYW1lOiAnamVzdC1pbnRlZ3JhdGlvbicgfSB9LFxuICogICAgIHsgcGx1Z2luOiB7IG5hbWU6ICdlMmUtdGVzdHMnLCBhbGlhczogJ2N5cHJlc3MnIH0gfSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwcml2YXRlIHJlYWRvbmx5IHN0ZXBNYW5pZmVzdD86IFN0ZXBNYW5pZmVzdFJlY29yZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdGFnZUJ1aWxkZXJQcm9wcykge1xuICAgIHRoaXMuc2NvcGUgPSBwcm9wcy5zY29wZTtcbiAgICB0aGlzLnBsdWdpbkxvb2t1cCA9IHByb3BzLnBsdWdpbkxvb2t1cDtcbiAgICB0aGlzLnVuaXF1ZUlkID0gcHJvcHMudW5pcXVlSWQ7XG4gICAgdGhpcy5nbG9iYWxNZXRhZGF0YSA9IHByb3BzLmdsb2JhbE1ldGFkYXRhO1xuICAgIHRoaXMuZGVmYXVsdENvbXB1dGVUeXBlID0gcHJvcHMuZGVmYXVsdENvbXB1dGVUeXBlO1xuICAgIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyID0gcHJvcHMuYXJ0aWZhY3RNYW5hZ2VyO1xuICAgIHRoaXMub3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLnBpcGVsaW5lU2NvcGUgPSBwcm9wcy5waXBlbGluZVNjb3BlO1xuICAgIHRoaXMuc3RlcE1hbmlmZXN0ID0gcHJvcHMuc3RlcE1hbmlmZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgc3RhZ2UncyBwbHVnaW4tYmFzZWQgc3RlcCBjb25maWdzIGludG8gQ29kZUJ1aWxkIHN0ZXBzXG4gICAqIGFuZCBhZGRzIHRoZW0gYXMgYSB3YXZlIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGFkZFN0YWdlKHBpcGVsaW5lOiBDb2RlUGlwZWxpbmUsIHN0YWdlOiBTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZUFsaWFzID0gY29kZVBpcGVsaW5lU3RhZ2VOYW1lKHN0YWdlKTtcblxuICAgIGNvbnN0IHByZVN0ZXBzID0gc3RhZ2Uuc3RlcHNcbiAgICAgIC5maWx0ZXIocyA9PiAocy5wb3NpdGlvbiA/PyAncHJlJykgPT09ICdwcmUnKVxuICAgICAgLm1hcChzID0+IHRoaXMucmVzb2x2ZVN0ZXAocywgc3RhZ2Uuc3RhZ2VOYW1lLCBzdGFnZUFsaWFzKSk7XG4gICAgY29uc3QgcG9zdFN0ZXBzID0gc3RhZ2Uuc3RlcHNcbiAgICAgIC5maWx0ZXIocyA9PiBzLnBvc2l0aW9uID09PSAncG9zdCcpXG4gICAgICAubWFwKHMgPT4gdGhpcy5yZXNvbHZlU3RlcChzLCBzdGFnZS5zdGFnZU5hbWUsIHN0YWdlQWxpYXMpKTtcblxuICAgIHBpcGVsaW5lLmFkZFdhdmUoc3RhZ2VBbGlhcywge1xuICAgICAgLi4uKHByZVN0ZXBzLmxlbmd0aCA+IDAgJiYgeyBwcmU6IHByZVN0ZXBzIH0pLFxuICAgICAgLi4uKHBvc3RTdGVwcy5sZW5ndGggPiAwICYmIHsgcG9zdDogcG9zdFN0ZXBzIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU3RlcChzdGVwQ29uZmlnOiBTdGFnZU9wdGlvbnNbJ3N0ZXBzJ11bbnVtYmVyXSwgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlQWxpYXM6IHN0cmluZykge1xuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMucGx1Z2luTG9va3VwLnBsdWdpbihzdGVwQ29uZmlnLnBsdWdpbik7XG4gICAgLy8gQ29udHJhY3Q6IHRoZSBwaXBlbGluZSBtdXN0IHN1cHBseSB0aGUgcGx1Z2luJ3MgcmVxdWlyZWRcbiAgICAvLyBtZXRhZGF0YS92YXJzIHdpdGggdGhlIGRlY2xhcmVkIHR5cGVzLiBUaGUgQVBJIHJlZnVzZXMgc3VjaCBhIHBpcGVsaW5lXG4gICAgLy8gYXQgY3JlYXRlL3VwZGF0ZTsgdGhpcyBzdG9wcyBvbmUgdGhhdCByZWFjaGVkIHN5bnRoIGFub3RoZXIgd2F5LlxuICAgIGFzc2VydFBsdWdpbkNvbnRyYWN0KHBsdWdpbiwgY29udHJhY3RTY29wZUZyb21UZW1wbGF0ZVNjb3BlKHRoaXMucGlwZWxpbmVTY29wZSksXG4gICAgICBgJHtzdGFnZU5hbWV9LyR7cGx1Z2luU3RlcElkQWxpYXMoc3RlcENvbmZpZy5wbHVnaW4pfWApO1xuICAgIC8vIFBlci1zdGVwIHBsdWdpbiBjb25maWcgbGl2ZXMgb24gdGhlIHBsdWdpbiByZWZlcmVuY2UgKGBwbHVnaW4ubWV0YWRhdGFgIOKAlFxuICAgIC8vIGUuZy4gSkFWQV9WRVJTSU9OL0tPVExJTl9WRVJTSU9OL2NvbXB1dGV0eXBlIG92ZXJyaWRlcykuIHBsdWdpbkxvb2t1cC5wbHVnaW4oKVxuICAgIC8vIHJldHVybnMgdGhlIHJlc29sdmVkIENBVEFMT0cgcGx1Z2luIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIG1ldGFkYXRhIGluIHRoZVxuICAgIC8vIHByZS1yZXNvbHZlZCBwYXRoLCBzbyBtZXJnZSBpdCBoZXJlIHRvbyDigJQgb3RoZXJ3aXNlIHBlci1zdGVwIG92ZXJyaWRlcyBhcmVcbiAgICAvLyBzaWxlbnRseSBpZ25vcmVkIGFuZCB0aGUgYnVpbGQgZmFsbHMgYmFjayB0byBwbHVnaW4gZGVmYXVsdHMuXG4gICAgLy8gT3JkZXIgKGxhc3Qgd2lucyk6IGdsb2JhbCA8IHBsdWdpbi1yZWYgbWV0YWRhdGEgPCBzdGVwLWxldmVsIG1ldGFkYXRhLlxuICAgIGNvbnN0IHN0ZXBNZXRhZGF0YSA9IG1lcmdlKHRoaXMuZ2xvYmFsTWV0YWRhdGEsIHN0ZXBDb25maWcucGx1Z2luLm1ldGFkYXRhID8/IHt9LCBzdGVwQ29uZmlnLm1ldGFkYXRhID8/IHt9KTtcbiAgICAvLyBUV08gZGlmZmVyZW50IGlkZW50aXRpZXMsIGRlbGliZXJhdGVseSBrZXB0IGFwYXJ0OlxuICAgIC8vICAtIGBzdGVwSWRBbGlhc2AgbmFtZXMgdGhlIENESyBjb25zdHJ1Y3QuIEZvciBhbiB1bnF1YWxpZmllZCByZWZlcmVuY2VcbiAgICAvLyAgICBpdCBzdGF5cyBhcyBpdCBhbHdheXMgd2FzIChgYWxpYXMgPz8gbmFtZWApLCBiZWNhdXNlIGNoYW5naW5nIGl0XG4gICAgLy8gICAgcmVuYW1lcyB0aGUgQ29kZUJ1aWxkIHByb2plY3QncyBsb2dpY2FsIGlkIGFuZCBDbG91ZEZvcm1hdGlvbiB3b3VsZFxuICAgIC8vICAgIFJFUExBQ0UgZXZlcnkgdW5hbGlhc2VkIHN0ZXAncyBwcm9qZWN0IG9uIHRoZSBuZXh0IGRlcGxveSDigJQgZm9yIG5vXG4gICAgLy8gICAgYmVuZWZpdC4gQSBgcHVibGlzaGVyYCByZWZlcmVuY2UgYWRkcyB0aGUgcHVibGlzaGVyLlxuICAgIC8vICAtIGBwbHVnaW5BbGlhc2AgaXMgdGhlIEFSVElGQUNULUtFWSBzZWdtZW50IGFuZCBtdXN0IGZvbGxvdyB0aGUgb25lIHJ1bGVcbiAgICAvLyAgICBldmVyeSBrZXkgY29uc3VtZXIgdXNlcyAoYHBsdWdpbkFydGlmYWN0QWxpYXNgKS4gUmV1c2luZyB0aGUgY29uc3RydWN0XG4gICAgLy8gICAgdmFsdWUgd291bGQgcmVnaXN0ZXIgYOKApjpub2RlanMtYnVpbGQ6ZGlzdGAgZm9yIGFuIHVuYWxpYXNlZCBzdGVwIHdoaWxlXG4gICAgLy8gICAgdGhlIFVJIGFza3MgZm9yIGDigKY6bm9kZWpzLWJ1aWxkLWFsaWFzOmRpc3RgLCBhbmQgc3ludGggd291bGQgZmFpbC5cbiAgICBjb25zdCBzdGVwSWRBbGlhcyA9IHBsdWdpblN0ZXBJZEFsaWFzKHN0ZXBDb25maWcucGx1Z2luKTtcbiAgICBjb25zdCBwbHVnaW5BbGlhcyA9IHBsdWdpbkFydGlmYWN0QWxpYXMoc3RlcENvbmZpZy5wbHVnaW4pO1xuXG4gICAgaWYgKHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdCAmJiAhdGhpcy5hcnRpZmFjdE1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgXCIke3N0ZXBJZEFsaWFzfVwiIHJlcXVpcmVzIGlucHV0QXJ0aWZhY3QgYnV0IG5vIGFydGlmYWN0TWFuYWdlciBpcyBjb25maWd1cmVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RlcENvbmZpZy5hZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHM/Lmxlbmd0aCAmJiAhdGhpcy5hcnRpZmFjdE1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgXCIke3N0ZXBJZEFsaWFzfVwiIHJlcXVpcmVzIGFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cyBidXQgbm8gYXJ0aWZhY3RNYW5hZ2VyIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBzdGVwQ29uZmlnLmlucHV0QXJ0aWZhY3QgJiYgdGhpcy5hcnRpZmFjdE1hbmFnZXJcbiAgICAgID8gdGhpcy5hcnRpZmFjdE1hbmFnZXIuZ2V0T3V0cHV0KHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYWRkaXRpb25hbElucHV0cyA9IHN0ZXBDb25maWcuYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPy5sZW5ndGggJiYgdGhpcy5hcnRpZmFjdE1hbmFnZXJcbiAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBzdGVwQ29uZmlnLmFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cy5tYXAoKHsgYXJ0aWZhY3QsIGRpcmVjdG9yeSB9KSA9PiBbXG4gICAgICAgICAgZGlyZWN0b3J5IHx8IGFydGlmYWN0Lm91dHB1dERpcmVjdG9yeSxcbiAgICAgICAgICB0aGlzLmFydGlmYWN0TWFuYWdlciEuZ2V0T3V0cHV0KGFydGlmYWN0KSxcbiAgICAgICAgXSksXG4gICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHN0ZXAgPSBjcmVhdGVDb2RlQnVpbGRTdGVwKHtcbiAgICAgIGlkOiB0aGlzLnVuaXF1ZUlkLmdlbmVyYXRlKGBzdGFnZToke3N0YWdlQWxpYXN9OiR7c3RlcElkQWxpYXN9YCksXG4gICAgICB1bmlxdWVJZDogdGhpcy51bmlxdWVJZCxcbiAgICAgIHBsdWdpbixcbiAgICAgIG1ldGFkYXRhOiBzdGVwTWV0YWRhdGEsXG4gICAgICBuZXR3b3JrOiBzdGVwQ29uZmlnLm5ldHdvcmssXG4gICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgIGRlZmF1bHRDb21wdXRlVHlwZTogdGhpcy5kZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICBpbnB1dCxcbiAgICAgIGFkZGl0aW9uYWxJbnB1dHMsXG4gICAgICBhcnRpZmFjdE1hbmFnZXI6IHRoaXMuYXJ0aWZhY3RNYW5hZ2VyLFxuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VBbGlhcyxcbiAgICAgIHBsdWdpbkFsaWFzLFxuICAgICAgcHJlSW5zdGFsbENvbW1hbmRzOiBzdGVwQ29uZmlnLnByZUluc3RhbGxDb21tYW5kcyxcbiAgICAgIHBvc3RJbnN0YWxsQ29tbWFuZHM6IHN0ZXBDb25maWcucG9zdEluc3RhbGxDb21tYW5kcyxcbiAgICAgIHByZUNvbW1hbmRzOiBzdGVwQ29uZmlnLnByZUNvbW1hbmRzLFxuICAgICAgcG9zdENvbW1hbmRzOiBzdGVwQ29uZmlnLnBvc3RDb21tYW5kcyxcbiAgICAgIGVudjogc3RlcENvbmZpZy5lbnYsXG4gICAgICB0aW1lb3V0OiBzdGVwQ29uZmlnLnRpbWVvdXQgPz8gcGx1Z2luLnRpbWVvdXQgPz8gdW5kZWZpbmVkLFxuICAgICAgLy8gQSBzY2FuL3NlY3VyaXR5LWNhdGVnb3J5IHBsdWdpbiBjYW4gbmV2ZXIgYmUgZG93bmdyYWRlZCBmcm9tICdmYWlsJyDigJQgc2VlIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IuXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6IHJlc29sdmVGYWlsdXJlQmVoYXZpb3IocGx1Z2luLmNhdGVnb3J5LCBzdGVwQ29uZmlnLmZhaWx1cmVCZWhhdmlvciA/PyBwbHVnaW4uZmFpbHVyZUJlaGF2aW9yKSxcbiAgICAgIG9yZ0lkOiB0aGlzLm9yZ0lkLFxuICAgICAgcGlwZWxpbmVTY29wZTogdGhpcy5waXBlbGluZVNjb3BlLFxuICAgIH0pO1xuICAgIHRoaXMuc3RlcE1hbmlmZXN0Py5yZWNvcmQoc3RlcCwgcGx1Z2luKTtcbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbmQgYWRkcyBtdWx0aXBsZSBzdGFnZXMgYXMgd2F2ZXMgdG8gdGhlIHBpcGVsaW5lLCBpbiBvcmRlci5cbiAgICovXG4gIGFkZFN0YWdlcyhwaXBlbGluZTogQ29kZVBpcGVsaW5lLCBzdGFnZXM6IFN0YWdlT3B0aW9uc1tdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIHRoaXMuYWRkU3RhZ2UocGlwZWxpbmUsIHN0YWdlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Plugin } from '@pipeline-builder/pipeline-data';
|
|
2
|
+
import type { Pipeline } from 'aws-cdk-lib/aws-codepipeline';
|
|
3
|
+
import type { Step } from 'aws-cdk-lib/pipelines';
|
|
4
|
+
import { type StepManifestEntry } from '../core/step-manifest.js';
|
|
5
|
+
/**
|
|
6
|
+
* Collects (step → resolved plugin) pairs while the stages are built, then
|
|
7
|
+
* reads the finished CodePipeline to emit the step manifest. Only
|
|
8
|
+
* plugins that were really resolved are recorded — the synth-time
|
|
9
|
+
* `fallback()` / `bootstrap()` placeholders name no `plugins` row.
|
|
10
|
+
*/
|
|
11
|
+
export declare class StepManifestRecorder {
|
|
12
|
+
private readonly byActionKey;
|
|
13
|
+
/** Remember that `step` runs `plugin`. Call once per plugin-backed step. */
|
|
14
|
+
record(step: Step, plugin: Plugin): void;
|
|
15
|
+
/**
|
|
16
|
+
* The manifest for the built pipeline. Call after `buildPipeline()`: stage
|
|
17
|
+
* and action names come from `pipeline.stages`, so a stage CDK split for
|
|
18
|
+
* exceeding 50 actions (`<stage>.1`, `<stage>.2`) is reported as CodePipeline
|
|
19
|
+
* reports it.
|
|
20
|
+
*/
|
|
21
|
+
entries(pipeline: Pipeline): StepManifestEntry[];
|
|
22
|
+
}
|