@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,1261 @@
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 { TypeConstraint } from "../interface/declaration.js";
9
+ import { Pointer } from "../pointer/pointer.js";
10
+ import { TypeDeclaration } from "../type/declaration.js";
11
+ import { StructDeclaration, StructEmbed, StructMember } from "./declaration.js";
12
+ function Wrapper(props) {
13
+ return _$createComponent(TestPackage, {
14
+ get children() {
15
+ return _$createComponent(TypeDeclaration, {
16
+ name: "TestStruct",
17
+ get children() {
18
+ return _$createComponent(StructDeclaration, {
19
+ get children() {
20
+ return props.children;
21
+ }
22
+ }, {
23
+ fileName: import.meta.url,
24
+ lineNumber: 20,
25
+ columnNumber: 9
26
+ });
27
+ }
28
+ }, {
29
+ fileName: import.meta.url,
30
+ lineNumber: 19,
31
+ columnNumber: 7
32
+ });
33
+ }
34
+ }, {
35
+ fileName: import.meta.url,
36
+ lineNumber: 18,
37
+ columnNumber: 5
38
+ });
39
+ }
40
+ it("declares struct with no members", () => {
41
+ expect(_$createComponent(TestPackage, {
42
+ get children() {
43
+ return _$createComponent(TypeDeclaration, {
44
+ name: "test",
45
+ get children() {
46
+ return _$createComponent(StructDeclaration, {}, {
47
+ fileName: import.meta.url,
48
+ lineNumber: 30,
49
+ columnNumber: 9
50
+ });
51
+ }
52
+ }, {
53
+ fileName: import.meta.url,
54
+ lineNumber: 29,
55
+ columnNumber: 7
56
+ });
57
+ }
58
+ }, {
59
+ fileName: import.meta.url,
60
+ lineNumber: 28,
61
+ columnNumber: 5
62
+ })).toRenderTo(`
63
+ package alloy
64
+
65
+ type test struct{}
66
+ `);
67
+ });
68
+ it("specify doc comment", () => {
69
+ expect(_$createComponent(TestPackage, {
70
+ get children() {
71
+ return _$createComponent(TypeDeclaration, {
72
+ name: "test",
73
+ doc: "This is a test",
74
+ get children() {
75
+ return _$createComponent(StructDeclaration, {}, {
76
+ fileName: import.meta.url,
77
+ lineNumber: 44,
78
+ columnNumber: 9
79
+ });
80
+ }
81
+ }, {
82
+ fileName: import.meta.url,
83
+ lineNumber: 43,
84
+ columnNumber: 7
85
+ });
86
+ }
87
+ }, {
88
+ fileName: import.meta.url,
89
+ lineNumber: 42,
90
+ columnNumber: 5
91
+ })).toRenderTo(`
92
+ package alloy
93
+
94
+ // This is a test
95
+ type test struct{}
96
+ `);
97
+ });
98
+ it("defines fields", () => {
99
+ expect(_$createComponent(TestPackage, {
100
+ get children() {
101
+ return _$createComponent(TypeDeclaration, {
102
+ name: "TestStruct",
103
+ get children() {
104
+ return _$createComponent(StructDeclaration, {
105
+ get children() {
106
+ return _$createComponent(List, {
107
+ get children() {
108
+ return [_$createComponent(StructMember, {
109
+ name: "MemberOne",
110
+ type: "string"
111
+ }, {
112
+ fileName: import.meta.url,
113
+ lineNumber: 61,
114
+ columnNumber: 13
115
+ }), _$createComponent(StructMember, {
116
+ name: "memberTwo",
117
+ type: "int"
118
+ }, {
119
+ fileName: import.meta.url,
120
+ lineNumber: 62,
121
+ columnNumber: 13
122
+ })];
123
+ }
124
+ }, {
125
+ fileName: import.meta.url,
126
+ lineNumber: 60,
127
+ columnNumber: 11
128
+ });
129
+ }
130
+ }, {
131
+ fileName: import.meta.url,
132
+ lineNumber: 59,
133
+ columnNumber: 9
134
+ });
135
+ }
136
+ }, {
137
+ fileName: import.meta.url,
138
+ lineNumber: 58,
139
+ columnNumber: 7
140
+ });
141
+ }
142
+ }, {
143
+ fileName: import.meta.url,
144
+ lineNumber: 57,
145
+ columnNumber: 5
146
+ })).toRenderTo(`
147
+ package alloy
148
+
149
+ type TestStruct struct {
150
+ MemberOne string
151
+ memberTwo int
152
+ }
153
+ `);
154
+ });
155
+ it("nested struct", () => {
156
+ const Member1 = refkey("Member1");
157
+ const Member2 = refkey("Member2");
158
+ const Member3 = refkey("Member3");
159
+ const Member4 = refkey("Member4");
160
+ expect(_$createComponent(TestPackage, {
161
+ get children() {
162
+ return [_$createComponent(TypeDeclaration, {
163
+ name: "TestStruct",
164
+ get children() {
165
+ return _$createComponent(StructDeclaration, {
166
+ get children() {
167
+ return _$createComponent(List, {
168
+ get children() {
169
+ return [_$createComponent(StructMember, {
170
+ name: "MemberOne",
171
+ type: "string",
172
+ refkey: Member1
173
+ }, {
174
+ fileName: import.meta.url,
175
+ lineNumber: 88,
176
+ columnNumber: 13
177
+ }), _$createComponent(StructMember, {
178
+ name: "MemberTwo",
179
+ refkey: Member2,
180
+ get type() {
181
+ return _$createComponent(StructDeclaration, {
182
+ get children() {
183
+ return _$createComponent(List, {
184
+ get children() {
185
+ return [_$createComponent(StructMember, {
186
+ name: "MemberOne",
187
+ type: "string",
188
+ refkey: Member3
189
+ }, {
190
+ fileName: import.meta.url,
191
+ lineNumber: 95,
192
+ columnNumber: 21
193
+ }), _$createComponent(StructMember, {
194
+ name: "NestedMemberTwo",
195
+ type: "int",
196
+ refkey: Member4
197
+ }, {
198
+ fileName: import.meta.url,
199
+ lineNumber: 100,
200
+ columnNumber: 21
201
+ })];
202
+ }
203
+ }, {
204
+ fileName: import.meta.url,
205
+ lineNumber: 94,
206
+ columnNumber: 19
207
+ });
208
+ }
209
+ }, {
210
+ fileName: import.meta.url,
211
+ lineNumber: 93,
212
+ columnNumber: 17
213
+ });
214
+ }
215
+ }, {
216
+ fileName: import.meta.url,
217
+ lineNumber: 89,
218
+ columnNumber: 13
219
+ })];
220
+ }
221
+ }, {
222
+ fileName: import.meta.url,
223
+ lineNumber: 87,
224
+ columnNumber: 11
225
+ });
226
+ }
227
+ }, {
228
+ fileName: import.meta.url,
229
+ lineNumber: 86,
230
+ columnNumber: 9
231
+ });
232
+ }
233
+ }, {
234
+ fileName: import.meta.url,
235
+ lineNumber: 85,
236
+ columnNumber: 7
237
+ }), _$createIntrinsic("hbr", {}, {
238
+ fileName: import.meta.url,
239
+ lineNumber: 112,
240
+ columnNumber: 7
241
+ }), Member1, _$createIntrinsic("hbr", {}, {
242
+ fileName: import.meta.url,
243
+ lineNumber: 114,
244
+ columnNumber: 7
245
+ }), Member2, _$createIntrinsic("hbr", {}, {
246
+ fileName: import.meta.url,
247
+ lineNumber: 116,
248
+ columnNumber: 7
249
+ }), Member3, _$createIntrinsic("hbr", {}, {
250
+ fileName: import.meta.url,
251
+ lineNumber: 118,
252
+ columnNumber: 7
253
+ }), Member4];
254
+ }
255
+ }, {
256
+ fileName: import.meta.url,
257
+ lineNumber: 84,
258
+ columnNumber: 5
259
+ })).toRenderTo(`
260
+ package alloy
261
+
262
+ type TestStruct struct {
263
+ MemberOne string
264
+ MemberTwo struct {
265
+ MemberOne string
266
+ NestedMemberTwo int
267
+ }
268
+ }
269
+ TestStruct.MemberOne
270
+ TestStruct.MemberTwo
271
+ TestStruct.MemberTwo.MemberOne
272
+ TestStruct.MemberTwo.NestedMemberTwo
273
+ `);
274
+ });
275
+ it("declares multiple fields", () => {
276
+ expect(_$createComponent(Wrapper, {
277
+ get children() {
278
+ return _$createComponent(List, {
279
+ get children() {
280
+ return [_$createComponent(StructMember, {
281
+ name: "MemberOne",
282
+ type: "string"
283
+ }, {
284
+ fileName: import.meta.url,
285
+ lineNumber: 142,
286
+ columnNumber: 9
287
+ }), _$createComponent(StructMember, {
288
+ name: "MemberTwo",
289
+ type: "int"
290
+ }, {
291
+ fileName: import.meta.url,
292
+ lineNumber: 143,
293
+ columnNumber: 9
294
+ })];
295
+ }
296
+ }, {
297
+ fileName: import.meta.url,
298
+ lineNumber: 141,
299
+ columnNumber: 7
300
+ });
301
+ }
302
+ }, {
303
+ fileName: import.meta.url,
304
+ lineNumber: 140,
305
+ columnNumber: 5
306
+ })).toRenderTo(`
307
+ package alloy
308
+
309
+ type TestStruct struct {
310
+ MemberOne string
311
+ MemberTwo int
312
+ }
313
+ `);
314
+ });
315
+ it("declares multiple fields with tags", () => {
316
+ expect(_$createComponent(Wrapper, {
317
+ get children() {
318
+ return _$createComponent(List, {
319
+ get children() {
320
+ return [_$createComponent(StructMember, {
321
+ name: "MemberOne",
322
+ type: "string",
323
+ tag: "this is arbitrary tag #1"
324
+ }, {
325
+ fileName: import.meta.url,
326
+ lineNumber: 160,
327
+ columnNumber: 9
328
+ }), _$createComponent(StructMember, {
329
+ name: "MemberTwo",
330
+ type: "int",
331
+ tag: "this is arbitrary tag #2"
332
+ }, {
333
+ fileName: import.meta.url,
334
+ lineNumber: 165,
335
+ columnNumber: 9
336
+ })];
337
+ }
338
+ }, {
339
+ fileName: import.meta.url,
340
+ lineNumber: 159,
341
+ columnNumber: 7
342
+ });
343
+ }
344
+ }, {
345
+ fileName: import.meta.url,
346
+ lineNumber: 158,
347
+ columnNumber: 5
348
+ })).toRenderTo(`
349
+ package alloy
350
+
351
+ type TestStruct struct {
352
+ MemberOne string "this is arbitrary tag #1"
353
+ MemberTwo int "this is arbitrary tag #2"
354
+ }
355
+ `);
356
+ });
357
+ it("declares multiple fields with tag object", () => {
358
+ expect(_$createComponent(Wrapper, {
359
+ get children() {
360
+ return _$createComponent(List, {
361
+ get children() {
362
+ return [_$createComponent(StructMember, {
363
+ name: "MemberOne",
364
+ type: "string",
365
+ tag: {
366
+ json: "member_one,omit_empty"
367
+ }
368
+ }, {
369
+ fileName: import.meta.url,
370
+ lineNumber: 186,
371
+ columnNumber: 9
372
+ }), _$createComponent(StructMember, {
373
+ name: "MemberTwo",
374
+ type: "int",
375
+ tag: {
376
+ xml: "member_two,omit_empty",
377
+ yaml: "memberTwo"
378
+ }
379
+ }, {
380
+ fileName: import.meta.url,
381
+ lineNumber: 191,
382
+ columnNumber: 9
383
+ })];
384
+ }
385
+ }, {
386
+ fileName: import.meta.url,
387
+ lineNumber: 185,
388
+ columnNumber: 7
389
+ });
390
+ }
391
+ }, {
392
+ fileName: import.meta.url,
393
+ lineNumber: 184,
394
+ columnNumber: 5
395
+ })).toRenderTo(`
396
+ package alloy
397
+
398
+ type TestStruct struct {
399
+ MemberOne string \`json:"member_one,omit_empty"\`
400
+ MemberTwo int \`xml:"member_two,omit_empty" yaml:"memberTwo"\`
401
+ }
402
+ `);
403
+ });
404
+ describe("naming", () => {
405
+ it("public field is PascalCase", () => {
406
+ expect(_$createComponent(Wrapper, {
407
+ get children() {
408
+ return _$createComponent(List, {
409
+ get children() {
410
+ return _$createComponent(StructMember, {
411
+ name: "MemberOne",
412
+ type: "string"
413
+ }, {
414
+ fileName: import.meta.url,
415
+ lineNumber: 213,
416
+ columnNumber: 11
417
+ });
418
+ }
419
+ }, {
420
+ fileName: import.meta.url,
421
+ lineNumber: 212,
422
+ columnNumber: 9
423
+ });
424
+ }
425
+ }, {
426
+ fileName: import.meta.url,
427
+ lineNumber: 211,
428
+ columnNumber: 7
429
+ })).toRenderTo(`
430
+ package alloy
431
+
432
+ type TestStruct struct {
433
+ MemberOne string
434
+ }
435
+ `);
436
+ });
437
+ it("private field are camelCase", () => {
438
+ expect(_$createComponent(Wrapper, {
439
+ get children() {
440
+ return _$createComponent(List, {
441
+ get children() {
442
+ return _$createComponent(StructMember, {
443
+ name: "memberOne",
444
+ type: "string"
445
+ }, {
446
+ fileName: import.meta.url,
447
+ lineNumber: 229,
448
+ columnNumber: 11
449
+ });
450
+ }
451
+ }, {
452
+ fileName: import.meta.url,
453
+ lineNumber: 228,
454
+ columnNumber: 9
455
+ });
456
+ }
457
+ }, {
458
+ fileName: import.meta.url,
459
+ lineNumber: 227,
460
+ columnNumber: 7
461
+ })).toRenderTo(`
462
+ package alloy
463
+
464
+ type TestStruct struct {
465
+ memberOne string
466
+ }
467
+ `);
468
+ });
469
+ });
470
+ describe("embedded", () => {
471
+ it("embed using children", () => {
472
+ const TestStructEmbed = refkey("TestStructEmbed");
473
+ expect(_$createComponent(TestPackage, {
474
+ get children() {
475
+ return [_$createComponent(TypeDeclaration, {
476
+ name: "TestStruct",
477
+ get children() {
478
+ return _$createComponent(StructDeclaration, {
479
+ get children() {
480
+ return _$createComponent(List, {
481
+ get children() {
482
+ return _$createComponent(StructMember, {
483
+ name: "MemberOne",
484
+ type: "string"
485
+ }, {
486
+ fileName: import.meta.url,
487
+ lineNumber: 250,
488
+ columnNumber: 15
489
+ });
490
+ }
491
+ }, {
492
+ fileName: import.meta.url,
493
+ lineNumber: 249,
494
+ columnNumber: 13
495
+ });
496
+ }
497
+ }, {
498
+ fileName: import.meta.url,
499
+ lineNumber: 248,
500
+ columnNumber: 11
501
+ });
502
+ }
503
+ }, {
504
+ fileName: import.meta.url,
505
+ lineNumber: 247,
506
+ columnNumber: 9
507
+ }), _$createIntrinsic("hbr", {}, {
508
+ fileName: import.meta.url,
509
+ lineNumber: 254,
510
+ columnNumber: 9
511
+ }), _$createComponent(TypeDeclaration, {
512
+ name: "TestStruct2",
513
+ get children() {
514
+ return _$createComponent(StructDeclaration, {
515
+ get children() {
516
+ return _$createComponent(List, {
517
+ get children() {
518
+ return [_$createComponent(StructEmbed, {
519
+ refkey: TestStructEmbed,
520
+ children: "TestStruct"
521
+ }, {
522
+ fileName: import.meta.url,
523
+ lineNumber: 258,
524
+ columnNumber: 15
525
+ }), _$createComponent(StructMember, {
526
+ name: "MemberOne",
527
+ type: "string"
528
+ }, {
529
+ fileName: import.meta.url,
530
+ lineNumber: 259,
531
+ columnNumber: 15
532
+ })];
533
+ }
534
+ }, {
535
+ fileName: import.meta.url,
536
+ lineNumber: 257,
537
+ columnNumber: 13
538
+ });
539
+ }
540
+ }, {
541
+ fileName: import.meta.url,
542
+ lineNumber: 256,
543
+ columnNumber: 11
544
+ });
545
+ }
546
+ }, {
547
+ fileName: import.meta.url,
548
+ lineNumber: 255,
549
+ columnNumber: 9
550
+ }), _$createIntrinsic("hbr", {}, {
551
+ fileName: import.meta.url,
552
+ lineNumber: 263,
553
+ columnNumber: 9
554
+ }), TestStructEmbed];
555
+ }
556
+ }, {
557
+ fileName: import.meta.url,
558
+ lineNumber: 246,
559
+ columnNumber: 7
560
+ })).toRenderTo(`
561
+ package alloy
562
+
563
+ type TestStruct struct {
564
+ MemberOne string
565
+ }
566
+ type TestStruct2 struct {
567
+ TestStruct
568
+ MemberOne string
569
+ }
570
+ TestStruct2.TestStruct
571
+ `);
572
+ });
573
+ it("embed using refkey", () => {
574
+ const TestStruct = refkey("TestStruct");
575
+ const TestStructEmbed = refkey("TestStructEmbed");
576
+ expect(_$createComponent(TestPackage, {
577
+ get children() {
578
+ return [_$createComponent(TypeDeclaration, {
579
+ name: "TestStruct",
580
+ refkey: TestStruct,
581
+ get children() {
582
+ return _$createComponent(StructDeclaration, {
583
+ get children() {
584
+ return _$createComponent(List, {
585
+ get children() {
586
+ return _$createComponent(StructMember, {
587
+ name: "MemberOne",
588
+ type: "string"
589
+ }, {
590
+ fileName: import.meta.url,
591
+ lineNumber: 289,
592
+ columnNumber: 15
593
+ });
594
+ }
595
+ }, {
596
+ fileName: import.meta.url,
597
+ lineNumber: 288,
598
+ columnNumber: 13
599
+ });
600
+ }
601
+ }, {
602
+ fileName: import.meta.url,
603
+ lineNumber: 287,
604
+ columnNumber: 11
605
+ });
606
+ }
607
+ }, {
608
+ fileName: import.meta.url,
609
+ lineNumber: 286,
610
+ columnNumber: 9
611
+ }), _$createIntrinsic("hbr", {}, {
612
+ fileName: import.meta.url,
613
+ lineNumber: 293,
614
+ columnNumber: 9
615
+ }), _$createComponent(TypeDeclaration, {
616
+ name: "TestStruct2",
617
+ get children() {
618
+ return _$createComponent(StructDeclaration, {
619
+ get children() {
620
+ return _$createComponent(List, {
621
+ get children() {
622
+ return [_$createComponent(StructEmbed, {
623
+ refkey: TestStructEmbed,
624
+ children: TestStruct
625
+ }, {
626
+ fileName: import.meta.url,
627
+ lineNumber: 297,
628
+ columnNumber: 15
629
+ }), _$createComponent(StructMember, {
630
+ name: "MemberOne",
631
+ type: "string"
632
+ }, {
633
+ fileName: import.meta.url,
634
+ lineNumber: 298,
635
+ columnNumber: 15
636
+ })];
637
+ }
638
+ }, {
639
+ fileName: import.meta.url,
640
+ lineNumber: 296,
641
+ columnNumber: 13
642
+ });
643
+ }
644
+ }, {
645
+ fileName: import.meta.url,
646
+ lineNumber: 295,
647
+ columnNumber: 11
648
+ });
649
+ }
650
+ }, {
651
+ fileName: import.meta.url,
652
+ lineNumber: 294,
653
+ columnNumber: 9
654
+ }), _$createIntrinsic("hbr", {}, {
655
+ fileName: import.meta.url,
656
+ lineNumber: 302,
657
+ columnNumber: 9
658
+ }), TestStructEmbed];
659
+ }
660
+ }, {
661
+ fileName: import.meta.url,
662
+ lineNumber: 285,
663
+ columnNumber: 7
664
+ })).toRenderTo(`
665
+ package alloy
666
+
667
+ type TestStruct struct {
668
+ MemberOne string
669
+ }
670
+ type TestStruct2 struct {
671
+ TestStruct
672
+ MemberOne string
673
+ }
674
+ TestStruct2.TestStruct
675
+ `);
676
+ });
677
+ it("embed using cross-package refkey", () => {
678
+ const TestStruct = refkey("TestStruct");
679
+ const TestStructEmbed = refkey("TestStructEmbed");
680
+ const res = render(_$createComponent(Output, {
681
+ get children() {
682
+ return _$createComponent(ModuleDirectory, {
683
+ name: "github.com/alloy-framework/alloy",
684
+ get children() {
685
+ return _$createComponent(SourceDirectory, {
686
+ path: ".",
687
+ get children() {
688
+ return [_$createComponent(SourceDirectory, {
689
+ path: "hello",
690
+ get children() {
691
+ return _$createComponent(SourceFile, {
692
+ path: "types.go",
693
+ get children() {
694
+ return _$createComponent(TypeDeclaration, {
695
+ name: "TestStruct",
696
+ refkey: TestStruct,
697
+ get children() {
698
+ return _$createComponent(StructDeclaration, {
699
+ get children() {
700
+ return _$createComponent(List, {
701
+ get children() {
702
+ return _$createComponent(StructMember, {
703
+ name: "MemberOne",
704
+ type: "string"
705
+ }, {
706
+ fileName: import.meta.url,
707
+ lineNumber: 332,
708
+ columnNumber: 23
709
+ });
710
+ }
711
+ }, {
712
+ fileName: import.meta.url,
713
+ lineNumber: 331,
714
+ columnNumber: 21
715
+ });
716
+ }
717
+ }, {
718
+ fileName: import.meta.url,
719
+ lineNumber: 330,
720
+ columnNumber: 19
721
+ });
722
+ }
723
+ }, {
724
+ fileName: import.meta.url,
725
+ lineNumber: 329,
726
+ columnNumber: 17
727
+ });
728
+ }
729
+ }, {
730
+ fileName: import.meta.url,
731
+ lineNumber: 328,
732
+ columnNumber: 15
733
+ });
734
+ }
735
+ }, {
736
+ fileName: import.meta.url,
737
+ lineNumber: 327,
738
+ columnNumber: 13
739
+ }), _$createComponent(SourceFile, {
740
+ path: "Test.go",
741
+ get children() {
742
+ return [_$createComponent(TypeDeclaration, {
743
+ name: "TestStruct2",
744
+ get children() {
745
+ return _$createComponent(StructDeclaration, {
746
+ get children() {
747
+ return _$createComponent(List, {
748
+ get children() {
749
+ return [_$createComponent(StructEmbed, {
750
+ refkey: TestStructEmbed,
751
+ children: TestStruct
752
+ }, {
753
+ fileName: import.meta.url,
754
+ lineNumber: 342,
755
+ columnNumber: 21
756
+ }), _$createComponent(StructMember, {
757
+ name: "MemberOne",
758
+ type: "string"
759
+ }, {
760
+ fileName: import.meta.url,
761
+ lineNumber: 345,
762
+ columnNumber: 21
763
+ })];
764
+ }
765
+ }, {
766
+ fileName: import.meta.url,
767
+ lineNumber: 341,
768
+ columnNumber: 19
769
+ });
770
+ }
771
+ }, {
772
+ fileName: import.meta.url,
773
+ lineNumber: 340,
774
+ columnNumber: 17
775
+ });
776
+ }
777
+ }, {
778
+ fileName: import.meta.url,
779
+ lineNumber: 339,
780
+ columnNumber: 15
781
+ }), _$createIntrinsic("hbr", {}, {
782
+ fileName: import.meta.url,
783
+ lineNumber: 349,
784
+ columnNumber: 15
785
+ }), TestStructEmbed];
786
+ }
787
+ }, {
788
+ fileName: import.meta.url,
789
+ lineNumber: 338,
790
+ columnNumber: 13
791
+ })];
792
+ }
793
+ }, {
794
+ fileName: import.meta.url,
795
+ lineNumber: 326,
796
+ columnNumber: 11
797
+ });
798
+ }
799
+ }, {
800
+ fileName: import.meta.url,
801
+ lineNumber: 325,
802
+ columnNumber: 9
803
+ });
804
+ }
805
+ }, {
806
+ fileName: import.meta.url,
807
+ lineNumber: 324,
808
+ columnNumber: 7
809
+ }));
810
+ assertFileContents(res, {
811
+ "hello/types.go": `
812
+ package hello
813
+
814
+ type TestStruct struct {
815
+ MemberOne string
816
+ }
817
+ `,
818
+ "Test.go": `
819
+ package alloy
820
+
821
+ import "github.com/alloy-framework/alloy/hello"
822
+
823
+ type TestStruct2 struct {
824
+ hello.TestStruct
825
+ MemberOne string
826
+ }
827
+ TestStruct2.TestStruct
828
+ `
829
+ });
830
+ });
831
+ it("embed using cross-package refkey pointer", () => {
832
+ const TestStruct = refkey("TestStruct");
833
+ const TestStructEmbed = refkey("TestStructEmbed");
834
+ const res = render(_$createComponent(Output, {
835
+ get children() {
836
+ return _$createComponent(ModuleDirectory, {
837
+ name: "github.com/alloy-framework/alloy",
838
+ get children() {
839
+ return _$createComponent(SourceDirectory, {
840
+ path: ".",
841
+ get children() {
842
+ return [_$createComponent(SourceDirectory, {
843
+ path: "hello",
844
+ get children() {
845
+ return _$createComponent(SourceFile, {
846
+ path: "types.go",
847
+ get children() {
848
+ return _$createComponent(TypeDeclaration, {
849
+ name: "TestStruct",
850
+ refkey: TestStruct,
851
+ get children() {
852
+ return _$createComponent(StructDeclaration, {
853
+ get children() {
854
+ return _$createComponent(List, {
855
+ get children() {
856
+ return _$createComponent(StructMember, {
857
+ name: "MemberOne",
858
+ type: "string"
859
+ }, {
860
+ fileName: import.meta.url,
861
+ lineNumber: 392,
862
+ columnNumber: 23
863
+ });
864
+ }
865
+ }, {
866
+ fileName: import.meta.url,
867
+ lineNumber: 391,
868
+ columnNumber: 21
869
+ });
870
+ }
871
+ }, {
872
+ fileName: import.meta.url,
873
+ lineNumber: 390,
874
+ columnNumber: 19
875
+ });
876
+ }
877
+ }, {
878
+ fileName: import.meta.url,
879
+ lineNumber: 389,
880
+ columnNumber: 17
881
+ });
882
+ }
883
+ }, {
884
+ fileName: import.meta.url,
885
+ lineNumber: 388,
886
+ columnNumber: 15
887
+ });
888
+ }
889
+ }, {
890
+ fileName: import.meta.url,
891
+ lineNumber: 387,
892
+ columnNumber: 13
893
+ }), _$createComponent(SourceFile, {
894
+ path: "Test.go",
895
+ get children() {
896
+ return [_$createComponent(TypeDeclaration, {
897
+ name: "TestStruct2",
898
+ get children() {
899
+ return _$createComponent(StructDeclaration, {
900
+ get children() {
901
+ return _$createComponent(List, {
902
+ get children() {
903
+ return [_$createComponent(StructEmbed, {
904
+ refkey: TestStructEmbed,
905
+ get children() {
906
+ return _$createComponent(Pointer, {
907
+ children: TestStruct
908
+ }, {
909
+ fileName: import.meta.url,
910
+ lineNumber: 403,
911
+ columnNumber: 23
912
+ });
913
+ }
914
+ }, {
915
+ fileName: import.meta.url,
916
+ lineNumber: 402,
917
+ columnNumber: 21
918
+ }), _$createComponent(StructMember, {
919
+ name: "MemberOne",
920
+ type: "string"
921
+ }, {
922
+ fileName: import.meta.url,
923
+ lineNumber: 405,
924
+ columnNumber: 21
925
+ })];
926
+ }
927
+ }, {
928
+ fileName: import.meta.url,
929
+ lineNumber: 401,
930
+ columnNumber: 19
931
+ });
932
+ }
933
+ }, {
934
+ fileName: import.meta.url,
935
+ lineNumber: 400,
936
+ columnNumber: 17
937
+ });
938
+ }
939
+ }, {
940
+ fileName: import.meta.url,
941
+ lineNumber: 399,
942
+ columnNumber: 15
943
+ }), _$createIntrinsic("hbr", {}, {
944
+ fileName: import.meta.url,
945
+ lineNumber: 409,
946
+ columnNumber: 15
947
+ }), TestStructEmbed];
948
+ }
949
+ }, {
950
+ fileName: import.meta.url,
951
+ lineNumber: 398,
952
+ columnNumber: 13
953
+ })];
954
+ }
955
+ }, {
956
+ fileName: import.meta.url,
957
+ lineNumber: 386,
958
+ columnNumber: 11
959
+ });
960
+ }
961
+ }, {
962
+ fileName: import.meta.url,
963
+ lineNumber: 385,
964
+ columnNumber: 9
965
+ });
966
+ }
967
+ }, {
968
+ fileName: import.meta.url,
969
+ lineNumber: 384,
970
+ columnNumber: 7
971
+ }));
972
+ assertFileContents(res, {
973
+ "hello/types.go": `
974
+ package hello
975
+
976
+ type TestStruct struct {
977
+ MemberOne string
978
+ }
979
+ `,
980
+ "Test.go": `
981
+ package alloy
982
+
983
+ import "github.com/alloy-framework/alloy/hello"
984
+
985
+ type TestStruct2 struct {
986
+ *hello.TestStruct
987
+ MemberOne string
988
+ }
989
+ TestStruct2.TestStruct
990
+ `
991
+ });
992
+ });
993
+ });
994
+ describe("type parameters", () => {
995
+ it("single type parameter", () => {
996
+ const T = refkey("T");
997
+ expect(_$createComponent(TestPackage, {
998
+ get children() {
999
+ return _$createComponent(TypeDeclaration, {
1000
+ name: "TestStruct",
1001
+ typeParameters: [{
1002
+ name: "T",
1003
+ constraint: "any",
1004
+ refkey: T
1005
+ }],
1006
+ get children() {
1007
+ return _$createComponent(StructDeclaration, {
1008
+ get children() {
1009
+ return _$createComponent(List, {
1010
+ get children() {
1011
+ return _$createComponent(StructMember, {
1012
+ name: "MemberOne",
1013
+ type: T
1014
+ }, {
1015
+ fileName: import.meta.url,
1016
+ lineNumber: 452,
1017
+ columnNumber: 15
1018
+ });
1019
+ }
1020
+ }, {
1021
+ fileName: import.meta.url,
1022
+ lineNumber: 451,
1023
+ columnNumber: 13
1024
+ });
1025
+ }
1026
+ }, {
1027
+ fileName: import.meta.url,
1028
+ lineNumber: 450,
1029
+ columnNumber: 11
1030
+ });
1031
+ }
1032
+ }, {
1033
+ fileName: import.meta.url,
1034
+ lineNumber: 446,
1035
+ columnNumber: 9
1036
+ });
1037
+ }
1038
+ }, {
1039
+ fileName: import.meta.url,
1040
+ lineNumber: 445,
1041
+ columnNumber: 7
1042
+ })).toRenderTo(`
1043
+ package alloy
1044
+
1045
+ type TestStruct[T any] struct {
1046
+ MemberOne T
1047
+ }
1048
+ `);
1049
+ });
1050
+ it("multiple type parameters", () => {
1051
+ const TestStructType = refkey("TestStructType");
1052
+ const U = refkey("U");
1053
+ expect(_$createComponent(TestPackage, {
1054
+ get children() {
1055
+ return [_$createComponent(TypeDeclaration, {
1056
+ name: "TestStructType",
1057
+ refkey: TestStructType,
1058
+ get children() {
1059
+ return _$createComponent(StructDeclaration, {
1060
+ get children() {
1061
+ return _$createComponent(List, {
1062
+ get children() {
1063
+ return _$createComponent(StructMember, {
1064
+ name: "MemberOne",
1065
+ type: "string"
1066
+ }, {
1067
+ fileName: import.meta.url,
1068
+ lineNumber: 475,
1069
+ columnNumber: 15
1070
+ });
1071
+ }
1072
+ }, {
1073
+ fileName: import.meta.url,
1074
+ lineNumber: 474,
1075
+ columnNumber: 13
1076
+ });
1077
+ }
1078
+ }, {
1079
+ fileName: import.meta.url,
1080
+ lineNumber: 473,
1081
+ columnNumber: 11
1082
+ });
1083
+ }
1084
+ }, {
1085
+ fileName: import.meta.url,
1086
+ lineNumber: 472,
1087
+ columnNumber: 9
1088
+ }), _$createIntrinsic("hbr", {}, {
1089
+ fileName: import.meta.url,
1090
+ lineNumber: 479,
1091
+ columnNumber: 9
1092
+ }), _$createComponent(TypeDeclaration, {
1093
+ name: "TestStruct",
1094
+ get typeParameters() {
1095
+ return [{
1096
+ name: "T",
1097
+ constraint: _$createComponent(TypeConstraint, {
1098
+ constraints: ["string", "int"]
1099
+ }, {
1100
+ fileName: import.meta.url,
1101
+ lineNumber: 485,
1102
+ columnNumber: 27
1103
+ })
1104
+ }, {
1105
+ name: "U",
1106
+ constraint: TestStructType,
1107
+ refkey: U
1108
+ }];
1109
+ },
1110
+ get children() {
1111
+ return _$createComponent(StructDeclaration, {
1112
+ get children() {
1113
+ return _$createComponent(List, {
1114
+ get children() {
1115
+ return _$createComponent(StructMember, {
1116
+ name: "MemberOne",
1117
+ type: U
1118
+ }, {
1119
+ fileName: import.meta.url,
1120
+ lineNumber: 492,
1121
+ columnNumber: 15
1122
+ });
1123
+ }
1124
+ }, {
1125
+ fileName: import.meta.url,
1126
+ lineNumber: 491,
1127
+ columnNumber: 13
1128
+ });
1129
+ }
1130
+ }, {
1131
+ fileName: import.meta.url,
1132
+ lineNumber: 490,
1133
+ columnNumber: 11
1134
+ });
1135
+ }
1136
+ }, {
1137
+ fileName: import.meta.url,
1138
+ lineNumber: 480,
1139
+ columnNumber: 9
1140
+ })];
1141
+ }
1142
+ }, {
1143
+ fileName: import.meta.url,
1144
+ lineNumber: 471,
1145
+ columnNumber: 7
1146
+ })).toRenderTo(`
1147
+ package alloy
1148
+
1149
+ type TestStructType struct {
1150
+ MemberOne string
1151
+ }
1152
+ type TestStruct[T string | int, U TestStructType] struct {
1153
+ MemberOne U
1154
+ }
1155
+ `);
1156
+ });
1157
+ it("type parameter overflow", () => {
1158
+ expect(_$createComponent(TestPackage, {
1159
+ get children() {
1160
+ return _$createComponent(TypeDeclaration, {
1161
+ name: "TestStruct",
1162
+ get typeParameters() {
1163
+ return [{
1164
+ name: "T",
1165
+ constraint: _$createComponent(TypeConstraint, {
1166
+ constraints: ["string", "int"]
1167
+ }, {
1168
+ fileName: import.meta.url,
1169
+ lineNumber: 517,
1170
+ columnNumber: 27
1171
+ })
1172
+ }, {
1173
+ name: "T",
1174
+ constraint: _$createComponent(TypeConstraint, {
1175
+ constraints: ["string", "int"]
1176
+ }, {
1177
+ fileName: import.meta.url,
1178
+ lineNumber: 521,
1179
+ columnNumber: 27
1180
+ })
1181
+ }, {
1182
+ name: "T",
1183
+ constraint: _$createComponent(TypeConstraint, {
1184
+ constraints: ["string", "int"]
1185
+ }, {
1186
+ fileName: import.meta.url,
1187
+ lineNumber: 525,
1188
+ columnNumber: 27
1189
+ })
1190
+ }, {
1191
+ name: "T",
1192
+ constraint: _$createComponent(TypeConstraint, {
1193
+ constraints: ["string", "int"]
1194
+ }, {
1195
+ fileName: import.meta.url,
1196
+ lineNumber: 529,
1197
+ columnNumber: 27
1198
+ })
1199
+ }, {
1200
+ name: "T",
1201
+ constraint: _$createComponent(TypeConstraint, {
1202
+ constraints: ["string", "int"]
1203
+ }, {
1204
+ fileName: import.meta.url,
1205
+ lineNumber: 533,
1206
+ columnNumber: 27
1207
+ })
1208
+ }];
1209
+ },
1210
+ get children() {
1211
+ return _$createComponent(StructDeclaration, {
1212
+ get children() {
1213
+ return _$createComponent(List, {
1214
+ get children() {
1215
+ return _$createComponent(StructMember, {
1216
+ name: "MemberOne",
1217
+ type: "string"
1218
+ }, {
1219
+ fileName: import.meta.url,
1220
+ lineNumber: 539,
1221
+ columnNumber: 15
1222
+ });
1223
+ }
1224
+ }, {
1225
+ fileName: import.meta.url,
1226
+ lineNumber: 538,
1227
+ columnNumber: 13
1228
+ });
1229
+ }
1230
+ }, {
1231
+ fileName: import.meta.url,
1232
+ lineNumber: 537,
1233
+ columnNumber: 11
1234
+ });
1235
+ }
1236
+ }, {
1237
+ fileName: import.meta.url,
1238
+ lineNumber: 512,
1239
+ columnNumber: 9
1240
+ });
1241
+ }
1242
+ }, {
1243
+ fileName: import.meta.url,
1244
+ lineNumber: 511,
1245
+ columnNumber: 7
1246
+ })).toRenderTo(`
1247
+ package alloy
1248
+
1249
+ type TestStruct[
1250
+ T string | int,
1251
+ T_2 string | int,
1252
+ T_3 string | int,
1253
+ T_4 string | int,
1254
+ T_5 string | int,
1255
+ ] struct {
1256
+ MemberOne string
1257
+ }
1258
+ `);
1259
+ });
1260
+ });
1261
+ //# sourceMappingURL=struct.test.js.map