@typespec-dev/emitter-typebox 0.1.0 → 0.3.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 (113) 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 +4 -3
  4. package/dist/src/components/TypeBoxSchema.js.map +1 -1
  5. package/dist/src/components/TypeBoxSchema.jsx +4 -3
  6. package/dist/src/components/TypeBoxSchema.jsx.map +1 -1
  7. package/dist/src/components/TypeBoxSchemaDeclaration.d.ts.map +1 -1
  8. package/dist/src/components/TypeBoxSchemaDeclaration.js +20 -4
  9. package/dist/src/components/TypeBoxSchemaDeclaration.js.map +1 -1
  10. package/dist/src/components/TypeBoxSchemaDeclaration.jsx +22 -6
  11. package/dist/src/components/TypeBoxSchemaDeclaration.jsx.map +1 -1
  12. package/dist/src/emitter.d.ts.map +1 -1
  13. package/dist/src/emitter.js +1 -2
  14. package/dist/src/emitter.js.map +1 -1
  15. package/dist/src/emitter.jsx +1 -2
  16. package/dist/src/emitter.jsx.map +1 -1
  17. package/dist/src/external-packages/typebox.d.ts +1 -0
  18. package/dist/src/external-packages/typebox.d.ts.map +1 -1
  19. package/dist/src/external-packages/typebox.js +1 -1
  20. package/dist/src/external-packages/typebox.js.map +1 -1
  21. package/dist/src/typeboxBaseSchema.d.ts +2 -2
  22. package/dist/src/typeboxBaseSchema.d.ts.map +1 -1
  23. package/dist/src/typeboxBaseSchema.js +219 -34
  24. package/dist/src/typeboxBaseSchema.js.map +1 -1
  25. package/dist/src/typeboxBaseSchema.jsx +121 -28
  26. package/dist/src/typeboxBaseSchema.jsx.map +1 -1
  27. package/dist/src/typeboxConstraints.d.ts +10 -0
  28. package/dist/src/typeboxConstraints.d.ts.map +1 -0
  29. package/dist/src/typeboxConstraints.js +308 -0
  30. package/dist/src/typeboxConstraints.js.map +1 -0
  31. package/dist/src/typeboxConstraints.jsx +246 -0
  32. package/dist/src/typeboxConstraints.jsx.map +1 -0
  33. package/dist/test/arrays.test.d.ts +2 -0
  34. package/dist/test/arrays.test.d.ts.map +1 -0
  35. package/dist/test/arrays.test.js +65 -0
  36. package/dist/test/arrays.test.js.map +1 -0
  37. package/dist/test/arrays.test.jsx +42 -0
  38. package/dist/test/arrays.test.jsx.map +1 -0
  39. package/dist/test/constraints.test.d.ts +2 -0
  40. package/dist/test/constraints.test.d.ts.map +1 -0
  41. package/dist/test/constraints.test.js +414 -0
  42. package/dist/test/constraints.test.js.map +1 -0
  43. package/dist/test/constraints.test.jsx +279 -0
  44. package/dist/test/constraints.test.jsx.map +1 -0
  45. package/dist/test/dictionaries.test.d.ts +2 -0
  46. package/dist/test/dictionaries.test.d.ts.map +1 -0
  47. package/dist/test/dictionaries.test.js +50 -0
  48. package/dist/test/dictionaries.test.js.map +1 -0
  49. package/dist/test/dictionaries.test.jsx +33 -0
  50. package/dist/test/dictionaries.test.jsx.map +1 -0
  51. package/dist/test/emitter/enums.test.d.ts +2 -0
  52. package/dist/test/emitter/enums.test.d.ts.map +1 -0
  53. package/dist/test/emitter/enums.test.js +48 -0
  54. package/dist/test/emitter/enums.test.js.map +1 -0
  55. package/dist/test/emitter/enums.test.jsx +42 -0
  56. package/dist/test/emitter/enums.test.jsx.map +1 -0
  57. package/dist/test/emitter/models.test.d.ts +2 -0
  58. package/dist/test/emitter/models.test.d.ts.map +1 -0
  59. package/dist/test/emitter/models.test.js +36 -0
  60. package/dist/test/emitter/models.test.js.map +1 -0
  61. package/dist/test/emitter/models.test.jsx +32 -0
  62. package/dist/test/emitter/models.test.jsx.map +1 -0
  63. package/dist/test/emitter/records.test.d.ts +2 -0
  64. package/dist/test/emitter/records.test.d.ts.map +1 -0
  65. package/dist/test/emitter/records.test.js +18 -0
  66. package/dist/test/emitter/records.test.js.map +1 -0
  67. package/dist/test/emitter/records.test.jsx +16 -0
  68. package/dist/test/emitter/records.test.jsx.map +1 -0
  69. package/dist/test/emitter/unions.test.d.ts +2 -0
  70. package/dist/test/emitter/unions.test.d.ts.map +1 -0
  71. package/dist/test/emitter/unions.test.js +37 -0
  72. package/dist/test/emitter/unions.test.js.map +1 -0
  73. package/dist/test/emitter/unions.test.jsx +33 -0
  74. package/dist/test/emitter/unions.test.jsx.map +1 -0
  75. package/dist/test/enums.test.d.ts +2 -0
  76. package/dist/test/enums.test.d.ts.map +1 -0
  77. package/dist/test/enums.test.js +53 -0
  78. package/dist/test/enums.test.js.map +1 -0
  79. package/dist/test/enums.test.jsx +40 -0
  80. package/dist/test/enums.test.jsx.map +1 -0
  81. package/dist/test/models.test.d.ts +2 -0
  82. package/dist/test/models.test.d.ts.map +1 -0
  83. package/dist/test/models.test.js +109 -0
  84. package/dist/test/models.test.js.map +1 -0
  85. package/dist/test/models.test.jsx +71 -0
  86. package/dist/test/models.test.jsx.map +1 -0
  87. package/dist/test/nullable.test.d.ts +2 -0
  88. package/dist/test/nullable.test.d.ts.map +1 -0
  89. package/dist/test/nullable.test.js +46 -0
  90. package/dist/test/nullable.test.js.map +1 -0
  91. package/dist/test/nullable.test.jsx +33 -0
  92. package/dist/test/nullable.test.jsx.map +1 -0
  93. package/dist/test/optionality.test.d.ts +2 -0
  94. package/dist/test/optionality.test.d.ts.map +1 -0
  95. package/dist/test/optionality.test.js +61 -0
  96. package/dist/test/optionality.test.js.map +1 -0
  97. package/dist/test/optionality.test.jsx +44 -0
  98. package/dist/test/optionality.test.jsx.map +1 -0
  99. package/dist/test/scalars.test.js +13 -13
  100. package/dist/test/scalars.test.js.map +1 -1
  101. package/dist/test/scalars.test.jsx +13 -13
  102. package/dist/test/scalars.test.jsx.map +1 -1
  103. package/dist/test/unions.test.d.ts +2 -0
  104. package/dist/test/unions.test.d.ts.map +1 -0
  105. package/dist/test/unions.test.js +51 -0
  106. package/dist/test/unions.test.js.map +1 -0
  107. package/dist/test/unions.test.jsx +38 -0
  108. package/dist/test/unions.test.jsx.map +1 -0
  109. package/dist/test/utils.js +4 -1
  110. package/dist/test/utils.js.map +1 -1
  111. package/dist/test/utils.jsx +2 -2
  112. package/dist/test/utils.jsx.map +1 -1
  113. package/package.json +1 -1
@@ -0,0 +1,279 @@
1
+ import { describe, it } from 'vitest';
2
+ import { TypeBoxSchema } from '../src/components/TypeBoxSchema.jsx';
3
+ import { createTestRunner, expectRender } from './utils.jsx';
4
+ describe('string constraints', () => {
5
+ it('applies minLength and maxLength', async () => {
6
+ const runner = await createTestRunner();
7
+ const { nameProp } = (await runner.compile(`
8
+ model Test {
9
+ @test @minLength(1) @maxLength(100) nameProp: string;
10
+ }
11
+ `));
12
+ expectRender(runner.program, <TypeBoxSchema type={nameProp}/>, 'Type.String({\n minLength: 1,\n maxLength: 100\n})');
13
+ });
14
+ it('applies pattern', async () => {
15
+ const runner = await createTestRunner();
16
+ const { codeProp } = (await runner.compile(`
17
+ model Test {
18
+ @test @pattern("^[a-z]+$") codeProp: string;
19
+ }
20
+ `));
21
+ expectRender(runner.program, <TypeBoxSchema type={codeProp}/>, 'Type.String({\n pattern: "^[a-z]+$"\n})');
22
+ });
23
+ it('applies format', async () => {
24
+ const runner = await createTestRunner();
25
+ const { emailProp } = (await runner.compile(`
26
+ model Test {
27
+ @test @format("email") emailProp: string;
28
+ }
29
+ `));
30
+ expectRender(runner.program, <TypeBoxSchema type={emailProp}/>, 'Type.String({\n format: "email"\n})');
31
+ });
32
+ it('escapes backslashes in pattern', async () => {
33
+ const runner = await createTestRunner();
34
+ const { phoneProp } = (await runner.compile(`
35
+ model Test {
36
+ @test @pattern("^\\\\d{3}-\\\\d{4}$") phoneProp: string;
37
+ }
38
+ `));
39
+ expectRender(runner.program, <TypeBoxSchema type={phoneProp}/>, 'Type.String({\n pattern: "^\\\\d{3}-\\\\d{4}$"\n})');
40
+ });
41
+ it('applies minLength only', async () => {
42
+ const runner = await createTestRunner();
43
+ const { tagProp } = (await runner.compile(`
44
+ model Test {
45
+ @test @minLength(1) tagProp: string;
46
+ }
47
+ `));
48
+ expectRender(runner.program, <TypeBoxSchema type={tagProp}/>, 'Type.String({\n minLength: 1\n})');
49
+ });
50
+ });
51
+ describe('numeric constraints', () => {
52
+ it('applies minValue and maxValue', async () => {
53
+ const runner = await createTestRunner();
54
+ const { scoreProp } = (await runner.compile(`
55
+ model Test {
56
+ @test @minValue(0) @maxValue(100) scoreProp: int32;
57
+ }
58
+ `));
59
+ expectRender(runner.program, <TypeBoxSchema type={scoreProp}/>, 'Type.Integer({\n minimum: 0,\n maximum: 100\n})');
60
+ });
61
+ it('applies exclusive bounds', async () => {
62
+ const runner = await createTestRunner();
63
+ const { priceProp } = (await runner.compile(`
64
+ model Test {
65
+ @test @minValueExclusive(0) priceProp: float64;
66
+ }
67
+ `));
68
+ expectRender(runner.program, <TypeBoxSchema type={priceProp}/>, 'Type.Number({\n exclusiveMinimum: 0\n})');
69
+ });
70
+ it('applies maxValueExclusive', async () => {
71
+ const runner = await createTestRunner();
72
+ const { rateProp } = (await runner.compile(`
73
+ model Test {
74
+ @test @maxValueExclusive(1) rateProp: float64;
75
+ }
76
+ `));
77
+ expectRender(runner.program, <TypeBoxSchema type={rateProp}/>, 'Type.Number({\n exclusiveMaximum: 1\n})');
78
+ });
79
+ it('narrows intrinsic bounds with user constraints', async () => {
80
+ const runner = await createTestRunner();
81
+ const { ageProp } = (await runner.compile(`
82
+ model Test {
83
+ @test @minValue(0) @maxValue(150) ageProp: int32;
84
+ }
85
+ `));
86
+ expectRender(runner.program, <TypeBoxSchema type={ageProp}/>, 'Type.Integer({\n minimum: 0,\n maximum: 150\n})');
87
+ });
88
+ });
89
+ describe('intrinsic numeric bounds', () => {
90
+ it('applies int8 bounds', async () => {
91
+ const runner = await createTestRunner();
92
+ const { val } = (await runner.compile(`
93
+ model Test {
94
+ @test val: int8;
95
+ }
96
+ `));
97
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Integer({\n minimum: -128,\n maximum: 127\n})');
98
+ });
99
+ it('applies uint8 bounds', async () => {
100
+ const runner = await createTestRunner();
101
+ const { val } = (await runner.compile(`
102
+ model Test {
103
+ @test val: uint8;
104
+ }
105
+ `));
106
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Integer({\n minimum: 0,\n maximum: 255\n})');
107
+ });
108
+ it('applies int16 bounds', async () => {
109
+ const runner = await createTestRunner();
110
+ const { val } = (await runner.compile(`
111
+ model Test {
112
+ @test val: int16;
113
+ }
114
+ `));
115
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Integer({\n minimum: -32768,\n maximum: 32767\n})');
116
+ });
117
+ it('applies uint16 bounds', async () => {
118
+ const runner = await createTestRunner();
119
+ const { val } = (await runner.compile(`
120
+ model Test {
121
+ @test val: uint16;
122
+ }
123
+ `));
124
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Integer({\n minimum: 0,\n maximum: 65535\n})');
125
+ });
126
+ it('applies int32 bounds', async () => {
127
+ const runner = await createTestRunner();
128
+ const { val } = (await runner.compile(`
129
+ model Test {
130
+ @test val: int32;
131
+ }
132
+ `));
133
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n})');
134
+ });
135
+ it('applies uint32 bounds', async () => {
136
+ const runner = await createTestRunner();
137
+ const { val } = (await runner.compile(`
138
+ model Test {
139
+ @test val: uint32;
140
+ }
141
+ `));
142
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Integer({\n minimum: 0,\n maximum: 4294967295\n})');
143
+ });
144
+ it('applies safeint bounds', async () => {
145
+ const runner = await createTestRunner();
146
+ const { val } = (await runner.compile(`
147
+ model Test {
148
+ @test val: safeint;
149
+ }
150
+ `));
151
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Integer({\n minimum: -9007199254740991,\n maximum: 9007199254740991\n})');
152
+ });
153
+ it('applies float32 bounds', async () => {
154
+ const runner = await createTestRunner();
155
+ const { val } = (await runner.compile(`
156
+ model Test {
157
+ @test val: float32;
158
+ }
159
+ `));
160
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Number({\n minimum: -3.4028235e+38,\n maximum: 3.4028235e+38\n})');
161
+ });
162
+ it('does not apply bounds to float64', async () => {
163
+ const runner = await createTestRunner();
164
+ const { val } = (await runner.compile(`
165
+ model Test {
166
+ @test val: float64;
167
+ }
168
+ `));
169
+ expectRender(runner.program, <TypeBoxSchema type={val.type}/>, 'Type.Number()');
170
+ });
171
+ });
172
+ describe('array constraints', () => {
173
+ it('applies minItems and maxItems', async () => {
174
+ const runner = await createTestRunner();
175
+ const { itemsProp } = (await runner.compile(`
176
+ model Test {
177
+ @test @minItems(1) @maxItems(10) itemsProp: string[];
178
+ }
179
+ `));
180
+ expectRender(runner.program, <TypeBoxSchema type={itemsProp}/>, 'Type.Array(\n Type.String(),\n {\n minItems: 1,\n maxItems: 10\n }\n)');
181
+ });
182
+ it('applies minItems only', async () => {
183
+ const runner = await createTestRunner();
184
+ const { tagsProp } = (await runner.compile(`
185
+ model Test {
186
+ @test @minItems(1) tagsProp: string[];
187
+ }
188
+ `));
189
+ expectRender(runner.program, <TypeBoxSchema type={tagsProp}/>, 'Type.Array(\n Type.String(),\n {\n minItems: 1\n }\n)');
190
+ });
191
+ });
192
+ describe('description', () => {
193
+ it('applies @doc to string property', async () => {
194
+ const runner = await createTestRunner();
195
+ const { nameProp } = (await runner.compile(`
196
+ model Test {
197
+ @test @doc("A person's name") nameProp: string;
198
+ }
199
+ `));
200
+ expectRender(runner.program, <TypeBoxSchema type={nameProp}/>, 'Type.String({\n description: "A person\'s name"\n})');
201
+ });
202
+ it('escapes double quotes in description', async () => {
203
+ const runner = await createTestRunner();
204
+ const { valProp } = (await runner.compile(`
205
+ model Test {
206
+ @test @doc("A \\"quoted\\" value") valProp: string;
207
+ }
208
+ `));
209
+ expectRender(runner.program, <TypeBoxSchema type={valProp}/>, 'Type.String({\n description: "A \\"quoted\\" value"\n})');
210
+ });
211
+ it('applies @doc to numeric property', async () => {
212
+ const runner = await createTestRunner();
213
+ const { ageProp } = (await runner.compile(`
214
+ model Test {
215
+ @test @doc("Age in years") ageProp: float64;
216
+ }
217
+ `));
218
+ expectRender(runner.program, <TypeBoxSchema type={ageProp}/>, 'Type.Number({\n description: "Age in years"\n})');
219
+ });
220
+ });
221
+ describe('defaults', () => {
222
+ it('applies string default', async () => {
223
+ const runner = await createTestRunner();
224
+ const { greetingProp } = (await runner.compile(`
225
+ model Test {
226
+ @test greetingProp?: string = "hello";
227
+ }
228
+ `));
229
+ expectRender(runner.program, <TypeBoxSchema type={greetingProp}/>, 'Type.String({\n default: "hello"\n})');
230
+ });
231
+ it('applies numeric default', async () => {
232
+ const runner = await createTestRunner();
233
+ const { limitProp } = (await runner.compile(`
234
+ model Test {
235
+ @test limitProp?: float64 = 10;
236
+ }
237
+ `));
238
+ expectRender(runner.program, <TypeBoxSchema type={limitProp}/>, 'Type.Number({\n default: 10\n})');
239
+ });
240
+ it('applies boolean default', async () => {
241
+ const runner = await createTestRunner();
242
+ const { activeProp } = (await runner.compile(`
243
+ model Test {
244
+ @test activeProp?: boolean = true;
245
+ }
246
+ `));
247
+ expectRender(runner.program, <TypeBoxSchema type={activeProp}/>, 'Type.Boolean({\n default: true\n})');
248
+ });
249
+ });
250
+ describe('combined constraints', () => {
251
+ it('combines string constraints with description', async () => {
252
+ const runner = await createTestRunner();
253
+ const { nameProp } = (await runner.compile(`
254
+ model Test {
255
+ @test @minLength(1) @maxLength(50) @doc("User name") nameProp: string;
256
+ }
257
+ `));
258
+ expectRender(runner.program, <TypeBoxSchema type={nameProp}/>, 'Type.String({\n minLength: 1,\n maxLength: 50,\n description: "User name"\n})');
259
+ });
260
+ it('combines numeric constraints with default', async () => {
261
+ const runner = await createTestRunner();
262
+ const { limitProp } = (await runner.compile(`
263
+ model Test {
264
+ @test @minValue(1) @maxValue(100) limitProp?: float64 = 10;
265
+ }
266
+ `));
267
+ expectRender(runner.program, <TypeBoxSchema type={limitProp}/>, 'Type.Number({\n minimum: 1,\n maximum: 100,\n default: 10\n})');
268
+ });
269
+ it('combines format with description', async () => {
270
+ const runner = await createTestRunner();
271
+ const { emailProp } = (await runner.compile(`
272
+ model Test {
273
+ @test @format("email") @doc("Email address") emailProp: string;
274
+ }
275
+ `));
276
+ expectRender(runner.program, <TypeBoxSchema type={emailProp}/>, 'Type.String({\n format: "email",\n description: "Email address"\n})');
277
+ });
278
+ });
279
+ //# sourceMappingURL=constraints.test.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.test.jsx","sourceRoot":"","sources":["../../test/constraints.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dictionaries.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionaries.test.d.ts","sourceRoot":"","sources":["../../test/dictionaries.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import { describe, it } from 'vitest';
3
+ import { TypeBoxSchema } from "../src/components/TypeBoxSchema.js";
4
+ import { createTestRunner, expectRender } from "./utils.js";
5
+ describe('dictionaries', () => {
6
+ it('works with Record of string values', async () => {
7
+ const runner = await createTestRunner();
8
+ const {
9
+ dictProp
10
+ } = await runner.compile(`
11
+ model Test {
12
+ @test dictProp: Record<string>;
13
+ }
14
+ `);
15
+ expectRender(runner.program, _$createComponent(TypeBoxSchema, {
16
+ get type() {
17
+ return dictProp.type;
18
+ }
19
+ }), 'Type.Record(Type.String(), Type.String())');
20
+ });
21
+ it('works with Record of integer values', async () => {
22
+ const runner = await createTestRunner();
23
+ const {
24
+ intDict
25
+ } = await runner.compile(`
26
+ model Test {
27
+ @test intDict: Record<int32>;
28
+ }
29
+ `);
30
+ expectRender(runner.program, _$createComponent(TypeBoxSchema, {
31
+ get type() {
32
+ return intDict.type;
33
+ }
34
+ }), 'Type.Record(\n Type.String(),\n Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n })\n)');
35
+ });
36
+ it('works with record property in model', async () => {
37
+ const runner = await createTestRunner();
38
+ const {
39
+ DictModel
40
+ } = await runner.compile(`
41
+ @test model DictModel {
42
+ tags: Record<string>;
43
+ }
44
+ `);
45
+ expectRender(runner.program, _$createComponent(TypeBoxSchema, {
46
+ type: DictModel
47
+ }), 'Type.Object({\n tags: Type.Record(Type.String(), Type.String()),\n})');
48
+ });
49
+ });
50
+ //# sourceMappingURL=dictionaries.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","it","TypeBoxSchema","createTestRunner","expectRender","runner","dictProp","compile","program","_$createComponent","type","intDict","DictModel"],"sources":["../../test/dictionaries.test.tsx"],"sourcesContent":[null],"mappings":";AACA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,QAAQ;AACrC,SAASC,aAAa;AACtB,SAASC,gBAAgB,EAAEC,YAAY;AAEvCJ,QAAQ,CAAC,cAAc,EAAE,MAAM;EAC7BC,EAAE,CAAC,oCAAoC,EAAE,YAAY;IACnD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEG;IAAS,CAAC,GAAI,MAAMD,MAAM,CAACE,OAAO,CAAC;AAC/C;AACA;AACA;AACA,KAAK,CAAmC;IAEpCH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAAA,IAACQ,IAAIA,CAAA;QAAA,OAAEJ,QAAQ,CAACI,IAAI;MAAA;IAAA,IAClC,2CACF,CAAC;EACH,CAAC,CAAC;EAEFT,EAAE,CAAC,qCAAqC,EAAE,YAAY;IACpD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEQ;IAAQ,CAAC,GAAI,MAAMN,MAAM,CAACE,OAAO,CAAC;AAC9C;AACA;AACA;AACA,KAAK,CAAmC;IAEpCH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAAA,IAACQ,IAAIA,CAAA;QAAA,OAAEC,OAAO,CAACD,IAAI;MAAA;IAAA,IACjC,+GACF,CAAC;EACH,CAAC,CAAC;EAEFT,EAAE,CAAC,qCAAqC,EAAE,YAAY;IACpD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAES;IAAU,CAAC,GAAI,MAAMP,MAAM,CAACE,OAAO,CAAC;AAChD;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEE;IAAS,IAC9B,uEACF,CAAC;EACH,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ import { describe, it } from 'vitest';
2
+ import { TypeBoxSchema } from '../src/components/TypeBoxSchema.jsx';
3
+ import { createTestRunner, expectRender } from './utils.jsx';
4
+ describe('dictionaries', () => {
5
+ it('works with Record of string values', async () => {
6
+ const runner = await createTestRunner();
7
+ const { dictProp } = (await runner.compile(`
8
+ model Test {
9
+ @test dictProp: Record<string>;
10
+ }
11
+ `));
12
+ expectRender(runner.program, <TypeBoxSchema type={dictProp.type}/>, 'Type.Record(Type.String(), Type.String())');
13
+ });
14
+ it('works with Record of integer values', async () => {
15
+ const runner = await createTestRunner();
16
+ const { intDict } = (await runner.compile(`
17
+ model Test {
18
+ @test intDict: Record<int32>;
19
+ }
20
+ `));
21
+ expectRender(runner.program, <TypeBoxSchema type={intDict.type}/>, 'Type.Record(\n Type.String(),\n Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n })\n)');
22
+ });
23
+ it('works with record property in model', async () => {
24
+ const runner = await createTestRunner();
25
+ const { DictModel } = (await runner.compile(`
26
+ @test model DictModel {
27
+ tags: Record<string>;
28
+ }
29
+ `));
30
+ expectRender(runner.program, <TypeBoxSchema type={DictModel}/>, 'Type.Object({\n tags: Type.Record(Type.String(), Type.String()),\n})');
31
+ });
32
+ });
33
+ //# sourceMappingURL=dictionaries.test.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionaries.test.jsx","sourceRoot":"","sources":["../../test/dictionaries.test.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAI1C,CAAC,CAAkC,CAAC;QAErC,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG,EACtC,2CAA2C,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIzC,CAAC,CAAkC,CAAC;QAErC,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAG,EACrC,+GAA+G,CAChH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAI3C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,EAAG,EAClC,uEAAuE,CACxE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=enums.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.test.d.ts","sourceRoot":"","sources":["../../../test/emitter/enums.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createEmitterTestRunner } from "../utils.js";
3
+ describe('enum emitter output', () => {
4
+ it('emits string enum', async () => {
5
+ const runner = await createEmitterTestRunner();
6
+ await runner.compile(`
7
+ enum Direction {
8
+ Up,
9
+ Down,
10
+ Left,
11
+ Right,
12
+ }
13
+ `);
14
+ const {
15
+ text
16
+ } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
17
+ expect(text.trim()).toMatchSnapshot();
18
+ });
19
+ it('emits numeric enum', async () => {
20
+ const runner = await createEmitterTestRunner();
21
+ await runner.compile(`
22
+ enum Priority {
23
+ Low: 0,
24
+ Medium: 1,
25
+ High: 2,
26
+ }
27
+ `);
28
+ const {
29
+ text
30
+ } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
31
+ expect(text.trim()).toMatchSnapshot();
32
+ });
33
+ it('emits string enum with custom values', async () => {
34
+ const runner = await createEmitterTestRunner();
35
+ await runner.compile(`
36
+ enum Color {
37
+ Red: "red",
38
+ Green: "green",
39
+ Blue: "blue",
40
+ }
41
+ `);
42
+ const {
43
+ text
44
+ } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
45
+ expect(text.trim()).toMatchSnapshot();
46
+ });
47
+ });
48
+ //# sourceMappingURL=enums.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/enums.test.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,uBAAuB;AAEhCH,QAAQ,CAAC,qBAAqB,EAAE,MAAM;EACpCE,EAAE,CAAC,mBAAmB,EAAE,YAAY;IAClC,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;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,oBAAoB,EAAE,YAAY;IACnC,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;EAEFT,EAAE,CAAC,sCAAsC,EAAE,YAAY;IACrD,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,42 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createEmitterTestRunner } from '../utils.jsx';
3
+ describe('enum emitter output', () => {
4
+ it('emits string enum', async () => {
5
+ const runner = await createEmitterTestRunner();
6
+ await runner.compile(`
7
+ enum Direction {
8
+ Up,
9
+ Down,
10
+ Left,
11
+ Right,
12
+ }
13
+ `);
14
+ const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
15
+ expect(text.trim()).toMatchSnapshot();
16
+ });
17
+ it('emits numeric enum', async () => {
18
+ const runner = await createEmitterTestRunner();
19
+ await runner.compile(`
20
+ enum Priority {
21
+ Low: 0,
22
+ Medium: 1,
23
+ High: 2,
24
+ }
25
+ `);
26
+ const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
27
+ expect(text.trim()).toMatchSnapshot();
28
+ });
29
+ it('emits string enum with custom values', async () => {
30
+ const runner = await createEmitterTestRunner();
31
+ await runner.compile(`
32
+ enum Color {
33
+ Red: "red",
34
+ Green: "green",
35
+ Blue: "blue",
36
+ }
37
+ `);
38
+ const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
39
+ expect(text.trim()).toMatchSnapshot();
40
+ });
41
+ });
42
+ //# sourceMappingURL=enums.test.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.test.jsx","sourceRoot":"","sources":["../../../test/emitter/enums.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,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;KAOpB,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,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,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;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,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=models.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.test.d.ts","sourceRoot":"","sources":["../../../test/emitter/models.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createEmitterTestRunner } from "../utils.js";
3
+ describe('model emitter output', () => {
4
+ it('emits models with arrays, optional props, and nested references', async () => {
5
+ const runner = await createEmitterTestRunner();
6
+ await runner.compile(`
7
+ model Address {
8
+ street: string;
9
+ city: string;
10
+ zip?: string;
11
+ }
12
+
13
+ model User {
14
+ name: string;
15
+ age?: int32;
16
+ tags: string[];
17
+ address: Address;
18
+ }
19
+ `);
20
+ const {
21
+ text
22
+ } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
23
+ expect(text.trim()).toMatchSnapshot();
24
+ });
25
+ it('emits empty model', async () => {
26
+ const runner = await createEmitterTestRunner();
27
+ await runner.compile(`
28
+ model Empty {}
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=models.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/models.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,iEAAiE,EAAE,YAAY;IAChF,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,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,mBAAmB,EAAE,YAAY;IAClC,MAAME,MAAM,GAAG,MAAMD,uBAAuB,CAAC,CAAC;IAC9C,MAAMC,MAAM,CAACC,OAAO,CAAC;AACzB;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('model emitter output', () => {
4
+ it('emits models with arrays, optional props, and nested references', async () => {
5
+ const runner = await createEmitterTestRunner();
6
+ await runner.compile(`
7
+ model Address {
8
+ street: string;
9
+ city: string;
10
+ zip?: string;
11
+ }
12
+
13
+ model User {
14
+ name: string;
15
+ age?: int32;
16
+ tags: string[];
17
+ address: Address;
18
+ }
19
+ `);
20
+ const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
21
+ expect(text.trim()).toMatchSnapshot();
22
+ });
23
+ it('emits empty model', async () => {
24
+ const runner = await createEmitterTestRunner();
25
+ await runner.compile(`
26
+ model Empty {}
27
+ `);
28
+ const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
29
+ expect(text.trim()).toMatchSnapshot();
30
+ });
31
+ });
32
+ //# sourceMappingURL=models.test.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.test.jsx","sourceRoot":"","sources":["../../../test/emitter/models.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,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;KAapB,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,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,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;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=records.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.test.d.ts","sourceRoot":"","sources":["../../../test/emitter/records.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createEmitterTestRunner } from "../utils.js";
3
+ describe('record/dictionary emitter output', () => {
4
+ it('emits models with record properties', async () => {
5
+ const runner = await createEmitterTestRunner();
6
+ await runner.compile(`
7
+ model Config {
8
+ settings: Record<string>;
9
+ counts: Record<int32>;
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
+ });
18
+ //# sourceMappingURL=records.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/records.test.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,uBAAuB;AAEhCH,QAAQ,CAAC,kCAAkC,EAAE,MAAM;EACjDE,EAAE,CAAC,qCAAqC,EAAE,YAAY;IACpD,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;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createEmitterTestRunner } from '../utils.jsx';
3
+ describe('record/dictionary emitter output', () => {
4
+ it('emits models with record properties', async () => {
5
+ const runner = await createEmitterTestRunner();
6
+ await runner.compile(`
7
+ model Config {
8
+ settings: Record<string>;
9
+ counts: Record<int32>;
10
+ }
11
+ `);
12
+ const { text } = await runner.program.host.readFile('@typespec-dev/emitter-typebox/models.ts');
13
+ expect(text.trim()).toMatchSnapshot();
14
+ });
15
+ });
16
+ //# sourceMappingURL=records.test.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.test.jsx","sourceRoot":"","sources":["../../../test/emitter/records.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,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,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;AACL,CAAC,CAAC,CAAC"}