@dbx-tools/appkit 0.6.87 → 0.6.89
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/src/bundle.d.ts +10 -8
- package/lib/src/bundle.js +18 -18
- package/package.json +3 -3
- package/src/bundle.ts +21 -18
package/lib/src/bundle.d.ts
CHANGED
|
@@ -19,26 +19,28 @@
|
|
|
19
19
|
*
|
|
20
20
|
* @module
|
|
21
21
|
*/
|
|
22
|
-
import { config as coreConfig } from "@dbx-tools/core";
|
|
23
22
|
import { z } from "zod";
|
|
24
23
|
/** Parsed payload from `databricks bundle validate --output json`. */
|
|
25
24
|
export type BundleValidateJson = Record<string, unknown>;
|
|
26
25
|
/** A config file discovered on disk with its parsed contents. */
|
|
27
|
-
export
|
|
26
|
+
export interface ConfigFile {
|
|
27
|
+
path: string;
|
|
28
|
+
data: Record<string, unknown>;
|
|
29
|
+
}
|
|
28
30
|
/** Supported configuration sources, consulted in array order. */
|
|
29
31
|
export type ConfigSource = "explicit" | "cli" | "env" | "bundle";
|
|
30
32
|
export declare const bundleAppResourceSchema: z.ZodObject<{
|
|
31
|
-
name: z.ZodOptional<z.
|
|
33
|
+
name: z.ZodOptional<z.ZodString>;
|
|
32
34
|
sql_warehouse: z.ZodOptional<z.ZodObject<{
|
|
33
|
-
id: z.ZodOptional<z.
|
|
35
|
+
id: z.ZodOptional<z.ZodString>;
|
|
34
36
|
}, z.core.$strip>>;
|
|
35
37
|
genie_space: z.ZodOptional<z.ZodObject<{
|
|
36
|
-
space_id: z.ZodOptional<z.
|
|
38
|
+
space_id: z.ZodOptional<z.ZodString>;
|
|
37
39
|
}, z.core.$strip>>;
|
|
38
40
|
postgres: z.ZodOptional<z.ZodObject<{
|
|
39
|
-
database: z.ZodOptional<z.
|
|
40
|
-
branch: z.ZodOptional<z.
|
|
41
|
-
endpoint: z.ZodOptional<z.
|
|
41
|
+
database: z.ZodOptional<z.ZodString>;
|
|
42
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
43
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
42
44
|
}, z.core.$strip>>;
|
|
43
45
|
}, z.core.$loose>;
|
|
44
46
|
/** Single config map entry (string or repeated values, like headers). */
|
package/lib/src/bundle.js
CHANGED
|
@@ -24,19 +24,19 @@ import { resolve } from "node:path";
|
|
|
24
24
|
import { ValidationError } from "@databricks/appkit";
|
|
25
25
|
import { config as coreConfig, file, project } from "@dbx-tools/core";
|
|
26
26
|
import { context, object, log, string } from "@dbx-tools/shared-core";
|
|
27
|
-
import { parse as
|
|
27
|
+
import { parse as yamlParse } from "yaml";
|
|
28
28
|
import { z } from "zod";
|
|
29
29
|
const logger = log.logger("config");
|
|
30
30
|
const defaultConfigSources = ["explicit", "env", "bundle"];
|
|
31
31
|
const APP_YAML_NAMES = ["app.yaml", "app.yml"];
|
|
32
32
|
export const bundleAppResourceSchema = coreConfig.bundleResourceSchema.extend({
|
|
33
|
-
sql_warehouse: z.object({ id: coreConfig.
|
|
34
|
-
genie_space: z.object({ space_id: coreConfig.
|
|
33
|
+
sql_warehouse: z.object({ id: coreConfig.valueSchema.optional() }).optional(),
|
|
34
|
+
genie_space: z.object({ space_id: coreConfig.valueSchema.optional() }).optional(),
|
|
35
35
|
postgres: z
|
|
36
36
|
.object({
|
|
37
|
-
database: coreConfig.
|
|
38
|
-
branch: coreConfig.
|
|
39
|
-
endpoint: coreConfig.
|
|
37
|
+
database: coreConfig.valueSchema.optional(),
|
|
38
|
+
branch: coreConfig.valueSchema.optional(),
|
|
39
|
+
endpoint: coreConfig.valueSchema.optional(),
|
|
40
40
|
})
|
|
41
41
|
.optional(),
|
|
42
42
|
});
|
|
@@ -47,19 +47,19 @@ const bundleValidateAppsSchema = z.object({
|
|
|
47
47
|
resources: z.object({ apps: z.record(z.string(), bundleAppSchema).optional() }).optional(),
|
|
48
48
|
});
|
|
49
49
|
const appYamlEnvEntrySchema = coreConfig.bundleEnvEntrySchema.omit({ value_from: true }).extend({
|
|
50
|
-
name: coreConfig.
|
|
51
|
-
valueFrom: coreConfig.
|
|
50
|
+
name: coreConfig.valueSchema,
|
|
51
|
+
valueFrom: coreConfig.valueSchema.optional(),
|
|
52
52
|
});
|
|
53
53
|
const appYamlResourceSchema = coreConfig.bundleResourceSchema
|
|
54
54
|
.extend({
|
|
55
|
-
name: coreConfig.
|
|
56
|
-
sql_warehouse: z.object({ id: coreConfig.
|
|
57
|
-
genie_space: z.object({ space_id: coreConfig.
|
|
55
|
+
name: coreConfig.valueSchema,
|
|
56
|
+
sql_warehouse: z.object({ id: coreConfig.valueSchema.optional() }).optional(),
|
|
57
|
+
genie_space: z.object({ space_id: coreConfig.valueSchema.optional() }).optional(),
|
|
58
58
|
postgres: z
|
|
59
59
|
.object({
|
|
60
|
-
database: coreConfig.
|
|
61
|
-
branch: coreConfig.
|
|
62
|
-
endpoint: coreConfig.
|
|
60
|
+
database: coreConfig.valueSchema.optional(),
|
|
61
|
+
branch: coreConfig.valueSchema.optional(),
|
|
62
|
+
endpoint: coreConfig.valueSchema.optional(),
|
|
63
63
|
})
|
|
64
64
|
.optional(),
|
|
65
65
|
})
|
|
@@ -126,7 +126,7 @@ function readAppEnv(keys, envMap) {
|
|
|
126
126
|
return undefined;
|
|
127
127
|
}
|
|
128
128
|
function parseYaml(text) {
|
|
129
|
-
return
|
|
129
|
+
return yamlParse(text);
|
|
130
130
|
}
|
|
131
131
|
function pickAppResourceId(apps) {
|
|
132
132
|
const keys = Object.keys(apps);
|
|
@@ -158,7 +158,7 @@ export function flattenAppYamlEnv(data) {
|
|
|
158
158
|
const resourceByName = new Map((parsed.data.resources ?? []).map((resource) => [resource.name, resource]));
|
|
159
159
|
const out = {};
|
|
160
160
|
for (const entry of parsed.data.env) {
|
|
161
|
-
const value = coreConfig.
|
|
161
|
+
const value = coreConfig.valueSchema.safeParse(entry.value);
|
|
162
162
|
if (value.success) {
|
|
163
163
|
out[entry.name] = value.data;
|
|
164
164
|
continue;
|
|
@@ -195,7 +195,7 @@ export function flattenAppEnv(data) {
|
|
|
195
195
|
for (const entry of app.config.env) {
|
|
196
196
|
if (!entry.name)
|
|
197
197
|
continue;
|
|
198
|
-
const value = coreConfig.
|
|
198
|
+
const value = coreConfig.valueSchema.safeParse(entry.value);
|
|
199
199
|
if (value.success) {
|
|
200
200
|
out[entry.name] = value.data;
|
|
201
201
|
continue;
|
|
@@ -356,4 +356,4 @@ export function withCliSources(sources = defaultConfigSources) {
|
|
|
356
356
|
const rest = sources.filter((source) => source !== "cli" && source !== "explicit");
|
|
357
357
|
return ["cli", "explicit", ...rest];
|
|
358
358
|
}
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1bmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFXcEMsTUFBTSxvQkFBb0IsR0FBbUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBRTNFLE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBVSxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7SUFDNUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzdFLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FB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M0UsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUM7SUFDbkYsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEQVRBQlJJQ0tTLUFQUCBjb25maWd1cmF0aW9uIHJlc29sdXRpb246IHRoZSBidW5kbGUgYW5kIGBhcHAueWFtbGAgdm9jYWJ1bGFyeS5cbiAqXG4gKiBub2RlLWNvcmUncyBgY29uZmlnYCBtb2R1bGUgb3ducyB0aGUgZ2VuZXJpYyBsb29rdXAgLSBlbnZpcm9ubWVudCwgYC5lbnZgLFxuICogYGRhdGFicmlja3MgYnVuZGxlIHZhbGlkYXRlYCAtIGFuZCBrbm93cyBub3RoaW5nIGFib3V0IHdoYXQgYSBidW5kbGUgcmVzb3VyY2VcbiAqIElTLiBUaGF0IGxhc3QgcGFydCBpcyB0aGlzIG1vZHVsZTogYHNxbF93YXJlaG91c2VgLCBgZ2VuaWVfc3BhY2VgLCBhbmRcbiAqIGBwb3N0Z3Jlc2AgYXJlIERhdGFicmlja3MtQXBwIGNvbmNlcHRzLCBhbmQgYW4gYGFwcC55YW1sYCAvIGJ1bmRsZVxuICogYHZhbHVlX2Zyb21gIGVudHJ5IGlzIGEgUkVGRVJFTkNFIHRvIG9uZSBvZiB0aGVtIHdob3NlIHJlYWwgdmFsdWUgaXMgdGhlXG4gKiB3YXJlaG91c2UgaWQgb3IgR2VuaWUgc3BhY2UgaWQgc2l0dGluZyBvbiB0aGUgbmFtZWQgcmVzb3VyY2UuIFNvIHRoaXMgbW9kdWxlXG4gKiBleHRlbmRzIG5vZGUtY29yZSdzIHJlc291cmNlIHNjaGVtYSwgYWRkcyBgYXBwLnlhbWxgICh3aGljaCB0aGUgYnVuZGxlIENMSVxuICogbmV2ZXIgc2VlcyksIGFuZCByZXNvbHZlcyB0aG9zZSByZWZlcmVuY2VzLlxuICpcbiAqIERlZmF1bHQgc291cmNlczogYGV4cGxpY2l0YCwgdGhlbiBgZW52YCwgdGhlbiBEYXRhYnJpY2tzIEFwcCBgY29uZmlnLmVudmBcbiAqIChmcm9tIHtAbGluayBidW5kbGV9KSBhbmQgaGFyZC1jb2RlZCBgYXBwLnlhbWxgIGVudiBlbnRyaWVzIChmcm9tXG4gKiB7QGxpbmsgYXBwWWFtbH0pLiBPcHQgaW4gdG8gYGNsaWAgd2hlbiBhIGRldiBjb21tYW5kIHdhbnRzIGZsYWcgb3ZlcnJpZGVzLlxuICpcbiAqIFNlcnZlci1vbmx5LCBhbmQgRGF0YWJyaWNrcy1hcHAgc3BlY2lmaWMsIHNvIGl0IGxpdmVzIGluIG5vZGUtYXBwa2l0IHJhdGhlclxuICogdGhhbiBub2RlLWNvcmUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWcgYXMgY29yZUNvbmZpZywgZmlsZSwgcHJvamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IGNvbnRleHQsIG9iamVjdCwgbG9nLCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VZYW1sVGV4dCB9IGZyb20gXCJ5YW1sXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY29uZmlnXCIpO1xuXG4vKiogUGFyc2VkIHBheWxvYWQgZnJvbSBgZGF0YWJyaWNrcyBidW5kbGUgdmFsaWRhdGUgLS1vdXRwdXQganNvbmAuICovXG5leHBvcnQgdHlwZSBCdW5kbGVWYWxpZGF0ZUpzb24gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqIEEgY29uZmlnIGZpbGUgZGlzY292ZXJlZCBvbiBkaXNrIHdpdGggaXRzIHBhcnNlZCBjb250ZW50cy4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ0ZpbGUgPSBjb3JlQ29uZmlnLkNvbmZpZ0ZpbGU7XG5cbi8qKiBTdXBwb3J0ZWQgY29uZmlndXJhdGlvbiBzb3VyY2VzLCBjb25zdWx0ZWQgaW4gYXJyYXkgb3JkZXIuICovXG5leHBvcnQgdHlwZSBDb25maWdTb3VyY2UgPSBcImV4cGxpY2l0XCIgfCBcImNsaVwiIHwgXCJlbnZcIiB8IFwiYnVuZGxlXCI7XG5cbmNvbnN0IGRlZmF1bHRDb25maWdTb3VyY2VzOiBDb25maWdTb3VyY2VbXSA9IFtcImV4cGxpY2l0XCIsIFwiZW52XCIsIFwiYnVuZGxlXCJdO1xuXG5jb25zdCBBUFBfWUFNTF9OQU1FUyA9IFtcImFwcC55YW1sXCIsIFwiYXBwLnltbFwiXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGJ1bmRsZUFwcFJlc291cmNlU2NoZW1hID0gY29yZUNvbmZpZy5idW5kbGVSZXNvdXJjZVNjaGVtYS5leHRlbmQoe1xuICBzcWxfd2FyZWhvdXNlOiB6Lm9iamVjdCh7IGlkOiBjb3JlQ29uZmlnLmJ1bmRsZVZhbHVlLm9wdGlvbmFsKCkgfSkub3B0aW9uYWwoKSxcbiAgZ2VuaWVfc3BhY2U6IHoub2JqZWN0KHsgc3BhY2VfaWQ6IGNvcmVDb25maWcuYnVuZGxlVmFsdWUub3B0aW9uYWwoKSB9KS5vcHRpb25hbCgpLFxuICBwb3N0Z3JlczogelxuICAgIC5vYmplY3Qoe1xuICAgICAgZGF0YWJhc2U6IGNvcmVDb25maWcuYnVuZGxlVmFsdWUub3B0aW9uYWwoKSxcbiAgICAgIGJyYW5jaDogY29yZUNvbmZpZy5idW5kbGVWYWx1ZS5vcHRpb25hbCgpLFxuICAgICAgZW5kcG9pbnQ6IGNvcmVDb25maWcuYnVuZGxlVmFsdWUub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IGJ1bmRsZUFwcFNjaGVtYSA9IGNvcmVDb25maWcuYnVuZGxlQXBwU2NoZW1hLmV4dGVuZCh7XG4gIHJlc291cmNlczogei5hcnJheShidW5kbGVBcHBSZXNvdXJjZVNjaGVtYSkub3B0aW9uYWwoKSxcbn0pO1xuXG5jb25zdCBidW5kbGVWYWxpZGF0ZUFwcHNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHJlc291cmNlczogei5vYmplY3QoeyBhcHBzOiB6LnJlY29yZCh6LnN0cmluZygpLCBidW5kbGVBcHBTY2hlbWEpLm9wdGlvbmFsKCkgfSkub3B0aW9uYWwoKSxcbn0pO1xuXG5jb25zdCBhcHBZYW1sRW52RW50cnlTY2hlbWEgPSBjb3JlQ29uZmlnLmJ1bmRsZUVudkVudHJ5U2NoZW1hLm9taXQoeyB2YWx1ZV9mcm9tOiB0cnVlIH0pLmV4dGVuZCh7XG4gIG5hbWU6IGNvcmVDb25maWcuYnVuZGxlVmFsdWUsXG4gIHZhbHVlRnJvbTogY29yZUNvbmZpZy5idW5kbGVWYWx1ZS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IGFwcFlhbWxSZXNvdXJjZVNjaGVtYSA9IGNvcmVDb25maWcuYnVuZGxlUmVzb3VyY2VTY2hlbWFcbiAgLmV4dGVuZCh7XG4gICAgbmFtZTogY29yZUNvbmZpZy5idW5kbGVWYWx1ZSxcbiAgICBzcWxfd2FyZWhvdXNlOiB6Lm9iamVjdCh7IGlkOiBjb3JlQ29uZmlnLmJ1bmRsZVZhbHVlLm9wdGlvbmFsKCkgfSkub3B0aW9uYWwoKSxcbiAgICBnZW5pZV9zcGFjZTogei5vYmplY3QoeyBzcGFjZV9pZDogY29yZUNvbmZpZy5idW5kbGVWYWx1ZS5vcHRpb25hbCgpIH0pLm9wdGlvbmFsKCksXG4gICAgcG9zdGdyZXM6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBkYXRhYmFzZTogY29yZUNvbmZpZy5idW5kbGVWYWx1ZS5vcHRpb25hbCgpLFxuICAgICAgICBicmFuY2g6IGNvcmVDb25maWcuYnVuZGxlVmFsdWUub3B0aW9uYWwoKSxcbiAgICAgICAgZW5kcG9pbnQ6IGNvcmVDb25maWcuYnVuZGxlVmFsdWUub3B0aW9uYWwoKSxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKCk7XG5cbmNvbnN0IGFwcFlhbWxTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVudjogei5hcnJheShhcHBZYW1sRW52RW50cnlTY2hlbWEpLm9wdGlvbmFsKCksXG4gIHJlc291cmNlczogei5hcnJheShhcHBZYW1sUmVzb3VyY2VTY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcblxudHlwZSBCdW5kbGVBcHAgPSB6LmluZmVyPHR5cGVvZiBidW5kbGVBcHBTY2hlbWE+O1xuXG4vKiogU2luZ2xlIGNvbmZpZyBtYXAgZW50cnkgKHN0cmluZyBvciByZXBlYXRlZCB2YWx1ZXMsIGxpa2UgaGVhZGVycykuICovXG5leHBvcnQgdHlwZSBDb25maWdNYXBWYWx1ZSA9IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVDb25maWdWYWx1ZU9wdGlvbnMge1xuICAvKiogQnVuZGxlIHZhbGlkYXRlIEpTT04uIERlZmF1bHRzIHRvIHtAbGluayBidW5kbGV9IChza2lwcGVkIGluc2lkZSBhIERhdGFicmlja3MgQXBwKS4gKi9cbiAgYnVuZGxlRGF0YT86IENvbmZpZ0ZpbGU7XG4gIC8qKiBQYXJzZWQgYGFwcC55YW1sYCBjb250ZW50cy4gRGVmYXVsdHMgdG8ge0BsaW5rIGFwcFlhbWx9IChza2lwcGVkIGluc2lkZSBhIERhdGFicmlja3MgQXBwKS4gKi9cbiAgYXBwRGF0YT86IENvbmZpZ0ZpbGU7XG4gIC8qKlxuICAgKiBTb3VyY2VzIHRvIGNvbnN1bHQsIGZpcnN0IHRydXRoeSBzdHJpbmcgd2lucy4gRGVmYXVsdHMgdG8gYGV4cGxpY2l0YCwgdGhlblxuICAgKiBgZW52YCwgdGhlbiBgYnVuZGxlYC5cbiAgICovXG4gIHNvdXJjZXM/OiBDb25maWdTb3VyY2VbXTtcbiAgLyoqIFByb2dyYW1tYXRpYyBvdmVycmlkZXMuIFdoZW4gc2V0LCBgZXhwbGljaXRgIGlzIHByZXBlbmRlZCB0byBgc291cmNlc2AgdW5sZXNzIGFscmVhZHkgbGlzdGVkLiAqL1xuICBleHBsaWNpdD86IFJlY29yZDxzdHJpbmcsIENvbmZpZ01hcFZhbHVlPjtcbiAgLyoqIENMSSBmbGFnIHZhbHVlcyAod2hlbiBgY2xpYCBpcyBsaXN0ZWQgaW4gYHNvdXJjZXNgKS4gKi9cbiAgY2xpPzogUmVjb3JkPHN0cmluZywgQ29uZmlnTWFwVmFsdWU+O1xufVxuXG5mdW5jdGlvbiBlbnZLZXlzRm9yTmFtZShuYW1lOiBzdHJpbmcpOiBvYmplY3QuU2VxdWVuY2U8c3RyaW5nPiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSB7XG4gICAgcmV0dXJuIG9iamVjdC5zZXF1ZW5jZSgpO1xuICB9XG4gIGNvbnN0IGtleXMgPSAoZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBtb2RpZmllcnM6ICgoKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZykgfCBudWxsKVtdID0gW1xuICAgICAgbnVsbCxcbiAgICAgICgpID0+IHRyaW1tZWQudG9VcHBlckNhc2UoKSxcbiAgICAgICgpID0+IEFycmF5LmZyb20oc3RyaW5nLnRva2VuaXplKHRyaW1tZWQpKS5qb2luKFwiX1wiKS50b1VwcGVyQ2FzZSgpLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBtb2RpZmllcnMpIHtcbiAgICAgIHlpZWxkIG1vZGlmaWVyID8gbW9kaWZpZXIodHJpbW1lZCkgOiB0cmltbWVkO1xuICAgIH1cbiAgfSkoKTtcbiAgcmV0dXJuIG9iamVjdC5zZXF1ZW5jZShrZXlzKS5jYWNoZSgpLmZpbHRlcihCb29sZWFuKS5kaXN0aW5jdCgpO1xufVxuXG5mdW5jdGlvbiByZWFkRW52KGtleXM6IEl0ZXJhYmxlPHN0cmluZz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudltrZXldPy50cmltKCk7XG4gICAgaWYgKHZhbHVlKSByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhZENvbmZpZ01hcFZhbHVlKHZhbHVlOiBDb25maWdNYXBWYWx1ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBpdGVtPy50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZCkgcmV0dXJuIHRyaW1tZWQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgcmV0dXJuIHRyaW1tZWQgfHwgdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZWFkTWFwKFxuICBrZXlzOiBJdGVyYWJsZTxzdHJpbmc+LFxuICBtYXA6IFJlY29yZDxzdHJpbmcsIENvbmZpZ01hcFZhbHVlPiB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghbWFwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZWFkQ29uZmlnTWFwVmFsdWUobWFwW2tleV0pO1xuICAgIGlmICh2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRBcHBFbnYoa2V5czogSXRlcmFibGU8c3RyaW5nPiwgZW52TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IHZhbHVlID0gZW52TWFwW2tleV0/LnRyaW0oKTtcbiAgICBpZiAodmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwYXJzZVlhbWwodGV4dDogc3RyaW5nKTogdW5rbm93biB7XG4gIHJldHVybiBwYXJzZVlhbWxUZXh0KHRleHQpO1xufVxuXG5mdW5jdGlvbiBwaWNrQXBwUmVzb3VyY2VJZChhcHBzOiBSZWNvcmQ8c3RyaW5nLCBCdW5kbGVBcHA+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFwcHMpO1xuICByZXR1cm4ga2V5cy5sZW5ndGggPT09IDEgPyBrZXlzWzBdIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSB2YWx1ZSBhIGB2YWx1ZV9mcm9tYC9gdmFsdWVGcm9tYCBlbnRyeSBwb2ludHMgYXQ6XG4gKiB0aGUgZmlyc3QgcHJlc2VudCBvZiB0aGUgd2FyZWhvdXNlIGlkLCBHZW5pZSBzcGFjZSBpZCwgb3IgUG9zdGdyZXNcbiAqIGVuZHBvaW50L2RhdGFiYXNlL2JyYW5jaCBvbiB0aGUgbmFtZWQgcmVzb3VyY2UuIFNoYXJlZCBieSBib3RoIHRoZVxuICogYGFwcC55YW1sYCBhbmQgYGJ1bmRsZSB2YWxpZGF0ZWAgZmxhdHRlbmVycywgd2hvc2UgcmVzb3VyY2Ugc2hhcGVzIG1hdGNoLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVzb3VyY2VWYWx1ZShcbiAgcmVzb3VyY2U6IHouaW5mZXI8dHlwZW9mIGJ1bmRsZUFwcFJlc291cmNlU2NoZW1hPiB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAoXG4gICAgcmVzb3VyY2U/LnNxbF93YXJlaG91c2U/LmlkID8/XG4gICAgcmVzb3VyY2U/LmdlbmllX3NwYWNlPy5zcGFjZV9pZCA/P1xuICAgIHJlc291cmNlPy5wb3N0Z3Jlcz8uZW5kcG9pbnQgPz9cbiAgICByZXNvdXJjZT8ucG9zdGdyZXM/LmRhdGFiYXNlID8/XG4gICAgcmVzb3VyY2U/LnBvc3RncmVzPy5icmFuY2hcbiAgKTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGBlbnZgIGVudHJpZXMgZnJvbSBwYXJzZWQgYGFwcC55YW1sYCBjb250ZW50LiBMaXRlcmFsIGB2YWx1ZWAgZW50cmllc1xuICogYXJlIHJldHVybmVkIGFzLWlzOyBgdmFsdWVGcm9tYCBlbnRyaWVzIHJlc29sdmUgYWdhaW5zdCB0aGUgc2libGluZ1xuICogYHJlc291cmNlc2AgYXJyYXkgd2hlbiBwb3NzaWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5BcHBZYW1sRW52KGRhdGE6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gYXBwWWFtbFNjaGVtYS5zYWZlUGFyc2UoZGF0YSk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MgfHwgIXBhcnNlZC5kYXRhLmVudj8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzb3VyY2VCeU5hbWUgPSBuZXcgTWFwKFxuICAgIChwYXJzZWQuZGF0YS5yZXNvdXJjZXMgPz8gW10pLm1hcCgocmVzb3VyY2UpID0+IFtyZXNvdXJjZS5uYW1lLCByZXNvdXJjZV0pLFxuICApO1xuXG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBhcnNlZC5kYXRhLmVudikge1xuICAgIGNvbnN0IHZhbHVlID0gY29yZUNvbmZpZy5idW5kbGVWYWx1ZS5zYWZlUGFyc2UoZW50cnkudmFsdWUpO1xuICAgIGlmICh2YWx1ZS5zdWNjZXNzKSB7XG4gICAgICBvdXRbZW50cnkubmFtZV0gPSB2YWx1ZS5kYXRhO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghZW50cnkudmFsdWVGcm9tKSBjb250aW51ZTtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVSZXNvdXJjZVZhbHVlKHJlc291cmNlQnlOYW1lLmdldChlbnRyeS52YWx1ZUZyb20pKTtcbiAgICBpZiAocmVzb2x2ZWQpIG91dFtlbnRyeS5uYW1lXSA9IHJlc29sdmVkO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogRmxhdHRlbiBgcmVzb3VyY2VzLmFwcHMuPGtleT4uY29uZmlnLmVudmAgaW50byBhIGBuYW1lIC0+IHZhbHVlYCBtYXAuXG4gKiBBdXRvLXBpY2tzIHRoZSBhcHAgb25seSB3aGVuIHRoZSBidW5kbGUgZGVmaW5lcyBleGFjdGx5IG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5BcHBFbnYoZGF0YTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBwYXJzZWQgPSBidW5kbGVWYWxpZGF0ZUFwcHNTY2hlbWEuc2FmZVBhcnNlKGRhdGEpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSByZXR1cm4ge307XG5cbiAgY29uc3QgYXBwcyA9IHBhcnNlZC5kYXRhLnJlc291cmNlcz8uYXBwcztcbiAgaWYgKCFhcHBzIHx8IE9iamVjdC5rZXlzKGFwcHMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IGtleSA9IHBpY2tBcHBSZXNvdXJjZUlkKGFwcHMpO1xuICBpZiAoIWtleSkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IGFwcCA9IGFwcHNba2V5XTtcbiAgaWYgKCFhcHA/LmNvbmZpZz8uZW52Py5sZW5ndGgpIHJldHVybiB7fTtcblxuICBjb25zdCByZXNvdXJjZUJ5TmFtZSA9IG5ldyBNYXAoXG4gICAgKGFwcC5yZXNvdXJjZXMgPz8gW10pXG4gICAgICAuZmlsdGVyKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UubmFtZSlcbiAgICAgIC5tYXAoKHJlc291cmNlKSA9PiBbcmVzb3VyY2UubmFtZSEsIHJlc291cmNlXSksXG4gICk7XG5cbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgZW50cnkgb2YgYXBwLmNvbmZpZy5lbnYpIHtcbiAgICBpZiAoIWVudHJ5Lm5hbWUpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gY29yZUNvbmZpZy5idW5kbGVWYWx1ZS5zYWZlUGFyc2UoZW50cnkudmFsdWUpO1xuICAgIGlmICh2YWx1ZS5zdWNjZXNzKSB7XG4gICAgICBvdXRbZW50cnkubmFtZV0gPSB2YWx1ZS5kYXRhO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghZW50cnkudmFsdWVfZnJvbSkgY29udGludWU7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUmVzb3VyY2VWYWx1ZShyZXNvdXJjZUJ5TmFtZS5nZXQoZW50cnkudmFsdWVfZnJvbSkpO1xuICAgIGlmIChyZXNvbHZlZCkgb3V0W2VudHJ5Lm5hbWVdID0gcmVzb2x2ZWQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZEFwcFlhbWwoY3dkOiBzdHJpbmcpOiBQcm9taXNlPENvbmZpZ0ZpbGUgfCB1bmRlZmluZWQ+IHtcbiAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBBUFBfWUFNTF9OQU1FUykge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSByZXNvbHZlQ29uZmlnRmlsZShjd2QsIGZpbGVOYW1lKTtcbiAgICBpZiAoIWNvbmZpZ0ZpbGUpIGNvbnRpbnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVhZEZpbGUoY29uZmlnRmlsZSwgXCJ1dGY4XCIpO1xuICAgICAgY29uc3QgZGF0YSA9IHBhcnNlWWFtbCh0ZXh0KTtcbiAgICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBwYXRoOiBjb25maWdGaWxlLCBkYXRhIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIud2FybihcImZhaWxlZCB0byBwYXJzZSBhcHAgeWFtbFwiLCB7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25maWdGaWxlKGN3ZDogc3RyaW5nLCBjb25maWdGaWxlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY29yZUNvbmZpZy5pc0RhdGFicmlja3NBcHBFbnYoKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCByb290RGlyIG9mIHByb2plY3QucmVzb2x2ZVByb2plY3RSb290cyhjd2QpKSB7XG4gICAgY29uc3QgYnVuZGxlUGF0aCA9IHJlc29sdmUocm9vdERpciwgY29uZmlnRmlsZSk7XG4gICAgaWYgKGZpbGUuc3RhdFN5bmMoYnVuZGxlUGF0aCk/LmlzRmlsZSgpKSByZXR1cm4gYnVuZGxlUGF0aDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSB2YWxpZGF0ZWQgYnVuZGxlIGZvciBgY3dkYCAtIHtAbGluayBjb3JlQ29uZmlnLmJ1bmRsZUZpbGV9LCB3aGljaCBjYWNoZXMgaXRcbiAqIHBlciB3b3JraW5nIGRpcmVjdG9yeS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpbnNpZGUgYSBEYXRhYnJpY2tzIEFwcCwgd2hlcmUgdGhlXG4gKiBwbGF0Zm9ybSBoYXMgYWxyZWFkeSB0dXJuZWQgYGNvbmZpZy5lbnZgIGludG8gcmVhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kXG4gKiB0aGVyZSBpcyBubyBidW5kbGUgdG8gdmFsaWRhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidW5kbGUoY3dkPzogc3RyaW5nKTogUHJvbWlzZTxDb25maWdGaWxlIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29yZUNvbmZpZy5pc0RhdGFicmlja3NBcHBFbnYoKSA/IHVuZGVmaW5lZCA6IGNvcmVDb25maWcuYnVuZGxlRmlsZShjd2QpKTtcbn1cblxuLyoqXG4gKiBMb2NhdGUgYW5kIHBhcnNlIGBhcHAueWFtbGAgLyBgYXBwLnltbGAgZnJvbSB0aGUgYnVuZGxlIG9yIHByb2plY3Qgcm9vdC5cbiAqIENhY2hlZCBwZXIgd29ya2luZyBkaXJlY3RvcnkgdGhyb3VnaCB7QGxpbmsgY29udGV4dC5jYWNoZWR9LCBzbyBhIGBjd2RgIGNoYW5nZVxuICogcmUtcmVhZHMgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW5vdGhlciBwcm9qZWN0J3MgZmlsZS4gUmV0dXJucyBgdW5kZWZpbmVkYFxuICogaW5zaWRlIGEgRGF0YWJyaWNrcyBBcHAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBZYW1sKGN3ZD86IHN0cmluZyk6IFByb21pc2U8Q29uZmlnRmlsZSB8IHVuZGVmaW5lZD4ge1xuICBpZiAoY29yZUNvbmZpZy5pc0RhdGFicmlja3NBcHBFbnYoKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICByZXR1cm4gY29udGV4dC5jYWNoZWQoW1wiYXBwa2l0XCIsIFwiYXBwWWFtbFwiXSwgKHJlc29sdmVkKSA9PiBsb2FkQXBwWWFtbChyZXNvbHZlZCA/PyBcIi5cIiksIGN3ZCk7XG59XG5cbi8qKlxuICogV2FsayBhIGRvdC1zZXBhcmF0ZWQgcGF0aCB0aHJvdWdoIGJ1bmRsZSB2YWxpZGF0ZSBKU09OLiBXaGVuIHRoZSB0ZXJtaW5hbFxuICogbm9kZSBpcyBhIGJ1bmRsZSB2YXJpYWJsZSBvYmplY3QgKGB7IHZhbHVlOiBcIi4uLlwiIH1gKSwgdGhlIGB2YWx1ZWAgZmllbGQgaXNcbiAqIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVuZGxlUGF0aChkYXRhOiBCdW5kbGVWYWxpZGF0ZUpzb24sIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGxldCBjdXJyZW50OiB1bmtub3duID0gZGF0YTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKGN1cnJlbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXSE7XG4gICAgY29uc3QgbmV4dCA9IGN1cnJlbnRbcGFydF07XG4gICAgaWYgKGkgPT09IHBhcnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dCA9PT0gXCJzdHJpbmdcIiAmJiBuZXh0KSByZXR1cm4gbmV4dDtcbiAgICAgIGlmIChvYmplY3QuaXNSZWNvcmQobmV4dCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBuZXh0LnZhbHVlO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjdXJyZW50ID0gbmV4dDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQXBwRW52TWFwKFxuICBvcHRpb25zOiBSZXNvbHZlQ29uZmlnVmFsdWVPcHRpb25zLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGFwcERhdGEgPSBvcHRpb25zLmFwcERhdGEgPz8gKGF3YWl0IGFwcFlhbWwoKSk7XG4gIGNvbnN0IGJ1bmRsZURhdGEgPSBvcHRpb25zLmJ1bmRsZURhdGEgPz8gKGF3YWl0IGJ1bmRsZSgpKTtcbiAgY29uc3QgZnJvbVlhbWwgPSBhcHBEYXRhID8gZmxhdHRlbkFwcFlhbWxFbnYoYXBwRGF0YS5kYXRhKSA6IHt9O1xuICBjb25zdCBmcm9tQnVuZGxlID0gYnVuZGxlRGF0YSA/IGZsYXR0ZW5BcHBFbnYoYnVuZGxlRGF0YS5kYXRhKSA6IHt9O1xuICByZXR1cm4geyAuLi5mcm9tWWFtbCwgLi4uZnJvbUJ1bmRsZSB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlU291cmNlcyhvcHRpb25zOiBSZXNvbHZlQ29uZmlnVmFsdWVPcHRpb25zKTogQ29uZmlnU291cmNlW10ge1xuICBjb25zdCBzb3VyY2VzID0gWy4uLihvcHRpb25zLnNvdXJjZXMgPz8gZGVmYXVsdENvbmZpZ1NvdXJjZXMpXTtcbiAgaWYgKG9wdGlvbnMuZXhwbGljaXQgIT09IHVuZGVmaW5lZCAmJiAhc291cmNlcy5pbmNsdWRlcyhcImV4cGxpY2l0XCIpKSB7XG4gICAgc291cmNlcy51bnNoaWZ0KFwiZXhwbGljaXRcIik7XG4gIH1cbiAgcmV0dXJuIHNvdXJjZXM7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nIGZyb20gdGhlIGNvbmZpZ3VyZWQgc291cmNlcy4gUmV0dXJucyB0aGUgZmlyc3RcbiAqIG5vbi1lbXB0eSB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBub3RoaW5nIG1hdGNoZXMuXG4gKlxuICogUHJlY2VkZW5jZSBmb2xsb3dzIEFwcEtpdCdzOiBleHBsaWNpdCBjb25maWcsIHRoZW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZW5cbiAqIHdoYXRldmVyIHRoZSBEYXRhYnJpY2tzIEFwcCAvIGJ1bmRsZSBkZWZpbml0aW9uIHN1cHBsaWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBidW5kbGUgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBjb25zdCB3YXJlaG91c2VJZCA9IGF3YWl0IGJ1bmRsZS5yZXNvbHZlQ29uZmlnVmFsdWUoXCJEQVRBQlJJQ0tTX1dBUkVIT1VTRV9JRFwiLCB7XG4gKiAgIGNsaTogeyBEQVRBQlJJQ0tTX1dBUkVIT1VTRV9JRDogZmxhZ3Mud2FyZWhvdXNlIH0sXG4gKiAgIHNvdXJjZXM6IGJ1bmRsZS53aXRoQ2xpU291cmNlcygpLFxuICogfSk7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQ29uZmlnVmFsdWUoXG4gIG5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZUNvbmZpZ1ZhbHVlT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qga2V5cyA9IGVudktleXNGb3JOYW1lKG5hbWUpLnRvQXJyYXkoKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBzb3VyY2VzID0gcmVzb2x2ZVNvdXJjZXMob3B0aW9ucyk7XG4gIGxldCBhcHBFbnZNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHZhbHVlcyA9IChhc3luYyBmdW5jdGlvbiogKCkge1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgIHN3aXRjaCAoc291cmNlKSB7XG4gICAgICAgIGNhc2UgXCJleHBsaWNpdFwiOlxuICAgICAgICAgIHlpZWxkIHJlYWRNYXAoa2V5cywgb3B0aW9ucy5leHBsaWNpdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjbGlcIjpcbiAgICAgICAgICB5aWVsZCByZWFkTWFwKGtleXMsIG9wdGlvbnMuY2xpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImVudlwiOlxuICAgICAgICAgIHlpZWxkIHJlYWRFbnYoa2V5cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJidW5kbGVcIjpcbiAgICAgICAgICBpZiAoYXBwRW52TWFwID09PSB1bmRlZmluZWQpIGFwcEVudk1hcCA9IGF3YWl0IHJlc29sdmVBcHBFbnZNYXAob3B0aW9ucyk7XG4gICAgICAgICAgeWllbGQgcmVhZEFwcEVudihrZXlzLCBhcHBFbnZNYXApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICAgICAgICBcInNvdXJjZXNcIixcbiAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgIFwib25lIG9mOiBleHBsaWNpdCwgY2xpLCBlbnYsIGJ1bmRsZVwiLFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9KSgpO1xuICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU291cmNlcyB3aXRoIGBjbGlgIGluY2x1ZGVkLCBpbiBDTEktZmlyc3Qgb3JkZXIuIFVzZSBmb3IgZGV2IGNvbW1hbmRzIHRoYXRcbiAqIGFjY2VwdCBmbGFnIG92ZXJyaWRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDbGlTb3VyY2VzKHNvdXJjZXM6IENvbmZpZ1NvdXJjZVtdID0gZGVmYXVsdENvbmZpZ1NvdXJjZXMpOiBDb25maWdTb3VyY2VbXSB7XG4gIGNvbnN0IHJlc3QgPSBzb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UgIT09IFwiY2xpXCIgJiYgc291cmNlICE9PSBcImV4cGxpY2l0XCIpO1xuICByZXR1cm4gW1wiY2xpXCIsIFwiZXhwbGljaXRcIiwgLi4ucmVzdF07XG59XG4iXX0=
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1bmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFjcEMsTUFBTSxvQkFBb0IsR0FBbUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBRTNFLE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBVSxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7SUFDNUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzdFLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FB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M0UsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUM7SUFDbkYsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEQVRBQlJJQ0tTLUFQUCBjb25maWd1cmF0aW9uIHJlc29sdXRpb246IHRoZSBidW5kbGUgYW5kIGBhcHAueWFtbGAgdm9jYWJ1bGFyeS5cbiAqXG4gKiBub2RlLWNvcmUncyBgY29uZmlnYCBtb2R1bGUgb3ducyB0aGUgZ2VuZXJpYyBsb29rdXAgLSBlbnZpcm9ubWVudCwgYC5lbnZgLFxuICogYGRhdGFicmlja3MgYnVuZGxlIHZhbGlkYXRlYCAtIGFuZCBrbm93cyBub3RoaW5nIGFib3V0IHdoYXQgYSBidW5kbGUgcmVzb3VyY2VcbiAqIElTLiBUaGF0IGxhc3QgcGFydCBpcyB0aGlzIG1vZHVsZTogYHNxbF93YXJlaG91c2VgLCBgZ2VuaWVfc3BhY2VgLCBhbmRcbiAqIGBwb3N0Z3Jlc2AgYXJlIERhdGFicmlja3MtQXBwIGNvbmNlcHRzLCBhbmQgYW4gYGFwcC55YW1sYCAvIGJ1bmRsZVxuICogYHZhbHVlX2Zyb21gIGVudHJ5IGlzIGEgUkVGRVJFTkNFIHRvIG9uZSBvZiB0aGVtIHdob3NlIHJlYWwgdmFsdWUgaXMgdGhlXG4gKiB3YXJlaG91c2UgaWQgb3IgR2VuaWUgc3BhY2UgaWQgc2l0dGluZyBvbiB0aGUgbmFtZWQgcmVzb3VyY2UuIFNvIHRoaXMgbW9kdWxlXG4gKiBleHRlbmRzIG5vZGUtY29yZSdzIHJlc291cmNlIHNjaGVtYSwgYWRkcyBgYXBwLnlhbWxgICh3aGljaCB0aGUgYnVuZGxlIENMSVxuICogbmV2ZXIgc2VlcyksIGFuZCByZXNvbHZlcyB0aG9zZSByZWZlcmVuY2VzLlxuICpcbiAqIERlZmF1bHQgc291cmNlczogYGV4cGxpY2l0YCwgdGhlbiBgZW52YCwgdGhlbiBEYXRhYnJpY2tzIEFwcCBgY29uZmlnLmVudmBcbiAqIChmcm9tIHtAbGluayBidW5kbGV9KSBhbmQgaGFyZC1jb2RlZCBgYXBwLnlhbWxgIGVudiBlbnRyaWVzIChmcm9tXG4gKiB7QGxpbmsgYXBwWWFtbH0pLiBPcHQgaW4gdG8gYGNsaWAgd2hlbiBhIGRldiBjb21tYW5kIHdhbnRzIGZsYWcgb3ZlcnJpZGVzLlxuICpcbiAqIFNlcnZlci1vbmx5LCBhbmQgRGF0YWJyaWNrcy1hcHAgc3BlY2lmaWMsIHNvIGl0IGxpdmVzIGluIG5vZGUtYXBwa2l0IHJhdGhlclxuICogdGhhbiBub2RlLWNvcmUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWcgYXMgY29yZUNvbmZpZywgZmlsZSwgcHJvamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IGNvbnRleHQsIG9iamVjdCwgbG9nLCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgcGFyc2UgYXMgeWFtbFBhcnNlIH0gZnJvbSBcInlhbWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJjb25maWdcIik7XG5cbi8qKiBQYXJzZWQgcGF5bG9hZCBmcm9tIGBkYXRhYnJpY2tzIGJ1bmRsZSB2YWxpZGF0ZSAtLW91dHB1dCBqc29uYC4gKi9cbmV4cG9ydCB0eXBlIEJ1bmRsZVZhbGlkYXRlSnNvbiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKiogQSBjb25maWcgZmlsZSBkaXNjb3ZlcmVkIG9uIGRpc2sgd2l0aCBpdHMgcGFyc2VkIGNvbnRlbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdGaWxlIHtcbiAgcGF0aDogc3RyaW5nO1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIFN1cHBvcnRlZCBjb25maWd1cmF0aW9uIHNvdXJjZXMsIGNvbnN1bHRlZCBpbiBhcnJheSBvcmRlci4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ1NvdXJjZSA9IFwiZXhwbGljaXRcIiB8IFwiY2xpXCIgfCBcImVudlwiIHwgXCJidW5kbGVcIjtcblxuY29uc3QgZGVmYXVsdENvbmZpZ1NvdXJjZXM6IENvbmZpZ1NvdXJjZVtdID0gW1wiZXhwbGljaXRcIiwgXCJlbnZcIiwgXCJidW5kbGVcIl07XG5cbmNvbnN0IEFQUF9ZQU1MX05BTUVTID0gW1wiYXBwLnlhbWxcIiwgXCJhcHAueW1sXCJdIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgYnVuZGxlQXBwUmVzb3VyY2VTY2hlbWEgPSBjb3JlQ29uZmlnLmJ1bmRsZVJlc291cmNlU2NoZW1hLmV4dGVuZCh7XG4gIHNxbF93YXJlaG91c2U6IHoub2JqZWN0KHsgaWQ6IGNvcmVDb25maWcudmFsdWVTY2hlbWEub3B0aW9uYWwoKSB9KS5vcHRpb25hbCgpLFxuICBnZW5pZV9zcGFjZTogei5vYmplY3QoeyBzcGFjZV9pZDogY29yZUNvbmZpZy52YWx1ZVNjaGVtYS5vcHRpb25hbCgpIH0pLm9wdGlvbmFsKCksXG4gIHBvc3RncmVzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBkYXRhYmFzZTogY29yZUNvbmZpZy52YWx1ZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgYnJhbmNoOiBjb3JlQ29uZmlnLnZhbHVlU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgICBlbmRwb2ludDogY29yZUNvbmZpZy52YWx1ZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgYnVuZGxlQXBwU2NoZW1hID0gY29yZUNvbmZpZy5idW5kbGVBcHBTY2hlbWEuZXh0ZW5kKHtcbiAgcmVzb3VyY2VzOiB6LmFycmF5KGJ1bmRsZUFwcFJlc291cmNlU2NoZW1hKS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IGJ1bmRsZVZhbGlkYXRlQXBwc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgcmVzb3VyY2VzOiB6Lm9iamVjdCh7IGFwcHM6IHoucmVjb3JkKHouc3RyaW5nKCksIGJ1bmRsZUFwcFNjaGVtYSkub3B0aW9uYWwoKSB9KS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IGFwcFlhbWxFbnZFbnRyeVNjaGVtYSA9IGNvcmVDb25maWcuYnVuZGxlRW52RW50cnlTY2hlbWEub21pdCh7IHZhbHVlX2Zyb206IHRydWUgfSkuZXh0ZW5kKHtcbiAgbmFtZTogY29yZUNvbmZpZy52YWx1ZVNjaGVtYSxcbiAgdmFsdWVGcm9tOiBjb3JlQ29uZmlnLnZhbHVlU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgYXBwWWFtbFJlc291cmNlU2NoZW1hID0gY29yZUNvbmZpZy5idW5kbGVSZXNvdXJjZVNjaGVtYVxuICAuZXh0ZW5kKHtcbiAgICBuYW1lOiBjb3JlQ29uZmlnLnZhbHVlU2NoZW1hLFxuICAgIHNxbF93YXJlaG91c2U6IHoub2JqZWN0KHsgaWQ6IGNvcmVDb25maWcudmFsdWVTY2hlbWEub3B0aW9uYWwoKSB9KS5vcHRpb25hbCgpLFxuICAgIGdlbmllX3NwYWNlOiB6Lm9iamVjdCh7IHNwYWNlX2lkOiBjb3JlQ29uZmlnLnZhbHVlU2NoZW1hLm9wdGlvbmFsKCkgfSkub3B0aW9uYWwoKSxcbiAgICBwb3N0Z3JlczogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIGRhdGFiYXNlOiBjb3JlQ29uZmlnLnZhbHVlU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgICAgIGJyYW5jaDogY29yZUNvbmZpZy52YWx1ZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgICBlbmRwb2ludDogY29yZUNvbmZpZy52YWx1ZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25hbCgpLFxuICB9KVxuICAucGFzc3Rocm91Z2goKTtcblxuY29uc3QgYXBwWWFtbFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW52OiB6LmFycmF5KGFwcFlhbWxFbnZFbnRyeVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgcmVzb3VyY2VzOiB6LmFycmF5KGFwcFlhbWxSZXNvdXJjZVNjaGVtYSkub3B0aW9uYWwoKSxcbn0pO1xuXG50eXBlIEJ1bmRsZUFwcCA9IHouaW5mZXI8dHlwZW9mIGJ1bmRsZUFwcFNjaGVtYT47XG5cbi8qKiBTaW5nbGUgY29uZmlnIG1hcCBlbnRyeSAoc3RyaW5nIG9yIHJlcGVhdGVkIHZhbHVlcywgbGlrZSBoZWFkZXJzKS4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ01hcFZhbHVlID0gc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUNvbmZpZ1ZhbHVlT3B0aW9ucyB7XG4gIC8qKiBCdW5kbGUgdmFsaWRhdGUgSlNPTi4gRGVmYXVsdHMgdG8ge0BsaW5rIGJ1bmRsZX0gKHNraXBwZWQgaW5zaWRlIGEgRGF0YWJyaWNrcyBBcHApLiAqL1xuICBidW5kbGVEYXRhPzogQ29uZmlnRmlsZTtcbiAgLyoqIFBhcnNlZCBgYXBwLnlhbWxgIGNvbnRlbnRzLiBEZWZhdWx0cyB0byB7QGxpbmsgYXBwWWFtbH0gKHNraXBwZWQgaW5zaWRlIGEgRGF0YWJyaWNrcyBBcHApLiAqL1xuICBhcHBEYXRhPzogQ29uZmlnRmlsZTtcbiAgLyoqXG4gICAqIFNvdXJjZXMgdG8gY29uc3VsdCwgZmlyc3QgdHJ1dGh5IHN0cmluZyB3aW5zLiBEZWZhdWx0cyB0byBgZXhwbGljaXRgLCB0aGVuXG4gICAqIGBlbnZgLCB0aGVuIGBidW5kbGVgLlxuICAgKi9cbiAgc291cmNlcz86IENvbmZpZ1NvdXJjZVtdO1xuICAvKiogUHJvZ3JhbW1hdGljIG92ZXJyaWRlcy4gV2hlbiBzZXQsIGBleHBsaWNpdGAgaXMgcHJlcGVuZGVkIHRvIGBzb3VyY2VzYCB1bmxlc3MgYWxyZWFkeSBsaXN0ZWQuICovXG4gIGV4cGxpY2l0PzogUmVjb3JkPHN0cmluZywgQ29uZmlnTWFwVmFsdWU+O1xuICAvKiogQ0xJIGZsYWcgdmFsdWVzICh3aGVuIGBjbGlgIGlzIGxpc3RlZCBpbiBgc291cmNlc2ApLiAqL1xuICBjbGk/OiBSZWNvcmQ8c3RyaW5nLCBDb25maWdNYXBWYWx1ZT47XG59XG5cbmZ1bmN0aW9uIGVudktleXNGb3JOYW1lKG5hbWU6IHN0cmluZyk6IG9iamVjdC5TZXF1ZW5jZTxzdHJpbmc+IHtcbiAgY29uc3QgdHJpbW1lZCA9IG5hbWUudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHtcbiAgICByZXR1cm4gb2JqZWN0LnNlcXVlbmNlKCk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IChmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IG1vZGlmaWVyczogKCgodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKSB8IG51bGwpW10gPSBbXG4gICAgICBudWxsLFxuICAgICAgKCkgPT4gdHJpbW1lZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgKCkgPT4gQXJyYXkuZnJvbShzdHJpbmcudG9rZW5pemUodHJpbW1lZCkpLmpvaW4oXCJfXCIpLnRvVXBwZXJDYXNlKCksXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IG1vZGlmaWVyIG9mIG1vZGlmaWVycykge1xuICAgICAgeWllbGQgbW9kaWZpZXIgPyBtb2RpZmllcih0cmltbWVkKSA6IHRyaW1tZWQ7XG4gICAgfVxuICB9KSgpO1xuICByZXR1cm4gb2JqZWN0LnNlcXVlbmNlKGtleXMpLmNhY2hlKCkuZmlsdGVyKEJvb2xlYW4pLmRpc3RpbmN0KCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRFbnYoa2V5czogSXRlcmFibGU8c3RyaW5nPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52W2tleV0/LnRyaW0oKTtcbiAgICBpZiAodmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZWFkQ29uZmlnTWFwVmFsdWUodmFsdWU6IENvbmZpZ01hcFZhbHVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgY29uc3QgdHJpbW1lZCA9IGl0ZW0/LnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkKSByZXR1cm4gdHJpbW1lZDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZCB8fCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXAoXG4gIGtleXM6IEl0ZXJhYmxlPHN0cmluZz4sXG4gIG1hcDogUmVjb3JkPHN0cmluZywgQ29uZmlnTWFwVmFsdWU+IHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFtYXApIHJldHVybiB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlYWRDb25maWdNYXBWYWx1ZShtYXBba2V5XSk7XG4gICAgaWYgKHZhbHVlKSByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhZEFwcEVudihrZXlzOiBJdGVyYWJsZTxzdHJpbmc+LCBlbnZNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBlbnZNYXBba2V5XT8udHJpbSgpO1xuICAgIGlmICh2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWFtbCh0ZXh0OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgcmV0dXJuIHlhbWxQYXJzZSh0ZXh0KTtcbn1cblxuZnVuY3Rpb24gcGlja0FwcFJlc291cmNlSWQoYXBwczogUmVjb3JkPHN0cmluZywgQnVuZGxlQXBwPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcHBzKTtcbiAgcmV0dXJuIGtleXMubGVuZ3RoID09PSAxID8ga2V5c1swXSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBlZmZlY3RpdmUgdmFsdWUgYSBgdmFsdWVfZnJvbWAvYHZhbHVlRnJvbWAgZW50cnkgcG9pbnRzIGF0OlxuICogdGhlIGZpcnN0IHByZXNlbnQgb2YgdGhlIHdhcmVob3VzZSBpZCwgR2VuaWUgc3BhY2UgaWQsIG9yIFBvc3RncmVzXG4gKiBlbmRwb2ludC9kYXRhYmFzZS9icmFuY2ggb24gdGhlIG5hbWVkIHJlc291cmNlLiBTaGFyZWQgYnkgYm90aCB0aGVcbiAqIGBhcHAueWFtbGAgYW5kIGBidW5kbGUgdmFsaWRhdGVgIGZsYXR0ZW5lcnMsIHdob3NlIHJlc291cmNlIHNoYXBlcyBtYXRjaC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlc291cmNlVmFsdWUoXG4gIHJlc291cmNlOiB6LmluZmVyPHR5cGVvZiBidW5kbGVBcHBSZXNvdXJjZVNjaGVtYT4gfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKFxuICAgIHJlc291cmNlPy5zcWxfd2FyZWhvdXNlPy5pZCA/P1xuICAgIHJlc291cmNlPy5nZW5pZV9zcGFjZT8uc3BhY2VfaWQgPz9cbiAgICByZXNvdXJjZT8ucG9zdGdyZXM/LmVuZHBvaW50ID8/XG4gICAgcmVzb3VyY2U/LnBvc3RncmVzPy5kYXRhYmFzZSA/P1xuICAgIHJlc291cmNlPy5wb3N0Z3Jlcz8uYnJhbmNoXG4gICk7XG59XG5cbi8qKlxuICogRmxhdHRlbiBgZW52YCBlbnRyaWVzIGZyb20gcGFyc2VkIGBhcHAueWFtbGAgY29udGVudC4gTGl0ZXJhbCBgdmFsdWVgIGVudHJpZXNcbiAqIGFyZSByZXR1cm5lZCBhcy1pczsgYHZhbHVlRnJvbWAgZW50cmllcyByZXNvbHZlIGFnYWluc3QgdGhlIHNpYmxpbmdcbiAqIGByZXNvdXJjZXNgIGFycmF5IHdoZW4gcG9zc2libGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQXBwWWFtbEVudihkYXRhOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHBhcnNlZCA9IGFwcFlhbWxTY2hlbWEuc2FmZVBhcnNlKGRhdGEpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzIHx8ICFwYXJzZWQuZGF0YS5lbnY/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc291cmNlQnlOYW1lID0gbmV3IE1hcChcbiAgICAocGFyc2VkLmRhdGEucmVzb3VyY2VzID8/IFtdKS5tYXAoKHJlc291cmNlKSA9PiBbcmVzb3VyY2UubmFtZSwgcmVzb3VyY2VdKSxcbiAgKTtcblxuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwYXJzZWQuZGF0YS5lbnYpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvcmVDb25maWcudmFsdWVTY2hlbWEuc2FmZVBhcnNlKGVudHJ5LnZhbHVlKTtcbiAgICBpZiAodmFsdWUuc3VjY2Vzcykge1xuICAgICAgb3V0W2VudHJ5Lm5hbWVdID0gdmFsdWUuZGF0YTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWVudHJ5LnZhbHVlRnJvbSkgY29udGludWU7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUmVzb3VyY2VWYWx1ZShyZXNvdXJjZUJ5TmFtZS5nZXQoZW50cnkudmFsdWVGcm9tKSk7XG4gICAgaWYgKHJlc29sdmVkKSBvdXRbZW50cnkubmFtZV0gPSByZXNvbHZlZDtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYHJlc291cmNlcy5hcHBzLjxrZXk+LmNvbmZpZy5lbnZgIGludG8gYSBgbmFtZSAtPiB2YWx1ZWAgbWFwLlxuICogQXV0by1waWNrcyB0aGUgYXBwIG9ubHkgd2hlbiB0aGUgYnVuZGxlIGRlZmluZXMgZXhhY3RseSBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQXBwRW52KGRhdGE6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gYnVuZGxlVmFsaWRhdGVBcHBzU2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IGFwcHMgPSBwYXJzZWQuZGF0YS5yZXNvdXJjZXM/LmFwcHM7XG4gIGlmICghYXBwcyB8fCBPYmplY3Qua2V5cyhhcHBzKS5sZW5ndGggPT09IDApIHJldHVybiB7fTtcblxuICBjb25zdCBrZXkgPSBwaWNrQXBwUmVzb3VyY2VJZChhcHBzKTtcbiAgaWYgKCFrZXkpIHJldHVybiB7fTtcblxuICBjb25zdCBhcHAgPSBhcHBzW2tleV07XG4gIGlmICghYXBwPy5jb25maWc/LmVudj8ubGVuZ3RoKSByZXR1cm4ge307XG5cbiAgY29uc3QgcmVzb3VyY2VCeU5hbWUgPSBuZXcgTWFwKFxuICAgIChhcHAucmVzb3VyY2VzID8/IFtdKVxuICAgICAgLmZpbHRlcigocmVzb3VyY2UpID0+IHJlc291cmNlLm5hbWUpXG4gICAgICAubWFwKChyZXNvdXJjZSkgPT4gW3Jlc291cmNlLm5hbWUhLCByZXNvdXJjZV0pLFxuICApO1xuXG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFwcC5jb25maWcuZW52KSB7XG4gICAgaWYgKCFlbnRyeS5uYW1lKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IGNvcmVDb25maWcudmFsdWVTY2hlbWEuc2FmZVBhcnNlKGVudHJ5LnZhbHVlKTtcbiAgICBpZiAodmFsdWUuc3VjY2Vzcykge1xuICAgICAgb3V0W2VudHJ5Lm5hbWVdID0gdmFsdWUuZGF0YTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWVudHJ5LnZhbHVlX2Zyb20pIGNvbnRpbnVlO1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVJlc291cmNlVmFsdWUocmVzb3VyY2VCeU5hbWUuZ2V0KGVudHJ5LnZhbHVlX2Zyb20pKTtcbiAgICBpZiAocmVzb2x2ZWQpIG91dFtlbnRyeS5uYW1lXSA9IHJlc29sdmVkO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRBcHBZYW1sKGN3ZDogc3RyaW5nKTogUHJvbWlzZTxDb25maWdGaWxlIHwgdW5kZWZpbmVkPiB7XG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgQVBQX1lBTUxfTkFNRVMpIHtcbiAgICBjb25zdCBjb25maWdGaWxlID0gcmVzb2x2ZUNvbmZpZ0ZpbGUoY3dkLCBmaWxlTmFtZSk7XG4gICAgaWYgKCFjb25maWdGaWxlKSBjb250aW51ZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlYWRGaWxlKGNvbmZpZ0ZpbGUsIFwidXRmOFwiKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBwYXJzZVlhbWwodGV4dCk7XG4gICAgICBpZiAoIW9iamVjdC5pc1JlY29yZChkYXRhKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgcGF0aDogY29uZmlnRmlsZSwgZGF0YSB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgbG9nZ2VyLndhcm4oXCJmYWlsZWQgdG8gcGFyc2UgYXBwIHlhbWxcIiwgeyBwYXRoOiBjb25maWdGaWxlIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29uZmlnRmlsZShjd2Q6IHN0cmluZywgY29uZmlnRmlsZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvcmVDb25maWcuaXNEYXRhYnJpY2tzQXBwRW52KCkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3Qgcm9vdERpciBvZiBwcm9qZWN0LnJlc29sdmVQcm9qZWN0Um9vdHMoY3dkKSkge1xuICAgIGNvbnN0IGJ1bmRsZVBhdGggPSByZXNvbHZlKHJvb3REaXIsIGNvbmZpZ0ZpbGUpO1xuICAgIGlmIChmaWxlLnN0YXRTeW5jKGJ1bmRsZVBhdGgpPy5pc0ZpbGUoKSkgcmV0dXJuIGJ1bmRsZVBhdGg7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgdmFsaWRhdGVkIGJ1bmRsZSBmb3IgYGN3ZGAgLSB7QGxpbmsgY29yZUNvbmZpZy5idW5kbGVGaWxlfSwgd2hpY2ggY2FjaGVzIGl0XG4gKiBwZXIgd29ya2luZyBkaXJlY3RvcnkuIFJldHVybnMgYHVuZGVmaW5lZGAgaW5zaWRlIGEgRGF0YWJyaWNrcyBBcHAsIHdoZXJlIHRoZVxuICogcGxhdGZvcm0gaGFzIGFscmVhZHkgdHVybmVkIGBjb25maWcuZW52YCBpbnRvIHJlYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZFxuICogdGhlcmUgaXMgbm8gYnVuZGxlIHRvIHZhbGlkYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVuZGxlKGN3ZD86IHN0cmluZyk6IFByb21pc2U8Q29uZmlnRmlsZSB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvcmVDb25maWcuaXNEYXRhYnJpY2tzQXBwRW52KCkgPyB1bmRlZmluZWQgOiBjb3JlQ29uZmlnLmJ1bmRsZUZpbGUoY3dkKSk7XG59XG5cbi8qKlxuICogTG9jYXRlIGFuZCBwYXJzZSBgYXBwLnlhbWxgIC8gYGFwcC55bWxgIGZyb20gdGhlIGJ1bmRsZSBvciBwcm9qZWN0IHJvb3QuXG4gKiBDYWNoZWQgcGVyIHdvcmtpbmcgZGlyZWN0b3J5IHRocm91Z2gge0BsaW5rIGNvbnRleHQuY2FjaGVkfSwgc28gYSBgY3dkYCBjaGFuZ2VcbiAqIHJlLXJlYWRzIGluc3RlYWQgb2YgcmV0dXJuaW5nIGFub3RoZXIgcHJvamVjdCdzIGZpbGUuIFJldHVybnMgYHVuZGVmaW5lZGBcbiAqIGluc2lkZSBhIERhdGFicmlja3MgQXBwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwWWFtbChjd2Q/OiBzdHJpbmcpOiBQcm9taXNlPENvbmZpZ0ZpbGUgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKGNvcmVDb25maWcuaXNEYXRhYnJpY2tzQXBwRW52KCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgcmV0dXJuIGNvbnRleHQuY2FjaGVkKFtcImFwcGtpdFwiLCBcImFwcFlhbWxcIl0sIChyZXNvbHZlZCkgPT4gbG9hZEFwcFlhbWwocmVzb2x2ZWQgPz8gXCIuXCIpLCBjd2QpO1xufVxuXG4vKipcbiAqIFdhbGsgYSBkb3Qtc2VwYXJhdGVkIHBhdGggdGhyb3VnaCBidW5kbGUgdmFsaWRhdGUgSlNPTi4gV2hlbiB0aGUgdGVybWluYWxcbiAqIG5vZGUgaXMgYSBidW5kbGUgdmFyaWFibGUgb2JqZWN0IChgeyB2YWx1ZTogXCIuLi5cIiB9YCksIHRoZSBgdmFsdWVgIGZpZWxkIGlzXG4gKiByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1bmRsZVBhdGgoZGF0YTogQnVuZGxlVmFsaWRhdGVKc29uLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIuXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBsZXQgY3VycmVudDogdW5rbm93biA9IGRhdGE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIW9iamVjdC5pc1JlY29yZChjdXJyZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaV0hO1xuICAgIGNvbnN0IG5leHQgPSBjdXJyZW50W3BhcnRdO1xuICAgIGlmIChpID09PSBwYXJ0cy5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHQgPT09IFwic3RyaW5nXCIgJiYgbmV4dCkgcmV0dXJuIG5leHQ7XG4gICAgICBpZiAob2JqZWN0LmlzUmVjb3JkKG5leHQpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbmV4dC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IG5leHQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUFwcEVudk1hcChcbiAgb3B0aW9uczogUmVzb2x2ZUNvbmZpZ1ZhbHVlT3B0aW9ucyxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBhcHBEYXRhID0gb3B0aW9ucy5hcHBEYXRhID8/IChhd2FpdCBhcHBZYW1sKCkpO1xuICBjb25zdCBidW5kbGVEYXRhID0gb3B0aW9ucy5idW5kbGVEYXRhID8/IChhd2FpdCBidW5kbGUoKSk7XG4gIGNvbnN0IGZyb21ZYW1sID0gYXBwRGF0YSA/IGZsYXR0ZW5BcHBZYW1sRW52KGFwcERhdGEuZGF0YSkgOiB7fTtcbiAgY29uc3QgZnJvbUJ1bmRsZSA9IGJ1bmRsZURhdGEgPyBmbGF0dGVuQXBwRW52KGJ1bmRsZURhdGEuZGF0YSkgOiB7fTtcbiAgcmV0dXJuIHsgLi4uZnJvbVlhbWwsIC4uLmZyb21CdW5kbGUgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVNvdXJjZXMob3B0aW9uczogUmVzb2x2ZUNvbmZpZ1ZhbHVlT3B0aW9ucyk6IENvbmZpZ1NvdXJjZVtdIHtcbiAgY29uc3Qgc291cmNlcyA9IFsuLi4ob3B0aW9ucy5zb3VyY2VzID8/IGRlZmF1bHRDb25maWdTb3VyY2VzKV07XG4gIGlmIChvcHRpb25zLmV4cGxpY2l0ICE9PSB1bmRlZmluZWQgJiYgIXNvdXJjZXMuaW5jbHVkZXMoXCJleHBsaWNpdFwiKSkge1xuICAgIHNvdXJjZXMudW5zaGlmdChcImV4cGxpY2l0XCIpO1xuICB9XG4gIHJldHVybiBzb3VyY2VzO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjb25maWd1cmF0aW9uIHN0cmluZyBmcm9tIHRoZSBjb25maWd1cmVkIHNvdXJjZXMuIFJldHVybnMgdGhlIGZpcnN0XG4gKiBub24tZW1wdHkgdmFsdWUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm90aGluZyBtYXRjaGVzLlxuICpcbiAqIFByZWNlZGVuY2UgZm9sbG93cyBBcHBLaXQnczogZXhwbGljaXQgY29uZmlnLCB0aGVuIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGVuXG4gKiB3aGF0ZXZlciB0aGUgRGF0YWJyaWNrcyBBcHAgLyBidW5kbGUgZGVmaW5pdGlvbiBzdXBwbGllcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgYnVuZGxlIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogY29uc3Qgd2FyZWhvdXNlSWQgPSBhd2FpdCBidW5kbGUucmVzb2x2ZUNvbmZpZ1ZhbHVlKFwiREFUQUJSSUNLU19XQVJFSE9VU0VfSURcIiwge1xuICogICBjbGk6IHsgREFUQUJSSUNLU19XQVJFSE9VU0VfSUQ6IGZsYWdzLndhcmVob3VzZSB9LFxuICogICBzb3VyY2VzOiBidW5kbGUud2l0aENsaVNvdXJjZXMoKSxcbiAqIH0pO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvbmZpZ1ZhbHVlKFxuICBuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlc29sdmVDb25maWdWYWx1ZU9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGtleXMgPSBlbnZLZXlzRm9yTmFtZShuYW1lKS50b0FycmF5KCk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgc291cmNlcyA9IHJlc29sdmVTb3VyY2VzKG9wdGlvbnMpO1xuICBsZXQgYXBwRW52TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZXMgPSAoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgICBjYXNlIFwiZXhwbGljaXRcIjpcbiAgICAgICAgICB5aWVsZCByZWFkTWFwKGtleXMsIG9wdGlvbnMuZXhwbGljaXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2xpXCI6XG4gICAgICAgICAgeWllbGQgcmVhZE1hcChrZXlzLCBvcHRpb25zLmNsaSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbnZcIjpcbiAgICAgICAgICB5aWVsZCByZWFkRW52KGtleXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYnVuZGxlXCI6XG4gICAgICAgICAgaWYgKGFwcEVudk1hcCA9PT0gdW5kZWZpbmVkKSBhcHBFbnZNYXAgPSBhd2FpdCByZXNvbHZlQXBwRW52TWFwKG9wdGlvbnMpO1xuICAgICAgICAgIHlpZWxkIHJlYWRBcHBFbnYoa2V5cywgYXBwRW52TWFwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgICAgICAgXCJzb3VyY2VzXCIsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICBcIm9uZSBvZjogZXhwbGljaXQsIGNsaSwgZW52LCBidW5kbGVcIixcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSkoKTtcbiAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNvdXJjZXMgd2l0aCBgY2xpYCBpbmNsdWRlZCwgaW4gQ0xJLWZpcnN0IG9yZGVyLiBVc2UgZm9yIGRldiBjb21tYW5kcyB0aGF0XG4gKiBhY2NlcHQgZmxhZyBvdmVycmlkZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ2xpU291cmNlcyhzb3VyY2VzOiBDb25maWdTb3VyY2VbXSA9IGRlZmF1bHRDb25maWdTb3VyY2VzKTogQ29uZmlnU291cmNlW10ge1xuICBjb25zdCByZXN0ID0gc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlICE9PSBcImNsaVwiICYmIHNvdXJjZSAhPT0gXCJleHBsaWNpdFwiKTtcbiAgcmV0dXJuIFtcImNsaVwiLCBcImV4cGxpY2l0XCIsIC4uLnJlc3RdO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@databricks/sdk-experimental": "^0.17.0",
|
|
31
|
-
"@dbx-tools/core": "0.6.
|
|
32
|
-
"@dbx-tools/shared-core": "0.6.
|
|
31
|
+
"@dbx-tools/core": "0.6.89",
|
|
32
|
+
"@dbx-tools/shared-core": "0.6.89",
|
|
33
33
|
"yaml": "^2.9.0",
|
|
34
34
|
"zod": "4.3.6"
|
|
35
35
|
},
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"./package.json": "./package.json"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
-
"version": "0.6.
|
|
50
|
+
"version": "0.6.89",
|
|
51
51
|
"types": "./lib/index.d.ts",
|
|
52
52
|
"type": "module",
|
|
53
53
|
"exports": {
|
package/src/bundle.ts
CHANGED
|
@@ -25,7 +25,7 @@ import { resolve } from "node:path";
|
|
|
25
25
|
import { ValidationError } from "@databricks/appkit";
|
|
26
26
|
import { config as coreConfig, file, project } from "@dbx-tools/core";
|
|
27
27
|
import { context, object, log, string } from "@dbx-tools/shared-core";
|
|
28
|
-
import { parse as
|
|
28
|
+
import { parse as yamlParse } from "yaml";
|
|
29
29
|
import { z } from "zod";
|
|
30
30
|
|
|
31
31
|
const logger = log.logger("config");
|
|
@@ -34,7 +34,10 @@ const logger = log.logger("config");
|
|
|
34
34
|
export type BundleValidateJson = Record<string, unknown>;
|
|
35
35
|
|
|
36
36
|
/** A config file discovered on disk with its parsed contents. */
|
|
37
|
-
export
|
|
37
|
+
export interface ConfigFile {
|
|
38
|
+
path: string;
|
|
39
|
+
data: Record<string, unknown>;
|
|
40
|
+
}
|
|
38
41
|
|
|
39
42
|
/** Supported configuration sources, consulted in array order. */
|
|
40
43
|
export type ConfigSource = "explicit" | "cli" | "env" | "bundle";
|
|
@@ -44,13 +47,13 @@ const defaultConfigSources: ConfigSource[] = ["explicit", "env", "bundle"];
|
|
|
44
47
|
const APP_YAML_NAMES = ["app.yaml", "app.yml"] as const;
|
|
45
48
|
|
|
46
49
|
export const bundleAppResourceSchema = coreConfig.bundleResourceSchema.extend({
|
|
47
|
-
sql_warehouse: z.object({ id: coreConfig.
|
|
48
|
-
genie_space: z.object({ space_id: coreConfig.
|
|
50
|
+
sql_warehouse: z.object({ id: coreConfig.valueSchema.optional() }).optional(),
|
|
51
|
+
genie_space: z.object({ space_id: coreConfig.valueSchema.optional() }).optional(),
|
|
49
52
|
postgres: z
|
|
50
53
|
.object({
|
|
51
|
-
database: coreConfig.
|
|
52
|
-
branch: coreConfig.
|
|
53
|
-
endpoint: coreConfig.
|
|
54
|
+
database: coreConfig.valueSchema.optional(),
|
|
55
|
+
branch: coreConfig.valueSchema.optional(),
|
|
56
|
+
endpoint: coreConfig.valueSchema.optional(),
|
|
54
57
|
})
|
|
55
58
|
.optional(),
|
|
56
59
|
});
|
|
@@ -64,20 +67,20 @@ const bundleValidateAppsSchema = z.object({
|
|
|
64
67
|
});
|
|
65
68
|
|
|
66
69
|
const appYamlEnvEntrySchema = coreConfig.bundleEnvEntrySchema.omit({ value_from: true }).extend({
|
|
67
|
-
name: coreConfig.
|
|
68
|
-
valueFrom: coreConfig.
|
|
70
|
+
name: coreConfig.valueSchema,
|
|
71
|
+
valueFrom: coreConfig.valueSchema.optional(),
|
|
69
72
|
});
|
|
70
73
|
|
|
71
74
|
const appYamlResourceSchema = coreConfig.bundleResourceSchema
|
|
72
75
|
.extend({
|
|
73
|
-
name: coreConfig.
|
|
74
|
-
sql_warehouse: z.object({ id: coreConfig.
|
|
75
|
-
genie_space: z.object({ space_id: coreConfig.
|
|
76
|
+
name: coreConfig.valueSchema,
|
|
77
|
+
sql_warehouse: z.object({ id: coreConfig.valueSchema.optional() }).optional(),
|
|
78
|
+
genie_space: z.object({ space_id: coreConfig.valueSchema.optional() }).optional(),
|
|
76
79
|
postgres: z
|
|
77
80
|
.object({
|
|
78
|
-
database: coreConfig.
|
|
79
|
-
branch: coreConfig.
|
|
80
|
-
endpoint: coreConfig.
|
|
81
|
+
database: coreConfig.valueSchema.optional(),
|
|
82
|
+
branch: coreConfig.valueSchema.optional(),
|
|
83
|
+
endpoint: coreConfig.valueSchema.optional(),
|
|
81
84
|
})
|
|
82
85
|
.optional(),
|
|
83
86
|
})
|
|
@@ -169,7 +172,7 @@ function readAppEnv(keys: Iterable<string>, envMap: Record<string, string>): str
|
|
|
169
172
|
}
|
|
170
173
|
|
|
171
174
|
function parseYaml(text: string): unknown {
|
|
172
|
-
return
|
|
175
|
+
return yamlParse(text);
|
|
173
176
|
}
|
|
174
177
|
|
|
175
178
|
function pickAppResourceId(apps: Record<string, BundleApp>): string | undefined {
|
|
@@ -212,7 +215,7 @@ export function flattenAppYamlEnv(data: unknown): Record<string, string> {
|
|
|
212
215
|
|
|
213
216
|
const out: Record<string, string> = {};
|
|
214
217
|
for (const entry of parsed.data.env) {
|
|
215
|
-
const value = coreConfig.
|
|
218
|
+
const value = coreConfig.valueSchema.safeParse(entry.value);
|
|
216
219
|
if (value.success) {
|
|
217
220
|
out[entry.name] = value.data;
|
|
218
221
|
continue;
|
|
@@ -250,7 +253,7 @@ export function flattenAppEnv(data: unknown): Record<string, string> {
|
|
|
250
253
|
const out: Record<string, string> = {};
|
|
251
254
|
for (const entry of app.config.env) {
|
|
252
255
|
if (!entry.name) continue;
|
|
253
|
-
const value = coreConfig.
|
|
256
|
+
const value = coreConfig.valueSchema.safeParse(entry.value);
|
|
254
257
|
if (value.success) {
|
|
255
258
|
out[entry.name] = value.data;
|
|
256
259
|
continue;
|