jsii-diff 1.59.0 → 1.61.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.
- package/bin/jsii-diff.js +9 -9
- package/bin/jsii-diff.js.map +1 -0
- package/lib/diagnostics.js +1 -1
- package/lib/diagnostics.js.map +1 -0
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -0
- package/lib/stability.js +1 -1
- package/lib/stability.js.map +1 -0
- package/lib/type-analysis.js +3 -3
- package/lib/type-analysis.js.map +1 -0
- package/lib/type-comparison.js +41 -42
- package/lib/type-comparison.js.map +1 -0
- package/lib/types.js +2 -3
- package/lib/types.js.map +1 -0
- package/lib/util.js +1 -1
- package/lib/util.js.map +1 -0
- package/lib/validations.js +5 -5
- package/lib/validations.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +3 -3
- package/lib/version.js.map +1 -0
- package/package.json +9 -15
- package/test/classes.test.js +33 -33
- package/test/classes.test.js.map +1 -0
- package/test/diagnostics.test.js +22 -22
- package/test/diagnostics.test.js.map +1 -0
- package/test/enums.test.js +4 -4
- package/test/enums.test.js.map +1 -0
- package/test/structs.test.js +12 -12
- package/test/structs.test.js.map +1 -0
- package/test/type-unions.test.js +7 -7
- package/test/type-unions.test.js.map +1 -0
- package/test/util.js +4 -4
- package/test/util.js.map +1 -0
package/test/classes.test.js
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const util_1 = require("./util");
|
|
4
4
|
// ----------------------------------------------------------------------
|
|
5
|
-
test('okay to add a new class', () => util_1.expectNoError(`
|
|
5
|
+
test('okay to add a new class', () => (0, util_1.expectNoError)(`
|
|
6
6
|
export class Foo1 { }
|
|
7
7
|
`, `
|
|
8
8
|
export class Foo1 { }
|
|
9
9
|
export class Foo2 { }
|
|
10
10
|
`));
|
|
11
11
|
// ----------------------------------------------------------------------
|
|
12
|
-
test('okay to add a new function to a class', () => util_1.expectNoError(`
|
|
12
|
+
test('okay to add a new function to a class', () => (0, util_1.expectNoError)(`
|
|
13
13
|
export class Foo { }
|
|
14
14
|
`, `
|
|
15
15
|
export class Foo {
|
|
@@ -17,7 +17,7 @@ test('okay to add a new function to a class', () => util_1.expectNoError(`
|
|
|
17
17
|
}
|
|
18
18
|
`));
|
|
19
19
|
// ----------------------------------------------------------------------
|
|
20
|
-
test('not okay to add a required argument to a method', () => util_1.expectError(/newly required argument/, `
|
|
20
|
+
test('not okay to add a required argument to a method', () => (0, util_1.expectError)(/newly required argument/, `
|
|
21
21
|
export class Foo {
|
|
22
22
|
public bar(arg1: string): void {
|
|
23
23
|
Array.isArray(arg1);
|
|
@@ -32,7 +32,7 @@ test('not okay to add a required argument to a method', () => util_1.expectError
|
|
|
32
32
|
}
|
|
33
33
|
`));
|
|
34
34
|
// ----------------------------------------------------------------------
|
|
35
|
-
test('okay to make a required argument optional', () => util_1.expectNoError(`
|
|
35
|
+
test('okay to make a required argument optional', () => (0, util_1.expectNoError)(`
|
|
36
36
|
export class Foo {
|
|
37
37
|
public bar(arg1: string, arg2: string): void {
|
|
38
38
|
Array.isArray(arg1);
|
|
@@ -48,7 +48,7 @@ test('okay to make a required argument optional', () => util_1.expectNoError(`
|
|
|
48
48
|
}
|
|
49
49
|
`));
|
|
50
50
|
// ----------------------------------------------------------------------
|
|
51
|
-
test('okay to turn required arguments into varargs', () => util_1.expectNoError(`
|
|
51
|
+
test('okay to turn required arguments into varargs', () => (0, util_1.expectNoError)(`
|
|
52
52
|
export class Foo {
|
|
53
53
|
public bar(arg1: string, arg2: number, arg3: number): void {
|
|
54
54
|
Array.isArray(arg1);
|
|
@@ -65,7 +65,7 @@ test('okay to turn required arguments into varargs', () => util_1.expectNoError(
|
|
|
65
65
|
}
|
|
66
66
|
`));
|
|
67
67
|
// ----------------------------------------------------------------------
|
|
68
|
-
test('not allowed to change argument type to a different scalar', () => util_1.expectError(/method.*foo.*argument arg1, takes number \(formerly string\): string is not assignable to number/i, `
|
|
68
|
+
test('not allowed to change argument type to a different scalar', () => (0, util_1.expectError)(/method.*foo.*argument arg1, takes number \(formerly string\): string is not assignable to number/i, `
|
|
69
69
|
export class Foo {
|
|
70
70
|
public bar(arg1: string): void {
|
|
71
71
|
Array.isArray(arg1);
|
|
@@ -79,7 +79,7 @@ test('not allowed to change argument type to a different scalar', () => util_1.e
|
|
|
79
79
|
}
|
|
80
80
|
`));
|
|
81
81
|
// ----------------------------------------------------------------------
|
|
82
|
-
test('cannot add any abstract members to a subclassable class', () => util_1.expectError(/adds requirement for subclasses to implement 'piet'./, `
|
|
82
|
+
test('cannot add any abstract members to a subclassable class', () => (0, util_1.expectError)(/adds requirement for subclasses to implement 'piet'./, `
|
|
83
83
|
/**
|
|
84
84
|
* @subclassable
|
|
85
85
|
*/
|
|
@@ -96,7 +96,7 @@ test('cannot add any abstract members to a subclassable class', () => util_1.exp
|
|
|
96
96
|
}
|
|
97
97
|
`));
|
|
98
98
|
// ----------------------------------------------------------------------
|
|
99
|
-
test('cannot add any members to a subclassable interface, not even optional ones', () => util_1.expectError(/adds requirement for subclasses to implement 'piet'./, `
|
|
99
|
+
test('cannot add any members to a subclassable interface, not even optional ones', () => (0, util_1.expectError)(/adds requirement for subclasses to implement 'piet'./, `
|
|
100
100
|
/**
|
|
101
101
|
* @subclassable
|
|
102
102
|
*/
|
|
@@ -113,7 +113,7 @@ test('cannot add any members to a subclassable interface, not even optional ones
|
|
|
113
113
|
}
|
|
114
114
|
`));
|
|
115
115
|
// ----------------------------------------------------------------------
|
|
116
|
-
test('cannot make a member less visible', () => util_1.expectError(/changed from 'public' to 'protected'/, `
|
|
116
|
+
test('cannot make a member less visible', () => (0, util_1.expectError)(/changed from 'public' to 'protected'/, `
|
|
117
117
|
export class Henk {
|
|
118
118
|
public name: string = 'henk';
|
|
119
119
|
}
|
|
@@ -124,7 +124,7 @@ test('cannot make a member less visible', () => util_1.expectError(/changed from
|
|
|
124
124
|
`));
|
|
125
125
|
// ----------------------------------------------------------------------
|
|
126
126
|
describe('implement base types need to be present in updated type system', () => {
|
|
127
|
-
test('for interfaces', () => util_1.expectError(/not assignable to all base types anymore/, `
|
|
127
|
+
test('for interfaces', () => (0, util_1.expectError)(/not assignable to all base types anymore/, `
|
|
128
128
|
export interface IPapa {
|
|
129
129
|
readonly pipe: string;
|
|
130
130
|
}
|
|
@@ -141,7 +141,7 @@ describe('implement base types need to be present in updated type system', () =>
|
|
|
141
141
|
readonly pacifier: string;
|
|
142
142
|
}
|
|
143
143
|
`));
|
|
144
|
-
test('for structs', () => util_1.expectError(/not assignable to all base types anymore/, `
|
|
144
|
+
test('for structs', () => (0, util_1.expectError)(/not assignable to all base types anymore/, `
|
|
145
145
|
export interface Papa {
|
|
146
146
|
readonly pipe: string;
|
|
147
147
|
}
|
|
@@ -158,7 +158,7 @@ describe('implement base types need to be present in updated type system', () =>
|
|
|
158
158
|
readonly pacifier: string;
|
|
159
159
|
}
|
|
160
160
|
`));
|
|
161
|
-
test('for classes', () => util_1.expectError(/not assignable to all base types anymore/, `
|
|
161
|
+
test('for classes', () => (0, util_1.expectError)(/not assignable to all base types anymore/, `
|
|
162
162
|
export interface IPapa {
|
|
163
163
|
readonly pipe: string;
|
|
164
164
|
}
|
|
@@ -177,7 +177,7 @@ describe('implement base types need to be present in updated type system', () =>
|
|
|
177
177
|
readonly pacifier: string = 'mmm';
|
|
178
178
|
}
|
|
179
179
|
`));
|
|
180
|
-
test('for base classes', () => util_1.expectError(/not assignable to all base types anymore/, `
|
|
180
|
+
test('for base classes', () => (0, util_1.expectError)(/not assignable to all base types anymore/, `
|
|
181
181
|
export class Papa {
|
|
182
182
|
readonly pipe: string = 'pff';
|
|
183
183
|
}
|
|
@@ -194,7 +194,7 @@ describe('implement base types need to be present in updated type system', () =>
|
|
|
194
194
|
readonly pacifier: string = 'mmm';
|
|
195
195
|
}
|
|
196
196
|
`));
|
|
197
|
-
test('new levels of inheritance are allowed', () => util_1.expectNoError(`
|
|
197
|
+
test('new levels of inheritance are allowed', () => (0, util_1.expectNoError)(`
|
|
198
198
|
export class Papa {
|
|
199
199
|
readonly pipe: string = 'pff';
|
|
200
200
|
}
|
|
@@ -214,7 +214,7 @@ describe('implement base types need to be present in updated type system', () =>
|
|
|
214
214
|
readonly pacifier: string = 'mmm';
|
|
215
215
|
}
|
|
216
216
|
`));
|
|
217
|
-
test('change direct implementation to inherited implementation via interface', () => util_1.expectNoError(`
|
|
217
|
+
test('change direct implementation to inherited implementation via interface', () => (0, util_1.expectNoError)(`
|
|
218
218
|
export interface IPapa {
|
|
219
219
|
readonly pipe: string;
|
|
220
220
|
}
|
|
@@ -236,7 +236,7 @@ describe('implement base types need to be present in updated type system', () =>
|
|
|
236
236
|
readonly pacifier: string = 'mmm';
|
|
237
237
|
}
|
|
238
238
|
`));
|
|
239
|
-
test('change direct implementation to inherited implementation via base class', () => util_1.expectNoError(`
|
|
239
|
+
test('change direct implementation to inherited implementation via base class', () => (0, util_1.expectNoError)(`
|
|
240
240
|
export interface IPapa {
|
|
241
241
|
readonly pipe: string;
|
|
242
242
|
}
|
|
@@ -269,7 +269,7 @@ test.each([
|
|
|
269
269
|
{
|
|
270
270
|
oldDecl: 'name?: string',
|
|
271
271
|
newDecl: 'name: string',
|
|
272
|
-
error: undefined,
|
|
272
|
+
error: undefined, // Strengthening is okay
|
|
273
273
|
},
|
|
274
274
|
{
|
|
275
275
|
oldDecl: 'name: string',
|
|
@@ -279,9 +279,9 @@ test.each([
|
|
|
279
279
|
{
|
|
280
280
|
oldDecl: 'name: string | number',
|
|
281
281
|
newDecl: 'name: string',
|
|
282
|
-
error: undefined,
|
|
282
|
+
error: undefined, // Strengthening is okay
|
|
283
283
|
},
|
|
284
|
-
])('change class property ', ({ oldDecl, newDecl, error }) => util_1.expectError(error, `
|
|
284
|
+
])('change class property ', ({ oldDecl, newDecl, error }) => (0, util_1.expectError)(error, `
|
|
285
285
|
export class Henk {
|
|
286
286
|
public readonly ${oldDecl} = 'henk';
|
|
287
287
|
}
|
|
@@ -312,7 +312,7 @@ test.each([
|
|
|
312
312
|
newDecl: 'name: string',
|
|
313
313
|
error: /changed to string \(formerly string \| number\)/,
|
|
314
314
|
},
|
|
315
|
-
])('cannot change a mutable class property type: %p to %p', ({ oldDecl, newDecl, error }) => util_1.expectError(error, `
|
|
315
|
+
])('cannot change a mutable class property type: %p to %p', ({ oldDecl, newDecl, error }) => (0, util_1.expectError)(error, `
|
|
316
316
|
export class Henk {
|
|
317
317
|
public ${oldDecl} = 'henk';
|
|
318
318
|
}
|
|
@@ -322,7 +322,7 @@ test.each([
|
|
|
322
322
|
}
|
|
323
323
|
`));
|
|
324
324
|
// ----------------------------------------------------------------------
|
|
325
|
-
test('consider inherited constructor', () => util_1.expectError(/number is not assignable to string/, `
|
|
325
|
+
test('consider inherited constructor', () => (0, util_1.expectError)(/number is not assignable to string/, `
|
|
326
326
|
export class Super {
|
|
327
327
|
constructor(param: number) {
|
|
328
328
|
Array.isArray(param);
|
|
@@ -344,7 +344,7 @@ test('consider inherited constructor', () => util_1.expectError(/number is not a
|
|
|
344
344
|
}
|
|
345
345
|
`));
|
|
346
346
|
// ----------------------------------------------------------------------
|
|
347
|
-
test('consider inherited constructor, the other way', () => util_1.expectError(/newly required argument/, `
|
|
347
|
+
test('consider inherited constructor, the other way', () => (0, util_1.expectError)(/newly required argument/, `
|
|
348
348
|
export class Super {
|
|
349
349
|
constructor(param: number) {
|
|
350
350
|
Array.isArray(param);
|
|
@@ -365,7 +365,7 @@ test('consider inherited constructor, the other way', () => util_1.expectError(/
|
|
|
365
365
|
}
|
|
366
366
|
`));
|
|
367
367
|
// ----------------------------------------------------------------------
|
|
368
|
-
test('method can be moved to supertype', () => util_1.expectNoError(`
|
|
368
|
+
test('method can be moved to supertype', () => (0, util_1.expectNoError)(`
|
|
369
369
|
export class Super {
|
|
370
370
|
}
|
|
371
371
|
export class Sub extends Super {
|
|
@@ -383,7 +383,7 @@ test('method can be moved to supertype', () => util_1.expectNoError(`
|
|
|
383
383
|
}
|
|
384
384
|
`));
|
|
385
385
|
// ----------------------------------------------------------------------
|
|
386
|
-
test('property can be moved to supertype', () => util_1.expectNoError(`
|
|
386
|
+
test('property can be moved to supertype', () => (0, util_1.expectNoError)(`
|
|
387
387
|
export class Super {
|
|
388
388
|
}
|
|
389
389
|
export class Sub extends Super {
|
|
@@ -397,7 +397,7 @@ test('property can be moved to supertype', () => util_1.expectNoError(`
|
|
|
397
397
|
}
|
|
398
398
|
`));
|
|
399
399
|
// ----------------------------------------------------------------------
|
|
400
|
-
test('subclassable is forever', () => util_1.expectError(/has gone from @subclassable to non-@subclassable/, `
|
|
400
|
+
test('subclassable is forever', () => (0, util_1.expectError)(/has gone from @subclassable to non-@subclassable/, `
|
|
401
401
|
/**
|
|
402
402
|
* @subclassable
|
|
403
403
|
*/
|
|
@@ -408,7 +408,7 @@ test('subclassable is forever', () => util_1.expectError(/has gone from @subclas
|
|
|
408
408
|
}
|
|
409
409
|
`));
|
|
410
410
|
// ----------------------------------------------------------------------
|
|
411
|
-
test('change from method to property', () => util_1.expectError(/changed from method to property/, `
|
|
411
|
+
test('change from method to property', () => (0, util_1.expectError)(/changed from method to property/, `
|
|
412
412
|
export class Boom {
|
|
413
413
|
public foo() { return 12; }
|
|
414
414
|
}
|
|
@@ -418,7 +418,7 @@ test('change from method to property', () => util_1.expectError(/changed from me
|
|
|
418
418
|
}
|
|
419
419
|
`));
|
|
420
420
|
// ----------------------------------------------------------------------
|
|
421
|
-
test('change from method with arguments to property', () => util_1.expectError(/changed from method to property/, `
|
|
421
|
+
test('change from method with arguments to property', () => (0, util_1.expectError)(/changed from method to property/, `
|
|
422
422
|
export class Boom {
|
|
423
423
|
public foo(arg: number) { return 12 * arg; }
|
|
424
424
|
}
|
|
@@ -428,7 +428,7 @@ test('change from method with arguments to property', () => util_1.expectError(/
|
|
|
428
428
|
}
|
|
429
429
|
`));
|
|
430
430
|
// ----------------------------------------------------------------------
|
|
431
|
-
test('change from property to method', () => util_1.expectError(/changed from property to method/, `
|
|
431
|
+
test('change from property to method', () => (0, util_1.expectError)(/changed from property to method/, `
|
|
432
432
|
export class Boom {
|
|
433
433
|
public get foo() { return 12; }
|
|
434
434
|
}
|
|
@@ -451,7 +451,7 @@ test.each([
|
|
|
451
451
|
oldDecl: 'readonly foo: string = "x";',
|
|
452
452
|
newDecl: 'readonly foo: string | number = "x";',
|
|
453
453
|
},
|
|
454
|
-
])('cannot change any type in @subclassable class: %p to %p', ({ oldDecl, newDecl }) => util_1.expectError(/type is @subclassable/, `
|
|
454
|
+
])('cannot change any type in @subclassable class: %p to %p', ({ oldDecl, newDecl }) => (0, util_1.expectError)(/type is @subclassable/, `
|
|
455
455
|
/** @subclassable */
|
|
456
456
|
export class Boom {
|
|
457
457
|
public ${oldDecl}
|
|
@@ -473,7 +473,7 @@ test.each([
|
|
|
473
473
|
oldDecl: 'readonly foo: string;',
|
|
474
474
|
newDecl: 'readonly foo: string | number;',
|
|
475
475
|
},
|
|
476
|
-
])('cannot change any type in @subclassable interface: %p to %p', ({ oldDecl, newDecl }) => util_1.expectError(/type is @subclassable/, `
|
|
476
|
+
])('cannot change any type in @subclassable interface: %p to %p', ({ oldDecl, newDecl }) => (0, util_1.expectError)(/type is @subclassable/, `
|
|
477
477
|
/** @subclassable */
|
|
478
478
|
export interface IBoom {
|
|
479
479
|
${oldDecl}
|
|
@@ -494,7 +494,7 @@ test.each([
|
|
|
494
494
|
// Input type => can NOT add field
|
|
495
495
|
['foo: TheStruct;', false],
|
|
496
496
|
['foo(arg: TheStruct): void', false],
|
|
497
|
-
])('add required field to structs: refencing via %p -> allowed %p', (usageDecl, allowed) => util_1.expectError(allowed ? undefined : /newly required property 'fieldTwo' added/, `
|
|
497
|
+
])('add required field to structs: refencing via %p -> allowed %p', (usageDecl, allowed) => (0, util_1.expectError)(allowed ? undefined : /newly required property 'fieldTwo' added/, `
|
|
498
498
|
export interface TheStruct {
|
|
499
499
|
readonly fieldOne: string;
|
|
500
500
|
}
|
|
@@ -522,7 +522,7 @@ test.each([
|
|
|
522
522
|
['foo: TheStruct;', false],
|
|
523
523
|
// Input type => can make optional
|
|
524
524
|
['foo(arg: TheStruct): void', true],
|
|
525
|
-
])('make required field optional: refencing via %p -> allowed %p', (usageDecl, allowed) => util_1.expectError(allowed ? undefined : /formerly required property 'fieldOne' is optional/, `
|
|
525
|
+
])('make required field optional: refencing via %p -> allowed %p', (usageDecl, allowed) => (0, util_1.expectError)(allowed ? undefined : /formerly required property 'fieldOne' is optional/, `
|
|
526
526
|
export interface TheStruct {
|
|
527
527
|
readonly fieldOne: string;
|
|
528
528
|
}
|
|
@@ -539,4 +539,4 @@ test.each([
|
|
|
539
539
|
${usageDecl}
|
|
540
540
|
}
|
|
541
541
|
`));
|
|
542
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xhc3Nlcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQW9EO0FBRXBELHlFQUF5RTtBQUV6RSxJQUFJLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFLENBQ25DLG9CQUFhLENBQ1g7O0dBRUQsRUFDQzs7O0dBR0QsQ0FDQSxDQUFDLENBQUM7QUFFTCx5RUFBeUU7QUFFekUsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRSxDQUNqRCxvQkFBYSxDQUNYOztHQUVELEVBQ0M7Ozs7R0FJRCxDQUNBLENBQUMsQ0FBQztBQUVMLHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFLENBQzNELGtCQUFXLENBQ1QseUJBQXlCLEVBQ3pCOzs7Ozs7R0FNRCxFQUNDOzs7Ozs7O0dBT0QsQ0FDQSxDQUFDLENBQUM7QUFFTCx5RUFBeUU7QUFFekUsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRSxDQUNyRCxvQkFBYSxDQUNYOzs7Ozs7O0dBT0QsRUFDQzs7Ozs7OztHQU9ELENBQ0EsQ0FBQyxDQUFDO0FBRUwseUVBQXlFO0FBRXpFLElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUUsQ0FDeEQsb0JBQWEsQ0FDWDs7Ozs7Ozs7R0FRRCxFQUNDOzs7Ozs7O0dBT0QsQ0FDQSxDQUFDLENBQUM7QUFFTCx5RUFBeUU7QUFFekUsSUFBSSxDQUFDLDJEQUEyRCxFQUFFLEdBQUcsRUFBRSxDQUNyRSxrQkFBVyxDQUNULG1HQUFtRyxFQUNuRzs7Ozs7O0dBTUQsRUFDQzs7Ozs7O0dBTUQsQ0FDQSxDQUFDLENBQUM7QUFFTCx5RUFBeUU7QUFFekUsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRSxDQUNuRSxrQkFBVyxDQUNULHNEQUFzRCxFQUN0RDs7Ozs7OztHQU9ELEVBQ0M7Ozs7Ozs7O0dBUUQsQ0FDQSxDQUFD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UyxDQUFDLENBQUMsQ0FBQyxtREFBbUQsRUFDekU7Ozs7OztVQU1JLFNBQVM7O09BRVosRUFDRDs7Ozs7O1VBTUksU0FBUzs7T0FFWixDQUNGLENBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGVjdEVycm9yLCBleHBlY3ROb0Vycm9yIH0gZnJvbSAnLi91dGlsJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0KCdva2F5IHRvIGFkZCBhIG5ldyBjbGFzcycsICgpID0+XG4gIGV4cGVjdE5vRXJyb3IoXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28xIHsgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgRm9vMSB7IH1cbiAgICBleHBvcnQgY2xhc3MgRm9vMiB7IH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnb2theSB0byBhZGQgYSBuZXcgZnVuY3Rpb24gdG8gYSBjbGFzcycsICgpID0+XG4gIGV4cGVjdE5vRXJyb3IoXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28geyB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcigpOiB2b2lkIHsgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnbm90IG9rYXkgdG8gYWRkIGEgcmVxdWlyZWQgYXJndW1lbnQgdG8gYSBtZXRob2QnLCAoKSA9PlxuICBleHBlY3RFcnJvcihcbiAgICAvbmV3bHkgcmVxdWlyZWQgYXJndW1lbnQvLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoYXJnMTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMSk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoYXJnMTogc3RyaW5nLCBhcmcyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmcxKTtcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmcyKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICkpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ29rYXkgdG8gbWFrZSBhIHJlcXVpcmVkIGFyZ3VtZW50IG9wdGlvbmFsJywgKCkgPT5cbiAgZXhwZWN0Tm9FcnJvcihcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIEZvbyB7XG4gICAgICBwdWJsaWMgYmFyKGFyZzE6IHN0cmluZywgYXJnMjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMSk7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMik7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoYXJnMTogc3RyaW5nLCBhcmcyPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMSk7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMik7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICApKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0KCdva2F5IHRvIHR1cm4gcmVxdWlyZWQgYXJndW1lbnRzIGludG8gdmFyYXJncycsICgpID0+XG4gIGV4cGVjdE5vRXJyb3IoXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcihhcmcxOiBzdHJpbmcsIGFyZzI6IG51bWJlciwgYXJnMzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMSk7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMik7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMyk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoYXJnMTogc3RyaW5nLCAuLi5hcmdzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgICAgICBBcnJheS5pc0FycmF5KGFyZzEpO1xuICAgICAgICBBcnJheS5pc0FycmF5KGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnbm90IGFsbG93ZWQgdG8gY2hhbmdlIGFyZ3VtZW50IHR5cGUgdG8gYSBkaWZmZXJlbnQgc2NhbGFyJywgKCkgPT5cbiAgZXhwZWN0RXJyb3IoXG4gICAgL21ldGhvZC4qZm9vLiphcmd1bWVudCBhcmcxLCB0YWtlcyBudW1iZXIgXFwoZm9ybWVybHkgc3RyaW5nXFwpOiBzdHJpbmcgaXMgbm90IGFzc2lnbmFibGUgdG8gbnVtYmVyL2ksXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcihhcmcxOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmcxKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcihhcmcxOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmcxKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICkpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ2Nhbm5vdCBhZGQgYW55IGFic3RyYWN0IG1lbWJlcnMgdG8gYSBzdWJjbGFzc2FibGUgY2xhc3MnLCAoKSA9PlxuICBleHBlY3RFcnJvcihcbiAgICAvYWRkcyByZXF1aXJlbWVudCBmb3Igc3ViY2xhc3NlcyB0byBpbXBsZW1lbnQgJ3BpZXQnLi8sXG4gICAgYFxuICAgIC8qKlxuICAgICAqIEBzdWJjbGFzc2FibGVcbiAgICAgKi9cbiAgICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgSGVuayB7XG4gICAgICBhYnN0cmFjdCByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICAvKipcbiAgICAgKiBAc3ViY2xhc3NhYmxlXG4gICAgICovXG4gICAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEhlbmsge1xuICAgICAgYWJzdHJhY3QgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgICAgYWJzdHJhY3QgcmVhZG9ubHkgcGlldDogc3RyaW5nO1xuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2Fubm90IGFkZCBhbnkgbWVtYmVycyB0byBhIHN1YmNsYXNzYWJsZSBpbnRlcmZhY2UsIG5vdCBldmVuIG9wdGlvbmFsIG9uZXMnLCAoKSA9PlxuICBleHBlY3RFcnJvcihcbiAgICAvYWRkcyByZXF1aXJlbWVudCBmb3Igc3ViY2xhc3NlcyB0byBpbXBsZW1lbnQgJ3BpZXQnLi8sXG4gICAgYFxuICAgIC8qKlxuICAgICAqIEBzdWJjbGFzc2FibGVcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIElIZW5rIHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIC8qKlxuICAgICAqIEBzdWJjbGFzc2FibGVcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIElIZW5rIHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHBpZXQ/OiBzdHJpbmc7XG4gICAgfVxuICBgLFxuICApKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0KCdjYW5ub3QgbWFrZSBhIG1lbWJlciBsZXNzIHZpc2libGUnLCAoKSA9PlxuICBleHBlY3RFcnJvcihcbiAgICAvY2hhbmdlZCBmcm9tICdwdWJsaWMnIHRvICdwcm90ZWN0ZWQnLyxcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIEhlbmsge1xuICAgICAgcHVibGljIG5hbWU6IHN0cmluZyA9ICdoZW5rJztcbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBIZW5rIHtcbiAgICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcgPSAnaGVuayc7XG4gICAgfVxuICBgLFxuICApKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZSgnaW1wbGVtZW50IGJhc2UgdHlwZXMgbmVlZCB0byBiZSBwcmVzZW50IGluIHVwZGF0ZWQgdHlwZSBzeXN0ZW0nLCAoKSA9PiB7XG4gIHRlc3QoJ2ZvciBpbnRlcmZhY2VzJywgKCkgPT5cbiAgICBleHBlY3RFcnJvcihcbiAgICAgIC9ub3QgYXNzaWduYWJsZSB0byBhbGwgYmFzZSB0eXBlcyBhbnltb3JlLyxcbiAgICAgIGBcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSVBhcGEge1xuICAgICAgICByZWFkb25seSBwaXBlOiBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSUJlYmUgZXh0ZW5kcyBJUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBhY2lmaWVyOiBzdHJpbmc7XG4gICAgICB9XG4gICAgYCxcbiAgICAgIGBcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSVBhcGEge1xuICAgICAgICByZWFkb25seSBwaXBlOiBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSUJlYmUge1xuICAgICAgICByZWFkb25seSBwYWNpZmllcjogc3RyaW5nO1xuICAgICAgfVxuICAgIGAsXG4gICAgKSk7XG5cbiAgdGVzdCgnZm9yIHN0cnVjdHMnLCAoKSA9PlxuICAgIGV4cGVjdEVycm9yKFxuICAgICAgL25vdCBhc3NpZ25hYmxlIHRvIGFsbCBiYXNlIHR5cGVzIGFueW1vcmUvLFxuICAgICAgYFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBQYXBhIHtcbiAgICAgICAgcmVhZG9ubHkgcGlwZTogc3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIEJlYmUgZXh0ZW5kcyBQYXBhIHtcbiAgICAgICAgcmVhZG9ubHkgcGFjaWZpZXI6IHN0cmluZztcbiAgICAgIH1cbiAgICBgLFxuICAgICAgYFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBQYXBhIHtcbiAgICAgICAgcmVhZG9ubHkgcGlwZTogc3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIEJlYmUge1xuICAgICAgICByZWFkb25seSBwYWNpZmllcjogc3RyaW5nO1xuICAgICAgfVxuICAgIGAsXG4gICAgKSk7XG5cbiAgdGVzdCgnZm9yIGNsYXNzZXMnLCAoKSA9PlxuICAgIGV4cGVjdEVycm9yKFxuICAgICAgL25vdCBhc3NpZ25hYmxlIHRvIGFsbCBiYXNlIHR5cGVzIGFueW1vcmUvLFxuICAgICAgYFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBJUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZztcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGNsYXNzIEJlYmUgaW1wbGVtZW50cyBJUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZyA9ICdwZmYnO1xuICAgICAgICByZWFkb25seSBwYWNpZmllcjogc3RyaW5nID0gJ21tbSc7XG4gICAgICB9XG4gICAgYCxcbiAgICAgIGBcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSVBhcGEge1xuICAgICAgICByZWFkb25seSBwaXBlOiBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBjbGFzcyBCZWJlIHtcbiAgICAgICAgcmVhZG9ubHkgcGlwZTogc3RyaW5nID0gJ3BmZic7XG4gICAgICAgIHJlYWRvbmx5IHBhY2lmaWVyOiBzdHJpbmcgPSAnbW1tJztcbiAgICAgIH1cbiAgICBgLFxuICAgICkpO1xuXG4gIHRlc3QoJ2ZvciBiYXNlIGNsYXNzZXMnLCAoKSA9PlxuICAgIGV4cGVjdEVycm9yKFxuICAgICAgL25vdCBhc3NpZ25hYmxlIHRvIGFsbCBiYXNlIHR5cGVzIGFueW1vcmUvLFxuICAgICAgYFxuICAgICAgZXhwb3J0IGNsYXNzIFBhcGEge1xuICAgICAgICByZWFkb25seSBwaXBlOiBzdHJpbmcgPSAncGZmJztcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGNsYXNzIEJlYmUgZXh0ZW5kcyBQYXBhIHtcbiAgICAgICAgcmVhZG9ubHkgcGFjaWZpZXI6IHN0cmluZyA9ICdtbW0nO1xuICAgICAgfVxuICAgIGAsXG4gICAgICBgXG4gICAgICBleHBvcnQgY2xhc3MgUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZyA9ICdwZmYnO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgY2xhc3MgQmViZSB7XG4gICAgICAgIHJlYWRvbmx5IHBhY2lmaWVyOiBzdHJpbmcgPSAnbW1tJztcbiAgICAgIH1cbiAgICBgLFxuICAgICkpO1xuXG4gIHRlc3QoJ25ldyBsZXZlbHMgb2YgaW5oZXJpdGFuY2UgYXJlIGFsbG93ZWQnLCAoKSA9PlxuICAgIGV4cGVjdE5vRXJyb3IoXG4gICAgICBgXG4gICAgICBleHBvcnQgY2xhc3MgUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZyA9ICdwZmYnO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgY2xhc3MgQmViZSBleHRlbmRzIFBhcGEge1xuICAgICAgICByZWFkb25seSBwYWNpZmllcjogc3RyaW5nID0gJ21tbSc7XG4gICAgICB9XG4gICAgYCxcbiAgICAgIGBcbiAgICAgIGV4cG9ydCBjbGFzcyBQYXBhIHtcbiAgICAgICAgcmVhZG9ubHkgcGlwZTogc3RyaW5nID0gJ3BmZic7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBjbGFzcyBJbmJldHdlZW4gZXh0ZW5kcyBQYXBhIHtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGNsYXNzIEJlYmUgZXh0ZW5kcyBJbmJldHdlZW4ge1xuICAgICAgICByZWFkb25seSBwYWNpZmllcjogc3RyaW5nID0gJ21tbSc7XG4gICAgICB9XG4gICAgYCxcbiAgICApKTtcblxuICB0ZXN0KCdjaGFuZ2UgZGlyZWN0IGltcGxlbWVudGF0aW9uIHRvIGluaGVyaXRlZCBpbXBsZW1lbnRhdGlvbiB2aWEgaW50ZXJmYWNlJywgKCkgPT5cbiAgICBleHBlY3ROb0Vycm9yKFxuICAgICAgYFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBJUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZztcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGNsYXNzIEJlYmUgaW1wbGVtZW50cyBJUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZyA9ICdwZmYnO1xuICAgICAgICByZWFkb25seSBwYWNpZmllcjogc3RyaW5nID0gJ21tbSc7XG4gICAgICB9XG4gICAgYCxcbiAgICAgIGBcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSVBhcGEge1xuICAgICAgICByZWFkb25seSBwaXBlOiBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSUluYmV0d2VlbiBleHRlbmRzIElQYXBhIHtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGNsYXNzIEJlYmUgaW1wbGVtZW50cyBJSW5iZXR3ZWVuIHtcbiAgICAgICAgcmVhZG9ubHkgcGlwZTogc3RyaW5nID0gJ3BmZic7XG4gICAgICAgIHJlYWRvbmx5IHBhY2lmaWVyOiBzdHJpbmcgPSAnbW1tJztcbiAgICAgIH1cbiAgICBgLFxuICAgICkpO1xuXG4gIHRlc3QoJ2NoYW5nZSBkaXJlY3QgaW1wbGVtZW50YXRpb24gdG8gaW5oZXJpdGVkIGltcGxlbWVudGF0aW9uIHZpYSBiYXNlIGNsYXNzJywgKCkgPT5cbiAgICBleHBlY3ROb0Vycm9yKFxuICAgICAgYFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBJUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZztcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGNsYXNzIEJlYmUgaW1wbGVtZW50cyBJUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZyA9ICdwZmYnO1xuICAgICAgICByZWFkb25seSBwYWNpZmllcjogc3RyaW5nID0gJ21tbSc7XG4gICAgICB9XG4gICAgYCxcbiAgICAgIGBcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSVBhcGEge1xuICAgICAgICByZWFkb25seSBwaXBlOiBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBjbGFzcyBJbmJldHdlZW4gaW1wbGVtZW50cyBJUGFwYSB7XG4gICAgICAgIHJlYWRvbmx5IHBpcGU6IHN0cmluZyA9ICdwZmYnO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgY2xhc3MgQmViZSBleHRlbmRzIEluYmV0d2VlbiB7XG4gICAgICAgIHJlYWRvbmx5IHBhY2lmaWVyOiBzdHJpbmcgPSAnbW1tJztcbiAgICAgIH1cbiAgICBgLFxuICAgICkpO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdC5lYWNoKFtcbiAge1xuICAgIG9sZERlY2w6ICduYW1lOiBzdHJpbmcnLFxuICAgIG5ld0RlY2w6ICduYW1lPzogc3RyaW5nJyxcbiAgICBlcnJvcjpcbiAgICAgIC90eXBlIE9wdGlvbmFsPHN0cmluZz4gXFwoZm9ybWVybHkgc3RyaW5nXFwpOiBvdXRwdXQgdHlwZSBpcyBub3cgb3B0aW9uYWwvLFxuICB9LFxuICB7XG4gICAgb2xkRGVjbDogJ25hbWU/OiBzdHJpbmcnLFxuICAgIG5ld0RlY2w6ICduYW1lOiBzdHJpbmcnLFxuICAgIGVycm9yOiB1bmRlZmluZWQsIC8vIFN0cmVuZ3RoZW5pbmcgaXMgb2theVxuICB9LFxuICB7XG4gICAgb2xkRGVjbDogJ25hbWU6IHN0cmluZycsXG4gICAgbmV3RGVjbDogJ25hbWU6IHN0cmluZyB8IG51bWJlcicsXG4gICAgZXJyb3I6IC9zdHJpbmcgXFx8IG51bWJlciBpcyBub3QgYXNzaWduYWJsZSB0byBzdHJpbmcvLFxuICB9LFxuICB7XG4gICAgb2xkRGVjbDogJ25hbWU6IHN0cmluZyB8IG51bWJlcicsXG4gICAgbmV3RGVjbDogJ25hbWU6IHN0cmluZycsXG4gICAgZXJyb3I6IHVuZGVmaW5lZCwgLy8gU3RyZW5ndGhlbmluZyBpcyBva2F5XG4gIH0sXG5dKSgnY2hhbmdlIGNsYXNzIHByb3BlcnR5ICcsICh7IG9sZERlY2wsIG5ld0RlY2wsIGVycm9yIH0pID0+XG4gIGV4cGVjdEVycm9yKFxuICAgIGVycm9yLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgSGVuayB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgJHtvbGREZWNsfSA9ICdoZW5rJztcbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBIZW5rIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSAke25ld0RlY2x9ID0gJ2hlbmsnO1xuICAgIH1cbiAgYCxcbiAgKSxcbik7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdC5lYWNoKFtcbiAge1xuICAgIG9sZERlY2w6ICduYW1lOiBzdHJpbmcnLFxuICAgIG5ld0RlY2w6ICduYW1lPzogc3RyaW5nJyxcbiAgICBlcnJvcjogL2NoYW5nZWQgdG8gT3B0aW9uYWw8c3RyaW5nPiBcXChmb3JtZXJseSBzdHJpbmdcXCkvLFxuICB9LFxuICB7XG4gICAgb2xkRGVjbDogJ25hbWU/OiBzdHJpbmcnLFxuICAgIG5ld0RlY2w6ICduYW1lOiBzdHJpbmcnLFxuICAgIGVycm9yOiAvY2hhbmdlZCB0byBzdHJpbmcgXFwoZm9ybWVybHkgT3B0aW9uYWw8c3RyaW5nPlxcKS8sXG4gIH0sXG4gIHtcbiAgICBvbGREZWNsOiAnbmFtZTogc3RyaW5nJyxcbiAgICBuZXdEZWNsOiAnbmFtZTogc3RyaW5nIHwgbnVtYmVyJyxcbiAgICBlcnJvcjogL2NoYW5nZWQgdG8gc3RyaW5nIFxcfCBudW1iZXIgXFwoZm9ybWVybHkgc3RyaW5nXFwpLyxcbiAgfSxcbiAge1xuICAgIG9sZERlY2w6ICduYW1lOiBzdHJpbmcgfCBudW1iZXInLFxuICAgIG5ld0RlY2w6ICduYW1lOiBzdHJpbmcnLFxuICAgIGVycm9yOiAvY2hhbmdlZCB0byBzdHJpbmcgXFwoZm9ybWVybHkgc3RyaW5nIFxcfCBudW1iZXJcXCkvLFxuICB9LFxuXSkoXG4gICdjYW5ub3QgY2hhbmdlIGEgbXV0YWJsZSBjbGFzcyBwcm9wZXJ0eSB0eXBlOiAlcCB0byAlcCcsXG4gICh7IG9sZERlY2wsIG5ld0RlY2wsIGVycm9yIH0pID0+XG4gICAgZXhwZWN0RXJyb3IoXG4gICAgICBlcnJvcixcbiAgICAgIGBcbiAgICAgIGV4cG9ydCBjbGFzcyBIZW5rIHtcbiAgICAgICAgcHVibGljICR7b2xkRGVjbH0gPSAnaGVuayc7XG4gICAgICB9XG4gICAgYCxcbiAgICAgIGBcbiAgICAgIGV4cG9ydCBjbGFzcyBIZW5rIHtcbiAgICAgICAgcHVibGljICR7bmV3RGVjbH0gPSAnaGVuayc7XG4gICAgICB9XG4gICAgYCxcbiAgICApLFxuKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0KCdjb25zaWRlciBpbmhlcml0ZWQgY29uc3RydWN0b3InLCAoKSA9PlxuICBleHBlY3RFcnJvcihcbiAgICAvbnVtYmVyIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHN0cmluZy8sXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBTdXBlciB7XG4gICAgICBjb25zdHJ1Y3RvcihwYXJhbTogbnVtYmVyKSB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkocGFyYW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgU3ViIGV4dGVuZHMgU3VwZXIge1xuICAgIH1cbiAgYCxcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIFN1cGVyIHtcbiAgICAgIGNvbnN0cnVjdG9yKHBhcmFtOiBudW1iZXIpIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShwYXJhbSk7XG4gICAgICB9XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBTdWIgZXh0ZW5kcyBTdXBlciB7XG4gICAgICBjb25zdHJ1Y3RvcihwYXJhbTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKDUpO1xuICAgICAgICBBcnJheS5pc0FycmF5KHBhcmFtKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICkpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ2NvbnNpZGVyIGluaGVyaXRlZCBjb25zdHJ1Y3RvciwgdGhlIG90aGVyIHdheScsICgpID0+XG4gIGV4cGVjdEVycm9yKFxuICAgIC9uZXdseSByZXF1aXJlZCBhcmd1bWVudC8sXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBTdXBlciB7XG4gICAgICBjb25zdHJ1Y3RvcihwYXJhbTogbnVtYmVyKSB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkocGFyYW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgU3ViIGV4dGVuZHMgU3VwZXIge1xuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKDUpO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIFN1cGVyIHtcbiAgICAgIGNvbnN0cnVjdG9yKHBhcmFtOiBudW1iZXIpIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShwYXJhbSk7XG4gICAgICB9XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBTdWIgZXh0ZW5kcyBTdXBlciB7XG4gICAgfVxuICBgLFxuICApKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0KCdtZXRob2QgY2FuIGJlIG1vdmVkIHRvIHN1cGVydHlwZScsICgpID0+XG4gIGV4cGVjdE5vRXJyb3IoXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBTdXBlciB7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBTdWIgZXh0ZW5kcyBTdXBlciB7XG4gICAgICBwdWJsaWMgZm9vKHBhcmFtOiBudW1iZXIpIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShwYXJhbSk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgU3VwZXIge1xuICAgICAgcHVibGljIGZvbyhwYXJhbTogbnVtYmVyKSB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkocGFyYW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgU3ViIGV4dGVuZHMgU3VwZXIge1xuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgncHJvcGVydHkgY2FuIGJlIG1vdmVkIHRvIHN1cGVydHlwZScsICgpID0+XG4gIGV4cGVjdE5vRXJyb3IoXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBTdXBlciB7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBTdWIgZXh0ZW5kcyBTdXBlciB7XG4gICAgICBwdWJsaWMgZm9vOiBzdHJpbmcgPSAnZm9vJztcbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBTdXBlciB7XG4gICAgICBwdWJsaWMgZm9vOiBzdHJpbmcgPSAnZm9vJztcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIFN1YiBleHRlbmRzIFN1cGVyIHtcbiAgICB9XG4gIGAsXG4gICkpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ3N1YmNsYXNzYWJsZSBpcyBmb3JldmVyJywgKCkgPT5cbiAgZXhwZWN0RXJyb3IoXG4gICAgL2hhcyBnb25lIGZyb20gQHN1YmNsYXNzYWJsZSB0byBub24tQHN1YmNsYXNzYWJsZS8sXG4gICAgYFxuICAgIC8qKlxuICAgICAqIEBzdWJjbGFzc2FibGVcbiAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgU3VwZXIge1xuICAgIH1cbiAgYCxcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIFN1cGVyIHtcbiAgICB9XG4gIGAsXG4gICkpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ2NoYW5nZSBmcm9tIG1ldGhvZCB0byBwcm9wZXJ0eScsICgpID0+XG4gIGV4cGVjdEVycm9yKFxuICAgIC9jaGFuZ2VkIGZyb20gbWV0aG9kIHRvIHByb3BlcnR5LyxcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIEJvb20ge1xuICAgICAgcHVibGljIGZvbygpIHsgcmV0dXJuIDEyOyB9XG4gICAgfVxuICAgIGAsXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBCb29tIHtcbiAgICAgIHB1YmxpYyBnZXQgZm9vKCkgeyByZXR1cm4gMTI7IH1cbiAgICB9XG4gICAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2hhbmdlIGZyb20gbWV0aG9kIHdpdGggYXJndW1lbnRzIHRvIHByb3BlcnR5JywgKCkgPT5cbiAgZXhwZWN0RXJyb3IoXG4gICAgL2NoYW5nZWQgZnJvbSBtZXRob2QgdG8gcHJvcGVydHkvLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgQm9vbSB7XG4gICAgICBwdWJsaWMgZm9vKGFyZzogbnVtYmVyKSB7IHJldHVybiAxMiAqIGFyZzsgfVxuICAgIH1cbiAgICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgQm9vbSB7XG4gICAgICBwdWJsaWMgZ2V0IGZvbygpIHsgcmV0dXJuIDEyOyB9XG4gICAgfVxuICAgIGAsXG4gICkpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ2NoYW5nZSBmcm9tIHByb3BlcnR5IHRvIG1ldGhvZCcsICgpID0+XG4gIGV4cGVjdEVycm9yKFxuICAgIC9jaGFuZ2VkIGZyb20gcHJvcGVydHkgdG8gbWV0aG9kLyxcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIEJvb20ge1xuICAgICAgcHVibGljIGdldCBmb28oKSB7IHJldHVybiAxMjsgfVxuICAgIH1cbiAgICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgQm9vbSB7XG4gICAgICBwdWJsaWMgZm9vKCkgeyByZXR1cm4gMTI7IH1cbiAgICB9XG4gICAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdC5lYWNoKFtcbiAge1xuICAgIG9sZERlY2w6ICdmb28oYXJnOiBzdHJpbmcpIHsgQXJyYXkuaXNBcnJheShhcmcpOyB9JyxcbiAgICBuZXdEZWNsOiAnZm9vKGFyZzogc3RyaW5nIHwgbnVtYmVyKSB7IEFycmF5LmlzQXJyYXkoYXJnKTsgfScsXG4gIH0sXG4gIHtcbiAgICBvbGREZWNsOiAnZm9vKCk6IHN0cmluZyB7IHJldHVybiBcInhcIjsgfScsXG4gICAgbmV3RGVjbDogJ2ZvbygpOiBzdHJpbmcgfCBudW1iZXIgeyByZXR1cm4gXCJ4XCI7IH0nLFxuICB9LFxuICB7XG4gICAgb2xkRGVjbDogJ3JlYWRvbmx5IGZvbzogc3RyaW5nID0gXCJ4XCI7JyxcbiAgICBuZXdEZWNsOiAncmVhZG9ubHkgZm9vOiBzdHJpbmcgfCBudW1iZXIgPSBcInhcIjsnLFxuICB9LFxuXSkoXG4gICdjYW5ub3QgY2hhbmdlIGFueSB0eXBlIGluIEBzdWJjbGFzc2FibGUgY2xhc3M6ICVwIHRvICVwJyxcbiAgKHsgb2xkRGVjbCwgbmV3RGVjbCB9KSA9PlxuICAgIGV4cGVjdEVycm9yKFxuICAgICAgL3R5cGUgaXMgQHN1YmNsYXNzYWJsZS8sXG4gICAgICBgXG4gICAgICAvKiogQHN1YmNsYXNzYWJsZSAqL1xuICAgICAgZXhwb3J0IGNsYXNzIEJvb20ge1xuICAgICAgICBwdWJsaWMgJHtvbGREZWNsfVxuICAgICAgfVxuICAgICAgYCxcbiAgICAgIGBcbiAgICAgIC8qKiBAc3ViY2xhc3NhYmxlICovXG4gICAgICBleHBvcnQgY2xhc3MgQm9vbSB7XG4gICAgICAgIHB1YmxpYyAke25ld0RlY2x9XG4gICAgICB9XG4gICAgICBgLFxuICAgICksXG4pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QuZWFjaChbXG4gIHtcbiAgICBvbGREZWNsOiAnZm9vKGFyZzogc3RyaW5nKTogdm9pZDsnLFxuICAgIG5ld0RlY2w6ICdmb28oYXJnOiBzdHJpbmcgfCBudW1iZXIpOiB2b2lkOycsXG4gIH0sXG4gIHsgb2xkRGVjbDogJ2ZvbygpOiBzdHJpbmc7JywgbmV3RGVjbDogJ2ZvbygpOiBzdHJpbmcgfCBudW1iZXI7JyB9LFxuICB7XG4gICAgb2xkRGVjbDogJ3JlYWRvbmx5IGZvbzogc3RyaW5nOycsXG4gICAgbmV3RGVjbDogJ3JlYWRvbmx5IGZvbzogc3RyaW5nIHwgbnVtYmVyOycsXG4gIH0sXG5dKShcbiAgJ2Nhbm5vdCBjaGFuZ2UgYW55IHR5cGUgaW4gQHN1YmNsYXNzYWJsZSBpbnRlcmZhY2U6ICVwIHRvICVwJyxcbiAgKHsgb2xkRGVjbCwgbmV3RGVjbCB9KSA9PlxuICAgIGV4cGVjdEVycm9yKFxuICAgICAgL3R5cGUgaXMgQHN1YmNsYXNzYWJsZS8sXG4gICAgICBgXG4gICAgICAvKiogQHN1YmNsYXNzYWJsZSAqL1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBJQm9vbSB7XG4gICAgICAgICR7b2xkRGVjbH1cbiAgICAgIH1cbiAgICAgIGAsXG4gICAgICBgXG4gICAgICAvKiogQHN1YmNsYXNzYWJsZSAqL1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBJQm9vbSB7XG4gICAgICAgICR7bmV3RGVjbH1cbiAgICAgIH1cbiAgICAgIGAsXG4gICAgKSxcbik7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdC5lYWNoKFtcbiAgLy8gTm8gdXNhZ2UgPT4gY2FuIGFkZCBmaWVsZFxuICBbJycsIHRydWVdLFxuICAvLyBSZXR1cm4gdHlwZSA9PiBjYW4gYWRkIGZpZWxkXG4gIFsnZm9vKCk6IFRoZVN0cnVjdDsnLCB0cnVlXSxcbiAgWydyZWFkb25seSBmb286IFRoZVN0cnVjdDsnLCB0cnVlXSxcbiAgLy8gSW5wdXQgdHlwZSA9PiBjYW4gTk9UIGFkZCBmaWVsZFxuICBbJ2ZvbzogVGhlU3RydWN0OycsIGZhbHNlXSxcbiAgWydmb28oYXJnOiBUaGVTdHJ1Y3QpOiB2b2lkJywgZmFsc2VdLFxuXSkoXG4gICdhZGQgcmVxdWlyZWQgZmllbGQgdG8gc3RydWN0czogcmVmZW5jaW5nIHZpYSAlcCAtPiBhbGxvd2VkICVwJyxcbiAgKHVzYWdlRGVjbCwgYWxsb3dlZCkgPT5cbiAgICBleHBlY3RFcnJvcihcbiAgICAgIGFsbG93ZWQgPyB1bmRlZmluZWQgOiAvbmV3bHkgcmVxdWlyZWQgcHJvcGVydHkgJ2ZpZWxkVHdvJyBhZGRlZC8sXG4gICAgICBgXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIFRoZVN0cnVjdCB7XG4gICAgICAgIHJlYWRvbmx5IGZpZWxkT25lOiBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSUNvbnN1bWVyIHtcbiAgICAgICAgJHt1c2FnZURlY2x9XG4gICAgICB9XG4gICAgICBgLFxuICAgICAgYFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBUaGVTdHJ1Y3Qge1xuICAgICAgICByZWFkb25seSBmaWVsZE9uZTogc3RyaW5nO1xuICAgICAgICByZWFkb25seSBmaWVsZFR3bzogc3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIElDb25zdW1lciB7XG4gICAgICAgICR7dXNhZ2VEZWNsfVxuICAgICAgfVxuICAgICAgYCxcbiAgICApLFxuKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0LmVhY2goW1xuICAvLyBObyB1c2FnZSA9PiBjYW4gYWRkIGZpZWxkXG4gIFsnJywgdHJ1ZV0sXG4gIC8vIFJldHVybiB0eXBlID0+IGNhbiBOT1QgcmVtb3ZlIGluZm9ybWF0aW9uXG4gIFsnZm9vKCk6IFRoZVN0cnVjdDsnLCBmYWxzZV0sXG4gIFsncmVhZG9ubHkgZm9vOiBUaGVTdHJ1Y3Q7JywgZmFsc2VdLFxuICBbJ2ZvbzogVGhlU3RydWN0OycsIGZhbHNlXSxcbiAgLy8gSW5wdXQgdHlwZSA9PiBjYW4gbWFrZSBvcHRpb25hbFxuICBbJ2Zvbyhhcmc6IFRoZVN0cnVjdCk6IHZvaWQnLCB0cnVlXSxcbl0pKFxuICAnbWFrZSByZXF1aXJlZCBmaWVsZCBvcHRpb25hbDogcmVmZW5jaW5nIHZpYSAlcCAtPiBhbGxvd2VkICVwJyxcbiAgKHVzYWdlRGVjbCwgYWxsb3dlZCkgPT5cbiAgICBleHBlY3RFcnJvcihcbiAgICAgIGFsbG93ZWQgPyB1bmRlZmluZWQgOiAvZm9ybWVybHkgcmVxdWlyZWQgcHJvcGVydHkgJ2ZpZWxkT25lJyBpcyBvcHRpb25hbC8sXG4gICAgICBgXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIFRoZVN0cnVjdCB7XG4gICAgICAgIHJlYWRvbmx5IGZpZWxkT25lOiBzdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSUNvbnN1bWVyIHtcbiAgICAgICAgJHt1c2FnZURlY2x9XG4gICAgICB9XG4gICAgICBgLFxuICAgICAgYFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBUaGVTdHJ1Y3Qge1xuICAgICAgICByZWFkb25seSBmaWVsZE9uZT86IHN0cmluZztcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGludGVyZmFjZSBJQ29uc3VtZXIge1xuICAgICAgICAke3VzYWdlRGVjbH1cbiAgICAgIH1cbiAgICAgIGAsXG4gICAgKSxcbik7XG4iXX0=
|
|
542
|
+
//# sourceMappingURL=classes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classes.test.js","sourceRoot":"","sources":["classes.test.ts"],"names":[],"mappings":";;AAAA,iCAAoD;AAEpD,yEAAyE;AAEzE,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CACnC,IAAA,oBAAa,EACX;;GAED,EACC;;;GAGD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE,CACjD,IAAA,oBAAa,EACX;;GAED,EACC;;;;GAID,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE,CAC3D,IAAA,kBAAW,EACT,yBAAyB,EACzB;;;;;;GAMD,EACC;;;;;;;GAOD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE,CACrD,IAAA,oBAAa,EACX;;;;;;;GAOD,EACC;;;;;;;GAOD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE,CACxD,IAAA,oBAAa,EACX;;;;;;;;GAQD,EACC;;;;;;;GAOD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE,CACrE,IAAA,kBAAW,EACT,mGAAmG,EACnG;;;;;;GAMD,EACC;;;;;;GAMD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE,CACnE,IAAA,kBAAW,EACT,sDAAsD,EACtD;;;;;;;GAOD,EACC;;;;;;;;GAQD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,4EAA4E,EAAE,GAAG,EAAE,CACtF,IAAA,kBAAW,EACT,sDAAsD,EACtD;;;;;;;GAOD,EACC;;;;;;;;GAQD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAC7C,IAAA,kBAAW,EACT,sCAAsC,EACtC;;;;GAID,EACC;;;;GAID,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,QAAQ,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC9E,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAC1B,IAAA,kBAAW,EACT,0CAA0C,EAC1C;;;;;;;;KAQD,EACC;;;;;;;;KAQD,CACA,CAAC,CAAC;IAEL,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CACvB,IAAA,kBAAW,EACT,0CAA0C,EAC1C;;;;;;;;KAQD,EACC;;;;;;;;KAQD,CACA,CAAC,CAAC;IAEL,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CACvB,IAAA,kBAAW,EACT,0CAA0C,EAC1C;;;;;;;;;KASD,EACC;;;;;;;;;KASD,CACA,CAAC,CAAC;IAEL,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAC5B,IAAA,kBAAW,EACT,0CAA0C,EAC1C;;;;;;;;KAQD,EACC;;;;;;;;KAQD,CACA,CAAC,CAAC;IAEL,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE,CACjD,IAAA,oBAAa,EACX;;;;;;;;KAQD,EACC;;;;;;;;;;;KAWD,CACA,CAAC,CAAC;IAEL,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE,CAClF,IAAA,oBAAa,EACX;;;;;;;;;KASD,EACC;;;;;;;;;;;;KAYD,CACA,CAAC,CAAC;IAEL,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE,CACnF,IAAA,oBAAa,EACX;;;;;;;;;KASD,EACC;;;;;;;;;;;;KAYD,CACA,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,yEAAyE;AAEzE,IAAI,CAAC,IAAI,CAAC;IACR;QACE,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,eAAe;QACxB,KAAK,EACH,wEAAwE;KAC3E;IACD;QACE,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,SAAS,EAAE,wBAAwB;KAC3C;IACD;QACE,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,8CAA8C;KACtD;IACD;QACE,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,SAAS,EAAE,wBAAwB;KAC3C;CACF,CAAC,CAAC,wBAAwB,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3D,IAAA,kBAAW,EACT,KAAK,EACL;;wBAEoB,OAAO;;GAE5B,EACC;;wBAEoB,OAAO;;GAE5B,CACA,CACF,CAAC;AAEF,yEAAyE;AAEzE,IAAI,CAAC,IAAI,CAAC;IACR;QACE,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,iDAAiD;KACzD;IACD;QACE,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,iDAAiD;KACzD;IACD;QACE,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,iDAAiD;KACzD;IACD;QACE,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,iDAAiD;KACzD;CACF,CAAC,CACA,uDAAuD,EACvD,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAC9B,IAAA,kBAAW,EACT,KAAK,EACL;;iBAEW,OAAO;;KAEnB,EACC;;iBAEW,OAAO;;KAEnB,CACA,CACJ,CAAC;AAEF,yEAAyE;AAEzE,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE,CAC1C,IAAA,kBAAW,EACT,oCAAoC,EACpC;;;;;;;;GAQD,EACC;;;;;;;;;;;;GAYD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE,CACzD,IAAA,kBAAW,EACT,yBAAyB,EACzB;;;;;;;;;;;GAWD,EACC;;;;;;;;GAQD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE,CAC5C,IAAA,oBAAa,EACX;;;;;;;;GAQD,EACC;;;;;;;;GAQD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAC9C,IAAA,oBAAa,EACX;;;;;;GAMD,EACC;;;;;;GAMD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CACnC,IAAA,kBAAW,EACT,kDAAkD,EAClD;;;;;;GAMD,EACC;;;GAGD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE,CAC1C,IAAA,kBAAW,EACT,iCAAiC,EACjC;;;;KAIC,EACD;;;;KAIC,CACF,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE,CACzD,IAAA,kBAAW,EACT,iCAAiC,EACjC;;;;KAIC,EACD;;;;KAIC,CACF,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE,CAC1C,IAAA,kBAAW,EACT,iCAAiC,EACjC;;;;KAIC,EACD;;;;KAIC,CACF,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,IAAI,CAAC;IACR;QACE,OAAO,EAAE,0CAA0C;QACnD,OAAO,EAAE,mDAAmD;KAC7D;IACD;QACE,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,wCAAwC;KAClD;IACD;QACE,OAAO,EAAE,6BAA6B;QACtC,OAAO,EAAE,sCAAsC;KAChD;CACF,CAAC,CACA,yDAAyD,EACzD,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CACvB,IAAA,kBAAW,EACT,uBAAuB,EACvB;;;iBAGW,OAAO;;OAEjB,EACD;;;iBAGW,OAAO;;OAEjB,CACF,CACJ,CAAC;AAEF,yEAAyE;AAEzE,IAAI,CAAC,IAAI,CAAC;IACR;QACE,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,kCAAkC;KAC5C;IACD,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,yBAAyB,EAAE;IACjE;QACE,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,gCAAgC;KAC1C;CACF,CAAC,CACA,6DAA6D,EAC7D,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CACvB,IAAA,kBAAW,EACT,uBAAuB,EACvB;;;UAGI,OAAO;;OAEV,EACD;;;UAGI,OAAO;;OAEV,CACF,CACJ,CAAC;AAEF,yEAAyE;AAEzE,IAAI,CAAC,IAAI,CAAC;IACR,4BAA4B;IAC5B,CAAC,EAAE,EAAE,IAAI,CAAC;IACV,+BAA+B;IAC/B,CAAC,mBAAmB,EAAE,IAAI,CAAC;IAC3B,CAAC,0BAA0B,EAAE,IAAI,CAAC;IAClC,kCAAkC;IAClC,CAAC,iBAAiB,EAAE,KAAK,CAAC;IAC1B,CAAC,2BAA2B,EAAE,KAAK,CAAC;CACrC,CAAC,CACA,+DAA+D,EAC/D,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CACrB,IAAA,kBAAW,EACT,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C,EAChE;;;;;;UAMI,SAAS;;OAEZ,EACD;;;;;;;UAOI,SAAS;;OAEZ,CACF,CACJ,CAAC;AAEF,yEAAyE;AAEzE,IAAI,CAAC,IAAI,CAAC;IACR,4BAA4B;IAC5B,CAAC,EAAE,EAAE,IAAI,CAAC;IACV,4CAA4C;IAC5C,CAAC,mBAAmB,EAAE,KAAK,CAAC;IAC5B,CAAC,0BAA0B,EAAE,KAAK,CAAC;IACnC,CAAC,iBAAiB,EAAE,KAAK,CAAC;IAC1B,kCAAkC;IAClC,CAAC,2BAA2B,EAAE,IAAI,CAAC;CACpC,CAAC,CACA,8DAA8D,EAC9D,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CACrB,IAAA,kBAAW,EACT,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mDAAmD,EACzE;;;;;;UAMI,SAAS;;OAEZ,EACD;;;;;;UAMI,SAAS;;OAEZ,CACF,CACJ,CAAC"}
|
package/test/diagnostics.test.js
CHANGED
|
@@ -4,71 +4,71 @@ const diagnostics_1 = require("../lib/diagnostics");
|
|
|
4
4
|
const util_1 = require("./util");
|
|
5
5
|
// ----------------------------------------------------------------------
|
|
6
6
|
test('experimental elements lead to warnings', () => {
|
|
7
|
-
const mms = util_1.compare(`
|
|
7
|
+
const mms = (0, util_1.compare)(`
|
|
8
8
|
/** @experimental */
|
|
9
9
|
export class Foo1 { }
|
|
10
10
|
`, `
|
|
11
11
|
export class Foo2 { }
|
|
12
12
|
`);
|
|
13
13
|
const experimentalErrors = false;
|
|
14
|
-
const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
|
|
14
|
+
const diags = (0, diagnostics_1.classifyDiagnostics)(mms, experimentalErrors, new Set());
|
|
15
15
|
expect(diags.length).toBe(1);
|
|
16
|
-
expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
|
|
16
|
+
expect((0, diagnostics_1.hasErrors)(diags)).toBeFalsy();
|
|
17
17
|
});
|
|
18
18
|
// ----------------------------------------------------------------------
|
|
19
19
|
test('external stability violations are reported as warnings', () => {
|
|
20
|
-
const mms = util_1.compare(`
|
|
20
|
+
const mms = (0, util_1.compare)(`
|
|
21
21
|
/** @stability external */
|
|
22
22
|
export class Foo1 { }
|
|
23
23
|
`, `
|
|
24
24
|
export class Foo2 { }
|
|
25
25
|
`);
|
|
26
26
|
const experimentalErrors = false;
|
|
27
|
-
const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
|
|
27
|
+
const diags = (0, diagnostics_1.classifyDiagnostics)(mms, experimentalErrors, new Set());
|
|
28
28
|
expect(diags.length).toBe(1);
|
|
29
|
-
expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
|
|
29
|
+
expect((0, diagnostics_1.hasErrors)(diags)).toBeFalsy();
|
|
30
30
|
});
|
|
31
31
|
// ----------------------------------------------------------------------
|
|
32
32
|
test('warnings can be turned into errors', () => {
|
|
33
|
-
const mms = util_1.compare(`
|
|
33
|
+
const mms = (0, util_1.compare)(`
|
|
34
34
|
/** @experimental */
|
|
35
35
|
export class Foo1 { }
|
|
36
36
|
`, `
|
|
37
37
|
export class Foo2 { }
|
|
38
38
|
`);
|
|
39
39
|
const experimentalErrors = true;
|
|
40
|
-
const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
|
|
40
|
+
const diags = (0, diagnostics_1.classifyDiagnostics)(mms, experimentalErrors, new Set());
|
|
41
41
|
expect(diags.length).toBe(1);
|
|
42
|
-
expect(diagnostics_1.hasErrors(diags)).toBeTruthy();
|
|
42
|
+
expect((0, diagnostics_1.hasErrors)(diags)).toBeTruthy();
|
|
43
43
|
});
|
|
44
44
|
// ----------------------------------------------------------------------
|
|
45
45
|
test('external stability violations are never turned into errors', () => {
|
|
46
|
-
const mms = util_1.compare(`
|
|
46
|
+
const mms = (0, util_1.compare)(`
|
|
47
47
|
/** @stability external */
|
|
48
48
|
export class Foo1 { }
|
|
49
49
|
`, `
|
|
50
50
|
export class Foo2 { }
|
|
51
51
|
`);
|
|
52
52
|
const experimentalErrors = true;
|
|
53
|
-
const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
|
|
53
|
+
const diags = (0, diagnostics_1.classifyDiagnostics)(mms, experimentalErrors, new Set());
|
|
54
54
|
expect(diags.length).toBe(1);
|
|
55
|
-
expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
|
|
55
|
+
expect((0, diagnostics_1.hasErrors)(diags)).toBeFalsy();
|
|
56
56
|
});
|
|
57
57
|
// ----------------------------------------------------------------------
|
|
58
58
|
test('errors can be skipped', () => {
|
|
59
|
-
const mms = util_1.compare(`
|
|
59
|
+
const mms = (0, util_1.compare)(`
|
|
60
60
|
export class Foo1 { }
|
|
61
61
|
`, `
|
|
62
62
|
export class Foo2 { }
|
|
63
63
|
`);
|
|
64
64
|
const experimentalErrors = true;
|
|
65
|
-
const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set([mms.mismatches[0].violationKey]));
|
|
65
|
+
const diags = (0, diagnostics_1.classifyDiagnostics)(mms, experimentalErrors, new Set([mms.mismatches[0].violationKey]));
|
|
66
66
|
expect(diags.length).toBe(1);
|
|
67
|
-
expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
|
|
67
|
+
expect((0, diagnostics_1.hasErrors)(diags)).toBeFalsy();
|
|
68
68
|
});
|
|
69
69
|
// ----------------------------------------------------------------------
|
|
70
70
|
test('changing stable to experimental is breaking', () => {
|
|
71
|
-
const mms = util_1.compare(`
|
|
71
|
+
const mms = (0, util_1.compare)(`
|
|
72
72
|
/** @stable */
|
|
73
73
|
export class Foo1 { }
|
|
74
74
|
`, `
|
|
@@ -76,14 +76,14 @@ test('changing stable to experimental is breaking', () => {
|
|
|
76
76
|
export class Foo1 { }
|
|
77
77
|
`);
|
|
78
78
|
const experimentalErrors = false;
|
|
79
|
-
const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
|
|
79
|
+
const diags = (0, diagnostics_1.classifyDiagnostics)(mms, experimentalErrors, new Set());
|
|
80
80
|
expect(diags.length).toBeGreaterThan(0);
|
|
81
81
|
expect(diags.some((d) => /stability not allowed to go from 'stable' to 'experimental'/.exec(d.message))).toBeTruthy();
|
|
82
|
-
expect(diagnostics_1.hasErrors(diags)).toBeTruthy();
|
|
82
|
+
expect((0, diagnostics_1.hasErrors)(diags)).toBeTruthy();
|
|
83
83
|
});
|
|
84
84
|
// ----------------------------------------------------------------------
|
|
85
85
|
test('can make fields optional in output struct if it is marked @external', () => {
|
|
86
|
-
const mms = util_1.compare(`
|
|
86
|
+
const mms = (0, util_1.compare)(`
|
|
87
87
|
/** @stability external */
|
|
88
88
|
export interface TheStruct {
|
|
89
89
|
readonly fieldOne: string;
|
|
@@ -103,8 +103,8 @@ test('can make fields optional in output struct if it is marked @external', () =
|
|
|
103
103
|
}
|
|
104
104
|
`);
|
|
105
105
|
const experimentalErrors = true;
|
|
106
|
-
const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
|
|
106
|
+
const diags = (0, diagnostics_1.classifyDiagnostics)(mms, experimentalErrors, new Set());
|
|
107
107
|
expect(diags.length).toBe(1);
|
|
108
|
-
expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
|
|
108
|
+
expect((0, diagnostics_1.hasErrors)(diags)).toBeFalsy();
|
|
109
109
|
});
|
|
110
|
-
//# sourceMappingURL=
|
|
110
|
+
//# sourceMappingURL=diagnostics.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.test.js","sourceRoot":"","sources":["diagnostics.test.ts"],"names":[],"mappings":";;AAAA,oDAAoE;AACpE,iCAAiC;AAEjC,yEAAyE;AACzE,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,MAAM,GAAG,GAAG,IAAA,cAAO,EACjB;;;GAGD,EACC;;GAED,CACA,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,IAAA,iCAAmB,EAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAEtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,yEAAyE;AACzE,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;IAClE,MAAM,GAAG,GAAG,IAAA,cAAO,EACjB;;;GAGD,EACC;;GAED,CACA,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,IAAA,iCAAmB,EAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAEtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,yEAAyE;AACzE,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAC9C,MAAM,GAAG,GAAG,IAAA,cAAO,EACjB;;;GAGD,EACC;;GAED,CACA,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,IAAA,iCAAmB,EAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAEtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,yEAAyE;AACzE,IAAI,CAAC,4DAA4D,EAAE,GAAG,EAAE;IACtE,MAAM,GAAG,GAAG,IAAA,cAAO,EACjB;;;GAGD,EACC;;GAED,CACA,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,IAAA,iCAAmB,EAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAEtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,yEAAyE;AACzE,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACjC,MAAM,GAAG,GAAG,IAAA,cAAO,EACjB;;GAED,EACC;;GAED,CACA,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,IAAA,iCAAmB,EAC/B,GAAG,EACH,kBAAkB,EAClB,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAC1C,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,yEAAyE;AACzE,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,GAAG,GAAG,IAAA,cAAO,EACjB;;;GAGD,EACC;;;GAGD,CACA,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,IAAA,iCAAmB,EAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAEtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CACJ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACf,6DAA6D,CAAC,IAAI,CAChE,CAAC,CAAC,OAAO,CACV,CACF,CACF,CAAC,UAAU,EAAE,CAAC;IACf,MAAM,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,yEAAyE;AAEzE,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAC/E,MAAM,GAAG,GAAG,IAAA,cAAO,EACjB;;;;;;;;;KASC,EACD;;;;;;;;;KASC,CACF,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,IAAA,iCAAmB,EAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAEtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACvC,CAAC,CAAC,CAAC"}
|
package/test/enums.test.js
CHANGED
|
@@ -4,7 +4,7 @@ const util_1 = require("./util");
|
|
|
4
4
|
// Note: an enum with one value behaves weirdly in TypeScript -- it does type analysis to the singleton element.
|
|
5
5
|
// ----------------------------------------------------------------------
|
|
6
6
|
jest.setTimeout(15000);
|
|
7
|
-
test('okay to add a member to an enum', () => util_1.expectNoError(`
|
|
7
|
+
test('okay to add a member to an enum', () => (0, util_1.expectNoError)(`
|
|
8
8
|
export enum Foo {
|
|
9
9
|
BAR,
|
|
10
10
|
BAZ,
|
|
@@ -17,7 +17,7 @@ test('okay to add a member to an enum', () => util_1.expectNoError(`
|
|
|
17
17
|
}
|
|
18
18
|
`));
|
|
19
19
|
// ----------------------------------------------------------------------
|
|
20
|
-
test('not okay to remove a member from an enum', () => util_1.expectError(/member QUUX has been removed/, `
|
|
20
|
+
test('not okay to remove a member from an enum', () => (0, util_1.expectError)(/member QUUX has been removed/, `
|
|
21
21
|
export enum Foo {
|
|
22
22
|
BAR,
|
|
23
23
|
BAZ,
|
|
@@ -30,7 +30,7 @@ test('not okay to remove a member from an enum', () => util_1.expectError(/membe
|
|
|
30
30
|
}
|
|
31
31
|
`));
|
|
32
32
|
// ----------------------------------------------------------------------
|
|
33
|
-
test('does not crash when removing enum', () => util_1.expectError(/ENUM testpkg.Foo: has been removed/, `
|
|
33
|
+
test('does not crash when removing enum', () => (0, util_1.expectError)(/ENUM testpkg.Foo: has been removed/, `
|
|
34
34
|
export enum Foo {
|
|
35
35
|
BAR,
|
|
36
36
|
BAZ,
|
|
@@ -38,4 +38,4 @@ test('does not crash when removing enum', () => util_1.expectError(/ENUM testpkg
|
|
|
38
38
|
}
|
|
39
39
|
`, `
|
|
40
40
|
`));
|
|
41
|
-
//# sourceMappingURL=
|
|
41
|
+
//# sourceMappingURL=enums.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enums.test.js","sourceRoot":"","sources":["enums.test.ts"],"names":[],"mappings":";;AAAA,iCAAoD;AAEpD,gHAAgH;AAEhH,yEAAyE;AAEzE,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;AAExB,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAC3C,IAAA,oBAAa,EACX;;;;;GAKD,EACC;;;;;;GAMD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE,CACpD,IAAA,kBAAW,EACT,8BAA8B,EAC9B;;;;;;GAMD,EACC;;;;;GAKD,CACA,CAAC,CAAC;AAEL,yEAAyE;AAEzE,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAC7C,IAAA,kBAAW,EACT,oCAAoC,EACpC;;;;;;GAMD,EACC;GACD,CACA,CAAC,CAAC"}
|