@pipeline-builder/pipeline-core 3.4.69 → 3.4.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -33
- package/lib/config/app-config.d.ts +1 -1
- package/lib/config/app-config.js +20 -25
- package/lib/config/billing-config.d.ts +1 -1
- package/lib/config/billing-config.js +2 -5
- package/lib/config/config-types.d.ts +1 -1
- package/lib/config/config-types.js +2 -3
- package/lib/config/infrastructure-config.d.ts +1 -1
- package/lib/config/infrastructure-config.js +25 -38
- package/lib/config/server-config.d.ts +1 -1
- package/lib/config/server-config.js +12 -19
- package/lib/core/artifact-manager.js +3 -6
- package/lib/core/id-generator.js +4 -8
- package/lib/core/metadata-builder.d.ts +4 -4
- package/lib/core/metadata-builder.js +32 -44
- package/lib/core/network-types.d.ts +2 -2
- package/lib/core/network-types.js +2 -3
- package/lib/core/network.d.ts +3 -3
- package/lib/core/network.js +18 -20
- package/lib/core/pipeline-helpers.d.ts +3 -3
- package/lib/core/pipeline-helpers.js +73 -79
- package/lib/core/pipeline-types.d.ts +2 -2
- package/lib/core/pipeline-types.js +5 -11
- package/lib/core/role-types.js +2 -3
- package/lib/core/role.d.ts +3 -3
- package/lib/core/role.js +24 -25
- package/lib/core/security-group-types.js +2 -3
- package/lib/core/security-group.d.ts +3 -3
- package/lib/core/security-group.js +8 -9
- package/lib/handlers/plugin-lookup-handler.d.ts +1 -1
- package/lib/handlers/plugin-lookup-handler.js +18 -56
- package/lib/index.d.ts +17 -17
- package/lib/index.js +28 -71
- package/lib/pipeline/pipeline-builder.d.ts +5 -5
- package/lib/pipeline/pipeline-builder.js +73 -110
- package/lib/pipeline/pipeline-configuration.d.ts +5 -5
- package/lib/pipeline/pipeline-configuration.js +15 -19
- package/lib/pipeline/plugin-lookup.d.ts +3 -3
- package/lib/pipeline/plugin-lookup.js +32 -31
- package/lib/pipeline/source-builder.d.ts +2 -2
- package/lib/pipeline/source-builder.js +27 -29
- package/lib/pipeline/source-types.d.ts +1 -1
- package/lib/pipeline/source-types.js +2 -3
- package/lib/pipeline/stage-builder.d.ts +5 -5
- package/lib/pipeline/stage-builder.js +9 -9
- package/lib/pipeline/step-types.d.ts +4 -4
- package/lib/pipeline/step-types.js +2 -3
- package/lib/template/cache.d.ts +1 -1
- package/lib/template/cache.js +5 -9
- package/lib/template/evaluator.d.ts +1 -1
- package/lib/template/evaluator.js +11 -16
- package/lib/template/index.d.ts +9 -9
- package/lib/template/index.js +31 -56
- package/lib/template/metrics.d.ts +0 -7
- package/lib/template/metrics.js +17 -10
- package/lib/template/plugin-resolver.js +5 -9
- package/lib/template/tokenizer.js +13 -19
- package/lib/template/topo-sort.js +2 -5
- package/lib/template/validate.d.ts +1 -1
- package/lib/template/validate.js +20 -25
- package/lib/template/walker.d.ts +1 -1
- package/lib/template/walker.js +6 -10
- package/package.json +20 -14
|
@@ -1,45 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
-
}
|
|
10
|
-
Object.defineProperty(o, k2, desc);
|
|
11
|
-
}) : (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
o[k2] = m[k];
|
|
14
|
-
}));
|
|
15
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
-
}) : function(o, v) {
|
|
18
|
-
o["default"] = v;
|
|
19
|
-
});
|
|
20
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
-
var ownKeys = function(o) {
|
|
22
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
-
var ar = [];
|
|
24
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
-
return ar;
|
|
26
|
-
};
|
|
27
|
-
return ownKeys(o);
|
|
28
|
-
};
|
|
29
|
-
return function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
|
-
})();
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.handler = void 0;
|
|
39
|
-
exports._resetCredentialsCache = _resetCredentialsCache;
|
|
40
|
-
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
|
41
|
-
const axios_1 = __importStar(require("axios"));
|
|
42
|
-
const app_config_1 = require("../config/app-config");
|
|
3
|
+
import { GetSecretValueCommand, SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
|
|
4
|
+
import axios, { AxiosError } from 'axios';
|
|
5
|
+
import { CoreConstants } from '../config/app-config.js';
|
|
43
6
|
/**
|
|
44
7
|
* Structured logger for Lambda (outputs JSON to CloudWatch).
|
|
45
8
|
* Debug messages only emitted when LOG_LEVEL=debug.
|
|
@@ -75,7 +38,7 @@ if (!PLATFORM_SECRET_NAME) {
|
|
|
75
38
|
/** Cached token to avoid repeated Secrets Manager calls within a single invocation. */
|
|
76
39
|
let cachedToken = null;
|
|
77
40
|
/** @internal Reset cached token (for testing only). */
|
|
78
|
-
function _resetCredentialsCache() { cachedToken = null; }
|
|
41
|
+
export function _resetCredentialsCache() { cachedToken = null; }
|
|
79
42
|
/**
|
|
80
43
|
* Fetch JWT token from AWS Secrets Manager.
|
|
81
44
|
* Caches the result for the lifetime of the Lambda execution context.
|
|
@@ -87,8 +50,8 @@ async function getToken() {
|
|
|
87
50
|
if (cachedToken)
|
|
88
51
|
return cachedToken;
|
|
89
52
|
lambdaLog.info('AUTH', `Fetching token from Secrets Manager: ${PLATFORM_SECRET_NAME}`);
|
|
90
|
-
const client = new
|
|
91
|
-
const response = await client.send(new
|
|
53
|
+
const client = new SecretsManagerClient({});
|
|
54
|
+
const response = await client.send(new GetSecretValueCommand({ SecretId: PLATFORM_SECRET_NAME }));
|
|
92
55
|
if (!response.SecretString) {
|
|
93
56
|
throw new Error(`Secret "${PLATFORM_SECRET_NAME}" is empty`);
|
|
94
57
|
}
|
|
@@ -113,9 +76,9 @@ async function getToken() {
|
|
|
113
76
|
* @returns Configured Axios instance
|
|
114
77
|
*/
|
|
115
78
|
function create(baseURL, token) {
|
|
116
|
-
return
|
|
79
|
+
return axios.create({
|
|
117
80
|
baseURL,
|
|
118
|
-
timeout:
|
|
81
|
+
timeout: CoreConstants.HANDLER_TIMEOUT_MS,
|
|
119
82
|
headers: {
|
|
120
83
|
'Content-Type': 'application/json',
|
|
121
84
|
'Authorization': `Bearer ${token}`,
|
|
@@ -135,10 +98,10 @@ function create(baseURL, token) {
|
|
|
135
98
|
async function fetch(api, pluginFilter) {
|
|
136
99
|
lambdaLog.debug('FETCH', 'Starting plugin fetch', { filter: pluginFilter });
|
|
137
100
|
let lastError;
|
|
138
|
-
for (let attempt = 0; attempt <=
|
|
101
|
+
for (let attempt = 0; attempt <= CoreConstants.HANDLER_MAX_RETRIES; attempt++) {
|
|
139
102
|
if (attempt > 0) {
|
|
140
|
-
const delay =
|
|
141
|
-
lambdaLog.info('RETRY', `Attempt ${attempt + 1}/${
|
|
103
|
+
const delay = CoreConstants.HANDLER_RETRY_DELAY_MS * Math.pow(2, attempt - 1);
|
|
104
|
+
lambdaLog.info('RETRY', `Attempt ${attempt + 1}/${CoreConstants.HANDLER_MAX_RETRIES + 1} after ${delay}ms`);
|
|
142
105
|
await sleep(delay);
|
|
143
106
|
}
|
|
144
107
|
try {
|
|
@@ -157,10 +120,10 @@ async function fetch(api, pluginFilter) {
|
|
|
157
120
|
return data;
|
|
158
121
|
}
|
|
159
122
|
catch (error) {
|
|
160
|
-
if (error instanceof
|
|
123
|
+
if (error instanceof AxiosError) {
|
|
161
124
|
if (error.code === 'ECONNABORTED') {
|
|
162
|
-
lambdaLog.error('FETCH', `Plugin lookup timed out after ${
|
|
163
|
-
throw new Error(`Plugin lookup timed out after ${
|
|
125
|
+
lambdaLog.error('FETCH', `Plugin lookup timed out after ${CoreConstants.HANDLER_TIMEOUT_MS}ms`);
|
|
126
|
+
throw new Error(`Plugin lookup timed out after ${CoreConstants.HANDLER_TIMEOUT_MS}ms`);
|
|
164
127
|
}
|
|
165
128
|
const retryable = error.response
|
|
166
129
|
? RETRYABLE_STATUSES.has(error.response.status)
|
|
@@ -168,7 +131,7 @@ async function fetch(api, pluginFilter) {
|
|
|
168
131
|
const msg = error.response
|
|
169
132
|
? `API error ${error.response.status}: ${error.response.statusText}`
|
|
170
133
|
: error.code || error.message;
|
|
171
|
-
if (retryable && attempt <
|
|
134
|
+
if (retryable && attempt < CoreConstants.HANDLER_MAX_RETRIES) {
|
|
172
135
|
lambdaLog.info('RETRY', `Retryable error: ${msg}`, { attempt: attempt + 1 });
|
|
173
136
|
lastError = new Error(`Failed to fetch plugin: ${msg}`);
|
|
174
137
|
continue;
|
|
@@ -234,7 +197,7 @@ function validatePluginFilter(pluginFilter) {
|
|
|
234
197
|
* }
|
|
235
198
|
* ```
|
|
236
199
|
*/
|
|
237
|
-
const handler = async (event) => {
|
|
200
|
+
export const handler = async (event) => {
|
|
238
201
|
lambdaLog.info('START', `${event.RequestType} request received`, {
|
|
239
202
|
logicalResourceId: event.LogicalResourceId,
|
|
240
203
|
requestId: event.RequestId,
|
|
@@ -258,7 +221,7 @@ const handler = async (event) => {
|
|
|
258
221
|
}
|
|
259
222
|
// Extract and validate properties
|
|
260
223
|
const pluginFilter = event.ResourceProperties.pluginFilter;
|
|
261
|
-
const baseURL = event.ResourceProperties.baseURL ||
|
|
224
|
+
const baseURL = event.ResourceProperties.baseURL || CoreConstants.HANDLER_DEFAULT_BASE_URL;
|
|
262
225
|
if (!baseURL.startsWith('https://') && !baseURL.startsWith('http://')) {
|
|
263
226
|
throw new Error(`Invalid baseURL: "${baseURL}" — must start with http:// or https://`);
|
|
264
227
|
}
|
|
@@ -319,5 +282,4 @@ const handler = async (event) => {
|
|
|
319
282
|
lambdaLog.info('END', 'Custom resource execution completed');
|
|
320
283
|
}
|
|
321
284
|
};
|
|
322
|
-
exports.handler = handler;
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEN0Qyx3REFBc0U7QUExQ3RFLDRFQUE4RjtBQUc5RiwrQ0FBeUQ7QUFDekQscURBQXFEO0FBRXJEOzs7R0FHRztBQUNILFNBQVMsUUFBUSxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsT0FBZSxFQUFFLElBQWM7SUFDM0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekYsUUFBUSxLQUFLLEVBQUUsQ0FBQztRQUNkLEtBQUssT0FBTztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ3pDLEtBQUssT0FBTztZQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUMsTUFBTTtRQUNoRixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUc7SUFDaEIsSUFBSSxFQUFFLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7SUFDNUYsS0FBSyxFQUFFLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7SUFDOUYsS0FBSyxFQUFFLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7Q0FDL0YsQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRTdFLFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsaUdBQWlHO0FBQ2pHLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztBQUM5RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVELHVGQUF1RjtBQUN2RixJQUFJLFdBQVcsR0FBa0IsSUFBSSxDQUFDO0FBRXRDLHVEQUF1RDtBQUN2RCxTQUFnQixzQkFBc0IsS0FBVyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUV0RTs7Ozs7O0dBTUc7QUFDSCxLQUFLLFVBQVUsUUFBUTtJQUNyQixJQUFJLFdBQVc7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUVwQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSx3Q0FBd0Msb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBRXZGLE1BQU0sTUFBTSxHQUFHLElBQUksNkNBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksOENBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsb0JBQW9CLFlBQVksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQTJCLENBQUM7SUFDM0Usd0VBQXdFO0lBQ3hFLCtFQUErRTtJQUMvRSxzRUFBc0U7SUFDdEUseUVBQXlFO0lBQ3pFLHVEQUF1RDtJQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxvQkFBb0IscUVBQXFFLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBRUQsV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztJQUMvRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxNQUFNLENBQUMsT0FBZSxFQUFFLEtBQWE7SUFDNUMsT0FBTyxlQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2xCLE9BQU87UUFDUCxPQUFPLEVBQUUsMEJBQWEsQ0FBQyxrQkFBa0I7UUFDekMsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxlQUFlLEVBQUUsVUFBVSxLQUFLLEVBQUU7U0FDbkM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsS0FBSyxVQUFVLEtBQUssQ0FBQyxHQUFrQixFQUFFLFlBQTBCO0lBQ2pFLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFFNUUsSUFBSSxTQUE0QixDQUFDO0lBRWpDLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSSwwQkFBYSxDQUFDLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDOUUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEIsTUFBTSxLQUFLLEdBQUcsMEJBQWEsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUUsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxPQUFPLEdBQUcsQ0FBQyxJQUFJLDBCQUFhLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDNUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFTLHFCQUFxQixFQUFFO2dCQUNyRSxNQUFNLEVBQUUsWUFBWTthQUNyQixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRTtnQkFDckQsTUFBTTtnQkFDTixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2FBQ1osQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLGtCQUFVLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO29CQUNsQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsMEJBQWEsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUM7b0JBQ2hHLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLDBCQUFhLENBQUMsa0JBQWtCLElBQUksQ0FBQyxDQUFDO2dCQUN6RixDQUFDO2dCQUVELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRO29CQUM5QixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUMvQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUUxQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUTtvQkFDeEIsQ0FBQyxDQUFDLGFBQWEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7b0JBQ3BFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBRWhDLElBQUksU0FBUyxJQUFJLE9BQU8sR0FBRywwQkFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzdELFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDN0UsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxTQUFTO2dCQUNYLENBQUM7Z0JBRUQscUVBQXFFO2dCQUNyRSxvRUFBb0U7Z0JBQ3BFLCtEQUErRDtnQkFDL0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRO29CQUM5RSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUEwQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUE2QixDQUFDLE9BQU8sRUFBRTtvQkFDM0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDZCxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBRUQsTUFBTSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDeEYsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLFlBQXFCO0lBQ2pELElBQUksQ0FBQyxZQUFZLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxZQUF1QyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSSxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQzFCLEtBQXdDLEVBQ08sRUFBRTtJQUNqRCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLG1CQUFtQixFQUFFO1FBQy9ELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7UUFDMUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztLQUN2QixDQUFDLENBQUM7SUFFSCxNQUFNLFlBQVksR0FBa0Q7UUFDbEUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1FBQzFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7S0FDNUMsQ0FBQztJQUVGLElBQUksQ0FBQztRQUNILHlDQUF5QztRQUN6QyxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztZQUN0RCxPQUFPO2dCQUNMLEdBQUcsWUFBWTtnQkFDZixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLDBCQUEwQjthQUNLLENBQUM7UUFDNUMsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDO1FBQzNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLElBQUksMEJBQWEsQ0FBQyx3QkFBd0IsQ0FBQztRQUUzRixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixPQUFPLHlDQUF5QyxDQUFDLENBQUM7UUFDekYsQ0FBQztRQUVELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFNUUsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbkMsdURBQXVEO1FBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVuQyxlQUFlO1FBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsK0JBQStCLEVBQUU7WUFDdkQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7UUFFSCwyRUFBMkU7UUFDM0UscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHO1lBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7WUFDdkMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1lBQ2YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7WUFDckQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtZQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFN0UsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxXQUFXLE1BQU0sQ0FBQyxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sMEJBQTBCO1lBQzdFLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsT0FBTzthQUNyQjtTQUNzQyxDQUFDO0lBQzVDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUM7UUFDcEYsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7WUFDekMsTUFBTTtZQUNOLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3hELENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixNQUFNLEVBQUUsUUFBUTtZQUNoQixNQUFNLEVBQUUsTUFBTTtTQUN5QixDQUFDO0lBQzVDLENBQUM7WUFBUyxDQUFDO1FBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUscUNBQXFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBaEdXLFFBQUEsT0FBTyxXQWdHbEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgR2V0U2VjcmV0VmFsdWVDb21tYW5kLCBTZWNyZXRzTWFuYWdlckNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuaW1wb3J0IHsgUGx1Z2luRmlsdGVyLCBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlIH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5cbi8qKlxuICogU3RydWN0dXJlZCBsb2dnZXIgZm9yIExhbWJkYSAob3V0cHV0cyBKU09OIHRvIENsb3VkV2F0Y2gpLlxuICogRGVidWcgbWVzc2FnZXMgb25seSBlbWl0dGVkIHdoZW4gTE9HX0xFVkVMPWRlYnVnLlxuICovXG5mdW5jdGlvbiBsb2dFbnRyeShsZXZlbDogc3RyaW5nLCB0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikge1xuICBjb25zdCBsaW5lID0gSlNPTi5zdHJpbmdpZnkoeyBsZXZlbCwgdGFnLCBtZXNzYWdlLCBkYXRhLCB0czogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pO1xuICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgY2FzZSAnRVJST1InOiBjb25zb2xlLmVycm9yKGxpbmUpOyBicmVhaztcbiAgICBjYXNlICdERUJVRyc6IGlmIChwcm9jZXNzLmVudi5MT0dfTEVWRUwgPT09ICdkZWJ1ZycpIGNvbnNvbGUuZGVidWcobGluZSk7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IGNvbnNvbGUubG9nKGxpbmUpO1xuICB9XG59XG5cbmNvbnN0IGxhbWJkYUxvZyA9IHtcbiAgaW5mbzogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnSU5GTycsIHRhZywgbWVzc2FnZSwgZGF0YSksXG4gIGVycm9yOiAodGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IGxvZ0VudHJ5KCdFUlJPUicsIHRhZywgbWVzc2FnZSwgZGF0YSksXG4gIGRlYnVnOiAodGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IGxvZ0VudHJ5KCdERUJVRycsIHRhZywgbWVzc2FnZSwgZGF0YSksXG59O1xuXG5jb25zdCBSRVRSWUFCTEVfU1RBVFVTRVMgPSBuZXcgU2V0KFs0MjksIDUwMiwgNTAzLCA1MDRdKTtcbmNvbnN0IFJFVFJZQUJMRV9DT0RFUyA9IG5ldyBTZXQoWydFQ09OTlJFU0VUJywgJ0VDT05OUkVGVVNFRCcsICdFVElNRURPVVQnXSk7XG5cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG4vKiogUGxhdGZvcm0gc2VjcmV0IG5hbWUg4oCUIGluamVjdGVkIGFzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIgYnkgUGx1Z2luTG9va3VwIGNvbnN0cnVjdC4gKi9cbmNvbnN0IFBMQVRGT1JNX1NFQ1JFVF9OQU1FID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fU0VDUkVUX05BTUU7XG5pZiAoIVBMQVRGT1JNX1NFQ1JFVF9OQU1FKSB7XG4gIHRocm93IG5ldyBFcnJvcignUExBVEZPUk1fU0VDUkVUX05BTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgcmVxdWlyZWQnKTtcbn1cblxuLyoqIENhY2hlZCB0b2tlbiB0byBhdm9pZCByZXBlYXRlZCBTZWNyZXRzIE1hbmFnZXIgY2FsbHMgd2l0aGluIGEgc2luZ2xlIGludm9jYXRpb24uICovXG5sZXQgY2FjaGVkVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4vKiogQGludGVybmFsIFJlc2V0IGNhY2hlZCB0b2tlbiAoZm9yIHRlc3Rpbmcgb25seSkuICovXG5leHBvcnQgZnVuY3Rpb24gX3Jlc2V0Q3JlZGVudGlhbHNDYWNoZSgpOiB2b2lkIHsgY2FjaGVkVG9rZW4gPSBudWxsOyB9XG5cbi8qKlxuICogRmV0Y2ggSldUIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqIENhY2hlcyB0aGUgcmVzdWx0IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIExhbWJkYSBleGVjdXRpb24gY29udGV4dC5cbiAqXG4gKiBUaGUgc2VjcmV0IG5hbWUgaXMgc2V0IHZpYSBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIChlLmcuIGB7cHJlZml4fS97b3JnSWR9L3BsYXRmb3JtYClcbiAqIENyZWF0ZSBpdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKGNhY2hlZFRva2VuKSByZXR1cm4gY2FjaGVkVG9rZW47XG5cbiAgbGFtYmRhTG9nLmluZm8oJ0FVVEgnLCBgRmV0Y2hpbmcgdG9rZW4gZnJvbSBTZWNyZXRzIE1hbmFnZXI6ICR7UExBVEZPUk1fU0VDUkVUX05BTUV9YCk7XG5cbiAgY29uc3QgY2xpZW50ID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHt9KTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKHsgU2VjcmV0SWQ6IFBMQVRGT1JNX1NFQ1JFVF9OQU1FIH0pKTtcblxuICBpZiAoIXJlc3BvbnNlLlNlY3JldFN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IFwiJHtQTEFURk9STV9TRUNSRVRfTkFNRX1cIiBpcyBlbXB0eWApO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXNwb25zZS5TZWNyZXRTdHJpbmcpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8vIFNjaGVtYSBpcyBgeyB1c2VybmFtZSwgcGFzc3dvcmQsIC4uLiB9YCDigJQgdGhlIGBwYXNzd29yZGAgZmllbGQgaXMgdGhlXG4gIC8vIHBsYXRmb3JtIEpXVC4gU2FtZSBzZWNyZXQgaXMgcmVhZCBieSBDb2RlQnVpbGQncyBgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsc2BcbiAgLy8gZm9yIHJlZ2lzdHJ5IHB1bGxzIChCYXNpYyBhdXRoOiB1c2VybmFtZTpwYXNzd29yZCA9IG9yZ0lkOkpXVCkuIFRoZVxuICAvLyBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeSB0b2tlbiBlbmRwb2ludCB2YWxpZGF0ZXMgdGhlIHBhc3N3b3JkIGFzIGEgSldUXG4gIC8vIGFuZCBpc3N1ZXMgYSByZWdpc3RyeSB0b2tlbiBzY29wZWQgdG8gdGhlIEpXVCdzIG9yZy5cbiAgaWYgKCFwYXJzZWQucGFzc3dvcmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7UExBVEZPUk1fU0VDUkVUX05BTUV9XCIgbWlzc2luZyBwYXNzd29yZCDigJQgcnVuIFwicGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlblwiIHRvIGdlbmVyYXRlYCk7XG4gIH1cblxuICBjYWNoZWRUb2tlbiA9IHBhcnNlZC5wYXNzd29yZDtcbiAgbGFtYmRhTG9nLmluZm8oJ0FVVEgnLCAnVG9rZW4gcmV0cmlldmVkIGZyb20gU2VjcmV0cyBNYW5hZ2VyJyk7XG4gIHJldHVybiBjYWNoZWRUb2tlbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcHJlLWNvbmZpZ3VyZWQgQXhpb3MgaW5zdGFuY2UgZm9yIEFQSSByZXF1ZXN0cy5cbiAqXG4gKiBAcGFyYW0gYmFzZVVSTCAtIEJhc2UgVVJMIG9mIHRoZSB0YXJnZXQgQVBJXG4gKiBAcGFyYW0gdG9rZW4gLSBKV1QgdG9rZW4gZm9yIGF1dGhvcml6YXRpb25cbiAqIEByZXR1cm5zIENvbmZpZ3VyZWQgQXhpb3MgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGJhc2VVUkw6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IEF4aW9zSW5zdGFuY2Uge1xuICByZXR1cm4gYXhpb3MuY3JlYXRlKHtcbiAgICBiYXNlVVJMLFxuICAgIHRpbWVvdXQ6IENvcmVDb25zdGFudHMuSEFORExFUl9USU1FT1VUX01TLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEZldGNoZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZXh0ZXJuYWwgQVBJIHdpdGggcmV0cnkgbG9naWMuXG4gKiBSZXRyaWVzIG9uIHRyYW5zaWVudCBmYWlsdXJlcyAoNDI5LCA1MDIsIDUwMywgNTA0LCBuZXR3b3JrIGVycm9ycylcbiAqIHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAqXG4gKiBAcGFyYW0gYXBpIC0gQ29uZmlndXJlZCBBeGlvcyBpbnN0YW5jZVxuICogQHBhcmFtIHBsdWdpbkZpbHRlciAtIEZpbHRlciBjcml0ZXJpYSBmb3IgdGhlIHBsdWdpbiBsb29rdXBcbiAqIEByZXR1cm5zIFRoZSBwbHVnaW4gZGF0YSByZXR1cm5lZCBieSB0aGUgQVBJXG4gKiBAdGhyb3dzIEVycm9yIG9uIHBlcnNpc3RlbnQgZmFpbHVyZSwgdGltZW91dCBvciBpbnZhbGlkIHJlc3BvbnNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoKGFwaTogQXhpb3NJbnN0YW5jZSwgcGx1Z2luRmlsdGVyOiBQbHVnaW5GaWx0ZXIpOiBQcm9taXNlPFBsdWdpbj4ge1xuICBsYW1iZGFMb2cuZGVidWcoJ0ZFVENIJywgJ1N0YXJ0aW5nIHBsdWdpbiBmZXRjaCcsIHsgZmlsdGVyOiBwbHVnaW5GaWx0ZXIgfSk7XG5cbiAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gQ29yZUNvbnN0YW50cy5IQU5ETEVSX01BWF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gQ29yZUNvbnN0YW50cy5IQU5ETEVSX1JFVFJZX0RFTEFZX01TICogTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpO1xuICAgICAgbGFtYmRhTG9nLmluZm8oJ1JFVFJZJywgYEF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHtDb3JlQ29uc3RhbnRzLkhBTkRMRVJfTUFYX1JFVFJJRVMgKyAxfSBhZnRlciAke2RlbGF5fW1zYCk7XG4gICAgICBhd2FpdCBzbGVlcChkZWxheSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSwgc3RhdHVzIH0gPSBhd2FpdCBhcGkucG9zdDxQbHVnaW4+KCcvYXBpL3BsdWdpbnMvbG9va3VwJywge1xuICAgICAgICBmaWx0ZXI6IHBsdWdpbkZpbHRlcixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbXB0eSByZXNwb25zZSBkYXRhIGZyb20gQVBJJyk7XG4gICAgICB9XG5cbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdGRVRDSCcsICdQbHVnaW4gZmV0Y2hlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgcGx1Z2luOiBkYXRhLm5hbWUsXG4gICAgICAgIHZlcnNpb246IGRhdGEudmVyc2lvbixcbiAgICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFQ09OTkFCT1JURUQnKSB7XG4gICAgICAgICAgbGFtYmRhTG9nLmVycm9yKCdGRVRDSCcsIGBQbHVnaW4gbG9va3VwIHRpbWVkIG91dCBhZnRlciAke0NvcmVDb25zdGFudHMuSEFORExFUl9USU1FT1VUX01TfW1zYCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbG9va3VwIHRpbWVkIG91dCBhZnRlciAke0NvcmVDb25zdGFudHMuSEFORExFUl9USU1FT1VUX01TfW1zYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXRyeWFibGUgPSBlcnJvci5yZXNwb25zZVxuICAgICAgICAgID8gUkVUUllBQkxFX1NUQVRVU0VTLmhhcyhlcnJvci5yZXNwb25zZS5zdGF0dXMpXG4gICAgICAgICAgOiBSRVRSWUFCTEVfQ09ERVMuaGFzKGVycm9yLmNvZGUgPz8gJycpO1xuXG4gICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLnJlc3BvbnNlXG4gICAgICAgICAgPyBgQVBJIGVycm9yICR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzfTogJHtlcnJvci5yZXNwb25zZS5zdGF0dXNUZXh0fWBcbiAgICAgICAgICA6IGVycm9yLmNvZGUgfHwgZXJyb3IubWVzc2FnZTtcblxuICAgICAgICBpZiAocmV0cnlhYmxlICYmIGF0dGVtcHQgPCBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgICBsYW1iZGFMb2cuaW5mbygnUkVUUlknLCBgUmV0cnlhYmxlIGVycm9yOiAke21zZ31gLCB7IGF0dGVtcHQ6IGF0dGVtcHQgKyAxIH0pO1xuICAgICAgICAgIGxhc3RFcnJvciA9IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHBsdWdpbjogJHttc2d9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb24ndCBsb2cgdGhlIHVwc3RyZWFtIGJvZHkgdmVyYmF0aW0g4oCUIGl0IG1heSBjYXJyeSBhIHN0YWNrIHRyYWNlLFxuICAgICAgICAvLyBhIHJlcXVlc3QgcGF5bG9hZCBlY2hvLCBvciBvdGhlciBzZW5zaXRpdmUgZGF0YSB3ZSBzaG91bGRuJ3QgZWNob1xuICAgICAgICAvLyBpbnRvIExhbWJkYSBDbG91ZFdhdGNoIGxvZ3MuIEtlZXAganVzdCB0aGUgaGlnaC1sZXZlbCBzaGFwZS5cbiAgICAgICAgY29uc3Qgc2FmZUJvZHkgPSBlcnJvci5yZXNwb25zZT8uZGF0YSAmJiB0eXBlb2YgZXJyb3IucmVzcG9uc2UuZGF0YSA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHsgY29kZTogKGVycm9yLnJlc3BvbnNlLmRhdGEgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGUsIG1lc3NhZ2U6IChlcnJvci5yZXNwb25zZS5kYXRhIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KS5tZXNzYWdlIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGFtYmRhTG9nLmVycm9yKCdGRVRDSCcsIG1zZywgeyByZXNwb25zZUJvZHk6IHNhZmVCb2R5IH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBwbHVnaW46ICR7bXNnfWApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3IgZHVyaW5nIHBsdWdpbiBmZXRjaCcpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IGxhc3RFcnJvciA/PyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBwbHVnaW4gYWZ0ZXIgcmV0cmllcycpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgcGx1Z2luIGZpbHRlciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcGx1Z2luRmlsdGVyIC0gRmlsdGVyIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkXG4gKiBAdGhyb3dzIEVycm9yIGlmIGludmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQbHVnaW5GaWx0ZXIocGx1Z2luRmlsdGVyOiB1bmtub3duKTogcGx1Z2luRmlsdGVyIGlzIFBsdWdpbkZpbHRlciB7XG4gIGlmICghcGx1Z2luRmlsdGVyIHx8IHR5cGVvZiBwbHVnaW5GaWx0ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgcGx1Z2luRmlsdGVyJyk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBwbHVnaW5GaWx0ZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICghZmlsdGVyLm5hbWUgJiYgIWZpbHRlci5pZCAmJiAhZmlsdGVyLnZlcnNpb24gJiYgIWZpbHRlci5vcmdJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGx1Z2luRmlsdGVyIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgY3JpdGVyaW9uIChuYW1lLCBpZCwgdmVyc2lvbiwgb3Igb3JnSWQpJyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgaGFuZGxlciBmb3IgQ2xvdWRGb3JtYXRpb24gQ3VzdG9tIFJlc291cmNlIHRoYXQgcGVyZm9ybXMgcGx1Z2luIGxvb2t1cC5cbiAqXG4gKiBBdXRoZW50aWNhdGVzIHVzaW5nIEpXVCB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpLlxuICogQ3JlYXRlIHRoZSBzZWNyZXQgd2l0aDogYHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5gXG4gKlxuICogUmVxdWVzdCBUeXBlczpcbiAqIC0gQ3JlYXRlL1VwZGF0ZTogZmV0Y2hlcyBhbmQgcmV0dXJucyBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIEFQSVxuICogLSBEZWxldGU6IG5vLW9wIChhbHdheXMgc3VjY2VlZHMpXG4gKlxuICogUmVzcG9uc2U6XG4gKiAtIFN1Y2Nlc3M6IFJldHVybnMgYmFzZTY0LWVuY29kZWQgcGx1Z2luIEpTT04gaW4gRGF0YS5SZXN1bHRWYWx1ZVxuICogLSBGYWlsdXJlOiBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgaW4gUmVhc29uXG4gKlxuICogQHBhcmFtIGV2ZW50IC0gQ2xvdWRGb3JtYXRpb24gY3VzdG9tIHJlc291cmNlIGV2ZW50XG4gKiBAcmV0dXJucyBDbG91ZEZvcm1hdGlvbiByZXNwb25zZVxuICpcbiAqIEBleGFtcGxlXG4gKiBDdXN0b20gUmVzb3VyY2UgUHJvcGVydGllczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJiYXNlVVJMXCI6IFwiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb21cIixcbiAqICAgXCJwbHVnaW5GaWx0ZXJcIjoge1xuICogICAgIFwibmFtZVwiOiBcIm5vZGVqcy1idWlsZFwiLFxuICogICAgIFwidmVyc2lvblwiOiBcIjEuMC4wXCIsXG4gKiAgICAgXCJpc0FjdGl2ZVwiOiB0cnVlXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCxcbik6IFByb21pc2U8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPiA9PiB7XG4gIGxhbWJkYUxvZy5pbmZvKCdTVEFSVCcsIGAke2V2ZW50LlJlcXVlc3RUeXBlfSByZXF1ZXN0IHJlY2VpdmVkYCwge1xuICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICByZXF1ZXN0SWQ6IGV2ZW50LlJlcXVlc3RJZCxcbiAgICBzdGFja0lkOiBldmVudC5TdGFja0lkLFxuICB9KTtcblxuICBjb25zdCBiYXNlUmVzcG9uc2U6IFBhcnRpYWw8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPiA9IHtcbiAgICBTdGFja0lkOiBldmVudC5TdGFja0lkLFxuICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gSGFuZGxlIERlbGV0ZSAtIGFsd2F5cyBzdWNjZWVkIChuby1vcClcbiAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnKSB7XG4gICAgICBsYW1iZGFMb2cuaW5mbygnREVMRVRFJywgJ05vLW9wIC0gcmV0dXJuaW5nIFNVQ0NFU1MnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICAgIFJlYXNvbjogJ0RlbGV0ZSBjb21wbGV0ZWQgKG5vLW9wKScsXG4gICAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IGFuZCB2YWxpZGF0ZSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcGx1Z2luRmlsdGVyID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLnBsdWdpbkZpbHRlcjtcbiAgICBjb25zdCBiYXNlVVJMID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLmJhc2VVUkwgfHwgQ29yZUNvbnN0YW50cy5IQU5ETEVSX0RFRkFVTFRfQkFTRV9VUkw7XG5cbiAgICBpZiAoIWJhc2VVUkwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSAmJiAhYmFzZVVSTC5zdGFydHNXaXRoKCdodHRwOi8vJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYXNlVVJMOiBcIiR7YmFzZVVSTH1cIiDigJQgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly9gKTtcbiAgICB9XG5cbiAgICBsYW1iZGFMb2cuaW5mbygnQ09ORklHJywgJ0NvbmZpZ3VyYXRpb24gbG9hZGVkJywgeyBiYXNlVVJMLCBwbHVnaW5GaWx0ZXIgfSk7XG5cbiAgICB2YWxpZGF0ZVBsdWdpbkZpbHRlcihwbHVnaW5GaWx0ZXIpO1xuXG4gICAgLy8gR2V0IHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyIGFuZCBjcmVhdGUgQVBJIGNsaWVudFxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBhcGkgPSBjcmVhdGUoYmFzZVVSTCwgdG9rZW4pO1xuXG4gICAgLy8gRmV0Y2ggcGx1Z2luXG4gICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ0luaXRpYXRpbmcgcGx1Z2luIGxvb2t1cC4uLicpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGF3YWl0IGZldGNoKGFwaSwgcGx1Z2luRmlsdGVyKTtcbiAgICBsYW1iZGFMb2cuaW5mbygnRkVUQ0gnLCAnUGx1Z2luIHJldHJpZXZlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICBuYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIHZlcnNpb246IHBsdWdpbi52ZXJzaW9uLFxuICAgICAgaWQ6IHBsdWdpbi5pZCxcbiAgICB9KTtcblxuICAgIC8vIFN0cmlwIGxhcmdlIGZpZWxkcyB0byBzdGF5IHdpdGhpbiBDbG91ZEZvcm1hdGlvbidzIDQwOTYtYnl0ZSBEYXRhIGxpbWl0LlxuICAgIC8vIENESyBjb25zdHJ1Y3RzIG9ubHkgbmVlZCB0aGUgZmllbGRzIHVzZWQgYnkgY3JlYXRlQ29kZUJ1aWxkU3RlcCgpLlxuICAgIGNvbnN0IHNsaW0gPSB7XG4gICAgICBpZDogcGx1Z2luLmlkLFxuICAgICAgbmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBwbHVnaW4udmVyc2lvbixcbiAgICAgIHBsdWdpblR5cGU6IHBsdWdpbi5wbHVnaW5UeXBlLFxuICAgICAgY29tcHV0ZVR5cGU6IHBsdWdpbi5jb21wdXRlVHlwZSxcbiAgICAgIGNvbW1hbmRzOiBwbHVnaW4uY29tbWFuZHMsXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IHBsdWdpbi5pbnN0YWxsQ29tbWFuZHMsXG4gICAgICBlbnY6IHBsdWdpbi5lbnYsXG4gICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnksXG4gICAgICBzZWNyZXRzOiBwbHVnaW4uc2VjcmV0cyxcbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogcGx1Z2luLmZhaWx1cmVCZWhhdmlvcixcbiAgICAgIHRpbWVvdXQ6IHBsdWdpbi50aW1lb3V0LFxuICAgIH07XG5cbiAgICBjb25zdCBlbmNvZGVkID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2xpbSksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBsYW1iZGFMb2cuZGVidWcoJ0VOQ09ERScsICdFbmNvZGVkIHBsdWdpbiBkYXRhJywgeyBsZW5ndGg6IGVuY29kZWQubGVuZ3RoIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgIFN0YXR1czogJ1NVQ0NFU1MnLFxuICAgICAgUmVhc29uOiBgUGx1Z2luICcke3BsdWdpbi5uYW1lfScgKHYke3BsdWdpbi52ZXJzaW9ufSkgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseWAsXG4gICAgICBEYXRhOiB7XG4gICAgICAgIFJlc3VsdFZhbHVlOiBlbmNvZGVkLFxuICAgICAgfSxcbiAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCByZWFzb24gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmV4cGVjdGVkIGVycm9yIG9jY3VycmVkJztcbiAgICBsYW1iZGFMb2cuZXJyb3IoJ0VSUk9SJywgJ0hhbmRsZXIgZmFpbGVkJywge1xuICAgICAgcmVhc29uLFxuICAgICAgc3RhY2s6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlUmVzcG9uc2UsXG4gICAgICBTdGF0dXM6ICdGQUlMRUQnLFxuICAgICAgUmVhc29uOiByZWFzb24sXG4gICAgfSBhcyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U7XG4gIH0gZmluYWxseSB7XG4gICAgbGFtYmRhTG9nLmluZm8oJ0VORCcsICdDdXN0b20gcmVzb3VyY2UgZXhlY3V0aW9uIGNvbXBsZXRlZCcpO1xuICB9XG59O1xuIl19
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzlGLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQ7OztHQUdHO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxPQUFlLEVBQUUsSUFBYztJQUMzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RixRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxPQUFPO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDekMsS0FBSyxPQUFPO1lBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ2hGLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFNBQVMsR0FBRztJQUNoQixJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFD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RCxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsR0FBRyxZQUFZO1lBQ2YsTUFBTSxFQUFFLFFBQVE7WUFDaEIsTUFBTSxFQUFFLE1BQU07U0FDeUIsQ0FBQztJQUM1QyxDQUFDO1lBQVMsQ0FBQztRQUNULFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsIFNlY3JldHNNYW5hZ2VyQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkZpbHRlciwgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgdHlwZSB7IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlIH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgYXhpb3MsIHsgdHlwZSBBeGlvc0luc3RhbmNlLCBBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnLmpzJztcblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIGxvZ2dlciBmb3IgTGFtYmRhIChvdXRwdXRzIEpTT04gdG8gQ2xvdWRXYXRjaCkuXG4gKiBEZWJ1ZyBtZXNzYWdlcyBvbmx5IGVtaXR0ZWQgd2hlbiBMT0dfTEVWRUw9ZGVidWcuXG4gKi9cbmZ1bmN0aW9uIGxvZ0VudHJ5KGxldmVsOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSB7XG4gIGNvbnN0IGxpbmUgPSBKU09OLnN0cmluZ2lmeSh7IGxldmVsLCB0YWcsIG1lc3NhZ2UsIGRhdGEsIHRzOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfSk7XG4gIHN3aXRjaCAobGV2ZWwpIHtcbiAgICBjYXNlICdFUlJPUic6IGNvbnNvbGUuZXJyb3IobGluZSk7IGJyZWFrO1xuICAgIGNhc2UgJ0RFQlVHJzogaWYgKHByb2Nlc3MuZW52LkxPR19MRVZFTCA9PT0gJ2RlYnVnJykgY29uc29sZS5kZWJ1ZyhsaW5lKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogY29uc29sZS5sb2cobGluZSk7XG4gIH1cbn1cblxuY29uc3QgbGFtYmRhTG9nID0ge1xuICBpbmZvOiAodGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IGxvZ0VudHJ5KCdJTkZPJywgdGFnLCBtZXNzYWdlLCBkYXRhKSxcbiAgZXJyb3I6ICh0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nRW50cnkoJ0VSUk9SJywgdGFnLCBtZXNzYWdlLCBkYXRhKSxcbiAgZGVidWc6ICh0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nRW50cnkoJ0RFQlVHJywgdGFnLCBtZXNzYWdlLCBkYXRhKSxcbn07XG5cbmNvbnN0IFJFVFJZQUJMRV9TVEFUVVNFUyA9IG5ldyBTZXQoWzQyOSwgNTAyLCA1MDMsIDUwNF0pO1xuY29uc3QgUkVUUllBQkxFX0NPREVTID0gbmV3IFNldChbJ0VDT05OUkVTRVQnLCAnRUNPTk5SRUZVU0VEJywgJ0VUSU1FRE9VVCddKTtcblxuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKiBQbGF0Zm9ybSBzZWNyZXQgbmFtZSDigJQgaW5qZWN0ZWQgYXMgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciBieSBQbHVnaW5Mb29rdXAgY29uc3RydWN0LiAqL1xuY29uc3QgUExBVEZPUk1fU0VDUkVUX05BTUUgPSBwcm9jZXNzLmVudi5QTEFURk9STV9TRUNSRVRfTkFNRTtcbmlmICghUExBVEZPUk1fU0VDUkVUX05BTUUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdQTEFURk9STV9TRUNSRVRfTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZCcpO1xufVxuXG4vKiogQ2FjaGVkIHRva2VuIHRvIGF2b2lkIHJlcGVhdGVkIFNlY3JldHMgTWFuYWdlciBjYWxscyB3aXRoaW4gYSBzaW5nbGUgaW52b2NhdGlvbi4gKi9cbmxldCBjYWNoZWRUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbi8qKiBAaW50ZXJuYWwgUmVzZXQgY2FjaGVkIHRva2VuIChmb3IgdGVzdGluZyBvbmx5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRDcmVkZW50aWFsc0NhY2hlKCk6IHZvaWQgeyBjYWNoZWRUb2tlbiA9IG51bGw7IH1cblxuLyoqXG4gKiBGZXRjaCBKV1QgdG9rZW4gZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyLlxuICogQ2FjaGVzIHRoZSByZXN1bHQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgTGFtYmRhIGV4ZWN1dGlvbiBjb250ZXh0LlxuICpcbiAqIFRoZSBzZWNyZXQgbmFtZSBpcyBzZXQgdmlhIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIgKGUuZy4gYHtwcmVmaXh9L3tvcmdJZH0vcGxhdGZvcm1gKVxuICogQ3JlYXRlIGl0IHdpdGg6IGBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuYFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRUb2tlbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoY2FjaGVkVG9rZW4pIHJldHVybiBjYWNoZWRUb2tlbjtcblxuICBsYW1iZGFMb2cuaW5mbygnQVVUSCcsIGBGZXRjaGluZyB0b2tlbiBmcm9tIFNlY3JldHMgTWFuYWdlcjogJHtQTEFURk9STV9TRUNSRVRfTkFNRX1gKTtcblxuICBjb25zdCBjbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQoe30pO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoeyBTZWNyZXRJZDogUExBVEZPUk1fU0VDUkVUX05BTUUgfSkpO1xuXG4gIGlmICghcmVzcG9uc2UuU2VjcmV0U3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgXCIke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfVwiIGlzIGVtcHR5YCk7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLlNlY3JldFN0cmluZykgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLy8gU2NoZW1hIGlzIGB7IHVzZXJuYW1lLCBwYXNzd29yZCwgLi4uIH1gIOKAlCB0aGUgYHBhc3N3b3JkYCBmaWVsZCBpcyB0aGVcbiAgLy8gcGxhdGZvcm0gSldULiBTYW1lIHNlY3JldCBpcyByZWFkIGJ5IENvZGVCdWlsZCdzIGBzZWNyZXRzTWFuYWdlckNyZWRlbnRpYWxzYFxuICAvLyBmb3IgcmVnaXN0cnkgcHVsbHMgKEJhc2ljIGF1dGg6IHVzZXJuYW1lOnBhc3N3b3JkID0gb3JnSWQ6SldUKS4gVGhlXG4gIC8vIHBpcGVsaW5lLWltYWdlLXJlZ2lzdHJ5IHRva2VuIGVuZHBvaW50IHZhbGlkYXRlcyB0aGUgcGFzc3dvcmQgYXMgYSBKV1RcbiAgLy8gYW5kIGlzc3VlcyBhIHJlZ2lzdHJ5IHRva2VuIHNjb3BlZCB0byB0aGUgSldUJ3Mgb3JnLlxuICBpZiAoIXBhcnNlZC5wYXNzd29yZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IFwiJHtQTEFURk9STV9TRUNSRVRfTkFNRX1cIiBtaXNzaW5nIHBhc3N3b3JkIOKAlCBydW4gXCJwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuXCIgdG8gZ2VuZXJhdGVgKTtcbiAgfVxuXG4gIGNhY2hlZFRva2VuID0gcGFyc2VkLnBhc3N3b3JkO1xuICBsYW1iZGFMb2cuaW5mbygnQVVUSCcsICdUb2tlbiByZXRyaWV2ZWQgZnJvbSBTZWNyZXRzIE1hbmFnZXInKTtcbiAgcmV0dXJuIGNhY2hlZFRva2VuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwcmUtY29uZmlndXJlZCBBeGlvcyBpbnN0YW5jZSBmb3IgQVBJIHJlcXVlc3RzLlxuICpcbiAqIEBwYXJhbSBiYXNlVVJMIC0gQmFzZSBVUkwgb2YgdGhlIHRhcmdldCBBUElcbiAqIEBwYXJhbSB0b2tlbiAtIEpXVCB0b2tlbiBmb3IgYXV0aG9yaXphdGlvblxuICogQHJldHVybnMgQ29uZmlndXJlZCBBeGlvcyBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGUoYmFzZVVSTDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogQXhpb3NJbnN0YW5jZSB7XG4gIHJldHVybiBheGlvcy5jcmVhdGUoe1xuICAgIGJhc2VVUkwsXG4gICAgdGltZW91dDogQ29yZUNvbnN0YW50cy5IQU5ETEVSX1RJTUVPVVRfTVMsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIHRoZSBleHRlcm5hbCBBUEkgd2l0aCByZXRyeSBsb2dpYy5cbiAqIFJldHJpZXMgb24gdHJhbnNpZW50IGZhaWx1cmVzICg0MjksIDUwMiwgNTAzLCA1MDQsIG5ldHdvcmsgZXJyb3JzKVxuICogd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICpcbiAqIEBwYXJhbSBhcGkgLSBDb25maWd1cmVkIEF4aW9zIGluc3RhbmNlXG4gKiBAcGFyYW0gcGx1Z2luRmlsdGVyIC0gRmlsdGVyIGNyaXRlcmlhIGZvciB0aGUgcGx1Z2luIGxvb2t1cFxuICogQHJldHVybnMgVGhlIHBsdWdpbiBkYXRhIHJldHVybmVkIGJ5IHRoZSBBUElcbiAqIEB0aHJvd3MgRXJyb3Igb24gcGVyc2lzdGVudCBmYWlsdXJlLCB0aW1lb3V0IG9yIGludmFsaWQgcmVzcG9uc2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2goYXBpOiBBeGlvc0luc3RhbmNlLCBwbHVnaW5GaWx0ZXI6IFBsdWdpbkZpbHRlcik6IFByb21pc2U8UGx1Z2luPiB7XG4gIGxhbWJkYUxvZy5kZWJ1ZygnRkVUQ0gnLCAnU3RhcnRpbmcgcGx1Z2luIGZldGNoJywgeyBmaWx0ZXI6IHBsdWdpbkZpbHRlciB9KTtcblxuICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfTUFYX1JFVFJJRVM7IGF0dGVtcHQrKykge1xuICAgIGlmIChhdHRlbXB0ID4gMCkge1xuICAgICAgY29uc3QgZGVsYXkgPSBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfUkVUUllfREVMQVlfTVMgKiBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSk7XG4gICAgICBsYW1iZGFMb2cuaW5mbygnUkVUUlknLCBgQXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke0NvcmVDb25zdGFudHMuSEFORExFUl9NQVhfUkVUUklFUyArIDF9IGFmdGVyICR7ZGVsYXl9bXNgKTtcbiAgICAgIGF3YWl0IHNsZWVwKGRlbGF5KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhLCBzdGF0dXMgfSA9IGF3YWl0IGFwaS5wb3N0PFBsdWdpbj4oJy9hcGkvcGx1Z2lucy9sb29rdXAnLCB7XG4gICAgICAgIGZpbHRlcjogcGx1Z2luRmlsdGVyLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IHJlc3BvbnNlIGRhdGEgZnJvbSBBUEknKTtcbiAgICAgIH1cblxuICAgICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ1BsdWdpbiBmZXRjaGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBwbHVnaW46IGRhdGEubmFtZSxcbiAgICAgICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgICAgICBpZDogZGF0YS5pZCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXhpb3NFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VDT05OQUJPUlRFRCcpIHtcbiAgICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgYFBsdWdpbiBsb29rdXAgdGltZWQgb3V0IGFmdGVyICR7Q29yZUNvbnN0YW50cy5IQU5ETEVSX1RJTUVPVVRfTVN9bXNgKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiBsb29rdXAgdGltZWQgb3V0IGFmdGVyICR7Q29yZUNvbnN0YW50cy5IQU5ETEVSX1RJTUVPVVRfTVN9bXNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldHJ5YWJsZSA9IGVycm9yLnJlc3BvbnNlXG4gICAgICAgICAgPyBSRVRSWUFCTEVfU1RBVFVTRVMuaGFzKGVycm9yLnJlc3BvbnNlLnN0YXR1cylcbiAgICAgICAgICA6IFJFVFJZQUJMRV9DT0RFUy5oYXMoZXJyb3IuY29kZSA/PyAnJyk7XG5cbiAgICAgICAgY29uc3QgbXNnID0gZXJyb3IucmVzcG9uc2VcbiAgICAgICAgICA/IGBBUEkgZXJyb3IgJHtlcnJvci5yZXNwb25zZS5zdGF0dXN9OiAke2Vycm9yLnJlc3BvbnNlLnN0YXR1c1RleHR9YFxuICAgICAgICAgIDogZXJyb3IuY29kZSB8fCBlcnJvci5tZXNzYWdlO1xuXG4gICAgICAgIGlmIChyZXRyeWFibGUgJiYgYXR0ZW1wdCA8IENvcmVDb25zdGFudHMuSEFORExFUl9NQVhfUkVUUklFUykge1xuICAgICAgICAgIGxhbWJkYUxvZy5pbmZvKCdSRVRSWScsIGBSZXRyeWFibGUgZXJyb3I6ICR7bXNnfWAsIHsgYXR0ZW1wdDogYXR0ZW1wdCArIDEgfSk7XG4gICAgICAgICAgbGFzdEVycm9yID0gbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcGx1Z2luOiAke21zZ31gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvbid0IGxvZyB0aGUgdXBzdHJlYW0gYm9keSB2ZXJiYXRpbSDigJQgaXQgbWF5IGNhcnJ5IGEgc3RhY2sgdHJhY2UsXG4gICAgICAgIC8vIGEgcmVxdWVzdCBwYXlsb2FkIGVjaG8sIG9yIG90aGVyIHNlbnNpdGl2ZSBkYXRhIHdlIHNob3VsZG4ndCBlY2hvXG4gICAgICAgIC8vIGludG8gTGFtYmRhIENsb3VkV2F0Y2ggbG9ncy4gS2VlcCBqdXN0IHRoZSBoaWdoLWxldmVsIHNoYXBlLlxuICAgICAgICBjb25zdCBzYWZlQm9keSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhICYmIHR5cGVvZiBlcnJvci5yZXNwb25zZS5kYXRhID09PSAnb2JqZWN0J1xuICAgICAgICAgID8geyBjb2RlOiAoZXJyb3IucmVzcG9uc2UuZGF0YSBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSwgbWVzc2FnZTogKGVycm9yLnJlc3BvbnNlLmRhdGEgYXMgeyBtZXNzYWdlPzogc3RyaW5nIH0pLm1lc3NhZ2UgfVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgbXNnLCB7IHJlc3BvbnNlQm9keTogc2FmZUJvZHkgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHBsdWdpbjogJHttc2d9YCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcignVW5rbm93biBlcnJvciBkdXJpbmcgcGx1Z2luIGZldGNoJyk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbGFzdEVycm9yID8/IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIHBsdWdpbiBhZnRlciByZXRyaWVzJyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBwbHVnaW4gZmlsdGVyIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwbHVnaW5GaWx0ZXIgLSBGaWx0ZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgaW52YWxpZFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBsdWdpbkZpbHRlcihwbHVnaW5GaWx0ZXI6IHVua25vd24pOiBwbHVnaW5GaWx0ZXIgaXMgUGx1Z2luRmlsdGVyIHtcbiAgaWYgKCFwbHVnaW5GaWx0ZXIgfHwgdHlwZW9mIHBsdWdpbkZpbHRlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBwbHVnaW5GaWx0ZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHBsdWdpbkZpbHRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKCFmaWx0ZXIubmFtZSAmJiAhZmlsdGVyLmlkICYmICFmaWx0ZXIudmVyc2lvbiAmJiAhZmlsdGVyLm9yZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVnaW5GaWx0ZXIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjcml0ZXJpb24gKG5hbWUsIGlkLCB2ZXJzaW9uLCBvciBvcmdJZCknKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIExhbWJkYSBoYW5kbGVyIGZvciBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UgdGhhdCBwZXJmb3JtcyBwbHVnaW4gbG9va3VwLlxuICpcbiAqIEF1dGhlbnRpY2F0ZXMgdXNpbmcgSldUIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAoUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhcikuXG4gKiBDcmVhdGUgdGhlIHNlY3JldCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmBcbiAqXG4gKiBSZXF1ZXN0IFR5cGVzOlxuICogLSBDcmVhdGUvVXBkYXRlOiBmZXRjaGVzIGFuZCByZXR1cm5zIHBsdWdpbiBjb25maWd1cmF0aW9uIGZyb20gQVBJXG4gKiAtIERlbGV0ZTogbm8tb3AgKGFsd2F5cyBzdWNjZWVkcylcbiAqXG4gKiBSZXNwb25zZTpcbiAqIC0gU3VjY2VzczogUmV0dXJucyBiYXNlNjQtZW5jb2RlZCBwbHVnaW4gSlNPTiBpbiBEYXRhLlJlc3VsdFZhbHVlXG4gKiAtIEZhaWx1cmU6IFJldHVybnMgZXJyb3IgbWVzc2FnZSBpbiBSZWFzb25cbiAqXG4gKiBAcGFyYW0gZXZlbnQgLSBDbG91ZEZvcm1hdGlvbiBjdXN0b20gcmVzb3VyY2UgZXZlbnRcbiAqIEByZXR1cm5zIENsb3VkRm9ybWF0aW9uIHJlc3BvbnNlXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBSZXNvdXJjZSBQcm9wZXJ0aWVzOlxuICogYGBganNvblxuICoge1xuICogICBcImJhc2VVUkxcIjogXCJodHRwczovL2FwaS5leGFtcGxlLmNvbVwiLFxuICogICBcInBsdWdpbkZpbHRlclwiOiB7XG4gKiAgICAgXCJuYW1lXCI6IFwibm9kZWpzLWJ1aWxkXCIsXG4gKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAqICAgICBcImlzQWN0aXZlXCI6IHRydWVcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+ID0+IHtcbiAgbGFtYmRhTG9nLmluZm8oJ1NUQVJUJywgYCR7ZXZlbnQuUmVxdWVzdFR5cGV9IHJlcXVlc3QgcmVjZWl2ZWRgLCB7XG4gICAgbG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIHJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIHN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gIH0pO1xuXG4gIGNvbnN0IGJhc2VSZXNwb25zZTogUGFydGlhbDxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+ID0ge1xuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBIYW5kbGUgRGVsZXRlIC0gYWx3YXlzIHN1Y2NlZWQgKG5vLW9wKVxuICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScpIHtcbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdERUxFVEUnLCAnTm8tb3AgLSByZXR1cm5pbmcgU1VDQ0VTUycpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgICAgUmVhc29uOiAnRGVsZXRlIGNvbXBsZXRlZCAobm8tb3ApJyxcbiAgICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgYW5kIHZhbGlkYXRlIHByb3BlcnRpZXNcbiAgICBjb25zdCBwbHVnaW5GaWx0ZXIgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMucGx1Z2luRmlsdGVyO1xuICAgIGNvbnN0IGJhc2VVUkwgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuYmFzZVVSTCB8fCBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfREVGQVVMVF9CQVNFX1VSTDtcblxuICAgIGlmICghYmFzZVVSTC5zdGFydHNXaXRoKCdodHRwczovLycpICYmICFiYXNlVVJMLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJhc2VVUkw6IFwiJHtiYXNlVVJMfVwiIOKAlCBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovL2ApO1xuICAgIH1cblxuICAgIGxhbWJkYUxvZy5pbmZvKCdDT05GSUcnLCAnQ29uZmlndXJhdGlvbiBsb2FkZWQnLCB7IGJhc2VVUkwsIHBsdWdpbkZpbHRlciB9KTtcblxuICAgIHZhbGlkYXRlUGx1Z2luRmlsdGVyKHBsdWdpbkZpbHRlcik7XG5cbiAgICAvLyBHZXQgdG9rZW4gZnJvbSBTZWNyZXRzIE1hbmFnZXIgYW5kIGNyZWF0ZSBBUEkgY2xpZW50XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbigpO1xuICAgIGNvbnN0IGFwaSA9IGNyZWF0ZShiYXNlVVJMLCB0b2tlbik7XG5cbiAgICAvLyBGZXRjaCBwbHVnaW5cbiAgICBsYW1iZGFMb2cuaW5mbygnRkVUQ0gnLCAnSW5pdGlhdGluZyBwbHVnaW4gbG9va3VwLi4uJyk7XG4gICAgY29uc3QgcGx1Z2luID0gYXdhaXQgZmV0Y2goYXBpLCBwbHVnaW5GaWx0ZXIpO1xuICAgIGxhbWJkYUxvZy5pbmZvKCdGRVRDSCcsICdQbHVnaW4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGx1Z2luLnZlcnNpb24sXG4gICAgICBpZDogcGx1Z2luLmlkLFxuICAgIH0pO1xuXG4gICAgLy8gU3RyaXAgbGFyZ2UgZmllbGRzIHRvIHN0YXkgd2l0aGluIENsb3VkRm9ybWF0aW9uJ3MgNDA5Ni1ieXRlIERhdGEgbGltaXQuXG4gICAgLy8gQ0RLIGNvbnN0cnVjdHMgb25seSBuZWVkIHRoZSBmaWVsZHMgdXNlZCBieSBjcmVhdGVDb2RlQnVpbGRTdGVwKCkuXG4gICAgY29uc3Qgc2xpbSA9IHtcbiAgICAgIGlkOiBwbHVnaW4uaWQsXG4gICAgICBuYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIHZlcnNpb246IHBsdWdpbi52ZXJzaW9uLFxuICAgICAgcGx1Z2luVHlwZTogcGx1Z2luLnBsdWdpblR5cGUsXG4gICAgICBjb21wdXRlVHlwZTogcGx1Z2luLmNvbXB1dGVUeXBlLFxuICAgICAgY29tbWFuZHM6IHBsdWdpbi5jb21tYW5kcyxcbiAgICAgIGluc3RhbGxDb21tYW5kczogcGx1Z2luLmluc3RhbGxDb21tYW5kcyxcbiAgICAgIGVudjogcGx1Z2luLmVudixcbiAgICAgIG1ldGFkYXRhOiBwbHVnaW4ubWV0YWRhdGEsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSxcbiAgICAgIHNlY3JldHM6IHBsdWdpbi5zZWNyZXRzLFxuICAgICAgZmFpbHVyZUJlaGF2aW9yOiBwbHVnaW4uZmFpbHVyZUJlaGF2aW9yLFxuICAgICAgdGltZW91dDogcGx1Z2luLnRpbWVvdXQsXG4gICAgfTtcblxuICAgIGNvbnN0IGVuY29kZWQgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzbGltKSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGxhbWJkYUxvZy5kZWJ1ZygnRU5DT0RFJywgJ0VuY29kZWQgcGx1Z2luIGRhdGEnLCB7IGxlbmd0aDogZW5jb2RlZC5sZW5ndGggfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICBSZWFzb246IGBQbHVnaW4gJyR7cGx1Z2luLm5hbWV9JyAodiR7cGx1Z2luLnZlcnNpb259KSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5YCxcbiAgICAgIERhdGE6IHtcbiAgICAgICAgUmVzdWx0VmFsdWU6IGVuY29kZWQsXG4gICAgICB9LFxuICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IHJlYXNvbiA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1VuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnO1xuICAgIGxhbWJkYUxvZy5lcnJvcignRVJST1InLCAnSGFuZGxlciBmYWlsZWQnLCB7XG4gICAgICByZWFzb24sXG4gICAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgIFN0YXR1czogJ0ZBSUxFRCcsXG4gICAgICBSZWFzb246IHJlYXNvbixcbiAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBsYW1iZGFMb2cuaW5mbygnRU5EJywgJ0N1c3RvbSByZXNvdXJjZSBleGVjdXRpb24gY29tcGxldGVkJyk7XG4gIH1cbn07XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -34,22 +34,22 @@
|
|
|
34
34
|
* - Compliance domain types (RuleSeverity, RuleTarget, etc.)
|
|
35
35
|
* - drizzleRows, drizzleCount type helpers
|
|
36
36
|
*/
|
|
37
|
-
export * from './config/app-config';
|
|
38
|
-
export * from './config/config-types';
|
|
39
|
-
export * from './core/pipeline-types';
|
|
40
|
-
export * from './core/network-types';
|
|
41
|
-
export * from './core/role-types';
|
|
42
|
-
export * from './core/security-group-types';
|
|
43
|
-
export * from './core/id-generator';
|
|
44
|
-
export { replaceNonAlphanumeric, extractMetadataEnv } from './core/pipeline-helpers';
|
|
45
|
-
export { buildConfigFromMetadata, metadataForCodePipeline, metadataForCodeBuildStep, metadataForShellStep, metadataForBuildEnvironment, } from './core/metadata-builder';
|
|
46
|
-
export * from './core/artifact-manager';
|
|
37
|
+
export * from './config/app-config.js';
|
|
38
|
+
export * from './config/config-types.js';
|
|
39
|
+
export * from './core/pipeline-types.js';
|
|
40
|
+
export * from './core/network-types.js';
|
|
41
|
+
export * from './core/role-types.js';
|
|
42
|
+
export * from './core/security-group-types.js';
|
|
43
|
+
export * from './core/id-generator.js';
|
|
44
|
+
export { replaceNonAlphanumeric, extractMetadataEnv } from './core/pipeline-helpers.js';
|
|
45
|
+
export { buildConfigFromMetadata, metadataForCodePipeline, metadataForCodeBuildStep, metadataForShellStep, metadataForBuildEnvironment, } from './core/metadata-builder.js';
|
|
46
|
+
export * from './core/artifact-manager.js';
|
|
47
47
|
export { ErrorCode, createLogger, } from '@pipeline-builder/api-core';
|
|
48
48
|
export { db, getConnection, closeConnection, schema, tenantContext, runWithTenantContext, getTenantContext, withTenantTx, type TenantContext, buildPluginConditions, buildPipelineConditions, buildMessageConditions, validateMessageFilter, buildCompliancePolicyConditions, buildComplianceRuleConditions, buildComplianceExemptionConditions, buildComplianceAuditConditions, buildComplianceScanConditions, buildPublishedRuleCatalogConditions, buildComplianceRuleSubscriptionConditions, type PluginFilter, type PipelineFilter, type MessageFilter, type CompliancePolicyFilter, type ComplianceRuleFilter, type ComplianceExemptionFilter, type ComplianceAuditFilter, type ComplianceScanFilter, type ComplianceRuleSubscriptionFilter, type PluginSecret, type RuleSeverity, type RuleTarget, type RuleOperator, type RuleConditionMode, type RuleScope, type RuleCondition, type ComplianceRoleType, CrudService, type BaseEntity, drizzleRows, drizzleCount, runMigrations, type MigrateOptions, reportingService, } from '@pipeline-builder/pipeline-data';
|
|
49
|
-
export * from './pipeline/source-types';
|
|
50
|
-
export * from './pipeline/step-types';
|
|
51
|
-
export * from './pipeline/stage-builder';
|
|
52
|
-
export * from './pipeline/pipeline-builder';
|
|
53
|
-
export * from './pipeline/plugin-lookup';
|
|
54
|
-
export { PipelineConfiguration } from './pipeline/pipeline-configuration';
|
|
55
|
-
export * from './template';
|
|
49
|
+
export * from './pipeline/source-types.js';
|
|
50
|
+
export * from './pipeline/step-types.js';
|
|
51
|
+
export * from './pipeline/stage-builder.js';
|
|
52
|
+
export * from './pipeline/pipeline-builder.js';
|
|
53
|
+
export * from './pipeline/plugin-lookup.js';
|
|
54
|
+
export { PipelineConfiguration } from './pipeline/pipeline-configuration.js';
|
|
55
|
+
export * from './template/index.js';
|
package/lib/index.js
CHANGED
|
@@ -1,22 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
-
if (k2 === undefined) k2 = k;
|
|
6
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
-
}
|
|
10
|
-
Object.defineProperty(o, k2, desc);
|
|
11
|
-
}) : (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
o[k2] = m[k];
|
|
14
|
-
}));
|
|
15
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
16
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
17
|
-
};
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.PipelineConfiguration = exports.reportingService = exports.runMigrations = exports.drizzleCount = exports.drizzleRows = exports.CrudService = exports.buildComplianceRuleSubscriptionConditions = exports.buildPublishedRuleCatalogConditions = exports.buildComplianceScanConditions = exports.buildComplianceAuditConditions = exports.buildComplianceExemptionConditions = exports.buildComplianceRuleConditions = exports.buildCompliancePolicyConditions = exports.validateMessageFilter = exports.buildMessageConditions = exports.buildPipelineConditions = exports.buildPluginConditions = exports.withTenantTx = exports.getTenantContext = exports.runWithTenantContext = exports.tenantContext = exports.schema = exports.closeConnection = exports.getConnection = exports.db = exports.createLogger = exports.ErrorCode = exports.metadataForBuildEnvironment = exports.metadataForShellStep = exports.metadataForCodeBuildStep = exports.metadataForCodePipeline = exports.buildConfigFromMetadata = exports.extractMetadataEnv = exports.replaceNonAlphanumeric = void 0;
|
|
20
3
|
/**
|
|
21
4
|
* @module @pipeline-builder/pipeline-core
|
|
22
5
|
*
|
|
@@ -54,70 +37,44 @@ exports.PipelineConfiguration = exports.reportingService = exports.runMigrations
|
|
|
54
37
|
* - drizzleRows, drizzleCount type helpers
|
|
55
38
|
*/
|
|
56
39
|
// Configuration
|
|
57
|
-
|
|
58
|
-
|
|
40
|
+
export * from './config/app-config.js';
|
|
41
|
+
export * from './config/config-types.js';
|
|
59
42
|
// Core types (public surface)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
var metadata_builder_1 = require("./core/metadata-builder");
|
|
69
|
-
Object.defineProperty(exports, "buildConfigFromMetadata", { enumerable: true, get: function () { return metadata_builder_1.buildConfigFromMetadata; } });
|
|
70
|
-
Object.defineProperty(exports, "metadataForCodePipeline", { enumerable: true, get: function () { return metadata_builder_1.metadataForCodePipeline; } });
|
|
71
|
-
Object.defineProperty(exports, "metadataForCodeBuildStep", { enumerable: true, get: function () { return metadata_builder_1.metadataForCodeBuildStep; } });
|
|
72
|
-
Object.defineProperty(exports, "metadataForShellStep", { enumerable: true, get: function () { return metadata_builder_1.metadataForShellStep; } });
|
|
73
|
-
Object.defineProperty(exports, "metadataForBuildEnvironment", { enumerable: true, get: function () { return metadata_builder_1.metadataForBuildEnvironment; } });
|
|
74
|
-
__exportStar(require("./core/artifact-manager"), exports);
|
|
43
|
+
export * from './core/pipeline-types.js';
|
|
44
|
+
export * from './core/network-types.js';
|
|
45
|
+
export * from './core/role-types.js';
|
|
46
|
+
export * from './core/security-group-types.js';
|
|
47
|
+
export * from './core/id-generator.js';
|
|
48
|
+
export { replaceNonAlphanumeric, extractMetadataEnv } from './core/pipeline-helpers.js';
|
|
49
|
+
export { buildConfigFromMetadata, metadataForCodePipeline, metadataForCodeBuildStep, metadataForShellStep, metadataForBuildEnvironment, } from './core/metadata-builder.js';
|
|
50
|
+
export * from './core/artifact-manager.js';
|
|
75
51
|
// Re-export from api-core (only items consumed by external packages)
|
|
76
|
-
|
|
77
|
-
Object.defineProperty(exports, "ErrorCode", { enumerable: true, get: function () { return api_core_1.ErrorCode; } });
|
|
78
|
-
Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return api_core_1.createLogger; } });
|
|
52
|
+
export { ErrorCode, createLogger, } from '@pipeline-builder/api-core';
|
|
79
53
|
// Re-export database layer from pipeline-data (only items consumed externally)
|
|
80
|
-
|
|
54
|
+
export {
|
|
81
55
|
// Database connection
|
|
82
|
-
|
|
83
|
-
Object.defineProperty(exports, "getConnection", { enumerable: true, get: function () { return pipeline_data_1.getConnection; } });
|
|
84
|
-
Object.defineProperty(exports, "closeConnection", { enumerable: true, get: function () { return pipeline_data_1.closeConnection; } });
|
|
56
|
+
db, getConnection, closeConnection,
|
|
85
57
|
// Schema & tables
|
|
86
|
-
|
|
58
|
+
schema,
|
|
87
59
|
// Tenant-context primitives (Postgres RLS enforcement)
|
|
88
|
-
|
|
89
|
-
Object.defineProperty(exports, "runWithTenantContext", { enumerable: true, get: function () { return pipeline_data_1.runWithTenantContext; } });
|
|
90
|
-
Object.defineProperty(exports, "getTenantContext", { enumerable: true, get: function () { return pipeline_data_1.getTenantContext; } });
|
|
91
|
-
Object.defineProperty(exports, "withTenantTx", { enumerable: true, get: function () { return pipeline_data_1.withTenantTx; } });
|
|
60
|
+
tenantContext, runWithTenantContext, getTenantContext, withTenantTx,
|
|
92
61
|
// Query builders
|
|
93
|
-
|
|
94
|
-
Object.defineProperty(exports, "buildPipelineConditions", { enumerable: true, get: function () { return pipeline_data_1.buildPipelineConditions; } });
|
|
95
|
-
Object.defineProperty(exports, "buildMessageConditions", { enumerable: true, get: function () { return pipeline_data_1.buildMessageConditions; } });
|
|
96
|
-
Object.defineProperty(exports, "validateMessageFilter", { enumerable: true, get: function () { return pipeline_data_1.validateMessageFilter; } });
|
|
97
|
-
Object.defineProperty(exports, "buildCompliancePolicyConditions", { enumerable: true, get: function () { return pipeline_data_1.buildCompliancePolicyConditions; } });
|
|
98
|
-
Object.defineProperty(exports, "buildComplianceRuleConditions", { enumerable: true, get: function () { return pipeline_data_1.buildComplianceRuleConditions; } });
|
|
99
|
-
Object.defineProperty(exports, "buildComplianceExemptionConditions", { enumerable: true, get: function () { return pipeline_data_1.buildComplianceExemptionConditions; } });
|
|
100
|
-
Object.defineProperty(exports, "buildComplianceAuditConditions", { enumerable: true, get: function () { return pipeline_data_1.buildComplianceAuditConditions; } });
|
|
101
|
-
Object.defineProperty(exports, "buildComplianceScanConditions", { enumerable: true, get: function () { return pipeline_data_1.buildComplianceScanConditions; } });
|
|
102
|
-
Object.defineProperty(exports, "buildPublishedRuleCatalogConditions", { enumerable: true, get: function () { return pipeline_data_1.buildPublishedRuleCatalogConditions; } });
|
|
103
|
-
Object.defineProperty(exports, "buildComplianceRuleSubscriptionConditions", { enumerable: true, get: function () { return pipeline_data_1.buildComplianceRuleSubscriptionConditions; } });
|
|
62
|
+
buildPluginConditions, buildPipelineConditions, buildMessageConditions, validateMessageFilter, buildCompliancePolicyConditions, buildComplianceRuleConditions, buildComplianceExemptionConditions, buildComplianceAuditConditions, buildComplianceScanConditions, buildPublishedRuleCatalogConditions, buildComplianceRuleSubscriptionConditions,
|
|
104
63
|
// CRUD service
|
|
105
|
-
|
|
64
|
+
CrudService,
|
|
106
65
|
// Drizzle type helpers
|
|
107
|
-
|
|
108
|
-
Object.defineProperty(exports, "drizzleCount", { enumerable: true, get: function () { return pipeline_data_1.drizzleCount; } });
|
|
66
|
+
drizzleRows, drizzleCount,
|
|
109
67
|
// Migration runner (idempotent startup hook)
|
|
110
|
-
|
|
68
|
+
runMigrations,
|
|
111
69
|
// Reporting service (cache invalidation hook for plugin/reporting events)
|
|
112
|
-
|
|
70
|
+
reportingService, } from '@pipeline-builder/pipeline-data';
|
|
113
71
|
// Pipeline (CDK constructs)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
Object.defineProperty(exports, "PipelineConfiguration", { enumerable: true, get: function () { return pipeline_configuration_1.PipelineConfiguration; } });
|
|
72
|
+
export * from './pipeline/source-types.js';
|
|
73
|
+
export * from './pipeline/step-types.js';
|
|
74
|
+
export * from './pipeline/stage-builder.js';
|
|
75
|
+
export * from './pipeline/pipeline-builder.js';
|
|
76
|
+
export * from './pipeline/plugin-lookup.js';
|
|
77
|
+
export { PipelineConfiguration } from './pipeline/pipeline-configuration.js';
|
|
121
78
|
// Template engine synth-time scripting for pipeline config + plugin specs
|
|
122
|
-
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
export * from './template/index.js';
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFFSCxnQkFBZ0I7QUFDaEIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBRXpDLDhCQUE4QjtBQUM5QixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQiwyQkFBMkIsR0FDNUIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLHFFQUFxRTtBQUNyRSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLCtFQUErRTtBQUMvRSxPQUFPO0FBQ0wsc0JBQXNCO0FBQ3RCLEVBQUUsRUFDRixhQUFhLEVBQ2IsZUFBZTtBQUVmLGtCQUFrQjtBQUNsQixNQUFNO0FBRU4sdURBQXVEO0FBQ3ZELGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLFlBQVk7QUFHWixpQkFBaUI7QUFDakIscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQiw2QkFBNkIsRUFDN0Isa0NBQWtDLEVBQ2xDLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLHlDQUF5QztBQXlCekMsZUFBZTtBQUNmLFdBQVc7QUFHWCx1QkFBdUI7QUFDdkIsV0FBVyxFQUNYLFlBQVk7QUFFWiw2Q0FBNkM7QUFDN0MsYUFBYTtBQUdiLDBFQUEwRTtBQUMxRSxnQkFBZ0IsR0FDakIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6Qyw0QkFBNEI7QUFDNUIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTdFLDJFQUEyRTtBQUMzRSxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQG1vZHVsZSBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlXG4gKlxuICogQXBwbGljYXRpb24gY29uZmlndXJhdGlvbiwgcGlwZWxpbmUgZG9tYWluIHR5cGVzLCBhbmQgQ0RLIGNvbnN0cnVjdHMuXG4gKlxuICogKipDb25maWcqKlxuICogLSBDb25maWcgIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gc2luZ2xldG9uIChlbnZpcm9ubWVudC1kcml2ZW4pXG4gKiAtIENvbmZpZ1R5cGVzICB0eXBlZCBjb25maWd1cmF0aW9uIGludGVyZmFjZXNcbiAqXG4gKiAqKlR5cGVzKipcbiAqIC0gUGlwZWxpbmVUeXBlLCBDb21wdXRlVHlwZSwgQWNjZXNzTW9kaWZpZXIsIFBsdWdpblR5cGUgIHBpcGVsaW5lIGRvbWFpbiBlbnVtc1xuICogLSBOZXR3b3JrVHlwZXMsIFJvbGVUeXBlcywgU2VjdXJpdHlHcm91cFR5cGVzICBpbmZyYXN0cnVjdHVyZSB0eXBlIGRlZmluaXRpb25zXG4gKiAtIFNvdXJjZVR5cGVzLCBTdGVwVHlwZXMgIHBpcGVsaW5lIHNvdXJjZSBhbmQgc3RlcCBjb25maWd1cmF0aW9uIHR5cGVzXG4gKiAtIElkR2VuZXJhdG9yICBkZXRlcm1pbmlzdGljIElEIGdlbmVyYXRpb25cbiAqXG4gKiAqKkNESyBDb25zdHJ1Y3RzKipcbiAqIC0gUGlwZWxpbmVCdWlsZGVyICB0b3AtbGV2ZWwgQ0RLIHBpcGVsaW5lIGNvbnN0cnVjdFxuICogLSBTdGFnZUJ1aWxkZXIgIHBpcGVsaW5lIHN0YWdlIGNvbXBvc2l0aW9uXG4gKiAtIFBpcGVsaW5lQ29uZmlndXJhdGlvbiAgcGlwZWxpbmUgY29uZmlnIHJlc29sdXRpb25cbiAqIC0gUGx1Z2luTG9va3VwICBwbHVnaW4gcmVzb2x1dGlvbiBmb3IgcGlwZWxpbmUgc3RlcHNcbiAqIC0gQXJ0aWZhY3RNYW5hZ2VyICBidWlsZCBhcnRpZmFjdCBtYW5hZ2VtZW50XG4gKlxuICogKipIZWxwZXJzKipcbiAqIC0gcmVwbGFjZU5vbkFscGhhbnVtZXJpYywgZXh0cmFjdE1ldGFkYXRhRW52ICBzdHJpbmcgYW5kIG1ldGFkYXRhIHV0aWxpdGllc1xuICogLSBidWlsZENvbmZpZ0Zyb21NZXRhZGF0YSwgbWV0YWRhdGFGb3JDb2RlUGlwZWxpbmUsIGV0Yy4gIG1ldGFkYXRhIGJ1aWxkZXJzXG4gKlxuICogKipSZS1leHBvcnRzIGZyb20gYXBpLWNvcmUqKlxuICogLSBFcnJvckNvZGUsIGNyZWF0ZUxvZ2dlclxuICpcbiAqICoqUmUtZXhwb3J0cyBmcm9tIHBpcGVsaW5lLWRhdGEqKlxuICogLSBkYiwgc2NoZW1hLCBnZXRDb25uZWN0aW9uLCBjbG9zZUNvbm5lY3Rpb24gIGRhdGFiYXNlIGFjY2Vzc1xuICogLSBDcnVkU2VydmljZSwgQmFzZUVudGl0eSAgQ1JVRCBzZXJ2aWNlIGluZnJhc3RydWN0dXJlXG4gKiAtIEFsbCBxdWVyeSBjb25kaXRpb24gYnVpbGRlcnMgYW5kIGZpbHRlciB0eXBlc1xuICogLSBDb21wbGlhbmNlIGRvbWFpbiB0eXBlcyAoUnVsZVNldmVyaXR5LCBSdWxlVGFyZ2V0LCBldGMuKVxuICogLSBkcml6emxlUm93cywgZHJpenpsZUNvdW50ICB0eXBlIGhlbHBlcnNcbiAqL1xuXG4vLyBDb25maWd1cmF0aW9uXG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9hcHAtY29uZmlnLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnL2NvbmZpZy10eXBlcy5qcyc7XG5cbi8vIENvcmUgdHlwZXMgKHB1YmxpYyBzdXJmYWNlKVxuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9uZXR3b3JrLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9yb2xlLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9zZWN1cml0eS1ncm91cC10eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcbmV4cG9ydCB7IHJlcGxhY2VOb25BbHBoYW51bWVyaWMsIGV4dHJhY3RNZXRhZGF0YUVudiB9IGZyb20gJy4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmV4cG9ydCB7XG4gIGJ1aWxkQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBtZXRhZGF0YUZvckNvZGVQaXBlbGluZSxcbiAgbWV0YWRhdGFGb3JDb2RlQnVpbGRTdGVwLFxuICBtZXRhZGF0YUZvclNoZWxsU3RlcCxcbiAgbWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50LFxufSBmcm9tICcuL2NvcmUvbWV0YWRhdGEtYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvYXJ0aWZhY3QtbWFuYWdlci5qcyc7XG5cbi8vIFJlLWV4cG9ydCBmcm9tIGFwaS1jb3JlIChvbmx5IGl0ZW1zIGNvbnN1bWVkIGJ5IGV4dGVybmFsIHBhY2thZ2VzKVxuZXhwb3J0IHtcbiAgRXJyb3JDb2RlLFxuICBjcmVhdGVMb2dnZXIsXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcblxuLy8gUmUtZXhwb3J0IGRhdGFiYXNlIGxheWVyIGZyb20gcGlwZWxpbmUtZGF0YSAob25seSBpdGVtcyBjb25zdW1lZCBleHRlcm5hbGx5KVxuZXhwb3J0IHtcbiAgLy8gRGF0YWJhc2UgY29ubmVjdGlvblxuICBkYixcbiAgZ2V0Q29ubmVjdGlvbixcbiAgY2xvc2VDb25uZWN0aW9uLFxuXG4gIC8vIFNjaGVtYSAmIHRhYmxlc1xuICBzY2hlbWEsXG5cbiAgLy8gVGVuYW50LWNvbnRleHQgcHJpbWl0aXZlcyAoUG9zdGdyZXMgUkxTIGVuZm9yY2VtZW50KVxuICB0ZW5hbnRDb250ZXh0LFxuICBydW5XaXRoVGVuYW50Q29udGV4dCxcbiAgZ2V0VGVuYW50Q29udGV4dCxcbiAgd2l0aFRlbmFudFR4LFxuICB0eXBlIFRlbmFudENvbnRleHQsXG5cbiAgLy8gUXVlcnkgYnVpbGRlcnNcbiAgYnVpbGRQbHVnaW5Db25kaXRpb25zLFxuICBidWlsZFBpcGVsaW5lQ29uZGl0aW9ucyxcbiAgYnVpbGRNZXNzYWdlQ29uZGl0aW9ucyxcbiAgdmFsaWRhdGVNZXNzYWdlRmlsdGVyLFxuICBidWlsZENvbXBsaWFuY2VQb2xpY3lDb25kaXRpb25zLFxuICBidWlsZENvbXBsaWFuY2VSdWxlQ29uZGl0aW9ucyxcbiAgYnVpbGRDb21wbGlhbmNlRXhlbXB0aW9uQ29uZGl0aW9ucyxcbiAgYnVpbGRDb21wbGlhbmNlQXVkaXRDb25kaXRpb25zLFxuICBidWlsZENvbXBsaWFuY2VTY2FuQ29uZGl0aW9ucyxcbiAgYnVpbGRQdWJsaXNoZWRSdWxlQ2F0YWxvZ0NvbmRpdGlvbnMsXG4gIGJ1aWxkQ29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb25Db25kaXRpb25zLFxuXG4gIC8vIFF1ZXJ5IGZpbHRlciB0eXBlc1xuICB0eXBlIFBsdWdpbkZpbHRlcixcbiAgdHlwZSBQaXBlbGluZUZpbHRlcixcbiAgdHlwZSBNZXNzYWdlRmlsdGVyLFxuICB0eXBlIENvbXBsaWFuY2VQb2xpY3lGaWx0ZXIsXG4gIHR5cGUgQ29tcGxpYW5jZVJ1bGVGaWx0ZXIsXG4gIHR5cGUgQ29tcGxpYW5jZUV4ZW1wdGlvbkZpbHRlcixcbiAgdHlwZSBDb21wbGlhbmNlQXVkaXRGaWx0ZXIsXG4gIHR5cGUgQ29tcGxpYW5jZVNjYW5GaWx0ZXIsXG4gIHR5cGUgQ29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb25GaWx0ZXIsXG5cbiAgLy8gUGx1Z2luIHR5cGVzXG4gIHR5cGUgUGx1Z2luU2VjcmV0LFxuXG4gIC8vIENvbXBsaWFuY2UgdHlwZXNcbiAgdHlwZSBSdWxlU2V2ZXJpdHksXG4gIHR5cGUgUnVsZVRhcmdldCxcbiAgdHlwZSBSdWxlT3BlcmF0b3IsXG4gIHR5cGUgUnVsZUNvbmRpdGlvbk1vZGUsXG4gIHR5cGUgUnVsZVNjb3BlLFxuICB0eXBlIFJ1bGVDb25kaXRpb24sXG4gIHR5cGUgQ29tcGxpYW5jZVJvbGVUeXBlLFxuXG4gIC8vIENSVUQgc2VydmljZVxuICBDcnVkU2VydmljZSxcbiAgdHlwZSBCYXNlRW50aXR5LFxuXG4gIC8vIERyaXp6bGUgdHlwZSBoZWxwZXJzXG4gIGRyaXp6bGVSb3dzLFxuICBkcml6emxlQ291bnQsXG5cbiAgLy8gTWlncmF0aW9uIHJ1bm5lciAoaWRlbXBvdGVudCBzdGFydHVwIGhvb2spXG4gIHJ1bk1pZ3JhdGlvbnMsXG4gIHR5cGUgTWlncmF0ZU9wdGlvbnMsXG5cbiAgLy8gUmVwb3J0aW5nIHNlcnZpY2UgKGNhY2hlIGludmFsaWRhdGlvbiBob29rIGZvciBwbHVnaW4vcmVwb3J0aW5nIGV2ZW50cylcbiAgcmVwb3J0aW5nU2VydmljZSxcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5cbi8vIFBpcGVsaW5lIChDREsgY29uc3RydWN0cylcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvc291cmNlLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvc3RlcC10eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3N0YWdlLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcGx1Z2luLWxvb2t1cC5qcyc7XG5leHBvcnQgeyBQaXBlbGluZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BpcGVsaW5lL3BpcGVsaW5lLWNvbmZpZ3VyYXRpb24uanMnO1xuXG4vLyBUZW1wbGF0ZSBlbmdpbmUgIHN5bnRoLXRpbWUgc2NyaXB0aW5nIGZvciBwaXBlbGluZSBjb25maWcgKyBwbHVnaW4gc3BlY3NcbmV4cG9ydCAqIGZyb20gJy4vdGVtcGxhdGUvaW5kZXguanMnO1xuIl19
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { Plugin } from '@pipeline-builder/pipeline-data';
|
|
2
2
|
import { CodePipeline } from 'aws-cdk-lib/pipelines';
|
|
3
3
|
import { Construct } from 'constructs';
|
|
4
|
-
import { PipelineConfiguration } from './pipeline-configuration';
|
|
5
|
-
import type { StageOptions, SynthOptions } from './step-types';
|
|
6
|
-
import type { CodeBuildDefaults } from '../core/network-types';
|
|
7
|
-
import type { MetaDataType } from '../core/pipeline-types';
|
|
8
|
-
import type { RoleConfig } from '../core/role-types';
|
|
4
|
+
import { PipelineConfiguration } from './pipeline-configuration.js';
|
|
5
|
+
import type { StageOptions, SynthOptions } from './step-types.js';
|
|
6
|
+
import type { CodeBuildDefaults } from '../core/network-types.js';
|
|
7
|
+
import type { MetaDataType } from '../core/pipeline-types.js';
|
|
8
|
+
import type { RoleConfig } from '../core/role-types.js';
|
|
9
9
|
/**
|
|
10
10
|
* Configuration properties for the PipelineBuilder construct
|
|
11
11
|
*/
|