@alloy-js/go 0.3.0-dev.2 → 0.3.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 (210) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/dev/src/builtins/fmt/fmt.js +148 -0
  3. package/dist/dev/src/builtins/fmt/fmt.js.map +1 -0
  4. package/dist/dev/src/builtins/index.js +11 -0
  5. package/dist/dev/src/builtins/index.js.map +1 -0
  6. package/dist/dev/src/builtins/io/io.js +650 -0
  7. package/dist/dev/src/builtins/io/io.js.map +1 -0
  8. package/dist/dev/src/builtins/net/net.js +1212 -0
  9. package/dist/dev/src/builtins/net/net.js.map +1 -0
  10. package/dist/dev/src/builtins/time/time.js +464 -0
  11. package/dist/dev/src/builtins/time/time.js.map +1 -0
  12. package/dist/dev/src/components/ImportStatement.js +114 -0
  13. package/dist/dev/src/components/ImportStatement.js.map +1 -0
  14. package/dist/dev/src/components/ModuleDirectory.js +28 -0
  15. package/dist/dev/src/components/ModuleDirectory.js.map +1 -0
  16. package/dist/dev/src/components/Name.js +12 -0
  17. package/dist/dev/src/components/Name.js.map +1 -0
  18. package/dist/dev/src/components/Reference.js +15 -0
  19. package/dist/dev/src/components/Reference.js.map +1 -0
  20. package/dist/dev/src/components/SourceDirectory.js +38 -0
  21. package/dist/dev/src/components/SourceDirectory.js.map +1 -0
  22. package/dist/dev/src/components/SourceFile.js +119 -0
  23. package/dist/dev/src/components/SourceFile.js.map +1 -0
  24. package/dist/dev/src/components/doc/comment.js +46 -0
  25. package/dist/dev/src/components/doc/comment.js.map +1 -0
  26. package/dist/dev/src/components/doc/comment.test.js +371 -0
  27. package/dist/dev/src/components/doc/comment.test.js.map +1 -0
  28. package/dist/dev/src/components/function/function.js +250 -0
  29. package/dist/dev/src/components/function/function.js.map +1 -0
  30. package/dist/dev/src/components/function/function.test.js +630 -0
  31. package/dist/dev/src/components/function/function.test.js.map +1 -0
  32. package/dist/dev/src/components/index.js +16 -0
  33. package/dist/dev/src/components/index.js.map +1 -0
  34. package/dist/dev/src/components/interface/declaration.js +245 -0
  35. package/dist/dev/src/components/interface/declaration.js.map +1 -0
  36. package/dist/dev/src/components/interface/interface.test.js +853 -0
  37. package/dist/dev/src/components/interface/interface.test.js.map +1 -0
  38. package/dist/dev/src/components/package.test.js +137 -0
  39. package/dist/dev/src/components/package.test.js.map +1 -0
  40. package/dist/dev/src/components/parameters/parameters.js +102 -0
  41. package/dist/dev/src/components/parameters/parameters.js.map +1 -0
  42. package/dist/dev/src/components/parameters/typeparameters.js +93 -0
  43. package/dist/dev/src/components/parameters/typeparameters.js.map +1 -0
  44. package/dist/dev/src/components/pointer/pointer.js +8 -0
  45. package/dist/dev/src/components/pointer/pointer.js.map +1 -0
  46. package/dist/dev/src/components/stc/index.js +27 -0
  47. package/dist/dev/src/components/stc/index.js.map +1 -0
  48. package/dist/dev/src/components/struct/declaration.js +213 -0
  49. package/dist/dev/src/components/struct/declaration.js.map +1 -0
  50. package/dist/dev/src/components/struct/struct.test.js +1261 -0
  51. package/dist/dev/src/components/struct/struct.test.js.map +1 -0
  52. package/dist/dev/src/components/type/declaration.js +112 -0
  53. package/dist/dev/src/components/type/declaration.js.map +1 -0
  54. package/dist/dev/src/components/var/declaration.js +136 -0
  55. package/dist/dev/src/components/var/declaration.js.map +1 -0
  56. package/dist/dev/src/components/var/var-declaration.test.js +564 -0
  57. package/dist/dev/src/components/var/var-declaration.test.js.map +1 -0
  58. package/dist/dev/src/context/package.js +6 -0
  59. package/dist/dev/src/context/package.js.map +1 -0
  60. package/dist/dev/src/create-module.js +157 -0
  61. package/dist/dev/src/create-module.js.map +1 -0
  62. package/dist/dev/src/create-module.test.js +175 -0
  63. package/dist/dev/src/create-module.test.js.map +1 -0
  64. package/dist/dev/src/index.js +7 -0
  65. package/dist/dev/src/index.js.map +1 -0
  66. package/dist/dev/src/name-policy.js +27 -0
  67. package/dist/dev/src/name-policy.js.map +1 -0
  68. package/dist/dev/src/scopes/contexts.js +34 -0
  69. package/dist/dev/src/scopes/contexts.js.map +1 -0
  70. package/dist/dev/src/scopes/factories.js +17 -0
  71. package/dist/dev/src/scopes/factories.js.map +1 -0
  72. package/dist/dev/src/scopes/function.js +14 -0
  73. package/dist/dev/src/scopes/function.js.map +1 -0
  74. package/dist/dev/src/scopes/go.js +12 -0
  75. package/dist/dev/src/scopes/go.js.map +1 -0
  76. package/dist/dev/src/scopes/index.js +10 -0
  77. package/dist/dev/src/scopes/index.js.map +1 -0
  78. package/dist/dev/src/scopes/lexical.js +11 -0
  79. package/dist/dev/src/scopes/lexical.js.map +1 -0
  80. package/dist/dev/src/scopes/module.js +31 -0
  81. package/dist/dev/src/scopes/module.js.map +1 -0
  82. package/dist/dev/src/scopes/named-type.js +33 -0
  83. package/dist/dev/src/scopes/named-type.js.map +1 -0
  84. package/dist/dev/src/scopes/package.js +39 -0
  85. package/dist/dev/src/scopes/package.js.map +1 -0
  86. package/dist/dev/src/scopes/source-file.js +43 -0
  87. package/dist/dev/src/scopes/source-file.js.map +1 -0
  88. package/dist/dev/src/symbols/factories.js +165 -0
  89. package/dist/dev/src/symbols/factories.js.map +1 -0
  90. package/dist/dev/src/symbols/function.js +24 -0
  91. package/dist/dev/src/symbols/function.js.map +1 -0
  92. package/dist/dev/src/symbols/go.js +60 -0
  93. package/dist/dev/src/symbols/go.js.map +1 -0
  94. package/dist/dev/src/symbols/index.js +7 -0
  95. package/dist/dev/src/symbols/index.js.map +1 -0
  96. package/dist/dev/src/symbols/named-type.js +42 -0
  97. package/dist/dev/src/symbols/named-type.js.map +1 -0
  98. package/dist/dev/src/symbols/package.js +39 -0
  99. package/dist/dev/src/symbols/package.js.map +1 -0
  100. package/dist/dev/src/symbols/reference.js +76 -0
  101. package/dist/dev/src/symbols/reference.js.map +1 -0
  102. package/dist/dev/src/symbols/type-parameter.js +16 -0
  103. package/dist/dev/src/symbols/type-parameter.js.map +1 -0
  104. package/dist/dev/test/utils.js +92 -0
  105. package/dist/dev/test/utils.js.map +1 -0
  106. package/dist/dev/test/vitest.setup.js +2 -0
  107. package/dist/dev/test/vitest.setup.js.map +1 -0
  108. package/dist/tsconfig.tsbuildinfo +1 -1
  109. package/docs/api/components/FunctionDeclaration.md +53 -0
  110. package/docs/api/components/FunctionParameter.md +40 -0
  111. package/docs/api/components/FunctionParameters.md +29 -0
  112. package/docs/api/components/FunctionReceiver.md +38 -0
  113. package/docs/api/components/ImportStatements.md +25 -0
  114. package/docs/api/components/InterfaceDeclaration.md +54 -0
  115. package/docs/api/components/InterfaceEmbed.md +29 -0
  116. package/docs/api/components/InterfaceFunction.md +41 -0
  117. package/docs/api/components/InterfaceTypeDeclaration.md +56 -0
  118. package/docs/api/components/LineComment.md +29 -0
  119. package/docs/api/components/ModuleDirectory.md +29 -0
  120. package/docs/api/components/Name.md +19 -0
  121. package/docs/api/components/Pointer.md +29 -0
  122. package/docs/api/components/Reference.md +25 -0
  123. package/docs/api/components/SingleImportStatement.md +35 -0
  124. package/docs/api/components/SourceDirectory.md +27 -0
  125. package/docs/api/components/SourceFile.md +44 -0
  126. package/docs/api/components/StructDeclaration.md +51 -0
  127. package/docs/api/components/StructEmbed.md +29 -0
  128. package/docs/api/components/StructMember.md +41 -0
  129. package/docs/api/components/StructTypeDeclaration.md +56 -0
  130. package/docs/api/components/TypeConstraint.md +28 -0
  131. package/docs/api/components/TypeDeclaration.md +47 -0
  132. package/docs/api/components/TypeDeclarationGroup.md +27 -0
  133. package/docs/api/components/TypeParameter.md +37 -0
  134. package/docs/api/components/TypeParameters.md +25 -0
  135. package/docs/api/components/VariableDeclaration.md +44 -0
  136. package/docs/api/components/VariableDeclarationGroup.md +28 -0
  137. package/docs/api/components/index.md +30 -0
  138. package/docs/api/contexts/TypeDeclarationGroup-context.md +17 -0
  139. package/docs/api/contexts/VariableDeclarationGroup-context.md +18 -0
  140. package/docs/api/contexts/index.md +4 -0
  141. package/docs/api/functions/createAnonymousTypeSymbol.md +25 -0
  142. package/docs/api/functions/createFunctionScope.md +26 -0
  143. package/docs/api/functions/createFunctionSymbol.md +35 -0
  144. package/docs/api/functions/createGoModuleScope.md +18 -0
  145. package/docs/api/functions/createGoNamePolicy.md +17 -0
  146. package/docs/api/functions/createGoPackageScope.md +18 -0
  147. package/docs/api/functions/createInterfaceMemberSymbol.md +25 -0
  148. package/docs/api/functions/createModule.md +20 -0
  149. package/docs/api/functions/createNamedTypeScope.md +27 -0
  150. package/docs/api/functions/createNestedStructSymbol.md +26 -0
  151. package/docs/api/functions/createPackageSymbol.md +19 -0
  152. package/docs/api/functions/createParameterSymbol.md +36 -0
  153. package/docs/api/functions/createPropertySymbol.md +34 -0
  154. package/docs/api/functions/createStructMemberSymbol.md +25 -0
  155. package/docs/api/functions/createTypeParameterSymbol.md +25 -0
  156. package/docs/api/functions/createTypeSymbol.md +26 -0
  157. package/docs/api/functions/createVariableSymbol.md +34 -0
  158. package/docs/api/functions/index.md +29 -0
  159. package/docs/api/functions/ref.md +18 -0
  160. package/docs/api/functions/useEnclosingPackageScope.md +17 -0
  161. package/docs/api/functions/useFuncScope.md +17 -0
  162. package/docs/api/functions/useGoNamePolicy.md +17 -0
  163. package/docs/api/functions/useGoScope.md +17 -0
  164. package/docs/api/functions/useLexicalScope.md +17 -0
  165. package/docs/api/functions/useModule.md +17 -0
  166. package/docs/api/functions/useNamedTypeScope.md +17 -0
  167. package/docs/api/functions/usePackage.md +17 -0
  168. package/docs/api/functions/useSourceFileScope.md +17 -0
  169. package/docs/api/index.md +7 -0
  170. package/docs/api/types/CreateTypeParameterSymbolOptions.md +9 -0
  171. package/docs/api/types/Descriptor.md +5 -0
  172. package/docs/api/types/EmbedDescriptor.md +9 -0
  173. package/docs/api/types/FieldDescriptor.md +9 -0
  174. package/docs/api/types/FunctionDescriptor.md +9 -0
  175. package/docs/api/types/FunctionSymbol.md +13 -0
  176. package/docs/api/types/GoElements.md +5 -0
  177. package/docs/api/types/GoFunctionScope.md +12 -0
  178. package/docs/api/types/GoLexicalScope.md +11 -0
  179. package/docs/api/types/GoModuleScope.md +10 -0
  180. package/docs/api/types/GoNamedTypeScope.md +16 -0
  181. package/docs/api/types/GoPackageScope.md +10 -0
  182. package/docs/api/types/GoScope.md +10 -0
  183. package/docs/api/types/GoSourceFileScope.md +13 -0
  184. package/docs/api/types/GoSymbol.md +17 -0
  185. package/docs/api/types/GoSymbolKinds.md +5 -0
  186. package/docs/api/types/GoSymbolOptions.md +10 -0
  187. package/docs/api/types/ImportRecords.md +5 -0
  188. package/docs/api/types/InterfaceDescriptor.md +9 -0
  189. package/docs/api/types/LibraryFrom.md +5 -0
  190. package/docs/api/types/MemberDescriptor.md +8 -0
  191. package/docs/api/types/MethodDescriptor.md +9 -0
  192. package/docs/api/types/NamedTypeDescriptor.md +8 -0
  193. package/docs/api/types/NamedTypeSymbol.md +17 -0
  194. package/docs/api/types/NamedTypeSymbolKind.md +5 -0
  195. package/docs/api/types/NamedTypeSymbolOptions.md +9 -0
  196. package/docs/api/types/NamedTypeTypeKind.md +5 -0
  197. package/docs/api/types/PackageDescriptor.md +12 -0
  198. package/docs/api/types/PackageSymbol.md +15 -0
  199. package/docs/api/types/PackageSymbolOptions.md +10 -0
  200. package/docs/api/types/ResolveDescriptor.md +7 -0
  201. package/docs/api/types/SourceFileHeaderProps.md +9 -0
  202. package/docs/api/types/StrictDescriptor.md +5 -0
  203. package/docs/api/types/StructDescriptor.md +9 -0
  204. package/docs/api/types/TypeDescriptor.md +9 -0
  205. package/docs/api/types/VariableDescriptor.md +9 -0
  206. package/docs/api/types/index.md +38 -0
  207. package/docs/api/variables/index.md +3 -0
  208. package/docs/api/variables/std.md +2463 -0
  209. package/package.json +10 -7
  210. package/vitest.config.ts +8 -0
@@ -0,0 +1,853 @@
1
+ import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
+ import { List, Output, refkey, render } from "@alloy-js/core";
3
+ import { describe, expect, it } from "vitest";
4
+ import { assertFileContents, TestPackage } from "../../../test/utils.js";
5
+ import { ModuleDirectory } from "../ModuleDirectory.js";
6
+ import { SourceDirectory } from "../SourceDirectory.js";
7
+ import { SourceFile } from "../SourceFile.js";
8
+ import { TypeDeclaration } from "../type/declaration.js";
9
+ import { InterfaceDeclaration, InterfaceEmbed, InterfaceFunction, TypeConstraint } from "./declaration.js";
10
+ function Wrapper(props) {
11
+ return _$createComponent(TestPackage, {
12
+ get children() {
13
+ return _$createComponent(TypeDeclaration, {
14
+ name: "TestInterface",
15
+ get children() {
16
+ return _$createComponent(InterfaceDeclaration, {
17
+ get children() {
18
+ return props.children;
19
+ }
20
+ }, {
21
+ fileName: import.meta.url,
22
+ lineNumber: 19,
23
+ columnNumber: 9
24
+ });
25
+ }
26
+ }, {
27
+ fileName: import.meta.url,
28
+ lineNumber: 18,
29
+ columnNumber: 7
30
+ });
31
+ }
32
+ }, {
33
+ fileName: import.meta.url,
34
+ lineNumber: 17,
35
+ columnNumber: 5
36
+ });
37
+ }
38
+ it("declares interface with no members", () => {
39
+ expect(_$createComponent(TestPackage, {
40
+ get children() {
41
+ return _$createComponent(TypeDeclaration, {
42
+ name: "test",
43
+ get children() {
44
+ return _$createComponent(InterfaceDeclaration, {}, {
45
+ fileName: import.meta.url,
46
+ lineNumber: 29,
47
+ columnNumber: 9
48
+ });
49
+ }
50
+ }, {
51
+ fileName: import.meta.url,
52
+ lineNumber: 28,
53
+ columnNumber: 7
54
+ });
55
+ }
56
+ }, {
57
+ fileName: import.meta.url,
58
+ lineNumber: 27,
59
+ columnNumber: 5
60
+ })).toRenderTo(`
61
+ package alloy
62
+
63
+ type test interface{}
64
+ `);
65
+ });
66
+ it("specify doc comment", () => {
67
+ expect(_$createComponent(TestPackage, {
68
+ get children() {
69
+ return _$createComponent(TypeDeclaration, {
70
+ name: "test",
71
+ doc: "This is a test",
72
+ get children() {
73
+ return _$createComponent(InterfaceDeclaration, {}, {
74
+ fileName: import.meta.url,
75
+ lineNumber: 43,
76
+ columnNumber: 9
77
+ });
78
+ }
79
+ }, {
80
+ fileName: import.meta.url,
81
+ lineNumber: 42,
82
+ columnNumber: 7
83
+ });
84
+ }
85
+ }, {
86
+ fileName: import.meta.url,
87
+ lineNumber: 41,
88
+ columnNumber: 5
89
+ })).toRenderTo(`
90
+ package alloy
91
+
92
+ // This is a test
93
+ type test interface{}
94
+ `);
95
+ });
96
+
97
+ // describe("with type parameters", () => {
98
+ // it("reference parameters", () => {
99
+ // const typeParameters: TypeParameterProps[] = [
100
+ // {
101
+ // name: "T",
102
+ // refkey: refkey(),
103
+ // },
104
+ // {
105
+ // name: "U",
106
+ // refkey: refkey(),
107
+ // },
108
+ // ];
109
+ //
110
+ // expect(
111
+ // <TestPackage>
112
+ // <TypeDeclaration name="Test">
113
+ // <InterfaceDeclaration public name="Test" typeParameters={typeParameters}>
114
+ // <List>
115
+ // <Property name="PropA" type={typeParameters[0].refkey} get set />
116
+ // <Property name="PropB" type={typeParameters[1].refkey} get set />
117
+ // </List>
118
+ // </InterfaceDeclaration>
119
+ // </TypeDeclaration>
120
+ // </TestPackage>,
121
+ // ).toRenderTo(`
122
+ // public struct Test<T, U>
123
+ // {
124
+ // T PropA { get; set; }
125
+ // U PropB { get; set; }
126
+ // }
127
+ // `);
128
+ // });
129
+ //
130
+ // it("defines with constraints", () => {
131
+ // const typeParameters: TypeParameterProps[] = [
132
+ // {
133
+ // name: "T",
134
+ // constraints: "IFoo",
135
+ // },
136
+ // {
137
+ // name: "U",
138
+ // constraints: "IBar",
139
+ // },
140
+ // ];
141
+ //
142
+ // expect(
143
+ // <TestPackage>
144
+ // <TypeDeclaration name="Test">
145
+ // <InterfaceDeclaration public name="Test" typeParameters={typeParameters}>
146
+ // // Body
147
+ // </InterfaceDeclaration>
148
+ // </TypeDeclaration>
149
+ // </TestPackage>,
150
+ // ).toRenderTo(`
151
+ // public struct Test<T, U>
152
+ // where T : IFoo
153
+ // where U : IBar
154
+ // {
155
+ // // Body
156
+ // }
157
+ // `);
158
+ // });
159
+ // });
160
+
161
+ it("defines fields", () => {
162
+ expect(_$createComponent(TestPackage, {
163
+ get children() {
164
+ return _$createComponent(TypeDeclaration, {
165
+ name: "TestInterface",
166
+ get children() {
167
+ return _$createComponent(InterfaceDeclaration, {
168
+ get children() {
169
+ return _$createComponent(List, {
170
+ get children() {
171
+ return [_$createComponent(InterfaceFunction, {
172
+ name: "FunctionOne",
173
+ parameters: [{
174
+ name: "hi",
175
+ type: "string"
176
+ }],
177
+ returns: "string"
178
+ }, {
179
+ fileName: import.meta.url,
180
+ lineNumber: 124,
181
+ columnNumber: 13
182
+ }), _$createComponent(InterfaceFunction, {
183
+ name: "functionTwo",
184
+ returns: "int"
185
+ }, {
186
+ fileName: import.meta.url,
187
+ lineNumber: 129,
188
+ columnNumber: 13
189
+ })];
190
+ }
191
+ }, {
192
+ fileName: import.meta.url,
193
+ lineNumber: 123,
194
+ columnNumber: 11
195
+ });
196
+ }
197
+ }, {
198
+ fileName: import.meta.url,
199
+ lineNumber: 122,
200
+ columnNumber: 9
201
+ });
202
+ }
203
+ }, {
204
+ fileName: import.meta.url,
205
+ lineNumber: 121,
206
+ columnNumber: 7
207
+ });
208
+ }
209
+ }, {
210
+ fileName: import.meta.url,
211
+ lineNumber: 120,
212
+ columnNumber: 5
213
+ })).toRenderTo(`
214
+ package alloy
215
+
216
+ type TestInterface interface {
217
+ func FunctionOne(hi string) string
218
+ func functionTwo() int
219
+ }
220
+ `);
221
+ });
222
+ describe("naming", () => {
223
+ it("public field is PascalCase", () => {
224
+ expect(_$createComponent(Wrapper, {
225
+ get children() {
226
+ return _$createComponent(List, {
227
+ get children() {
228
+ return _$createComponent(InterfaceFunction, {
229
+ name: "MemberOne",
230
+ returns: "string"
231
+ }, {
232
+ fileName: import.meta.url,
233
+ lineNumber: 149,
234
+ columnNumber: 11
235
+ });
236
+ }
237
+ }, {
238
+ fileName: import.meta.url,
239
+ lineNumber: 148,
240
+ columnNumber: 9
241
+ });
242
+ }
243
+ }, {
244
+ fileName: import.meta.url,
245
+ lineNumber: 147,
246
+ columnNumber: 7
247
+ })).toRenderTo(`
248
+ package alloy
249
+
250
+ type TestInterface interface {
251
+ func MemberOne() string
252
+ }
253
+ `);
254
+ });
255
+ it("private field are camelCase", () => {
256
+ expect(_$createComponent(Wrapper, {
257
+ get children() {
258
+ return _$createComponent(List, {
259
+ get children() {
260
+ return _$createComponent(InterfaceFunction, {
261
+ name: "memberOne",
262
+ returns: "string"
263
+ }, {
264
+ fileName: import.meta.url,
265
+ lineNumber: 165,
266
+ columnNumber: 11
267
+ });
268
+ }
269
+ }, {
270
+ fileName: import.meta.url,
271
+ lineNumber: 164,
272
+ columnNumber: 9
273
+ });
274
+ }
275
+ }, {
276
+ fileName: import.meta.url,
277
+ lineNumber: 163,
278
+ columnNumber: 7
279
+ })).toRenderTo(`
280
+ package alloy
281
+
282
+ type TestInterface interface {
283
+ func memberOne() string
284
+ }
285
+ `);
286
+ });
287
+ });
288
+ describe("embedded", () => {
289
+ it("embed using children", () => {
290
+ const TestInterfaceEmbed = refkey("TestInterfaceEmbed");
291
+ expect(_$createComponent(TestPackage, {
292
+ get children() {
293
+ return [_$createComponent(TypeDeclaration, {
294
+ name: "TestInterface",
295
+ get children() {
296
+ return _$createComponent(InterfaceDeclaration, {
297
+ get children() {
298
+ return _$createComponent(List, {
299
+ get children() {
300
+ return _$createComponent(InterfaceFunction, {
301
+ name: "MemberOne",
302
+ returns: "string"
303
+ }, {
304
+ fileName: import.meta.url,
305
+ lineNumber: 186,
306
+ columnNumber: 15
307
+ });
308
+ }
309
+ }, {
310
+ fileName: import.meta.url,
311
+ lineNumber: 185,
312
+ columnNumber: 13
313
+ });
314
+ }
315
+ }, {
316
+ fileName: import.meta.url,
317
+ lineNumber: 184,
318
+ columnNumber: 11
319
+ });
320
+ }
321
+ }, {
322
+ fileName: import.meta.url,
323
+ lineNumber: 183,
324
+ columnNumber: 9
325
+ }), _$createIntrinsic("hbr", {}, {
326
+ fileName: import.meta.url,
327
+ lineNumber: 190,
328
+ columnNumber: 9
329
+ }), _$createComponent(TypeDeclaration, {
330
+ name: "TestInterface2",
331
+ get children() {
332
+ return _$createComponent(InterfaceDeclaration, {
333
+ get children() {
334
+ return _$createComponent(List, {
335
+ get children() {
336
+ return [_$createComponent(InterfaceEmbed, {
337
+ refkey: TestInterfaceEmbed,
338
+ children: "TestInterface"
339
+ }, {
340
+ fileName: import.meta.url,
341
+ lineNumber: 194,
342
+ columnNumber: 15
343
+ }), _$createComponent(InterfaceFunction, {
344
+ name: "MemberOne",
345
+ returns: "string"
346
+ }, {
347
+ fileName: import.meta.url,
348
+ lineNumber: 197,
349
+ columnNumber: 15
350
+ })];
351
+ }
352
+ }, {
353
+ fileName: import.meta.url,
354
+ lineNumber: 193,
355
+ columnNumber: 13
356
+ });
357
+ }
358
+ }, {
359
+ fileName: import.meta.url,
360
+ lineNumber: 192,
361
+ columnNumber: 11
362
+ });
363
+ }
364
+ }, {
365
+ fileName: import.meta.url,
366
+ lineNumber: 191,
367
+ columnNumber: 9
368
+ }), _$createIntrinsic("hbr", {}, {
369
+ fileName: import.meta.url,
370
+ lineNumber: 201,
371
+ columnNumber: 9
372
+ }), TestInterfaceEmbed];
373
+ }
374
+ }, {
375
+ fileName: import.meta.url,
376
+ lineNumber: 182,
377
+ columnNumber: 7
378
+ })).toRenderTo(`
379
+ package alloy
380
+
381
+ type TestInterface interface {
382
+ func MemberOne() string
383
+ }
384
+ type TestInterface2 interface {
385
+ TestInterface
386
+ func MemberOne() string
387
+ }
388
+ TestInterface2.TestInterface
389
+ `);
390
+ });
391
+ it("embed using refkey", () => {
392
+ const TestInterface = refkey("TestInterface");
393
+ const TestInterfaceEmbed = refkey("TestInterfaceEmbed");
394
+ expect(_$createComponent(TestPackage, {
395
+ get children() {
396
+ return [_$createComponent(TypeDeclaration, {
397
+ name: "TestInterface",
398
+ refkey: TestInterface,
399
+ get children() {
400
+ return _$createComponent(InterfaceDeclaration, {
401
+ get children() {
402
+ return _$createComponent(List, {
403
+ get children() {
404
+ return _$createComponent(InterfaceFunction, {
405
+ name: "MemberOne",
406
+ returns: "string"
407
+ }, {
408
+ fileName: import.meta.url,
409
+ lineNumber: 227,
410
+ columnNumber: 15
411
+ });
412
+ }
413
+ }, {
414
+ fileName: import.meta.url,
415
+ lineNumber: 226,
416
+ columnNumber: 13
417
+ });
418
+ }
419
+ }, {
420
+ fileName: import.meta.url,
421
+ lineNumber: 225,
422
+ columnNumber: 11
423
+ });
424
+ }
425
+ }, {
426
+ fileName: import.meta.url,
427
+ lineNumber: 224,
428
+ columnNumber: 9
429
+ }), _$createIntrinsic("hbr", {}, {
430
+ fileName: import.meta.url,
431
+ lineNumber: 231,
432
+ columnNumber: 9
433
+ }), _$createComponent(TypeDeclaration, {
434
+ name: "TestInterface2",
435
+ get children() {
436
+ return _$createComponent(InterfaceDeclaration, {
437
+ get children() {
438
+ return _$createComponent(List, {
439
+ get children() {
440
+ return [_$createComponent(InterfaceEmbed, {
441
+ refkey: TestInterfaceEmbed,
442
+ children: TestInterface
443
+ }, {
444
+ fileName: import.meta.url,
445
+ lineNumber: 235,
446
+ columnNumber: 15
447
+ }), _$createComponent(InterfaceFunction, {
448
+ name: "MemberOne",
449
+ returns: "string"
450
+ }, {
451
+ fileName: import.meta.url,
452
+ lineNumber: 238,
453
+ columnNumber: 15
454
+ })];
455
+ }
456
+ }, {
457
+ fileName: import.meta.url,
458
+ lineNumber: 234,
459
+ columnNumber: 13
460
+ });
461
+ }
462
+ }, {
463
+ fileName: import.meta.url,
464
+ lineNumber: 233,
465
+ columnNumber: 11
466
+ });
467
+ }
468
+ }, {
469
+ fileName: import.meta.url,
470
+ lineNumber: 232,
471
+ columnNumber: 9
472
+ }), _$createIntrinsic("hbr", {}, {
473
+ fileName: import.meta.url,
474
+ lineNumber: 242,
475
+ columnNumber: 9
476
+ }), TestInterfaceEmbed];
477
+ }
478
+ }, {
479
+ fileName: import.meta.url,
480
+ lineNumber: 223,
481
+ columnNumber: 7
482
+ })).toRenderTo(`
483
+ package alloy
484
+
485
+ type TestInterface interface {
486
+ func MemberOne() string
487
+ }
488
+ type TestInterface2 interface {
489
+ TestInterface
490
+ func MemberOne() string
491
+ }
492
+ TestInterface2.TestInterface
493
+ `);
494
+ });
495
+ it("embed using cross-package refkey", () => {
496
+ const TestInterface = refkey("TestInterface");
497
+ const TestInterfaceEmbed = refkey("TestInterfaceEmbed");
498
+ const res = render(_$createComponent(Output, {
499
+ get children() {
500
+ return _$createComponent(ModuleDirectory, {
501
+ name: "github.com/alloy-framework/alloy",
502
+ get children() {
503
+ return _$createComponent(SourceDirectory, {
504
+ path: ".",
505
+ get children() {
506
+ return [_$createComponent(SourceDirectory, {
507
+ path: "hello",
508
+ get children() {
509
+ return _$createComponent(SourceFile, {
510
+ path: "types.go",
511
+ get children() {
512
+ return _$createComponent(TypeDeclaration, {
513
+ name: "TestInterface",
514
+ refkey: TestInterface,
515
+ get children() {
516
+ return _$createComponent(InterfaceDeclaration, {
517
+ get children() {
518
+ return _$createComponent(List, {
519
+ get children() {
520
+ return _$createComponent(InterfaceFunction, {
521
+ name: "MemberOne",
522
+ returns: "string"
523
+ }, {
524
+ fileName: import.meta.url,
525
+ lineNumber: 272,
526
+ columnNumber: 23
527
+ });
528
+ }
529
+ }, {
530
+ fileName: import.meta.url,
531
+ lineNumber: 271,
532
+ columnNumber: 21
533
+ });
534
+ }
535
+ }, {
536
+ fileName: import.meta.url,
537
+ lineNumber: 270,
538
+ columnNumber: 19
539
+ });
540
+ }
541
+ }, {
542
+ fileName: import.meta.url,
543
+ lineNumber: 269,
544
+ columnNumber: 17
545
+ });
546
+ }
547
+ }, {
548
+ fileName: import.meta.url,
549
+ lineNumber: 268,
550
+ columnNumber: 15
551
+ });
552
+ }
553
+ }, {
554
+ fileName: import.meta.url,
555
+ lineNumber: 267,
556
+ columnNumber: 13
557
+ }), _$createComponent(SourceFile, {
558
+ path: "Test.go",
559
+ get children() {
560
+ return [_$createComponent(TypeDeclaration, {
561
+ name: "TestInterface2",
562
+ get children() {
563
+ return _$createComponent(InterfaceDeclaration, {
564
+ get children() {
565
+ return _$createComponent(List, {
566
+ get children() {
567
+ return [_$createComponent(InterfaceEmbed, {
568
+ refkey: TestInterfaceEmbed,
569
+ children: TestInterface
570
+ }, {
571
+ fileName: import.meta.url,
572
+ lineNumber: 282,
573
+ columnNumber: 21
574
+ }), _$createComponent(InterfaceFunction, {
575
+ name: "MemberOne",
576
+ returns: "string"
577
+ }, {
578
+ fileName: import.meta.url,
579
+ lineNumber: 285,
580
+ columnNumber: 21
581
+ })];
582
+ }
583
+ }, {
584
+ fileName: import.meta.url,
585
+ lineNumber: 281,
586
+ columnNumber: 19
587
+ });
588
+ }
589
+ }, {
590
+ fileName: import.meta.url,
591
+ lineNumber: 280,
592
+ columnNumber: 17
593
+ });
594
+ }
595
+ }, {
596
+ fileName: import.meta.url,
597
+ lineNumber: 279,
598
+ columnNumber: 15
599
+ }), _$createIntrinsic("hbr", {}, {
600
+ fileName: import.meta.url,
601
+ lineNumber: 289,
602
+ columnNumber: 15
603
+ }), TestInterfaceEmbed];
604
+ }
605
+ }, {
606
+ fileName: import.meta.url,
607
+ lineNumber: 278,
608
+ columnNumber: 13
609
+ })];
610
+ }
611
+ }, {
612
+ fileName: import.meta.url,
613
+ lineNumber: 266,
614
+ columnNumber: 11
615
+ });
616
+ }
617
+ }, {
618
+ fileName: import.meta.url,
619
+ lineNumber: 265,
620
+ columnNumber: 9
621
+ });
622
+ }
623
+ }, {
624
+ fileName: import.meta.url,
625
+ lineNumber: 264,
626
+ columnNumber: 7
627
+ }));
628
+ assertFileContents(res, {
629
+ "hello/types.go": `
630
+ package hello
631
+
632
+ type TestInterface interface {
633
+ func MemberOne() string
634
+ }
635
+ `,
636
+ "Test.go": `
637
+ package alloy
638
+
639
+ import "github.com/alloy-framework/alloy/hello"
640
+
641
+ type TestInterface2 interface {
642
+ hello.TestInterface
643
+ func MemberOne() string
644
+ }
645
+ TestInterface2.TestInterface
646
+ `
647
+ });
648
+ });
649
+ });
650
+ describe("constraints", () => {
651
+ it("test single constraint", () => {
652
+ const TestInterface = refkey("TestInterface");
653
+ expect(_$createComponent(TestPackage, {
654
+ get children() {
655
+ return [_$createComponent(TypeDeclaration, {
656
+ name: "TestInterface",
657
+ refkey: TestInterface,
658
+ get children() {
659
+ return _$createComponent(InterfaceDeclaration, {
660
+ get children() {
661
+ return _$createComponent(List, {
662
+ get children() {
663
+ return _$createComponent(InterfaceFunction, {
664
+ name: "MemberOne",
665
+ returns: "string"
666
+ }, {
667
+ fileName: import.meta.url,
668
+ lineNumber: 328,
669
+ columnNumber: 15
670
+ });
671
+ }
672
+ }, {
673
+ fileName: import.meta.url,
674
+ lineNumber: 327,
675
+ columnNumber: 13
676
+ });
677
+ }
678
+ }, {
679
+ fileName: import.meta.url,
680
+ lineNumber: 326,
681
+ columnNumber: 11
682
+ });
683
+ }
684
+ }, {
685
+ fileName: import.meta.url,
686
+ lineNumber: 325,
687
+ columnNumber: 9
688
+ }), _$createIntrinsic("hbr", {}, {
689
+ fileName: import.meta.url,
690
+ lineNumber: 332,
691
+ columnNumber: 9
692
+ }), _$createComponent(TypeDeclaration, {
693
+ name: "TestInterface2",
694
+ get children() {
695
+ return _$createComponent(InterfaceDeclaration, {
696
+ get children() {
697
+ return _$createComponent(List, {
698
+ get children() {
699
+ return [_$createComponent(TypeConstraint, {
700
+ children: TestInterface
701
+ }, {
702
+ fileName: import.meta.url,
703
+ lineNumber: 336,
704
+ columnNumber: 15
705
+ }), _$createComponent(InterfaceFunction, {
706
+ name: "MemberOne",
707
+ returns: "string"
708
+ }, {
709
+ fileName: import.meta.url,
710
+ lineNumber: 337,
711
+ columnNumber: 15
712
+ })];
713
+ }
714
+ }, {
715
+ fileName: import.meta.url,
716
+ lineNumber: 335,
717
+ columnNumber: 13
718
+ });
719
+ }
720
+ }, {
721
+ fileName: import.meta.url,
722
+ lineNumber: 334,
723
+ columnNumber: 11
724
+ });
725
+ }
726
+ }, {
727
+ fileName: import.meta.url,
728
+ lineNumber: 333,
729
+ columnNumber: 9
730
+ })];
731
+ }
732
+ }, {
733
+ fileName: import.meta.url,
734
+ lineNumber: 324,
735
+ columnNumber: 7
736
+ })).toRenderTo(`
737
+ package alloy
738
+
739
+ type TestInterface interface {
740
+ func MemberOne() string
741
+ }
742
+ type TestInterface2 interface {
743
+ TestInterface
744
+ func MemberOne() string
745
+ }
746
+ `);
747
+ });
748
+ it("test multiple constraint", () => {
749
+ const TestInterface = refkey("TestInterface");
750
+ expect(_$createComponent(TestPackage, {
751
+ get children() {
752
+ return [_$createComponent(TypeDeclaration, {
753
+ name: "TestInterface",
754
+ refkey: TestInterface,
755
+ get children() {
756
+ return _$createComponent(InterfaceDeclaration, {
757
+ get children() {
758
+ return _$createComponent(List, {
759
+ get children() {
760
+ return _$createComponent(InterfaceFunction, {
761
+ name: "MemberOne",
762
+ returns: "string"
763
+ }, {
764
+ fileName: import.meta.url,
765
+ lineNumber: 362,
766
+ columnNumber: 15
767
+ });
768
+ }
769
+ }, {
770
+ fileName: import.meta.url,
771
+ lineNumber: 361,
772
+ columnNumber: 13
773
+ });
774
+ }
775
+ }, {
776
+ fileName: import.meta.url,
777
+ lineNumber: 360,
778
+ columnNumber: 11
779
+ });
780
+ }
781
+ }, {
782
+ fileName: import.meta.url,
783
+ lineNumber: 359,
784
+ columnNumber: 9
785
+ }), _$createIntrinsic("hbr", {}, {
786
+ fileName: import.meta.url,
787
+ lineNumber: 366,
788
+ columnNumber: 9
789
+ }), _$createComponent(TypeDeclaration, {
790
+ name: "TestInterface2",
791
+ get children() {
792
+ return _$createComponent(InterfaceDeclaration, {
793
+ get children() {
794
+ return _$createComponent(List, {
795
+ get children() {
796
+ return [_$createComponent(TypeConstraint, {
797
+ children: TestInterface
798
+ }, {
799
+ fileName: import.meta.url,
800
+ lineNumber: 370,
801
+ columnNumber: 15
802
+ }), _$createComponent(TypeConstraint, {
803
+ constraints: [TestInterface, "string", "~int"]
804
+ }, {
805
+ fileName: import.meta.url,
806
+ lineNumber: 371,
807
+ columnNumber: 15
808
+ }), _$createComponent(InterfaceFunction, {
809
+ name: "MemberOne",
810
+ returns: "string"
811
+ }, {
812
+ fileName: import.meta.url,
813
+ lineNumber: 372,
814
+ columnNumber: 15
815
+ })];
816
+ }
817
+ }, {
818
+ fileName: import.meta.url,
819
+ lineNumber: 369,
820
+ columnNumber: 13
821
+ });
822
+ }
823
+ }, {
824
+ fileName: import.meta.url,
825
+ lineNumber: 368,
826
+ columnNumber: 11
827
+ });
828
+ }
829
+ }, {
830
+ fileName: import.meta.url,
831
+ lineNumber: 367,
832
+ columnNumber: 9
833
+ })];
834
+ }
835
+ }, {
836
+ fileName: import.meta.url,
837
+ lineNumber: 358,
838
+ columnNumber: 7
839
+ })).toRenderTo(`
840
+ package alloy
841
+
842
+ type TestInterface interface {
843
+ func MemberOne() string
844
+ }
845
+ type TestInterface2 interface {
846
+ TestInterface
847
+ TestInterface | string | ~int
848
+ func MemberOne() string
849
+ }
850
+ `);
851
+ });
852
+ });
853
+ //# sourceMappingURL=interface.test.js.map