flexdataset 0.13.0 → 0.14.0

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.
@@ -27,11 +27,20 @@ export declare class HiveParquetTable extends TableTypeBase {
27
27
  */
28
28
  partitionViolations(): Violation[];
29
29
  /**
30
- * Hive engine-specific rules: bucketing.
30
+ * Hive engine-specific rules: bucketing and table properties.
31
31
  *
32
32
  * @returns Every engine-specific violation.
33
33
  */
34
34
  engineSpecificViolations(): Violation[];
35
+ /**
36
+ * Validate the closed-domain Hive table properties and the
37
+ * Parquet-vs-ORC ACID rule. Keys outside the known set pass through.
38
+ *
39
+ * Emits `HIVE_PROPERTY_ENUM_VALID` and `HIVE_FULL_ACID_REQUIRES_ORC`.
40
+ *
41
+ * @returns Every table-property violation.
42
+ */
43
+ private tablePropertyViolations;
35
44
  /**
36
45
  * Validate the bucketing spec.
37
46
  *
@@ -14,6 +14,27 @@ const SORT_DIRECTIONS = new Set([
14
14
  'asc',
15
15
  'desc',
16
16
  ]);
17
+ /// Hive table-property keys whose value must come from a closed set (compared
18
+ /// case-insensitively, matching HiveQL).
19
+ const ENUM_PROPERTIES = {
20
+ 'parquet.compression': [
21
+ 'uncompressed',
22
+ 'snappy',
23
+ 'gzip',
24
+ 'lzo',
25
+ 'zstd',
26
+ 'brotli',
27
+ 'lz4_raw',
28
+ ],
29
+ transactional: [
30
+ 'true',
31
+ 'false',
32
+ ],
33
+ transactional_properties: [
34
+ 'default',
35
+ 'insert_only',
36
+ ],
37
+ };
17
38
  /** Hive (parquet) table. */
18
39
  class HiveParquetTable extends table_type_1.TableTypeBase {
19
40
  /**
@@ -70,12 +91,54 @@ class HiveParquetTable extends table_type_1.TableTypeBase {
70
91
  return violations;
71
92
  }
72
93
  /**
73
- * Hive engine-specific rules: bucketing.
94
+ * Hive engine-specific rules: bucketing and table properties.
74
95
  *
75
96
  * @returns Every engine-specific violation.
76
97
  */
77
98
  engineSpecificViolations() {
78
- return this.bucketingViolations();
99
+ return [
100
+ ...this.bucketingViolations(),
101
+ ...this.tablePropertyViolations(),
102
+ ];
103
+ }
104
+ /**
105
+ * Validate the closed-domain Hive table properties and the
106
+ * Parquet-vs-ORC ACID rule. Keys outside the known set pass through.
107
+ *
108
+ * Emits `HIVE_PROPERTY_ENUM_VALID` and `HIVE_FULL_ACID_REQUIRES_ORC`.
109
+ *
110
+ * @returns Every table-property violation.
111
+ */
112
+ tablePropertyViolations() {
113
+ const violations = [];
114
+ const properties = this.definition.tableProperties;
115
+ for (const [key, value,] of Object.entries(properties)) {
116
+ const allowed = ENUM_PROPERTIES[key];
117
+ if (allowed !== undefined && !allowed.includes(value.trim().toLowerCase())) {
118
+ violations.push(this.violation({
119
+ level: 'error',
120
+ code: 'HIVE_PROPERTY_ENUM_VALID',
121
+ field: `tableProperties["${key}"]`,
122
+ message: `table property "${key}" value "${value}" must be one of: ${allowed.join(', ')}`,
123
+ }));
124
+ }
125
+ }
126
+ /// Full ACID (transactional without insert_only) needs ORC storage, so it
127
+ /// is invalid on a Parquet table; only insert-only ACID is legal here.
128
+ const transactional = properties.transactional?.trim().toLowerCase();
129
+ if (transactional === 'true') {
130
+ const insertOnly = properties.transactional_properties?.trim().toLowerCase() === 'insert_only';
131
+ if (!insertOnly) {
132
+ violations.push(this.violation({
133
+ level: 'error',
134
+ code: 'HIVE_FULL_ACID_REQUIRES_ORC',
135
+ field: 'tableProperties["transactional"]',
136
+ message: 'full ACID requires ORC storage; a hive_parquet table may only use '
137
+ + 'insert-only ACID (transactional_properties="insert_only")',
138
+ }));
139
+ }
140
+ }
141
+ return violations;
79
142
  }
80
143
  /**
81
144
  * Validate the bucketing spec.
@@ -149,4 +212,4 @@ class HiveParquetTable extends table_type_1.TableTypeBase {
149
212
  }
150
213
  }
151
214
  exports.HiveParquetTable = HiveParquetTable;
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl2ZS1wYXJxdWV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RhYmxlLXR5cGVzL2hpdmUtcGFycXVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFLSCw4Q0FFdUI7QUFDdkIsb0NBRWtCO0FBRWxCLE1BQU0sZUFBZSxHQUF3QixJQUFJLEdBQUcsQ0FBQztJQUNqRCxLQUFLO0lBQ0wsTUFBTTtDQUNULENBQUMsQ0FBQztBQUVILDRCQUE0QjtBQUM1QixNQUFhLGdCQUFpQixTQUFRLDBCQUFhO0lBQy9DOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQUMsSUFBWTtRQUNqQyxPQUFPLElBQUEsdUJBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxtQkFBbUI7UUFDdEIsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEVBQ0YsVUFBVSxHQUNiLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUVwQixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMzQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSx5QkFBeUI7b0JBQy9CLEtBQUssRUFBRSxjQUFjLEtBQUssR0FBRztvQkFDN0IsT0FBTyxFQUFFLDZCQUE2QixTQUFTLENBQUMsSUFBSSxHQUFHO2lCQUMxRCxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztR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QXNCLEtBQUssYUFBYTtvQkFDL0MsT0FBTyxFQUFFLG1CQUFtQixJQUFJLENBQUMsU0FBUywyQkFBMkI7aUJBQ3hFLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBbkpELDRDQW1KQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGl2ZSAocGFycXVldCkgdGFibGUgdHlwZS5cbiAqXG4gKiBIaXZlIHBhcnRpdGlvbnMgYXJlICpuZXcqIGNvbHVtbnMgYXQgd3JpdGUgdGltZSwgZGlzdGluY3QgZnJvbSBkYXRhXG4gKiBjb2x1bW5zOiB0aGVpciBpZGVudGl0eSBpcyB0aGUgcGFydGl0aW9uIG5hbWUgYW5kIHRoZSB2YWxpZGF0b3IgZm9yYmlkc1xuICogc2hhZG93aW5nIGFuIGV4aXN0aW5nIGRhdGEgY29sdW1uLlxuICovXG5cbmltcG9ydCB7XG4gICAgVmlvbGF0aW9uLFxufSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQge1xuICAgIFRhYmxlVHlwZUJhc2UsXG59IGZyb20gJy4uL3RhYmxlLXR5cGUnO1xuaW1wb3J0IHtcbiAgICBpc1ZhbGlkSGl2ZVR5cGUsXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgU09SVF9ESVJFQ1RJT05TOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ2FzYycsXG4gICAgJ2Rlc2MnLFxuXSk7XG5cbi8qKiBIaXZlIChwYXJxdWV0KSB0YWJsZS4gKi9cbmV4cG9ydCBjbGFzcyBIaXZlUGFycXVldFRhYmxlIGV4dGVuZHMgVGFibGVUeXBlQmFzZSB7XG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgYSBjb2x1bW4gdHlwZSBhZ2FpbnN0IHRoZSBIaXZlIHR5cGUgcmVnaXN0cnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUeXBlIHN0cmluZyBmcm9tIGEgY29sdW1uIGRlZmluaXRpb24uXG4gICAgICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB0eXBlIGlzIGEgdmFsaWQgSGl2ZSB0eXBlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc1ZhbGlkQ29sdW1uVHlwZSh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWRIaXZlVHlwZSh0eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaXZlIHBhcnRpdGlvbiBydWxlcy5cbiAgICAgKlxuICAgICAqIEVtaXRzOiBgTk9fRFVQTElDQVRFX1BBUlRJVElPTlNgIChieSBwYXJ0aXRpb24gbmFtZSksXG4gICAgICogYEhJVkVfUEFSVElUSU9OX05PVF9JTl9DT0xVTU5TYCAoYSBIaXZlIHBhcnRpdGlvbiBpcyBhIG5ldyBjb2x1bW4sIHNvXG4gICAgICogaXQgbXVzdCBub3QgY29sbGlkZSB3aXRoIGEgZGF0YSBjb2x1bW4pLCBhbmQgYEhJVkVfUEFSVElUSU9OX1RZUEVfVkFMSURgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgcGFydGl0aW9uLXJlbGF0ZWQgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJ0aXRpb25WaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFydGl0aW9ucyxcbiAgICAgICAgfSA9IHRoaXMuZGVmaW5pdGlvbjtcblxuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIHBhcnRpdGlvbnMuZm9yRWFjaCgocGFydGl0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNlZW4uaGFzKHBhcnRpdGlvbi5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnTk9fRFVQTElDQVRFX1BBUlRJVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGR1cGxpY2F0ZSBwYXJ0aXRpb24gbmFtZSBcIiR7cGFydGl0aW9uLm5hbWV9XCJgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uYWRkKHBhcnRpdGlvbi5uYW1lKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGFydGl0aW9ucy5mb3JFYWNoKChwYXJ0aXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDb2x1bW4ocGFydGl0aW9uLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdISVZFX1BBUlRJVElPTl9OT1RfSU5fQ09MVU1OUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgcGFydGl0aW9uc1ske2luZGV4fV0ubmFtZWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBIaXZlIHBhcnRpdGlvbiBcIiR7cGFydGl0aW9uLm5hbWV9XCIgbXVzdCBub3QgYWxzbyBiZSBhIGRhdGEgY29sdW1uYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzVmFsaWRIaXZlVHlwZShwYXJ0aXRpb24udHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0hJVkVfUEFSVElUSU9OX1RZUEVfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dLnR5cGVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgXCIke3BhcnRpdGlvbi50eXBlfVwiIGlzIG5vdCBhIHZhbGlkIEhpdmUgcGFydGl0aW9uIHR5cGVgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGl2ZSBlbmdpbmUtc3BlY2lmaWMgcnVsZXM6IGJ1Y2tldGluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IGVuZ2luZS1zcGVjaWZpYyB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGVuZ2luZVNwZWNpZmljVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Y2tldGluZ1Zpb2xhdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSB0aGUgYnVja2V0aW5nIHNwZWMuXG4gICAgICpcbiAgICAgKiBFbWl0cyBgSElWRV9CVUNLRVRfTk9UX1BBUlRJVElPTl9DT0xVTU5gLCBgSElWRV9CVUNLRVRfQ09MVU1OX0VYSVNUU2AsXG4gICAgICogYEhJVkVfQlVDS0VUX05PX0RVUExJQ0FURV9DT0xVTU5TYCwgYEhJVkVfQlVDS0VUX0NPVU5UX1BPU0lUSVZFYCxcbiAgICAgKiBgSElWRV9TT1JUX0NPTFVNTl9FWElTVFNgLCBhbmQgYEhJVkVfU09SVF9ESVJFQ1RJT05fVkFMSURgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgYnVja2V0aW5nLXJlbGF0ZWQgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYnVja2V0aW5nVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGJ1Y2tldGluZyxcbiAgICAgICAgfSA9IHRoaXMuZGVmaW5pdGlvbjtcbiAgICAgICAgaWYgKGJ1Y2tldGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCBwYXJ0aXRpb25OYW1lcyA9IG5ldyBTZXQodGhpcy5kZWZpbml0aW9uLnBhcnRpdGlvbnMubWFwKChwYXJ0aXRpb24pID0+IHBhcnRpdGlvbi5uYW1lKSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkdXBsaWNhdGUgb2YgdGhpcy5maW5kRHVwbGljYXRlcyhidWNrZXRpbmcuY29sdW1ucykpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0hJVkVfQlVDS0VUX05PX0RVUExJQ0FURV9DT0xVTU5TJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2J1Y2tldGluZy5jb2x1bW5zJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYnVja2V0aW5nIGxpc3RzIGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1Y2tldGluZy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJ0aXRpb25OYW1lcy5oYXMoY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSElWRV9CVUNLRVRfTk9UX1BBUlRJVElPTl9DT0xVTU4nLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYGJ1Y2tldGluZy5jb2x1bW5zWyR7aW5kZXh9XWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBidWNrZXRpbmcgY29sdW1uIFwiJHtjb2x1bW59XCIgbXVzdCBub3QgYmUgYSBwYXJ0aXRpb24gY29sdW1uYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmhhc0NvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdISVZFX0JVQ0tFVF9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBidWNrZXRpbmcuY29sdW1uc1ske2luZGV4fV1gLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYnVja2V0aW5nIGNvbHVtbiBcIiR7Y29sdW1ufVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJ1Y2tldGluZy5idWNrZXRDb3VudCkgfHwgYnVja2V0aW5nLmJ1Y2tldENvdW50IDw9IDApIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0hJVkVfQlVDS0VUX0NPVU5UX1BPU0lUSVZFJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2J1Y2tldGluZy5idWNrZXRDb3VudCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGJ1Y2tldENvdW50IFwiJHtidWNrZXRpbmcuYnVja2V0Q291bnR9XCIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0aW5nLnNvcnRlZEJ5LmZvckVhY2goKHNvcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uKHNvcnQuY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSElWRV9TT1JUX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYGJ1Y2tldGluZy5zb3J0ZWRCeVske2luZGV4fV0uY29sdW1uYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHNvcnQgY29sdW1uIFwiJHtzb3J0LmNvbHVtbn1cIiBpcyBub3QgZGVmaW5lZCBpbiBjb2x1bW5zYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIVNPUlRfRElSRUNUSU9OUy5oYXMoc29ydC5kaXJlY3Rpb24udHJpbSgpLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdISVZFX1NPUlRfRElSRUNUSU9OX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBidWNrZXRpbmcuc29ydGVkQnlbJHtpbmRleH1dLmRpcmVjdGlvbmAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzb3J0IGRpcmVjdGlvbiBcIiR7c29ydC5kaXJlY3Rpb259XCIgbXVzdCBiZSBcImFzY1wiIG9yIFwiZGVzY1wiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cbn1cbiJdfQ==
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl2ZS1wYXJxdWV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RhYmxlLXR5cGVzL2hpdmUtcGFycXVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFLSCw4Q0FFdUI7QUFDdkIsb0NBRWtCO0FBRWxCLE1BQU0sZUFBZSxHQUF3QixJQUFJLEdBQUcsQ0FBQztJQUNqRCxLQUFLO0lBQ0wsTUFBTTtDQUNULENBQUMsQ0FBQztBQUVILDhFQUE4RTtBQUM5RSx5Q0FBeUM7QUFDekMsTUFBTSxlQUFlLEdBQXNDO0lBQ3ZELHFCQUFxQixFQUFFO1FBQ25CLGNBQWM7UUFDZCxRQUFRO1FBQ1IsTUFBTTtRQUNOLEtBQUs7UUFDTCxNQUFNO1FBQ04sUUFBUTtRQUNSLFNBQVM7S0FDWjtJQUNELGFBQWEsRUFBRTtRQUNYLE1BQU07UUFDTixPQUFPO0tBQ1Y7SUFDRCx3QkFBd0IsRUFBRTtRQUN0QixTQUFTO1FBQ1QsYUFBYTtLQUNoQjtDQUNKLENBQUM7QUFFRiw0QkFBNEI7QUFDNUIsTUFBYSxnQkFBaUIsU0FBUSwwQkFBYTtJQUMvQzs7Ozs7T0FLRztJQUNJLGlCQUFpQixDQUFDLElBQVk7UUFDakMsT0FBTyxJQUFBLHVCQUFlLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksbUJBQW1CO1FBQ3RCLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFDbkMsTUFBTSxFQUNGLFVBQVUsR0FDYixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMvQixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsVUFBVSxDQUFD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QyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLHlCQUF5QjtvQkFDL0IsS0FBSyxFQUFFLHNCQUFzQixLQUFLLFVBQVU7b0JBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sNkJBQTZCO2lCQUNwRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDNUQsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsMkJBQTJCO29CQUNqQyxLQUFLLEVBQUUsc0JBQXNCLEtBQUssYUFBYTtvQkFDL0MsT0FBTyxFQUFFLG1CQUFtQixJQUFJLENBQUMsU0FBUywyQkFBMkI7aUJBQ3hFLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBcE1ELDRDQW9NQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGl2ZSAocGFycXVldCkgdGFibGUgdHlwZS5cbiAqXG4gKiBIaXZlIHBhcnRpdGlvbnMgYXJlICpuZXcqIGNvbHVtbnMgYXQgd3JpdGUgdGltZSwgZGlzdGluY3QgZnJvbSBkYXRhXG4gKiBjb2x1bW5zOiB0aGVpciBpZGVudGl0eSBpcyB0aGUgcGFydGl0aW9uIG5hbWUgYW5kIHRoZSB2YWxpZGF0b3IgZm9yYmlkc1xuICogc2hhZG93aW5nIGFuIGV4aXN0aW5nIGRhdGEgY29sdW1uLlxuICovXG5cbmltcG9ydCB7XG4gICAgVmlvbGF0aW9uLFxufSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQge1xuICAgIFRhYmxlVHlwZUJhc2UsXG59IGZyb20gJy4uL3RhYmxlLXR5cGUnO1xuaW1wb3J0IHtcbiAgICBpc1ZhbGlkSGl2ZVR5cGUsXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgU09SVF9ESVJFQ1RJT05TOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ2FzYycsXG4gICAgJ2Rlc2MnLFxuXSk7XG5cbi8vLyBIaXZlIHRhYmxlLXByb3BlcnR5IGtleXMgd2hvc2UgdmFsdWUgbXVzdCBjb21lIGZyb20gYSBjbG9zZWQgc2V0IChjb21wYXJlZFxuLy8vIGNhc2UtaW5zZW5zaXRpdmVseSwgbWF0Y2hpbmcgSGl2ZVFMKS5cbmNvbnN0IEVOVU1fUFJPUEVSVElFUzogUmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+ID0ge1xuICAgICdwYXJxdWV0LmNvbXByZXNzaW9uJzogW1xuICAgICAgICAndW5jb21wcmVzc2VkJyxcbiAgICAgICAgJ3NuYXBweScsXG4gICAgICAgICdnemlwJyxcbiAgICAgICAgJ2x6bycsXG4gICAgICAgICd6c3RkJyxcbiAgICAgICAgJ2Jyb3RsaScsXG4gICAgICAgICdsejRfcmF3JyxcbiAgICBdLFxuICAgIHRyYW5zYWN0aW9uYWw6IFtcbiAgICAgICAgJ3RydWUnLFxuICAgICAgICAnZmFsc2UnLFxuICAgIF0sXG4gICAgdHJhbnNhY3Rpb25hbF9wcm9wZXJ0aWVzOiBbXG4gICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgJ2luc2VydF9vbmx5JyxcbiAgICBdLFxufTtcblxuLyoqIEhpdmUgKHBhcnF1ZXQpIHRhYmxlLiAqL1xuZXhwb3J0IGNsYXNzIEhpdmVQYXJxdWV0VGFibGUgZXh0ZW5kcyBUYWJsZVR5cGVCYXNlIHtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBhIGNvbHVtbiB0eXBlIGFnYWluc3QgdGhlIEhpdmUgdHlwZSByZWdpc3RyeS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIFR5cGUgc3RyaW5nIGZyb20gYSBjb2x1bW4gZGVmaW5pdGlvbi5cbiAgICAgKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHR5cGUgaXMgYSB2YWxpZCBIaXZlIHR5cGUuXG4gICAgICovXG4gICAgcHVibGljIGlzVmFsaWRDb2x1bW5UeXBlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXNWYWxpZEhpdmVUeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpdmUgcGFydGl0aW9uIHJ1bGVzLlxuICAgICAqXG4gICAgICogRW1pdHM6IGBOT19EVVBMSUNBVEVfUEFSVElUSU9OU2AgKGJ5IHBhcnRpdGlvbiBuYW1lKSxcbiAgICAgKiBgSElWRV9QQVJUSVRJT05fTk9UX0lOX0NPTFVNTlNgIChhIEhpdmUgcGFydGl0aW9uIGlzIGEgbmV3IGNvbHVtbiwgc29cbiAgICAgKiBpdCBtdXN0IG5vdCBjb2xsaWRlIHdpdGggYSBkYXRhIGNvbHVtbiksIGFuZCBgSElWRV9QQVJUSVRJT05fVFlQRV9WQUxJRGAuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBFdmVyeSBwYXJ0aXRpb24tcmVsYXRlZCB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHBhcnRpdGlvblZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJ0aXRpb25zLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuXG4gICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgcGFydGl0aW9ucy5mb3JFYWNoKChwYXJ0aXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMocGFydGl0aW9uLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdOT19EVVBMSUNBVEVfUEFSVElUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgcGFydGl0aW9uc1ske2luZGV4fV1gLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZHVwbGljYXRlIHBhcnRpdGlvbiBuYW1lIFwiJHtwYXJ0aXRpb24ubmFtZX1cImAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2Vlbi5hZGQocGFydGl0aW9uLm5hbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBwYXJ0aXRpb25zLmZvckVhY2goKHBhcnRpdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbHVtbihwYXJ0aXRpb24ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0hJVkVfUEFSVElUSU9OX05PVF9JTl9DT0xVTU5TJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBwYXJ0aXRpb25zWyR7aW5kZXh9XS5uYW1lYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEhpdmUgcGFydGl0aW9uIFwiJHtwYXJ0aXRpb24ubmFtZX1cIiBtdXN0IG5vdCBhbHNvIGJlIGEgZGF0YSBjb2x1bW5gLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNWYWxpZEhpdmVUeXBlKHBhcnRpdGlvbi50eXBlKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSElWRV9QQVJUSVRJT05fVFlQRV9WQUxJRCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgcGFydGl0aW9uc1ske2luZGV4fV0udHlwZWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBcIiR7cGFydGl0aW9uLnR5cGV9XCIgaXMgbm90IGEgdmFsaWQgSGl2ZSBwYXJ0aXRpb24gdHlwZWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaXZlIGVuZ2luZS1zcGVjaWZpYyBydWxlczogYnVja2V0aW5nIGFuZCB0YWJsZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgZW5naW5lLXNwZWNpZmljIHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZW5naW5lU3BlY2lmaWNWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMuYnVja2V0aW5nVmlvbGF0aW9ucygpLFxuICAgICAgICAgICAgLi4udGhpcy50YWJsZVByb3BlcnR5VmlvbGF0aW9ucygpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHRoZSBjbG9zZWQtZG9tYWluIEhpdmUgdGFibGUgcHJvcGVydGllcyBhbmQgdGhlXG4gICAgICogUGFycXVldC12cy1PUkMgQUNJRCBydWxlLiBLZXlzIG91dHNpZGUgdGhlIGtub3duIHNldCBwYXNzIHRocm91Z2guXG4gICAgICpcbiAgICAgKiBFbWl0cyBgSElWRV9QUk9QRVJUWV9FTlVNX1ZBTElEYCBhbmQgYEhJVkVfRlVMTF9BQ0lEX1JFUVVJUkVTX09SQ2AuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBFdmVyeSB0YWJsZS1wcm9wZXJ0eSB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSB0YWJsZVByb3BlcnR5VmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmRlZmluaXRpb24udGFibGVQcm9wZXJ0aWVzO1xuXG4gICAgICAgIGZvciAoY29uc3QgW1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgIF0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ZWQgPSBFTlVNX1BST1BFUlRJRVNba2V5XTtcbiAgICAgICAgICAgIGlmIChhbGxvd2VkICE9PSB1bmRlZmluZWQgJiYgIWFsbG93ZWQuaW5jbHVkZXModmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdISVZFX1BST1BFUlRZX0VOVU1fVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHRhYmxlUHJvcGVydGllc1tcIiR7a2V5fVwiXWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0YWJsZSBwcm9wZXJ0eSBcIiR7a2V5fVwiIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIG9uZSBvZjogJHthbGxvd2VkLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLy8gRnVsbCBBQ0lEICh0cmFuc2FjdGlvbmFsIHdpdGhvdXQgaW5zZXJ0X29ubHkpIG5lZWRzIE9SQyBzdG9yYWdlLCBzbyBpdFxuICAgICAgICAvLy8gaXMgaW52YWxpZCBvbiBhIFBhcnF1ZXQgdGFibGU7IG9ubHkgaW5zZXJ0LW9ubHkgQUNJRCBpcyBsZWdhbCBoZXJlLlxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbmFsID0gcHJvcGVydGllcy50cmFuc2FjdGlvbmFsPy50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uYWwgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0T25seSA9IHByb3BlcnRpZXMudHJhbnNhY3Rpb25hbF9wcm9wZXJ0aWVzPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2luc2VydF9vbmx5JztcbiAgICAgICAgICAgIGlmICghaW5zZXJ0T25seSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSElWRV9GVUxMX0FDSURfUkVRVUlSRVNfT1JDJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICd0YWJsZVByb3BlcnRpZXNbXCJ0cmFuc2FjdGlvbmFsXCJdJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2Z1bGwgQUNJRCByZXF1aXJlcyBPUkMgc3RvcmFnZTsgYSBoaXZlX3BhcnF1ZXQgdGFibGUgbWF5IG9ubHkgdXNlICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJ2luc2VydC1vbmx5IEFDSUQgKHRyYW5zYWN0aW9uYWxfcHJvcGVydGllcz1cImluc2VydF9vbmx5XCIpJyxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSB0aGUgYnVja2V0aW5nIHNwZWMuXG4gICAgICpcbiAgICAgKiBFbWl0cyBgSElWRV9CVUNLRVRfTk9UX1BBUlRJVElPTl9DT0xVTU5gLCBgSElWRV9CVUNLRVRfQ09MVU1OX0VYSVNUU2AsXG4gICAgICogYEhJVkVfQlVDS0VUX05PX0RVUExJQ0FURV9DT0xVTU5TYCwgYEhJVkVfQlVDS0VUX0NPVU5UX1BPU0lUSVZFYCxcbiAgICAgKiBgSElWRV9TT1JUX0NPTFVNTl9FWElTVFNgLCBhbmQgYEhJVkVfU09SVF9ESVJFQ1RJT05fVkFMSURgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgYnVja2V0aW5nLXJlbGF0ZWQgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYnVja2V0aW5nVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGJ1Y2tldGluZyxcbiAgICAgICAgfSA9IHRoaXMuZGVmaW5pdGlvbjtcbiAgICAgICAgaWYgKGJ1Y2tldGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCBwYXJ0aXRpb25OYW1lcyA9IG5ldyBTZXQodGhpcy5kZWZpbml0aW9uLnBhcnRpdGlvbnMubWFwKChwYXJ0aXRpb24pID0+IHBhcnRpdGlvbi5uYW1lKSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkdXBsaWNhdGUgb2YgdGhpcy5maW5kRHVwbGljYXRlcyhidWNrZXRpbmcuY29sdW1ucykpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0hJVkVfQlVDS0VUX05PX0RVUExJQ0FURV9DT0xVTU5TJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2J1Y2tldGluZy5jb2x1bW5zJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYnVja2V0aW5nIGxpc3RzIGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1Y2tldGluZy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJ0aXRpb25OYW1lcy5oYXMoY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSElWRV9CVUNLRVRfTk9UX1BBUlRJVElPTl9DT0xVTU4nLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYGJ1Y2tldGluZy5jb2x1bW5zWyR7aW5kZXh9XWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBidWNrZXRpbmcgY29sdW1uIFwiJHtjb2x1bW59XCIgbXVzdCBub3QgYmUgYSBwYXJ0aXRpb24gY29sdW1uYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmhhc0NvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdISVZFX0JVQ0tFVF9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBidWNrZXRpbmcuY29sdW1uc1ske2luZGV4fV1gLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYnVja2V0aW5nIGNvbHVtbiBcIiR7Y29sdW1ufVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJ1Y2tldGluZy5idWNrZXRDb3VudCkgfHwgYnVja2V0aW5nLmJ1Y2tldENvdW50IDw9IDApIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0hJVkVfQlVDS0VUX0NPVU5UX1BPU0lUSVZFJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2J1Y2tldGluZy5idWNrZXRDb3VudCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGJ1Y2tldENvdW50IFwiJHtidWNrZXRpbmcuYnVja2V0Q291bnR9XCIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0aW5nLnNvcnRlZEJ5LmZvckVhY2goKHNvcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uKHNvcnQuY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnSElWRV9TT1JUX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYGJ1Y2tldGluZy5zb3J0ZWRCeVske2luZGV4fV0uY29sdW1uYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHNvcnQgY29sdW1uIFwiJHtzb3J0LmNvbHVtbn1cIiBpcyBub3QgZGVmaW5lZCBpbiBjb2x1bW5zYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIVNPUlRfRElSRUNUSU9OUy5oYXMoc29ydC5kaXJlY3Rpb24udHJpbSgpLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdISVZFX1NPUlRfRElSRUNUSU9OX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBidWNrZXRpbmcuc29ydGVkQnlbJHtpbmRleH1dLmRpcmVjdGlvbmAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzb3J0IGRpcmVjdGlvbiBcIiR7c29ydC5kaXJlY3Rpb259XCIgbXVzdCBiZSBcImFzY1wiIG9yIFwiZGVzY1wiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flexdataset",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Flexible Dataset Definition (FDD) — validator and tooling for the FDD dataset standard.",
6
6
  "author": "Rodrigo Carvajal",