@typespec-dev/emitter-typebox 0.2.0 → 0.4.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/README.md +70 -0
- package/dist/src/components/TypeBoxSchema.d.ts.map +1 -1
- package/dist/src/components/TypeBoxSchema.js +10 -5
- package/dist/src/components/TypeBoxSchema.js.map +1 -1
- package/dist/src/components/TypeBoxSchema.jsx +10 -5
- package/dist/src/components/TypeBoxSchema.jsx.map +1 -1
- package/dist/src/typeboxBaseSchema.d.ts +3 -2
- package/dist/src/typeboxBaseSchema.d.ts.map +1 -1
- package/dist/src/typeboxBaseSchema.js +207 -74
- package/dist/src/typeboxBaseSchema.js.map +1 -1
- package/dist/src/typeboxBaseSchema.jsx +148 -52
- package/dist/src/typeboxBaseSchema.jsx.map +1 -1
- package/dist/src/typeboxConstraints.d.ts +10 -0
- package/dist/src/typeboxConstraints.d.ts.map +1 -0
- package/dist/src/typeboxConstraints.js +308 -0
- package/dist/src/typeboxConstraints.js.map +1 -0
- package/dist/src/typeboxConstraints.jsx +246 -0
- package/dist/src/typeboxConstraints.jsx.map +1 -0
- package/dist/test/arrays.test.js +1 -1
- package/dist/test/arrays.test.js.map +1 -1
- package/dist/test/arrays.test.jsx +1 -1
- package/dist/test/arrays.test.jsx.map +1 -1
- package/dist/test/constraints.test.d.ts +2 -0
- package/dist/test/constraints.test.d.ts.map +1 -0
- package/dist/test/constraints.test.js +414 -0
- package/dist/test/constraints.test.js.map +1 -0
- package/dist/test/constraints.test.jsx +279 -0
- package/dist/test/constraints.test.jsx.map +1 -0
- package/dist/test/dictionaries.test.js +15 -1
- package/dist/test/dictionaries.test.js.map +1 -1
- package/dist/test/dictionaries.test.jsx +11 -1
- package/dist/test/dictionaries.test.jsx.map +1 -1
- package/dist/test/discriminated-unions.test.d.ts +2 -0
- package/dist/test/discriminated-unions.test.d.ts.map +1 -0
- package/dist/test/discriminated-unions.test.js +156 -0
- package/dist/test/discriminated-unions.test.js.map +1 -0
- package/dist/test/discriminated-unions.test.jsx +105 -0
- package/dist/test/discriminated-unions.test.jsx.map +1 -0
- package/dist/test/emitter/custom-scalars.test.d.ts +2 -0
- package/dist/test/emitter/custom-scalars.test.d.ts.map +1 -0
- package/dist/test/emitter/custom-scalars.test.js +42 -0
- package/dist/test/emitter/custom-scalars.test.js.map +1 -0
- package/dist/test/emitter/custom-scalars.test.jsx +38 -0
- package/dist/test/emitter/custom-scalars.test.jsx.map +1 -0
- package/dist/test/emitter/discriminated-unions.test.d.ts +2 -0
- package/dist/test/emitter/discriminated-unions.test.d.ts.map +1 -0
- package/dist/test/emitter/discriminated-unions.test.js +52 -0
- package/dist/test/emitter/discriminated-unions.test.js.map +1 -0
- package/dist/test/emitter/discriminated-unions.test.jsx +48 -0
- package/dist/test/emitter/discriminated-unions.test.jsx.map +1 -0
- package/dist/test/emitter/inheritance.test.d.ts +2 -0
- package/dist/test/emitter/inheritance.test.d.ts.map +1 -0
- package/dist/test/emitter/inheritance.test.js +56 -0
- package/dist/test/emitter/inheritance.test.js.map +1 -0
- package/dist/test/emitter/inheritance.test.jsx +50 -0
- package/dist/test/emitter/inheritance.test.jsx.map +1 -0
- package/dist/test/emitter/recursive.test.d.ts +2 -0
- package/dist/test/emitter/recursive.test.d.ts.map +1 -0
- package/dist/test/emitter/recursive.test.js +36 -0
- package/dist/test/emitter/recursive.test.js.map +1 -0
- package/dist/test/emitter/recursive.test.jsx +32 -0
- package/dist/test/emitter/recursive.test.jsx.map +1 -0
- package/dist/test/emitter/tuples.test.d.ts +2 -0
- package/dist/test/emitter/tuples.test.d.ts.map +1 -0
- package/dist/test/emitter/tuples.test.js +22 -0
- package/dist/test/emitter/tuples.test.js.map +1 -0
- package/dist/test/emitter/tuples.test.jsx +20 -0
- package/dist/test/emitter/tuples.test.jsx.map +1 -0
- package/dist/test/inheritance.test.d.ts +2 -0
- package/dist/test/inheritance.test.d.ts.map +1 -0
- package/dist/test/inheritance.test.js +162 -0
- package/dist/test/inheritance.test.js.map +1 -0
- package/dist/test/inheritance.test.jsx +92 -0
- package/dist/test/inheritance.test.jsx.map +1 -0
- package/dist/test/models.test.js +37 -2
- package/dist/test/models.test.js.map +1 -1
- package/dist/test/models.test.jsx +29 -2
- package/dist/test/models.test.jsx.map +1 -1
- package/dist/test/nullable.test.js +1 -1
- package/dist/test/nullable.test.js.map +1 -1
- package/dist/test/nullable.test.jsx +1 -1
- package/dist/test/nullable.test.jsx.map +1 -1
- package/dist/test/optionality.test.js +2 -2
- package/dist/test/optionality.test.js.map +1 -1
- package/dist/test/optionality.test.jsx +2 -2
- package/dist/test/optionality.test.jsx.map +1 -1
- package/dist/test/recursive.test.d.ts +2 -0
- package/dist/test/recursive.test.d.ts.map +1 -0
- package/dist/test/recursive.test.js +137 -0
- package/dist/test/recursive.test.js.map +1 -0
- package/dist/test/recursive.test.jsx +75 -0
- package/dist/test/recursive.test.jsx.map +1 -0
- package/dist/test/scalars.test.js +13 -13
- package/dist/test/scalars.test.js.map +1 -1
- package/dist/test/scalars.test.jsx +13 -13
- package/dist/test/scalars.test.jsx.map +1 -1
- package/dist/test/tuples.test.d.ts +2 -0
- package/dist/test/tuples.test.d.ts.map +1 -0
- package/dist/test/tuples.test.js +67 -0
- package/dist/test/tuples.test.js.map +1 -0
- package/dist/test/tuples.test.jsx +42 -0
- package/dist/test/tuples.test.jsx.map +1 -0
- package/dist/test/unions.test.js +1 -1
- package/dist/test/unions.test.js.map +1 -1
- package/dist/test/unions.test.jsx +1 -1
- package/dist/test/unions.test.jsx.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from "../utils.js";
|
|
3
|
+
describe('custom scalar emitter output', () => {
|
|
4
|
+
it('emits custom scalars extending string used in model', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
@maxLength(255)
|
|
8
|
+
scalar Email extends string;
|
|
9
|
+
|
|
10
|
+
scalar UserId extends string;
|
|
11
|
+
|
|
12
|
+
model User {
|
|
13
|
+
id: UserId;
|
|
14
|
+
email: Email;
|
|
15
|
+
name: string;
|
|
16
|
+
}
|
|
17
|
+
`);
|
|
18
|
+
const {
|
|
19
|
+
text
|
|
20
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
21
|
+
expect(text.trim()).toMatchSnapshot();
|
|
22
|
+
});
|
|
23
|
+
it('emits custom scalars extending numeric types', async () => {
|
|
24
|
+
const runner = await createEmitterTestRunner();
|
|
25
|
+
await runner.compile(`
|
|
26
|
+
@minValue(1)
|
|
27
|
+
scalar PositiveInt extends int32;
|
|
28
|
+
|
|
29
|
+
scalar Percentage extends float64;
|
|
30
|
+
|
|
31
|
+
model Stats {
|
|
32
|
+
count: PositiveInt;
|
|
33
|
+
ratio: Percentage;
|
|
34
|
+
}
|
|
35
|
+
`);
|
|
36
|
+
const {
|
|
37
|
+
text
|
|
38
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
39
|
+
expect(text.trim()).toMatchSnapshot();
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=custom-scalars.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","createEmitterTestRunner","runner","compile","text","program","host","readFile","trim","toMatchSnapshot"],"sources":["../../../test/emitter/custom-scalars.test.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,uBAAuB;AAEhCH,QAAQ,CAAC,8BAA8B,EAAE,MAAM;EAC7CE,EAAE,CAAC,qDAAqD,EAAE,YAAY;IACpE,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFT,EAAE,CAAC,8CAA8C,EAAE,YAAY;IAC7D,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from '../utils.jsx';
|
|
3
|
+
describe('custom scalar emitter output', () => {
|
|
4
|
+
it('emits custom scalars extending string used in model', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
@maxLength(255)
|
|
8
|
+
scalar Email extends string;
|
|
9
|
+
|
|
10
|
+
scalar UserId extends string;
|
|
11
|
+
|
|
12
|
+
model User {
|
|
13
|
+
id: UserId;
|
|
14
|
+
email: Email;
|
|
15
|
+
name: string;
|
|
16
|
+
}
|
|
17
|
+
`);
|
|
18
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
19
|
+
expect(text.trim()).toMatchSnapshot();
|
|
20
|
+
});
|
|
21
|
+
it('emits custom scalars extending numeric types', async () => {
|
|
22
|
+
const runner = await createEmitterTestRunner();
|
|
23
|
+
await runner.compile(`
|
|
24
|
+
@minValue(1)
|
|
25
|
+
scalar PositiveInt extends int32;
|
|
26
|
+
|
|
27
|
+
scalar Percentage extends float64;
|
|
28
|
+
|
|
29
|
+
model Stats {
|
|
30
|
+
count: PositiveInt;
|
|
31
|
+
ratio: Percentage;
|
|
32
|
+
}
|
|
33
|
+
`);
|
|
34
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
35
|
+
expect(text.trim()).toMatchSnapshot();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=custom-scalars.test.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-scalars.test.jsx","sourceRoot":"","sources":["../../../test/emitter/custom-scalars.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;KAWpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;KAUpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discriminated-unions.test.d.ts","sourceRoot":"","sources":["../../../test/emitter/discriminated-unions.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from "../utils.js";
|
|
3
|
+
describe('discriminated union emitter output', () => {
|
|
4
|
+
it('emits discriminated union from inheritance', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
@discriminator("kind")
|
|
8
|
+
model Shape {
|
|
9
|
+
kind: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
model Circle extends Shape {
|
|
13
|
+
kind: "circle";
|
|
14
|
+
radius: float64;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
model Square extends Shape {
|
|
18
|
+
kind: "square";
|
|
19
|
+
side: float64;
|
|
20
|
+
}
|
|
21
|
+
`);
|
|
22
|
+
const {
|
|
23
|
+
text
|
|
24
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
25
|
+
expect(text.trim()).toMatchSnapshot();
|
|
26
|
+
});
|
|
27
|
+
it('emits discriminated union with additional inherited properties', async () => {
|
|
28
|
+
const runner = await createEmitterTestRunner();
|
|
29
|
+
await runner.compile(`
|
|
30
|
+
@discriminator("type")
|
|
31
|
+
model Pet {
|
|
32
|
+
type: string;
|
|
33
|
+
name: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
model Cat extends Pet {
|
|
37
|
+
type: "cat";
|
|
38
|
+
indoor: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
model Dog extends Pet {
|
|
42
|
+
type: "dog";
|
|
43
|
+
trained: boolean;
|
|
44
|
+
}
|
|
45
|
+
`);
|
|
46
|
+
const {
|
|
47
|
+
text
|
|
48
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
49
|
+
expect(text.trim()).toMatchSnapshot();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=discriminated-unions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","createEmitterTestRunner","runner","compile","text","program","host","readFile","trim","toMatchSnapshot"],"sources":["../../../test/emitter/discriminated-unions.test.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,uBAAuB;AAEhCH,QAAQ,CAAC,oCAAoC,EAAE,MAAM;EACnDE,EAAE,CAAC,4CAA4C,EAAE,YAAY;IAC3D,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFT,EAAE,CAAC,gEAAgE,EAAE,YAAY;IAC/E,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from '../utils.jsx';
|
|
3
|
+
describe('discriminated union emitter output', () => {
|
|
4
|
+
it('emits discriminated union from inheritance', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
@discriminator("kind")
|
|
8
|
+
model Shape {
|
|
9
|
+
kind: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
model Circle extends Shape {
|
|
13
|
+
kind: "circle";
|
|
14
|
+
radius: float64;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
model Square extends Shape {
|
|
18
|
+
kind: "square";
|
|
19
|
+
side: float64;
|
|
20
|
+
}
|
|
21
|
+
`);
|
|
22
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
23
|
+
expect(text.trim()).toMatchSnapshot();
|
|
24
|
+
});
|
|
25
|
+
it('emits discriminated union with additional inherited properties', async () => {
|
|
26
|
+
const runner = await createEmitterTestRunner();
|
|
27
|
+
await runner.compile(`
|
|
28
|
+
@discriminator("type")
|
|
29
|
+
model Pet {
|
|
30
|
+
type: string;
|
|
31
|
+
name: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
model Cat extends Pet {
|
|
35
|
+
type: "cat";
|
|
36
|
+
indoor: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
model Dog extends Pet {
|
|
40
|
+
type: "dog";
|
|
41
|
+
trained: boolean;
|
|
42
|
+
}
|
|
43
|
+
`);
|
|
44
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
45
|
+
expect(text.trim()).toMatchSnapshot();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=discriminated-unions.test.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discriminated-unions.test.jsx","sourceRoot":"","sources":["../../../test/emitter/discriminated-unions.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;KAepB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;KAgBpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance.test.d.ts","sourceRoot":"","sources":["../../../test/emitter/inheritance.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from "../utils.js";
|
|
3
|
+
describe('inheritance emitter output', () => {
|
|
4
|
+
it('emits single inheritance with Intersect', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
model Animal {
|
|
8
|
+
name: string;
|
|
9
|
+
age: int32;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
model Dog extends Animal {
|
|
13
|
+
breed: string;
|
|
14
|
+
}
|
|
15
|
+
`);
|
|
16
|
+
const {
|
|
17
|
+
text
|
|
18
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
19
|
+
expect(text.trim()).toMatchSnapshot();
|
|
20
|
+
});
|
|
21
|
+
it('emits multi-level inheritance', async () => {
|
|
22
|
+
const runner = await createEmitterTestRunner();
|
|
23
|
+
await runner.compile(`
|
|
24
|
+
model Base {
|
|
25
|
+
id: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
model Middle extends Base {
|
|
29
|
+
name: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
model Leaf extends Middle {
|
|
33
|
+
extra: int32;
|
|
34
|
+
}
|
|
35
|
+
`);
|
|
36
|
+
const {
|
|
37
|
+
text
|
|
38
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
39
|
+
expect(text.trim()).toMatchSnapshot();
|
|
40
|
+
});
|
|
41
|
+
it('emits empty extension', async () => {
|
|
42
|
+
const runner = await createEmitterTestRunner();
|
|
43
|
+
await runner.compile(`
|
|
44
|
+
model Animal {
|
|
45
|
+
name: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
model EmptyDog extends Animal {}
|
|
49
|
+
`);
|
|
50
|
+
const {
|
|
51
|
+
text
|
|
52
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
53
|
+
expect(text.trim()).toMatchSnapshot();
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=inheritance.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","createEmitterTestRunner","runner","compile","text","program","host","readFile","trim","toMatchSnapshot"],"sources":["../../../test/emitter/inheritance.test.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,uBAAuB;AAEhCH,QAAQ,CAAC,4BAA4B,EAAE,MAAM;EAC3CE,EAAE,CAAC,yCAAyC,EAAE,YAAY;IACxD,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFT,EAAE,CAAC,+BAA+B,EAAE,YAAY;IAC9C,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFT,EAAE,CAAC,uBAAuB,EAAE,YAAY;IACtC,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from '../utils.jsx';
|
|
3
|
+
describe('inheritance emitter output', () => {
|
|
4
|
+
it('emits single inheritance with Intersect', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
model Animal {
|
|
8
|
+
name: string;
|
|
9
|
+
age: int32;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
model Dog extends Animal {
|
|
13
|
+
breed: string;
|
|
14
|
+
}
|
|
15
|
+
`);
|
|
16
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
17
|
+
expect(text.trim()).toMatchSnapshot();
|
|
18
|
+
});
|
|
19
|
+
it('emits multi-level inheritance', async () => {
|
|
20
|
+
const runner = await createEmitterTestRunner();
|
|
21
|
+
await runner.compile(`
|
|
22
|
+
model Base {
|
|
23
|
+
id: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
model Middle extends Base {
|
|
27
|
+
name: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
model Leaf extends Middle {
|
|
31
|
+
extra: int32;
|
|
32
|
+
}
|
|
33
|
+
`);
|
|
34
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
35
|
+
expect(text.trim()).toMatchSnapshot();
|
|
36
|
+
});
|
|
37
|
+
it('emits empty extension', async () => {
|
|
38
|
+
const runner = await createEmitterTestRunner();
|
|
39
|
+
await runner.compile(`
|
|
40
|
+
model Animal {
|
|
41
|
+
name: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
model EmptyDog extends Animal {}
|
|
45
|
+
`);
|
|
46
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
47
|
+
expect(text.trim()).toMatchSnapshot();
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=inheritance.test.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance.test.jsx","sourceRoot":"","sources":["../../../test/emitter/inheritance.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;KASpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;KAYpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;KAMpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recursive.test.d.ts","sourceRoot":"","sources":["../../../test/emitter/recursive.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from "../utils.js";
|
|
3
|
+
describe('recursive type emitter output', () => {
|
|
4
|
+
it('emits self-referencing tree node', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
model TreeNode {
|
|
8
|
+
value: string;
|
|
9
|
+
children: TreeNode[];
|
|
10
|
+
}
|
|
11
|
+
`);
|
|
12
|
+
const {
|
|
13
|
+
text
|
|
14
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
15
|
+
expect(text.trim()).toMatchSnapshot();
|
|
16
|
+
});
|
|
17
|
+
it('emits recursive model with non-recursive sibling', async () => {
|
|
18
|
+
const runner = await createEmitterTestRunner();
|
|
19
|
+
await runner.compile(`
|
|
20
|
+
model Category {
|
|
21
|
+
name: string;
|
|
22
|
+
subcategories: Category[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
model Product {
|
|
26
|
+
title: string;
|
|
27
|
+
category: Category;
|
|
28
|
+
}
|
|
29
|
+
`);
|
|
30
|
+
const {
|
|
31
|
+
text
|
|
32
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
33
|
+
expect(text.trim()).toMatchSnapshot();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=recursive.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","createEmitterTestRunner","runner","compile","text","program","host","readFile","trim","toMatchSnapshot"],"sources":["../../../test/emitter/recursive.test.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,uBAAuB;AAEhCH,QAAQ,CAAC,+BAA+B,EAAE,MAAM;EAC9CE,EAAE,CAAC,kCAAkC,EAAE,YAAY;IACjD,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;EAEFT,EAAE,CAAC,kDAAkD,EAAE,YAAY;IACjE,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from '../utils.jsx';
|
|
3
|
+
describe('recursive type emitter output', () => {
|
|
4
|
+
it('emits self-referencing tree node', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
model TreeNode {
|
|
8
|
+
value: string;
|
|
9
|
+
children: TreeNode[];
|
|
10
|
+
}
|
|
11
|
+
`);
|
|
12
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
13
|
+
expect(text.trim()).toMatchSnapshot();
|
|
14
|
+
});
|
|
15
|
+
it('emits recursive model with non-recursive sibling', async () => {
|
|
16
|
+
const runner = await createEmitterTestRunner();
|
|
17
|
+
await runner.compile(`
|
|
18
|
+
model Category {
|
|
19
|
+
name: string;
|
|
20
|
+
subcategories: Category[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
model Product {
|
|
24
|
+
title: string;
|
|
25
|
+
category: Category;
|
|
26
|
+
}
|
|
27
|
+
`);
|
|
28
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
29
|
+
expect(text.trim()).toMatchSnapshot();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=recursive.test.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recursive.test.jsx","sourceRoot":"","sources":["../../../test/emitter/recursive.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;KAKpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;KAUpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuples.test.d.ts","sourceRoot":"","sources":["../../../test/emitter/tuples.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from "../utils.js";
|
|
3
|
+
describe('tuple emitter output', () => {
|
|
4
|
+
it('emits model with tuple properties', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
model Coordinate {
|
|
8
|
+
point: [float64, float64];
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
model Response {
|
|
13
|
+
data: [string, int32, boolean];
|
|
14
|
+
}
|
|
15
|
+
`);
|
|
16
|
+
const {
|
|
17
|
+
text
|
|
18
|
+
} = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
19
|
+
expect(text.trim()).toMatchSnapshot();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=tuples.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","createEmitterTestRunner","runner","compile","text","program","host","readFile","trim","toMatchSnapshot"],"sources":["../../../test/emitter/tuples.test.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,uBAAuB;AAEhCH,QAAQ,CAAC,sBAAsB,EAAE,MAAM;EACrCE,EAAE,CAAC,mCAAmC,EAAE,YAAY;IAClD,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAMF,MAAM,CAACG,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,yCAAyC,CAAC;IAC9FR,MAAM,CAACK,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;EACvC,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createEmitterTestRunner } from '../utils.jsx';
|
|
3
|
+
describe('tuple emitter output', () => {
|
|
4
|
+
it('emits model with tuple properties', async () => {
|
|
5
|
+
const runner = await createEmitterTestRunner();
|
|
6
|
+
await runner.compile(`
|
|
7
|
+
model Coordinate {
|
|
8
|
+
point: [float64, float64];
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
model Response {
|
|
13
|
+
data: [string, int32, boolean];
|
|
14
|
+
}
|
|
15
|
+
`);
|
|
16
|
+
const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
|
|
17
|
+
expect(text.trim()).toMatchSnapshot();
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=tuples.test.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuples.test.jsx","sourceRoot":"","sources":["../../../test/emitter/tuples.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;KASpB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance.test.d.ts","sourceRoot":"","sources":["../../test/inheritance.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { render } from '@alloy-js/core';
|
|
3
|
+
import { createTSNamePolicy, SourceFile } from '@alloy-js/typescript';
|
|
4
|
+
import { Output } from '@typespec/emitter-framework';
|
|
5
|
+
import { describe, expect, it } from 'vitest';
|
|
6
|
+
import { TypeBoxSchema } from "../src/components/TypeBoxSchema.js";
|
|
7
|
+
import { TypeBoxSchemaDeclaration } from "../src/components/TypeBoxSchemaDeclaration.js";
|
|
8
|
+
import { typebox } from '../src/index.js';
|
|
9
|
+
import { createTestRunner, expectRender } from "./utils.js";
|
|
10
|
+
describe('inheritance', () => {
|
|
11
|
+
it('works with simple single inheritance', async () => {
|
|
12
|
+
const runner = await createTestRunner();
|
|
13
|
+
const {
|
|
14
|
+
Animal,
|
|
15
|
+
Dog
|
|
16
|
+
} = await runner.compile(`
|
|
17
|
+
@test model Animal {
|
|
18
|
+
name: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@test model Dog extends Animal {
|
|
22
|
+
breed: string;
|
|
23
|
+
}
|
|
24
|
+
`);
|
|
25
|
+
const template = _$createComponent(Output, {
|
|
26
|
+
get program() {
|
|
27
|
+
return runner.program;
|
|
28
|
+
},
|
|
29
|
+
get namePolicy() {
|
|
30
|
+
return createTSNamePolicy();
|
|
31
|
+
},
|
|
32
|
+
externals: [typebox],
|
|
33
|
+
get children() {
|
|
34
|
+
return _$createComponent(SourceFile, {
|
|
35
|
+
path: "test.ts",
|
|
36
|
+
get children() {
|
|
37
|
+
return [_$createComponent(TypeBoxSchemaDeclaration, {
|
|
38
|
+
type: Animal,
|
|
39
|
+
"export": true
|
|
40
|
+
}), '\n', _$createComponent(TypeBoxSchemaDeclaration, {
|
|
41
|
+
type: Dog,
|
|
42
|
+
"export": true
|
|
43
|
+
})];
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const output = render(template, {
|
|
49
|
+
insertFinalNewLine: false
|
|
50
|
+
});
|
|
51
|
+
const contents = output.contents[0].contents;
|
|
52
|
+
expect(contents).toContain('Type.Intersect([\n animal,');
|
|
53
|
+
expect(contents).toContain('breed: Type.String()');
|
|
54
|
+
});
|
|
55
|
+
it('model with no base still emits Type.Object', async () => {
|
|
56
|
+
const runner = await createTestRunner();
|
|
57
|
+
const {
|
|
58
|
+
Standalone
|
|
59
|
+
} = await runner.compile(`
|
|
60
|
+
@test model Standalone {
|
|
61
|
+
value: string;
|
|
62
|
+
}
|
|
63
|
+
`);
|
|
64
|
+
expectRender(runner.program, _$createComponent(TypeBoxSchema, {
|
|
65
|
+
type: Standalone
|
|
66
|
+
}), 'Type.Object({\n value: Type.String(),\n})');
|
|
67
|
+
});
|
|
68
|
+
it('works with multiple levels of inheritance', async () => {
|
|
69
|
+
const runner = await createTestRunner();
|
|
70
|
+
const {
|
|
71
|
+
Base,
|
|
72
|
+
Middle,
|
|
73
|
+
Leaf
|
|
74
|
+
} = await runner.compile(`
|
|
75
|
+
@test model Base {
|
|
76
|
+
id: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@test model Middle extends Base {
|
|
80
|
+
name: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@test model Leaf extends Middle {
|
|
84
|
+
extra: string;
|
|
85
|
+
}
|
|
86
|
+
`);
|
|
87
|
+
const template = _$createComponent(Output, {
|
|
88
|
+
get program() {
|
|
89
|
+
return runner.program;
|
|
90
|
+
},
|
|
91
|
+
get namePolicy() {
|
|
92
|
+
return createTSNamePolicy();
|
|
93
|
+
},
|
|
94
|
+
externals: [typebox],
|
|
95
|
+
get children() {
|
|
96
|
+
return _$createComponent(SourceFile, {
|
|
97
|
+
path: "test.ts",
|
|
98
|
+
get children() {
|
|
99
|
+
return [_$createComponent(TypeBoxSchemaDeclaration, {
|
|
100
|
+
type: Base,
|
|
101
|
+
"export": true
|
|
102
|
+
}), '\n', _$createComponent(TypeBoxSchemaDeclaration, {
|
|
103
|
+
type: Middle,
|
|
104
|
+
"export": true
|
|
105
|
+
}), '\n', _$createComponent(TypeBoxSchemaDeclaration, {
|
|
106
|
+
type: Leaf,
|
|
107
|
+
"export": true
|
|
108
|
+
})];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
const output = render(template, {
|
|
114
|
+
insertFinalNewLine: false
|
|
115
|
+
});
|
|
116
|
+
const contents = output.contents[0].contents;
|
|
117
|
+
expect(contents).toContain('Type.Intersect([\n base,');
|
|
118
|
+
expect(contents).toContain('Type.Intersect([\n middle,');
|
|
119
|
+
});
|
|
120
|
+
it('works with empty extension', async () => {
|
|
121
|
+
const runner = await createTestRunner();
|
|
122
|
+
const {
|
|
123
|
+
Animal,
|
|
124
|
+
EmptyDog
|
|
125
|
+
} = await runner.compile(`
|
|
126
|
+
@test model Animal {
|
|
127
|
+
name: string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@test model EmptyDog extends Animal {}
|
|
131
|
+
`);
|
|
132
|
+
const template = _$createComponent(Output, {
|
|
133
|
+
get program() {
|
|
134
|
+
return runner.program;
|
|
135
|
+
},
|
|
136
|
+
get namePolicy() {
|
|
137
|
+
return createTSNamePolicy();
|
|
138
|
+
},
|
|
139
|
+
externals: [typebox],
|
|
140
|
+
get children() {
|
|
141
|
+
return _$createComponent(SourceFile, {
|
|
142
|
+
path: "test.ts",
|
|
143
|
+
get children() {
|
|
144
|
+
return [_$createComponent(TypeBoxSchemaDeclaration, {
|
|
145
|
+
type: Animal,
|
|
146
|
+
"export": true
|
|
147
|
+
}), '\n', _$createComponent(TypeBoxSchemaDeclaration, {
|
|
148
|
+
type: EmptyDog,
|
|
149
|
+
"export": true
|
|
150
|
+
})];
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
const output = render(template, {
|
|
156
|
+
insertFinalNewLine: false
|
|
157
|
+
});
|
|
158
|
+
const contents = output.contents[0].contents;
|
|
159
|
+
expect(contents).toContain('Type.Intersect([animal, Type.Object({})]');
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
//# sourceMappingURL=inheritance.test.js.map
|