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.
Files changed (68) hide show
  1. package/package.json +1 -1
  2. package/src/backend/js/expressions.js +238 -109
  3. package/src/backend/js/index.js +38 -1
  4. package/src/backend/js/runtime.js +953 -53
  5. package/src/backend/js/statements.js +55 -67
  6. package/src/backend/js/stdlib/base64.js +12 -0
  7. package/src/backend/js/stdlib/binary.js +102 -0
  8. package/src/backend/js/stdlib/bits.js +15 -1
  9. package/src/backend/js/stdlib/builder.js +28 -9
  10. package/src/backend/js/stdlib/bytes.js +75 -18
  11. package/src/backend/js/stdlib/errors.js +20 -1
  12. package/src/backend/js/stdlib/fmt.js +70 -13
  13. package/src/backend/js/stdlib/hex.js +17 -0
  14. package/src/backend/js/stdlib/html.js +1 -1
  15. package/src/backend/js/stdlib/index.js +16 -0
  16. package/src/backend/js/stdlib/io.js +105 -3
  17. package/src/backend/js/stdlib/math.js +13 -1
  18. package/src/backend/js/stdlib/path.js +18 -4
  19. package/src/backend/js/stdlib/rand.js +10 -5
  20. package/src/backend/js/stdlib/sha256.js +12 -0
  21. package/src/backend/js/stdlib/slices.js +52 -26
  22. package/src/backend/js/stdlib/strconv.js +21 -5
  23. package/src/backend/js/stdlib/strings.js +148 -15
  24. package/src/backend/js/stdlib/sync.js +13 -0
  25. package/src/backend/js/stdlib/time.js +90 -19
  26. package/src/backend/js/stdlib/unicode.js +2 -2
  27. package/src/backend/wasm/boundary.js +1207 -41
  28. package/src/backend/wasm/const-fold.js +205 -0
  29. package/src/backend/wasm/emit-builtins.js +203 -76
  30. package/src/backend/wasm/emit-exprs.js +464 -276
  31. package/src/backend/wasm/emit-maps.js +144 -8
  32. package/src/backend/wasm/emit-stdlib.js +12 -3005
  33. package/src/backend/wasm/emit-stmts.js +264 -270
  34. package/src/backend/wasm/emit.js +115 -87
  35. package/src/backend/wasm/encode.js +55 -29
  36. package/src/backend/wasm/index.js +1001 -32
  37. package/src/backend/wasm/optimize.js +13 -4
  38. package/src/backend/wasm/stdlib/bytes.js +5039 -0
  39. package/src/backend/wasm/stdlib/core.js +8903 -0
  40. package/src/backend/wasm/stdlib/index.js +40 -0
  41. package/src/backend/wasm/stdlib/io.js +2161 -0
  42. package/src/backend/wasm/stdlib/packages.js +2400 -0
  43. package/src/backend/wasm/stdlib/pure.js +720 -0
  44. package/src/backend/wasm/stdlib/time.js +1200 -0
  45. package/src/backend/wasm/types.js +153 -1
  46. package/src/cli-core.js +1 -1
  47. package/src/compiler.js +18 -4
  48. package/src/dts-parser.js +79 -126
  49. package/src/index.js +2 -6
  50. package/src/lexer.js +80 -29
  51. package/src/lower/boxing.js +1 -2
  52. package/src/lower/captures.js +2 -6
  53. package/src/lower/ownership.js +30 -9
  54. package/src/minifier.js +20 -68
  55. package/src/parser/declarations.js +3 -6
  56. package/src/parser/expressions.js +3 -8
  57. package/src/parser/index.js +18 -3
  58. package/src/parser/statements.js +25 -38
  59. package/src/parser/types.js +1 -2
  60. package/src/resolver.js +2 -27
  61. package/src/templ-lexer.js +29 -63
  62. package/src/templ-parser.js +22 -45
  63. package/src/typechecker/assignability.js +81 -13
  64. package/src/typechecker/expressions.js +102 -2
  65. package/src/typechecker/resolve.js +36 -6
  66. package/src/typechecker/stdlib/core.js +280 -89
  67. package/src/typechecker/stdlib/extended.js +453 -1
  68. package/src/typechecker/types.js +344 -6
@@ -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
- ["fmt", new Set(["Sprintf", "Errorf", "Printf", "Println", "Print"])],
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(["Sort", "Reverse", "Contains", "Index", "Equal", "Clone"]),
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.name || "struct{...}";
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.name;
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":