@typespec-dev/emitter-typebox 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/components/TypeBoxSchema.d.ts.map +1 -1
- package/dist/src/components/TypeBoxSchema.js +6 -2
- package/dist/src/components/TypeBoxSchema.js.map +1 -1
- package/dist/src/components/TypeBoxSchema.jsx +6 -2
- package/dist/src/components/TypeBoxSchema.jsx.map +1 -1
- package/dist/src/typeboxBaseSchema.d.ts +2 -1
- package/dist/src/typeboxBaseSchema.d.ts.map +1 -1
- package/dist/src/typeboxBaseSchema.js +139 -41
- package/dist/src/typeboxBaseSchema.js.map +1 -1
- package/dist/src/typeboxBaseSchema.jsx +112 -24
- package/dist/src/typeboxBaseSchema.jsx.map +1 -1
- package/dist/test/dictionaries.test.js +14 -0
- package/dist/test/dictionaries.test.js.map +1 -1
- package/dist/test/dictionaries.test.jsx +10 -0
- package/dist/test/dictionaries.test.jsx.map +1 -1
- package/dist/test/discriminated-unions.test.d.ts +2 -0
- package/dist/test/discriminated-unions.test.d.ts.map +1 -0
- package/dist/test/discriminated-unions.test.js +156 -0
- package/dist/test/discriminated-unions.test.js.map +1 -0
- package/dist/test/discriminated-unions.test.jsx +105 -0
- package/dist/test/discriminated-unions.test.jsx.map +1 -0
- package/dist/test/emitter/custom-scalars.test.d.ts +2 -0
- package/dist/test/emitter/custom-scalars.test.d.ts.map +1 -0
- package/dist/test/emitter/custom-scalars.test.js +42 -0
- package/dist/test/emitter/custom-scalars.test.js.map +1 -0
- package/dist/test/emitter/custom-scalars.test.jsx +38 -0
- package/dist/test/emitter/custom-scalars.test.jsx.map +1 -0
- package/dist/test/emitter/discriminated-unions.test.d.ts +2 -0
- package/dist/test/emitter/discriminated-unions.test.d.ts.map +1 -0
- package/dist/test/emitter/discriminated-unions.test.js +52 -0
- package/dist/test/emitter/discriminated-unions.test.js.map +1 -0
- package/dist/test/emitter/discriminated-unions.test.jsx +48 -0
- package/dist/test/emitter/discriminated-unions.test.jsx.map +1 -0
- package/dist/test/emitter/inheritance.test.d.ts +2 -0
- package/dist/test/emitter/inheritance.test.d.ts.map +1 -0
- package/dist/test/emitter/inheritance.test.js +56 -0
- package/dist/test/emitter/inheritance.test.js.map +1 -0
- package/dist/test/emitter/inheritance.test.jsx +50 -0
- package/dist/test/emitter/inheritance.test.jsx.map +1 -0
- package/dist/test/emitter/recursive.test.d.ts +2 -0
- package/dist/test/emitter/recursive.test.d.ts.map +1 -0
- package/dist/test/emitter/recursive.test.js +36 -0
- package/dist/test/emitter/recursive.test.js.map +1 -0
- package/dist/test/emitter/recursive.test.jsx +32 -0
- package/dist/test/emitter/recursive.test.jsx.map +1 -0
- package/dist/test/emitter/tuples.test.d.ts +2 -0
- package/dist/test/emitter/tuples.test.d.ts.map +1 -0
- package/dist/test/emitter/tuples.test.js +22 -0
- package/dist/test/emitter/tuples.test.js.map +1 -0
- package/dist/test/emitter/tuples.test.jsx +20 -0
- package/dist/test/emitter/tuples.test.jsx.map +1 -0
- package/dist/test/inheritance.test.d.ts +2 -0
- package/dist/test/inheritance.test.d.ts.map +1 -0
- package/dist/test/inheritance.test.js +162 -0
- package/dist/test/inheritance.test.js.map +1 -0
- package/dist/test/inheritance.test.jsx +92 -0
- package/dist/test/inheritance.test.jsx.map +1 -0
- package/dist/test/models.test.js +35 -0
- package/dist/test/models.test.js.map +1 -1
- package/dist/test/models.test.jsx +27 -0
- package/dist/test/models.test.jsx.map +1 -1
- package/dist/test/recursive.test.d.ts +2 -0
- package/dist/test/recursive.test.d.ts.map +1 -0
- package/dist/test/recursive.test.js +137 -0
- package/dist/test/recursive.test.js.map +1 -0
- package/dist/test/recursive.test.jsx +75 -0
- package/dist/test/recursive.test.jsx.map +1 -0
- package/dist/test/tuples.test.d.ts +2 -0
- package/dist/test/tuples.test.d.ts.map +1 -0
- package/dist/test/tuples.test.js +67 -0
- package/dist/test/tuples.test.js.map +1 -0
- package/dist/test/tuples.test.jsx +42 -0
- package/dist/test/tuples.test.jsx.map +1 -0
- package/package.json +7 -7
|
@@ -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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuples.test.d.ts","sourceRoot":"","sources":["../../test/tuples.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,67 @@
|
|
|
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('tuples', () => {
|
|
6
|
+
it('works with pair of strings', async () => {
|
|
7
|
+
const runner = await createTestRunner();
|
|
8
|
+
const {
|
|
9
|
+
pair
|
|
10
|
+
} = await runner.compile(`
|
|
11
|
+
model Test {
|
|
12
|
+
@test pair: [string, string];
|
|
13
|
+
}
|
|
14
|
+
`);
|
|
15
|
+
expectRender(runner.program, _$createComponent(TypeBoxSchema, {
|
|
16
|
+
get type() {
|
|
17
|
+
return pair.type;
|
|
18
|
+
}
|
|
19
|
+
}), 'Type.Tuple([Type.String(), Type.String()])');
|
|
20
|
+
});
|
|
21
|
+
it('works with mixed types', async () => {
|
|
22
|
+
const runner = await createTestRunner();
|
|
23
|
+
const {
|
|
24
|
+
mixed
|
|
25
|
+
} = await runner.compile(`
|
|
26
|
+
model Test {
|
|
27
|
+
@test mixed: [string, int32, boolean];
|
|
28
|
+
}
|
|
29
|
+
`);
|
|
30
|
+
expectRender(runner.program, _$createComponent(TypeBoxSchema, {
|
|
31
|
+
get type() {
|
|
32
|
+
return mixed.type;
|
|
33
|
+
}
|
|
34
|
+
}), 'Type.Tuple([\n Type.String(),\n Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n Type.Boolean()\n])');
|
|
35
|
+
});
|
|
36
|
+
it('works with single element', async () => {
|
|
37
|
+
const runner = await createTestRunner();
|
|
38
|
+
const {
|
|
39
|
+
single
|
|
40
|
+
} = await runner.compile(`
|
|
41
|
+
model Test {
|
|
42
|
+
@test single: [string];
|
|
43
|
+
}
|
|
44
|
+
`);
|
|
45
|
+
expectRender(runner.program, _$createComponent(TypeBoxSchema, {
|
|
46
|
+
get type() {
|
|
47
|
+
return single.type;
|
|
48
|
+
}
|
|
49
|
+
}), 'Type.Tuple([Type.String()])');
|
|
50
|
+
});
|
|
51
|
+
it('works with nested array element', async () => {
|
|
52
|
+
const runner = await createTestRunner();
|
|
53
|
+
const {
|
|
54
|
+
nested
|
|
55
|
+
} = await runner.compile(`
|
|
56
|
+
model Test {
|
|
57
|
+
@test nested: [string, string[]];
|
|
58
|
+
}
|
|
59
|
+
`);
|
|
60
|
+
expectRender(runner.program, _$createComponent(TypeBoxSchema, {
|
|
61
|
+
get type() {
|
|
62
|
+
return nested.type;
|
|
63
|
+
}
|
|
64
|
+
}), 'Type.Tuple([Type.String(), Type.Array(Type.String())])');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=tuples.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","it","TypeBoxSchema","createTestRunner","expectRender","runner","pair","compile","program","_$createComponent","type","mixed","single","nested"],"sources":["../../test/tuples.test.tsx"],"sourcesContent":[null],"mappings":";AACA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,QAAQ;AACrC,SAASC,aAAa;AACtB,SAASC,gBAAgB,EAAEC,YAAY;AAEvCJ,QAAQ,CAAC,QAAQ,EAAE,MAAM;EACvBC,EAAE,CAAC,4BAA4B,EAAE,YAAY;IAC3C,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEG;IAAK,CAAC,GAAI,MAAMD,MAAM,CAACE,OAAO,CAAC;AAC3C;AACA;AACA;AACA,KAAK,CAAmC;IAEpCH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAAA,IAACQ,IAAIA,CAAA;QAAA,OAAEJ,IAAI,CAACI,IAAI;MAAA;IAAA,IAC9B,4CACF,CAAC;EACH,CAAC,CAAC;EAEFT,EAAE,CAAC,wBAAwB,EAAE,YAAY;IACvC,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEQ;IAAM,CAAC,GAAI,MAAMN,MAAM,CAACE,OAAO,CAAC;AAC5C;AACA;AACA;AACA,KAAK,CAAmC;IAEpCH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAAA,IAACQ,IAAIA,CAAA;QAAA,OAAEC,KAAK,CAACD,IAAI;MAAA;IAAA,IAC/B,mIACF,CAAC;EACH,CAAC,CAAC;EAEFT,EAAE,CAAC,2BAA2B,EAAE,YAAY;IAC1C,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAES;IAAO,CAAC,GAAI,MAAMP,MAAM,CAACE,OAAO,CAAC;AAC7C;AACA;AACA;AACA,KAAK,CAAmC;IAEpCH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAAA,IAACQ,IAAIA,CAAA;QAAA,OAAEE,MAAM,CAACF,IAAI;MAAA;IAAA,IAChC,6BACF,CAAC;EACH,CAAC,CAAC;EAEFT,EAAE,CAAC,iCAAiC,EAAE,YAAY;IAChD,MAAMI,MAAM,GAAG,MAAMF,gBAAgB,CAAC,CAAC;IACvC,MAAM;MAAEU;IAAO,CAAC,GAAI,MAAMR,MAAM,CAACE,OAAO,CAAC;AAC7C;AACA;AACA;AACA,KAAK,CAAmC;IAEpCH,YAAY,CACVC,MAAM,CAACG,OAAO,EAAAC,iBAAA,CACbP,aAAa;MAAA,IAACQ,IAAIA,CAAA;QAAA,OAAEG,MAAM,CAACH,IAAI;MAAA;IAAA,IAChC,wDACF,CAAC;EACH,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, it } from 'vitest';
|
|
2
|
+
import { TypeBoxSchema } from '../src/components/TypeBoxSchema.jsx';
|
|
3
|
+
import { createTestRunner, expectRender } from './utils.jsx';
|
|
4
|
+
describe('tuples', () => {
|
|
5
|
+
it('works with pair of strings', async () => {
|
|
6
|
+
const runner = await createTestRunner();
|
|
7
|
+
const { pair } = (await runner.compile(`
|
|
8
|
+
model Test {
|
|
9
|
+
@test pair: [string, string];
|
|
10
|
+
}
|
|
11
|
+
`));
|
|
12
|
+
expectRender(runner.program, <TypeBoxSchema type={pair.type}/>, 'Type.Tuple([Type.String(), Type.String()])');
|
|
13
|
+
});
|
|
14
|
+
it('works with mixed types', async () => {
|
|
15
|
+
const runner = await createTestRunner();
|
|
16
|
+
const { mixed } = (await runner.compile(`
|
|
17
|
+
model Test {
|
|
18
|
+
@test mixed: [string, int32, boolean];
|
|
19
|
+
}
|
|
20
|
+
`));
|
|
21
|
+
expectRender(runner.program, <TypeBoxSchema type={mixed.type}/>, 'Type.Tuple([\n Type.String(),\n Type.Integer({\n minimum: -2147483648,\n maximum: 2147483647\n }),\n Type.Boolean()\n])');
|
|
22
|
+
});
|
|
23
|
+
it('works with single element', async () => {
|
|
24
|
+
const runner = await createTestRunner();
|
|
25
|
+
const { single } = (await runner.compile(`
|
|
26
|
+
model Test {
|
|
27
|
+
@test single: [string];
|
|
28
|
+
}
|
|
29
|
+
`));
|
|
30
|
+
expectRender(runner.program, <TypeBoxSchema type={single.type}/>, 'Type.Tuple([Type.String()])');
|
|
31
|
+
});
|
|
32
|
+
it('works with nested array element', async () => {
|
|
33
|
+
const runner = await createTestRunner();
|
|
34
|
+
const { nested } = (await runner.compile(`
|
|
35
|
+
model Test {
|
|
36
|
+
@test nested: [string, string[]];
|
|
37
|
+
}
|
|
38
|
+
`));
|
|
39
|
+
expectRender(runner.program, <TypeBoxSchema type={nested.type}/>, 'Type.Tuple([Type.String(), Type.Array(Type.String())])');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=tuples.test.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuples.test.jsx","sourceRoot":"","sources":["../../test/tuples.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,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAItC,CAAC,CAAkC,CAAC;QAErC,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAG,EAClC,4CAA4C,CAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIvC,CAAC,CAAkC,CAAC;QAErC,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAG,EACnC,mIAAmI,CACpI,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIxC,CAAC,CAAkC,CAAC;QAErC,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAG,EACpC,6BAA6B,CAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;;;;KAIxC,CAAC,CAAkC,CAAC;QAErC,YAAY,CACV,MAAM,CAAC,OAAO,EACd,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAG,EACpC,wDAAwD,CACzD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typespec-dev/emitter-typebox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A TypeSpec emitter and library for creating TypeBox schemas from TypeSpec types.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"@typespec/compiler": "1.
|
|
25
|
-
"@typespec/emitter-framework": "0.
|
|
24
|
+
"@typespec/compiler": "1.9.0",
|
|
25
|
+
"@typespec/emitter-framework": "0.16.0"
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
28
28
|
"dist",
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@alloy-js/cli": "0.22.0",
|
|
47
47
|
"@alloy-js/rollup-plugin": "0.1.0",
|
|
48
|
-
"@types/node": "24.
|
|
49
|
-
"@typespec/compiler": "1.
|
|
50
|
-
"@typespec/emitter-framework": "0.
|
|
51
|
-
"rimraf": "6.1.
|
|
48
|
+
"@types/node": "24.12.0",
|
|
49
|
+
"@typespec/compiler": "1.9.0",
|
|
50
|
+
"@typespec/emitter-framework": "0.16.0",
|
|
51
|
+
"rimraf": "6.1.3",
|
|
52
52
|
"typescript": "5.9.3",
|
|
53
53
|
"vitest": "4.0.18"
|
|
54
54
|
},
|