@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 @@
1
+ {"version":3,"names":["render","createTSNamePolicy","SourceFile","Output","describe","expect","it","TypeBoxSchema","TypeBoxSchemaDeclaration","typebox","createTestRunner","expectRender","runner","Animal","Dog","compile","template","_$createComponent","program","namePolicy","externals","children","path","type","output","insertFinalNewLine","contents","toContain","Standalone","Base","Middle","Leaf","EmptyDog"],"sources":["../../test/inheritance.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,92 @@
1
+ import { render } from '@alloy-js/core';
2
+ import { createTSNamePolicy, SourceFile } from '@alloy-js/typescript';
3
+ import { Output } from '@typespec/emitter-framework';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { TypeBoxSchema } from '../src/components/TypeBoxSchema.jsx';
6
+ import { TypeBoxSchemaDeclaration } from '../src/components/TypeBoxSchemaDeclaration.jsx';
7
+ import { typebox } from '../src/index.js';
8
+ import { createTestRunner, expectRender } from './utils.jsx';
9
+ describe('inheritance', () => {
10
+ it('works with simple single inheritance', async () => {
11
+ const runner = await createTestRunner();
12
+ const { Animal, Dog } = (await runner.compile(`
13
+ @test model Animal {
14
+ name: string;
15
+ }
16
+
17
+ @test model Dog extends Animal {
18
+ breed: string;
19
+ }
20
+ `));
21
+ const template = (<Output program={runner.program} namePolicy={createTSNamePolicy()} externals={[typebox]}>
22
+ <SourceFile path="test.ts">
23
+ <TypeBoxSchemaDeclaration type={Animal} export/>
24
+ {'\n'}
25
+ <TypeBoxSchemaDeclaration type={Dog} export/>
26
+ </SourceFile>
27
+ </Output>);
28
+ const output = render(template, { insertFinalNewLine: false });
29
+ const contents = output.contents[0].contents;
30
+ expect(contents).toContain('Type.Intersect([\n animal,');
31
+ expect(contents).toContain('breed: Type.String()');
32
+ });
33
+ it('model with no base still emits Type.Object', async () => {
34
+ const runner = await createTestRunner();
35
+ const { Standalone } = (await runner.compile(`
36
+ @test model Standalone {
37
+ value: string;
38
+ }
39
+ `));
40
+ expectRender(runner.program, <TypeBoxSchema type={Standalone}/>, 'Type.Object({\n value: Type.String(),\n})');
41
+ });
42
+ it('works with multiple levels of inheritance', async () => {
43
+ const runner = await createTestRunner();
44
+ const { Base, Middle, Leaf } = (await runner.compile(`
45
+ @test model Base {
46
+ id: string;
47
+ }
48
+
49
+ @test model Middle extends Base {
50
+ name: string;
51
+ }
52
+
53
+ @test model Leaf extends Middle {
54
+ extra: string;
55
+ }
56
+ `));
57
+ const template = (<Output program={runner.program} namePolicy={createTSNamePolicy()} externals={[typebox]}>
58
+ <SourceFile path="test.ts">
59
+ <TypeBoxSchemaDeclaration type={Base} export/>
60
+ {'\n'}
61
+ <TypeBoxSchemaDeclaration type={Middle} export/>
62
+ {'\n'}
63
+ <TypeBoxSchemaDeclaration type={Leaf} export/>
64
+ </SourceFile>
65
+ </Output>);
66
+ const output = render(template, { insertFinalNewLine: false });
67
+ const contents = output.contents[0].contents;
68
+ expect(contents).toContain('Type.Intersect([\n base,');
69
+ expect(contents).toContain('Type.Intersect([\n middle,');
70
+ });
71
+ it('works with empty extension', async () => {
72
+ const runner = await createTestRunner();
73
+ const { Animal, EmptyDog } = (await runner.compile(`
74
+ @test model Animal {
75
+ name: string;
76
+ }
77
+
78
+ @test model EmptyDog extends Animal {}
79
+ `));
80
+ const template = (<Output program={runner.program} namePolicy={createTSNamePolicy()} externals={[typebox]}>
81
+ <SourceFile path="test.ts">
82
+ <TypeBoxSchemaDeclaration type={Animal} export/>
83
+ {'\n'}
84
+ <TypeBoxSchemaDeclaration type={EmptyDog} export/>
85
+ </SourceFile>
86
+ </Output>);
87
+ const output = render(template, { insertFinalNewLine: false });
88
+ const contents = output.contents[0].contents;
89
+ expect(contents).toContain('Type.Intersect([animal, Type.Object({})]');
90
+ });
91
+ });
92
+ //# sourceMappingURL=inheritance.test.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inheritance.test.jsx","sourceRoot":"","sources":["../../test/inheritance.test.tsx"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ describe('models', () => {
31
31
  `);
32
32
  expectRender(runner.program, _$createComponent(TypeBoxSchema, {
33
33
  type: SimpleModel
34
- }), 'Type.Object({\n name: Type.String(),\n age: Type.Integer(),\n})');
34
+ }), 'Type.Object({\n name: Type.String(),\n age: Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n})');
35
35
  });
36
36
  it('works with optional properties', async () => {
37
37
  const runner = await createTestRunner();
@@ -45,7 +45,7 @@ describe('models', () => {
45
45
  `);
46
46
  expectRender(runner.program, _$createComponent(TypeBoxSchema, {
47
47
  type: OptModel
48
- }), 'Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.Integer()),\n})');
48
+ }), 'Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n })),\n})');
49
49
  });
50
50
  it('works with nested model reference', async () => {
51
51
  const runner = await createTestRunner();
@@ -90,6 +90,41 @@ describe('models', () => {
90
90
  const contents = output.contents[0].contents;
91
91
  expect(contents).toContain('child: child');
92
92
  });
93
+ it('works with inline anonymous model property', async () => {
94
+ const runner = await createTestRunner();
95
+ const {
96
+ Parent
97
+ } = await runner.compile(`
98
+ @test model Parent {
99
+ details: {
100
+ firstName: string;
101
+ lastName: string;
102
+ };
103
+ }
104
+ `);
105
+ expectRender(runner.program, _$createComponent(TypeBoxSchema, {
106
+ type: Parent
107
+ }), 'Type.Object({\n details: Type.Object({\n firstName: Type.String(),\n lastName: Type.String(),\n }),\n})');
108
+ });
109
+ it('works with spread properties', async () => {
110
+ const runner = await createTestRunner();
111
+ const {
112
+ Extended
113
+ } = await runner.compile(`
114
+ model Base {
115
+ name: string;
116
+ age: int32;
117
+ }
118
+
119
+ @test model Extended {
120
+ ...Base;
121
+ email: string;
122
+ }
123
+ `);
124
+ expectRender(runner.program, _$createComponent(TypeBoxSchema, {
125
+ type: Extended
126
+ }), 'Type.Object({\n name: Type.String(),\n age: Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n email: Type.String(),\n})');
127
+ });
93
128
  it('works with literal property types', async () => {
94
129
  const runner = await createTestRunner();
95
130
  const {
@@ -1 +1 @@
1
- {"version":3,"names":["render","createTSNamePolicy","SourceFile","Output","describe","expect","it","TypeBoxSchema","TypeBoxSchemaDeclaration","typebox","createTestRunner","expectRender","runner","EmptyModel","compile","program","_$createComponent","type","SimpleModel","OptModel","Child","Parent","template","namePolicy","externals","children","path","output","insertFinalNewLine","contents","toContain","LitModel"],"sources":["../../test/models.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["render","createTSNamePolicy","SourceFile","Output","describe","expect","it","TypeBoxSchema","TypeBoxSchemaDeclaration","typebox","createTestRunner","expectRender","runner","EmptyModel","compile","program","_$createComponent","type","SimpleModel","OptModel","Child","Parent","template","namePolicy","externals","children","path","output","insertFinalNewLine","contents","toContain","Extended","LitModel"],"sources":["../../test/models.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -22,7 +22,7 @@ describe('models', () => {
22
22
  age: int32;
23
23
  }
24
24
  `));
25
- expectRender(runner.program, <TypeBoxSchema type={SimpleModel}/>, 'Type.Object({\n name: Type.String(),\n age: Type.Integer(),\n})');
25
+ expectRender(runner.program, <TypeBoxSchema type={SimpleModel}/>, 'Type.Object({\n name: Type.String(),\n age: Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n})');
26
26
  });
27
27
  it('works with optional properties', async () => {
28
28
  const runner = await createTestRunner();
@@ -32,7 +32,7 @@ describe('models', () => {
32
32
  optional?: int32;
33
33
  }
34
34
  `));
35
- expectRender(runner.program, <TypeBoxSchema type={OptModel}/>, 'Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.Integer()),\n})');
35
+ expectRender(runner.program, <TypeBoxSchema type={OptModel}/>, 'Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n })),\n})');
36
36
  });
37
37
  it('works with nested model reference', async () => {
38
38
  const runner = await createTestRunner();
@@ -56,6 +56,33 @@ describe('models', () => {
56
56
  const contents = output.contents[0].contents;
57
57
  expect(contents).toContain('child: child');
58
58
  });
59
+ it('works with inline anonymous model property', async () => {
60
+ const runner = await createTestRunner();
61
+ const { Parent } = (await runner.compile(`
62
+ @test model Parent {
63
+ details: {
64
+ firstName: string;
65
+ lastName: string;
66
+ };
67
+ }
68
+ `));
69
+ expectRender(runner.program, <TypeBoxSchema type={Parent}/>, 'Type.Object({\n details: Type.Object({\n firstName: Type.String(),\n lastName: Type.String(),\n }),\n})');
70
+ });
71
+ it('works with spread properties', async () => {
72
+ const runner = await createTestRunner();
73
+ const { Extended } = (await runner.compile(`
74
+ model Base {
75
+ name: string;
76
+ age: int32;
77
+ }
78
+
79
+ @test model Extended {
80
+ ...Base;
81
+ email: string;
82
+ }
83
+ `));
84
+ expectRender(runner.program, <TypeBoxSchema type={Extended}/>, 'Type.Object({\n name: Type.String(),\n age: Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n email: Type.String(),\n})');
85
+ });
59
86
  it('works with literal property types', async () => {
60
87
  const runner = await createTestRunner();
61
88
  const { LitModel } = (await runner.compile(`
@@ -1 +1 @@
1
- {"version":3,"file":"models.test.jsx","sourceRoot":"","sources":["../../test/models.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;KAE5C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAG,EAAE,iBAAiB,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;KAK7C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,EAAG,EACpC,mEAAmE,CACpE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;KAK1C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAG,EACjC,2FAA2F,CAC5F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;KAQ/C,CAAC,CAA0B,CAAC;QAE7B,MAAM,QAAQ,GAAG,CACf,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CACtF;QAAA,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CACxB;UAAA,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAC7C;UAAA,CAAC,IAAI,CACL;UAAA,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAChD;QAAA,EAAE,UAAU,CACd;MAAA,EAAE,MAAM,CAAC,CACV,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAuB,CAAC,QAAQ,CAAC;QACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;KAM1C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAG,EACjC,+GAA+G,CAChH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"models.test.jsx","sourceRoot":"","sources":["../../test/models.test.tsx"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ describe('nullable', () => {
27
27
  `);
28
28
  expectRender(runner.program, _$createComponent(TypeBoxSchema, {
29
29
  type: NullInt
30
- }), 'Type.Object({\n count: Type.Union([Type.Integer(), Type.Null()]),\n})');
30
+ }), 'Type.Object({\n count: Type.Union([\n Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n Type.Null()\n ]),\n})');
31
31
  });
32
32
  it('works with optional nullable property', async () => {
33
33
  const runner = await createTestRunner();
@@ -1 +1 @@
1
- {"version":3,"names":["describe","it","TypeBoxSchema","createTestRunner","expectRender","runner","NullModel","compile","program","_$createComponent","type","NullInt","OptNull"],"sources":["../../test/nullable.test.tsx"],"sourcesContent":[null],"mappings":";AACA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,QAAQ;AACrC,SAASC,aAAa;AACtB,SAASC,gBAAgB,EAAEC,YAAY;AAEvCJ,QAAQ,CAAC,UAAU,EAAE,MAAM;EACzBC,EAAE,CAAC,qCAAqC,EAAE,YAAY;IACpD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEG;IAAU,CAAC,GAAI,MAAMD,MAAM,CAACE,OAAO,CAAC;AAChD;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEJ;IAAS,IAC9B,sEACF,CAAC;EACH,CAAC,CAAC;EAEFL,EAAE,CAAC,sCAAsC,EAAE,YAAY;IACrD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEQ;IAAQ,CAAC,GAAI,MAAMN,MAAM,CAACE,OAAO,CAAC;AAC9C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEC;IAAO,IAC5B,wEACF,CAAC;EACH,CAAC,CAAC;EAEFV,EAAE,CAAC,uCAAuC,EAAE,YAAY;IACtD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAES;IAAQ,CAAC,GAAI,MAAMP,MAAM,CAACE,OAAO,CAAC;AAC9C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEE;IAAO,IAC5B,sFACF,CAAC;EACH,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["describe","it","TypeBoxSchema","createTestRunner","expectRender","runner","NullModel","compile","program","_$createComponent","type","NullInt","OptNull"],"sources":["../../test/nullable.test.tsx"],"sourcesContent":[null],"mappings":";AACA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,QAAQ;AACrC,SAASC,aAAa;AACtB,SAASC,gBAAgB,EAAEC,YAAY;AAEvCJ,QAAQ,CAAC,UAAU,EAAE,MAAM;EACzBC,EAAE,CAAC,qCAAqC,EAAE,YAAY;IACpD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEG;IAAU,CAAC,GAAI,MAAMD,MAAM,CAACE,OAAO,CAAC;AAChD;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEJ;IAAS,IAC9B,sEACF,CAAC;EACH,CAAC,CAAC;EAEFL,EAAE,CAAC,sCAAsC,EAAE,YAAY;IACrD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEQ;IAAQ,CAAC,GAAI,MAAMN,MAAM,CAACE,OAAO,CAAC;AAC9C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEC;IAAO,IAC5B,uJACF,CAAC;EACH,CAAC,CAAC;EAEFV,EAAE,CAAC,uCAAuC,EAAE,YAAY;IACtD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAES;IAAQ,CAAC,GAAI,MAAMP,MAAM,CAACE,OAAO,CAAC;AAC9C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEE;IAAO,IAC5B,sFACF,CAAC;EACH,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -18,7 +18,7 @@ describe('nullable', () => {
18
18
  count: int32 | null;
19
19
  }
20
20
  `));
21
- expectRender(runner.program, <TypeBoxSchema type={NullInt}/>, 'Type.Object({\n count: Type.Union([Type.Integer(), Type.Null()]),\n})');
21
+ expectRender(runner.program, <TypeBoxSchema type={NullInt}/>, 'Type.Object({\n count: Type.Union([\n Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n Type.Null()\n ]),\n})');
22
22
  });
23
23
  it('works with optional nullable property', async () => {
24
24
  const runner = await createTestRunner();
@@ -1 +1 @@
1
- {"version":3,"file":"nullable.test.jsx","sourceRoot":"","sources":["../../test/nullable.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,UAAU,EAAE,GAAG,EAAE;IACxB,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,sEAAsE,CACvE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIzC,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAG,EAChC,wEAAwE,CACzE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIzC,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAG,EAChC,sFAAsF,CACvF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"nullable.test.jsx","sourceRoot":"","sources":["../../test/nullable.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,UAAU,EAAE,GAAG,EAAE;IACxB,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,sEAAsE,CACvE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIzC,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAG,EAChC,uJAAuJ,CACxJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIzC,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAG,EAChC,sFAAsF,CACvF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -27,7 +27,7 @@ describe('optionality', () => {
27
27
  `);
28
28
  expectRender(runner.program, _$createComponent(TypeBoxSchema, {
29
29
  type: OptInt
30
- }), 'Type.Object({\n count: Type.Optional(Type.Integer()),\n})');
30
+ }), 'Type.Object({\n count: Type.Optional(Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n })),\n})');
31
31
  });
32
32
  it('does not wrap required properties', async () => {
33
33
  const runner = await createTestRunner();
@@ -55,7 +55,7 @@ describe('optionality', () => {
55
55
  `);
56
56
  expectRender(runner.program, _$createComponent(TypeBoxSchema, {
57
57
  type: MixedModel
58
- }), 'Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.Integer()),\n alsoRequired: Type.Boolean(),\n})');
58
+ }), 'Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n })),\n alsoRequired: Type.Boolean(),\n})');
59
59
  });
60
60
  });
61
61
  //# sourceMappingURL=optionality.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["describe","it","TypeBoxSchema","createTestRunner","expectRender","runner","OptModel","compile","program","_$createComponent","type","OptInt","ReqModel","MixedModel"],"sources":["../../test/optionality.test.tsx"],"sourcesContent":[null],"mappings":";AACA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,QAAQ;AACrC,SAASC,aAAa;AACtB,SAASC,gBAAgB,EAAEC,YAAY;AAEvCJ,QAAQ,CAAC,aAAa,EAAE,MAAM;EAC5BC,EAAE,CAAC,0CAA0C,EAAE,YAAY;IACzD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEG;IAAS,CAAC,GAAI,MAAMD,MAAM,CAACE,OAAO,CAAC;AAC/C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEJ;IAAQ,IAC7B,0DACF,CAAC;EACH,CAAC,CAAC;EAEFL,EAAE,CAAC,2CAA2C,EAAE,YAAY;IAC1D,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEQ;IAAO,CAAC,GAAI,MAAMN,MAAM,CAACE,OAAO,CAAC;AAC7C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEC;IAAM,IAC3B,4DACF,CAAC;EACH,CAAC,CAAC;EAEFV,EAAE,CAAC,mCAAmC,EAAE,YAAY;IAClD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAES;IAAS,CAAC,GAAI,MAAMP,MAAM,CAACE,OAAO,CAAC;AAC/C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEE;IAAQ,IAC7B,2CACF,CAAC;EACH,CAAC,CAAC;EAEFX,EAAE,CAAC,sCAAsC,EAAE,YAAY;IACrD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEU;IAAW,CAAC,GAAI,MAAMR,MAAM,CAACE,OAAO,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEG;IAAU,IAC/B,4HACF,CAAC;EACH,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["describe","it","TypeBoxSchema","createTestRunner","expectRender","runner","OptModel","compile","program","_$createComponent","type","OptInt","ReqModel","MixedModel"],"sources":["../../test/optionality.test.tsx"],"sourcesContent":[null],"mappings":";AACA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,QAAQ;AACrC,SAASC,aAAa;AACtB,SAASC,gBAAgB,EAAEC,YAAY;AAEvCJ,QAAQ,CAAC,aAAa,EAAE,MAAM;EAC5BC,EAAE,CAAC,0CAA0C,EAAE,YAAY;IACzD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEG;IAAS,CAAC,GAAI,MAAMD,MAAM,CAACE,OAAO,CAAC;AAC/C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEJ;IAAQ,IAC7B,0DACF,CAAC;EACH,CAAC,CAAC;EAEFL,EAAE,CAAC,2CAA2C,EAAE,YAAY;IAC1D,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEQ;IAAO,CAAC,GAAI,MAAMN,MAAM,CAACE,OAAO,CAAC;AAC7C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEC;IAAM,IAC3B,sHACF,CAAC;EACH,CAAC,CAAC;EAEFV,EAAE,CAAC,mCAAmC,EAAE,YAAY;IAClD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAES;IAAS,CAAC,GAAI,MAAMP,MAAM,CAACE,OAAO,CAAC;AAC/C;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEE;IAAQ,IAC7B,2CACF,CAAC;EACH,CAAC,CAAC;EAEFX,EAAE,CAAC,sCAAsC,EAAE,YAAY;IACrD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEU;IAAW,CAAC,GAAI,MAAMR,MAAM,CAACE,OAAO,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK,CAA2B;IAE5BH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAACQ,IAAI,EAAEG;IAAU,IAC/B,sLACF,CAAC;EACH,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -18,7 +18,7 @@ describe('optionality', () => {
18
18
  count?: int32;
19
19
  }
20
20
  `));
21
- expectRender(runner.program, <TypeBoxSchema type={OptInt}/>, 'Type.Object({\n count: Type.Optional(Type.Integer()),\n})');
21
+ expectRender(runner.program, <TypeBoxSchema type={OptInt}/>, 'Type.Object({\n count: Type.Optional(Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n })),\n})');
22
22
  });
23
23
  it('does not wrap required properties', async () => {
24
24
  const runner = await createTestRunner();
@@ -38,7 +38,7 @@ describe('optionality', () => {
38
38
  alsoRequired: boolean;
39
39
  }
40
40
  `));
41
- expectRender(runner.program, <TypeBoxSchema type={MixedModel}/>, 'Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.Integer()),\n alsoRequired: Type.Boolean(),\n})');
41
+ expectRender(runner.program, <TypeBoxSchema type={MixedModel}/>, 'Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n })),\n alsoRequired: Type.Boolean(),\n})');
42
42
  });
43
43
  });
44
44
  //# sourceMappingURL=optionality.test.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"optionality.test.jsx","sourceRoot":"","sources":["../../test/optionality.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,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAI1C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAG,EACjC,0DAA0D,CAC3D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIxC,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAG,EAC/B,4DAA4D,CAC7D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAI1C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAG,EACjC,2CAA2C,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;KAM5C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAG,EACnC,4HAA4H,CAC7H,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"optionality.test.jsx","sourceRoot":"","sources":["../../test/optionality.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,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAI1C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAG,EACjC,0DAA0D,CAC3D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIxC,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAG,EAC/B,sHAAsH,CACvH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAI1C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAG,EACjC,2CAA2C,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;KAM5C,CAAC,CAA0B,CAAC;QAE7B,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAG,EACnC,sLAAsL,CACvL,CAAC;IACJ,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/recursive.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
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('recursive types', () => {
11
+ it('wraps self-referencing model in Type.Recursive', async () => {
12
+ const runner = await createTestRunner();
13
+ const {
14
+ TreeNode
15
+ } = await runner.compile(`
16
+ @test model TreeNode {
17
+ value: string;
18
+ children: TreeNode[];
19
+ }
20
+ `);
21
+ const template = _$createComponent(Output, {
22
+ get program() {
23
+ return runner.program;
24
+ },
25
+ get namePolicy() {
26
+ return createTSNamePolicy();
27
+ },
28
+ externals: [typebox],
29
+ get children() {
30
+ return _$createComponent(SourceFile, {
31
+ path: "test.ts",
32
+ get children() {
33
+ return _$createComponent(TypeBoxSchemaDeclaration, {
34
+ type: TreeNode,
35
+ "export": true
36
+ });
37
+ }
38
+ });
39
+ }
40
+ });
41
+ const output = render(template, {
42
+ insertFinalNewLine: false
43
+ });
44
+ const contents = output.contents[0].contents;
45
+ expect(contents).toContain('Type.Recursive(This =>');
46
+ expect(contents).toContain('Type.Array(This)');
47
+ expect(contents).toContain('value: Type.String()');
48
+ });
49
+ it('handles optional self-reference', async () => {
50
+ const runner = await createTestRunner();
51
+ const {
52
+ LinkedNode
53
+ } = await runner.compile(`
54
+ @test model LinkedNode {
55
+ value: string;
56
+ next?: LinkedNode;
57
+ }
58
+ `);
59
+ const template = _$createComponent(Output, {
60
+ get program() {
61
+ return runner.program;
62
+ },
63
+ get namePolicy() {
64
+ return createTSNamePolicy();
65
+ },
66
+ externals: [typebox],
67
+ get children() {
68
+ return _$createComponent(SourceFile, {
69
+ path: "test.ts",
70
+ get children() {
71
+ return _$createComponent(TypeBoxSchemaDeclaration, {
72
+ type: LinkedNode,
73
+ "export": true
74
+ });
75
+ }
76
+ });
77
+ }
78
+ });
79
+ const output = render(template, {
80
+ insertFinalNewLine: false
81
+ });
82
+ const contents = output.contents[0].contents;
83
+ expect(contents).toContain('Type.Recursive(This =>');
84
+ expect(contents).toContain('Type.Optional(This)');
85
+ });
86
+ it('does not wrap non-recursive model', async () => {
87
+ const runner = await createTestRunner();
88
+ const {
89
+ Simple
90
+ } = await runner.compile(`
91
+ @test model Simple {
92
+ name: string;
93
+ age: int32;
94
+ }
95
+ `);
96
+ expectRender(runner.program, _$createComponent(TypeBoxSchema, {
97
+ type: Simple
98
+ }), 'Type.Object({\n name: Type.String(),\n age: Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n})');
99
+ });
100
+ it('handles self-referencing through Record', async () => {
101
+ const runner = await createTestRunner();
102
+ const {
103
+ JsonValue
104
+ } = await runner.compile(`
105
+ @test model JsonValue {
106
+ nested: Record<JsonValue>;
107
+ }
108
+ `);
109
+ const template = _$createComponent(Output, {
110
+ get program() {
111
+ return runner.program;
112
+ },
113
+ get namePolicy() {
114
+ return createTSNamePolicy();
115
+ },
116
+ externals: [typebox],
117
+ get children() {
118
+ return _$createComponent(SourceFile, {
119
+ path: "test.ts",
120
+ get children() {
121
+ return _$createComponent(TypeBoxSchemaDeclaration, {
122
+ type: JsonValue,
123
+ "export": true
124
+ });
125
+ }
126
+ });
127
+ }
128
+ });
129
+ const output = render(template, {
130
+ insertFinalNewLine: false
131
+ });
132
+ const contents = output.contents[0].contents;
133
+ expect(contents).toContain('Type.Recursive(This =>');
134
+ expect(contents).toContain('Type.Record(');
135
+ });
136
+ });
137
+ //# sourceMappingURL=recursive.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["render","createTSNamePolicy","SourceFile","Output","describe","expect","it","TypeBoxSchema","TypeBoxSchemaDeclaration","typebox","createTestRunner","expectRender","runner","TreeNode","compile","template","_$createComponent","program","namePolicy","externals","children","path","type","output","insertFinalNewLine","contents","toContain","LinkedNode","Simple","JsonValue"],"sources":["../../test/recursive.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ import { render } from '@alloy-js/core';
2
+ import { createTSNamePolicy, SourceFile } from '@alloy-js/typescript';
3
+ import { Output } from '@typespec/emitter-framework';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { TypeBoxSchema } from '../src/components/TypeBoxSchema.jsx';
6
+ import { TypeBoxSchemaDeclaration } from '../src/components/TypeBoxSchemaDeclaration.jsx';
7
+ import { typebox } from '../src/index.js';
8
+ import { createTestRunner, expectRender } from './utils.jsx';
9
+ describe('recursive types', () => {
10
+ it('wraps self-referencing model in Type.Recursive', async () => {
11
+ const runner = await createTestRunner();
12
+ const { TreeNode } = (await runner.compile(`
13
+ @test model TreeNode {
14
+ value: string;
15
+ children: TreeNode[];
16
+ }
17
+ `));
18
+ const template = (<Output program={runner.program} namePolicy={createTSNamePolicy()} externals={[typebox]}>
19
+ <SourceFile path="test.ts">
20
+ <TypeBoxSchemaDeclaration type={TreeNode} export/>
21
+ </SourceFile>
22
+ </Output>);
23
+ const output = render(template, { insertFinalNewLine: false });
24
+ const contents = output.contents[0].contents;
25
+ expect(contents).toContain('Type.Recursive(This =>');
26
+ expect(contents).toContain('Type.Array(This)');
27
+ expect(contents).toContain('value: Type.String()');
28
+ });
29
+ it('handles optional self-reference', async () => {
30
+ const runner = await createTestRunner();
31
+ const { LinkedNode } = (await runner.compile(`
32
+ @test model LinkedNode {
33
+ value: string;
34
+ next?: LinkedNode;
35
+ }
36
+ `));
37
+ const template = (<Output program={runner.program} namePolicy={createTSNamePolicy()} externals={[typebox]}>
38
+ <SourceFile path="test.ts">
39
+ <TypeBoxSchemaDeclaration type={LinkedNode} export/>
40
+ </SourceFile>
41
+ </Output>);
42
+ const output = render(template, { insertFinalNewLine: false });
43
+ const contents = output.contents[0].contents;
44
+ expect(contents).toContain('Type.Recursive(This =>');
45
+ expect(contents).toContain('Type.Optional(This)');
46
+ });
47
+ it('does not wrap non-recursive model', async () => {
48
+ const runner = await createTestRunner();
49
+ const { Simple } = (await runner.compile(`
50
+ @test model Simple {
51
+ name: string;
52
+ age: int32;
53
+ }
54
+ `));
55
+ expectRender(runner.program, <TypeBoxSchema type={Simple}/>, 'Type.Object({\n name: Type.String(),\n age: Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n})');
56
+ });
57
+ it('handles self-referencing through Record', async () => {
58
+ const runner = await createTestRunner();
59
+ const { JsonValue } = (await runner.compile(`
60
+ @test model JsonValue {
61
+ nested: Record<JsonValue>;
62
+ }
63
+ `));
64
+ const template = (<Output program={runner.program} namePolicy={createTSNamePolicy()} externals={[typebox]}>
65
+ <SourceFile path="test.ts">
66
+ <TypeBoxSchemaDeclaration type={JsonValue} export/>
67
+ </SourceFile>
68
+ </Output>);
69
+ const output = render(template, { insertFinalNewLine: false });
70
+ const contents = output.contents[0].contents;
71
+ expect(contents).toContain('Type.Recursive(This =>');
72
+ expect(contents).toContain('Type.Record(');
73
+ });
74
+ });
75
+ //# sourceMappingURL=recursive.test.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recursive.test.jsx","sourceRoot":"","sources":["../../test/recursive.test.tsx"],"names":[],"mappings":"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"}