jsii-diff 1.35.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.
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const diagnostics_1 = require("../lib/diagnostics");
4
+ const util_1 = require("./util");
5
+ // ----------------------------------------------------------------------
6
+ test('experimental elements lead to warnings', async () => {
7
+ const mms = await util_1.compare(`
8
+ /** @experimental */
9
+ export class Foo1 { }
10
+ `, `
11
+ export class Foo2 { }
12
+ `);
13
+ const experimentalErrors = false;
14
+ const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
15
+ expect(diags.length).toBe(1);
16
+ expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
17
+ });
18
+ // ----------------------------------------------------------------------
19
+ test('external stability violations are reported as warnings', async () => {
20
+ const mms = await util_1.compare(`
21
+ /** @stability external */
22
+ export class Foo1 { }
23
+ `, `
24
+ export class Foo2 { }
25
+ `);
26
+ const experimentalErrors = false;
27
+ const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
28
+ expect(diags.length).toBe(1);
29
+ expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
30
+ });
31
+ // ----------------------------------------------------------------------
32
+ test('warnings can be turned into errors', async () => {
33
+ const mms = await util_1.compare(`
34
+ /** @experimental */
35
+ export class Foo1 { }
36
+ `, `
37
+ export class Foo2 { }
38
+ `);
39
+ const experimentalErrors = true;
40
+ const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
41
+ expect(diags.length).toBe(1);
42
+ expect(diagnostics_1.hasErrors(diags)).toBeTruthy();
43
+ });
44
+ // ----------------------------------------------------------------------
45
+ test('external stability violations are never turned into errors', async () => {
46
+ const mms = await util_1.compare(`
47
+ /** @stability external */
48
+ export class Foo1 { }
49
+ `, `
50
+ export class Foo2 { }
51
+ `);
52
+ const experimentalErrors = true;
53
+ const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
54
+ expect(diags.length).toBe(1);
55
+ expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
56
+ });
57
+ // ----------------------------------------------------------------------
58
+ test('errors can be skipped', async () => {
59
+ const mms = await util_1.compare(`
60
+ export class Foo1 { }
61
+ `, `
62
+ export class Foo2 { }
63
+ `);
64
+ const experimentalErrors = true;
65
+ const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set([mms.mismatches[0].violationKey]));
66
+ expect(diags.length).toBe(1);
67
+ expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
68
+ });
69
+ // ----------------------------------------------------------------------
70
+ test('changing stable to experimental is breaking', async () => {
71
+ const mms = await util_1.compare(`
72
+ /** @stable */
73
+ export class Foo1 { }
74
+ `, `
75
+ /** @experimental */
76
+ export class Foo1 { }
77
+ `);
78
+ const experimentalErrors = false;
79
+ const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
80
+ expect(diags.length).toBeGreaterThan(0);
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();
83
+ });
84
+ // ----------------------------------------------------------------------
85
+ test('can make fields optional in output struct if it is marked @external', async () => {
86
+ const mms = await util_1.compare(`
87
+ /** @stability external */
88
+ export interface TheStruct {
89
+ readonly fieldOne: string;
90
+ }
91
+
92
+ export interface IConsumer {
93
+ foo(): TheStruct;
94
+ }
95
+ `, `
96
+ /** @stability external */
97
+ export interface TheStruct {
98
+ readonly fieldOne?: string;
99
+ }
100
+
101
+ export interface IConsumer {
102
+ foo(): TheStruct;
103
+ }
104
+ `);
105
+ const experimentalErrors = true;
106
+ const diags = diagnostics_1.classifyDiagnostics(mms, experimentalErrors, new Set());
107
+ expect(diags.length).toBe(1);
108
+ expect(diagnostics_1.hasErrors(diags)).toBeFalsy();
109
+ });
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRpYWdub3N0aWNzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFBb0U7QUFDcEUsaUNBQWlDO0FBRWpDLHlFQUF5RTtBQUN6RSxJQUFJLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDeEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxjQUFPLENBQ3ZCOzs7R0FHRCxFQUNDOztHQUVELENBQ0EsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLGlDQUFtQixDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFdEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxDQUFDLHVCQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2QyxDQUFDLENBQUMsQ0FBQztBQUVILHlFQUF5RTtBQUN6RSxJQUFJLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDeEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxjQUFPLENBQ3ZCOzs7R0FHRCxFQUNDOztHQUVELENBQ0EsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLGlDQUFtQixDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFdEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxDQUFDLHVCQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2QyxDQUFDLENBQUMs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Y0FBTyxDQUN2Qjs7Ozs7Ozs7O0tBU0MsRUFDRDs7Ozs7Ozs7O0tBU0MsQ0FDRixDQUFDO0lBRUYsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsaUNBQW1CLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUV0RSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLENBQUMsdUJBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhc3NpZnlEaWFnbm9zdGljcywgaGFzRXJyb3JzIH0gZnJvbSAnLi4vbGliL2RpYWdub3N0aWNzJztcbmltcG9ydCB7IGNvbXBhcmUgfSBmcm9tICcuL3V0aWwnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG50ZXN0KCdleHBlcmltZW50YWwgZWxlbWVudHMgbGVhZCB0byB3YXJuaW5ncycsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgbW1zID0gYXdhaXQgY29tcGFyZShcbiAgICBgXG4gICAgLyoqIEBleHBlcmltZW50YWwgKi9cbiAgICBleHBvcnQgY2xhc3MgRm9vMSB7IH1cbiAgYCxcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIEZvbzIgeyB9XG4gIGAsXG4gICk7XG5cbiAgY29uc3QgZXhwZXJpbWVudGFsRXJyb3JzID0gZmFsc2U7XG4gIGNvbnN0IGRpYWdzID0gY2xhc3NpZnlEaWFnbm9zdGljcyhtbXMsIGV4cGVyaW1lbnRhbEVycm9ycywgbmV3IFNldCgpKTtcblxuICBleHBlY3QoZGlhZ3MubGVuZ3RoKS50b0JlKDEpO1xuICBleHBlY3QoaGFzRXJyb3JzKGRpYWdzKSkudG9CZUZhbHN5KCk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudGVzdCgnZXh0ZXJuYWwgc3RhYmlsaXR5IHZpb2xhdGlvbnMgYXJlIHJlcG9ydGVkIGFzIHdhcm5pbmdzJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBtbXMgPSBhd2FpdCBjb21wYXJlKFxuICAgIGBcbiAgICAvKiogQHN0YWJpbGl0eSBleHRlcm5hbCAqL1xuICAgIGV4cG9ydCBjbGFzcyBGb28xIHsgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgRm9vMiB7IH1cbiAgYCxcbiAgKTtcblxuICBjb25zdCBleHBlcmltZW50YWxFcnJvcnMgPSBmYWxzZTtcbiAgY29uc3QgZGlhZ3MgPSBjbGFzc2lmeURpYWdub3N0aWNzKG1tcywgZXhwZXJpbWVudGFsRXJyb3JzLCBuZXcgU2V0KCkpO1xuXG4gIGV4cGVjdChkaWFncy5sZW5ndGgpLnRvQmUoMSk7XG4gIGV4cGVjdChoYXNFcnJvcnMoZGlhZ3MpKS50b0JlRmFsc3koKTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG50ZXN0KCd3YXJuaW5ncyBjYW4gYmUgdHVybmVkIGludG8gZXJyb3JzJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBtbXMgPSBhd2FpdCBjb21wYXJlKFxuICAgIGBcbiAgICAvKiogQGV4cGVyaW1lbnRhbCAqL1xuICAgIGV4cG9ydCBjbGFzcyBGb28xIHsgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgRm9vMiB7IH1cbiAgYCxcbiAgKTtcblxuICBjb25zdCBleHBlcmltZW50YWxFcnJvcnMgPSB0cnVlO1xuICBjb25zdCBkaWFncyA9IGNsYXNzaWZ5RGlhZ25vc3RpY3MobW1zLCBleHBlcmltZW50YWxFcnJvcnMsIG5ldyBTZXQoKSk7XG5cbiAgZXhwZWN0KGRpYWdzLmxlbmd0aCkudG9CZSgxKTtcbiAgZXhwZWN0KGhhc0Vycm9ycyhkaWFncykpLnRvQmVUcnV0aHkoKTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG50ZXN0KCdleHRlcm5hbCBzdGFiaWxpdHkgdmlvbGF0aW9ucyBhcmUgbmV2ZXIgdHVybmVkIGludG8gZXJyb3JzJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBtbXMgPSBhd2FpdCBjb21wYXJlKFxuICAgIGBcbiAgICAvKiogQHN0YWJpbGl0eSBleHRlcm5hbCAqL1xuICAgIGV4cG9ydCBjbGFzcyBGb28xIHsgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgY2xhc3MgRm9vMiB7IH1cbiAgYCxcbiAgKTtcblxuICBjb25zdCBleHBlcmltZW50YWxFcnJvcnMgPSB0cnVlO1xuICBjb25zdCBkaWFncyA9IGNsYXNzaWZ5RGlhZ25vc3RpY3MobW1zLCBleHBlcmltZW50YWxFcnJvcnMsIG5ldyBTZXQoKSk7XG5cbiAgZXhwZWN0KGRpYWdzLmxlbmd0aCkudG9CZSgxKTtcbiAgZXhwZWN0KGhhc0Vycm9ycyhkaWFncykpLnRvQmVGYWxzeSgpO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnRlc3QoJ2Vycm9ycyBjYW4gYmUgc2tpcHBlZCcsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgbW1zID0gYXdhaXQgY29tcGFyZShcbiAgICBgXG4gICAgZXhwb3J0IGNsYXNzIEZvbzEgeyB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28yIHsgfVxuICBgLFxuICApO1xuXG4gIGNvbnN0IGV4cGVyaW1lbnRhbEVycm9ycyA9IHRydWU7XG4gIGNvbnN0IGRpYWdzID0gY2xhc3NpZnlEaWFnbm9zdGljcyhcbiAgICBtbXMsXG4gICAgZXhwZXJpbWVudGFsRXJyb3JzLFxuICAgIG5ldyBTZXQoW21tcy5taXNtYXRjaGVzWzBdLnZpb2xhdGlvbktleV0pLFxuICApO1xuXG4gIGV4cGVjdChkaWFncy5sZW5ndGgpLnRvQmUoMSk7XG4gIGV4cGVjdChoYXNFcnJvcnMoZGlhZ3MpKS50b0JlRmFsc3koKTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG50ZXN0KCdjaGFuZ2luZyBzdGFibGUgdG8gZXhwZXJpbWVudGFsIGlzIGJyZWFraW5nJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBtbXMgPSBhd2FpdCBjb21wYXJlKFxuICAgIGBcbiAgICAvKiogQHN0YWJsZSAqL1xuICAgIGV4cG9ydCBjbGFzcyBGb28xIHsgfVxuICBgLFxuICAgIGBcbiAgICAvKiogQGV4cGVyaW1lbnRhbCAqL1xuICAgIGV4cG9ydCBjbGFzcyBGb28xIHsgfVxuICBgLFxuICApO1xuXG4gIGNvbnN0IGV4cGVyaW1lbnRhbEVycm9ycyA9IGZhbHNlO1xuICBjb25zdCBkaWFncyA9IGNsYXNzaWZ5RGlhZ25vc3RpY3MobW1zLCBleHBlcmltZW50YWxFcnJvcnMsIG5ldyBTZXQoKSk7XG5cbiAgZXhwZWN0KGRpYWdzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICBleHBlY3QoXG4gICAgZGlhZ3Muc29tZSgoZCkgPT5cbiAgICAgIC9zdGFiaWxpdHkgbm90IGFsbG93ZWQgdG8gZ28gZnJvbSAnc3RhYmxlJyB0byAnZXhwZXJpbWVudGFsJy8uZXhlYyhcbiAgICAgICAgZC5tZXNzYWdlLFxuICAgICAgKSxcbiAgICApLFxuICApLnRvQmVUcnV0aHkoKTtcbiAgZXhwZWN0KGhhc0Vycm9ycyhkaWFncykpLnRvQmVUcnV0aHkoKTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ2NhbiBtYWtlIGZpZWxkcyBvcHRpb25hbCBpbiBvdXRwdXQgc3RydWN0IGlmIGl0IGlzIG1hcmtlZCBAZXh0ZXJuYWwnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IG1tcyA9IGF3YWl0IGNvbXBhcmUoXG4gICAgYFxuICAgIC8qKiBAc3RhYmlsaXR5IGV4dGVybmFsICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBUaGVTdHJ1Y3Qge1xuICAgICAgcmVhZG9ubHkgZmllbGRPbmU6IHN0cmluZztcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIElDb25zdW1lciB7XG4gICAgICBmb28oKTogVGhlU3RydWN0O1xuICAgIH1cbiAgICBgLFxuICAgIGBcbiAgICAvKiogQHN0YWJpbGl0eSBleHRlcm5hbCAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVGhlU3RydWN0IHtcbiAgICAgIHJlYWRvbmx5IGZpZWxkT25lPzogc3RyaW5nO1xuICAgIH1cblxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSUNvbnN1bWVyIHtcbiAgICAgIGZvbygpOiBUaGVTdHJ1Y3Q7XG4gICAgfVxuICAgIGAsXG4gICk7XG5cbiAgY29uc3QgZXhwZXJpbWVudGFsRXJyb3JzID0gdHJ1ZTtcbiAgY29uc3QgZGlhZ3MgPSBjbGFzc2lmeURpYWdub3N0aWNzKG1tcywgZXhwZXJpbWVudGFsRXJyb3JzLCBuZXcgU2V0KCkpO1xuXG4gIGV4cGVjdChkaWFncy5sZW5ndGgpLnRvQmUoMSk7XG4gIGV4cGVjdChoYXNFcnJvcnMoZGlhZ3MpKS50b0JlRmFsc3koKTtcbn0pO1xuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util_1 = require("./util");
4
+ // Note: an enum with one value behaves weirdly in TypeScript -- it does type analysis to the singleton element.
5
+ // ----------------------------------------------------------------------
6
+ jest.setTimeout(15000);
7
+ test('okay to add a member to an enum', () => util_1.expectNoError(`
8
+ export enum Foo {
9
+ BAR,
10
+ BAZ,
11
+ }
12
+ `, `
13
+ export enum Foo {
14
+ BAR,
15
+ BAZ,
16
+ QUUX
17
+ }
18
+ `));
19
+ // ----------------------------------------------------------------------
20
+ test('not okay to remove a member from an enum', () => util_1.expectError(/member QUUX has been removed/, `
21
+ export enum Foo {
22
+ BAR,
23
+ BAZ,
24
+ QUUX
25
+ }
26
+ `, `
27
+ export enum Foo {
28
+ BAR,
29
+ BAZ
30
+ }
31
+ `));
32
+ // ----------------------------------------------------------------------
33
+ test('does not crash when removing enum', () => util_1.expectError(/ENUM testpkg.Foo: has been removed/, `
34
+ export enum Foo {
35
+ BAR,
36
+ BAZ,
37
+ QUUX
38
+ }
39
+ `, `
40
+ `));
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVudW1zLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBb0Q7QUFFcEQsZ0hBQWdIO0FBRWhILHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQU0sQ0FBQyxDQUFDO0FBRXhCLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUUsQ0FDM0Msb0JBQWEsQ0FDWDs7Ozs7R0FLRCxFQUNDOzs7Ozs7R0FNRCxDQUNBLENBQUMsQ0FBQztBQUVMLHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsMENBQTBDLEVBQUUsR0FBRyxFQUFFLENBQ3BELGtCQUFXLENBQ1QsOEJBQThCLEVBQzlCOzs7Ozs7R0FNRCxFQUNDOzs7OztHQUtELENBQ0EsQ0FBQyxDQUFDO0FBRUwseUVBQXlFO0FBRXpFLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUUsQ0FDN0Msa0JBQVcsQ0FDVCxvQ0FBb0MsRUFDcEM7Ozs7OztHQU1ELEVBQ0M7R0FDRCxDQUNBLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGVjdEVycm9yLCBleHBlY3ROb0Vycm9yIH0gZnJvbSAnLi91dGlsJztcblxuLy8gTm90ZTogYW4gZW51bSB3aXRoIG9uZSB2YWx1ZSBiZWhhdmVzIHdlaXJkbHkgaW4gVHlwZVNjcmlwdCAtLSBpdCBkb2VzIHR5cGUgYW5hbHlzaXMgdG8gdGhlIHNpbmdsZXRvbiBlbGVtZW50LlxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmplc3Quc2V0VGltZW91dCgxNV8wMDApO1xuXG50ZXN0KCdva2F5IHRvIGFkZCBhIG1lbWJlciB0byBhbiBlbnVtJywgKCkgPT5cbiAgZXhwZWN0Tm9FcnJvcihcbiAgICBgXG4gICAgZXhwb3J0IGVudW0gRm9vIHtcbiAgICAgIEJBUixcbiAgICAgIEJBWixcbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBlbnVtIEZvbyB7XG4gICAgICBCQVIsXG4gICAgICBCQVosXG4gICAgICBRVVVYXG4gICAgfVxuICBgLFxuICApKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0KCdub3Qgb2theSB0byByZW1vdmUgYSBtZW1iZXIgZnJvbSBhbiBlbnVtJywgKCkgPT5cbiAgZXhwZWN0RXJyb3IoXG4gICAgL21lbWJlciBRVVVYIGhhcyBiZWVuIHJlbW92ZWQvLFxuICAgIGBcbiAgICBleHBvcnQgZW51bSBGb28ge1xuICAgICAgQkFSLFxuICAgICAgQkFaLFxuICAgICAgUVVVWFxuICAgIH1cbiAgYCxcbiAgICBgXG4gICAgZXhwb3J0IGVudW0gRm9vIHtcbiAgICAgIEJBUixcbiAgICAgIEJBWlxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnZG9lcyBub3QgY3Jhc2ggd2hlbiByZW1vdmluZyBlbnVtJywgKCkgPT5cbiAgZXhwZWN0RXJyb3IoXG4gICAgL0VOVU0gdGVzdHBrZy5Gb286IGhhcyBiZWVuIHJlbW92ZWQvLFxuICAgIGBcbiAgICBleHBvcnQgZW51bSBGb28ge1xuICAgICAgQkFSLFxuICAgICAgQkFaLFxuICAgICAgUVVVWFxuICAgIH1cbiAgYCxcbiAgICBgXG4gIGAsXG4gICkpO1xuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util_1 = require("./util");
4
+ // ----------------------------------------------------------------------
5
+ test('cannot add required fields to an input struct', () => util_1.expectError(/required property 'super' added/, `
6
+ export interface Henk {
7
+ readonly henk: string;
8
+ }
9
+ export class Foo {
10
+ public bar(arg1: Henk): void {
11
+ Array.isArray(arg1);
12
+ }
13
+ }
14
+ `, `
15
+ export interface Henk {
16
+ readonly henk: string;
17
+ readonly super: string;
18
+ }
19
+ export class Foo {
20
+ public bar(arg1: Henk): void {
21
+ Array.isArray(arg1);
22
+ }
23
+ }
24
+ `));
25
+ // ----------------------------------------------------------------------
26
+ test('can add required fields to an output struct', () => util_1.expectNoError(`
27
+ export interface Henk {
28
+ readonly henk: string;
29
+ }
30
+ export class Foo {
31
+ public bar(): Henk {
32
+ return { henk: 'henk' };
33
+ }
34
+ }
35
+ `, `
36
+ export interface Henk {
37
+ readonly henk: string;
38
+ readonly super: string;
39
+ }
40
+ export class Foo {
41
+ public bar(): Henk {
42
+ return { henk: 'henk', super: 'super' };
43
+ }
44
+ }
45
+ `));
46
+ // ----------------------------------------------------------------------
47
+ test('can change argument type to a supertype if it adds only optional fields', () => util_1.expectNoError(`
48
+ export interface Henk {
49
+ readonly henk: string;
50
+ }
51
+ export class Foo {
52
+ public bar(arg1: Henk): void {
53
+ Array.isArray(arg1);
54
+ }
55
+ }
56
+ `, `
57
+ export interface Super {
58
+ readonly super?: string;
59
+ }
60
+ export interface Henk extends Super {
61
+ readonly henk: string;
62
+ }
63
+ export class Foo {
64
+ public bar(arg1: Super): void {
65
+ Array.isArray(arg1);
66
+ }
67
+ }
68
+ `));
69
+ // ----------------------------------------------------------------------
70
+ test('cannot take fields away from input struct', () =>
71
+ // Legal in TypeScript, but illegal in Java/C#
72
+ util_1.expectError(/has been removed/, `
73
+ export interface Henk {
74
+ readonly henk: string;
75
+ readonly piet: string;
76
+ }
77
+ export class Foo {
78
+ public bar(arg1: Henk): void {
79
+ Array.isArray(arg1);
80
+ }
81
+ }
82
+ `, `
83
+ export interface Henk {
84
+ readonly henk: string;
85
+ }
86
+ export class Foo {
87
+ public bar(arg1: Henk): void {
88
+ Array.isArray(arg1);
89
+ }
90
+ }
91
+ `));
92
+ // ----------------------------------------------------------------------
93
+ test('cannot take fields away from output struct', () => util_1.expectError(/formerly required property 'piet' removed/, `
94
+ export interface Henk {
95
+ readonly henk: string;
96
+ readonly piet: string;
97
+ }
98
+ export class Foo {
99
+ public bar(): Henk {
100
+ return { henk: 'henk', piet: 'piet' };
101
+ }
102
+ }
103
+ `, `
104
+ export interface Henk {
105
+ readonly henk: string;
106
+ }
107
+ export class Foo {
108
+ public bar(): Henk {
109
+ return { henk: 'henk' };
110
+ }
111
+ }
112
+ `));
113
+ // ----------------------------------------------------------------------
114
+ test('cannot change argument type to a supertype it adds required fields', () => util_1.expectError(/required property 'super' added/, `
115
+ export interface Henk {
116
+ readonly henk: string;
117
+ }
118
+ export class Foo {
119
+ public bar(arg1: Henk): void {
120
+ Array.isArray(arg1);
121
+ }
122
+ }
123
+ `, `
124
+ export interface Super {
125
+ readonly super: string;
126
+ }
127
+ export interface Henk extends Super {
128
+ readonly henk: string;
129
+ }
130
+ export class Foo {
131
+ public bar(arg1: Super): void {
132
+ Array.isArray(arg1);
133
+ }
134
+ }
135
+ `));
136
+ // ----------------------------------------------------------------------
137
+ test('can make an input struct property optional', () => util_1.expectNoError(`
138
+ export interface Henk {
139
+ readonly henk: string;
140
+ }
141
+ export class Actions {
142
+ useHenk(henk: Henk) { Array.isArray(henk); }
143
+ }
144
+ `, `
145
+ export interface Henk {
146
+ readonly henk?: string;
147
+ }
148
+ export class Actions {
149
+ useHenk(henk: Henk) { Array.isArray(henk); }
150
+ }
151
+ `));
152
+ // ----------------------------------------------------------------------
153
+ test('cannot make an input struct property required', () => util_1.expectError(/newly required property 'henk' used to be optional/, `
154
+ export interface Henk {
155
+ readonly henk?: string;
156
+ }
157
+ export class Actions {
158
+ useHenk(henk: Henk) { Array.isArray(henk); }
159
+ }
160
+ `, `
161
+ export interface Henk {
162
+ readonly henk: string;
163
+ }
164
+ export class Actions {
165
+ useHenk(henk: Henk) { Array.isArray(henk); }
166
+ }
167
+ `));
168
+ // ----------------------------------------------------------------------
169
+ test('cannot make an output struct property optional', () => util_1.expectError(/formerly required property 'henk' is optional/, `
170
+ export interface Henk {
171
+ readonly henk: string;
172
+ }
173
+ export class Actions {
174
+ returnHenk(): Henk { return { henk: 'henk' }; }
175
+ }
176
+ `, `
177
+ export interface Henk {
178
+ readonly henk?: string;
179
+ }
180
+ export class Actions {
181
+ returnHenk(): Henk { return {}; }
182
+ }
183
+ `));
184
+ // ----------------------------------------------------------------------
185
+ test('can handle recursive type references', () => util_1.expectNoError(`
186
+ export interface LinkedList {
187
+ readonly name: string;
188
+ readonly next?: LinkedList;
189
+ }
190
+
191
+ export class UseIt {
192
+ public main(list: LinkedList) {
193
+ Array.isArray(list);
194
+ }
195
+ }
196
+ `, `
197
+ export interface LinkedList {
198
+ readonly name: string;
199
+ readonly next?: LinkedList;
200
+ }
201
+
202
+ export class UseIt {
203
+ public main(list: LinkedList) {
204
+ Array.isArray(list);
205
+ }
206
+ }
207
+ `));
208
+ // ----------------------------------------------------------------------
209
+ test('can handle mutually recursive type references', () => util_1.expectNoError(`
210
+ export interface A {
211
+ readonly name: string;
212
+ readonly next?: B;
213
+ }
214
+
215
+ export interface B {
216
+ readonly name: string;
217
+ readonly next?: A;
218
+ }
219
+
220
+ export class UseIt {
221
+ public main(list: A) {
222
+ Array.isArray(list);
223
+ }
224
+ }
225
+ `, `
226
+ export interface A {
227
+ readonly name: string;
228
+ readonly next?: B;
229
+ }
230
+
231
+ export interface B {
232
+ readonly name: string;
233
+ readonly next?: A;
234
+ }
235
+
236
+ export class UseIt {
237
+ public main(list: A) {
238
+ Array.isArray(list);
239
+ }
240
+ }
241
+ `));
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RydWN0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQW9EO0FBRXBELHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFLENBQ3pELGtCQUFXLENBQ1QsaUNBQWlDLEVBQ2pDOzs7Ozs7Ozs7R0FTRCxFQUNDOzs7Ozs7Ozs7O0dBVUQsQ0FDQSxDQUFDLENBQUM7QUFFTCx5RUFBeUU7QUFFekUsSUFBSSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRSxDQUN2RCxvQkFBYSxDQUNYOzs7Ozs7Ozs7R0FTRCxFQUNDOzs7Ozs7Ozs7O0dBVUQsQ0FDQSxDQUFDLENBQUM7QUFFTCx5RUFBeUU7QUFFekUsSUFBSSxDQUFDLHlFQUF5RSxFQUFFLEdBQUcsRUFBRSxDQUNuRixvQkFBYSxDQUNYOzs7Ozs7Ozs7R0FTRCxFQUNDOzs7Ozs7Ozs7Ozs7R0FZRCxDQUNBLENBQUMsQ0FBQztBQUVMLHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO0FBQ3JELDhDQUE4QztBQUM5QyxrQkFBVyxDQUNULGtCQUFrQixFQUNsQjs7Ozs7Ozs7OztHQVVELEVBQ0M7Ozs7Ozs7OztHQVNELENBQ0EsQ0FBQyxDQUFDO0FBRUwseUVBQXlFO0FBRXpFLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUUsQ0FDdEQsa0JBQVcsQ0FDVCwyQ0FBMkMsRUFDM0M7Ozs7Ozs7Ozs7R0FVRCxFQUNDOzs7Ozs7Ozs7R0FTRCxDQUNBLENBQUMsQ0FBQztBQUVMLHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsb0VBQW9FLEVBQUUsR0FBRyxFQUFFLENBQzlFLGtCQUFXLENBQ1QsaUNBQWlDLEVBQ2pDOzs7Ozs7Ozs7R0FTRCxFQUNDOzs7Ozs7Ozs7Ozs7R0FZRCxDQUNBLENBQUMsQ0FBQztBQUVMLHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFLENBQ3RELG9CQUFhLENBQ1g7Ozs7Ozs7R0FPRCxFQUNDOzs7Ozs7O0dBT0QsQ0FDQSxDQUFDLENBQUM7QUFFTCx5RUFBeUU7QUFFekUsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRSxDQUN6RCxrQkFBVyxDQUNULG9EQUFvRCxFQUNwRDs7Ozs7OztHQU9ELEVBQ0M7Ozs7Ozs7R0FPRCxDQUNBLENBQUMsQ0FBQztBQUVMLHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLENBQzFELGtCQUFXLENBQ1QsK0NBQStDLEVBQy9DOzs7Ozs7O0dBT0QsRUFDQzs7Ozs7OztHQU9ELENBQ0EsQ0FBQyxDQUFDO0FBRUwseUVBQXlFO0FBRXpFLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUUsQ0FDaEQsb0JBQWEsQ0FDWDs7Ozs7Ozs7Ozs7R0FXRCxFQUNDOzs7Ozs7Ozs7OztHQVdELENBQ0EsQ0FBQyxDQUFDO0FBRUwseUVBQXlFO0FBRXpFLElBQUksQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUUsQ0FDekQsb0JBQWEsQ0FDWDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRCxFQUNDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JELENBQ0EsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0RXJyb3IsIGV4cGVjdE5vRXJyb3IgfSBmcm9tICcuL3V0aWwnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ2Nhbm5vdCBhZGQgcmVxdWlyZWQgZmllbGRzIHRvIGFuIGlucHV0IHN0cnVjdCcsICgpID0+XG4gIGV4cGVjdEVycm9yKFxuICAgIC9yZXF1aXJlZCBwcm9wZXJ0eSAnc3VwZXInIGFkZGVkLyxcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms6IHN0cmluZztcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEZvbyB7XG4gICAgICBwdWJsaWMgYmFyKGFyZzE6IEhlbmspOiB2b2lkIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmcxKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSGVuayB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmc7XG4gICAgICByZWFkb25seSBzdXBlcjogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoYXJnMTogSGVuayk6IHZvaWQge1xuICAgICAgICBBcnJheS5pc0FycmF5KGFyZzEpO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2FuIGFkZCByZXF1aXJlZCBmaWVsZHMgdG8gYW4gb3V0cHV0IHN0cnVjdCcsICgpID0+XG4gIGV4cGVjdE5vRXJyb3IoXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSGVuayB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmc7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcigpOiBIZW5rIHtcbiAgICAgICAgcmV0dXJuIHsgaGVuazogJ2hlbmsnIH07XG4gICAgICB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgc3VwZXI6IHN0cmluZztcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEZvbyB7XG4gICAgICBwdWJsaWMgYmFyKCk6IEhlbmsge1xuICAgICAgICByZXR1cm4geyBoZW5rOiAnaGVuaycsIHN1cGVyOiAnc3VwZXInIH07XG4gICAgICB9XG4gICAgfVxuICBgLFxuICApKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0KCdjYW4gY2hhbmdlIGFyZ3VtZW50IHR5cGUgdG8gYSBzdXBlcnR5cGUgaWYgaXQgYWRkcyBvbmx5IG9wdGlvbmFsIGZpZWxkcycsICgpID0+XG4gIGV4cGVjdE5vRXJyb3IoXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSGVuayB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmc7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcihhcmcxOiBIZW5rKTogdm9pZCB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMSk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIFN1cGVyIHtcbiAgICAgIHJlYWRvbmx5IHN1cGVyPzogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsgZXh0ZW5kcyBTdXBlciB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmc7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcihhcmcxOiBTdXBlcik6IHZvaWQge1xuICAgICAgICBBcnJheS5pc0FycmF5KGFyZzEpO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2Fubm90IHRha2UgZmllbGRzIGF3YXkgZnJvbSBpbnB1dCBzdHJ1Y3QnLCAoKSA9PlxuICAvLyBMZWdhbCBpbiBUeXBlU2NyaXB0LCBidXQgaWxsZWdhbCBpbiBKYXZhL0MjXG4gIGV4cGVjdEVycm9yKFxuICAgIC9oYXMgYmVlbiByZW1vdmVkLyxcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IHBpZXQ6IHN0cmluZztcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEZvbyB7XG4gICAgICBwdWJsaWMgYmFyKGFyZzE6IEhlbmspOiB2b2lkIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmcxKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSGVuayB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmc7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcihhcmcxOiBIZW5rKTogdm9pZCB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJnMSk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICApKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50ZXN0KCdjYW5ub3QgdGFrZSBmaWVsZHMgYXdheSBmcm9tIG91dHB1dCBzdHJ1Y3QnLCAoKSA9PlxuICBleHBlY3RFcnJvcihcbiAgICAvZm9ybWVybHkgcmVxdWlyZWQgcHJvcGVydHkgJ3BpZXQnIHJlbW92ZWQvLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgcGlldDogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoKTogSGVuayB7XG4gICAgICAgIHJldHVybiB7IGhlbms6ICdoZW5rJywgcGlldDogJ3BpZXQnIH07XG4gICAgICB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoKTogSGVuayB7XG4gICAgICAgIHJldHVybiB7IGhlbms6ICdoZW5rJyB9O1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2Fubm90IGNoYW5nZSBhcmd1bWVudCB0eXBlIHRvIGEgc3VwZXJ0eXBlIGl0IGFkZHMgcmVxdWlyZWQgZmllbGRzJywgKCkgPT5cbiAgZXhwZWN0RXJyb3IoXG4gICAgL3JlcXVpcmVkIHByb3BlcnR5ICdzdXBlcicgYWRkZWQvLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoYXJnMTogSGVuayk6IHZvaWQge1xuICAgICAgICBBcnJheS5pc0FycmF5KGFyZzEpO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBTdXBlciB7XG4gICAgICByZWFkb25seSBzdXBlcjogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsgZXh0ZW5kcyBTdXBlciB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmc7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcihhcmcxOiBTdXBlcik6IHZvaWQge1xuICAgICAgICBBcnJheS5pc0FycmF5KGFyZzEpO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2FuIG1ha2UgYW4gaW5wdXQgc3RydWN0IHByb3BlcnR5IG9wdGlvbmFsJywgKCkgPT5cbiAgZXhwZWN0Tm9FcnJvcihcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms6IHN0cmluZztcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbnMge1xuICAgICAgdXNlSGVuayhoZW5rOiBIZW5rKSB7IEFycmF5LmlzQXJyYXkoaGVuayk7IH1cbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSGVuayB7XG4gICAgICByZWFkb25seSBoZW5rPzogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgQWN0aW9ucyB7XG4gICAgICB1c2VIZW5rKGhlbms6IEhlbmspIHsgQXJyYXkuaXNBcnJheShoZW5rKTsgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2Fubm90IG1ha2UgYW4gaW5wdXQgc3RydWN0IHByb3BlcnR5IHJlcXVpcmVkJywgKCkgPT5cbiAgZXhwZWN0RXJyb3IoXG4gICAgL25ld2x5IHJlcXVpcmVkIHByb3BlcnR5ICdoZW5rJyB1c2VkIHRvIGJlIG9wdGlvbmFsLyxcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms/OiBzdHJpbmc7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBBY3Rpb25zIHtcbiAgICAgIHVzZUhlbmsoaGVuazogSGVuaykgeyBBcnJheS5pc0FycmF5KGhlbmspOyB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgQWN0aW9ucyB7XG4gICAgICB1c2VIZW5rKGhlbms6IEhlbmspIHsgQXJyYXkuaXNBcnJheShoZW5rKTsgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2Fubm90IG1ha2UgYW4gb3V0cHV0IHN0cnVjdCBwcm9wZXJ0eSBvcHRpb25hbCcsICgpID0+XG4gIGV4cGVjdEVycm9yKFxuICAgIC9mb3JtZXJseSByZXF1aXJlZCBwcm9wZXJ0eSAnaGVuaycgaXMgb3B0aW9uYWwvLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgQWN0aW9ucyB7XG4gICAgICByZXR1cm5IZW5rKCk6IEhlbmsgeyByZXR1cm4geyBoZW5rOiAnaGVuaycgfTsgfVxuICAgIH1cbiAgYCxcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms/OiBzdHJpbmc7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBBY3Rpb25zIHtcbiAgICAgIHJldHVybkhlbmsoKTogSGVuayB7IHJldHVybiB7fTsgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgnY2FuIGhhbmRsZSByZWN1cnNpdmUgdHlwZSByZWZlcmVuY2VzJywgKCkgPT5cbiAgZXhwZWN0Tm9FcnJvcihcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBMaW5rZWRMaXN0IHtcbiAgICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IG5leHQ/OiBMaW5rZWRMaXN0O1xuICAgIH1cblxuICAgIGV4cG9ydCBjbGFzcyBVc2VJdCB7XG4gICAgICBwdWJsaWMgbWFpbihsaXN0OiBMaW5rZWRMaXN0KSB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkobGlzdCk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIExpbmtlZExpc3Qge1xuICAgICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgbmV4dD86IExpbmtlZExpc3Q7XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIFVzZUl0IHtcbiAgICAgIHB1YmxpYyBtYWluKGxpc3Q6IExpbmtlZExpc3QpIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShsaXN0KTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICkpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ2NhbiBoYW5kbGUgbXV0dWFsbHkgcmVjdXJzaXZlIHR5cGUgcmVmZXJlbmNlcycsICgpID0+XG4gIGV4cGVjdE5vRXJyb3IoXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgQSB7XG4gICAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgICByZWFkb25seSBuZXh0PzogQjtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIEIge1xuICAgICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgbmV4dD86IEE7XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIFVzZUl0IHtcbiAgICAgIHB1YmxpYyBtYWluKGxpc3Q6IEEpIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShsaXN0KTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgQSB7XG4gICAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgICByZWFkb25seSBuZXh0PzogQjtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIEIge1xuICAgICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgbmV4dD86IEE7XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIFVzZUl0IHtcbiAgICAgIHB1YmxpYyBtYWluKGxpc3Q6IEEpIHtcbiAgICAgICAgQXJyYXkuaXNBcnJheShsaXN0KTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gICkpO1xuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util_1 = require("./util");
4
+ jest.setTimeout(50000);
5
+ // ----------------------------------------------------------------------
6
+ test('type unions in return structs can be the same', () => util_1.expectNoError(`
7
+ export interface Henk {
8
+ readonly henk: string | number;
9
+ }
10
+ export class Actions {
11
+ returnHenk(): Henk { return { henk: 'henk' }; }
12
+ }
13
+ `, `
14
+ export interface Henk {
15
+ readonly henk: string | number;
16
+ }
17
+ export class Actions {
18
+ returnHenk(): Henk { return { henk: 'henk' }; }
19
+ }
20
+ `));
21
+ // ----------------------------------------------------------------------
22
+ test('type unions in return structs can be narrowed', () => util_1.expectNoError(`
23
+ export interface Henk {
24
+ readonly henk: string | number;
25
+ }
26
+ export class Actions {
27
+ returnHenk(): Henk { return { henk: 'henk' }; }
28
+ }
29
+ `, `
30
+ export interface Henk {
31
+ readonly henk: string;
32
+ }
33
+ export class Actions {
34
+ returnHenk(): Henk { return { henk: 'henk' }; }
35
+ }
36
+ `));
37
+ // ----------------------------------------------------------------------
38
+ test('type unions in return structs can not be widened', () => util_1.expectError(/some of string \| number \| boolean are not assignable to string \| number/, `
39
+ export interface Henk {
40
+ readonly henk: string | number;
41
+ }
42
+ export class Actions {
43
+ returnHenk(): Henk { return { henk: 'henk' }; }
44
+ }
45
+ `, `
46
+ export interface Henk {
47
+ readonly henk: string | number | boolean;
48
+ }
49
+ export class Actions {
50
+ returnHenk(): Henk { return { henk: 'henk' }; }
51
+ }
52
+ `));
53
+ // ----------------------------------------------------------------------
54
+ test('type unions in input structs can be the same', () => util_1.expectNoError(`
55
+ export interface Henk {
56
+ readonly henk: string | number;
57
+ }
58
+ export class Actions {
59
+ takeHenk(_henk: Henk): void { }
60
+ }
61
+ `, `
62
+ export interface Henk {
63
+ readonly henk: string | number;
64
+ }
65
+ export class Actions {
66
+ takeHenk(_henk: Henk): void { }
67
+ }
68
+ `));
69
+ // ----------------------------------------------------------------------
70
+ test('type unions in input structs can be widened', () => util_1.expectNoError(`
71
+ export interface Henk {
72
+ readonly henk: string | number;
73
+ }
74
+ export class Actions {
75
+ takeHenk(_henk: Henk): void { }
76
+ }
77
+ `, `
78
+ export interface Henk {
79
+ readonly henk: string | number | boolean;
80
+ }
81
+ export class Actions {
82
+ takeHenk(_henk: Henk): void { }
83
+ }
84
+ `));
85
+ // ----------------------------------------------------------------------
86
+ test('type unions in input structs can not be narrowed', () => util_1.expectError(/string \| number is not assignable to string/, `
87
+ export interface Henk {
88
+ readonly henk: string | number;
89
+ }
90
+ export class Actions {
91
+ takeHenk(_henk: Henk): void { }
92
+ }
93
+ `, `
94
+ export interface Henk {
95
+ readonly henk: string;
96
+ }
97
+ export class Actions {
98
+ takeHenk(_henk: Henk): void { }
99
+ }
100
+ `));
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS11bmlvbnMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGUtdW5pb25zLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBb0Q7QUFFcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFNLENBQUMsQ0FBQztBQUV4Qix5RUFBeUU7QUFFekUsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRSxDQUN6RCxvQkFBYSxDQUNYOzs7Ozs7O0dBT0QsRUFDQzs7Ozs7OztHQU9ELENBQ0EsQ0FBQyxDQUFDO0FBQ0wseUVBQXlFO0FBRXpFLElBQUksQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUUsQ0FDekQsb0JBQWEsQ0FDWDs7Ozs7OztHQU9ELEVBQ0M7Ozs7Ozs7R0FPRCxDQUNBLENBQUMsQ0FBQztBQUNMLHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFLENBQzVELGtCQUFXLENBQ1QsNEVBQTRFLEVBQzVFOzs7Ozs7O0dBT0QsRUFDQzs7Ozs7OztHQU9ELENBQ0EsQ0FBQyxDQUFDO0FBQ0wseUVBQXlFO0FBRXpFLElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUUsQ0FDeEQsb0JBQWEsQ0FDWDs7Ozs7OztHQU9ELEVBQ0M7Ozs7Ozs7R0FPRCxDQUNBLENBQUMsQ0FBQztBQUNMLHlFQUF5RTtBQUV6RSxJQUFJLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFLENBQ3ZELG9CQUFhLENBQ1g7Ozs7Ozs7R0FPRCxFQUNDOzs7Ozs7O0dBT0QsQ0FDQSxDQUFDLENBQUM7QUFDTCx5RUFBeUU7QUFFekUsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRSxDQUM1RCxrQkFBVyxDQUNULDhDQUE4QyxFQUM5Qzs7Ozs7OztHQU9ELEVBQ0M7Ozs7Ozs7R0FPRCxDQUNBLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGVjdEVycm9yLCBleHBlY3ROb0Vycm9yIH0gZnJvbSAnLi91dGlsJztcblxuamVzdC5zZXRUaW1lb3V0KDUwXzAwMCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgndHlwZSB1bmlvbnMgaW4gcmV0dXJuIHN0cnVjdHMgY2FuIGJlIHRoZSBzYW1lJywgKCkgPT5cbiAgZXhwZWN0Tm9FcnJvcihcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms6IHN0cmluZyB8IG51bWJlcjtcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbnMge1xuICAgICAgcmV0dXJuSGVuaygpOiBIZW5rIHsgcmV0dXJuIHsgaGVuazogJ2hlbmsnIH07IH1cbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSGVuayB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBBY3Rpb25zIHtcbiAgICAgIHJldHVybkhlbmsoKTogSGVuayB7IHJldHVybiB7IGhlbms6ICdoZW5rJyB9OyB9XG4gICAgfVxuICBgLFxuICApKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgndHlwZSB1bmlvbnMgaW4gcmV0dXJuIHN0cnVjdHMgY2FuIGJlIG5hcnJvd2VkJywgKCkgPT5cbiAgZXhwZWN0Tm9FcnJvcihcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms6IHN0cmluZyB8IG51bWJlcjtcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbnMge1xuICAgICAgcmV0dXJuSGVuaygpOiBIZW5rIHsgcmV0dXJuIHsgaGVuazogJ2hlbmsnIH07IH1cbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSGVuayB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmc7XG4gICAgfVxuICAgIGV4cG9ydCBjbGFzcyBBY3Rpb25zIHtcbiAgICAgIHJldHVybkhlbmsoKTogSGVuayB7IHJldHVybiB7IGhlbms6ICdoZW5rJyB9OyB9XG4gICAgfVxuICBgLFxuICApKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGVzdCgndHlwZSB1bmlvbnMgaW4gcmV0dXJuIHN0cnVjdHMgY2FuIG5vdCBiZSB3aWRlbmVkJywgKCkgPT5cbiAgZXhwZWN0RXJyb3IoXG4gICAgL3NvbWUgb2Ygc3RyaW5nIFxcfCBudW1iZXIgXFx8IGJvb2xlYW4gYXJlIG5vdCBhc3NpZ25hYmxlIHRvIHN0cmluZyBcXHwgbnVtYmVyLyxcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms6IHN0cmluZyB8IG51bWJlcjtcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbnMge1xuICAgICAgcmV0dXJuSGVuaygpOiBIZW5rIHsgcmV0dXJuIHsgaGVuazogJ2hlbmsnIH07IH1cbiAgICB9XG4gIGAsXG4gICAgYFxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSGVuayB7XG4gICAgICByZWFkb25seSBoZW5rOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgQWN0aW9ucyB7XG4gICAgICByZXR1cm5IZW5rKCk6IEhlbmsgeyByZXR1cm4geyBoZW5rOiAnaGVuaycgfTsgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ3R5cGUgdW5pb25zIGluIGlucHV0IHN0cnVjdHMgY2FuIGJlIHRoZSBzYW1lJywgKCkgPT5cbiAgZXhwZWN0Tm9FcnJvcihcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms6IHN0cmluZyB8IG51bWJlcjtcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbnMge1xuICAgICAgdGFrZUhlbmsoX2hlbms6IEhlbmspOiB2b2lkIHsgfVxuICAgIH1cbiAgYCxcbiAgICBgXG4gICAgZXhwb3J0IGludGVyZmFjZSBIZW5rIHtcbiAgICAgIHJlYWRvbmx5IGhlbms6IHN0cmluZyB8IG51bWJlcjtcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbnMge1xuICAgICAgdGFrZUhlbmsoX2hlbms6IEhlbmspOiB2b2lkIHsgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ3R5cGUgdW5pb25zIGluIGlucHV0IHN0cnVjdHMgY2FuIGJlIHdpZGVuZWQnLCAoKSA9PlxuICBleHBlY3ROb0Vycm9yKFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nIHwgbnVtYmVyO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgQWN0aW9ucyB7XG4gICAgICB0YWtlSGVuayhfaGVuazogSGVuayk6IHZvaWQgeyB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9XG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbnMge1xuICAgICAgdGFrZUhlbmsoX2hlbms6IEhlbmspOiB2b2lkIHsgfVxuICAgIH1cbiAgYCxcbiAgKSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRlc3QoJ3R5cGUgdW5pb25zIGluIGlucHV0IHN0cnVjdHMgY2FuIG5vdCBiZSBuYXJyb3dlZCcsICgpID0+XG4gIGV4cGVjdEVycm9yKFxuICAgIC9zdHJpbmcgXFx8IG51bWJlciBpcyBub3QgYXNzaWduYWJsZSB0byBzdHJpbmcvLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nIHwgbnVtYmVyO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgQWN0aW9ucyB7XG4gICAgICB0YWtlSGVuayhfaGVuazogSGVuayk6IHZvaWQgeyB9XG4gICAgfVxuICBgLFxuICAgIGBcbiAgICBleHBvcnQgaW50ZXJmYWNlIEhlbmsge1xuICAgICAgcmVhZG9ubHkgaGVuazogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgY2xhc3MgQWN0aW9ucyB7XG4gICAgICB0YWtlSGVuayhfaGVuazogSGVuayk6IHZvaWQgeyB9XG4gICAgfVxuICBgLFxuICApKTtcbiJdfQ==
package/test/util.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { Mismatches } from '../lib/types';
2
+ export declare function expectNoError(original: string, updated: string): Promise<void>;
3
+ export declare function expectError(error: RegExp | undefined, original: string, updated: string): Promise<void>;
4
+ export declare function compare(original: string, updated: string): Promise<Mismatches>;
package/test/util.js ADDED
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compare = exports.expectError = exports.expectNoError = void 0;
4
+ const jsii_1 = require("jsii");
5
+ const reflect = require("jsii-reflect");
6
+ const lib_1 = require("../lib");
7
+ async function expectNoError(original, updated) {
8
+ const mms = await compare(original, updated);
9
+ for (const msg of mms.messages()) {
10
+ console.error(`- ${msg}`);
11
+ }
12
+ expect(mms.count).toBe(0);
13
+ }
14
+ exports.expectNoError = expectNoError;
15
+ async function expectError(error, original, updated) {
16
+ if (error == null) {
17
+ await expectNoError(original, updated);
18
+ return;
19
+ }
20
+ const mms = await compare(original, updated);
21
+ expect(mms.count).not.toBe(0);
22
+ const msgs = Array.from(mms.messages());
23
+ expect(msgs.some((m) => error.test(m)), `Expected error like ${error.toString()}, got ${msgs.join(', ')}`).toBeTruthy();
24
+ }
25
+ exports.expectError = expectError;
26
+ async function compare(original, updated) {
27
+ const ass1 = jsii_1.sourceToAssemblyHelper(original);
28
+ await expect(ass1).resolves.not.toThrowError();
29
+ const ts1 = new reflect.TypeSystem();
30
+ const originalAssembly = ts1.addAssembly(new reflect.Assembly(ts1, await ass1));
31
+ const ass2 = jsii_1.sourceToAssemblyHelper(updated);
32
+ await expect(ass2).resolves.not.toThrowError();
33
+ const ts2 = new reflect.TypeSystem();
34
+ const updatedAssembly = ts2.addAssembly(new reflect.Assembly(ts2, await ass2));
35
+ return lib_1.compareAssemblies(originalAssembly, updatedAssembly);
36
+ }
37
+ exports.compare = compare;
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQThDO0FBQzlDLHdDQUF3QztBQUV4QyxnQ0FBMkM7QUFHcEMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxRQUFnQixFQUFFLE9BQWU7SUFDbkUsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQzNCO0lBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQU5ELHNDQU1DO0FBRU0sS0FBSyxVQUFVLFdBQVcsQ0FDL0IsS0FBeUIsRUFDekIsUUFBZ0IsRUFDaEIsT0FBZTtJQUVmLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixNQUFNLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FDSixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQy9CLHVCQUF1QixLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNsRSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLENBQUM7QUFsQkQsa0NBa0JDO0FBRU0sS0FBSyxVQUFVLE9BQU8sQ0FDM0IsUUFBZ0IsRUFDaEIsT0FBZTtJQUVmLE1BQU0sSUFBSSxHQUFHLDZCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUN0QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQ3RDLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyw2QkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQ3JDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FDdEMsQ0FBQztJQUVGLE9BQU8sdUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQW5CRCwwQkFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzb3VyY2VUb0Fzc2VtYmx5SGVscGVyIH0gZnJvbSAnanNpaSc7XG5pbXBvcnQgKiBhcyByZWZsZWN0IGZyb20gJ2pzaWktcmVmbGVjdCc7XG5cbmltcG9ydCB7IGNvbXBhcmVBc3NlbWJsaWVzIH0gZnJvbSAnLi4vbGliJztcbmltcG9ydCB7IE1pc21hdGNoZXMgfSBmcm9tICcuLi9saWIvdHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0Tm9FcnJvcihvcmlnaW5hbDogc3RyaW5nLCB1cGRhdGVkOiBzdHJpbmcpIHtcbiAgY29uc3QgbW1zID0gYXdhaXQgY29tcGFyZShvcmlnaW5hbCwgdXBkYXRlZCk7XG4gIGZvciAoY29uc3QgbXNnIG9mIG1tcy5tZXNzYWdlcygpKSB7XG4gICAgY29uc29sZS5lcnJvcihgLSAke21zZ31gKTtcbiAgfVxuICBleHBlY3QobW1zLmNvdW50KS50b0JlKDApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0RXJyb3IoXG4gIGVycm9yOiBSZWdFeHAgfCB1bmRlZmluZWQsXG4gIG9yaWdpbmFsOiBzdHJpbmcsXG4gIHVwZGF0ZWQ6IHN0cmluZyxcbikge1xuICBpZiAoZXJyb3IgPT0gbnVsbCkge1xuICAgIGF3YWl0IGV4cGVjdE5vRXJyb3Iob3JpZ2luYWwsIHVwZGF0ZWQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1tcyA9IGF3YWl0IGNvbXBhcmUob3JpZ2luYWwsIHVwZGF0ZWQpO1xuICBleHBlY3QobW1zLmNvdW50KS5ub3QudG9CZSgwKTtcblxuICBjb25zdCBtc2dzID0gQXJyYXkuZnJvbShtbXMubWVzc2FnZXMoKSk7XG4gIGV4cGVjdChcbiAgICBtc2dzLnNvbWUoKG0pID0+IGVycm9yLnRlc3QobSkpLFxuICAgIGBFeHBlY3RlZCBlcnJvciBsaWtlICR7ZXJyb3IudG9TdHJpbmcoKX0sIGdvdCAke21zZ3Muam9pbignLCAnKX1gLFxuICApLnRvQmVUcnV0aHkoKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbXBhcmUoXG4gIG9yaWdpbmFsOiBzdHJpbmcsXG4gIHVwZGF0ZWQ6IHN0cmluZyxcbik6IFByb21pc2U8TWlzbWF0Y2hlcz4ge1xuICBjb25zdCBhc3MxID0gc291cmNlVG9Bc3NlbWJseUhlbHBlcihvcmlnaW5hbCk7XG4gIGF3YWl0IGV4cGVjdChhc3MxKS5yZXNvbHZlcy5ub3QudG9UaHJvd0Vycm9yKCk7XG4gIGNvbnN0IHRzMSA9IG5ldyByZWZsZWN0LlR5cGVTeXN0ZW0oKTtcbiAgY29uc3Qgb3JpZ2luYWxBc3NlbWJseSA9IHRzMS5hZGRBc3NlbWJseShcbiAgICBuZXcgcmVmbGVjdC5Bc3NlbWJseSh0czEsIGF3YWl0IGFzczEpLFxuICApO1xuXG4gIGNvbnN0IGFzczIgPSBzb3VyY2VUb0Fzc2VtYmx5SGVscGVyKHVwZGF0ZWQpO1xuICBhd2FpdCBleHBlY3QoYXNzMikucmVzb2x2ZXMubm90LnRvVGhyb3dFcnJvcigpO1xuICBjb25zdCB0czIgPSBuZXcgcmVmbGVjdC5UeXBlU3lzdGVtKCk7XG4gIGNvbnN0IHVwZGF0ZWRBc3NlbWJseSA9IHRzMi5hZGRBc3NlbWJseShcbiAgICBuZXcgcmVmbGVjdC5Bc3NlbWJseSh0czIsIGF3YWl0IGFzczIpLFxuICApO1xuXG4gIHJldHVybiBjb21wYXJlQXNzZW1ibGllcyhvcmlnaW5hbEFzc2VtYmx5LCB1cGRhdGVkQXNzZW1ibHkpO1xufVxuIl19