wesl 0.6.0-pre10

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 (141) hide show
  1. package/README.md +31 -0
  2. package/dist/index.js +4468 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/minified.js +3426 -0
  5. package/dist/minified.js.map +1 -0
  6. package/dist/tools/packages/wesl/src/AbstractElems.d.ts +322 -0
  7. package/dist/tools/packages/wesl/src/Assertions.d.ts +27 -0
  8. package/dist/tools/packages/wesl/src/BindIdents.d.ts +70 -0
  9. package/dist/tools/packages/wesl/src/Conditions.d.ts +6 -0
  10. package/dist/tools/packages/wesl/src/FlattenTreeImport.d.ts +11 -0
  11. package/dist/tools/packages/wesl/src/LinkedWesl.d.ts +50 -0
  12. package/dist/tools/packages/wesl/src/Linker.d.ts +87 -0
  13. package/dist/tools/packages/wesl/src/LinkerUtil.d.ts +3 -0
  14. package/dist/tools/packages/wesl/src/LiveDeclarations.d.ts +12 -0
  15. package/dist/tools/packages/wesl/src/LowerAndEmit.d.ts +31 -0
  16. package/dist/tools/packages/wesl/src/Mangler.d.ts +39 -0
  17. package/dist/tools/packages/wesl/src/ParseWESL.d.ts +60 -0
  18. package/dist/tools/packages/wesl/src/ParsedRegistry.d.ts +29 -0
  19. package/dist/tools/packages/wesl/src/PathUtil.d.ts +6 -0
  20. package/dist/tools/packages/wesl/src/RawEmit.d.ts +6 -0
  21. package/dist/tools/packages/wesl/src/Reflection.d.ts +45 -0
  22. package/dist/tools/packages/wesl/src/Scope.d.ts +81 -0
  23. package/dist/tools/packages/wesl/src/StandardTypes.d.ts +13 -0
  24. package/dist/tools/packages/wesl/src/TransformBindingStructs.d.ts +52 -0
  25. package/dist/tools/packages/wesl/src/Util.d.ts +43 -0
  26. package/dist/tools/packages/wesl/src/WESLCollect.d.ts +94 -0
  27. package/dist/tools/packages/wesl/src/WeslBundle.d.ts +13 -0
  28. package/dist/tools/packages/wesl/src/WeslDevice.d.ts +25 -0
  29. package/dist/tools/packages/wesl/src/debug/ASTtoString.d.ts +5 -0
  30. package/dist/tools/packages/wesl/src/debug/ImportToString.d.ts +2 -0
  31. package/dist/tools/packages/wesl/src/debug/LineWrapper.d.ts +21 -0
  32. package/dist/tools/packages/wesl/src/debug/ScopeToString.d.ts +6 -0
  33. package/dist/tools/packages/wesl/src/index.d.ts +11 -0
  34. package/dist/tools/packages/wesl/src/parse/ImportGrammar.d.ts +5 -0
  35. package/dist/tools/packages/wesl/src/parse/Keywords.d.ts +4 -0
  36. package/dist/tools/packages/wesl/src/parse/WeslBaseGrammar.d.ts +5 -0
  37. package/dist/tools/packages/wesl/src/parse/WeslExpression.d.ts +13 -0
  38. package/dist/tools/packages/wesl/src/parse/WeslGrammar.d.ts +80 -0
  39. package/dist/tools/packages/wesl/src/parse/WeslStream.d.ts +44 -0
  40. package/dist/tools/packages/wesl/src/test/BindWESL.test.d.ts +1 -0
  41. package/dist/tools/packages/wesl/src/test/ConditionLinking.test.d.ts +1 -0
  42. package/dist/tools/packages/wesl/src/test/ConditionalTranslationCases.test.d.ts +1 -0
  43. package/dist/tools/packages/wesl/src/test/ErrorLogging.test.d.ts +1 -0
  44. package/dist/tools/packages/wesl/src/test/Expression.test.d.ts +1 -0
  45. package/dist/tools/packages/wesl/src/test/FlattenTreeImport.test.d.ts +1 -0
  46. package/dist/tools/packages/wesl/src/test/ImportCases.test.d.ts +1 -0
  47. package/dist/tools/packages/wesl/src/test/ImportSyntaxCases.test.d.ts +1 -0
  48. package/dist/tools/packages/wesl/src/test/LinkGlob.test.d.ts +1 -0
  49. package/dist/tools/packages/wesl/src/test/LinkPackage.test.d.ts +1 -0
  50. package/dist/tools/packages/wesl/src/test/Linker.test.d.ts +1 -0
  51. package/dist/tools/packages/wesl/src/test/Mangling.test.d.ts +1 -0
  52. package/dist/tools/packages/wesl/src/test/ParseComments.test.d.ts +1 -0
  53. package/dist/tools/packages/wesl/src/test/ParseConditions.test.d.ts +1 -0
  54. package/dist/tools/packages/wesl/src/test/ParseError.test.d.ts +1 -0
  55. package/dist/tools/packages/wesl/src/test/ParseWESL.test.d.ts +1 -0
  56. package/dist/tools/packages/wesl/src/test/PathUtil.test.d.ts +1 -0
  57. package/dist/tools/packages/wesl/src/test/PrettyGrammar.test.d.ts +1 -0
  58. package/dist/tools/packages/wesl/src/test/Reflection.test.d.ts +1 -0
  59. package/dist/tools/packages/wesl/src/test/ScopeWESL.test.d.ts +1 -0
  60. package/dist/tools/packages/wesl/src/test/TestLink.d.ts +21 -0
  61. package/dist/tools/packages/wesl/src/test/TestSetup.d.ts +1 -0
  62. package/dist/tools/packages/wesl/src/test/TestUtil.d.ts +40 -0
  63. package/dist/tools/packages/wesl/src/test/Tokenizer.test.d.ts +1 -0
  64. package/dist/tools/packages/wesl/src/test/TransformBindingStructs.test.d.ts +1 -0
  65. package/dist/tools/packages/wesl/src/test/Util.test.d.ts +1 -0
  66. package/dist/tools/packages/wesl/src/test/VirtualModules.test.d.ts +1 -0
  67. package/dist/tools/packages/wesl/src/test/WeslDevice.test.d.ts +1 -0
  68. package/dist/tools/packages/wesl/src/test/WgslTests.d.ts +0 -0
  69. package/dist/tools/packages/wesl/src/vlq/vlq.d.ts +11 -0
  70. package/package.json +46 -0
  71. package/src/AbstractElems.ts +446 -0
  72. package/src/Assertions.ts +51 -0
  73. package/src/BindIdents.ts +523 -0
  74. package/src/Conditions.ts +74 -0
  75. package/src/FlattenTreeImport.ts +55 -0
  76. package/src/LinkedWesl.ts +184 -0
  77. package/src/Linker.ts +284 -0
  78. package/src/LinkerUtil.ts +29 -0
  79. package/src/LiveDeclarations.ts +31 -0
  80. package/src/LowerAndEmit.ts +413 -0
  81. package/src/Mangler.ts +94 -0
  82. package/src/ParseWESL.ts +157 -0
  83. package/src/ParsedRegistry.ts +120 -0
  84. package/src/PathUtil.ts +31 -0
  85. package/src/RawEmit.ts +102 -0
  86. package/src/Reflection.ts +334 -0
  87. package/src/Scope.ts +162 -0
  88. package/src/StandardTypes.ts +97 -0
  89. package/src/TransformBindingStructs.ts +319 -0
  90. package/src/Util.ts +194 -0
  91. package/src/WESLCollect.ts +614 -0
  92. package/src/WeslBundle.ts +16 -0
  93. package/src/WeslDevice.ts +209 -0
  94. package/src/debug/ASTtoString.ts +290 -0
  95. package/src/debug/ImportToString.ts +29 -0
  96. package/src/debug/LineWrapper.ts +70 -0
  97. package/src/debug/ScopeToString.ts +79 -0
  98. package/src/index.ts +11 -0
  99. package/src/parse/ImportGrammar.ts +157 -0
  100. package/src/parse/Keywords.ts +26 -0
  101. package/src/parse/WeslBaseGrammar.ts +8 -0
  102. package/src/parse/WeslExpression.ts +207 -0
  103. package/src/parse/WeslGrammar.ts +856 -0
  104. package/src/parse/WeslStream.ts +279 -0
  105. package/src/test/BindWESL.test.ts +57 -0
  106. package/src/test/ConditionLinking.test.ts +91 -0
  107. package/src/test/ConditionalTranslationCases.test.ts +56 -0
  108. package/src/test/ErrorLogging.test.ts +30 -0
  109. package/src/test/Expression.test.ts +22 -0
  110. package/src/test/FlattenTreeImport.test.ts +74 -0
  111. package/src/test/ImportCases.test.ts +56 -0
  112. package/src/test/ImportSyntaxCases.test.ts +24 -0
  113. package/src/test/LinkGlob.test.ts +25 -0
  114. package/src/test/LinkPackage.test.ts +26 -0
  115. package/src/test/Linker.test.ts +125 -0
  116. package/src/test/Mangling.test.ts +45 -0
  117. package/src/test/ParseComments.test.ts +36 -0
  118. package/src/test/ParseConditions.test.ts +183 -0
  119. package/src/test/ParseError.test.ts +36 -0
  120. package/src/test/ParseWESL.test.ts +1572 -0
  121. package/src/test/PathUtil.test.ts +34 -0
  122. package/src/test/PrettyGrammar.test.ts +20 -0
  123. package/src/test/Reflection.test.ts +172 -0
  124. package/src/test/ScopeWESL.test.ts +462 -0
  125. package/src/test/TestLink.ts +82 -0
  126. package/src/test/TestSetup.ts +4 -0
  127. package/src/test/TestUtil.ts +126 -0
  128. package/src/test/Tokenizer.test.ts +135 -0
  129. package/src/test/TransformBindingStructs.test.ts +230 -0
  130. package/src/test/Util.test.ts +22 -0
  131. package/src/test/VirtualModules.test.ts +37 -0
  132. package/src/test/WeslDevice.test.ts +265 -0
  133. package/src/test/WgslTests.ts +0 -0
  134. package/src/test/__snapshots__/ParseDirectives.test.ts.snap +25 -0
  135. package/src/test/__snapshots__/ParseWESL.test.ts.snap +119 -0
  136. package/src/test/__snapshots__/RustDirective.test.ts.snap +359 -0
  137. package/src/test/wgsl_1/main.wgsl +3 -0
  138. package/src/test/wgsl_1/util.wgsl +1 -0
  139. package/src/test/wgsl_2/main2.wgsl +3 -0
  140. package/src/test/wgsl_2/util2.wgsl +1 -0
  141. package/src/vlq/vlq.ts +94 -0
@@ -0,0 +1,359 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`import a 1`] = `
4
+ [
5
+ {
6
+ "end": 8,
7
+ "imports": ImportTree {
8
+ "segments": [
9
+ SimpleSegment {
10
+ "args": undefined,
11
+ "as": undefined,
12
+ "name": "a",
13
+ },
14
+ ],
15
+ },
16
+ "kind": "treeImport",
17
+ "start": 0,
18
+ },
19
+ ]
20
+ `;
21
+
22
+ exports[`import a::* 1`] = `
23
+ [
24
+ {
25
+ "end": 11,
26
+ "imports": ImportTree {
27
+ "segments": [
28
+ SimpleSegment {
29
+ "args": undefined,
30
+ "as": undefined,
31
+ "name": "a",
32
+ },
33
+ Wildcard {
34
+ "wildcard": "*",
35
+ },
36
+ ],
37
+ },
38
+ "kind": "treeImport",
39
+ "start": 0,
40
+ },
41
+ ]
42
+ `;
43
+
44
+ exports[`import a::{b, c}::* 1`] = `
45
+ [
46
+ {
47
+ "end": 19,
48
+ "imports": ImportTree {
49
+ "segments": [
50
+ SimpleSegment {
51
+ "args": undefined,
52
+ "as": undefined,
53
+ "name": "a",
54
+ },
55
+ SegmentList {
56
+ "list": [
57
+ ImportTree {
58
+ "segments": [
59
+ SimpleSegment {
60
+ "args": undefined,
61
+ "as": undefined,
62
+ "name": "b",
63
+ },
64
+ ],
65
+ },
66
+ ImportTree {
67
+ "segments": [
68
+ SimpleSegment {
69
+ "args": undefined,
70
+ "as": undefined,
71
+ "name": "c",
72
+ },
73
+ ],
74
+ },
75
+ ],
76
+ },
77
+ Wildcard {
78
+ "wildcard": "*",
79
+ },
80
+ ],
81
+ },
82
+ "kind": "treeImport",
83
+ "start": 0,
84
+ },
85
+ ]
86
+ `;
87
+
88
+ exports[`import a::b::c 1`] = `
89
+ [
90
+ {
91
+ "end": 14,
92
+ "imports": ImportTree {
93
+ "segments": [
94
+ SimpleSegment {
95
+ "args": undefined,
96
+ "as": undefined,
97
+ "name": "a",
98
+ },
99
+ SimpleSegment {
100
+ "args": undefined,
101
+ "as": undefined,
102
+ "name": "b",
103
+ },
104
+ SimpleSegment {
105
+ "args": undefined,
106
+ "as": undefined,
107
+ "name": "c",
108
+ },
109
+ ],
110
+ },
111
+ "kind": "treeImport",
112
+ "start": 0,
113
+ },
114
+ ]
115
+ `;
116
+
117
+ exports[`import my::lighting::{ pbr }; 1`] = `
118
+ [
119
+ {
120
+ "end": 29,
121
+ "imports": ImportTree {
122
+ "segments": [
123
+ SimpleSegment {
124
+ "args": undefined,
125
+ "as": undefined,
126
+ "name": "my",
127
+ },
128
+ SimpleSegment {
129
+ "args": undefined,
130
+ "as": undefined,
131
+ "name": "lighting",
132
+ },
133
+ SegmentList {
134
+ "list": [
135
+ ImportTree {
136
+ "segments": [
137
+ SimpleSegment {
138
+ "args": undefined,
139
+ "as": undefined,
140
+ "name": "pbr",
141
+ },
142
+ ],
143
+ },
144
+ ],
145
+ },
146
+ ],
147
+ },
148
+ "kind": "treeImport",
149
+ "start": 0,
150
+ },
151
+ ]
152
+ `;
153
+
154
+ exports[`import my::lighting::{ pbr as lights } 1`] = `
155
+ [
156
+ {
157
+ "end": 38,
158
+ "imports": ImportTree {
159
+ "segments": [
160
+ SimpleSegment {
161
+ "args": undefined,
162
+ "as": undefined,
163
+ "name": "my",
164
+ },
165
+ SimpleSegment {
166
+ "args": undefined,
167
+ "as": undefined,
168
+ "name": "lighting",
169
+ },
170
+ SegmentList {
171
+ "list": [
172
+ ImportTree {
173
+ "segments": [
174
+ SimpleSegment {
175
+ "args": undefined,
176
+ "as": "lights",
177
+ "name": "pbr",
178
+ },
179
+ ],
180
+ },
181
+ ],
182
+ },
183
+ ],
184
+ },
185
+ "kind": "treeImport",
186
+ "start": 0,
187
+ },
188
+ ]
189
+ `;
190
+
191
+ exports[`import my::lighting::{ pbr, jelly }; 1`] = `
192
+ [
193
+ {
194
+ "end": 36,
195
+ "imports": ImportTree {
196
+ "segments": [
197
+ SimpleSegment {
198
+ "args": undefined,
199
+ "as": undefined,
200
+ "name": "my",
201
+ },
202
+ SimpleSegment {
203
+ "args": undefined,
204
+ "as": undefined,
205
+ "name": "lighting",
206
+ },
207
+ SegmentList {
208
+ "list": [
209
+ ImportTree {
210
+ "segments": [
211
+ SimpleSegment {
212
+ "args": undefined,
213
+ "as": undefined,
214
+ "name": "pbr",
215
+ },
216
+ ],
217
+ },
218
+ ImportTree {
219
+ "segments": [
220
+ SimpleSegment {
221
+ "args": undefined,
222
+ "as": undefined,
223
+ "name": "jelly",
224
+ },
225
+ ],
226
+ },
227
+ ],
228
+ },
229
+ ],
230
+ },
231
+ "kind": "treeImport",
232
+ "start": 0,
233
+ },
234
+ ]
235
+ `;
236
+
237
+ exports[`import my::lighting::{ pbr, jelly::jam }; 1`] = `
238
+ [
239
+ {
240
+ "end": 41,
241
+ "imports": ImportTree {
242
+ "segments": [
243
+ SimpleSegment {
244
+ "args": undefined,
245
+ "as": undefined,
246
+ "name": "my",
247
+ },
248
+ SimpleSegment {
249
+ "args": undefined,
250
+ "as": undefined,
251
+ "name": "lighting",
252
+ },
253
+ SegmentList {
254
+ "list": [
255
+ ImportTree {
256
+ "segments": [
257
+ SimpleSegment {
258
+ "args": undefined,
259
+ "as": undefined,
260
+ "name": "pbr",
261
+ },
262
+ ],
263
+ },
264
+ ImportTree {
265
+ "segments": [
266
+ SimpleSegment {
267
+ "args": undefined,
268
+ "as": undefined,
269
+ "name": "jelly",
270
+ },
271
+ SimpleSegment {
272
+ "args": undefined,
273
+ "as": undefined,
274
+ "name": "jam",
275
+ },
276
+ ],
277
+ },
278
+ ],
279
+ },
280
+ ],
281
+ },
282
+ "kind": "treeImport",
283
+ "start": 0,
284
+ },
285
+ ]
286
+ `;
287
+
288
+ exports[`import my::lighting::pbr; 1`] = `
289
+ [
290
+ {
291
+ "end": 25,
292
+ "imports": ImportTree {
293
+ "segments": [
294
+ SimpleSegment {
295
+ "args": undefined,
296
+ "as": undefined,
297
+ "name": "my",
298
+ },
299
+ SimpleSegment {
300
+ "args": undefined,
301
+ "as": undefined,
302
+ "name": "lighting",
303
+ },
304
+ SimpleSegment {
305
+ "args": undefined,
306
+ "as": undefined,
307
+ "name": "pbr",
308
+ },
309
+ ],
310
+ },
311
+ "kind": "treeImport",
312
+ "start": 0,
313
+ },
314
+ ]
315
+ `;
316
+
317
+ exports[`multiline import 1`] = `
318
+ [
319
+ {
320
+ "end": 29,
321
+ "imports": ImportTree {
322
+ "segments": [
323
+ SimpleSegment {
324
+ "args": undefined,
325
+ "as": undefined,
326
+ "name": "a",
327
+ },
328
+ SegmentList {
329
+ "list": [
330
+ ImportTree {
331
+ "segments": [
332
+ SimpleSegment {
333
+ "args": undefined,
334
+ "as": undefined,
335
+ "name": "b",
336
+ },
337
+ ],
338
+ },
339
+ ImportTree {
340
+ "segments": [
341
+ SimpleSegment {
342
+ "args": undefined,
343
+ "as": undefined,
344
+ "name": "c",
345
+ },
346
+ ],
347
+ },
348
+ ],
349
+ },
350
+ Wildcard {
351
+ "wildcard": "*",
352
+ },
353
+ ],
354
+ },
355
+ "kind": "treeImport",
356
+ "start": 0,
357
+ },
358
+ ]
359
+ `;
@@ -0,0 +1,3 @@
1
+ import package::wgsl_1::util::bar;
2
+
3
+ fn main() { bar(); }
@@ -0,0 +1 @@
1
+ fn bar() { }
@@ -0,0 +1,3 @@
1
+ import package::wgsl_2::util2::bar;
2
+
3
+ fn main() { bar(); }
@@ -0,0 +1 @@
1
+ fn bar() { }
package/src/vlq/vlq.ts ADDED
@@ -0,0 +1,94 @@
1
+ /*!
2
+ Copyright (c) 2017-2021 [these people](https://github.com/Rich-Harris/vlq/graphs/contributors)
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5
+
6
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7
+
8
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
9
+ */
10
+ // Copied from https://github.com/Rich-Harris/vlq and adjusted
11
+
12
+ let char_to_integer: Record<string, number> = {};
13
+ let integer_to_char: Record<number, string> = {};
14
+
15
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
16
+ .split("")
17
+ .forEach(function (char, i) {
18
+ char_to_integer[char] = i;
19
+ integer_to_char[i] = char;
20
+ });
21
+
22
+ export function decodeVlq(string: string) {
23
+ let result: number[] = [];
24
+
25
+ let shift = 0;
26
+ let value = 0;
27
+
28
+ for (let i = 0; i < string.length; i += 1) {
29
+ let integer = char_to_integer[string[i]];
30
+
31
+ if (integer === undefined) {
32
+ throw new Error("Invalid character (" + string[i] + ")");
33
+ }
34
+
35
+ const has_continuation_bit = integer & 32;
36
+
37
+ integer &= 31;
38
+ value += integer << shift;
39
+
40
+ if (has_continuation_bit) {
41
+ shift += 5;
42
+ } else {
43
+ const should_negate = value & 1;
44
+ value >>>= 1;
45
+
46
+ if (should_negate) {
47
+ result.push(value === 0 ? -0x80000000 : -value);
48
+ } else {
49
+ result.push(value);
50
+ }
51
+
52
+ // reset
53
+ value = shift = 0;
54
+ }
55
+ }
56
+
57
+ return result;
58
+ }
59
+
60
+ export function encodeVlq(value: number | number[]) {
61
+ if (typeof value === "number") {
62
+ return encode_integer(value);
63
+ }
64
+
65
+ let result = "";
66
+ for (let i = 0; i < value.length; i += 1) {
67
+ result += encode_integer(value[i]);
68
+ }
69
+
70
+ return result;
71
+ }
72
+
73
+ function encode_integer(num: number) {
74
+ let result = "";
75
+
76
+ if (num < 0) {
77
+ num = (-num << 1) | 1;
78
+ } else {
79
+ num <<= 1;
80
+ }
81
+
82
+ do {
83
+ let clamped = num & 31;
84
+ num >>>= 5;
85
+
86
+ if (num > 0) {
87
+ clamped |= 32;
88
+ }
89
+
90
+ result += integer_to_char[clamped];
91
+ } while (num > 0);
92
+
93
+ return result;
94
+ }