@alloy-js/csharp 0.18.0-dev.24 → 0.18.0-dev.4

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 (166) hide show
  1. package/dist/src/components/Class.d.ts +23 -0
  2. package/dist/src/components/Class.d.ts.map +1 -0
  3. package/dist/src/components/{ClassDeclaration.js → Class.js} +37 -67
  4. package/dist/src/components/ClassMethod.d.ts +3 -44
  5. package/dist/src/components/ClassMethod.d.ts.map +1 -1
  6. package/dist/src/components/ClassMethod.js +8 -32
  7. package/dist/src/components/Enum.d.ts +14 -0
  8. package/dist/src/components/Enum.d.ts.map +1 -0
  9. package/dist/src/components/{EnumDeclaration.js → Enum.js} +2 -21
  10. package/dist/src/components/Parameters.d.ts +13 -0
  11. package/dist/src/components/Parameters.d.ts.map +1 -0
  12. package/dist/src/components/Parameters.js +34 -0
  13. package/dist/src/components/SourceFile.d.ts.map +1 -1
  14. package/dist/src/components/SourceFile.js +0 -1
  15. package/dist/src/components/index.d.ts +4 -14
  16. package/dist/src/components/index.d.ts.map +1 -1
  17. package/dist/src/components/index.js +5 -15
  18. package/dist/src/components/stc/index.d.ts +2 -2
  19. package/dist/src/components/stc/index.d.ts.map +1 -1
  20. package/dist/src/components/stc/index.js +2 -2
  21. package/dist/src/modifiers.d.ts +9 -2
  22. package/dist/src/modifiers.d.ts.map +1 -1
  23. package/dist/src/modifiers.js +9 -6
  24. package/dist/src/name-policy.d.ts +1 -1
  25. package/dist/src/name-policy.d.ts.map +1 -1
  26. package/dist/src/name-policy.js +0 -2
  27. package/dist/test/class-method.test.js +2 -23
  28. package/dist/test/class.test.d.ts +2 -0
  29. package/dist/test/class.test.d.ts.map +1 -0
  30. package/dist/test/{class-declaration.test.js → class.test.js} +51 -234
  31. package/dist/test/enum.test.js +6 -6
  32. package/dist/test/namespace.test.js +4 -4
  33. package/dist/test/projectdirectory.test.d.ts +2 -0
  34. package/dist/test/projectdirectory.test.d.ts.map +1 -0
  35. package/dist/test/{project-directory.test.js → projectdirectory.test.js} +4 -4
  36. package/dist/test/sourcefile.test.js +2 -2
  37. package/dist/test/using.test.js +4 -4
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +3 -4
  40. package/src/components/{ClassDeclaration.tsx → Class.tsx} +38 -116
  41. package/src/components/ClassMethod.tsx +7 -70
  42. package/src/components/{EnumDeclaration.tsx → Enum.tsx} +3 -22
  43. package/src/components/Parameters.tsx +51 -0
  44. package/src/components/SourceFile.tsx +0 -1
  45. package/src/components/index.ts +4 -14
  46. package/src/components/stc/index.ts +2 -2
  47. package/src/modifiers.ts +30 -16
  48. package/src/name-policy.ts +0 -5
  49. package/temp/api.json +1194 -6218
  50. package/test/class-method.test.tsx +3 -19
  51. package/test/class.test.tsx +257 -0
  52. package/test/enum.test.tsx +11 -13
  53. package/test/namespace.test.tsx +4 -4
  54. package/test/{project-directory.test.tsx → projectdirectory.test.tsx} +4 -4
  55. package/test/sourcefile.test.tsx +2 -2
  56. package/test/using.test.tsx +6 -14
  57. package/vitest.config.ts +0 -3
  58. package/dist/src/components/ClassDeclaration.d.ts +0 -92
  59. package/dist/src/components/ClassDeclaration.d.ts.map +0 -1
  60. package/dist/src/components/EnumDeclaration.d.ts +0 -34
  61. package/dist/src/components/EnumDeclaration.d.ts.map +0 -1
  62. package/dist/src/components/attributes/attributes.d.ts +0 -39
  63. package/dist/src/components/attributes/attributes.d.ts.map +0 -1
  64. package/dist/src/components/attributes/attributes.js +0 -62
  65. package/dist/src/components/attributes/attributes.test.d.ts +0 -2
  66. package/dist/src/components/attributes/attributes.test.d.ts.map +0 -1
  67. package/dist/src/components/attributes/attributes.test.js +0 -75
  68. package/dist/src/components/doc/comment.d.ts +0 -70
  69. package/dist/src/components/doc/comment.d.ts.map +0 -1
  70. package/dist/src/components/doc/comment.js +0 -88
  71. package/dist/src/components/doc/comment.test.d.ts +0 -2
  72. package/dist/src/components/doc/comment.test.d.ts.map +0 -1
  73. package/dist/src/components/doc/comment.test.js +0 -348
  74. package/dist/src/components/doc/from-markdown.d.ts +0 -6
  75. package/dist/src/components/doc/from-markdown.d.ts.map +0 -1
  76. package/dist/src/components/doc/from-markdown.js +0 -58
  77. package/dist/src/components/doc/from-markdown.test.d.ts +0 -2
  78. package/dist/src/components/doc/from-markdown.test.d.ts.map +0 -1
  79. package/dist/src/components/doc/from-markdown.test.js +0 -83
  80. package/dist/src/components/interface/declaration.d.ts +0 -65
  81. package/dist/src/components/interface/declaration.d.ts.map +0 -1
  82. package/dist/src/components/interface/declaration.js +0 -83
  83. package/dist/src/components/interface/declaration.test.d.ts +0 -2
  84. package/dist/src/components/interface/declaration.test.d.ts.map +0 -1
  85. package/dist/src/components/interface/declaration.test.js +0 -171
  86. package/dist/src/components/interface/method.d.ts +0 -50
  87. package/dist/src/components/interface/method.d.ts.map +0 -1
  88. package/dist/src/components/interface/method.js +0 -74
  89. package/dist/src/components/interface/method.test.d.ts +0 -2
  90. package/dist/src/components/interface/method.test.d.ts.map +0 -1
  91. package/dist/src/components/interface/method.test.js +0 -300
  92. package/dist/src/components/interface/property.d.ts +0 -56
  93. package/dist/src/components/interface/property.d.ts.map +0 -1
  94. package/dist/src/components/interface/property.js +0 -73
  95. package/dist/src/components/interface/property.test.d.ts +0 -2
  96. package/dist/src/components/interface/property.test.d.ts.map +0 -1
  97. package/dist/src/components/interface/property.test.js +0 -189
  98. package/dist/src/components/parameters/parameters.d.ts +0 -19
  99. package/dist/src/components/parameters/parameters.d.ts.map +0 -1
  100. package/dist/src/components/parameters/parameters.js +0 -43
  101. package/dist/src/components/property/property.d.ts +0 -80
  102. package/dist/src/components/property/property.d.ts.map +0 -1
  103. package/dist/src/components/property/property.js +0 -76
  104. package/dist/src/components/property/property.test.d.ts +0 -2
  105. package/dist/src/components/property/property.test.d.ts.map +0 -1
  106. package/dist/src/components/property/property.test.js +0 -242
  107. package/dist/src/components/record/declaration.d.ts +0 -35
  108. package/dist/src/components/record/declaration.d.ts.map +0 -1
  109. package/dist/src/components/record/declaration.js +0 -90
  110. package/dist/src/components/record/declaration.test.d.ts +0 -2
  111. package/dist/src/components/record/declaration.test.d.ts.map +0 -1
  112. package/dist/src/components/record/declaration.test.js +0 -94
  113. package/dist/src/components/type-parameters/type-parameter-constraints.d.ts +0 -8
  114. package/dist/src/components/type-parameters/type-parameter-constraints.d.ts.map +0 -1
  115. package/dist/src/components/type-parameters/type-parameter-constraints.js +0 -44
  116. package/dist/src/components/type-parameters/type-parameter-constraints.test.d.ts +0 -2
  117. package/dist/src/components/type-parameters/type-parameter-constraints.test.d.ts.map +0 -1
  118. package/dist/src/components/type-parameters/type-parameter-constraints.test.js +0 -67
  119. package/dist/src/components/type-parameters/type-parameter.d.ts +0 -20
  120. package/dist/src/components/type-parameters/type-parameter.d.ts.map +0 -1
  121. package/dist/src/components/type-parameters/type-parameter.js +0 -22
  122. package/dist/src/components/type-parameters/type-parameters.d.ts +0 -17
  123. package/dist/src/components/type-parameters/type-parameters.d.ts.map +0 -1
  124. package/dist/src/components/type-parameters/type-parameters.js +0 -54
  125. package/dist/src/components/type-parameters/type-parameters.test.d.ts +0 -2
  126. package/dist/src/components/type-parameters/type-parameters.test.d.ts.map +0 -1
  127. package/dist/src/components/type-parameters/type-parameters.test.js +0 -48
  128. package/dist/src/components/var/declaration.d.ts +0 -35
  129. package/dist/src/components/var/declaration.d.ts.map +0 -1
  130. package/dist/src/components/var/declaration.js +0 -40
  131. package/dist/src/components/var/declaration.test.d.ts +0 -2
  132. package/dist/src/components/var/declaration.test.d.ts.map +0 -1
  133. package/dist/src/components/var/declaration.test.js +0 -73
  134. package/dist/test/class-declaration.test.d.ts +0 -2
  135. package/dist/test/class-declaration.test.d.ts.map +0 -1
  136. package/dist/test/project-directory.test.d.ts +0 -2
  137. package/dist/test/project-directory.test.d.ts.map +0 -1
  138. package/dist/test/vitest.setup.d.ts +0 -2
  139. package/dist/test/vitest.setup.d.ts.map +0 -1
  140. package/dist/test/vitest.setup.js +0 -1
  141. package/src/components/attributes/attributes.test.tsx +0 -61
  142. package/src/components/attributes/attributes.tsx +0 -100
  143. package/src/components/doc/comment.test.tsx +0 -337
  144. package/src/components/doc/comment.tsx +0 -152
  145. package/src/components/doc/from-markdown.test.tsx +0 -103
  146. package/src/components/doc/from-markdown.tsx +0 -58
  147. package/src/components/interface/declaration.test.tsx +0 -158
  148. package/src/components/interface/declaration.tsx +0 -125
  149. package/src/components/interface/method.test.tsx +0 -293
  150. package/src/components/interface/method.tsx +0 -122
  151. package/src/components/interface/property.test.tsx +0 -165
  152. package/src/components/interface/property.tsx +0 -127
  153. package/src/components/parameters/parameters.tsx +0 -74
  154. package/src/components/property/property.test.tsx +0 -209
  155. package/src/components/property/property.tsx +0 -172
  156. package/src/components/record/declaration.test.tsx +0 -73
  157. package/src/components/record/declaration.tsx +0 -109
  158. package/src/components/type-parameters/type-parameter-constraints.test.tsx +0 -93
  159. package/src/components/type-parameters/type-parameter-constraints.tsx +0 -46
  160. package/src/components/type-parameters/type-parameter.tsx +0 -35
  161. package/src/components/type-parameters/type-parameters.test.tsx +0 -46
  162. package/src/components/type-parameters/type-parameters.tsx +0 -63
  163. package/src/components/var/declaration.test.tsx +0 -59
  164. package/src/components/var/declaration.tsx +0 -47
  165. package/test/class-declaration.test.tsx +0 -430
  166. package/test/vitest.setup.ts +0 -1
@@ -1,58 +0,0 @@
1
- import { memo as _$memo, createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
- import { marked } from "marked";
3
- import { DocC, DocCode, DocList, DocSee } from "./comment.js";
4
- /** Convert markdown to a Csharp doc comment */
5
- export function DocFromMarkdown(props) {
6
- const tokens = marked.lexer(props.markdown);
7
- return renderTokens(tokens);
8
- }
9
- function renderTokens(tokens) {
10
- return [_$memo(() => tokens.map((token, index) => [_$createComponent(DocFromMarkedToken, {
11
- token: token
12
- }), _$memo(() => _$memo(() => !!(token.type === "paragraph" && index !== tokens.length - 1))() && _$createIntrinsic("br", {}))]))];
13
- }
14
- function DocFromMarkedToken(props) {
15
- const {
16
- token
17
- } = props;
18
- switch (token.type) {
19
- case "paragraph":
20
- return token.tokens ? renderTokens(token.tokens) : null;
21
- case "code":
22
- return _$createComponent(DocCode, {
23
- get children() {
24
- return token.text;
25
- }
26
- });
27
- case "codespan":
28
- return _$createComponent(DocC, {
29
- get children() {
30
- return token.text;
31
- }
32
- });
33
- case "list":
34
- return _$createComponent(DocList, {
35
- get type() {
36
- return token.ordered ? "number" : "bullet";
37
- },
38
- get items() {
39
- return token.items.map(x => [_$memo(() => renderTokens(x.tokens))]);
40
- }
41
- });
42
- case "link":
43
- return _$createComponent(DocSee, {
44
- get href() {
45
- return token.href;
46
- },
47
- get children() {
48
- return _$memo(() => !!token.tokens)() && renderTokens(token.tokens);
49
- }
50
- });
51
- case "strong":
52
- case "em":
53
- return token.text;
54
- case "text":
55
- default:
56
- return token.raw;
57
- }
58
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=from-markdown.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"from-markdown.test.d.ts","sourceRoot":"","sources":["../../../../src/components/doc/from-markdown.test.tsx"],"names":[],"mappings":""}
@@ -1,83 +0,0 @@
1
- import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
- import { d } from "@alloy-js/core/testing";
3
- import { describe, expect, it } from "vitest";
4
- import { DocFromMarkdown } from "./from-markdown.js";
5
- it("convert code block to <code>", () => {
6
- expect(_$createComponent(DocFromMarkdown, {
7
- markdown: d`
8
- Some markdown with code
9
- \`\`\`csharp
10
- var foo = "bar";
11
- \`\`\`
12
- `
13
- })).toRenderTo(`
14
- Some markdown with code
15
- <code>
16
- var foo = "bar";
17
- </code>
18
- `);
19
- });
20
- it("convert inline code block to <c>", () => {
21
- expect(_$createComponent(DocFromMarkdown, {
22
- markdown: d`
23
- Some markdown with \`inline\` code
24
- `
25
- })).toRenderTo(`
26
- Some markdown with <c>inline</c> code
27
- `);
28
- });
29
- it("convert link to <see>", () => {
30
- expect(_$createComponent(DocFromMarkdown, {
31
- markdown: d`
32
- Some markdown with [link](https://example.com)
33
- `
34
- })).toRenderTo(`
35
- Some markdown with <see href="https://example.com">link</see>
36
- `);
37
- });
38
- it("convert bullet list to <list>", () => {
39
- expect(_$createComponent(DocFromMarkdown, {
40
- markdown: d`
41
- - Item 1
42
- - Item 2
43
- - Item 3
44
- `
45
- })).toRenderTo(`
46
- <list type="bullet">
47
- <item><description>Item 1</description></item>
48
- <item><description>Item 2</description></item>
49
- <item><description>Item 3</description></item>
50
- </list>
51
- `);
52
- });
53
- it("convert numbered list to <list>", () => {
54
- expect(_$createComponent(DocFromMarkdown, {
55
- markdown: d`
56
- 1. Item 1
57
- 2. Item 2
58
- 3. Item 3
59
- `
60
- })).toRenderTo(`
61
- <list type="number">
62
- <item><description>Item 1</description></item>
63
- <item><description>Item 2</description></item>
64
- <item><description>Item 3</description></item>
65
- </list>
66
- `);
67
- });
68
- describe("strip unsupported elements", () => {
69
- it("bold", () => {
70
- expect(_$createComponent(DocFromMarkdown, {
71
- markdown: d`
72
- Some markdown with **bold** text
73
- `
74
- })).toRenderTo(`Some markdown with bold text`);
75
- });
76
- it("italic", () => {
77
- expect(_$createComponent(DocFromMarkdown, {
78
- markdown: d`
79
- Some markdown with *italic* text
80
- `
81
- })).toRenderTo(`Some markdown with italic text`);
82
- });
83
- });
@@ -1,65 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { AccessModifiers } from "../../modifiers.js";
3
- import { AttributesProp } from "../attributes/attributes.jsx";
4
- import { TypeParameterProps } from "../type-parameters/type-parameter.jsx";
5
- export interface InterfaceModifiers {
6
- readonly partial?: boolean;
7
- }
8
- export interface InterfaceDeclarationProps extends Omit<core.DeclarationProps, "nameKind">, AccessModifiers, InterfaceModifiers {
9
- name: string;
10
- /** Doc comment */
11
- doc?: core.Children;
12
- refkey?: core.Refkey;
13
- /**
14
- * Type parameters for the interface
15
- *
16
- * @example
17
- * ```tsx
18
- * <InterfaceDeclaration name="IList" typeParameters={["T"]} />
19
- * ```
20
- * This will produce:
21
- * ```csharp
22
- * public interface IList<T>
23
- * ```
24
- */
25
- typeParameters?: (TypeParameterProps | string)[];
26
- /**
27
- * Define attributes to attach
28
- * @example
29
- * ```tsx
30
- * <InterfaceDeclaration name="MyInterface" attributes={[
31
- * <Attribute name="Test" />
32
- * <Attribute name="Test2" args={["arg1", "arg2"]} />
33
- * ]} />
34
- * ```
35
- * This will produce:
36
- * ```csharp
37
- * [Test]
38
- * [Test2("arg1", "arg2")]
39
- * public interface MyInterface
40
- * ```
41
- */
42
- attributes?: AttributesProp;
43
- }
44
- /**
45
- * CSharp interface declaration.
46
- * @example
47
- * ```tsx
48
- * <InterfaceDeclaration public name="IMyInterface">
49
- * <InterfaceMember public name="MyProperty" type="int" />
50
- * <InterfaceMethod public name="MyMethod" returnType="void">
51
- * <Parameter name="value" type="int" />
52
- * </InterfaceMethod>
53
- * </InterfaceDeclaration>
54
- * ```
55
- * This will produce:
56
- * ```csharp
57
- * public interface MyIface
58
- * {
59
- * public int MyProperty { get; set; }
60
- * public void MyMethod(int value);
61
- * }
62
- * ```
63
- */
64
- export declare function InterfaceDeclaration(props: InterfaceDeclarationProps): core.Children;
65
- //# sourceMappingURL=declaration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"declaration.d.ts","sourceRoot":"","sources":["../../../../src/components/interface/declaration.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,eAAe,EAIhB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAiB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAKD,MAAM,WAAW,yBACf,SAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAC7C,eAAe,EACf,kBAAkB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,kBAAkB;IAClB,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IAErB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC;IAEjD;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,iBAqCpE"}
@@ -1,83 +0,0 @@
1
- import { createComponent as _$createComponent, memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
- import * as core from "@alloy-js/core";
3
- import { computeModifiersPrefix, getAccessModifier, makeModifiers } from "../../modifiers.js";
4
- import { useCSharpNamePolicy } from "../../name-policy.js";
5
- import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
6
- import { CSharpMemberScope } from "../../symbols/scopes.js";
7
- import { AttributeList } from "../attributes/attributes.js";
8
- import { DocWhen } from "../doc/comment.js";
9
- import { Name } from "../Name.js";
10
- import { TypeParameterConstraints } from "../type-parameters/type-parameter-constraints.js";
11
- import { TypeParameters } from "../type-parameters/type-parameters.js";
12
- const getInterfaceModifiers = makeModifiers(["partial"]);
13
-
14
- // properties for creating a class
15
-
16
- /**
17
- * CSharp interface declaration.
18
- * @example
19
- * ```tsx
20
- * <InterfaceDeclaration public name="IMyInterface">
21
- * <InterfaceMember public name="MyProperty" type="int" />
22
- * <InterfaceMethod public name="MyMethod" returnType="void">
23
- * <Parameter name="value" type="int" />
24
- * </InterfaceMethod>
25
- * </InterfaceDeclaration>
26
- * ```
27
- * This will produce:
28
- * ```csharp
29
- * public interface MyIface
30
- * {
31
- * public int MyProperty { get; set; }
32
- * public void MyMethod(int value);
33
- * }
34
- * ```
35
- */
36
- export function InterfaceDeclaration(props) {
37
- const name = useCSharpNamePolicy().getName(props.name, "interface");
38
- const thisInterfaceSymbol = new CSharpOutputSymbol(name, {
39
- refkeys: props.refkey
40
- });
41
-
42
- // this creates a new scope for the interface definition.
43
- // members will automatically "inherit" this scope so
44
- // that refkeys to them will produce the fully-qualified
45
- // name e.g. Foo.Bar.
46
- const thisInterfaceScope = new CSharpMemberScope("interface-decl", {
47
- owner: thisInterfaceSymbol
48
- });
49
- const modifiers = computeModifiersPrefix([getAccessModifier(props), getInterfaceModifiers(props)]);
50
- return _$createComponent(core.Declaration, {
51
- symbol: thisInterfaceSymbol,
52
- get children() {
53
- return [_$createComponent(DocWhen, {
54
- get doc() {
55
- return props.doc;
56
- }
57
- }), _$createComponent(AttributeList, {
58
- get attributes() {
59
- return props.attributes;
60
- },
61
- endline: true
62
- }), modifiers, "interface ", _$createComponent(Name, {}), _$memo(() => _$memo(() => !!props.typeParameters)() && _$createComponent(TypeParameters, {
63
- get parameters() {
64
- return props.typeParameters;
65
- }
66
- })), _$memo(() => _$memo(() => !!props.typeParameters)() && _$createComponent(TypeParameterConstraints, {
67
- get parameters() {
68
- return props.typeParameters;
69
- }
70
- })), _$memo(() => _$memo(() => !!props.children)() ? _$createComponent(core.Block, {
71
- newline: true,
72
- get children() {
73
- return _$createComponent(core.Scope, {
74
- value: thisInterfaceScope,
75
- get children() {
76
- return props.children;
77
- }
78
- });
79
- }
80
- }) : ";")];
81
- }
82
- });
83
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=declaration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"declaration.test.d.ts","sourceRoot":"","sources":["../../../../src/components/interface/declaration.test.tsx"],"names":[],"mappings":""}
@@ -1,171 +0,0 @@
1
- import { createComponent as _$createComponent, mergeProps as _$mergeProps } from "@alloy-js/core/jsx-runtime";
2
- import { List, refkey } from "@alloy-js/core";
3
- import { describe, expect, it } from "vitest";
4
- import { TestNamespace } from "../../../test/utils.js";
5
- import { Attribute } from "../attributes/attributes.js";
6
- import { SourceFile } from "../SourceFile.js";
7
- import { InterfaceDeclaration } from "./declaration.js";
8
- import { InterfaceProperty } from "./property.js";
9
- it("declares class with no members", () => {
10
- expect(_$createComponent(TestNamespace, {
11
- get children() {
12
- return _$createComponent(InterfaceDeclaration, {
13
- name: "TestInterface"
14
- });
15
- }
16
- })).toRenderTo(`
17
- interface TestInterface;
18
- `);
19
- });
20
- describe("modifiers", () => {
21
- it.each(["public", "private", "internal"])("%s", mod => {
22
- expect(_$createComponent(TestNamespace, {
23
- get children() {
24
- return _$createComponent(InterfaceDeclaration, _$mergeProps({
25
- [mod]: true
26
- }, {
27
- name: "TestInterface"
28
- }));
29
- }
30
- })).toRenderTo(`
31
- ${mod} interface TestInterface;
32
- `);
33
- });
34
- it.each(["partial"])("%s", mod => {
35
- expect(_$createComponent(TestNamespace, {
36
- get children() {
37
- return _$createComponent(InterfaceDeclaration, _$mergeProps({
38
- [mod]: true
39
- }, {
40
- name: "TestInterface"
41
- }));
42
- }
43
- })).toRenderTo(`
44
- ${mod} interface TestInterface;
45
- `);
46
- });
47
- it("combines modifiers", () => {
48
- expect(_$createComponent(TestNamespace, {
49
- get children() {
50
- return _$createComponent(InterfaceDeclaration, {
51
- "public": true,
52
- partial: true,
53
- name: "TestInterface"
54
- });
55
- }
56
- })).toRenderTo(`
57
- public partial interface TestInterface;
58
- `);
59
- });
60
- });
61
- it("specify doc comment", () => {
62
- expect(_$createComponent(TestNamespace, {
63
- get children() {
64
- return _$createComponent(InterfaceDeclaration, {
65
- name: "TestInterface",
66
- doc: "This is a test"
67
- });
68
- }
69
- })).toRenderTo(`
70
- /// This is a test
71
- interface TestInterface;
72
- `);
73
- });
74
- describe("with type parameters", () => {
75
- it("reference parameters", () => {
76
- const typeParameters = [{
77
- name: "T",
78
- refkey: refkey()
79
- }, {
80
- name: "U",
81
- refkey: refkey()
82
- }];
83
- expect(_$createComponent(TestNamespace, {
84
- get children() {
85
- return _$createComponent(SourceFile, {
86
- path: "Test.cs",
87
- get children() {
88
- return _$createComponent(InterfaceDeclaration, {
89
- "public": true,
90
- name: "Test",
91
- typeParameters: typeParameters,
92
- get children() {
93
- return _$createComponent(List, {
94
- get children() {
95
- return [_$createComponent(InterfaceProperty, {
96
- name: "PropA",
97
- get type() {
98
- return typeParameters[0].refkey;
99
- },
100
- get: true,
101
- set: true
102
- }), _$createComponent(InterfaceProperty, {
103
- name: "PropB",
104
- get type() {
105
- return typeParameters[1].refkey;
106
- },
107
- get: true,
108
- set: true
109
- })];
110
- }
111
- });
112
- }
113
- });
114
- }
115
- });
116
- }
117
- })).toRenderTo(`
118
- namespace TestCode
119
- {
120
- public interface Test<T, U>
121
- {
122
- T PropA { get; set; }
123
- U PropB { get; set; }
124
- }
125
- }
126
- `);
127
- });
128
- it("defines with constraints", () => {
129
- const typeParameters = [{
130
- name: "T",
131
- constraints: "IFoo"
132
- }, {
133
- name: "U",
134
- constraints: "IBar"
135
- }];
136
- expect(_$createComponent(TestNamespace, {
137
- get children() {
138
- return _$createComponent(InterfaceDeclaration, {
139
- "public": true,
140
- name: "Test",
141
- typeParameters: typeParameters,
142
- children: "// Body"
143
- });
144
- }
145
- })).toRenderTo(`
146
- public interface Test<T, U>
147
- where T : IFoo
148
- where U : IBar
149
- {
150
- // Body
151
- }
152
- `);
153
- });
154
- });
155
- it("specify attributes", () => {
156
- expect(_$createComponent(TestNamespace, {
157
- get children() {
158
- return _$createComponent(InterfaceDeclaration, {
159
- name: "Test",
160
- get attributes() {
161
- return [_$createComponent(Attribute, {
162
- name: "Test"
163
- })];
164
- }
165
- });
166
- }
167
- })).toRenderTo(`
168
- [Test]
169
- interface Test;
170
- `);
171
- });
@@ -1,50 +0,0 @@
1
- import { Children, Refkey } from "@alloy-js/core";
2
- import { AccessModifiers } from "../../modifiers.js";
3
- import { AttributesProp } from "../attributes/attributes.jsx";
4
- import { ParameterProps } from "../parameters/parameters.jsx";
5
- import { TypeParameterProps } from "../type-parameters/type-parameter.jsx";
6
- /** Method modifiers. Can only be one. */
7
- export interface InterfaceMethodModifiers {
8
- readonly new?: boolean;
9
- }
10
- export interface InterfaceMethodProps extends AccessModifiers, InterfaceMethodModifiers {
11
- name: string;
12
- refkey?: Refkey;
13
- children?: Children;
14
- parameters?: Array<ParameterProps>;
15
- /**
16
- * Type parameters for the method
17
- *
18
- * @example
19
- * ```tsx
20
- * <InterfaceMethod name="Test" typeParameters={["T"]} />
21
- * ```
22
- * This will produce:
23
- * ```csharp
24
- * public void Test<T>()
25
- * ```
26
- */
27
- typeParameters?: (TypeParameterProps | string)[];
28
- returns?: Children;
29
- /** Doc comment */
30
- doc?: Children;
31
- /**
32
- * Define attributes to attach
33
- * @example
34
- * ```tsx
35
- * <InterfaceMethod name="MyMethod" attributes={[
36
- * <Attribute name="Test" />
37
- * <Attribute name="Test2" args={["arg1", "arg2"]} />
38
- * ]} />
39
- * ```
40
- * This will produce:
41
- * ```csharp
42
- * [Test]
43
- * [Test2("arg1", "arg2")]
44
- * void MyMethod();
45
- * ```
46
- */
47
- attributes?: AttributesProp;
48
- }
49
- export declare function InterfaceMethod(props: InterfaceMethodProps): Children;
50
- //# sourceMappingURL=method.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"method.d.ts","sourceRoot":"","sources":["../../../../src/components/interface/method.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAGR,MAAM,EAEP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,eAAe,EAIhB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAiB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAc,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E,yCAAyC;AACzC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAKD,MAAM,WAAW,oBACf,SAAQ,eAAe,EACrB,wBAAwB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC;IACjD,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB,kBAAkB;IAClB,GAAG,CAAC,EAAE,QAAQ,CAAC;IAEf;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,YA4C1D"}
@@ -1,74 +0,0 @@
1
- import { createComponent as _$createComponent, memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
- import { Block, MemberDeclaration, refkey, Scope } from "@alloy-js/core";
3
- import { computeModifiersPrefix, getAccessModifier, makeModifiers } from "../../modifiers.js";
4
- import { useCSharpNamePolicy } from "../../name-policy.js";
5
- import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
6
- import { CSharpMemberScope, useCSharpScope } from "../../symbols/scopes.js";
7
- import { AttributeList } from "../attributes/attributes.js";
8
- import { DocWhen } from "../doc/comment.js";
9
- import { Parameters } from "../parameters/parameters.js";
10
- import { TypeParameterConstraints } from "../type-parameters/type-parameter-constraints.js";
11
- import { TypeParameters } from "../type-parameters/type-parameters.js";
12
-
13
- /** Method modifiers. Can only be one. */
14
-
15
- const getMethodModifier = makeModifiers(["new"]);
16
-
17
- // properties for creating a method
18
-
19
- // a C# interface method
20
- export function InterfaceMethod(props) {
21
- const name = useCSharpNamePolicy().getName(props.name, "class-method");
22
- const scope = useCSharpScope();
23
- if (scope.kind !== "member" || scope.name !== "interface-decl") {
24
- throw new Error("can't define an interface method outside of an interface scope");
25
- }
26
- const methodSymbol = new CSharpOutputSymbol(name, {
27
- scope,
28
- refkeys: props.refkey ?? refkey(props.name)
29
- });
30
-
31
- // scope for method declaration
32
- const methodScope = new CSharpMemberScope("method-decl", {
33
- owner: methodSymbol
34
- });
35
- const modifiers = computeModifiersPrefix([getAccessModifier(props), getMethodModifier(props)]);
36
- // note that scope wraps the method decl so that the params get the correct scope
37
- return _$createComponent(MemberDeclaration, {
38
- symbol: methodSymbol,
39
- get children() {
40
- return _$createComponent(Scope, {
41
- value: methodScope,
42
- get children() {
43
- return [_$createComponent(DocWhen, {
44
- get doc() {
45
- return props.doc;
46
- }
47
- }), _$createComponent(AttributeList, {
48
- get attributes() {
49
- return props.attributes;
50
- },
51
- endline: true
52
- }), modifiers, _$memo(() => props.returns ?? "void"), " ", name, _$memo(() => _$memo(() => !!props.typeParameters)() && _$createComponent(TypeParameters, {
53
- get parameters() {
54
- return props.typeParameters;
55
- }
56
- })), _$createComponent(Parameters, {
57
- get parameters() {
58
- return props.parameters;
59
- }
60
- }), _$memo(() => _$memo(() => !!props.typeParameters)() && _$createComponent(TypeParameterConstraints, {
61
- get parameters() {
62
- return props.typeParameters;
63
- }
64
- })), _$memo(() => _$memo(() => !!props.children)() ? _$createComponent(Block, {
65
- newline: true,
66
- get children() {
67
- return props.children;
68
- }
69
- }) : ";")];
70
- }
71
- });
72
- }
73
- });
74
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=method.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"method.test.d.ts","sourceRoot":"","sources":["../../../../src/components/interface/method.test.tsx"],"names":[],"mappings":""}