@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.
Files changed (107) hide show
  1. package/README.md +70 -0
  2. package/dist/src/components/TypeBoxSchema.d.ts.map +1 -1
  3. package/dist/src/components/TypeBoxSchema.js +10 -5
  4. package/dist/src/components/TypeBoxSchema.js.map +1 -1
  5. package/dist/src/components/TypeBoxSchema.jsx +10 -5
  6. package/dist/src/components/TypeBoxSchema.jsx.map +1 -1
  7. package/dist/src/typeboxBaseSchema.d.ts +3 -2
  8. package/dist/src/typeboxBaseSchema.d.ts.map +1 -1
  9. package/dist/src/typeboxBaseSchema.js +207 -74
  10. package/dist/src/typeboxBaseSchema.js.map +1 -1
  11. package/dist/src/typeboxBaseSchema.jsx +148 -52
  12. package/dist/src/typeboxBaseSchema.jsx.map +1 -1
  13. package/dist/src/typeboxConstraints.d.ts +10 -0
  14. package/dist/src/typeboxConstraints.d.ts.map +1 -0
  15. package/dist/src/typeboxConstraints.js +308 -0
  16. package/dist/src/typeboxConstraints.js.map +1 -0
  17. package/dist/src/typeboxConstraints.jsx +246 -0
  18. package/dist/src/typeboxConstraints.jsx.map +1 -0
  19. package/dist/test/arrays.test.js +1 -1
  20. package/dist/test/arrays.test.js.map +1 -1
  21. package/dist/test/arrays.test.jsx +1 -1
  22. package/dist/test/arrays.test.jsx.map +1 -1
  23. package/dist/test/constraints.test.d.ts +2 -0
  24. package/dist/test/constraints.test.d.ts.map +1 -0
  25. package/dist/test/constraints.test.js +414 -0
  26. package/dist/test/constraints.test.js.map +1 -0
  27. package/dist/test/constraints.test.jsx +279 -0
  28. package/dist/test/constraints.test.jsx.map +1 -0
  29. package/dist/test/dictionaries.test.js +15 -1
  30. package/dist/test/dictionaries.test.js.map +1 -1
  31. package/dist/test/dictionaries.test.jsx +11 -1
  32. package/dist/test/dictionaries.test.jsx.map +1 -1
  33. package/dist/test/discriminated-unions.test.d.ts +2 -0
  34. package/dist/test/discriminated-unions.test.d.ts.map +1 -0
  35. package/dist/test/discriminated-unions.test.js +156 -0
  36. package/dist/test/discriminated-unions.test.js.map +1 -0
  37. package/dist/test/discriminated-unions.test.jsx +105 -0
  38. package/dist/test/discriminated-unions.test.jsx.map +1 -0
  39. package/dist/test/emitter/custom-scalars.test.d.ts +2 -0
  40. package/dist/test/emitter/custom-scalars.test.d.ts.map +1 -0
  41. package/dist/test/emitter/custom-scalars.test.js +42 -0
  42. package/dist/test/emitter/custom-scalars.test.js.map +1 -0
  43. package/dist/test/emitter/custom-scalars.test.jsx +38 -0
  44. package/dist/test/emitter/custom-scalars.test.jsx.map +1 -0
  45. package/dist/test/emitter/discriminated-unions.test.d.ts +2 -0
  46. package/dist/test/emitter/discriminated-unions.test.d.ts.map +1 -0
  47. package/dist/test/emitter/discriminated-unions.test.js +52 -0
  48. package/dist/test/emitter/discriminated-unions.test.js.map +1 -0
  49. package/dist/test/emitter/discriminated-unions.test.jsx +48 -0
  50. package/dist/test/emitter/discriminated-unions.test.jsx.map +1 -0
  51. package/dist/test/emitter/inheritance.test.d.ts +2 -0
  52. package/dist/test/emitter/inheritance.test.d.ts.map +1 -0
  53. package/dist/test/emitter/inheritance.test.js +56 -0
  54. package/dist/test/emitter/inheritance.test.js.map +1 -0
  55. package/dist/test/emitter/inheritance.test.jsx +50 -0
  56. package/dist/test/emitter/inheritance.test.jsx.map +1 -0
  57. package/dist/test/emitter/recursive.test.d.ts +2 -0
  58. package/dist/test/emitter/recursive.test.d.ts.map +1 -0
  59. package/dist/test/emitter/recursive.test.js +36 -0
  60. package/dist/test/emitter/recursive.test.js.map +1 -0
  61. package/dist/test/emitter/recursive.test.jsx +32 -0
  62. package/dist/test/emitter/recursive.test.jsx.map +1 -0
  63. package/dist/test/emitter/tuples.test.d.ts +2 -0
  64. package/dist/test/emitter/tuples.test.d.ts.map +1 -0
  65. package/dist/test/emitter/tuples.test.js +22 -0
  66. package/dist/test/emitter/tuples.test.js.map +1 -0
  67. package/dist/test/emitter/tuples.test.jsx +20 -0
  68. package/dist/test/emitter/tuples.test.jsx.map +1 -0
  69. package/dist/test/inheritance.test.d.ts +2 -0
  70. package/dist/test/inheritance.test.d.ts.map +1 -0
  71. package/dist/test/inheritance.test.js +162 -0
  72. package/dist/test/inheritance.test.js.map +1 -0
  73. package/dist/test/inheritance.test.jsx +92 -0
  74. package/dist/test/inheritance.test.jsx.map +1 -0
  75. package/dist/test/models.test.js +37 -2
  76. package/dist/test/models.test.js.map +1 -1
  77. package/dist/test/models.test.jsx +29 -2
  78. package/dist/test/models.test.jsx.map +1 -1
  79. package/dist/test/nullable.test.js +1 -1
  80. package/dist/test/nullable.test.js.map +1 -1
  81. package/dist/test/nullable.test.jsx +1 -1
  82. package/dist/test/nullable.test.jsx.map +1 -1
  83. package/dist/test/optionality.test.js +2 -2
  84. package/dist/test/optionality.test.js.map +1 -1
  85. package/dist/test/optionality.test.jsx +2 -2
  86. package/dist/test/optionality.test.jsx.map +1 -1
  87. package/dist/test/recursive.test.d.ts +2 -0
  88. package/dist/test/recursive.test.d.ts.map +1 -0
  89. package/dist/test/recursive.test.js +137 -0
  90. package/dist/test/recursive.test.js.map +1 -0
  91. package/dist/test/recursive.test.jsx +75 -0
  92. package/dist/test/recursive.test.jsx.map +1 -0
  93. package/dist/test/scalars.test.js +13 -13
  94. package/dist/test/scalars.test.js.map +1 -1
  95. package/dist/test/scalars.test.jsx +13 -13
  96. package/dist/test/scalars.test.jsx.map +1 -1
  97. package/dist/test/tuples.test.d.ts +2 -0
  98. package/dist/test/tuples.test.d.ts.map +1 -0
  99. package/dist/test/tuples.test.js +67 -0
  100. package/dist/test/tuples.test.js.map +1 -0
  101. package/dist/test/tuples.test.jsx +42 -0
  102. package/dist/test/tuples.test.jsx.map +1 -0
  103. package/dist/test/unions.test.js +1 -1
  104. package/dist/test/unions.test.js.map +1 -1
  105. package/dist/test/unions.test.jsx +1 -1
  106. package/dist/test/unions.test.jsx.map +1 -1
  107. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=discriminated-unions.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=inheritance.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=recursive.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tuples.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=inheritance.test.d.ts.map
@@ -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