@alloy-js/go 0.2.1-dev.0 → 0.3.0-dev.3

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 (151) hide show
  1. package/dist/dev/src/builtins/fmt/fmt.js +148 -0
  2. package/dist/dev/src/builtins/fmt/fmt.js.map +1 -0
  3. package/dist/dev/src/builtins/index.js +11 -0
  4. package/dist/dev/src/builtins/index.js.map +1 -0
  5. package/dist/dev/src/builtins/io/io.js +650 -0
  6. package/dist/dev/src/builtins/io/io.js.map +1 -0
  7. package/dist/dev/src/builtins/net/net.js +1212 -0
  8. package/dist/dev/src/builtins/net/net.js.map +1 -0
  9. package/dist/dev/src/builtins/time/time.js +464 -0
  10. package/dist/dev/src/builtins/time/time.js.map +1 -0
  11. package/dist/dev/src/components/ImportStatement.js +114 -0
  12. package/dist/dev/src/components/ImportStatement.js.map +1 -0
  13. package/dist/dev/src/components/ModuleDirectory.js +28 -0
  14. package/dist/dev/src/components/ModuleDirectory.js.map +1 -0
  15. package/dist/dev/src/components/Name.js +12 -0
  16. package/dist/dev/src/components/Name.js.map +1 -0
  17. package/dist/dev/src/components/Reference.js +15 -0
  18. package/dist/dev/src/components/Reference.js.map +1 -0
  19. package/dist/dev/src/components/SourceDirectory.js +38 -0
  20. package/dist/dev/src/components/SourceDirectory.js.map +1 -0
  21. package/dist/dev/src/components/SourceFile.js +119 -0
  22. package/dist/dev/src/components/SourceFile.js.map +1 -0
  23. package/dist/dev/src/components/doc/comment.js +46 -0
  24. package/dist/dev/src/components/doc/comment.js.map +1 -0
  25. package/dist/dev/src/components/doc/comment.test.js +371 -0
  26. package/dist/dev/src/components/doc/comment.test.js.map +1 -0
  27. package/dist/dev/src/components/function/function.js +250 -0
  28. package/dist/dev/src/components/function/function.js.map +1 -0
  29. package/dist/dev/src/components/function/function.test.js +630 -0
  30. package/dist/dev/src/components/function/function.test.js.map +1 -0
  31. package/dist/dev/src/components/index.js +16 -0
  32. package/dist/dev/src/components/index.js.map +1 -0
  33. package/dist/dev/src/components/interface/declaration.js +245 -0
  34. package/dist/dev/src/components/interface/declaration.js.map +1 -0
  35. package/dist/dev/src/components/interface/interface.test.js +853 -0
  36. package/dist/dev/src/components/interface/interface.test.js.map +1 -0
  37. package/dist/dev/src/components/package.test.js +137 -0
  38. package/dist/dev/src/components/package.test.js.map +1 -0
  39. package/dist/dev/src/components/parameters/parameters.js +102 -0
  40. package/dist/dev/src/components/parameters/parameters.js.map +1 -0
  41. package/dist/dev/src/components/parameters/typeparameters.js +93 -0
  42. package/dist/dev/src/components/parameters/typeparameters.js.map +1 -0
  43. package/dist/dev/src/components/pointer/pointer.js +8 -0
  44. package/dist/dev/src/components/pointer/pointer.js.map +1 -0
  45. package/dist/dev/src/components/stc/index.js +27 -0
  46. package/dist/dev/src/components/stc/index.js.map +1 -0
  47. package/dist/dev/src/components/struct/declaration.js +213 -0
  48. package/dist/dev/src/components/struct/declaration.js.map +1 -0
  49. package/dist/dev/src/components/struct/struct.test.js +1261 -0
  50. package/dist/dev/src/components/struct/struct.test.js.map +1 -0
  51. package/dist/dev/src/components/type/declaration.js +112 -0
  52. package/dist/dev/src/components/type/declaration.js.map +1 -0
  53. package/dist/dev/src/components/var/declaration.js +136 -0
  54. package/dist/dev/src/components/var/declaration.js.map +1 -0
  55. package/dist/dev/src/components/var/var-declaration.test.js +564 -0
  56. package/dist/dev/src/components/var/var-declaration.test.js.map +1 -0
  57. package/dist/dev/src/context/package.js +6 -0
  58. package/dist/dev/src/context/package.js.map +1 -0
  59. package/dist/dev/src/create-module.js +157 -0
  60. package/dist/dev/src/create-module.js.map +1 -0
  61. package/dist/dev/src/create-module.test.js +175 -0
  62. package/dist/dev/src/create-module.test.js.map +1 -0
  63. package/dist/dev/src/index.js +7 -0
  64. package/dist/dev/src/index.js.map +1 -0
  65. package/dist/dev/src/name-policy.js +27 -0
  66. package/dist/dev/src/name-policy.js.map +1 -0
  67. package/dist/dev/src/scopes/contexts.js +34 -0
  68. package/dist/dev/src/scopes/contexts.js.map +1 -0
  69. package/dist/dev/src/scopes/factories.js +17 -0
  70. package/dist/dev/src/scopes/factories.js.map +1 -0
  71. package/dist/dev/src/scopes/function.js +14 -0
  72. package/dist/dev/src/scopes/function.js.map +1 -0
  73. package/dist/dev/src/scopes/go.js +12 -0
  74. package/dist/dev/src/scopes/go.js.map +1 -0
  75. package/dist/dev/src/scopes/index.js +10 -0
  76. package/dist/dev/src/scopes/index.js.map +1 -0
  77. package/dist/dev/src/scopes/lexical.js +11 -0
  78. package/dist/dev/src/scopes/lexical.js.map +1 -0
  79. package/dist/dev/src/scopes/module.js +31 -0
  80. package/dist/dev/src/scopes/module.js.map +1 -0
  81. package/dist/dev/src/scopes/named-type.js +33 -0
  82. package/dist/dev/src/scopes/named-type.js.map +1 -0
  83. package/dist/dev/src/scopes/package.js +39 -0
  84. package/dist/dev/src/scopes/package.js.map +1 -0
  85. package/dist/dev/src/scopes/source-file.js +43 -0
  86. package/dist/dev/src/scopes/source-file.js.map +1 -0
  87. package/dist/dev/src/symbols/factories.js +165 -0
  88. package/dist/dev/src/symbols/factories.js.map +1 -0
  89. package/dist/dev/src/symbols/function.js +24 -0
  90. package/dist/dev/src/symbols/function.js.map +1 -0
  91. package/dist/dev/src/symbols/go.js +60 -0
  92. package/dist/dev/src/symbols/go.js.map +1 -0
  93. package/dist/dev/src/symbols/index.js +7 -0
  94. package/dist/dev/src/symbols/index.js.map +1 -0
  95. package/dist/dev/src/symbols/named-type.js +42 -0
  96. package/dist/dev/src/symbols/named-type.js.map +1 -0
  97. package/dist/dev/src/symbols/package.js +39 -0
  98. package/dist/dev/src/symbols/package.js.map +1 -0
  99. package/dist/dev/src/symbols/reference.js +76 -0
  100. package/dist/dev/src/symbols/reference.js.map +1 -0
  101. package/dist/dev/src/symbols/type-parameter.js +16 -0
  102. package/dist/dev/src/symbols/type-parameter.js.map +1 -0
  103. package/dist/dev/test/utils.js +92 -0
  104. package/dist/dev/test/utils.js.map +1 -0
  105. package/dist/dev/test/vitest.setup.js +2 -0
  106. package/dist/dev/test/vitest.setup.js.map +1 -0
  107. package/dist/src/components/SourceFile.d.ts.map +1 -1
  108. package/dist/src/components/SourceFile.js +2 -2
  109. package/dist/src/components/SourceFile.js.map +1 -1
  110. package/dist/src/components/type/declaration.d.ts.map +1 -1
  111. package/dist/src/components/type/declaration.js +2 -2
  112. package/dist/src/components/type/declaration.js.map +1 -1
  113. package/dist/src/create-module.d.ts.map +1 -1
  114. package/dist/src/create-module.js +8 -9
  115. package/dist/src/create-module.js.map +1 -1
  116. package/dist/src/scopes/factories.d.ts.map +1 -1
  117. package/dist/src/scopes/factories.js +3 -2
  118. package/dist/src/scopes/factories.js.map +1 -1
  119. package/dist/src/scopes/module.js +2 -2
  120. package/dist/src/scopes/module.js.map +1 -1
  121. package/dist/src/scopes/package.js +2 -2
  122. package/dist/src/scopes/package.js.map +1 -1
  123. package/dist/src/scopes/source-file.d.ts.map +1 -1
  124. package/dist/src/scopes/source-file.js +4 -3
  125. package/dist/src/scopes/source-file.js.map +1 -1
  126. package/dist/src/symbols/factories.d.ts.map +1 -1
  127. package/dist/src/symbols/factories.js +67 -16
  128. package/dist/src/symbols/factories.js.map +1 -1
  129. package/dist/src/symbols/go.d.ts.map +1 -1
  130. package/dist/src/symbols/go.js +6 -2
  131. package/dist/src/symbols/go.js.map +1 -1
  132. package/dist/src/symbols/named-type.d.ts.map +1 -1
  133. package/dist/src/symbols/named-type.js +2 -2
  134. package/dist/src/symbols/named-type.js.map +1 -1
  135. package/dist/src/symbols/package.d.ts.map +1 -1
  136. package/dist/src/symbols/package.js +2 -1
  137. package/dist/src/symbols/package.js.map +1 -1
  138. package/dist/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +13 -6
  140. package/src/components/SourceFile.tsx +2 -1
  141. package/src/components/type/declaration.tsx +10 -4
  142. package/src/create-module.ts +11 -8
  143. package/src/scopes/factories.ts +3 -3
  144. package/src/scopes/module.ts +2 -2
  145. package/src/scopes/package.ts +2 -2
  146. package/src/scopes/source-file.ts +3 -1
  147. package/src/symbols/factories.ts +82 -47
  148. package/src/symbols/go.ts +6 -1
  149. package/src/symbols/named-type.ts +3 -1
  150. package/src/symbols/package.ts +2 -2
  151. 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