@alloy-js/csharp 0.10.0 → 0.12.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 (51) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/src/components/Class.js +2 -5
  3. package/dist/src/components/Declaration.js +1 -2
  4. package/dist/src/components/Enum.js +2 -4
  5. package/dist/src/components/Name.js +1 -2
  6. package/dist/src/components/Namespace.js +1 -2
  7. package/dist/src/components/Parameters.js +2 -4
  8. package/dist/src/components/ProjectDirectory.js +2 -4
  9. package/dist/src/components/Reference.js +1 -2
  10. package/dist/src/components/SourceFile.js +2 -5
  11. package/dist/src/components/UsingDirective.js +1 -2
  12. package/dist/src/components/index.js +1 -2
  13. package/dist/src/components/stc/index.js +1 -2
  14. package/dist/src/index.js +1 -2
  15. package/dist/src/modifiers.js +1 -2
  16. package/dist/src/name-policy.js +1 -2
  17. package/dist/src/symbols/csharp-output-symbol.js +1 -2
  18. package/dist/src/symbols/index.js +1 -2
  19. package/dist/src/symbols/reference.js +1 -2
  20. package/dist/src/symbols/scopes.js +1 -2
  21. package/dist/test/class.test.js +328 -0
  22. package/dist/test/enum.test.js +179 -0
  23. package/dist/test/namespace.test.js +82 -0
  24. package/dist/test/projectdirectory.test.js +132 -0
  25. package/dist/test/sourcefile.test.js +57 -0
  26. package/dist/test/using.test.js +139 -0
  27. package/dist/test/utils.js +64 -0
  28. package/dist/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +13 -20
  30. package/temp/api.json +1 -1
  31. package/tsdoc-metadata.json +1 -1
  32. package/babel.config.cjs +0 -4
  33. package/dist/src/components/Class.js.map +0 -1
  34. package/dist/src/components/Declaration.js.map +0 -1
  35. package/dist/src/components/Enum.js.map +0 -1
  36. package/dist/src/components/Name.js.map +0 -1
  37. package/dist/src/components/Namespace.js.map +0 -1
  38. package/dist/src/components/Parameters.js.map +0 -1
  39. package/dist/src/components/ProjectDirectory.js.map +0 -1
  40. package/dist/src/components/Reference.js.map +0 -1
  41. package/dist/src/components/SourceFile.js.map +0 -1
  42. package/dist/src/components/UsingDirective.js.map +0 -1
  43. package/dist/src/components/index.js.map +0 -1
  44. package/dist/src/components/stc/index.js.map +0 -1
  45. package/dist/src/index.js.map +0 -1
  46. package/dist/src/modifiers.js.map +0 -1
  47. package/dist/src/name-policy.js.map +0 -1
  48. package/dist/src/symbols/csharp-output-symbol.js.map +0 -1
  49. package/dist/src/symbols/index.js.map +0 -1
  50. package/dist/src/symbols/reference.js.map +0 -1
  51. package/dist/src/symbols/scopes.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog - @alloy-js/csharp
2
2
 
3
+ ## 0.12.0
4
+
5
+ No changes, version bump only.
6
+
7
+ ## 0.11.0
8
+
9
+ ### Features
10
+
11
+ - [#105](https://github.com/alloy-framework/alloy/pull/105) Updated dependencies
12
+
13
+
3
14
  ## 0.10.0
4
15
 
5
16
  No changes, version bump only.
@@ -1,6 +1,4 @@
1
- import { memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
- import { createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
3
- import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
1
+ import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic, memo as _$memo } from "@alloy-js/core/jsx-runtime";
4
2
  import * as core from "@alloy-js/core";
5
3
  import { getAccessModifier, getMethodModifier } from "../modifiers.js";
6
4
  import { useCSharpNamePolicy } from "../name-policy.js";
@@ -178,5 +176,4 @@ export function ClassMethod(props) {
178
176
  });
179
177
  }
180
178
  });
181
- }
182
- //# sourceMappingURL=Class.js.map
179
+ }
@@ -13,5 +13,4 @@ export function Declaration(props) {
13
13
  return props.children;
14
14
  }
15
15
  });
16
- }
17
- //# sourceMappingURL=Declaration.js.map
16
+ }
@@ -1,5 +1,4 @@
1
- import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
- import { memo as _$memo } from "@alloy-js/core/jsx-runtime";
1
+ import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
3
2
  import * as core from "@alloy-js/core";
4
3
  import { getAccessModifier } from "../modifiers.js";
5
4
  import { useCSharpNamePolicy } from "../name-policy.js";
@@ -61,5 +60,4 @@ export function EnumMember(props) {
61
60
  return _$createComponent(Name, {});
62
61
  }
63
62
  });
64
- }
65
- //# sourceMappingURL=Enum.js.map
63
+ }
@@ -8,5 +8,4 @@ export function Name() {
8
8
  throw new Error("missing declaration context");
9
9
  }
10
10
  return [_$memo(() => declSymbol.name)];
11
- }
12
- //# sourceMappingURL=Name.js.map
11
+ }
@@ -30,5 +30,4 @@ export function Namespace(props) {
30
30
  });
31
31
  }
32
32
  });
33
- }
34
- //# sourceMappingURL=Namespace.js.map
33
+ }
@@ -1,5 +1,4 @@
1
- import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
- import { memo as _$memo } from "@alloy-js/core/jsx-runtime";
1
+ import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
3
2
  import * as core from "@alloy-js/core";
4
3
  import { useCSharpNamePolicy } from "../name-policy.js";
5
4
  import { useCSharpScope } from "../symbols/scopes.js";
@@ -32,5 +31,4 @@ export function Parameters(props) {
32
31
  joiner: ", ",
33
32
  children: param => _$createComponent(Parameter, param)
34
33
  });
35
- }
36
- //# sourceMappingURL=Parameters.js.map
34
+ }
@@ -1,5 +1,4 @@
1
- import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
- import { memo as _$memo } from "@alloy-js/core/jsx-runtime";
1
+ import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
3
2
  import * as core from "@alloy-js/core";
4
3
  import { join } from "pathe";
5
4
 
@@ -44,5 +43,4 @@ export function ProjectDirectory(props) {
44
43
  })];
45
44
  }
46
45
  });
47
- }
48
- //# sourceMappingURL=ProjectDirectory.js.map
46
+ }
@@ -5,5 +5,4 @@ export function Reference({
5
5
  }) {
6
6
  const reference = ref(refkey);
7
7
  return [reference];
8
- }
9
- //# sourceMappingURL=Reference.js.map
8
+ }
@@ -1,6 +1,4 @@
1
- import { createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
- import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
3
- import { memo as _$memo } from "@alloy-js/core/jsx-runtime";
1
+ import { memo as _$memo, createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
4
2
  import * as core from "@alloy-js/core";
5
3
  import { useNamespace } from "./Namespace.js";
6
4
  import { Reference } from "./Reference.js";
@@ -67,5 +65,4 @@ export function SourceFile(props) {
67
65
  });
68
66
  }
69
67
  });
70
- }
71
- //# sourceMappingURL=SourceFile.js.map
68
+ }
@@ -9,5 +9,4 @@ export function UsingDirective(props) {
9
9
  each: sortedNamespaces,
10
10
  children: namespace => `using ${namespace};`
11
11
  });
12
- }
13
- //# sourceMappingURL=UsingDirective.js.map
12
+ }
@@ -7,5 +7,4 @@ export * from "./Parameters.js";
7
7
  export * from "./ProjectDirectory.js";
8
8
  export * from "./Reference.js";
9
9
  export * from "./SourceFile.js";
10
- export * from "./UsingDirective.js";
11
- //# sourceMappingURL=index.js.map
10
+ export * from "./UsingDirective.js";
@@ -9,5 +9,4 @@ export const EnumMember = core.stc(base.EnumMember);
9
9
  export const Parameter = core.stc(base.Parameter);
10
10
  export const Parameters = core.stc(base.Parameters);
11
11
  export const ProjectDirectory = core.stc(base.ProjectDirectory);
12
- export const UsingDirective = core.stc(base.UsingDirective);
13
- //# sourceMappingURL=index.js.map
12
+ export const UsingDirective = core.stc(base.UsingDirective);
package/dist/src/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from "./components/index.js";
2
2
  export * from "./modifiers.js";
3
3
  export * from "./name-policy.js";
4
- export * from "./symbols/index.js";
5
- //# sourceMappingURL=index.js.map
4
+ export * from "./symbols/index.js";
@@ -31,5 +31,4 @@ const methodModifierLookup = {
31
31
  // if no method modifier is specified, the empty string is returned.
32
32
  export function getMethodModifier(methodModifier) {
33
33
  return methodModifier ? methodModifierLookup[methodModifier] : "";
34
- }
35
- //# sourceMappingURL=modifiers.js.map
34
+ }
@@ -26,5 +26,4 @@ export function createCSharpNamePolicy() {
26
26
  // gets the active C# naming policy
27
27
  export function useCSharpNamePolicy() {
28
28
  return core.useNamePolicy();
29
- }
30
- //# sourceMappingURL=name-policy.js.map
29
+ }
@@ -16,5 +16,4 @@ export function createCSharpSymbol(props) {
16
16
  refkey: props.refkey ?? core.refkey(props.name)
17
17
  });
18
18
  return sym;
19
- }
20
- //# sourceMappingURL=csharp-output-symbol.js.map
19
+ }
@@ -1,4 +1,3 @@
1
1
  export * from "./csharp-output-symbol.js";
2
2
  export * from "./reference.js";
3
- export * from "./scopes.js";
4
- //# sourceMappingURL=index.js.map
3
+ export * from "./scopes.js";
@@ -51,5 +51,4 @@ export function ref(refkey) {
51
51
  syms.push(targetDeclaration);
52
52
  return syms.map(sym => sym.name).join(".");
53
53
  });
54
- }
55
- //# sourceMappingURL=reference.js.map
54
+ }
@@ -33,5 +33,4 @@ export function createCSharpMemberScope(binder, parent, owner, name) {
33
33
  // returns the current C# scope
34
34
  export function useCSharpScope() {
35
35
  return core.useScope();
36
- }
37
- //# sourceMappingURL=scopes.js.map
36
+ }
@@ -0,0 +1,328 @@
1
+ import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
+ import * as core from "@alloy-js/core";
3
+ import * as coretest from "@alloy-js/core/testing";
4
+ import { expect, it } from "vitest";
5
+ import * as csharp from "../src/index.js";
6
+ import * as utils from "./utils.js";
7
+ it("declares class with no members", () => {
8
+ const res = utils.toSourceText(_$createComponent(csharp.Class, {
9
+ accessModifier: "public",
10
+ name: "TestClass"
11
+ }));
12
+ expect(res).toBe(coretest.d`
13
+ namespace TestCode
14
+ {
15
+ public class TestClass;
16
+ }
17
+ `);
18
+ });
19
+ it("declares class with some members", () => {
20
+ const res = utils.toSourceText(_$createComponent(csharp.Class, {
21
+ accessModifier: "public",
22
+ name: "TestClass",
23
+ get children() {
24
+ return _$createComponent(core.StatementList, {
25
+ get children() {
26
+ return [_$createComponent(csharp.ClassMember, {
27
+ accessModifier: "public",
28
+ name: "MemberOne",
29
+ type: "string"
30
+ }), _$createComponent(csharp.ClassMember, {
31
+ accessModifier: "private",
32
+ name: "MemberTwo",
33
+ type: "int"
34
+ })];
35
+ }
36
+ });
37
+ }
38
+ }));
39
+ expect(res).toBe(coretest.d`
40
+ namespace TestCode
41
+ {
42
+ public class TestClass
43
+ {
44
+ public string MemberOne;
45
+ private int memberTwo;
46
+ }
47
+ }
48
+ `);
49
+ });
50
+ it("declares class with some methods", () => {
51
+ const res = utils.toSourceText(_$createComponent(csharp.Class, {
52
+ accessModifier: "public",
53
+ name: "TestClass",
54
+ get children() {
55
+ return _$createComponent(core.List, {
56
+ get children() {
57
+ return [_$createComponent(csharp.ClassMethod, {
58
+ accessModifier: "public",
59
+ name: "MethodOne"
60
+ }), _$createComponent(csharp.ClassMethod, {
61
+ accessModifier: "private",
62
+ methodModifier: "virtual",
63
+ name: "MethodTwo"
64
+ })];
65
+ }
66
+ });
67
+ }
68
+ }));
69
+ expect(res).toBe(coretest.d`
70
+ namespace TestCode
71
+ {
72
+ public class TestClass
73
+ {
74
+ public void MethodOne() {}
75
+ private virtual void MethodTwo() {}
76
+ }
77
+ }
78
+ `);
79
+ });
80
+ it("declares class with params and return type", () => {
81
+ const params = [{
82
+ name: "IntParam",
83
+ type: "int"
84
+ }, {
85
+ name: "StringParam",
86
+ type: "string"
87
+ }];
88
+ const res = utils.toSourceText(_$createComponent(csharp.Class, {
89
+ accessModifier: "public",
90
+ name: "TestClass",
91
+ get children() {
92
+ return _$createComponent(csharp.ClassMethod, {
93
+ accessModifier: "public",
94
+ name: "MethodOne",
95
+ parameters: params,
96
+ returns: "string"
97
+ });
98
+ }
99
+ }));
100
+ expect(res).toBe(coretest.d`
101
+ namespace TestCode
102
+ {
103
+ public class TestClass
104
+ {
105
+ public string MethodOne(int intParam, string stringParam) {}
106
+ }
107
+ }
108
+ `);
109
+ });
110
+ it("uses refkeys for members, params, and return type", () => {
111
+ const inputTypeRefkey = core.refkey();
112
+ const testResultTypeRefkey = core.refkey();
113
+ const enumTypeRefkey = core.refkey();
114
+ const params = [{
115
+ name: "IntParam",
116
+ type: "int"
117
+ }, {
118
+ name: "BodyParam",
119
+ type: inputTypeRefkey
120
+ }];
121
+ const res = core.render(_$createComponent(core.Output, {
122
+ get namePolicy() {
123
+ return csharp.createCSharpNamePolicy();
124
+ },
125
+ get children() {
126
+ return _$createComponent(csharp.Namespace, {
127
+ name: "TestCode",
128
+ get children() {
129
+ return _$createComponent(csharp.SourceFile, {
130
+ path: "Test.cs",
131
+ get children() {
132
+ return [_$createComponent(csharp.Enum, {
133
+ accessModifier: "public",
134
+ name: "TestEnum",
135
+ refkey: enumTypeRefkey,
136
+ get children() {
137
+ return _$createComponent(core.List, {
138
+ comma: true,
139
+ hardline: true,
140
+ get children() {
141
+ return [_$createComponent(csharp.EnumMember, {
142
+ name: "One"
143
+ }), _$createComponent(csharp.EnumMember, {
144
+ name: "Two"
145
+ })];
146
+ }
147
+ });
148
+ }
149
+ }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
150
+ accessModifier: "public",
151
+ name: "TestInput",
152
+ refkey: inputTypeRefkey
153
+ }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
154
+ accessModifier: "public",
155
+ name: "TestResult",
156
+ refkey: testResultTypeRefkey
157
+ }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
158
+ accessModifier: "public",
159
+ name: "TestClass",
160
+ get children() {
161
+ return [_$createComponent(csharp.ClassMember, {
162
+ accessModifier: "private",
163
+ name: "MemberOne",
164
+ type: enumTypeRefkey
165
+ }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMethod, {
166
+ accessModifier: "public",
167
+ name: "MethodOne",
168
+ parameters: params,
169
+ returns: testResultTypeRefkey,
170
+ get children() {
171
+ return ["return new ", testResultTypeRefkey, "();"];
172
+ }
173
+ })];
174
+ }
175
+ })];
176
+ }
177
+ });
178
+ }
179
+ });
180
+ }
181
+ }));
182
+ expect(res.contents[0].contents).toBe(coretest.d`
183
+ namespace TestCode
184
+ {
185
+ public enum TestEnum
186
+ {
187
+ One,
188
+ Two
189
+ }
190
+ public class TestInput;
191
+ public class TestResult;
192
+ public class TestClass
193
+ {
194
+ private TestEnum memberOne;
195
+ public TestResult MethodOne(int intParam, TestInput bodyParam)
196
+ {
197
+ return new TestResult();
198
+ }
199
+ }
200
+ }
201
+ `);
202
+ });
203
+ it("declares class with generic parameters", () => {
204
+ const typeParameters = {
205
+ T: core.refkey(),
206
+ U: core.refkey()
207
+ };
208
+ const res = utils.toSourceText(_$createComponent(csharp.Class, {
209
+ accessModifier: "public",
210
+ name: "TestClass",
211
+ typeParameters: typeParameters,
212
+ get children() {
213
+ return [_$createComponent(csharp.ClassMember, {
214
+ accessModifier: "public",
215
+ name: "memberOne",
216
+ get type() {
217
+ return typeParameters.T;
218
+ }
219
+ }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
220
+ accessModifier: "private",
221
+ name: "memberTwo",
222
+ get type() {
223
+ return typeParameters.U;
224
+ }
225
+ }), ";"];
226
+ }
227
+ }));
228
+ expect(res).toBe(coretest.d`
229
+ namespace TestCode
230
+ {
231
+ public class TestClass<T, U>
232
+ {
233
+ public T MemberOne;
234
+ private U memberTwo;
235
+ }
236
+ }
237
+ `);
238
+ });
239
+ it("declares class with invalid members", () => {
240
+ const decl = _$createComponent(csharp.Class, {
241
+ accessModifier: "public",
242
+ name: "TestClass",
243
+ get children() {
244
+ return [_$createComponent(csharp.EnumMember, {
245
+ name: "One"
246
+ }), ",", _$createIntrinsic("hbr", {}), _$createComponent(csharp.EnumMember, {
247
+ name: "Two"
248
+ })];
249
+ }
250
+ });
251
+ expect(() => utils.toSourceText(decl)).toThrow("can't define an enum member outside of an enum-decl scope");
252
+ });
253
+ it("declares class with constructor", () => {
254
+ const res = utils.toSourceText(_$createComponent(csharp.Class, {
255
+ accessModifier: "public",
256
+ name: "TestClass",
257
+ get children() {
258
+ return _$createComponent(csharp.ClassConstructor, {
259
+ accessModifier: "public"
260
+ });
261
+ }
262
+ }));
263
+ expect(res).toBe(coretest.d`
264
+ namespace TestCode
265
+ {
266
+ public class TestClass
267
+ {
268
+ public TestClass() {}
269
+ }
270
+ }
271
+ `);
272
+ });
273
+ it("declares class with constructor params and assigns values to fields", () => {
274
+ const thisNameRefkey = core.refkey();
275
+ const thisSizeRefkey = core.refkey();
276
+ const paramNameRefkey = core.refkey();
277
+ const paramSizeRefkey = core.refkey();
278
+ const ctorParams = [{
279
+ name: "name",
280
+ type: "string",
281
+ refkey: paramNameRefkey
282
+ }, {
283
+ name: "size",
284
+ type: "int",
285
+ refkey: paramSizeRefkey
286
+ }];
287
+ const res = utils.toSourceText(_$createComponent(csharp.Class, {
288
+ accessModifier: "public",
289
+ name: "TestClass",
290
+ get children() {
291
+ return [_$createComponent(csharp.ClassMember, {
292
+ accessModifier: "private",
293
+ name: "name",
294
+ type: "string",
295
+ refkey: thisNameRefkey
296
+ }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
297
+ accessModifier: "private",
298
+ name: "size",
299
+ type: "int",
300
+ refkey: thisSizeRefkey
301
+ }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassConstructor, {
302
+ accessModifier: "public",
303
+ parameters: ctorParams,
304
+ get children() {
305
+ return [thisNameRefkey, " = ", paramNameRefkey, ";", _$createIntrinsic("hbr", {}), thisSizeRefkey, " = ", paramSizeRefkey, ";"];
306
+ }
307
+ })];
308
+ }
309
+ }));
310
+
311
+ // TODO: assignments to members should have this. prefix
312
+ // e.g. this.name = name;
313
+ expect(res).toBe(coretest.d`
314
+ namespace TestCode
315
+ {
316
+ public class TestClass
317
+ {
318
+ private string name;
319
+ private int size;
320
+ public TestClass(string name, int size)
321
+ {
322
+ name = name;
323
+ size = size;
324
+ }
325
+ }
326
+ }
327
+ `);
328
+ });