@alloy-js/go 0.3.0-dev.2 → 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 (109) 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/tsconfig.tsbuildinfo +1 -1
  108. package/package.json +7 -4
  109. 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