@alloy-js/go 0.0.1

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 (264) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/LICENSE +7 -0
  3. package/api-extractor.json +4 -0
  4. package/dist/src/builtins/fmt/fmt.d.ts +147 -0
  5. package/dist/src/builtins/fmt/fmt.d.ts.map +1 -0
  6. package/dist/src/builtins/fmt/fmt.js +148 -0
  7. package/dist/src/builtins/fmt/fmt.js.map +1 -0
  8. package/dist/src/builtins/index.d.ts +2004 -0
  9. package/dist/src/builtins/index.d.ts.map +1 -0
  10. package/dist/src/builtins/index.js +9 -0
  11. package/dist/src/builtins/index.js.map +1 -0
  12. package/dist/src/builtins/io/io.d.ts +648 -0
  13. package/dist/src/builtins/io/io.d.ts.map +1 -0
  14. package/dist/src/builtins/io/io.js +650 -0
  15. package/dist/src/builtins/io/io.js.map +1 -0
  16. package/dist/src/builtins/net/net.d.ts +1210 -0
  17. package/dist/src/builtins/net/net.d.ts.map +1 -0
  18. package/dist/src/builtins/net/net.js +1212 -0
  19. package/dist/src/builtins/net/net.js.map +1 -0
  20. package/dist/src/components/ImportStatement.d.ts +15 -0
  21. package/dist/src/components/ImportStatement.d.ts.map +1 -0
  22. package/dist/src/components/ImportStatement.js +90 -0
  23. package/dist/src/components/ImportStatement.js.map +1 -0
  24. package/dist/src/components/ModuleDirectory.d.ts +8 -0
  25. package/dist/src/components/ModuleDirectory.d.ts.map +1 -0
  26. package/dist/src/components/ModuleDirectory.js +20 -0
  27. package/dist/src/components/ModuleDirectory.js.map +1 -0
  28. package/dist/src/components/Name.d.ts +2 -0
  29. package/dist/src/components/Name.d.ts.map +1 -0
  30. package/dist/src/components/Name.js +12 -0
  31. package/dist/src/components/Name.js.map +1 -0
  32. package/dist/src/components/Reference.d.ts +6 -0
  33. package/dist/src/components/Reference.d.ts.map +1 -0
  34. package/dist/src/components/Reference.js +15 -0
  35. package/dist/src/components/Reference.js.map +1 -0
  36. package/dist/src/components/SourceDirectory.d.ts +6 -0
  37. package/dist/src/components/SourceDirectory.d.ts.map +1 -0
  38. package/dist/src/components/SourceDirectory.js +30 -0
  39. package/dist/src/components/SourceDirectory.js.map +1 -0
  40. package/dist/src/components/SourceFile.d.ts +16 -0
  41. package/dist/src/components/SourceFile.d.ts.map +1 -0
  42. package/dist/src/components/SourceFile.js +75 -0
  43. package/dist/src/components/SourceFile.js.map +1 -0
  44. package/dist/src/components/doc/comment.d.ts +21 -0
  45. package/dist/src/components/doc/comment.d.ts.map +1 -0
  46. package/dist/src/components/doc/comment.js +30 -0
  47. package/dist/src/components/doc/comment.js.map +1 -0
  48. package/dist/src/components/doc/comment.test.d.ts +2 -0
  49. package/dist/src/components/doc/comment.test.d.ts.map +1 -0
  50. package/dist/src/components/doc/comment.test.js +215 -0
  51. package/dist/src/components/doc/comment.test.js.map +1 -0
  52. package/dist/src/components/function/function.d.ts +31 -0
  53. package/dist/src/components/function/function.d.ts.map +1 -0
  54. package/dist/src/components/function/function.js +134 -0
  55. package/dist/src/components/function/function.js.map +1 -0
  56. package/dist/src/components/function/function.test.d.ts +2 -0
  57. package/dist/src/components/function/function.test.d.ts.map +1 -0
  58. package/dist/src/components/function/function.test.js +410 -0
  59. package/dist/src/components/function/function.test.js.map +1 -0
  60. package/dist/src/components/index.d.ts +16 -0
  61. package/dist/src/components/index.d.ts.map +1 -0
  62. package/dist/src/components/index.js +16 -0
  63. package/dist/src/components/index.js.map +1 -0
  64. package/dist/src/components/interface/declaration.d.ts +68 -0
  65. package/dist/src/components/interface/declaration.d.ts.map +1 -0
  66. package/dist/src/components/interface/declaration.js +181 -0
  67. package/dist/src/components/interface/declaration.js.map +1 -0
  68. package/dist/src/components/interface/interface.test.d.ts +2 -0
  69. package/dist/src/components/interface/interface.test.d.ts.map +1 -0
  70. package/dist/src/components/interface/interface.test.js +517 -0
  71. package/dist/src/components/interface/interface.test.js.map +1 -0
  72. package/dist/src/components/package.test.d.ts +2 -0
  73. package/dist/src/components/package.test.d.ts.map +1 -0
  74. package/dist/src/components/package.test.js +89 -0
  75. package/dist/src/components/package.test.js.map +1 -0
  76. package/dist/src/components/parameters/parameters.d.ts +15 -0
  77. package/dist/src/components/parameters/parameters.d.ts.map +1 -0
  78. package/dist/src/components/parameters/parameters.js +58 -0
  79. package/dist/src/components/parameters/parameters.js.map +1 -0
  80. package/dist/src/components/parameters/typeparameters.d.ts +25 -0
  81. package/dist/src/components/parameters/typeparameters.d.ts.map +1 -0
  82. package/dist/src/components/parameters/typeparameters.js +53 -0
  83. package/dist/src/components/parameters/typeparameters.js.map +1 -0
  84. package/dist/src/components/pointer/pointer.d.ts +9 -0
  85. package/dist/src/components/pointer/pointer.d.ts.map +1 -0
  86. package/dist/src/components/pointer/pointer.js +8 -0
  87. package/dist/src/components/pointer/pointer.js.map +1 -0
  88. package/dist/src/components/stc/index.d.ts +27 -0
  89. package/dist/src/components/stc/index.d.ts.map +1 -0
  90. package/dist/src/components/stc/index.js +27 -0
  91. package/dist/src/components/stc/index.js.map +1 -0
  92. package/dist/src/components/struct/declaration.d.ts +62 -0
  93. package/dist/src/components/struct/declaration.d.ts.map +1 -0
  94. package/dist/src/components/struct/declaration.js +161 -0
  95. package/dist/src/components/struct/declaration.js.map +1 -0
  96. package/dist/src/components/struct/struct.test.d.ts +2 -0
  97. package/dist/src/components/struct/struct.test.d.ts.map +1 -0
  98. package/dist/src/components/struct/struct.test.js +741 -0
  99. package/dist/src/components/struct/struct.test.js.map +1 -0
  100. package/dist/src/components/type/declaration.d.ts +29 -0
  101. package/dist/src/components/type/declaration.d.ts.map +1 -0
  102. package/dist/src/components/type/declaration.js +63 -0
  103. package/dist/src/components/type/declaration.js.map +1 -0
  104. package/dist/src/components/var/declaration.d.ts +27 -0
  105. package/dist/src/components/var/declaration.d.ts.map +1 -0
  106. package/dist/src/components/var/declaration.js +84 -0
  107. package/dist/src/components/var/declaration.js.map +1 -0
  108. package/dist/src/components/var/var-declaration.test.d.ts +2 -0
  109. package/dist/src/components/var/var-declaration.test.d.ts.map +1 -0
  110. package/dist/src/components/var/var-declaration.test.js +340 -0
  111. package/dist/src/components/var/var-declaration.test.js.map +1 -0
  112. package/dist/src/context/package.d.ts +9 -0
  113. package/dist/src/context/package.d.ts.map +1 -0
  114. package/dist/src/context/package.js +6 -0
  115. package/dist/src/context/package.js.map +1 -0
  116. package/dist/src/create-module.d.ts +47 -0
  117. package/dist/src/create-module.d.ts.map +1 -0
  118. package/dist/src/create-module.js +158 -0
  119. package/dist/src/create-module.js.map +1 -0
  120. package/dist/src/create-module.test.d.ts +2 -0
  121. package/dist/src/create-module.test.d.ts.map +1 -0
  122. package/dist/src/create-module.test.js +147 -0
  123. package/dist/src/create-module.test.js.map +1 -0
  124. package/dist/src/index.d.ts +6 -0
  125. package/dist/src/index.d.ts.map +1 -0
  126. package/dist/src/index.js +6 -0
  127. package/dist/src/index.js.map +1 -0
  128. package/dist/src/name-policy.d.ts +5 -0
  129. package/dist/src/name-policy.d.ts.map +1 -0
  130. package/dist/src/name-policy.js +27 -0
  131. package/dist/src/name-policy.js.map +1 -0
  132. package/dist/src/scopes/contexts.d.ts +9 -0
  133. package/dist/src/scopes/contexts.d.ts.map +1 -0
  134. package/dist/src/scopes/contexts.js +34 -0
  135. package/dist/src/scopes/contexts.js.map +1 -0
  136. package/dist/src/scopes/factories.d.ts +7 -0
  137. package/dist/src/scopes/factories.d.ts.map +1 -0
  138. package/dist/src/scopes/factories.js +16 -0
  139. package/dist/src/scopes/factories.js.map +1 -0
  140. package/dist/src/scopes/function.d.ts +9 -0
  141. package/dist/src/scopes/function.d.ts.map +1 -0
  142. package/dist/src/scopes/function.js +14 -0
  143. package/dist/src/scopes/function.js.map +1 -0
  144. package/dist/src/scopes/go.d.ts +8 -0
  145. package/dist/src/scopes/go.d.ts.map +1 -0
  146. package/dist/src/scopes/go.js +12 -0
  147. package/dist/src/scopes/go.js.map +1 -0
  148. package/dist/src/scopes/index.d.ts +10 -0
  149. package/dist/src/scopes/index.d.ts.map +1 -0
  150. package/dist/src/scopes/index.js +10 -0
  151. package/dist/src/scopes/index.js.map +1 -0
  152. package/dist/src/scopes/lexical.d.ts +8 -0
  153. package/dist/src/scopes/lexical.d.ts.map +1 -0
  154. package/dist/src/scopes/lexical.js +11 -0
  155. package/dist/src/scopes/lexical.js.map +1 -0
  156. package/dist/src/scopes/module.d.ts +9 -0
  157. package/dist/src/scopes/module.d.ts.map +1 -0
  158. package/dist/src/scopes/module.js +31 -0
  159. package/dist/src/scopes/module.js.map +1 -0
  160. package/dist/src/scopes/named-type.d.ts +23 -0
  161. package/dist/src/scopes/named-type.d.ts.map +1 -0
  162. package/dist/src/scopes/named-type.js +33 -0
  163. package/dist/src/scopes/named-type.js.map +1 -0
  164. package/dist/src/scopes/package.d.ts +11 -0
  165. package/dist/src/scopes/package.d.ts.map +1 -0
  166. package/dist/src/scopes/package.js +39 -0
  167. package/dist/src/scopes/package.js.map +1 -0
  168. package/dist/src/scopes/source-file.d.ts +17 -0
  169. package/dist/src/scopes/source-file.d.ts.map +1 -0
  170. package/dist/src/scopes/source-file.js +42 -0
  171. package/dist/src/scopes/source-file.js.map +1 -0
  172. package/dist/src/symbols/factories.d.ts +25 -0
  173. package/dist/src/symbols/factories.d.ts.map +1 -0
  174. package/dist/src/symbols/factories.js +114 -0
  175. package/dist/src/symbols/factories.js.map +1 -0
  176. package/dist/src/symbols/function.d.ts +10 -0
  177. package/dist/src/symbols/function.d.ts.map +1 -0
  178. package/dist/src/symbols/function.js +12 -0
  179. package/dist/src/symbols/function.js.map +1 -0
  180. package/dist/src/symbols/go.d.ts +22 -0
  181. package/dist/src/symbols/go.d.ts.map +1 -0
  182. package/dist/src/symbols/go.js +56 -0
  183. package/dist/src/symbols/go.js.map +1 -0
  184. package/dist/src/symbols/index.d.ts +7 -0
  185. package/dist/src/symbols/index.d.ts.map +1 -0
  186. package/dist/src/symbols/index.js +7 -0
  187. package/dist/src/symbols/index.js.map +1 -0
  188. package/dist/src/symbols/named-type.d.ts +24 -0
  189. package/dist/src/symbols/named-type.d.ts.map +1 -0
  190. package/dist/src/symbols/named-type.js +53 -0
  191. package/dist/src/symbols/named-type.js.map +1 -0
  192. package/dist/src/symbols/package.d.ts +18 -0
  193. package/dist/src/symbols/package.d.ts.map +1 -0
  194. package/dist/src/symbols/package.js +38 -0
  195. package/dist/src/symbols/package.js.map +1 -0
  196. package/dist/src/symbols/reference.d.ts +3 -0
  197. package/dist/src/symbols/reference.d.ts.map +1 -0
  198. package/dist/src/symbols/reference.js +76 -0
  199. package/dist/src/symbols/reference.js.map +1 -0
  200. package/dist/test/utils.d.ts +8 -0
  201. package/dist/test/utils.d.ts.map +1 -0
  202. package/dist/test/utils.js +68 -0
  203. package/dist/test/utils.js.map +1 -0
  204. package/dist/test/vitest.setup.d.ts +2 -0
  205. package/dist/test/vitest.setup.d.ts.map +1 -0
  206. package/dist/test/vitest.setup.js +2 -0
  207. package/dist/test/vitest.setup.js.map +1 -0
  208. package/dist/tsconfig.tsbuildinfo +1 -0
  209. package/package.json +45 -0
  210. package/src/builtins/fmt/fmt.ts +78 -0
  211. package/src/builtins/index.ts +9 -0
  212. package/src/builtins/io/io.ts +355 -0
  213. package/src/builtins/net/net.ts +502 -0
  214. package/src/components/ImportStatement.tsx +115 -0
  215. package/src/components/ModuleDirectory.tsx +18 -0
  216. package/src/components/Name.tsx +11 -0
  217. package/src/components/Reference.tsx +18 -0
  218. package/src/components/SourceDirectory.tsx +32 -0
  219. package/src/components/SourceFile.tsx +74 -0
  220. package/src/components/doc/comment.test.tsx +278 -0
  221. package/src/components/doc/comment.tsx +40 -0
  222. package/src/components/function/function.test.tsx +387 -0
  223. package/src/components/function/function.tsx +194 -0
  224. package/src/components/index.ts +15 -0
  225. package/src/components/interface/declaration.tsx +250 -0
  226. package/src/components/interface/interface.test.tsx +390 -0
  227. package/src/components/package.test.tsx +63 -0
  228. package/src/components/parameters/parameters.tsx +74 -0
  229. package/src/components/parameters/typeparameters.tsx +78 -0
  230. package/src/components/pointer/pointer.tsx +12 -0
  231. package/src/components/stc/index.ts +27 -0
  232. package/src/components/struct/declaration.tsx +228 -0
  233. package/src/components/struct/struct.test.tsx +558 -0
  234. package/src/components/type/declaration.tsx +93 -0
  235. package/src/components/var/declaration.tsx +138 -0
  236. package/src/components/var/var-declaration.test.tsx +236 -0
  237. package/src/context/package.ts +13 -0
  238. package/src/create-module.test.tsx +128 -0
  239. package/src/create-module.ts +347 -0
  240. package/src/index.ts +5 -0
  241. package/src/name-policy.ts +65 -0
  242. package/src/scopes/contexts.ts +45 -0
  243. package/src/scopes/factories.ts +29 -0
  244. package/src/scopes/function.ts +22 -0
  245. package/src/scopes/go.ts +18 -0
  246. package/src/scopes/index.ts +9 -0
  247. package/src/scopes/lexical.ts +14 -0
  248. package/src/scopes/module.ts +35 -0
  249. package/src/scopes/named-type.ts +49 -0
  250. package/src/scopes/package.ts +55 -0
  251. package/src/scopes/source-file.ts +66 -0
  252. package/src/symbols/factories.ts +234 -0
  253. package/src/symbols/function.ts +17 -0
  254. package/src/symbols/go.ts +82 -0
  255. package/src/symbols/index.ts +6 -0
  256. package/src/symbols/named-type.ts +90 -0
  257. package/src/symbols/package.ts +54 -0
  258. package/src/symbols/reference.ts +87 -0
  259. package/temp/api.json +8753 -0
  260. package/test/utils.tsx +77 -0
  261. package/test/vitest.setup.ts +1 -0
  262. package/tsconfig.json +15 -0
  263. package/tsdoc-metadata.json +11 -0
  264. package/vitest.config.ts +13 -0
@@ -0,0 +1,741 @@
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
+ }
24
+ });
25
+ }
26
+ });
27
+ }
28
+ it("declares struct with no members", () => {
29
+ expect(_$createComponent(TestPackage, {
30
+ get children() {
31
+ return _$createComponent(TypeDeclaration, {
32
+ name: "test",
33
+ get children() {
34
+ return _$createComponent(StructDeclaration, {});
35
+ }
36
+ });
37
+ }
38
+ })).toRenderTo(`
39
+ package alloy
40
+
41
+ type test struct{}
42
+ `);
43
+ });
44
+ it("specify doc comment", () => {
45
+ expect(_$createComponent(TestPackage, {
46
+ get children() {
47
+ return _$createComponent(TypeDeclaration, {
48
+ name: "test",
49
+ doc: "This is a test",
50
+ get children() {
51
+ return _$createComponent(StructDeclaration, {});
52
+ }
53
+ });
54
+ }
55
+ })).toRenderTo(`
56
+ package alloy
57
+
58
+ // This is a test
59
+ type test struct{}
60
+ `);
61
+ });
62
+ it("defines fields", () => {
63
+ expect(_$createComponent(TestPackage, {
64
+ get children() {
65
+ return _$createComponent(TypeDeclaration, {
66
+ name: "TestStruct",
67
+ get children() {
68
+ return _$createComponent(StructDeclaration, {
69
+ get children() {
70
+ return _$createComponent(List, {
71
+ get children() {
72
+ return [_$createComponent(StructMember, {
73
+ name: "MemberOne",
74
+ type: "string"
75
+ }), _$createComponent(StructMember, {
76
+ name: "memberTwo",
77
+ type: "int"
78
+ })];
79
+ }
80
+ });
81
+ }
82
+ });
83
+ }
84
+ });
85
+ }
86
+ })).toRenderTo(`
87
+ package alloy
88
+
89
+ type TestStruct struct {
90
+ MemberOne string
91
+ memberTwo int
92
+ }
93
+ `);
94
+ });
95
+ it("nested struct", () => {
96
+ const Member1 = refkey("Member1");
97
+ const Member2 = refkey("Member2");
98
+ const Member3 = refkey("Member3");
99
+ const Member4 = refkey("Member4");
100
+ expect(_$createComponent(TestPackage, {
101
+ get children() {
102
+ return [_$createComponent(TypeDeclaration, {
103
+ name: "TestStruct",
104
+ get children() {
105
+ return _$createComponent(StructDeclaration, {
106
+ get children() {
107
+ return _$createComponent(List, {
108
+ get children() {
109
+ return [_$createComponent(StructMember, {
110
+ name: "MemberOne",
111
+ type: "string",
112
+ refkey: Member1
113
+ }), _$createComponent(StructMember, {
114
+ name: "MemberTwo",
115
+ refkey: Member2,
116
+ get type() {
117
+ return _$createComponent(StructDeclaration, {
118
+ get children() {
119
+ return _$createComponent(List, {
120
+ get children() {
121
+ return [_$createComponent(StructMember, {
122
+ name: "MemberOne",
123
+ type: "string",
124
+ refkey: Member3
125
+ }), _$createComponent(StructMember, {
126
+ name: "NestedMemberTwo",
127
+ type: "int",
128
+ refkey: Member4
129
+ })];
130
+ }
131
+ });
132
+ }
133
+ });
134
+ }
135
+ })];
136
+ }
137
+ });
138
+ }
139
+ });
140
+ }
141
+ }), _$createIntrinsic("hbr", {}), Member1, _$createIntrinsic("hbr", {}), Member2, _$createIntrinsic("hbr", {}), Member3, _$createIntrinsic("hbr", {}), Member4];
142
+ }
143
+ })).toRenderTo(`
144
+ package alloy
145
+
146
+ type TestStruct struct {
147
+ MemberOne string
148
+ MemberTwo struct {
149
+ MemberOne string
150
+ NestedMemberTwo int
151
+ }
152
+ }
153
+ TestStruct.MemberOne
154
+ TestStruct.MemberTwo
155
+ TestStruct.MemberTwo.MemberOne
156
+ TestStruct.MemberTwo.NestedMemberTwo
157
+ `);
158
+ });
159
+ it("declares multiple fields", () => {
160
+ expect(_$createComponent(Wrapper, {
161
+ get children() {
162
+ return _$createComponent(List, {
163
+ get children() {
164
+ return [_$createComponent(StructMember, {
165
+ name: "MemberOne",
166
+ type: "string"
167
+ }), _$createComponent(StructMember, {
168
+ name: "MemberTwo",
169
+ type: "int"
170
+ })];
171
+ }
172
+ });
173
+ }
174
+ })).toRenderTo(`
175
+ package alloy
176
+
177
+ type TestStruct struct {
178
+ MemberOne string
179
+ MemberTwo int
180
+ }
181
+ `);
182
+ });
183
+ it("declares multiple fields with tags", () => {
184
+ expect(_$createComponent(Wrapper, {
185
+ get children() {
186
+ return _$createComponent(List, {
187
+ get children() {
188
+ return [_$createComponent(StructMember, {
189
+ name: "MemberOne",
190
+ type: "string",
191
+ tag: "this is arbitrary tag #1"
192
+ }), _$createComponent(StructMember, {
193
+ name: "MemberTwo",
194
+ type: "int",
195
+ tag: "this is arbitrary tag #2"
196
+ })];
197
+ }
198
+ });
199
+ }
200
+ })).toRenderTo(`
201
+ package alloy
202
+
203
+ type TestStruct struct {
204
+ MemberOne string "this is arbitrary tag #1"
205
+ MemberTwo int "this is arbitrary tag #2"
206
+ }
207
+ `);
208
+ });
209
+ it("declares multiple fields with tag object", () => {
210
+ expect(_$createComponent(Wrapper, {
211
+ get children() {
212
+ return _$createComponent(List, {
213
+ get children() {
214
+ return [_$createComponent(StructMember, {
215
+ name: "MemberOne",
216
+ type: "string",
217
+ tag: {
218
+ json: "member_one,omit_empty"
219
+ }
220
+ }), _$createComponent(StructMember, {
221
+ name: "MemberTwo",
222
+ type: "int",
223
+ tag: {
224
+ xml: "member_two,omit_empty",
225
+ yaml: "memberTwo"
226
+ }
227
+ })];
228
+ }
229
+ });
230
+ }
231
+ })).toRenderTo(`
232
+ package alloy
233
+
234
+ type TestStruct struct {
235
+ MemberOne string \`json:"member_one,omit_empty"\`
236
+ MemberTwo int \`xml:"member_two,omit_empty" yaml:"memberTwo"\`
237
+ }
238
+ `);
239
+ });
240
+ describe("naming", () => {
241
+ it("public field is PascalCase", () => {
242
+ expect(_$createComponent(Wrapper, {
243
+ get children() {
244
+ return _$createComponent(List, {
245
+ get children() {
246
+ return _$createComponent(StructMember, {
247
+ name: "MemberOne",
248
+ type: "string"
249
+ });
250
+ }
251
+ });
252
+ }
253
+ })).toRenderTo(`
254
+ package alloy
255
+
256
+ type TestStruct struct {
257
+ MemberOne string
258
+ }
259
+ `);
260
+ });
261
+ it("private field are camelCase", () => {
262
+ expect(_$createComponent(Wrapper, {
263
+ get children() {
264
+ return _$createComponent(List, {
265
+ get children() {
266
+ return _$createComponent(StructMember, {
267
+ name: "memberOne",
268
+ type: "string"
269
+ });
270
+ }
271
+ });
272
+ }
273
+ })).toRenderTo(`
274
+ package alloy
275
+
276
+ type TestStruct struct {
277
+ memberOne string
278
+ }
279
+ `);
280
+ });
281
+ });
282
+ describe("embedded", () => {
283
+ it("embed using children", () => {
284
+ const TestStructEmbed = refkey("TestStructEmbed");
285
+ expect(_$createComponent(TestPackage, {
286
+ get children() {
287
+ return [_$createComponent(TypeDeclaration, {
288
+ name: "TestStruct",
289
+ get children() {
290
+ return _$createComponent(StructDeclaration, {
291
+ get children() {
292
+ return _$createComponent(List, {
293
+ get children() {
294
+ return _$createComponent(StructMember, {
295
+ name: "MemberOne",
296
+ type: "string"
297
+ });
298
+ }
299
+ });
300
+ }
301
+ });
302
+ }
303
+ }), _$createIntrinsic("hbr", {}), _$createComponent(TypeDeclaration, {
304
+ name: "TestStruct2",
305
+ get children() {
306
+ return _$createComponent(StructDeclaration, {
307
+ get children() {
308
+ return _$createComponent(List, {
309
+ get children() {
310
+ return [_$createComponent(StructEmbed, {
311
+ refkey: TestStructEmbed,
312
+ children: "TestStruct"
313
+ }), _$createComponent(StructMember, {
314
+ name: "MemberOne",
315
+ type: "string"
316
+ })];
317
+ }
318
+ });
319
+ }
320
+ });
321
+ }
322
+ }), _$createIntrinsic("hbr", {}), TestStructEmbed];
323
+ }
324
+ })).toRenderTo(`
325
+ package alloy
326
+
327
+ type TestStruct struct {
328
+ MemberOne string
329
+ }
330
+ type TestStruct2 struct {
331
+ TestStruct
332
+ MemberOne string
333
+ }
334
+ TestStruct2.TestStruct
335
+ `);
336
+ });
337
+ it("embed using refkey", () => {
338
+ const TestStruct = refkey("TestStruct");
339
+ const TestStructEmbed = refkey("TestStructEmbed");
340
+ expect(_$createComponent(TestPackage, {
341
+ get children() {
342
+ return [_$createComponent(TypeDeclaration, {
343
+ name: "TestStruct",
344
+ refkey: TestStruct,
345
+ get children() {
346
+ return _$createComponent(StructDeclaration, {
347
+ get children() {
348
+ return _$createComponent(List, {
349
+ get children() {
350
+ return _$createComponent(StructMember, {
351
+ name: "MemberOne",
352
+ type: "string"
353
+ });
354
+ }
355
+ });
356
+ }
357
+ });
358
+ }
359
+ }), _$createIntrinsic("hbr", {}), _$createComponent(TypeDeclaration, {
360
+ name: "TestStruct2",
361
+ get children() {
362
+ return _$createComponent(StructDeclaration, {
363
+ get children() {
364
+ return _$createComponent(List, {
365
+ get children() {
366
+ return [_$createComponent(StructEmbed, {
367
+ refkey: TestStructEmbed,
368
+ children: TestStruct
369
+ }), _$createComponent(StructMember, {
370
+ name: "MemberOne",
371
+ type: "string"
372
+ })];
373
+ }
374
+ });
375
+ }
376
+ });
377
+ }
378
+ }), _$createIntrinsic("hbr", {}), TestStructEmbed];
379
+ }
380
+ })).toRenderTo(`
381
+ package alloy
382
+
383
+ type TestStruct struct {
384
+ MemberOne string
385
+ }
386
+ type TestStruct2 struct {
387
+ TestStruct
388
+ MemberOne string
389
+ }
390
+ TestStruct2.TestStruct
391
+ `);
392
+ });
393
+ it("embed using cross-package refkey", () => {
394
+ const TestStruct = refkey("TestStruct");
395
+ const TestStructEmbed = refkey("TestStructEmbed");
396
+ const res = render(_$createComponent(Output, {
397
+ get children() {
398
+ return _$createComponent(ModuleDirectory, {
399
+ name: "github.com/alloy-framework/alloy",
400
+ get children() {
401
+ return _$createComponent(SourceDirectory, {
402
+ path: ".",
403
+ get children() {
404
+ return [_$createComponent(SourceDirectory, {
405
+ path: "hello",
406
+ get children() {
407
+ return _$createComponent(SourceFile, {
408
+ path: "types.go",
409
+ get children() {
410
+ return _$createComponent(TypeDeclaration, {
411
+ name: "TestStruct",
412
+ refkey: TestStruct,
413
+ get children() {
414
+ return _$createComponent(StructDeclaration, {
415
+ get children() {
416
+ return _$createComponent(List, {
417
+ get children() {
418
+ return _$createComponent(StructMember, {
419
+ name: "MemberOne",
420
+ type: "string"
421
+ });
422
+ }
423
+ });
424
+ }
425
+ });
426
+ }
427
+ });
428
+ }
429
+ });
430
+ }
431
+ }), _$createComponent(SourceFile, {
432
+ path: "Test.go",
433
+ get children() {
434
+ return [_$createComponent(TypeDeclaration, {
435
+ name: "TestStruct2",
436
+ get children() {
437
+ return _$createComponent(StructDeclaration, {
438
+ get children() {
439
+ return _$createComponent(List, {
440
+ get children() {
441
+ return [_$createComponent(StructEmbed, {
442
+ refkey: TestStructEmbed,
443
+ children: TestStruct
444
+ }), _$createComponent(StructMember, {
445
+ name: "MemberOne",
446
+ type: "string"
447
+ })];
448
+ }
449
+ });
450
+ }
451
+ });
452
+ }
453
+ }), _$createIntrinsic("hbr", {}), TestStructEmbed];
454
+ }
455
+ })];
456
+ }
457
+ });
458
+ }
459
+ });
460
+ }
461
+ }));
462
+ assertFileContents(res, {
463
+ "hello/types.go": `
464
+ package hello
465
+
466
+ type TestStruct struct {
467
+ MemberOne string
468
+ }
469
+ `,
470
+ "Test.go": `
471
+ package alloy
472
+
473
+ import "github.com/alloy-framework/alloy/hello"
474
+
475
+ type TestStruct2 struct {
476
+ hello.TestStruct
477
+ MemberOne string
478
+ }
479
+ TestStruct2.TestStruct
480
+ `
481
+ });
482
+ });
483
+ it("embed using cross-package refkey pointer", () => {
484
+ const TestStruct = refkey("TestStruct");
485
+ const TestStructEmbed = refkey("TestStructEmbed");
486
+ const res = render(_$createComponent(Output, {
487
+ get children() {
488
+ return _$createComponent(ModuleDirectory, {
489
+ name: "github.com/alloy-framework/alloy",
490
+ get children() {
491
+ return _$createComponent(SourceDirectory, {
492
+ path: ".",
493
+ get children() {
494
+ return [_$createComponent(SourceDirectory, {
495
+ path: "hello",
496
+ get children() {
497
+ return _$createComponent(SourceFile, {
498
+ path: "types.go",
499
+ get children() {
500
+ return _$createComponent(TypeDeclaration, {
501
+ name: "TestStruct",
502
+ refkey: TestStruct,
503
+ get children() {
504
+ return _$createComponent(StructDeclaration, {
505
+ get children() {
506
+ return _$createComponent(List, {
507
+ get children() {
508
+ return _$createComponent(StructMember, {
509
+ name: "MemberOne",
510
+ type: "string"
511
+ });
512
+ }
513
+ });
514
+ }
515
+ });
516
+ }
517
+ });
518
+ }
519
+ });
520
+ }
521
+ }), _$createComponent(SourceFile, {
522
+ path: "Test.go",
523
+ get children() {
524
+ return [_$createComponent(TypeDeclaration, {
525
+ name: "TestStruct2",
526
+ get children() {
527
+ return _$createComponent(StructDeclaration, {
528
+ get children() {
529
+ return _$createComponent(List, {
530
+ get children() {
531
+ return [_$createComponent(StructEmbed, {
532
+ refkey: TestStructEmbed,
533
+ get children() {
534
+ return _$createComponent(Pointer, {
535
+ children: TestStruct
536
+ });
537
+ }
538
+ }), _$createComponent(StructMember, {
539
+ name: "MemberOne",
540
+ type: "string"
541
+ })];
542
+ }
543
+ });
544
+ }
545
+ });
546
+ }
547
+ }), _$createIntrinsic("hbr", {}), TestStructEmbed];
548
+ }
549
+ })];
550
+ }
551
+ });
552
+ }
553
+ });
554
+ }
555
+ }));
556
+ assertFileContents(res, {
557
+ "hello/types.go": `
558
+ package hello
559
+
560
+ type TestStruct struct {
561
+ MemberOne string
562
+ }
563
+ `,
564
+ "Test.go": `
565
+ package alloy
566
+
567
+ import "github.com/alloy-framework/alloy/hello"
568
+
569
+ type TestStruct2 struct {
570
+ *hello.TestStruct
571
+ MemberOne string
572
+ }
573
+ TestStruct2.TestStruct
574
+ `
575
+ });
576
+ });
577
+ });
578
+ describe("type parameters", () => {
579
+ it("single type parameter", () => {
580
+ const T = refkey("T");
581
+ expect(_$createComponent(TestPackage, {
582
+ get children() {
583
+ return _$createComponent(TypeDeclaration, {
584
+ name: "TestStruct",
585
+ typeParameters: [{
586
+ name: "T",
587
+ constraint: "any",
588
+ refkey: T
589
+ }],
590
+ get children() {
591
+ return _$createComponent(StructDeclaration, {
592
+ get children() {
593
+ return _$createComponent(List, {
594
+ get children() {
595
+ return _$createComponent(StructMember, {
596
+ name: "MemberOne",
597
+ type: T
598
+ });
599
+ }
600
+ });
601
+ }
602
+ });
603
+ }
604
+ });
605
+ }
606
+ })).toRenderTo(`
607
+ package alloy
608
+
609
+ type TestStruct[T any] struct {
610
+ MemberOne T
611
+ }
612
+ `);
613
+ });
614
+ it("multiple type parameters", () => {
615
+ const TestStructType = refkey("TestStructType");
616
+ const U = refkey("U");
617
+ expect(_$createComponent(TestPackage, {
618
+ get children() {
619
+ return [_$createComponent(TypeDeclaration, {
620
+ name: "TestStructType",
621
+ refkey: TestStructType,
622
+ get children() {
623
+ return _$createComponent(StructDeclaration, {
624
+ get children() {
625
+ return _$createComponent(List, {
626
+ get children() {
627
+ return _$createComponent(StructMember, {
628
+ name: "MemberOne",
629
+ type: "string"
630
+ });
631
+ }
632
+ });
633
+ }
634
+ });
635
+ }
636
+ }), _$createIntrinsic("hbr", {}), _$createComponent(TypeDeclaration, {
637
+ name: "TestStruct",
638
+ get typeParameters() {
639
+ return [{
640
+ name: "T",
641
+ constraint: _$createComponent(TypeConstraint, {
642
+ constraints: ["string", "int"]
643
+ })
644
+ }, {
645
+ name: "U",
646
+ constraint: TestStructType,
647
+ refkey: U
648
+ }];
649
+ },
650
+ get children() {
651
+ return _$createComponent(StructDeclaration, {
652
+ get children() {
653
+ return _$createComponent(List, {
654
+ get children() {
655
+ return _$createComponent(StructMember, {
656
+ name: "MemberOne",
657
+ type: U
658
+ });
659
+ }
660
+ });
661
+ }
662
+ });
663
+ }
664
+ })];
665
+ }
666
+ })).toRenderTo(`
667
+ package alloy
668
+
669
+ type TestStructType struct {
670
+ MemberOne string
671
+ }
672
+ type TestStruct[T string | int, U TestStructType] struct {
673
+ MemberOne U
674
+ }
675
+ `);
676
+ });
677
+ it("type parameter overflow", () => {
678
+ expect(_$createComponent(TestPackage, {
679
+ get children() {
680
+ return _$createComponent(TypeDeclaration, {
681
+ name: "TestStruct",
682
+ get typeParameters() {
683
+ return [{
684
+ name: "T",
685
+ constraint: _$createComponent(TypeConstraint, {
686
+ constraints: ["string", "int"]
687
+ })
688
+ }, {
689
+ name: "T",
690
+ constraint: _$createComponent(TypeConstraint, {
691
+ constraints: ["string", "int"]
692
+ })
693
+ }, {
694
+ name: "T",
695
+ constraint: _$createComponent(TypeConstraint, {
696
+ constraints: ["string", "int"]
697
+ })
698
+ }, {
699
+ name: "T",
700
+ constraint: _$createComponent(TypeConstraint, {
701
+ constraints: ["string", "int"]
702
+ })
703
+ }, {
704
+ name: "T",
705
+ constraint: _$createComponent(TypeConstraint, {
706
+ constraints: ["string", "int"]
707
+ })
708
+ }];
709
+ },
710
+ get children() {
711
+ return _$createComponent(StructDeclaration, {
712
+ get children() {
713
+ return _$createComponent(List, {
714
+ get children() {
715
+ return _$createComponent(StructMember, {
716
+ name: "MemberOne",
717
+ type: "string"
718
+ });
719
+ }
720
+ });
721
+ }
722
+ });
723
+ }
724
+ });
725
+ }
726
+ })).toRenderTo(`
727
+ package alloy
728
+
729
+ type TestStruct[
730
+ T string | int,
731
+ T_2 string | int,
732
+ T_3 string | int,
733
+ T_4 string | int,
734
+ T_5 string | int,
735
+ ] struct {
736
+ MemberOne string
737
+ }
738
+ `);
739
+ });
740
+ });
741
+ //# sourceMappingURL=struct.test.js.map