gofront 1.6.0 → 1.6.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.
- package/package.json +1 -1
- package/src/backend/js/expressions.js +238 -109
- package/src/backend/js/index.js +38 -1
- package/src/backend/js/runtime.js +953 -53
- package/src/backend/js/statements.js +55 -67
- package/src/backend/js/stdlib/base64.js +12 -0
- package/src/backend/js/stdlib/binary.js +102 -0
- package/src/backend/js/stdlib/bits.js +15 -1
- package/src/backend/js/stdlib/builder.js +28 -9
- package/src/backend/js/stdlib/bytes.js +75 -18
- package/src/backend/js/stdlib/errors.js +20 -1
- package/src/backend/js/stdlib/fmt.js +70 -13
- package/src/backend/js/stdlib/hex.js +17 -0
- package/src/backend/js/stdlib/html.js +1 -1
- package/src/backend/js/stdlib/index.js +16 -0
- package/src/backend/js/stdlib/io.js +105 -3
- package/src/backend/js/stdlib/math.js +13 -1
- package/src/backend/js/stdlib/path.js +18 -4
- package/src/backend/js/stdlib/rand.js +10 -5
- package/src/backend/js/stdlib/sha256.js +12 -0
- package/src/backend/js/stdlib/slices.js +52 -26
- package/src/backend/js/stdlib/strconv.js +21 -5
- package/src/backend/js/stdlib/strings.js +148 -15
- package/src/backend/js/stdlib/sync.js +13 -0
- package/src/backend/js/stdlib/time.js +90 -19
- package/src/backend/js/stdlib/unicode.js +2 -2
- package/src/backend/wasm/boundary.js +1207 -41
- package/src/backend/wasm/const-fold.js +205 -0
- package/src/backend/wasm/emit-builtins.js +203 -76
- package/src/backend/wasm/emit-exprs.js +464 -276
- package/src/backend/wasm/emit-maps.js +144 -8
- package/src/backend/wasm/emit-stdlib.js +12 -3005
- package/src/backend/wasm/emit-stmts.js +264 -270
- package/src/backend/wasm/emit.js +115 -87
- package/src/backend/wasm/encode.js +55 -29
- package/src/backend/wasm/index.js +1001 -32
- package/src/backend/wasm/optimize.js +13 -4
- package/src/backend/wasm/stdlib/bytes.js +5039 -0
- package/src/backend/wasm/stdlib/core.js +8903 -0
- package/src/backend/wasm/stdlib/index.js +40 -0
- package/src/backend/wasm/stdlib/io.js +2161 -0
- package/src/backend/wasm/stdlib/packages.js +2400 -0
- package/src/backend/wasm/stdlib/pure.js +720 -0
- package/src/backend/wasm/stdlib/time.js +1200 -0
- package/src/backend/wasm/types.js +153 -1
- package/src/cli-core.js +1 -1
- package/src/compiler.js +18 -4
- package/src/dts-parser.js +79 -126
- package/src/index.js +2 -6
- package/src/lexer.js +80 -29
- package/src/lower/boxing.js +1 -2
- package/src/lower/captures.js +2 -6
- package/src/lower/ownership.js +30 -9
- package/src/minifier.js +20 -68
- package/src/parser/declarations.js +3 -6
- package/src/parser/expressions.js +3 -8
- package/src/parser/index.js +18 -3
- package/src/parser/statements.js +25 -38
- package/src/parser/types.js +1 -2
- package/src/resolver.js +2 -27
- package/src/templ-lexer.js +29 -63
- package/src/templ-parser.js +22 -45
- package/src/typechecker/assignability.js +81 -13
- package/src/typechecker/expressions.js +102 -2
- package/src/typechecker/resolve.js +36 -6
- package/src/typechecker/stdlib/core.js +280 -89
- package/src/typechecker/stdlib/extended.js +453 -1
- package/src/typechecker/types.js +344 -6
package/src/typechecker/types.js
CHANGED
|
@@ -83,6 +83,23 @@ export const BROWSER_GLOBALS = new Set([
|
|
|
83
83
|
"prompt",
|
|
84
84
|
"localStorage",
|
|
85
85
|
"sessionStorage",
|
|
86
|
+
"WebSocket",
|
|
87
|
+
"Worker",
|
|
88
|
+
"HTMLElement",
|
|
89
|
+
"Element",
|
|
90
|
+
"Event",
|
|
91
|
+
"CustomEvent",
|
|
92
|
+
"URL",
|
|
93
|
+
"URLSearchParams",
|
|
94
|
+
"FormData",
|
|
95
|
+
"Headers",
|
|
96
|
+
"Request",
|
|
97
|
+
"Response",
|
|
98
|
+
"Blob",
|
|
99
|
+
"File",
|
|
100
|
+
"FileReader",
|
|
101
|
+
"TextEncoder",
|
|
102
|
+
"TextDecoder",
|
|
86
103
|
]);
|
|
87
104
|
|
|
88
105
|
// Stdlib packages the WASM backend can emit. Extend as src/backend/wasm/emit-stdlib.js
|
|
@@ -91,16 +108,37 @@ export const BROWSER_GLOBALS = new Set([
|
|
|
91
108
|
export const WASM_SUPPORTED_STDLIB = new Set([
|
|
92
109
|
"math",
|
|
93
110
|
"math/bits",
|
|
111
|
+
"math/rand",
|
|
94
112
|
"errors",
|
|
95
113
|
"fmt",
|
|
96
114
|
"strings",
|
|
115
|
+
"bytes",
|
|
97
116
|
"strconv",
|
|
117
|
+
"unicode",
|
|
98
118
|
"unicode/utf8",
|
|
99
119
|
"slices",
|
|
100
120
|
"maps",
|
|
101
121
|
"sort",
|
|
122
|
+
"path",
|
|
123
|
+
"path/filepath",
|
|
124
|
+
"html",
|
|
125
|
+
"io",
|
|
126
|
+
"time",
|
|
102
127
|
"testing",
|
|
103
128
|
"gofront/shared",
|
|
129
|
+
"sync",
|
|
130
|
+
"crypto/rand",
|
|
131
|
+
"crypto/sha256",
|
|
132
|
+
"encoding/binary",
|
|
133
|
+
"encoding/hex",
|
|
134
|
+
"encoding/base64",
|
|
135
|
+
]);
|
|
136
|
+
|
|
137
|
+
export const STDLIB_PACKAGES = new Set([
|
|
138
|
+
...WASM_SUPPORTED_STDLIB,
|
|
139
|
+
"os",
|
|
140
|
+
"gom",
|
|
141
|
+
"regexp",
|
|
104
142
|
]);
|
|
105
143
|
|
|
106
144
|
// Per-namespace member subset the WASM backend implements. `null` means every
|
|
@@ -141,6 +179,14 @@ export const WASM_STDLIB_MEMBERS = new Map([
|
|
|
141
179
|
"Log2",
|
|
142
180
|
"Log10",
|
|
143
181
|
"Round",
|
|
182
|
+
"Remainder",
|
|
183
|
+
"Float64bits",
|
|
184
|
+
"Float64frombits",
|
|
185
|
+
"Float32bits",
|
|
186
|
+
"Float32frombits",
|
|
187
|
+
"Sinh",
|
|
188
|
+
"Cosh",
|
|
189
|
+
"Tanh",
|
|
144
190
|
// constants
|
|
145
191
|
"E",
|
|
146
192
|
"Pi",
|
|
@@ -185,9 +231,16 @@ export const WASM_STDLIB_MEMBERS = new Map([
|
|
|
185
231
|
"OnesCount64",
|
|
186
232
|
"RotateLeft32",
|
|
187
233
|
"RotateLeft64",
|
|
234
|
+
"ReverseBytes16",
|
|
235
|
+
"ReverseBytes32",
|
|
236
|
+
"ReverseBytes64",
|
|
237
|
+
"Len32",
|
|
238
|
+
"Len64",
|
|
239
|
+
"Reverse32",
|
|
240
|
+
"Reverse64",
|
|
188
241
|
]),
|
|
189
242
|
],
|
|
190
|
-
["errors", new Set(["New", "Is", "Unwrap"])],
|
|
243
|
+
["errors", new Set(["New", "Is", "Unwrap", "As", "Join"])],
|
|
191
244
|
[
|
|
192
245
|
"utf8",
|
|
193
246
|
new Set([
|
|
@@ -218,7 +271,22 @@ export const WASM_STDLIB_MEMBERS = new Map([
|
|
|
218
271
|
"StringsAreSorted",
|
|
219
272
|
]),
|
|
220
273
|
],
|
|
221
|
-
[
|
|
274
|
+
[
|
|
275
|
+
"fmt",
|
|
276
|
+
new Set([
|
|
277
|
+
"Sprintf",
|
|
278
|
+
"Errorf",
|
|
279
|
+
"Printf",
|
|
280
|
+
"Println",
|
|
281
|
+
"Print",
|
|
282
|
+
"Fprintf",
|
|
283
|
+
"Fprintln",
|
|
284
|
+
"Fprint",
|
|
285
|
+
"Sscan",
|
|
286
|
+
"Sscanln",
|
|
287
|
+
"Sscanf",
|
|
288
|
+
]),
|
|
289
|
+
],
|
|
222
290
|
[
|
|
223
291
|
"strings",
|
|
224
292
|
new Set([
|
|
@@ -251,6 +319,24 @@ export const WASM_STDLIB_MEMBERS = new Map([
|
|
|
251
319
|
"Split",
|
|
252
320
|
"Fields",
|
|
253
321
|
"Join",
|
|
322
|
+
"Cut",
|
|
323
|
+
"CutPrefix",
|
|
324
|
+
"CutSuffix",
|
|
325
|
+
"SplitN",
|
|
326
|
+
"SplitAfter",
|
|
327
|
+
"SplitAfterN",
|
|
328
|
+
"LastIndexAny",
|
|
329
|
+
"Map",
|
|
330
|
+
"IndexFunc",
|
|
331
|
+
"LastIndexFunc",
|
|
332
|
+
"TrimFunc",
|
|
333
|
+
"TrimLeftFunc",
|
|
334
|
+
"TrimRightFunc",
|
|
335
|
+
"FieldsFunc",
|
|
336
|
+
"NewReplacer",
|
|
337
|
+
"Builder",
|
|
338
|
+
"NewReader",
|
|
339
|
+
"Reader",
|
|
254
340
|
]),
|
|
255
341
|
],
|
|
256
342
|
[
|
|
@@ -259,17 +345,55 @@ export const WASM_STDLIB_MEMBERS = new Map([
|
|
|
259
345
|
"Itoa",
|
|
260
346
|
"Atoi",
|
|
261
347
|
"FormatInt",
|
|
348
|
+
"FormatUint",
|
|
262
349
|
"FormatFloat",
|
|
263
350
|
"FormatBool",
|
|
264
351
|
"ParseInt",
|
|
352
|
+
"ParseUint",
|
|
265
353
|
"ParseFloat",
|
|
266
354
|
"ParseBool",
|
|
267
355
|
"Quote",
|
|
356
|
+
"Unquote",
|
|
357
|
+
"AppendInt",
|
|
358
|
+
"AppendUint",
|
|
359
|
+
"AppendFloat",
|
|
360
|
+
"AppendBool",
|
|
361
|
+
"ErrSyntax",
|
|
362
|
+
"ErrRange",
|
|
268
363
|
]),
|
|
269
364
|
],
|
|
270
365
|
[
|
|
271
366
|
"slices",
|
|
272
|
-
new Set([
|
|
367
|
+
new Set([
|
|
368
|
+
"Sort",
|
|
369
|
+
"Reverse",
|
|
370
|
+
"Contains",
|
|
371
|
+
"Index",
|
|
372
|
+
"IndexFunc",
|
|
373
|
+
"ContainsFunc",
|
|
374
|
+
"BinarySearch",
|
|
375
|
+
"BinarySearchFunc",
|
|
376
|
+
"Equal",
|
|
377
|
+
"Clone",
|
|
378
|
+
"Compare",
|
|
379
|
+
"SortFunc",
|
|
380
|
+
"SortStableFunc",
|
|
381
|
+
"IsSorted",
|
|
382
|
+
"IsSortedFunc",
|
|
383
|
+
"Min",
|
|
384
|
+
"Max",
|
|
385
|
+
"MinFunc",
|
|
386
|
+
"MaxFunc",
|
|
387
|
+
"Compact",
|
|
388
|
+
"CompactFunc",
|
|
389
|
+
"Concat",
|
|
390
|
+
"Delete",
|
|
391
|
+
"DeleteFunc",
|
|
392
|
+
"Insert",
|
|
393
|
+
"Replace",
|
|
394
|
+
"Grow",
|
|
395
|
+
"Clip",
|
|
396
|
+
]),
|
|
273
397
|
],
|
|
274
398
|
[
|
|
275
399
|
"maps",
|
|
@@ -284,6 +408,216 @@ export const WASM_STDLIB_MEMBERS = new Map([
|
|
|
284
408
|
"DeleteFunc",
|
|
285
409
|
]),
|
|
286
410
|
],
|
|
411
|
+
[
|
|
412
|
+
"unicode",
|
|
413
|
+
new Set([
|
|
414
|
+
"IsLetter",
|
|
415
|
+
"IsDigit",
|
|
416
|
+
"IsSpace",
|
|
417
|
+
"IsUpper",
|
|
418
|
+
"IsLower",
|
|
419
|
+
"IsPunct",
|
|
420
|
+
"IsControl",
|
|
421
|
+
"IsPrint",
|
|
422
|
+
"IsGraphic",
|
|
423
|
+
"ToUpper",
|
|
424
|
+
"ToLower",
|
|
425
|
+
]),
|
|
426
|
+
],
|
|
427
|
+
[
|
|
428
|
+
"rand",
|
|
429
|
+
new Set([
|
|
430
|
+
"Intn",
|
|
431
|
+
"Float64",
|
|
432
|
+
"Float32",
|
|
433
|
+
"Int",
|
|
434
|
+
"Int63",
|
|
435
|
+
"Int63n",
|
|
436
|
+
"Int31",
|
|
437
|
+
"Int31n",
|
|
438
|
+
"Seed",
|
|
439
|
+
"Shuffle",
|
|
440
|
+
"Perm",
|
|
441
|
+
"Read",
|
|
442
|
+
"Reader",
|
|
443
|
+
]),
|
|
444
|
+
],
|
|
445
|
+
[
|
|
446
|
+
"bytes",
|
|
447
|
+
new Set([
|
|
448
|
+
"Contains",
|
|
449
|
+
"HasPrefix",
|
|
450
|
+
"HasSuffix",
|
|
451
|
+
"Index",
|
|
452
|
+
"Count",
|
|
453
|
+
"Repeat",
|
|
454
|
+
"Replace",
|
|
455
|
+
"ReplaceAll",
|
|
456
|
+
"ToUpper",
|
|
457
|
+
"ToLower",
|
|
458
|
+
"TrimSpace",
|
|
459
|
+
"Trim",
|
|
460
|
+
"Equal",
|
|
461
|
+
"Split",
|
|
462
|
+
"Join",
|
|
463
|
+
"TrimPrefix",
|
|
464
|
+
"TrimSuffix",
|
|
465
|
+
"TrimLeft",
|
|
466
|
+
"TrimRight",
|
|
467
|
+
"TrimFunc",
|
|
468
|
+
"IndexByte",
|
|
469
|
+
"LastIndex",
|
|
470
|
+
"LastIndexByte",
|
|
471
|
+
"Fields",
|
|
472
|
+
"FieldsFunc",
|
|
473
|
+
"Clone",
|
|
474
|
+
"Cut",
|
|
475
|
+
"ToTitle",
|
|
476
|
+
"ContainsAny",
|
|
477
|
+
"ContainsRune",
|
|
478
|
+
"Map",
|
|
479
|
+
"SplitN",
|
|
480
|
+
"Buffer",
|
|
481
|
+
"NewReader",
|
|
482
|
+
"Reader",
|
|
483
|
+
]),
|
|
484
|
+
],
|
|
485
|
+
[
|
|
486
|
+
"path",
|
|
487
|
+
new Set([
|
|
488
|
+
"Base",
|
|
489
|
+
"Dir",
|
|
490
|
+
"Ext",
|
|
491
|
+
"Join",
|
|
492
|
+
"Clean",
|
|
493
|
+
"IsAbs",
|
|
494
|
+
"Split",
|
|
495
|
+
"Match",
|
|
496
|
+
"ErrBadPattern",
|
|
497
|
+
]),
|
|
498
|
+
],
|
|
499
|
+
[
|
|
500
|
+
"filepath",
|
|
501
|
+
new Set([
|
|
502
|
+
"Base",
|
|
503
|
+
"Dir",
|
|
504
|
+
"Ext",
|
|
505
|
+
"Join",
|
|
506
|
+
"Clean",
|
|
507
|
+
"IsAbs",
|
|
508
|
+
"Split",
|
|
509
|
+
"Match",
|
|
510
|
+
"ErrBadPattern",
|
|
511
|
+
]),
|
|
512
|
+
],
|
|
513
|
+
["html", new Set(["EscapeString", "UnescapeString"])],
|
|
514
|
+
[
|
|
515
|
+
"io",
|
|
516
|
+
new Set([
|
|
517
|
+
"Writer",
|
|
518
|
+
"Reader",
|
|
519
|
+
"ReadWriter",
|
|
520
|
+
"Closer",
|
|
521
|
+
"EOF",
|
|
522
|
+
"ErrUnexpectedEOF",
|
|
523
|
+
"ErrShortWrite",
|
|
524
|
+
"ReadFull",
|
|
525
|
+
"ReadAll",
|
|
526
|
+
"Discard",
|
|
527
|
+
"WriteString",
|
|
528
|
+
"LimitReader",
|
|
529
|
+
"Copy",
|
|
530
|
+
"CopyN",
|
|
531
|
+
]),
|
|
532
|
+
],
|
|
533
|
+
[
|
|
534
|
+
"time",
|
|
535
|
+
new Set([
|
|
536
|
+
"Now",
|
|
537
|
+
"Since",
|
|
538
|
+
"Parse",
|
|
539
|
+
"Unix",
|
|
540
|
+
"UnixMicro",
|
|
541
|
+
"UnixMilli",
|
|
542
|
+
"Date",
|
|
543
|
+
"Duration",
|
|
544
|
+
"Nanosecond",
|
|
545
|
+
"Microsecond",
|
|
546
|
+
"Millisecond",
|
|
547
|
+
"Second",
|
|
548
|
+
"Minute",
|
|
549
|
+
"Hour",
|
|
550
|
+
"RFC3339",
|
|
551
|
+
"RFC3339Nano",
|
|
552
|
+
"DateOnly",
|
|
553
|
+
"TimeOnly",
|
|
554
|
+
"DateTime",
|
|
555
|
+
"UTC",
|
|
556
|
+
"Local",
|
|
557
|
+
"January",
|
|
558
|
+
"February",
|
|
559
|
+
"March",
|
|
560
|
+
"April",
|
|
561
|
+
"May",
|
|
562
|
+
"June",
|
|
563
|
+
"July",
|
|
564
|
+
"August",
|
|
565
|
+
"September",
|
|
566
|
+
"October",
|
|
567
|
+
"November",
|
|
568
|
+
"December",
|
|
569
|
+
"Sunday",
|
|
570
|
+
"Monday",
|
|
571
|
+
"Tuesday",
|
|
572
|
+
"Wednesday",
|
|
573
|
+
"Thursday",
|
|
574
|
+
"Friday",
|
|
575
|
+
"Saturday",
|
|
576
|
+
"Time",
|
|
577
|
+
]),
|
|
578
|
+
],
|
|
579
|
+
["testing", new Set(["T"])],
|
|
580
|
+
["sync", new Set(["Mutex", "RWMutex", "Once", "WaitGroup", "Locker"])],
|
|
581
|
+
["sha256", new Set(["Sum256", "New", "Size", "BlockSize"])],
|
|
582
|
+
[
|
|
583
|
+
"binary",
|
|
584
|
+
new Set([
|
|
585
|
+
"LittleEndian",
|
|
586
|
+
"BigEndian",
|
|
587
|
+
"ByteOrder",
|
|
588
|
+
"Read",
|
|
589
|
+
"Write",
|
|
590
|
+
"Size",
|
|
591
|
+
"AppendUint16",
|
|
592
|
+
"AppendUint32",
|
|
593
|
+
"AppendUint64",
|
|
594
|
+
]),
|
|
595
|
+
],
|
|
596
|
+
[
|
|
597
|
+
"hex",
|
|
598
|
+
new Set([
|
|
599
|
+
"EncodeToString",
|
|
600
|
+
"DecodeString",
|
|
601
|
+
"Encode",
|
|
602
|
+
"Decode",
|
|
603
|
+
"EncodedLen",
|
|
604
|
+
"DecodedLen",
|
|
605
|
+
"ErrLength",
|
|
606
|
+
]),
|
|
607
|
+
],
|
|
608
|
+
[
|
|
609
|
+
"base64",
|
|
610
|
+
new Set([
|
|
611
|
+
"StdEncoding",
|
|
612
|
+
"URLEncoding",
|
|
613
|
+
"RawStdEncoding",
|
|
614
|
+
"RawURLEncoding",
|
|
615
|
+
"Encoding",
|
|
616
|
+
"NewEncoding",
|
|
617
|
+
"StdPadding",
|
|
618
|
+
"NoPadding",
|
|
619
|
+
]),
|
|
620
|
+
],
|
|
287
621
|
]);
|
|
288
622
|
|
|
289
623
|
export const VALID_TARGETS = new Set(["js", "wasm", "both"]);
|
|
@@ -298,7 +632,7 @@ export const INT = { kind: "basic", name: "int" };
|
|
|
298
632
|
export const INT8 = { kind: "basic", name: "int8" };
|
|
299
633
|
export const INT16 = { kind: "basic", name: "int16" };
|
|
300
634
|
export const INT32 = { kind: "basic", name: "int32" };
|
|
301
|
-
const INT64 = { kind: "basic", name: "int64" };
|
|
635
|
+
export const INT64 = { kind: "basic", name: "int64" };
|
|
302
636
|
export const UINT = { kind: "basic", name: "uint" };
|
|
303
637
|
export const UINT8 = { kind: "basic", name: "uint8" };
|
|
304
638
|
export const BYTE = UINT8;
|
|
@@ -498,7 +832,9 @@ export function typeStr(t) {
|
|
|
498
832
|
case "map":
|
|
499
833
|
return `map[${typeStr(t.key)}]${typeStr(t.value)}`;
|
|
500
834
|
case "struct":
|
|
501
|
-
return t.
|
|
835
|
+
return t.typeArgs && t.typeArgs.length > 0
|
|
836
|
+
? `${t.name || "struct"}[${t.typeArgs.map(typeStr).join(", ")}]`
|
|
837
|
+
: t.name || "struct{...}";
|
|
502
838
|
case "interface":
|
|
503
839
|
return t.name || "interface{...}";
|
|
504
840
|
case "namespace":
|
|
@@ -508,7 +844,9 @@ export function typeStr(t) {
|
|
|
508
844
|
case "tuple":
|
|
509
845
|
return `(${t.types.map(typeStr).join(", ")})`;
|
|
510
846
|
case "named":
|
|
511
|
-
return t.
|
|
847
|
+
return t.typeArgs && t.typeArgs.length > 0
|
|
848
|
+
? `${t.name}[${t.typeArgs.map(typeStr).join(", ")}]`
|
|
849
|
+
: t.name;
|
|
512
850
|
case "pointer":
|
|
513
851
|
return `*${typeStr(t.base)}`;
|
|
514
852
|
case "typeParam":
|