@rudderstack/integrations-lib 0.2.17 → 0.2.18
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/build/utils/index.d.ts +2 -0
- package/build/utils/index.d.ts.map +1 -1
- package/build/utils/index.js +3 -1
- package/build/utils/json-schema-generator.d.ts +109 -0
- package/build/utils/json-schema-generator.d.ts.map +1 -0
- package/build/utils/json-schema-generator.js +218 -0
- package/build/utils/json-schema-generator.test.d.ts +2 -0
- package/build/utils/json-schema-generator.test.d.ts.map +1 -0
- package/build/utils/json-schema-generator.test.js +368 -0
- package/build/utils/misc.d.ts +1 -1
- package/build/utils/tests.d.ts +6 -0
- package/build/utils/tests.d.ts.map +1 -0
- package/build/utils/tests.js +15 -0
- package/build/utils/tests.test.d.ts +2 -0
- package/build/utils/tests.test.d.ts.map +1 -0
- package/build/utils/tests.test.js +89 -0
- package/package.json +3 -2
package/build/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC"}
|
package/build/utils/index.js
CHANGED
|
@@ -14,8 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./json-schema-generator"), exports);
|
|
17
18
|
__exportStar(require("./json"), exports);
|
|
18
19
|
__exportStar(require("./misc"), exports);
|
|
19
20
|
__exportStar(require("./request"), exports);
|
|
20
21
|
__exportStar(require("./sem"), exports);
|
|
21
|
-
|
|
22
|
+
__exportStar(require("./tests"), exports);
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUF3QztBQUN4Qyx5Q0FBdUI7QUFDdkIseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQix3Q0FBc0I7QUFDdEIsMENBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9qc29uLXNjaGVtYS1nZW5lcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9qc29uJztcbmV4cG9ydCAqIGZyb20gJy4vbWlzYyc7XG5leHBvcnQgKiBmcm9tICcuL3JlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zZW0nO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cyc7XG4iXX0=
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definition for a JSON Schema.
|
|
3
|
+
*/
|
|
4
|
+
export type JSONSchemaType = {
|
|
5
|
+
type?: string | string[];
|
|
6
|
+
properties?: {
|
|
7
|
+
[key: string]: JSONSchemaType;
|
|
8
|
+
};
|
|
9
|
+
items?: JSONSchemaType;
|
|
10
|
+
required?: string[];
|
|
11
|
+
enum?: any[];
|
|
12
|
+
anyOf?: JSONSchemaType[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Options for generating JSON Schemas.
|
|
16
|
+
*/
|
|
17
|
+
export type JsonSchemaGeneratorOptions = {
|
|
18
|
+
/** If true, marks every property in an object as required */
|
|
19
|
+
requireAll?: boolean;
|
|
20
|
+
/** If true, attempts to detect and include enums for arrays of strings */
|
|
21
|
+
detectEnums?: boolean;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Utility for generating and validating JSON Schemas from data.
|
|
25
|
+
*/
|
|
26
|
+
export declare class JsonSchemaGenerator {
|
|
27
|
+
private static validator;
|
|
28
|
+
/**
|
|
29
|
+
* Validates the provided data against the given JSON Schema.
|
|
30
|
+
*
|
|
31
|
+
* @param data - The data to validate.
|
|
32
|
+
* @param schema - The JSON Schema to use for validation.
|
|
33
|
+
* @throws Error if the validation fails.
|
|
34
|
+
*/
|
|
35
|
+
static validate(data: unknown, schema: JSONSchemaType): void;
|
|
36
|
+
/**
|
|
37
|
+
* Generates a JSON Schema for the given data.
|
|
38
|
+
*
|
|
39
|
+
* @param data - The data for which to generate a JSON Schema.
|
|
40
|
+
* @param options - Generation options.
|
|
41
|
+
* @returns The generated JSON Schema.
|
|
42
|
+
*/
|
|
43
|
+
static generate(data: unknown, options?: JsonSchemaGeneratorOptions): JSONSchemaType;
|
|
44
|
+
/**
|
|
45
|
+
* Determines the primitive type of a value.
|
|
46
|
+
*
|
|
47
|
+
* @param data - The data whose type is to be inferred.
|
|
48
|
+
* @returns A string representing the type.
|
|
49
|
+
*/
|
|
50
|
+
private static inferType;
|
|
51
|
+
/**
|
|
52
|
+
* Recursively builds a JSON Schema from the provided data.
|
|
53
|
+
*
|
|
54
|
+
* @param data - The data to interpret.
|
|
55
|
+
* @param options - Generation options.
|
|
56
|
+
* @returns A JSON Schema object.
|
|
57
|
+
*/
|
|
58
|
+
private static buildSchema;
|
|
59
|
+
/**
|
|
60
|
+
* Checks if all types in an array are one of the primitive types:
|
|
61
|
+
* string, number, or boolean.
|
|
62
|
+
*
|
|
63
|
+
* @param types - An array of type strings.
|
|
64
|
+
* @returns True if every type is primitive.
|
|
65
|
+
*/
|
|
66
|
+
private static allTypesArePrimitive;
|
|
67
|
+
/**
|
|
68
|
+
* Generates a JSON Schema for an array.
|
|
69
|
+
*
|
|
70
|
+
* @param data - The array data.
|
|
71
|
+
* @param options - Generation options.
|
|
72
|
+
* @returns The JSON Schema corresponding to the array data.
|
|
73
|
+
*/
|
|
74
|
+
private static buildArraySchema;
|
|
75
|
+
/**
|
|
76
|
+
* Generates a JSON Schema for an array containing mixed types.
|
|
77
|
+
*
|
|
78
|
+
* @param data - The array data.
|
|
79
|
+
* @param options - Generation options.
|
|
80
|
+
* @returns The JSON Schema with an "anyOf" clause.
|
|
81
|
+
*/
|
|
82
|
+
private static buildMixedArraySchema;
|
|
83
|
+
/**
|
|
84
|
+
* Generates a JSON Schema for an object.
|
|
85
|
+
*
|
|
86
|
+
* @param data - The object data.
|
|
87
|
+
* @param options - Generation options.
|
|
88
|
+
* @returns The JSON Schema for the object.
|
|
89
|
+
*/
|
|
90
|
+
private static buildObjectSchema;
|
|
91
|
+
/**
|
|
92
|
+
* Attempts to merge two JSON Schemas. Merging is only successful if both schemas have the same type
|
|
93
|
+
* and there are no conflicts within defined properties.
|
|
94
|
+
*
|
|
95
|
+
* @param schemaA - The first JSON Schema.
|
|
96
|
+
* @param schemaB - The second JSON Schema.
|
|
97
|
+
* @returns The merged schema if successful; otherwise, null.
|
|
98
|
+
*/
|
|
99
|
+
private static mergeTwoSchemas;
|
|
100
|
+
/**
|
|
101
|
+
* Merges an array of JSON Schemas. Schemas with the same type and non-conflicting
|
|
102
|
+
* definitions are merged together.
|
|
103
|
+
*
|
|
104
|
+
* @param schemas - The list of schemas to merge.
|
|
105
|
+
* @returns A deduplicated list of merged schemas.
|
|
106
|
+
*/
|
|
107
|
+
private static mergeSimilarSchemas;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=json-schema-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-generator.d.ts","sourceRoot":"","sources":["../../src/utils/json-schema-generator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;KAAE,CAAC;IAC/C,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAmB;IAE3C;;;;;;OAMG;WACW,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAOnE;;;;;;OAMG;WACW,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,0BAA+B,GAAG,cAAc;IAM/F;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAOxB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAc1B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAInC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA4B/B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAYpC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAoBhC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAoC9B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;CAkCnC"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonSchemaGenerator = void 0;
|
|
4
|
+
/* eslint-disable no-plusplus */
|
|
5
|
+
const jsonschema_1 = require("jsonschema");
|
|
6
|
+
/**
|
|
7
|
+
* Utility for generating and validating JSON Schemas from data.
|
|
8
|
+
*/
|
|
9
|
+
class JsonSchemaGenerator {
|
|
10
|
+
/**
|
|
11
|
+
* Validates the provided data against the given JSON Schema.
|
|
12
|
+
*
|
|
13
|
+
* @param data - The data to validate.
|
|
14
|
+
* @param schema - The JSON Schema to use for validation.
|
|
15
|
+
* @throws Error if the validation fails.
|
|
16
|
+
*/
|
|
17
|
+
static validate(data, schema) {
|
|
18
|
+
const result = this.validator.validate(data, schema);
|
|
19
|
+
if (!result.valid) {
|
|
20
|
+
throw new Error(`Validation failed: ${result.errors.join(', ')}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generates a JSON Schema for the given data.
|
|
25
|
+
*
|
|
26
|
+
* @param data - The data for which to generate a JSON Schema.
|
|
27
|
+
* @param options - Generation options.
|
|
28
|
+
* @returns The generated JSON Schema.
|
|
29
|
+
*/
|
|
30
|
+
static generate(data, options = {}) {
|
|
31
|
+
return this.buildSchema(data, options);
|
|
32
|
+
}
|
|
33
|
+
// ─── PRIVATE HELPERS ────────────────────────────────────────────
|
|
34
|
+
/**
|
|
35
|
+
* Determines the primitive type of a value.
|
|
36
|
+
*
|
|
37
|
+
* @param data - The data whose type is to be inferred.
|
|
38
|
+
* @returns A string representing the type.
|
|
39
|
+
*/
|
|
40
|
+
static inferType(data) {
|
|
41
|
+
if (data === null)
|
|
42
|
+
return 'null';
|
|
43
|
+
if (Array.isArray(data))
|
|
44
|
+
return 'array';
|
|
45
|
+
if (typeof data === 'object')
|
|
46
|
+
return 'object';
|
|
47
|
+
return typeof data;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Recursively builds a JSON Schema from the provided data.
|
|
51
|
+
*
|
|
52
|
+
* @param data - The data to interpret.
|
|
53
|
+
* @param options - Generation options.
|
|
54
|
+
* @returns A JSON Schema object.
|
|
55
|
+
*/
|
|
56
|
+
static buildSchema(data, options) {
|
|
57
|
+
const type = this.inferType(data);
|
|
58
|
+
switch (type) {
|
|
59
|
+
case 'null':
|
|
60
|
+
return { type: 'null' };
|
|
61
|
+
case 'array':
|
|
62
|
+
return this.buildArraySchema(data, options);
|
|
63
|
+
case 'object':
|
|
64
|
+
return this.buildObjectSchema(data, options);
|
|
65
|
+
default:
|
|
66
|
+
return { type };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Checks if all types in an array are one of the primitive types:
|
|
71
|
+
* string, number, or boolean.
|
|
72
|
+
*
|
|
73
|
+
* @param types - An array of type strings.
|
|
74
|
+
* @returns True if every type is primitive.
|
|
75
|
+
*/
|
|
76
|
+
static allTypesArePrimitive(types) {
|
|
77
|
+
return types.every((type) => ['string', 'number', 'boolean'].includes(type));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generates a JSON Schema for an array.
|
|
81
|
+
*
|
|
82
|
+
* @param data - The array data.
|
|
83
|
+
* @param options - Generation options.
|
|
84
|
+
* @returns The JSON Schema corresponding to the array data.
|
|
85
|
+
*/
|
|
86
|
+
static buildArraySchema(data, options) {
|
|
87
|
+
if (data.length === 0) {
|
|
88
|
+
return { type: 'array', items: { type: 'any' } };
|
|
89
|
+
}
|
|
90
|
+
const types = data.map(this.inferType);
|
|
91
|
+
if (this.allTypesArePrimitive(types)) {
|
|
92
|
+
const uniqueTypes = Array.from(new Set(types));
|
|
93
|
+
if (uniqueTypes.length === 1) {
|
|
94
|
+
return {
|
|
95
|
+
type: 'array',
|
|
96
|
+
items: {
|
|
97
|
+
type: uniqueTypes[0],
|
|
98
|
+
...(uniqueTypes[0] === 'string' && options.detectEnums
|
|
99
|
+
? { enum: Array.from(new Set(data)) }
|
|
100
|
+
: {}),
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return { type: 'array', items: { type: uniqueTypes } };
|
|
105
|
+
}
|
|
106
|
+
return this.buildMixedArraySchema(data, options);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Generates a JSON Schema for an array containing mixed types.
|
|
110
|
+
*
|
|
111
|
+
* @param data - The array data.
|
|
112
|
+
* @param options - Generation options.
|
|
113
|
+
* @returns The JSON Schema with an "anyOf" clause.
|
|
114
|
+
*/
|
|
115
|
+
static buildMixedArraySchema(data, options) {
|
|
116
|
+
const schemas = data.map((item) => this.buildSchema(item, options));
|
|
117
|
+
const uniqueSchemas = this.mergeSimilarSchemas(schemas);
|
|
118
|
+
return {
|
|
119
|
+
type: 'array',
|
|
120
|
+
items: uniqueSchemas.length === 1 ? uniqueSchemas[0] : { anyOf: uniqueSchemas },
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Generates a JSON Schema for an object.
|
|
125
|
+
*
|
|
126
|
+
* @param data - The object data.
|
|
127
|
+
* @param options - Generation options.
|
|
128
|
+
* @returns The JSON Schema for the object.
|
|
129
|
+
*/
|
|
130
|
+
static buildObjectSchema(data, options) {
|
|
131
|
+
const properties = {};
|
|
132
|
+
const required = [];
|
|
133
|
+
const { requireAll = false } = options;
|
|
134
|
+
Object.entries(data).forEach(([key, value]) => {
|
|
135
|
+
properties[key] = this.buildSchema(value, options);
|
|
136
|
+
if (requireAll)
|
|
137
|
+
required.push(key);
|
|
138
|
+
});
|
|
139
|
+
return {
|
|
140
|
+
type: 'object',
|
|
141
|
+
properties,
|
|
142
|
+
...(required.length > 0 ? { required } : {}),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Attempts to merge two JSON Schemas. Merging is only successful if both schemas have the same type
|
|
147
|
+
* and there are no conflicts within defined properties.
|
|
148
|
+
*
|
|
149
|
+
* @param schemaA - The first JSON Schema.
|
|
150
|
+
* @param schemaB - The second JSON Schema.
|
|
151
|
+
* @returns The merged schema if successful; otherwise, null.
|
|
152
|
+
*/
|
|
153
|
+
static mergeTwoSchemas(schemaA, schemaB) {
|
|
154
|
+
if (schemaA.type !== schemaB.type)
|
|
155
|
+
return null;
|
|
156
|
+
const propsA = schemaA.properties || {};
|
|
157
|
+
const propsB = schemaB.properties || {};
|
|
158
|
+
const allKeys = Array.from(new Set([...Object.keys(propsA), ...Object.keys(propsB)]));
|
|
159
|
+
const hasConflict = allKeys.some((key) => key in propsA &&
|
|
160
|
+
key in propsB &&
|
|
161
|
+
JSON.stringify(propsA[key]) !== JSON.stringify(propsB[key]));
|
|
162
|
+
if (hasConflict)
|
|
163
|
+
return null;
|
|
164
|
+
const mergedProperties = allKeys.reduce((acc, key) => {
|
|
165
|
+
acc[key] = propsA[key] || propsB[key];
|
|
166
|
+
return acc;
|
|
167
|
+
}, {});
|
|
168
|
+
// A property is required in the merged schema only if it was required in both.
|
|
169
|
+
const requiredA = new Set(schemaA.required || []);
|
|
170
|
+
const requiredMerged = (schemaB.required || []).filter((field) => requiredA.has(field));
|
|
171
|
+
return {
|
|
172
|
+
...schemaA,
|
|
173
|
+
...schemaB,
|
|
174
|
+
type: schemaA.type,
|
|
175
|
+
...(Object.keys(mergedProperties).length > 0 ? { properties: mergedProperties } : {}),
|
|
176
|
+
...(requiredMerged.length > 0 ? { required: requiredMerged } : {}),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Merges an array of JSON Schemas. Schemas with the same type and non-conflicting
|
|
181
|
+
* definitions are merged together.
|
|
182
|
+
*
|
|
183
|
+
* @param schemas - The list of schemas to merge.
|
|
184
|
+
* @returns A deduplicated list of merged schemas.
|
|
185
|
+
*/
|
|
186
|
+
static mergeSimilarSchemas(schemas) {
|
|
187
|
+
if (schemas.length <= 1)
|
|
188
|
+
return [...schemas];
|
|
189
|
+
let mergedSchemas = [...schemas];
|
|
190
|
+
// Attempt one merge pass
|
|
191
|
+
const attemptMerge = (schemasList) => {
|
|
192
|
+
for (let i = 0; i < schemasList.length; i++) {
|
|
193
|
+
for (let j = i + 1; j < schemasList.length; j++) {
|
|
194
|
+
const merged = this.mergeTwoSchemas(schemasList[i], schemasList[j]);
|
|
195
|
+
if (merged) {
|
|
196
|
+
const newSchemas = [
|
|
197
|
+
...schemasList.slice(0, i),
|
|
198
|
+
merged,
|
|
199
|
+
...schemasList.slice(i + 1, j),
|
|
200
|
+
...schemasList.slice(j + 1),
|
|
201
|
+
];
|
|
202
|
+
return { schemas: newSchemas, merged: true };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return { schemas: schemasList, merged: false };
|
|
207
|
+
};
|
|
208
|
+
let result = attemptMerge(mergedSchemas);
|
|
209
|
+
while (result.merged) {
|
|
210
|
+
mergedSchemas = result.schemas;
|
|
211
|
+
result = attemptMerge(mergedSchemas);
|
|
212
|
+
}
|
|
213
|
+
return mergedSchemas;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.JsonSchemaGenerator = JsonSchemaGenerator;
|
|
217
|
+
JsonSchemaGenerator.validator = new jsonschema_1.Validator();
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2pzb24tc2NoZW1hLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnQ0FBZ0M7QUFDaEMsMkNBQXVDO0FBd0J2Qzs7R0FFRztBQUNILE1BQWEsbUJBQW1CO0lBRzlCOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBYSxFQUFFLE1BQXNCO1FBQzFELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFhLEVBQUUsVUFBc0MsRUFBRTtRQUM1RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxtRUFBbUU7SUFFbkU7Ozs7O09BS0c7SUFDSyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQWE7UUFDcEMsSUFBSSxJQUFJLEtBQUssSUFBSTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUN4QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUM5QyxPQUFPLE9BQU8sSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQWEsRUFB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QUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7cUJBQzlDO2lCQUNGO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNwQixhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUMvQixNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzs7QUFoUEgsa0RBaVBDO0FBaFBnQiw2QkFBUyxHQUFHLElBQUksc0JBQVMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGx1c3BsdXMgKi9cbmltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gJ2pzb25zY2hlbWEnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBKU09OIFNjaGVtYS5cbiAqL1xuZXhwb3J0IHR5cGUgSlNPTlNjaGVtYVR5cGUgPSB7XG4gIHR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcHJvcGVydGllcz86IHsgW2tleTogc3RyaW5nXTogSlNPTlNjaGVtYVR5cGUgfTtcbiAgaXRlbXM/OiBKU09OU2NoZW1hVHlwZTtcbiAgcmVxdWlyZWQ/OiBzdHJpbmdbXTtcbiAgZW51bT86IGFueVtdO1xuICBhbnlPZj86IEpTT05TY2hlbWFUeXBlW107XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgSlNPTiBTY2hlbWFzLlxuICovXG5leHBvcnQgdHlwZSBKc29uU2NoZW1hR2VuZXJhdG9yT3B0aW9ucyA9IHtcbiAgLyoqIElmIHRydWUsIG1hcmtzIGV2ZXJ5IHByb3BlcnR5IGluIGFuIG9iamVjdCBhcyByZXF1aXJlZCAqL1xuICByZXF1aXJlQWxsPzogYm9vbGVhbjtcbiAgLyoqIElmIHRydWUsIGF0dGVtcHRzIHRvIGRldGVjdCBhbmQgaW5jbHVkZSBlbnVtcyBmb3IgYXJyYXlzIG9mIHN0cmluZ3MgKi9cbiAgZGV0ZWN0RW51bXM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZvciBnZW5lcmF0aW5nIGFuZCB2YWxpZGF0aW5nIEpTT04gU2NoZW1hcyBmcm9tIGRhdGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBKc29uU2NoZW1hR2VuZXJhdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcigpO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIGRhdGEgYWdhaW5zdCB0aGUgZ2l2ZW4gSlNPTiBTY2hlbWEuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gdmFsaWRhdGUuXG4gICAqIEBwYXJhbSBzY2hlbWEgLSBUaGUgSlNPTiBTY2hlbWEgdG8gdXNlIGZvciB2YWxpZGF0aW9uLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSB2YWxpZGF0aW9uIGZhaWxzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZShkYXRhOiB1bmtub3duLCBzY2hlbWE6IEpTT05TY2hlbWFUeXBlKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0b3IudmFsaWRhdGUoZGF0YSwgc2NoZW1hKTtcbiAgICBpZiAoIXJlc3VsdC52YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGZhaWxlZDogJHtyZXN1bHQuZXJyb3JzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIEpTT04gU2NoZW1hIGZvciB0aGUgZ2l2ZW4gZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSBmb3Igd2hpY2ggdG8gZ2VuZXJhdGUgYSBKU09OIFNjaGVtYS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBHZW5lcmF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgSlNPTiBTY2hlbWEuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlKGRhdGE6IHVua25vd24sIG9wdGlvbnM6IEpzb25TY2hlbWFHZW5lcmF0b3JPcHRpb25zID0ge30pOiBKU09OU2NoZW1hVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRTY2hlbWEoZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyDilIDilIDilIAgUFJJVkFURSBIRUxQRVJTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBwcmltaXRpdmUgdHlwZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHdob3NlIHR5cGUgaXMgdG8gYmUgaW5mZXJyZWQuXG4gICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdHlwZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGluZmVyVHlwZShkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgcmV0dXJuICdhcnJheSc7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JykgcmV0dXJuICdvYmplY3QnO1xuICAgIHJldHVybiB0eXBlb2YgZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBidWlsZHMgYSBKU09OIFNjaGVtYSBmcm9tIHRoZSBwcm92aWRlZCBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGludGVycHJldC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBHZW5lcmF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgSlNPTiBTY2hlbWEgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRTY2hlbWEoZGF0YTogdW5rbm93biwgb3B0aW9uczogSnNvblNjaGVtYUdlbmVyYXRvck9wdGlvbnMpOiBKU09OU2NoZW1hVHlwZSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuaW5mZXJUeXBlKGRhdGEpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdudWxsJyB9O1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZEFycmF5U2NoZW1hKGRhdGEgYXMgdW5rbm93bltdLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkT2JqZWN0U2NoZW1hKGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wdGlvbnMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgdHlwZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYWxsIHR5cGVzIGluIGFuIGFycmF5IGFyZSBvbmUgb2YgdGhlIHByaW1pdGl2ZSB0eXBlczpcbiAgICogc3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4uXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlcyAtIEFuIGFycmF5IG9mIHR5cGUgc3RyaW5ncy5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBldmVyeSB0eXBlIGlzIHByaW1pdGl2ZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGFsbFR5cGVzQXJlUHJpbWl0aXZlKHR5cGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlcy5ldmVyeSgodHlwZSkgPT4gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmNsdWRlcyh0eXBlKSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgSlNPTiBTY2hlbWEgZm9yIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBhcnJheSBkYXRhLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEdlbmVyYXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIEpTT04gU2NoZW1hIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFycmF5IGRhdGEuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBidWlsZEFycmF5U2NoZW1hKFxuICAgIGRhdGE6IHVua25vd25bXSxcbiAgICBvcHRpb25zOiBKc29uU2NoZW1hR2VuZXJhdG9yT3B0aW9ucyxcbiAgKTogSlNPTlNjaGVtYVR5cGUge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2FycmF5JywgaXRlbXM6IHsgdHlwZTogJ2FueScgfSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVzID0gZGF0YS5tYXAodGhpcy5pbmZlclR5cGUpO1xuICAgIGlmICh0aGlzLmFsbFR5cGVzQXJlUHJpbWl0aXZlKHR5cGVzKSkge1xuICAgICAgY29uc3QgdW5pcXVlVHlwZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQodHlwZXMpKTtcbiAgICAgIGlmICh1bmlxdWVUeXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiB1bmlxdWVUeXBlc1swXSxcbiAgICAgICAgICAgIC4uLih1bmlxdWVUeXBlc1swXSA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5kZXRlY3RFbnVtc1xuICAgICAgICAgICAgICA/IHsgZW51bTogQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEpKSB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyB0eXBlOiAnYXJyYXknLCBpdGVtczogeyB0eXBlOiB1bmlxdWVUeXBlcyB9IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRNaXhlZEFycmF5U2NoZW1hKGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIEpTT04gU2NoZW1hIGZvciBhbiBhcnJheSBjb250YWluaW5nIG1peGVkIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBhcnJheSBkYXRhLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEdlbmVyYXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIEpTT04gU2NoZW1hIHdpdGggYW4gXCJhbnlPZlwiIGNsYXVzZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkTWl4ZWRBcnJheVNjaGVtYShcbiAgICBkYXRhOiB1bmtub3duW10sXG4gICAgb3B0aW9uczogSnNvblNjaGVtYUdlbmVyYXRvck9wdGlvbnMsXG4gICk6IEpTT05TY2hlbWFUeXBlIHtcbiAgICBjb25zdCBzY2hlbWFzID0gZGF0YS5tYXAoKGl0ZW0pID0+IHRoaXMuYnVpbGRTY2hlbWEoaXRlbSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHVuaXF1ZVNjaGVtYXMgPSB0aGlzLm1lcmdlU2ltaWxhclNjaGVtYXMoc2NoZW1hcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczogdW5pcXVlU2NoZW1hcy5sZW5ndGggPT09IDEgPyB1bmlxdWVTY2hlbWFzWzBdIDogeyBhbnlPZjogdW5pcXVlU2NoZW1hcyB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgSlNPTiBTY2hlbWEgZm9yIGFuIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgb2JqZWN0IGRhdGEuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gR2VuZXJhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgSlNPTiBTY2hlbWEgZm9yIHRoZSBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBidWlsZE9iamVjdFNjaGVtYShcbiAgICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBvcHRpb25zOiBKc29uU2NoZW1hR2VuZXJhdG9yT3B0aW9ucyxcbiAgKTogSlNPTlNjaGVtYVR5cGUge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogSlNPTlNjaGVtYVR5cGUgfSA9IHt9O1xuICAgIGNvbnN0IHJlcXVpcmVkOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHsgcmVxdWlyZUFsbCA9IGZhbHNlIH0gPSBvcHRpb25zO1xuXG4gICAgT2JqZWN0LmVudHJpZXMoZGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBwcm9wZXJ0aWVzW2tleV0gPSB0aGlzLmJ1aWxkU2NoZW1hKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXF1aXJlQWxsKSByZXF1aXJlZC5wdXNoKGtleSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgLi4uKHJlcXVpcmVkLmxlbmd0aCA+IDAgPyB7IHJlcXVpcmVkIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBtZXJnZSB0d28gSlNPTiBTY2hlbWFzLiBNZXJnaW5nIGlzIG9ubHkgc3VjY2Vzc2Z1bCBpZiBib3RoIHNjaGVtYXMgaGF2ZSB0aGUgc2FtZSB0eXBlXG4gICAqIGFuZCB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIHdpdGhpbiBkZWZpbmVkIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY2hlbWFBIC0gVGhlIGZpcnN0IEpTT04gU2NoZW1hLlxuICAgKiBAcGFyYW0gc2NoZW1hQiAtIFRoZSBzZWNvbmQgSlNPTiBTY2hlbWEuXG4gICAqIEByZXR1cm5zIFRoZSBtZXJnZWQgc2NoZW1hIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSwgbnVsbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIG1lcmdlVHdvU2NoZW1hcyhcbiAgICBzY2hlbWFBOiBKU09OU2NoZW1hVHlwZSxcbiAgICBzY2hlbWFCOiBKU09OU2NoZW1hVHlwZSxcbiAgKTogSlNPTlNjaGVtYVR5cGUgfCBudWxsIHtcbiAgICBpZiAoc2NoZW1hQS50eXBlICE9PSBzY2hlbWFCLnR5cGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcHJvcHNBID0gc2NoZW1hQS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIGNvbnN0IHByb3BzQiA9IHNjaGVtYUIucHJvcGVydGllcyB8fCB7fTtcbiAgICBjb25zdCBhbGxLZXlzID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhwcm9wc0EpLCAuLi5PYmplY3Qua2V5cyhwcm9wc0IpXSkpO1xuXG4gICAgY29uc3QgaGFzQ29uZmxpY3QgPSBhbGxLZXlzLnNvbWUoXG4gICAgICAoa2V5KSA9PlxuICAgICAgICBrZXkgaW4gcHJvcHNBICYmXG4gICAgICAgIGtleSBpbiBwcm9wc0IgJiZcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocHJvcHNBW2tleV0pICE9PSBKU09OLnN0cmluZ2lmeShwcm9wc0Jba2V5XSksXG4gICAgKTtcbiAgICBpZiAoaGFzQ29uZmxpY3QpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWVyZ2VkUHJvcGVydGllcyA9IGFsbEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBwcm9wc0Fba2V5XSB8fCBwcm9wc0Jba2V5XTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBKU09OU2NoZW1hVHlwZSB9KTtcblxuICAgIC8vIEEgcHJvcGVydHkgaXMgcmVxdWlyZWQgaW4gdGhlIG1lcmdlZCBzY2hlbWEgb25seSBpZiBpdCB3YXMgcmVxdWlyZWQgaW4gYm90aC5cbiAgICBjb25zdCByZXF1aXJlZEEgPSBuZXcgU2V0KHNjaGVtYUEucmVxdWlyZWQgfHwgW10pO1xuICAgIGNvbnN0IHJlcXVpcmVkTWVyZ2VkID0gKHNjaGVtYUIucmVxdWlyZWQgfHwgW10pLmZpbHRlcigoZmllbGQpID0+IHJlcXVpcmVkQS5oYXMoZmllbGQpKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zY2hlbWFBLFxuICAgICAgLi4uc2NoZW1hQixcbiAgICAgIHR5cGU6IHNjaGVtYUEudHlwZSxcbiAgICAgIC4uLihPYmplY3Qua2V5cyhtZXJnZWRQcm9wZXJ0aWVzKS5sZW5ndGggPiAwID8geyBwcm9wZXJ0aWVzOiBtZXJnZWRQcm9wZXJ0aWVzIH0gOiB7fSksXG4gICAgICAuLi4ocmVxdWlyZWRNZXJnZWQubGVuZ3RoID4gMCA/IHsgcmVxdWlyZWQ6IHJlcXVpcmVkTWVyZ2VkIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZXMgYW4gYXJyYXkgb2YgSlNPTiBTY2hlbWFzLiBTY2hlbWFzIHdpdGggdGhlIHNhbWUgdHlwZSBhbmQgbm9uLWNvbmZsaWN0aW5nXG4gICAqIGRlZmluaXRpb25zIGFyZSBtZXJnZWQgdG9nZXRoZXIuXG4gICAqXG4gICAqIEBwYXJhbSBzY2hlbWFzIC0gVGhlIGxpc3Qgb2Ygc2NoZW1hcyB0byBtZXJnZS5cbiAgICogQHJldHVybnMgQSBkZWR1cGxpY2F0ZWQgbGlzdCBvZiBtZXJnZWQgc2NoZW1hcy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIG1lcmdlU2ltaWxhclNjaGVtYXMoc2NoZW1hczogSlNPTlNjaGVtYVR5cGVbXSk6IEpTT05TY2hlbWFUeXBlW10ge1xuICAgIGlmIChzY2hlbWFzLmxlbmd0aCA8PSAxKSByZXR1cm4gWy4uLnNjaGVtYXNdO1xuXG4gICAgbGV0IG1lcmdlZFNjaGVtYXMgPSBbLi4uc2NoZW1hc107XG5cbiAgICAvLyBBdHRlbXB0IG9uZSBtZXJnZSBwYXNzXG4gICAgY29uc3QgYXR0ZW1wdE1lcmdlID0gKFxuICAgICAgc2NoZW1hc0xpc3Q6IEpTT05TY2hlbWFUeXBlW10sXG4gICAgKTogeyBzY2hlbWFzOiBKU09OU2NoZW1hVHlwZVtdOyBtZXJnZWQ6IGJvb2xlYW4gfSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjaGVtYXNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHNjaGVtYXNMaXN0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgbWVyZ2VkID0gdGhpcy5tZXJnZVR3b1NjaGVtYXMoc2NoZW1hc0xpc3RbaV0sIHNjaGVtYXNMaXN0W2pdKTtcbiAgICAgICAgICBpZiAobWVyZ2VkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTY2hlbWFzID0gW1xuICAgICAgICAgICAgICAuLi5zY2hlbWFzTGlzdC5zbGljZSgwLCBpKSxcbiAgICAgICAgICAgICAgbWVyZ2VkLFxuICAgICAgICAgICAgICAuLi5zY2hlbWFzTGlzdC5zbGljZShpICsgMSwgaiksXG4gICAgICAgICAgICAgIC4uLnNjaGVtYXNMaXN0LnNsaWNlKGogKyAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4geyBzY2hlbWFzOiBuZXdTY2hlbWFzLCBtZXJnZWQ6IHRydWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHNjaGVtYXM6IHNjaGVtYXNMaXN0LCBtZXJnZWQ6IGZhbHNlIH07XG4gICAgfTtcblxuICAgIGxldCByZXN1bHQgPSBhdHRlbXB0TWVyZ2UobWVyZ2VkU2NoZW1hcyk7XG4gICAgd2hpbGUgKHJlc3VsdC5tZXJnZWQpIHtcbiAgICAgIG1lcmdlZFNjaGVtYXMgPSByZXN1bHQuc2NoZW1hcztcbiAgICAgIHJlc3VsdCA9IGF0dGVtcHRNZXJnZShtZXJnZWRTY2hlbWFzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkU2NoZW1hcztcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-generator.test.d.ts","sourceRoot":"","sources":["../../src/utils/json-schema-generator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const json_schema_generator_1 = require("./json-schema-generator");
|
|
4
|
+
const tests_1 = require("./tests");
|
|
5
|
+
describe('JsonSchemaGenerator', () => {
|
|
6
|
+
describe('generate()', () => {
|
|
7
|
+
const testCases = [
|
|
8
|
+
{
|
|
9
|
+
name: 'primitive - string',
|
|
10
|
+
input: 'test',
|
|
11
|
+
expected: { type: 'string' },
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'primitive - number',
|
|
15
|
+
input: 123,
|
|
16
|
+
expected: { type: 'number' },
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'primitive - boolean',
|
|
20
|
+
input: true,
|
|
21
|
+
expected: { type: 'boolean' },
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'primitive - null',
|
|
25
|
+
input: null,
|
|
26
|
+
expected: { type: 'null' },
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'empty array',
|
|
30
|
+
input: [],
|
|
31
|
+
expected: { type: 'array', items: { type: 'any' } },
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'simple array of numbers',
|
|
35
|
+
input: [1, 2, 3],
|
|
36
|
+
expected: { type: 'array', items: { type: 'number' } },
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'enum detection from array',
|
|
40
|
+
input: ['red', 'green', 'red', 'blue'],
|
|
41
|
+
options: { detectEnums: true },
|
|
42
|
+
expected: {
|
|
43
|
+
type: 'array',
|
|
44
|
+
items: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
enum: ['red', 'green', 'blue'],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'enum detection disabled',
|
|
52
|
+
input: ['red', 'green', 'red', 'blue'],
|
|
53
|
+
options: { detectEnums: false },
|
|
54
|
+
expected: { type: 'array', items: { type: 'string' } },
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'simple object',
|
|
58
|
+
input: { name: 'John', age: 30 },
|
|
59
|
+
expected: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {
|
|
62
|
+
name: { type: 'string' },
|
|
63
|
+
age: { type: 'number' },
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'object with required properties',
|
|
69
|
+
input: { name: 'John', age: 30 },
|
|
70
|
+
options: { requireAll: true },
|
|
71
|
+
expected: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
name: { type: 'string' },
|
|
75
|
+
age: { type: 'number' },
|
|
76
|
+
},
|
|
77
|
+
required: ['name', 'age'],
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'nested object',
|
|
82
|
+
input: {
|
|
83
|
+
name: 'John',
|
|
84
|
+
address: {
|
|
85
|
+
street: '123 Main St',
|
|
86
|
+
city: 'Boston',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
expected: {
|
|
90
|
+
type: 'object',
|
|
91
|
+
properties: {
|
|
92
|
+
name: { type: 'string' },
|
|
93
|
+
address: {
|
|
94
|
+
type: 'object',
|
|
95
|
+
properties: {
|
|
96
|
+
street: { type: 'string' },
|
|
97
|
+
city: { type: 'string' },
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'mixed array of primitives',
|
|
105
|
+
input: [1, 'test', true],
|
|
106
|
+
expected: {
|
|
107
|
+
type: 'array',
|
|
108
|
+
items: { type: ['number', 'string', 'boolean'] },
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'object with array',
|
|
113
|
+
input: {
|
|
114
|
+
name: 'John',
|
|
115
|
+
hobbies: ['reading', 'gaming'],
|
|
116
|
+
},
|
|
117
|
+
expected: {
|
|
118
|
+
type: 'object',
|
|
119
|
+
properties: {
|
|
120
|
+
name: { type: 'string' },
|
|
121
|
+
hobbies: { type: 'array', items: { type: 'string' } },
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'array of objects',
|
|
127
|
+
input: [
|
|
128
|
+
{ id: 1, name: 'John' },
|
|
129
|
+
{ id: 2, name: 'Jane' },
|
|
130
|
+
],
|
|
131
|
+
expected: {
|
|
132
|
+
type: 'array',
|
|
133
|
+
items: {
|
|
134
|
+
type: 'object',
|
|
135
|
+
properties: {
|
|
136
|
+
id: { type: 'number' },
|
|
137
|
+
name: { type: 'string' },
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'mixed array with objects',
|
|
144
|
+
input: [123, 'test', { name: 'John' }, true],
|
|
145
|
+
expected: {
|
|
146
|
+
type: 'array',
|
|
147
|
+
items: {
|
|
148
|
+
anyOf: [
|
|
149
|
+
{ type: 'number' },
|
|
150
|
+
{ type: 'string' },
|
|
151
|
+
{
|
|
152
|
+
type: 'object',
|
|
153
|
+
properties: { name: { type: 'string' } },
|
|
154
|
+
},
|
|
155
|
+
{ type: 'boolean' },
|
|
156
|
+
],
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'array of arrays',
|
|
162
|
+
input: [
|
|
163
|
+
[1, 2],
|
|
164
|
+
[3, 4],
|
|
165
|
+
],
|
|
166
|
+
expected: {
|
|
167
|
+
type: 'array',
|
|
168
|
+
items: { type: 'array', items: { type: 'number' } },
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'complex nested object',
|
|
173
|
+
input: {
|
|
174
|
+
id: 1,
|
|
175
|
+
user: {
|
|
176
|
+
name: 'John',
|
|
177
|
+
contacts: {
|
|
178
|
+
email: ['john@example.com', 'john.doe@example.com'],
|
|
179
|
+
phone: null,
|
|
180
|
+
},
|
|
181
|
+
preferences: {
|
|
182
|
+
notifications: true,
|
|
183
|
+
theme: {
|
|
184
|
+
dark: false,
|
|
185
|
+
colors: ['blue', 'green'],
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
options: { requireAll: true },
|
|
191
|
+
expected: {
|
|
192
|
+
type: 'object',
|
|
193
|
+
required: ['id', 'user'],
|
|
194
|
+
properties: {
|
|
195
|
+
id: { type: 'number' },
|
|
196
|
+
user: {
|
|
197
|
+
type: 'object',
|
|
198
|
+
required: ['name', 'contacts', 'preferences'],
|
|
199
|
+
properties: {
|
|
200
|
+
name: { type: 'string' },
|
|
201
|
+
contacts: {
|
|
202
|
+
type: 'object',
|
|
203
|
+
required: ['email', 'phone'],
|
|
204
|
+
properties: {
|
|
205
|
+
email: { type: 'array', items: { type: 'string' } },
|
|
206
|
+
phone: { type: 'null' },
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
preferences: {
|
|
210
|
+
type: 'object',
|
|
211
|
+
required: ['notifications', 'theme'],
|
|
212
|
+
properties: {
|
|
213
|
+
notifications: { type: 'boolean' },
|
|
214
|
+
theme: {
|
|
215
|
+
type: 'object',
|
|
216
|
+
required: ['dark', 'colors'],
|
|
217
|
+
properties: {
|
|
218
|
+
dark: { type: 'boolean' },
|
|
219
|
+
colors: { type: 'array', items: { type: 'string' } },
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: 'string array with no enum detection',
|
|
231
|
+
input: ['red', 'red', 'blue'],
|
|
232
|
+
options: { detectEnums: false },
|
|
233
|
+
expected: { type: 'array', items: { type: 'string' } },
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: 'array with mixed object types that can be merged',
|
|
237
|
+
input: [
|
|
238
|
+
{ id: 1, name: 'John' },
|
|
239
|
+
{ id: 2, name: 'Jane', age: 30 },
|
|
240
|
+
],
|
|
241
|
+
expected: {
|
|
242
|
+
type: 'array',
|
|
243
|
+
items: {
|
|
244
|
+
type: 'object',
|
|
245
|
+
properties: {
|
|
246
|
+
id: { type: 'number' },
|
|
247
|
+
name: { type: 'string' },
|
|
248
|
+
age: { type: 'number' },
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
name: 'array with mixed object types that cannot be merged',
|
|
255
|
+
input: [
|
|
256
|
+
{ id: 1, name: 'John' },
|
|
257
|
+
{ id: 'ABC', name: 'Jane' }, // id is string instead of number
|
|
258
|
+
],
|
|
259
|
+
expected: {
|
|
260
|
+
type: 'array',
|
|
261
|
+
items: {
|
|
262
|
+
anyOf: [
|
|
263
|
+
{
|
|
264
|
+
type: 'object',
|
|
265
|
+
properties: {
|
|
266
|
+
id: { type: 'number' },
|
|
267
|
+
name: { type: 'string' },
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
type: 'object',
|
|
272
|
+
properties: {
|
|
273
|
+
id: { type: 'string' },
|
|
274
|
+
name: { type: 'string' },
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
],
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
name: 'empty array',
|
|
283
|
+
input: [],
|
|
284
|
+
expected: {
|
|
285
|
+
type: 'array',
|
|
286
|
+
items: { type: 'any' },
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
name: 'array with single item',
|
|
291
|
+
input: ['test'],
|
|
292
|
+
expected: {
|
|
293
|
+
type: 'array',
|
|
294
|
+
items: { type: 'string' },
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
name: 'array with single object',
|
|
299
|
+
input: [{ id: 1, name: 'John' }],
|
|
300
|
+
expected: {
|
|
301
|
+
type: 'array',
|
|
302
|
+
items: {
|
|
303
|
+
type: 'object',
|
|
304
|
+
properties: {
|
|
305
|
+
id: { type: 'number' },
|
|
306
|
+
name: { type: 'string' },
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
name: 'array with single nested array',
|
|
313
|
+
input: [[1, 2, 3]],
|
|
314
|
+
expected: {
|
|
315
|
+
type: 'array',
|
|
316
|
+
items: {
|
|
317
|
+
type: 'array',
|
|
318
|
+
items: { type: 'number' },
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: 'array with objects having common required properties',
|
|
324
|
+
input: [
|
|
325
|
+
{ id: 1, name: 'John', age: 30 },
|
|
326
|
+
{ id: 2, name: 'Jane', email: 'jane@example.com' },
|
|
327
|
+
],
|
|
328
|
+
options: { requireAll: true },
|
|
329
|
+
expected: {
|
|
330
|
+
type: 'array',
|
|
331
|
+
items: {
|
|
332
|
+
type: 'object',
|
|
333
|
+
properties: {
|
|
334
|
+
id: { type: 'number' },
|
|
335
|
+
name: { type: 'string' },
|
|
336
|
+
age: { type: 'number' },
|
|
337
|
+
email: { type: 'string' },
|
|
338
|
+
},
|
|
339
|
+
required: ['id', 'name'],
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
];
|
|
344
|
+
// Run all test cases
|
|
345
|
+
(0, tests_1.filter)(testCases).forEach(({ name, input, options, expected }) => {
|
|
346
|
+
it(name, () => {
|
|
347
|
+
const result = json_schema_generator_1.JsonSchemaGenerator.generate(input, options);
|
|
348
|
+
expect(result).toEqual(expected);
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
describe('validate()', () => {
|
|
353
|
+
const errorTestCases = [
|
|
354
|
+
{
|
|
355
|
+
name: 'invalid schema type',
|
|
356
|
+
input: 123,
|
|
357
|
+
schema: { type: 'string' },
|
|
358
|
+
expectedError: 'Validation failed',
|
|
359
|
+
},
|
|
360
|
+
];
|
|
361
|
+
(0, tests_1.filter)(errorTestCases).forEach(({ name, input, schema, expectedError }) => {
|
|
362
|
+
it(name, () => {
|
|
363
|
+
expect(() => json_schema_generator_1.JsonSchemaGenerator.validate(input, schema)).toThrow(expectedError);
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEtZ2VuZXJhdG9yLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvanNvbi1zY2hlbWEtZ2VuZXJhdG9yLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtRUFJaUM7QUFDakMsbUNBQStDO0FBUy9DLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7SUFDbkMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7UUFDMUIsTUFBTSxTQUFTLEdBQXFCO1lBQ2xDO2dCQUNFLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLEtBQUssRUFBRSxNQUFNO2dCQUNiLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7YUFDN0I7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixLQUFLLEVBQUUsR0FBRztnQkFDVixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2FBQzdCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTthQUM5QjtZQUNEO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7YUFDM0I7WUFDRDtnQkFDRSxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7YUFDcEQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUseUJBQXlCO2dCQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEIsUUFBUSxFQUFFLEVBQUUs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Q0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7UUFRMUIsTUFBTSxjQUFjLEdBQXVCO1lBQ3pDO2dCQUNFLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLEtBQUssRUFBRSxHQUFHO2dCQUNWLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQzFCLGFBQWEsRUFBRSxtQkFBbUI7YUFDbkM7U0FDRixDQUFDO1FBRUYsSUFBQSxjQUFNLEVBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFO1lBQ3hFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQ0FBbUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25GLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSnNvblNjaGVtYUdlbmVyYXRvcixcbiAgSlNPTlNjaGVtYVR5cGUsXG4gIEpzb25TY2hlbWFHZW5lcmF0b3JPcHRpb25zLFxufSBmcm9tICcuL2pzb24tc2NoZW1hLWdlbmVyYXRvcic7XG5pbXBvcnQgeyBCYXNlVGVzdENhc2UsIGZpbHRlciB9IGZyb20gJy4vdGVzdHMnO1xuXG50eXBlIFNjaGVtYVRlc3RDYXNlID0gQmFzZVRlc3RDYXNlICYge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlucHV0OiB1bmtub3duO1xuICBvcHRpb25zPzogSnNvblNjaGVtYUdlbmVyYXRvck9wdGlvbnM7XG4gIGV4cGVjdGVkOiBKU09OU2NoZW1hVHlwZTtcbn07XG5cbmRlc2NyaWJlKCdKc29uU2NoZW1hR2VuZXJhdG9yJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2VuZXJhdGUoKScsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0Q2FzZXM6IFNjaGVtYVRlc3RDYXNlW10gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwcmltaXRpdmUgLSBzdHJpbmcnLFxuICAgICAgICBpbnB1dDogJ3Rlc3QnLFxuICAgICAgICBleHBlY3RlZDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3ByaW1pdGl2ZSAtIG51bWJlcicsXG4gICAgICAgIGlucHV0OiAxMjMsXG4gICAgICAgIGV4cGVjdGVkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncHJpbWl0aXZlIC0gYm9vbGVhbicsXG4gICAgICAgIGlucHV0OiB0cnVlLFxuICAgICAgICBleHBlY3RlZDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwcmltaXRpdmUgLSBudWxsJyxcbiAgICAgICAgaW5wdXQ6IG51bGwsXG4gICAgICAgIGV4cGVjdGVkOiB7IHR5cGU6ICdudWxsJyB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2VtcHR5IGFycmF5JyxcbiAgICAgICAgaW5wdXQ6IFtdLFxuICAgICAgICBleHBlY3RlZDogeyB0eXBlOiAnYXJyYXknLCBpdGVtczogeyB0eXBlOiAnYW55JyB9IH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2ltcGxlIGFycmF5IG9mIG51bWJlcnMnLFxuICAgICAgICBpbnB1dDogWzEsIDIsIDNdLFxuICAgICAgICBleHBlY3RlZDogeyB0eXBlOiAnYXJyYXknLCBpdGVtczogeyB0eXBlOiAnbnVtYmVyJyB9IH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZW51bSBkZXRlY3Rpb24gZnJvbSBhcnJheScsXG4gICAgICAgIGlucHV0OiBbJ3JlZCcsICdncmVlbicsICdyZWQnLCAnYmx1ZSddLFxuICAgICAgICBvcHRpb25zOiB7IGRldGVjdEVudW1zOiB0cnVlIH0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBlbnVtOiBbJ3JlZCcsICdncmVlbicsICdibHVlJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdlbnVtIGRldGVjdGlvbiBkaXNhYmxlZCcsXG4gICAgICAgIGlucHV0OiBbJ3JlZCcsICdncmVlbicsICdyZWQnLCAnYmx1ZSddLFxuICAgICAgICBvcHRpb25zOiB7IGRldGVjdEVudW1zOiBmYWxzZSB9LFxuICAgICAgICBleHBlY3RlZDogeyB0eXBlOiAnYXJyYXknLCBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2ltcGxlIG9iamVjdCcsXG4gICAgICAgIGlucHV0OiB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9LFxuICAgICAgICBleHBlY3RlZDoge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGFnZTogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb2JqZWN0IHdpdGggcmVxdWlyZWQgcHJvcGVydGllcycsXG4gICAgICAgIGlucHV0OiB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9LFxuICAgICAgICBvcHRpb25zOiB7IHJlcXVpcmVBbGw6IHRydWUgfSxcbiAgICAgICAgZXhwZWN0ZWQ6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICBhZ2U6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ25hbWUnLCAnYWdlJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnbmVzdGVkIG9iamVjdCcsXG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgIHN0cmVldDogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgICAgIGNpdHk6ICdCb3N0b24nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHN0cmVldDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgIGNpdHk6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdtaXhlZCBhcnJheSBvZiBwcmltaXRpdmVzJyxcbiAgICAgICAgaW5wdXQ6IFsxLCAndGVzdCcsIHRydWVdLFxuICAgICAgICBleHBlY3RlZDoge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHsgdHlwZTogWydudW1iZXInLCAnc3RyaW5nJywgJ2Jvb2xlYW4nXSB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29iamVjdCB3aXRoIGFycmF5JyxcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ2dhbWluZyddLFxuICAgICAgICB9LFxuICAgICAgICBleHBlY3RlZDoge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIGhvYmJpZXM6IHsgdHlwZTogJ2FycmF5JywgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYXJyYXkgb2Ygb2JqZWN0cycsXG4gICAgICAgIGlucHV0OiBbXG4gICAgICAgICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gICAgICAgICAgeyBpZDogMiwgbmFtZTogJ0phbmUnIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGlkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdtaXhlZCBhcnJheSB3aXRoIG9iamVjdHMnLFxuICAgICAgICBpbnB1dDogWzEyMywgJ3Rlc3QnLCB7IG5hbWU6ICdKb2huJyB9LCB0cnVlXSxcbiAgICAgICAgZXhwZWN0ZWQ6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgICB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgbmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYXJyYXkgb2YgYXJyYXlzJyxcbiAgICAgICAgaW5wdXQ6IFtcbiAgICAgICAgICBbMSwgMl0sXG4gICAgICAgICAgWzMsIDRdLFxuICAgICAgICBdLFxuICAgICAgICBleHBlY3RlZDoge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ2FycmF5JywgaXRlbXM6IHsgdHlwZTogJ251bWJlcicgfSB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvbXBsZXggbmVzdGVkIG9iamVjdCcsXG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICAgICAgY29udGFjdHM6IHtcbiAgICAgICAgICAgICAgZW1haWw6IFsnam9obkBleGFtcGxlLmNvbScsICdqb2huLmRvZUBleGFtcGxlLmNvbSddLFxuICAgICAgICAgICAgICBwaG9uZTogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmZXJlbmNlczoge1xuICAgICAgICAgICAgICBub3RpZmljYXRpb25zOiB0cnVlLFxuICAgICAgICAgICAgICB0aGVtZToge1xuICAgICAgICAgICAgICAgIGRhcms6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbG9yczogWydibHVlJywgJ2dyZWVuJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IHsgcmVxdWlyZUFsbDogdHJ1ZSB9LFxuICAgICAgICBleHBlY3RlZDoge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ2lkJywgJ3VzZXInXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnbmFtZScsICdjb250YWN0cycsICdwcmVmZXJlbmNlcyddLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgIGNvbnRhY3RzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ2VtYWlsJywgJ3Bob25lJ10sXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6ICdhcnJheScsIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogJ251bGwnIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJlZmVyZW5jZXM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnbm90aWZpY2F0aW9ucycsICd0aGVtZSddLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25zOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICAgICAgICAgICAgICB0aGVtZToge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ2RhcmsnLCAnY29sb3JzJ10sXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGFyazogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczogeyB0eXBlOiAnYXJyYXknLCBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdHJpbmcgYXJyYXkgd2l0aCBubyBlbnVtIGRldGVjdGlvbicsXG4gICAgICAgIGlucHV0OiBbJ3JlZCcsICdyZWQnLCAnYmx1ZSddLFxuICAgICAgICBvcHRpb25zOiB7IGRldGVjdEVudW1zOiBmYWxzZSB9LFxuICAgICAgICBleHBlY3RlZDogeyB0eXBlOiAnYXJyYXknLCBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYXJyYXkgd2l0aCBtaXhlZCBvYmplY3QgdHlwZXMgdGhhdCBjYW4gYmUgbWVyZ2VkJyxcbiAgICAgICAgaW5wdXQ6IFtcbiAgICAgICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAgICAgICAgICB7IGlkOiAyLCBuYW1lOiAnSmFuZScsIGFnZTogMzAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZXhwZWN0ZWQ6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgaWQ6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgICAgICAgbmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICBhZ2U6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhcnJheSB3aXRoIG1peGVkIG9iamVjdCB0eXBlcyB0aGF0IGNhbm5vdCBiZSBtZXJnZWQnLFxuICAgICAgICBpbnB1dDogW1xuICAgICAgICAgIHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICAgICAgICAgIHsgaWQ6ICdBQkMnLCBuYW1lOiAnSmFuZScgfSwgLy8gaWQgaXMgc3RyaW5nIGluc3RlYWQgb2YgbnVtYmVyXG4gICAgICAgIF0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICAgICAgICBuYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgICBuYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdlbXB0eSBhcnJheScsXG4gICAgICAgIGlucHV0OiBbXSxcbiAgICAgICAgZXhwZWN0ZWQ6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdhbnknIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYXJyYXkgd2l0aCBzaW5nbGUgaXRlbScsXG4gICAgICAgIGlucHV0OiBbJ3Rlc3QnXSxcbiAgICAgICAgZXhwZWN0ZWQ6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYXJyYXkgd2l0aCBzaW5nbGUgb2JqZWN0JyxcbiAgICAgICAgaW5wdXQ6IFt7IGlkOiAxLCBuYW1lOiAnSm9obicgfV0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGlkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhcnJheSB3aXRoIHNpbmdsZSBuZXN0ZWQgYXJyYXknLFxuICAgICAgICBpbnB1dDogW1sxLCAyLCAzXV0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhcnJheSB3aXRoIG9iamVjdHMgaGF2aW5nIGNvbW1vbiByZXF1aXJlZCBwcm9wZXJ0aWVzJyxcbiAgICAgICAgaW5wdXQ6IFtcbiAgICAgICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicsIGFnZTogMzAgfSxcbiAgICAgICAgICB7IGlkOiAyLCBuYW1lOiAnSmFuZScsIGVtYWlsOiAnamFuZUBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3B0aW9uczogeyByZXF1aXJlQWxsOiB0cnVlIH0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGlkOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgYWdlOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFsnaWQnLCAnbmFtZSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBSdW4gYWxsIHRlc3QgY2FzZXNcbiAgICBmaWx0ZXIodGVzdENhc2VzKS5mb3JFYWNoKCh7IG5hbWUsIGlucHV0LCBvcHRpb25zLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICBpdChuYW1lLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEpzb25TY2hlbWFHZW5lcmF0b3IuZ2VuZXJhdGUoaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsaWRhdGUoKScsICgpID0+IHtcbiAgICB0eXBlIFZhbGlkYXRlVGVzdENhc2UgPSBCYXNlVGVzdENhc2UgJiB7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBpbnB1dDogdW5rbm93bjtcbiAgICAgIHNjaGVtYTogSlNPTlNjaGVtYVR5cGU7XG4gICAgICBleHBlY3RlZEVycm9yOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yVGVzdENhc2VzOiBWYWxpZGF0ZVRlc3RDYXNlW10gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdpbnZhbGlkIHNjaGVtYSB0eXBlJyxcbiAgICAgICAgaW5wdXQ6IDEyMyxcbiAgICAgICAgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIGV4cGVjdGVkRXJyb3I6ICdWYWxpZGF0aW9uIGZhaWxlZCcsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBmaWx0ZXIoZXJyb3JUZXN0Q2FzZXMpLmZvckVhY2goKHsgbmFtZSwgaW5wdXQsIHNjaGVtYSwgZXhwZWN0ZWRFcnJvciB9KSA9PiB7XG4gICAgICBpdChuYW1lLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBKc29uU2NoZW1hR2VuZXJhdG9yLnZhbGlkYXRlKGlucHV0LCBzY2hlbWEpKS50b1Rocm93KGV4cGVjdGVkRXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
package/build/utils/misc.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export declare const isPrimitive: (arg: unknown) => boolean;
|
|
|
33
33
|
* for null argss returns "NULL" insted of "object"
|
|
34
34
|
*
|
|
35
35
|
*/
|
|
36
|
-
export declare const getType: (arg: unknown) => "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | "
|
|
36
|
+
export declare const getType: (arg: unknown) => "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | "array" | "NULL";
|
|
37
37
|
export declare const isObject: (value: unknown) => boolean;
|
|
38
38
|
export declare const isEmpty: (input: unknown) => boolean;
|
|
39
39
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../src/utils/tests.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,MAAM,iDAWlB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filter = void 0;
|
|
4
|
+
const filter = (testCases) => {
|
|
5
|
+
// Check if any test case has `only` set to true.
|
|
6
|
+
const hasOnly = testCases.some((testCase) => testCase.only);
|
|
7
|
+
if (hasOnly) {
|
|
8
|
+
// Only run test cases that are marked with `only` and are not skipped.
|
|
9
|
+
return testCases.filter((testCase) => testCase.only && !testCase.skip);
|
|
10
|
+
}
|
|
11
|
+
// Otherwise, run all test cases that are not skipped.
|
|
12
|
+
return testCases.filter((testCase) => !testCase.skip);
|
|
13
|
+
};
|
|
14
|
+
exports.filter = filter;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdGVzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS08sTUFBTSxNQUFNLEdBQUcsQ0FBeUIsU0FBYyxFQUFPLEVBQUU7SUFDcEUsaURBQWlEO0lBQ2pELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1RCxJQUFJLE9BQU8sRUFBRTtRQUNYLHVFQUF1RTtRQUN2RSxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDeEU7SUFFRCxzREFBc0Q7SUFDdEQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFYVyxRQUFBLE1BQU0sVUFXakIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBCYXNlVGVzdENhc2UgPSB7XG4gIHNraXA/OiBib29sZWFuO1xuICBvbmx5PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXIgPSA8VCBleHRlbmRzIEJhc2VUZXN0Q2FzZT4odGVzdENhc2VzOiBUW10pOiBUW10gPT4ge1xuICAvLyBDaGVjayBpZiBhbnkgdGVzdCBjYXNlIGhhcyBgb25seWAgc2V0IHRvIHRydWUuXG4gIGNvbnN0IGhhc09ubHkgPSB0ZXN0Q2FzZXMuc29tZSgodGVzdENhc2UpID0+IHRlc3RDYXNlLm9ubHkpO1xuXG4gIGlmIChoYXNPbmx5KSB7XG4gICAgLy8gT25seSBydW4gdGVzdCBjYXNlcyB0aGF0IGFyZSBtYXJrZWQgd2l0aCBgb25seWAgYW5kIGFyZSBub3Qgc2tpcHBlZC5cbiAgICByZXR1cm4gdGVzdENhc2VzLmZpbHRlcigodGVzdENhc2UpID0+IHRlc3RDYXNlLm9ubHkgJiYgIXRlc3RDYXNlLnNraXApO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCBydW4gYWxsIHRlc3QgY2FzZXMgdGhhdCBhcmUgbm90IHNraXBwZWQuXG4gIHJldHVybiB0ZXN0Q2FzZXMuZmlsdGVyKCh0ZXN0Q2FzZSkgPT4gIXRlc3RDYXNlLnNraXApO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests.test.d.ts","sourceRoot":"","sources":["../../src/utils/tests.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tests_1 = require("./tests");
|
|
4
|
+
describe('filter', () => {
|
|
5
|
+
const testCases = [
|
|
6
|
+
{
|
|
7
|
+
name: 'should return all test cases when no skip or only flags are present',
|
|
8
|
+
input: [{ name: 'test1' }, { name: 'test2' }, { name: 'test3' }],
|
|
9
|
+
expected: [{ name: 'test1' }, { name: 'test2' }, { name: 'test3' }],
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: 'should filter out skipped test cases',
|
|
13
|
+
input: [{ name: 'test1', skip: true }, { name: 'test2' }, { name: 'test3', skip: true }],
|
|
14
|
+
expected: [{ name: 'test2' }],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'should return only the test cases marked with only',
|
|
18
|
+
input: [{ name: 'test1' }, { name: 'test2', only: true }, { name: 'test3' }],
|
|
19
|
+
expected: [{ name: 'test2', only: true }],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'should return only non-skipped test cases marked with only',
|
|
23
|
+
input: [
|
|
24
|
+
{ name: 'test1', only: true },
|
|
25
|
+
{ name: 'test2', only: true, skip: true },
|
|
26
|
+
{ name: 'test3', only: true },
|
|
27
|
+
],
|
|
28
|
+
expected: [
|
|
29
|
+
{ name: 'test1', only: true },
|
|
30
|
+
{ name: 'test3', only: true },
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'should handle empty array input',
|
|
35
|
+
input: [],
|
|
36
|
+
expected: [],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'should return all test cases marked with only',
|
|
40
|
+
input: [{ name: 'test1', only: true }, { name: 'test2' }, { name: 'test3', only: true }],
|
|
41
|
+
expected: [
|
|
42
|
+
{ name: 'test1', only: true },
|
|
43
|
+
{ name: 'test3', only: true },
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'should return empty array when all tests are skipped',
|
|
48
|
+
input: [
|
|
49
|
+
{ name: 'test1', skip: true },
|
|
50
|
+
{ name: 'test2', skip: true },
|
|
51
|
+
{ name: 'test3', skip: true },
|
|
52
|
+
],
|
|
53
|
+
expected: [],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'should return non-skipped tests when no only flag is present',
|
|
57
|
+
input: [{ name: 'test1', skip: true }, { name: 'test2' }, { name: 'test3', skip: false }],
|
|
58
|
+
expected: [{ name: 'test2' }, { name: 'test3', skip: false }],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'should handle undefined skip and only properties',
|
|
62
|
+
input: [
|
|
63
|
+
{ name: 'test1', skip: undefined },
|
|
64
|
+
{ name: 'test2', only: undefined },
|
|
65
|
+
{ name: 'test3' },
|
|
66
|
+
],
|
|
67
|
+
expected: [
|
|
68
|
+
{ name: 'test1', skip: undefined },
|
|
69
|
+
{ name: 'test2', only: undefined },
|
|
70
|
+
{ name: 'test3' },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'should maintain original object properties',
|
|
75
|
+
input: [
|
|
76
|
+
{ name: 'test1', extraProp: 1 },
|
|
77
|
+
{ name: 'test2', extraProp: 2, skip: true },
|
|
78
|
+
{ name: 'test3', extraProp: 3, only: true },
|
|
79
|
+
],
|
|
80
|
+
expected: [{ name: 'test3', extraProp: 3, only: true }],
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
testCases.forEach(({ name, input, expected }) => {
|
|
84
|
+
it(name, () => {
|
|
85
|
+
expect((0, tests_1.filter)(input)).toEqual(expected);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90ZXN0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQStDO0FBWS9DLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO0lBQ3RCLE1BQU0sU0FBUyxHQUFlO1FBQzVCO1lBQ0UsSUFBSSxFQUFFLHFFQUFxRTtZQUMzRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNoRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztTQUNwRTtRQUNEO1lBQ0UsSUFBSSxFQUFFLHNDQUFzQztZQUM1QyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDeEYsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDOUI7UUFDRDtZQUNFLElBQUksRUFBRSxvREFBb0Q7WUFDMUQsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM1RSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQzFDO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsNERBQTREO1lBQ2xFLEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDekMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDOUI7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQzlCO1NBQ0Y7UUFDRDtZQUNFLElBQUksRUFBRSxpQ0FBaUM7WUFDdkMsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNiO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsK0NBQStDO1lBQ3JELEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN4RixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQzlCO1NBQ0Y7UUFDRDtZQUNFLElBQUksRUFBRSxzREFBc0Q7WUFDNUQsS0FBSyxFQUFFO2dCQUNMLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUM3QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDOUI7WUFDRCxRQUFRLEVBQUUsRUFBRTtTQUNiO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsOERBQThEO1lBQ3BFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6RixRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQzlEO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsa0RBQWtEO1lBQ3hELEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDbEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQ2xDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTthQUNsQjtZQUNELFFBQVEsRUFBRTtnQkFDUixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDbEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQ2xDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTthQUNsQjtTQUNGO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsNENBQTRDO1lBQ2xELEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtnQkFDL0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDM0MsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTthQUM1QztZQUNELFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN4RDtLQUNGLENBQUM7SUFFRixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7UUFDOUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDWixNQUFNLENBQUMsSUFBQSxjQUFNLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVRlc3RDYXNlLCBmaWx0ZXIgfSBmcm9tICcuL3Rlc3RzJztcblxudHlwZSBDdXN0b21UZXN0Q2FzZSA9IEJhc2VUZXN0Q2FzZSAmIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufTtcblxuaW50ZXJmYWNlIFRlc3RJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBleHBlY3RlZDogQ3VzdG9tVGVzdENhc2VbXTtcbiAgaW5wdXQ6IEN1c3RvbVRlc3RDYXNlW107XG59XG5cbmRlc2NyaWJlKCdmaWx0ZXInLCAoKSA9PiB7XG4gIGNvbnN0IHRlc3RDYXNlczogVGVzdEl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnc2hvdWxkIHJldHVybiBhbGwgdGVzdCBjYXNlcyB3aGVuIG5vIHNraXAgb3Igb25seSBmbGFncyBhcmUgcHJlc2VudCcsXG4gICAgICBpbnB1dDogW3sgbmFtZTogJ3Rlc3QxJyB9LCB7IG5hbWU6ICd0ZXN0MicgfSwgeyBuYW1lOiAndGVzdDMnIH1dLFxuICAgICAgZXhwZWN0ZWQ6IFt7IG5hbWU6ICd0ZXN0MScgfSwgeyBuYW1lOiAndGVzdDInIH0sIHsgbmFtZTogJ3Rlc3QzJyB9XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzaG91bGQgZmlsdGVyIG91dCBza2lwcGVkIHRlc3QgY2FzZXMnLFxuICAgICAgaW5wdXQ6IFt7IG5hbWU6ICd0ZXN0MScsIHNraXA6IHRydWUgfSwgeyBuYW1lOiAndGVzdDInIH0sIHsgbmFtZTogJ3Rlc3QzJywgc2tpcDogdHJ1ZSB9XSxcbiAgICAgIGV4cGVjdGVkOiBbeyBuYW1lOiAndGVzdDInIH1dLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Nob3VsZCByZXR1cm4gb25seSB0aGUgdGVzdCBjYXNlcyBtYXJrZWQgd2l0aCBvbmx5JyxcbiAgICAgIGlucHV0OiBbeyBuYW1lOiAndGVzdDEnIH0sIHsgbmFtZTogJ3Rlc3QyJywgb25seTogdHJ1ZSB9LCB7IG5hbWU6ICd0ZXN0MycgfV0sXG4gICAgICBleHBlY3RlZDogW3sgbmFtZTogJ3Rlc3QyJywgb25seTogdHJ1ZSB9XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzaG91bGQgcmV0dXJuIG9ubHkgbm9uLXNraXBwZWQgdGVzdCBjYXNlcyBtYXJrZWQgd2l0aCBvbmx5JyxcbiAgICAgIGlucHV0OiBbXG4gICAgICAgIHsgbmFtZTogJ3Rlc3QxJywgb25seTogdHJ1ZSB9LFxuICAgICAgICB7IG5hbWU6ICd0ZXN0MicsIG9ubHk6IHRydWUsIHNraXA6IHRydWUgfSxcbiAgICAgICAgeyBuYW1lOiAndGVzdDMnLCBvbmx5OiB0cnVlIH0sXG4gICAgICBdLFxuICAgICAgZXhwZWN0ZWQ6IFtcbiAgICAgICAgeyBuYW1lOiAndGVzdDEnLCBvbmx5OiB0cnVlIH0sXG4gICAgICAgIHsgbmFtZTogJ3Rlc3QzJywgb25seTogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzaG91bGQgaGFuZGxlIGVtcHR5IGFycmF5IGlucHV0JyxcbiAgICAgIGlucHV0OiBbXSxcbiAgICAgIGV4cGVjdGVkOiBbXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzaG91bGQgcmV0dXJuIGFsbCB0ZXN0IGNhc2VzIG1hcmtlZCB3aXRoIG9ubHknLFxuICAgICAgaW5wdXQ6IFt7IG5hbWU6ICd0ZXN0MScsIG9ubHk6IHRydWUgfSwgeyBuYW1lOiAndGVzdDInIH0sIHsgbmFtZTogJ3Rlc3QzJywgb25seTogdHJ1ZSB9XSxcbiAgICAgIGV4cGVjdGVkOiBbXG4gICAgICAgIHsgbmFtZTogJ3Rlc3QxJywgb25seTogdHJ1ZSB9LFxuICAgICAgICB7IG5hbWU6ICd0ZXN0MycsIG9ubHk6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2hvdWxkIHJldHVybiBlbXB0eSBhcnJheSB3aGVuIGFsbCB0ZXN0cyBhcmUgc2tpcHBlZCcsXG4gICAgICBpbnB1dDogW1xuICAgICAgICB7IG5hbWU6ICd0ZXN0MScsIHNraXA6IHRydWUgfSxcbiAgICAgICAgeyBuYW1lOiAndGVzdDInLCBza2lwOiB0cnVlIH0sXG4gICAgICAgIHsgbmFtZTogJ3Rlc3QzJywgc2tpcDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICAgIGV4cGVjdGVkOiBbXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzaG91bGQgcmV0dXJuIG5vbi1za2lwcGVkIHRlc3RzIHdoZW4gbm8gb25seSBmbGFnIGlzIHByZXNlbnQnLFxuICAgICAgaW5wdXQ6IFt7IG5hbWU6ICd0ZXN0MScsIHNraXA6IHRydWUgfSwgeyBuYW1lOiAndGVzdDInIH0sIHsgbmFtZTogJ3Rlc3QzJywgc2tpcDogZmFsc2UgfV0sXG4gICAgICBleHBlY3RlZDogW3sgbmFtZTogJ3Rlc3QyJyB9LCB7IG5hbWU6ICd0ZXN0MycsIHNraXA6IGZhbHNlIH1dLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Nob3VsZCBoYW5kbGUgdW5kZWZpbmVkIHNraXAgYW5kIG9ubHkgcHJvcGVydGllcycsXG4gICAgICBpbnB1dDogW1xuICAgICAgICB7IG5hbWU6ICd0ZXN0MScsIHNraXA6IHVuZGVmaW5lZCB9LFxuICAgICAgICB7IG5hbWU6ICd0ZXN0MicsIG9ubHk6IHVuZGVmaW5lZCB9LFxuICAgICAgICB7IG5hbWU6ICd0ZXN0MycgfSxcbiAgICAgIF0sXG4gICAgICBleHBlY3RlZDogW1xuICAgICAgICB7IG5hbWU6ICd0ZXN0MScsIHNraXA6IHVuZGVmaW5lZCB9LFxuICAgICAgICB7IG5hbWU6ICd0ZXN0MicsIG9ubHk6IHVuZGVmaW5lZCB9LFxuICAgICAgICB7IG5hbWU6ICd0ZXN0MycgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2hvdWxkIG1haW50YWluIG9yaWdpbmFsIG9iamVjdCBwcm9wZXJ0aWVzJyxcbiAgICAgIGlucHV0OiBbXG4gICAgICAgIHsgbmFtZTogJ3Rlc3QxJywgZXh0cmFQcm9wOiAxIH0sXG4gICAgICAgIHsgbmFtZTogJ3Rlc3QyJywgZXh0cmFQcm9wOiAyLCBza2lwOiB0cnVlIH0sXG4gICAgICAgIHsgbmFtZTogJ3Rlc3QzJywgZXh0cmFQcm9wOiAzLCBvbmx5OiB0cnVlIH0sXG4gICAgICBdLFxuICAgICAgZXhwZWN0ZWQ6IFt7IG5hbWU6ICd0ZXN0MycsIGV4dHJhUHJvcDogMywgb25seTogdHJ1ZSB9XSxcbiAgICB9LFxuICBdO1xuXG4gIHRlc3RDYXNlcy5mb3JFYWNoKCh7IG5hbWUsIGlucHV0LCBleHBlY3RlZCB9KSA9PiB7XG4gICAgaXQobmFtZSwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZpbHRlcihpbnB1dCkpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudderstack/integrations-lib",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.18",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"module": "build/index.js",
|
|
@@ -53,7 +53,8 @@
|
|
|
53
53
|
"sha256": "^0.2.0",
|
|
54
54
|
"tslib": "^2.4.0",
|
|
55
55
|
"uuid": "^11.0.5",
|
|
56
|
-
"winston": "^3.11.0"
|
|
56
|
+
"winston": "^3.11.0",
|
|
57
|
+
"jsonschema": "^1.5.0"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
60
|
"@commitlint/config-conventional": "^18.5.0",
|