@typespec/emitter-framework 0.9.0-dev.6 → 0.9.0-dev.8

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 (154) hide show
  1. package/dist/src/core/components/output.d.ts +4 -4
  2. package/dist/src/core/components/output.d.ts.map +1 -1
  3. package/dist/src/core/components/output.js +3 -3
  4. package/dist/src/core/context/name-policy-context.d.ts +2 -2
  5. package/dist/src/core/context/name-policy-context.d.ts.map +1 -1
  6. package/dist/src/core/context/tsp-context.d.ts +2 -2
  7. package/dist/src/core/context/tsp-context.d.ts.map +1 -1
  8. package/dist/src/core/transport-name-policy.d.ts +1 -1
  9. package/dist/src/core/transport-name-policy.d.ts.map +1 -1
  10. package/dist/src/core/write-output.d.ts +2 -2
  11. package/dist/src/core/write-output.d.ts.map +1 -1
  12. package/dist/src/csharp/components/class/declaration.d.ts +3 -3
  13. package/dist/src/csharp/components/class/declaration.d.ts.map +1 -1
  14. package/dist/src/csharp/components/class/declaration.js +2 -2
  15. package/dist/src/csharp/components/class/declaration.test.js +100 -115
  16. package/dist/src/csharp/components/{enum-declaration.d.ts → enum/declaration.d.ts} +4 -4
  17. package/dist/src/csharp/components/enum/declaration.d.ts.map +1 -0
  18. package/dist/src/csharp/components/{enum-declaration.js → enum/declaration.js} +6 -6
  19. package/dist/src/csharp/components/enum/declaration.test.d.ts +2 -0
  20. package/dist/src/csharp/components/enum/declaration.test.d.ts.map +1 -0
  21. package/dist/src/csharp/components/enum/declaration.test.js +309 -0
  22. package/dist/src/csharp/components/index.d.ts +1 -1
  23. package/dist/src/csharp/components/index.js +1 -1
  24. package/dist/src/csharp/components/property/property.d.ts +2 -2
  25. package/dist/src/csharp/components/property/property.d.ts.map +1 -1
  26. package/dist/src/csharp/components/property/property.test.js +14 -14
  27. package/dist/src/csharp/components/type-expression.d.ts +3 -3
  28. package/dist/src/csharp/components/type-expression.d.ts.map +1 -1
  29. package/dist/src/csharp/components/utils/doc-comments.d.ts +4 -4
  30. package/dist/src/csharp/components/utils/doc-comments.d.ts.map +1 -1
  31. package/dist/src/csharp/components/utils/doc-comments.js +2 -2
  32. package/dist/src/testing/index.d.ts +1 -1
  33. package/dist/src/testing/index.d.ts.map +1 -1
  34. package/dist/src/testing/scenario-test/harness.d.ts +2 -2
  35. package/dist/src/testing/scenario-test/harness.d.ts.map +1 -1
  36. package/dist/src/testing/scenario-test/test-host.d.ts +2 -2
  37. package/dist/src/testing/scenario-test/test-host.d.ts.map +1 -1
  38. package/dist/src/typescript/components/array-expression.d.ts +2 -3
  39. package/dist/src/typescript/components/array-expression.d.ts.map +1 -1
  40. package/dist/src/typescript/components/array-expression.js +2 -2
  41. package/dist/src/typescript/components/arrow-function.d.ts +1 -1
  42. package/dist/src/typescript/components/arrow-function.d.ts.map +1 -1
  43. package/dist/src/typescript/components/class-method.d.ts +1 -1
  44. package/dist/src/typescript/components/class-method.d.ts.map +1 -1
  45. package/dist/src/typescript/components/enum-declaration.d.ts +6 -6
  46. package/dist/src/typescript/components/enum-declaration.d.ts.map +1 -1
  47. package/dist/src/typescript/components/enum-declaration.js +2 -2
  48. package/dist/src/typescript/components/function-declaration.d.ts +1 -1
  49. package/dist/src/typescript/components/function-declaration.d.ts.map +1 -1
  50. package/dist/src/typescript/components/function-expression.d.ts +1 -1
  51. package/dist/src/typescript/components/function-expression.d.ts.map +1 -1
  52. package/dist/src/typescript/components/function-type.d.ts +1 -1
  53. package/dist/src/typescript/components/function-type.d.ts.map +1 -1
  54. package/dist/src/typescript/components/interface-declaration.d.ts +4 -4
  55. package/dist/src/typescript/components/interface-declaration.d.ts.map +1 -1
  56. package/dist/src/typescript/components/interface-declaration.js +3 -4
  57. package/dist/src/typescript/components/interface-member.d.ts +2 -2
  58. package/dist/src/typescript/components/interface-member.d.ts.map +1 -1
  59. package/dist/src/typescript/components/interface-method.d.ts +2 -2
  60. package/dist/src/typescript/components/interface-method.d.ts.map +1 -1
  61. package/dist/src/typescript/components/record-expression.d.ts +1 -1
  62. package/dist/src/typescript/components/record-expression.d.ts.map +1 -1
  63. package/dist/src/typescript/components/type-alias-declaration.d.ts +1 -1
  64. package/dist/src/typescript/components/type-alias-declaration.d.ts.map +1 -1
  65. package/dist/src/typescript/components/type-declaration.d.ts +1 -1
  66. package/dist/src/typescript/components/type-declaration.d.ts.map +1 -1
  67. package/dist/src/typescript/components/type-expression.d.ts +1 -1
  68. package/dist/src/typescript/components/type-expression.d.ts.map +1 -1
  69. package/dist/src/typescript/components/type-transform.d.ts +2 -2
  70. package/dist/src/typescript/components/type-transform.d.ts.map +1 -1
  71. package/dist/src/typescript/components/union-declaration.d.ts +2 -2
  72. package/dist/src/typescript/components/union-declaration.d.ts.map +1 -1
  73. package/dist/src/typescript/components/union-expression.d.ts +3 -4
  74. package/dist/src/typescript/components/union-expression.d.ts.map +1 -1
  75. package/dist/src/typescript/components/union-expression.js +3 -3
  76. package/dist/src/typescript/components/value-expression.d.ts +2 -2
  77. package/dist/src/typescript/components/value-expression.d.ts.map +1 -1
  78. package/dist/src/typescript/utils/operation.d.ts +2 -2
  79. package/dist/src/typescript/utils/operation.d.ts.map +1 -1
  80. package/dist/test/typescript/components/member-expression.test.js +5 -5
  81. package/dist/test/typescript/test-host.d.ts +1 -1
  82. package/dist/test/typescript/test-host.d.ts.map +1 -1
  83. package/dist/test/utils.d.ts +2 -2
  84. package/dist/test/utils.d.ts.map +1 -1
  85. package/package.json +7 -4
  86. package/src/core/components/output.tsx +9 -5
  87. package/src/core/context/name-policy-context.ts +2 -2
  88. package/src/core/context/tsp-context.ts +2 -2
  89. package/src/core/transport-name-policy.ts +1 -1
  90. package/src/core/write-output.ts +2 -2
  91. package/src/csharp/components/class/declaration.test.tsx +107 -169
  92. package/src/csharp/components/class/declaration.tsx +8 -8
  93. package/src/csharp/components/enum/declaration.test.tsx +267 -0
  94. package/src/csharp/components/{enum-declaration.tsx → enum/declaration.tsx} +9 -9
  95. package/src/csharp/components/index.ts +1 -1
  96. package/src/csharp/components/property/property.test.tsx +16 -16
  97. package/src/csharp/components/property/property.tsx +2 -2
  98. package/src/csharp/components/type-expression.test.tsx +3 -3
  99. package/src/csharp/components/type-expression.tsx +3 -3
  100. package/src/csharp/components/utils/doc-comments.tsx +6 -6
  101. package/src/testing/index.ts +1 -1
  102. package/src/testing/scenario-test/harness.ts +2 -2
  103. package/src/testing/scenario-test/test-host.ts +4 -4
  104. package/src/typescript/components/array-expression.tsx +3 -3
  105. package/src/typescript/components/arrow-function.tsx +1 -1
  106. package/src/typescript/components/class-method.tsx +1 -1
  107. package/src/typescript/components/enum-declaration.tsx +6 -6
  108. package/src/typescript/components/function-declaration.tsx +1 -1
  109. package/src/typescript/components/function-expression.tsx +1 -1
  110. package/src/typescript/components/function-type.tsx +1 -1
  111. package/src/typescript/components/interface-declaration.tsx +11 -12
  112. package/src/typescript/components/interface-member.tsx +2 -2
  113. package/src/typescript/components/interface-method.tsx +2 -2
  114. package/src/typescript/components/record-expression.tsx +1 -1
  115. package/src/typescript/components/type-alias-declaration.tsx +1 -1
  116. package/src/typescript/components/type-declaration.tsx +1 -1
  117. package/src/typescript/components/type-expression.tsx +2 -2
  118. package/src/typescript/components/type-transform.tsx +3 -3
  119. package/src/typescript/components/union-declaration.tsx +2 -2
  120. package/src/typescript/components/union-expression.tsx +12 -7
  121. package/src/typescript/components/value-expression.tsx +2 -2
  122. package/src/typescript/utils/operation.ts +2 -2
  123. package/test/testing/snippet-extractor-csharp.test.ts +1 -1
  124. package/test/testing/snippet-extractor-java.test.ts +1 -1
  125. package/test/testing/snippet-extractor-python.test.ts +1 -1
  126. package/test/testing/snippet-extractor-typescript.test.ts +1 -1
  127. package/test/typescript/components/arrow-function.test.tsx +2 -2
  128. package/test/typescript/components/enum-declaration.test.tsx +1 -1
  129. package/test/typescript/components/function-declaration.test.tsx +1 -1
  130. package/test/typescript/components/function-expression.test.tsx +2 -2
  131. package/test/typescript/components/function-type.test.tsx +2 -2
  132. package/test/typescript/components/interface-declaration.test.tsx +1 -1
  133. package/test/typescript/components/interface-method.test.tsx +2 -2
  134. package/test/typescript/components/member-expression.test.tsx +10 -10
  135. package/test/typescript/components/type-alias-declaration.test.tsx +1 -1
  136. package/test/typescript/components/type-transform.test.tsx +2 -2
  137. package/test/typescript/components/union-declaration.test.tsx +2 -2
  138. package/test/typescript/components/value-expression.test.tsx +6 -6
  139. package/test/typescript/test-host.ts +1 -1
  140. package/test/utils.ts +2 -2
  141. package/tsconfig.json +1 -0
  142. package/dist/src/csharp/components/enum-declaration.d.ts.map +0 -1
  143. package/dist/test/csharp/components/enum-declaration.test.d.ts +0 -2
  144. package/dist/test/csharp/components/enum-declaration.test.d.ts.map +0 -1
  145. package/dist/test/csharp/components/enum-declaration.test.js +0 -403
  146. package/dist/test/csharp/test-host.d.ts +0 -11
  147. package/dist/test/csharp/test-host.d.ts.map +0 -1
  148. package/dist/test/csharp/test-host.js +0 -32
  149. package/dist/test/csharp/utils.d.ts +0 -3
  150. package/dist/test/csharp/utils.d.ts.map +0 -1
  151. package/dist/test/csharp/utils.js +0 -6
  152. package/test/csharp/components/enum-declaration.test.tsx +0 -337
  153. package/test/csharp/test-host.ts +0 -42
  154. package/test/csharp/utils.ts +0 -8
@@ -1,10 +1,8 @@
1
1
  import { Tester } from "#test/test-host.js";
2
- import { Children, render } from "@alloy-js/core";
3
- import { d } from "@alloy-js/core/testing";
2
+ import { type Children } from "@alloy-js/core";
4
3
  import { createCSharpNamePolicy, Namespace, SourceFile } from "@alloy-js/csharp";
5
- import { t, TesterInstance } from "@typespec/compiler/testing";
6
- import { beforeEach, describe, it } from "vitest";
7
- import { assertFileContents } from "../../../../test/csharp/utils.js";
4
+ import { t, type TesterInstance } from "@typespec/compiler/testing";
5
+ import { beforeEach, describe, expect, it } from "vitest";
8
6
  import { Output } from "../../../core/index.js";
9
7
  import { ClassDeclaration, EnumDeclaration } from "../../index.js";
10
8
 
@@ -30,24 +28,19 @@ it("renders an empty class declaration", async () => {
30
28
  model ${t.model("TestModel")} {}
31
29
  `);
32
30
 
33
- const res = render(
31
+ expect(
34
32
  <Wrapper>
35
33
  <ClassDeclaration type={TestModel} />
36
34
  </Wrapper>,
37
- );
35
+ ).toRenderTo(`
36
+ namespace TestNamespace
37
+ {
38
+ class TestModel
39
+ {
38
40
 
39
- assertFileContents(
40
- res,
41
- d`
42
- namespace TestNamespace
43
- {
44
- class TestModel
45
- {
46
-
47
- }
48
- }
49
- `,
50
- );
41
+ }
42
+ }
43
+ `);
51
44
  });
52
45
 
53
46
  it("renders a class declaration with properties", async () => {
@@ -58,25 +51,20 @@ it("renders a class declaration with properties", async () => {
58
51
  }
59
52
  `);
60
53
 
61
- const res = render(
54
+ expect(
62
55
  <Wrapper>
63
56
  <ClassDeclaration type={TestModel} />
64
57
  </Wrapper>,
65
- );
66
-
67
- assertFileContents(
68
- res,
69
- d`
70
- namespace TestNamespace
71
- {
72
- class TestModel
73
- {
74
- public required string Prop1 { get; set; }
75
- public required int Prop2 { get; set; }
76
- }
77
- }
78
- `,
79
- );
58
+ ).toRenderTo(`
59
+ namespace TestNamespace
60
+ {
61
+ class TestModel
62
+ {
63
+ public required string Prop1 { get; set; }
64
+ public required int Prop2 { get; set; }
65
+ }
66
+ }
67
+ `);
80
68
  });
81
69
 
82
70
  it("can override class name", async () => {
@@ -84,24 +72,19 @@ it("can override class name", async () => {
84
72
  model ${t.model("TestModel")} {}
85
73
  `);
86
74
 
87
- const res = render(
75
+ expect(
88
76
  <Wrapper>
89
77
  <ClassDeclaration type={TestModel} name="CustomClassName" />
90
78
  </Wrapper>,
91
- );
79
+ ).toRenderTo(`
80
+ namespace TestNamespace
81
+ {
82
+ class CustomClassName
83
+ {
92
84
 
93
- assertFileContents(
94
- res,
95
- d`
96
- namespace TestNamespace
97
- {
98
- class CustomClassName
99
- {
100
-
101
- }
102
- }
103
- `,
104
- );
85
+ }
86
+ }
87
+ `);
105
88
  });
106
89
 
107
90
  it("renders a class with access modifiers", async () => {
@@ -110,24 +93,19 @@ it("renders a class with access modifiers", async () => {
110
93
  }
111
94
  `);
112
95
 
113
- const res = render(
96
+ expect(
114
97
  <Wrapper>
115
98
  <ClassDeclaration type={TestModel} protected />
116
99
  </Wrapper>,
117
- );
118
-
119
- assertFileContents(
120
- res,
121
- d`
122
- namespace TestNamespace
123
- {
124
- protected class TestModel
125
- {
100
+ ).toRenderTo(`
101
+ namespace TestNamespace
102
+ {
103
+ protected class TestModel
104
+ {
126
105
 
127
- }
128
- }
129
- `,
130
- );
106
+ }
107
+ }
108
+ `);
131
109
  });
132
110
 
133
111
  describe("from an interface", () => {
@@ -137,15 +115,11 @@ describe("from an interface", () => {
137
115
  }
138
116
  `);
139
117
 
140
- const res = render(
118
+ expect(
141
119
  <Wrapper>
142
120
  <ClassDeclaration type={TestInterface} />
143
121
  </Wrapper>,
144
- );
145
-
146
- assertFileContents(
147
- res,
148
- d`
122
+ ).toRenderTo(`
149
123
  namespace TestNamespace
150
124
  {
151
125
  class TestInterface
@@ -153,8 +127,7 @@ describe("from an interface", () => {
153
127
 
154
128
  }
155
129
  }
156
- `,
157
- );
130
+ `);
158
131
  });
159
132
 
160
133
  it("renders a class with operations", async () => {
@@ -164,15 +137,11 @@ describe("from an interface", () => {
164
137
  }
165
138
  `);
166
139
 
167
- const res = render(
140
+ expect(
168
141
  <Wrapper>
169
142
  <ClassDeclaration type={TestInterface} />
170
143
  </Wrapper>,
171
- );
172
-
173
- assertFileContents(
174
- res,
175
- d`
144
+ ).toRenderTo(`
176
145
  namespace TestNamespace
177
146
  {
178
147
  class TestInterface
@@ -180,8 +149,7 @@ describe("from an interface", () => {
180
149
  public abstract string GetName(string id);
181
150
  }
182
151
  }
183
- `,
184
- );
152
+ `);
185
153
  });
186
154
  });
187
155
 
@@ -193,30 +161,25 @@ it("renders a class with model members", async () => {
193
161
  }
194
162
  `);
195
163
 
196
- const res = render(
164
+ expect(
197
165
  <Wrapper>
198
166
  <ClassDeclaration type={TestReference} />
199
167
  <hbr />
200
168
  <ClassDeclaration type={TestModel} />
201
169
  </Wrapper>,
202
- );
203
-
204
- assertFileContents(
205
- res,
206
- d`
207
- namespace TestNamespace
208
- {
209
- class TestReference
210
- {
211
-
212
- }
213
- class TestModel
214
- {
215
- public required TestReference Prop1 { get; set; }
216
- }
217
- }
218
- `,
219
- );
170
+ ).toRenderTo(`
171
+ namespace TestNamespace
172
+ {
173
+ class TestReference
174
+ {
175
+
176
+ }
177
+ class TestModel
178
+ {
179
+ public required TestReference Prop1 { get; set; }
180
+ }
181
+ }
182
+ `);
220
183
  });
221
184
 
222
185
  it("renders a class with enum members", async () => {
@@ -230,31 +193,26 @@ it("renders a class with enum members", async () => {
230
193
  }
231
194
  `);
232
195
 
233
- const res = render(
196
+ expect(
234
197
  <Wrapper>
235
198
  <EnumDeclaration type={TestEnum} />
236
199
  <hbr />
237
200
  <ClassDeclaration type={TestModel} />
238
201
  </Wrapper>,
239
- );
240
-
241
- assertFileContents(
242
- res,
243
- d`
244
- namespace TestNamespace
245
- {
246
- enum TestEnum
247
- {
248
- Value1,
249
- Value2
250
- }
251
- class TestModel
252
- {
253
- public required TestEnum Prop1 { get; set; }
254
- }
255
- }
256
- `,
257
- );
202
+ ).toRenderTo(`
203
+ namespace TestNamespace
204
+ {
205
+ enum TestEnum
206
+ {
207
+ Value1,
208
+ Value2
209
+ }
210
+ class TestModel
211
+ {
212
+ public required TestEnum Prop1 { get; set; }
213
+ }
214
+ }
215
+ `);
258
216
  });
259
217
 
260
218
  it("maps prop: string | null to nullable property", async () => {
@@ -264,24 +222,19 @@ it("maps prop: string | null to nullable property", async () => {
264
222
  }
265
223
  `);
266
224
 
267
- const res = render(
225
+ expect(
268
226
  <Wrapper>
269
227
  <ClassDeclaration type={TestModel} />
270
228
  </Wrapper>,
271
- );
272
-
273
- assertFileContents(
274
- res,
275
- d`
276
- namespace TestNamespace
277
- {
278
- class TestModel
279
- {
280
- public required string? Prop1 { get; set; }
281
- }
282
- }
283
- `,
284
- );
229
+ ).toRenderTo(`
230
+ namespace TestNamespace
231
+ {
232
+ class TestModel
233
+ {
234
+ public required string? Prop1 { get; set; }
235
+ }
236
+ }
237
+ `);
285
238
  });
286
239
 
287
240
  it("renders a class with string enums", async () => {
@@ -295,31 +248,26 @@ it("renders a class with string enums", async () => {
295
248
  }
296
249
  `);
297
250
 
298
- const res = render(
251
+ expect(
299
252
  <Wrapper>
300
253
  <EnumDeclaration type={TestEnum} />
301
254
  <hbr />
302
255
  <ClassDeclaration type={TestModel} />
303
256
  </Wrapper>,
304
- );
305
-
306
- assertFileContents(
307
- res,
308
- d`
309
- namespace TestNamespace
310
- {
311
- enum TestEnum
312
- {
313
- Value1,
314
- Value2
315
- }
316
- class TestModel
317
- {
318
- public required TestEnum Prop1 { get; set; }
319
- }
320
- }
321
- `,
322
- );
257
+ ).toRenderTo(`
258
+ namespace TestNamespace
259
+ {
260
+ enum TestEnum
261
+ {
262
+ Value1,
263
+ Value2
264
+ }
265
+ class TestModel
266
+ {
267
+ public required TestEnum Prop1 { get; set; }
268
+ }
269
+ }
270
+ `);
323
271
  });
324
272
 
325
273
  describe("with doc comments", () => {
@@ -333,15 +281,11 @@ describe("with doc comments", () => {
333
281
 
334
282
  `);
335
283
 
336
- const res = render(
284
+ expect(
337
285
  <Wrapper>
338
286
  <ClassDeclaration type={TestModel} />
339
287
  </Wrapper>,
340
- );
341
-
342
- assertFileContents(
343
- res,
344
- d`
288
+ ).toRenderTo(`
345
289
  namespace TestNamespace
346
290
  {
347
291
  /// <summary>
@@ -355,8 +299,7 @@ describe("with doc comments", () => {
355
299
  public required string Prop1 { get; set; }
356
300
  }
357
301
  }
358
- `,
359
- );
302
+ `);
360
303
  });
361
304
 
362
305
  it("renders an interface with docs", async () => {
@@ -369,15 +312,11 @@ describe("with doc comments", () => {
369
312
  }
370
313
  `);
371
314
 
372
- const res = render(
315
+ expect(
373
316
  <Wrapper>
374
317
  <ClassDeclaration type={TestInterface} />
375
318
  </Wrapper>,
376
- );
377
-
378
- assertFileContents(
379
- res,
380
- d`
319
+ ).toRenderTo(`
381
320
  namespace TestNamespace
382
321
  {
383
322
  /// <summary>
@@ -395,7 +334,6 @@ describe("with doc comments", () => {
395
334
  public abstract string GetName(string id);
396
335
  }
397
336
  }
398
- `,
399
- );
337
+ `);
400
338
  });
401
339
  });
@@ -1,6 +1,6 @@
1
- import * as ay from "@alloy-js/core";
1
+ import { type Children, For } from "@alloy-js/core";
2
2
  import * as cs from "@alloy-js/csharp";
3
- import { Interface, Model } from "@typespec/compiler";
3
+ import type { Interface, Model } from "@typespec/compiler";
4
4
  import { useTsp } from "../../../core/index.js";
5
5
  import { Property } from "../property/property.jsx";
6
6
  import { TypeExpression } from "../type-expression.jsx";
@@ -26,7 +26,7 @@ interface ClassMethodsProps {
26
26
  type: Interface;
27
27
  }
28
28
 
29
- export function ClassDeclaration(props: ClassDeclarationProps): ay.Children {
29
+ export function ClassDeclaration(props: ClassDeclarationProps): Children {
30
30
  const { $ } = useTsp();
31
31
 
32
32
  const namePolicy = cs.useCSharpNamePolicy();
@@ -51,19 +51,19 @@ export function ClassDeclaration(props: ClassDeclarationProps): ay.Children {
51
51
  );
52
52
  }
53
53
 
54
- function ClassProperties(props: ClassPropertiesProps): ay.Children {
54
+ function ClassProperties(props: ClassPropertiesProps): Children {
55
55
  return (
56
- <ay.For each={props.type.properties.entries()} hardline>
56
+ <For each={props.type.properties.entries()} hardline>
57
57
  {([name, property]) => <Property type={property} jsonAttributes={props.jsonAttributes} />}
58
- </ay.For>
58
+ </For>
59
59
  );
60
60
  }
61
61
 
62
- function ClassMethods(props: ClassMethodsProps): ay.Children {
62
+ function ClassMethods(props: ClassMethodsProps): Children {
63
63
  const { $ } = useTsp();
64
64
  const namePolicy = cs.useCSharpNamePolicy();
65
65
 
66
- const abstractMethods: ay.Children = [];
66
+ const abstractMethods: Children = [];
67
67
  for (const [name, method] of props.type.operations) {
68
68
  abstractMethods.push(
69
69
  <cs.ClassMethod