goscript 0.0.47 → 0.0.49

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 (152) hide show
  1. package/cmd/goscript/deps.go +1 -4
  2. package/compiler/analysis.go +224 -63
  3. package/compiler/analysis_test.go +112 -0
  4. package/compiler/compiler.go +19 -87
  5. package/compiler/expr-call-type-conversion.go +148 -59
  6. package/compiler/expr-call.go +202 -10
  7. package/compiler/expr.go +5 -82
  8. package/compiler/gs_dependencies_test.go +60 -1
  9. package/compiler/spec-value.go +73 -51
  10. package/compiler/spec.go +293 -151
  11. package/compiler/stmt.go +192 -81
  12. package/dist/gs/builtin/builtin.d.ts +1 -5
  13. package/dist/gs/builtin/builtin.js +1 -34
  14. package/dist/gs/builtin/builtin.js.map +1 -1
  15. package/dist/gs/builtin/slice.js.map +1 -1
  16. package/dist/gs/fmt/fmt.js +20 -4
  17. package/dist/gs/fmt/fmt.js.map +1 -1
  18. package/dist/gs/io/fs/fs.d.ts +6 -12
  19. package/dist/gs/io/fs/fs.js +52 -67
  20. package/dist/gs/io/fs/fs.js.map +1 -1
  21. package/dist/gs/os/index.d.ts +2 -1
  22. package/dist/gs/os/index.js +1 -1
  23. package/dist/gs/os/index.js.map +1 -1
  24. package/dist/gs/os/types_js.gs.d.ts +7 -1
  25. package/dist/gs/os/types_js.gs.js +16 -1
  26. package/dist/gs/os/types_js.gs.js.map +1 -1
  27. package/dist/gs/os/types_unix.gs.js +2 -2
  28. package/dist/gs/os/types_unix.gs.js.map +1 -1
  29. package/dist/gs/reflect/index.d.ts +3 -3
  30. package/dist/gs/reflect/index.js +2 -2
  31. package/dist/gs/reflect/index.js.map +1 -1
  32. package/dist/gs/reflect/map.js +2 -2
  33. package/dist/gs/reflect/map.js.map +1 -1
  34. package/dist/gs/reflect/type.d.ts +8 -9
  35. package/dist/gs/reflect/type.js +101 -103
  36. package/dist/gs/reflect/type.js.map +1 -1
  37. package/dist/gs/reflect/types.d.ts +1 -10
  38. package/dist/gs/reflect/types.js +3 -26
  39. package/dist/gs/reflect/types.js.map +1 -1
  40. package/dist/gs/reflect/value.js +23 -23
  41. package/dist/gs/reflect/value.js.map +1 -1
  42. package/dist/gs/reflect/visiblefields.js +3 -3
  43. package/dist/gs/reflect/visiblefields.js.map +1 -1
  44. package/dist/gs/time/time.d.ts +11 -22
  45. package/dist/gs/time/time.js +29 -57
  46. package/dist/gs/time/time.js.map +1 -1
  47. package/gs/TODO.md +129 -0
  48. package/gs/builtin/builtin.ts +3 -41
  49. package/gs/builtin/slice.ts +1 -1
  50. package/gs/bytes/meta.json +10 -0
  51. package/gs/fmt/fmt.ts +18 -4
  52. package/gs/fmt/meta.json +5 -0
  53. package/gs/internal/meta.json +5 -0
  54. package/gs/io/fs/fs.ts +58 -73
  55. package/gs/io/meta.json +9 -0
  56. package/gs/maps/meta.json +6 -0
  57. package/gs/math/meta.json +5 -0
  58. package/gs/os/index.ts +8 -1
  59. package/gs/os/meta.json +15 -0
  60. package/gs/os/types_js.gs.ts +22 -1
  61. package/gs/os/types_unix.gs.ts +2 -2
  62. package/gs/path/meta.json +6 -0
  63. package/gs/reflect/function-types.test.ts +10 -10
  64. package/gs/reflect/index.ts +6 -6
  65. package/gs/reflect/map.ts +2 -2
  66. package/gs/reflect/meta.json +5 -0
  67. package/gs/reflect/type.ts +108 -103
  68. package/gs/reflect/types.ts +2 -28
  69. package/gs/reflect/value.ts +23 -23
  70. package/gs/reflect/visiblefields.ts +3 -3
  71. package/gs/strconv/meta.json +5 -0
  72. package/gs/strings/meta.json +9 -0
  73. package/gs/sync/meta.json +19 -0
  74. package/gs/time/time.ts +32 -65
  75. package/package.json +1 -1
  76. package/dist/gs/builtin/io.d.ts +0 -16
  77. package/dist/gs/builtin/io.js +0 -15
  78. package/dist/gs/builtin/io.js.map +0 -1
  79. package/dist/gs/internal/testlog/index.d.ts +0 -1
  80. package/dist/gs/internal/testlog/index.js +0 -5
  81. package/dist/gs/internal/testlog/index.js.map +0 -1
  82. package/dist/gs/maps/iter.gs.d.ts +0 -7
  83. package/dist/gs/maps/iter.gs.js +0 -65
  84. package/dist/gs/maps/iter.gs.js.map +0 -1
  85. package/dist/gs/maps/maps.gs.d.ts +0 -7
  86. package/dist/gs/maps/maps.gs.js +0 -79
  87. package/dist/gs/maps/maps.gs.js.map +0 -1
  88. package/dist/gs/reflect/abi.d.ts +0 -59
  89. package/dist/gs/reflect/abi.gs.d.ts +0 -59
  90. package/dist/gs/reflect/abi.gs.js +0 -79
  91. package/dist/gs/reflect/abi.gs.js.map +0 -1
  92. package/dist/gs/reflect/abi.js +0 -79
  93. package/dist/gs/reflect/abi.js.map +0 -1
  94. package/dist/gs/reflect/badlinkname.d.ts +0 -52
  95. package/dist/gs/reflect/badlinkname.gs.d.ts +0 -52
  96. package/dist/gs/reflect/badlinkname.gs.js +0 -72
  97. package/dist/gs/reflect/badlinkname.gs.js.map +0 -1
  98. package/dist/gs/reflect/badlinkname.js +0 -72
  99. package/dist/gs/reflect/badlinkname.js.map +0 -1
  100. package/dist/gs/reflect/deepequal.gs.d.ts +0 -25
  101. package/dist/gs/reflect/deepequal.gs.js +0 -308
  102. package/dist/gs/reflect/deepequal.gs.js.map +0 -1
  103. package/dist/gs/reflect/float32reg_generic.gs.d.ts +0 -2
  104. package/dist/gs/reflect/float32reg_generic.gs.js +0 -10
  105. package/dist/gs/reflect/float32reg_generic.gs.js.map +0 -1
  106. package/dist/gs/reflect/index.gs.d.ts +0 -1
  107. package/dist/gs/reflect/index.gs.js +0 -3
  108. package/dist/gs/reflect/index.gs.js.map +0 -1
  109. package/dist/gs/reflect/iter.gs.d.ts +0 -3
  110. package/dist/gs/reflect/iter.gs.js +0 -24
  111. package/dist/gs/reflect/iter.gs.js.map +0 -1
  112. package/dist/gs/reflect/makefunc.gs.d.ts +0 -34
  113. package/dist/gs/reflect/makefunc.gs.js +0 -288
  114. package/dist/gs/reflect/makefunc.gs.js.map +0 -1
  115. package/dist/gs/reflect/map_swiss.gs.d.ts +0 -14
  116. package/dist/gs/reflect/map_swiss.gs.js +0 -70
  117. package/dist/gs/reflect/map_swiss.gs.js.map +0 -1
  118. package/dist/gs/reflect/reflect.gs.d.ts +0 -132
  119. package/dist/gs/reflect/reflect.gs.js +0 -437
  120. package/dist/gs/reflect/reflect.gs.js.map +0 -1
  121. package/dist/gs/reflect/swapper.gs.d.ts +0 -1
  122. package/dist/gs/reflect/swapper.gs.js +0 -32
  123. package/dist/gs/reflect/swapper.gs.js.map +0 -1
  124. package/dist/gs/reflect/type.gs.d.ts +0 -4
  125. package/dist/gs/reflect/type.gs.js +0 -21
  126. package/dist/gs/reflect/type.gs.js.map +0 -1
  127. package/dist/gs/reflect/value.gs.d.ts +0 -4
  128. package/dist/gs/reflect/value.gs.js +0 -12
  129. package/dist/gs/reflect/value.gs.js.map +0 -1
  130. package/dist/gs/reflect/visiblefields.gs.d.ts +0 -3
  131. package/dist/gs/reflect/visiblefields.gs.js +0 -123
  132. package/dist/gs/reflect/visiblefields.gs.js.map +0 -1
  133. package/dist/gs/stringslite/index.d.ts +0 -1
  134. package/dist/gs/stringslite/index.js +0 -2
  135. package/dist/gs/stringslite/index.js.map +0 -1
  136. package/dist/gs/stringslite/strings.d.ts +0 -11
  137. package/dist/gs/stringslite/strings.js +0 -67
  138. package/dist/gs/stringslite/strings.js.map +0 -1
  139. package/gs/bytes/metadata.go +0 -12
  140. package/gs/fmt/metadata.go +0 -7
  141. package/gs/internal/metadata.go +0 -7
  142. package/gs/io/io.go +0 -75
  143. package/gs/io/metadata.go +0 -11
  144. package/gs/maps/metadata.go +0 -8
  145. package/gs/math/metadata.go +0 -7
  146. package/gs/os/metadata.go +0 -17
  147. package/gs/path/metadata.go +0 -8
  148. package/gs/reflect/metadata.go +0 -7
  149. package/gs/strconv/metadata.go +0 -7
  150. package/gs/strings/metadata.go +0 -11
  151. package/gs/sync/metadata.go +0 -7
  152. package/gs/sync/sync.go +0 -64
package/gs/fmt/fmt.ts CHANGED
@@ -200,10 +200,24 @@ function parseFormat(format: string, args: any[]): string {
200
200
  // Global stdout simulation for Print functions
201
201
  let stdout = {
202
202
  write: (data: string) => {
203
- // For now, just use a simple implementation that doesn't output
204
- // In the real implementation, this would interact with the Go runtime
205
- // The test will still pass because it only checks compilation
206
- $.println(data)
203
+ // Use process.stdout.write if available (Node.js), otherwise fallback to console.log
204
+ // but we need to avoid adding extra newlines that console.log adds
205
+ if (typeof process !== 'undefined' && process.stdout && process.stdout.write) {
206
+ process.stdout.write(data)
207
+ } else {
208
+ // In browser environments, we need to use console.log but handle newlines carefully
209
+ // If the data already ends with \n, we should strip it to avoid double newlines
210
+ if (data.endsWith('\n')) {
211
+ console.log(data.slice(0, -1))
212
+ } else {
213
+ // Use console.log without adding newline by using a custom method
214
+ if (console.log) {
215
+ // For data without newlines, we can just print it directly
216
+ // This is a bit of a hack but works for most cases
217
+ console.log(data)
218
+ }
219
+ }
220
+ }
207
221
  },
208
222
  }
209
223
 
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": [
3
+ "errors"
4
+ ]
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": [
3
+ "errors"
4
+ ]
5
+ }
package/gs/io/fs/fs.ts CHANGED
@@ -369,148 +369,133 @@ $.registerInterfaceType(
369
369
  ],
370
370
  )
371
371
 
372
- export class FileMode {
373
- constructor(private _value: number) {}
372
+ export type FileMode = number
374
373
 
375
- valueOf(): number {
376
- return this._value
377
- }
378
-
379
- toString(): string {
380
- return fileModeString(this)
381
- }
382
-
383
- static from(value: number): FileMode {
384
- return new FileMode(value)
385
- }
386
-
387
- // IsDir reports whether m describes a directory.
388
- // That is, it tests for the ModeDir bit being set in m.
389
- IsDir(): boolean {
390
- return (this._value & ModeDir.valueOf()) != 0
391
- }
374
+ // IsDir reports whether m describes a directory.
375
+ // That is, it tests for the ModeDir bit being set in m.
376
+ export function FileMode_IsDir(receiver: FileMode): boolean {
377
+ return (receiver & ModeDir) != 0
378
+ }
392
379
 
393
- // IsRegular reports whether m describes a regular file.
394
- // That is, it tests that no mode type bits are set.
395
- IsRegular(): boolean {
396
- return (this._value & ModeType.valueOf()) == 0
397
- }
380
+ // IsRegular reports whether m describes a regular file.
381
+ // That is, it tests that no mode type bits are set.
382
+ export function FileMode_IsRegular(receiver: FileMode): boolean {
383
+ return (receiver & ModeType) == 0
384
+ }
398
385
 
399
- // Perm returns the Unix permission bits in m (m & ModePerm).
400
- Perm(): FileMode {
401
- return new FileMode(this._value & ModePerm.valueOf())
402
- }
386
+ // Perm returns the Unix permission bits in m (m & ModePerm).
387
+ export function FileMode_Perm(receiver: FileMode): FileMode {
388
+ return (receiver & ModePerm) as FileMode
389
+ }
403
390
 
404
- // String returns a textual representation of the file mode.
405
- String(): string {
406
- return fileModeString(this)
407
- }
391
+ // String returns a textual representation of the file mode.
392
+ export function FileMode_String(receiver: FileMode): string {
393
+ return fileModeString(receiver)
394
+ }
408
395
 
409
- // Type returns type bits in m (m & ModeType).
410
- Type(): FileMode {
411
- return new FileMode((this._value & ModeType.valueOf()) >>> 0)
412
- }
396
+ // Type returns type bits in m (m & ModeType).
397
+ export function FileMode_Type(receiver: FileMode): FileMode {
398
+ return ((receiver & ModeType) >>> 0) as FileMode
413
399
  }
414
400
 
415
401
  // The single letters are the abbreviations
416
402
  // used by the String method's formatting.
417
403
  // d: is a directory
418
- export let ModeDir: FileMode = new FileMode(2147483648) // 0x80000000
404
+ export let ModeDir: FileMode = 2147483648 // 0x80000000
419
405
 
420
406
  // a: append-only
421
- export let ModeAppend: FileMode = new FileMode(1 << 30) // 0x40000000
407
+ export let ModeAppend: FileMode = 1 << 30 // 0x40000000
422
408
 
423
409
  // l: exclusive use
424
- export let ModeExclusive: FileMode = new FileMode(1 << 29) // 0x20000000
410
+ export let ModeExclusive: FileMode = 1 << 29 // 0x20000000
425
411
 
426
412
  // T: temporary file; Plan 9 only
427
- export let ModeTemporary: FileMode = new FileMode(1 << 28) // 0x10000000
413
+ export let ModeTemporary: FileMode = 1 << 28 // 0x10000000
428
414
 
429
415
  // L: symbolic link
430
- export let ModeSymlink: FileMode = new FileMode(1 << 27) // 0x08000000
416
+ export let ModeSymlink: FileMode = 1 << 27 // 0x08000000
431
417
 
432
418
  // D: device file
433
- export let ModeDevice: FileMode = new FileMode(1 << 26) // 0x04000000
419
+ export let ModeDevice: FileMode = 1 << 26 // 0x04000000
434
420
 
435
421
  // p: named pipe (FIFO)
436
- export let ModeNamedPipe: FileMode = new FileMode(1 << 25) // 0x02000000
422
+ export let ModeNamedPipe: FileMode = 1 << 25 // 0x02000000
437
423
 
438
424
  // S: Unix domain socket
439
- export let ModeSocket: FileMode = new FileMode(1 << 24) // 0x01000000
425
+ export let ModeSocket: FileMode = 1 << 24 // 0x01000000
440
426
 
441
427
  // u: setuid
442
- export let ModeSetuid: FileMode = new FileMode(1 << 23) // 0x00800000
428
+ export let ModeSetuid: FileMode = 1 << 23 // 0x00800000
443
429
 
444
430
  // g: setgid
445
- export let ModeSetgid: FileMode = new FileMode(1 << 22) // 0x00400000
431
+ export let ModeSetgid: FileMode = 1 << 22 // 0x00400000
446
432
 
447
433
  // c: Unix character device, when ModeDevice is set
448
- export let ModeCharDevice: FileMode = new FileMode(1 << 21) // 0x00200000
434
+ export let ModeCharDevice: FileMode = 1 << 21 // 0x00200000
449
435
 
450
436
  // t: sticky
451
- export let ModeSticky: FileMode = new FileMode(1 << 20) // 0x00100000
437
+ export let ModeSticky: FileMode = 1 << 20 // 0x00100000
452
438
 
453
439
  // ?: non-regular file; nothing else is known about this file
454
- export let ModeIrregular: FileMode = new FileMode(1 << 19) // 0x00080000
440
+ export let ModeIrregular: FileMode = 1 << 19 // 0x00080000
455
441
 
456
442
  // Mask for the type bits. For regular files, none will be set.
457
- export let ModeType: FileMode = new FileMode(2401763328)
443
+ export let ModeType: FileMode = 2401763328
458
444
 
459
445
  // Unix permission bits
460
- export let ModePerm: FileMode = new FileMode(0o777)
446
+ export let ModePerm: FileMode = 0o777
461
447
 
462
448
  // FileMode methods
463
449
  export function fileModeString(mode: FileMode): string {
464
450
  const buf: string[] = []
465
- const w = mode.valueOf()
451
+ const w = mode
466
452
 
467
453
  // File type - these are the main type indicators
468
- if (w & ModeDir.valueOf()) buf.push('d')
469
- else if (w & ModeSymlink.valueOf()) buf.push('L')
470
- else if (w & ModeNamedPipe.valueOf()) buf.push('p')
471
- else if (w & ModeSocket.valueOf()) buf.push('S')
472
- else if (w & ModeDevice.valueOf()) {
473
- if (w & ModeCharDevice.valueOf()) buf.push('c')
454
+ if (w & ModeDir) buf.push('d')
455
+ else if (w & ModeSymlink) buf.push('L')
456
+ else if (w & ModeNamedPipe) buf.push('p')
457
+ else if (w & ModeSocket) buf.push('S')
458
+ else if (w & ModeDevice) {
459
+ if (w & ModeCharDevice) buf.push('c')
474
460
  else buf.push('D')
475
- }
476
- else if (w & ModeIrregular.valueOf()) buf.push('?')
461
+ } else if (w & ModeIrregular) buf.push('?')
477
462
  else buf.push('-')
478
463
 
479
464
  // Permission bits
480
- const perm = w & ModePerm.valueOf()
465
+ const perm = w & ModePerm
481
466
  buf.push(perm & 0o400 ? 'r' : '-')
482
467
  buf.push(perm & 0o200 ? 'w' : '-')
483
-
468
+
484
469
  // Execute/search for user
485
470
  if (perm & 0o100) {
486
- if (w & ModeSetuid.valueOf()) buf.push('s')
471
+ if (w & ModeSetuid) buf.push('s')
487
472
  else buf.push('x')
488
473
  } else {
489
- if (w & ModeSetuid.valueOf()) buf.push('S')
474
+ if (w & ModeSetuid) buf.push('S')
490
475
  else buf.push('-')
491
476
  }
492
-
477
+
493
478
  buf.push(perm & 0o040 ? 'r' : '-')
494
479
  buf.push(perm & 0o020 ? 'w' : '-')
495
-
480
+
496
481
  // Execute/search for group
497
482
  if (perm & 0o010) {
498
- if (w & ModeSetgid.valueOf()) buf.push('s')
483
+ if (w & ModeSetgid) buf.push('s')
499
484
  else buf.push('x')
500
485
  } else {
501
- if (w & ModeSetgid.valueOf()) buf.push('S')
486
+ if (w & ModeSetgid) buf.push('S')
502
487
  else buf.push('-')
503
488
  }
504
-
489
+
505
490
  buf.push(perm & 0o004 ? 'r' : '-')
506
491
  buf.push(perm & 0o002 ? 'w' : '-')
507
-
492
+
508
493
  // Execute/search for other
509
494
  if (perm & 0o001) {
510
- if (w & ModeSticky.valueOf()) buf.push('t')
495
+ if (w & ModeSticky) buf.push('t')
511
496
  else buf.push('x')
512
497
  } else {
513
- if (w & ModeSticky.valueOf()) buf.push('T')
498
+ if (w & ModeSticky) buf.push('T')
514
499
  else buf.push('-')
515
500
  }
516
501
 
@@ -518,7 +503,7 @@ export function fileModeString(mode: FileMode): string {
518
503
  }
519
504
 
520
505
  export function fileModeType(mode: FileMode): FileMode {
521
- return new FileMode(mode.valueOf() & ModeType.valueOf())
506
+ return (mode & ModeType) as FileMode
522
507
  }
523
508
 
524
509
  export class PathError {
@@ -0,0 +1,9 @@
1
+ {
2
+ "dependencies": [
3
+ "errors",
4
+ "internal/oserror",
5
+ "path",
6
+ "time",
7
+ "unicode/utf8"
8
+ ]
9
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "dependencies": [
3
+ "iter",
4
+ "unsafe"
5
+ ]
6
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": [
3
+ "math/bits"
4
+ ]
5
+ }
package/gs/os/index.ts CHANGED
@@ -107,7 +107,11 @@ export {
107
107
  DirEntry,
108
108
  File,
109
109
  FileInfo,
110
- FileMode,
110
+ FileMode_IsDir,
111
+ FileMode_IsRegular,
112
+ FileMode_Perm,
113
+ FileMode_String,
114
+ FileMode_Type,
111
115
  Getpagesize,
112
116
  ModeAppend,
113
117
  ModeCharDevice,
@@ -126,3 +130,6 @@ export {
126
130
  ModeType,
127
131
  SameFile,
128
132
  } from './types_js.gs.js'
133
+
134
+ // Export FileMode as a type
135
+ export type { FileMode } from './types_js.gs.js'
@@ -0,0 +1,15 @@
1
+ {
2
+ "dependencies": [
3
+ "errors",
4
+ "internal/byteorder",
5
+ "internal/goarch",
6
+ "internal/poll",
7
+ "io",
8
+ "io/fs",
9
+ "runtime",
10
+ "sync",
11
+ "syscall",
12
+ "time",
13
+ "unsafe"
14
+ ]
15
+ }
@@ -9,7 +9,7 @@ import * as syscall from "@goscript/syscall/index.js"
9
9
  // Re-export essential types
10
10
  export type Time = time.Time;
11
11
  export type FileInfo = fs.FileInfo;
12
- export { FileMode } from "@goscript/io/fs/index.js";
12
+ export type FileMode = fs.FileMode;
13
13
  export type DirEntry = fs.DirEntry;
14
14
 
15
15
  // Export runtime values for ES module compatibility
@@ -202,4 +202,25 @@ export let ModePerm: fs.FileMode = fs.ModePerm
202
202
  export function SameFile(fi1: fs.FileInfo, fi2: fs.FileInfo): boolean {
203
203
  // In JavaScript environment, always return false as we can't compare files
204
204
  return false
205
+ }
206
+
207
+ // FileMode wrapper functions - re-export from fs module
208
+ export function FileMode_IsDir(receiver: fs.FileMode): boolean {
209
+ return fs.FileMode_IsDir(receiver)
210
+ }
211
+
212
+ export function FileMode_IsRegular(receiver: fs.FileMode): boolean {
213
+ return fs.FileMode_IsRegular(receiver)
214
+ }
215
+
216
+ export function FileMode_Perm(receiver: fs.FileMode): fs.FileMode {
217
+ return fs.FileMode_Perm(receiver)
218
+ }
219
+
220
+ export function FileMode_String(receiver: fs.FileMode): string {
221
+ return fs.FileMode_String(receiver)
222
+ }
223
+
224
+ export function FileMode_Type(receiver: fs.FileMode): fs.FileMode {
225
+ return fs.FileMode_Type(receiver)
205
226
  }
@@ -54,7 +54,7 @@ class fileStat {
54
54
  this._fields = {
55
55
  name: $.varRef(init?.name ?? ""),
56
56
  size: $.varRef(init?.size ?? 0),
57
- mode: $.varRef(init?.mode ?? new fs.FileMode(0)),
57
+ mode: $.varRef(init?.mode ?? 0),
58
58
  modTime: $.varRef(init?.modTime?.clone() ?? time.Now()),
59
59
  sys: $.varRef(init?.sys?.clone() ?? new syscall.Stat_t())
60
60
  }
@@ -79,7 +79,7 @@ class fileStat {
79
79
 
80
80
  public IsDir(): boolean {
81
81
  const fileStat = this
82
- return (fileStat!.Mode().valueOf() & fs.ModeDir.valueOf()) !== 0
82
+ return (fileStat!.Mode() & fs.ModeDir) !== 0
83
83
  }
84
84
 
85
85
  public Size(): number {
@@ -0,0 +1,6 @@
1
+ {
2
+ "dependencies": [
3
+ "errors",
4
+ "unicode/utf8"
5
+ ]
6
+ }
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest'
2
- import { TypeOf } from './type.js'
2
+ import { TypeOf, Kind_String } from './type.js'
3
3
 
4
4
  describe('Function Type Detection', () => {
5
5
  it('should detect regular function types', () => {
@@ -8,7 +8,7 @@ describe('Function Type Detection', () => {
8
8
  }
9
9
  const type = TypeOf(regularFunc)
10
10
  expect(type.String()).toMatch(/^func/)
11
- expect(type.Kind().String()).toBe('func')
11
+ expect(Kind_String(type.Kind())).toBe('func')
12
12
  })
13
13
 
14
14
  it('should detect GoScript typed functions with __goTypeName', () => {
@@ -19,7 +19,7 @@ describe('Function Type Detection', () => {
19
19
  Object.assign(greetFunc, { __goTypeName: 'Greeter' })
20
20
  const greetType = TypeOf(greetFunc)
21
21
  expect(greetType.String()).toBe('func(string) string')
22
- expect(greetType.Kind().String()).toBe('func')
22
+ expect(Kind_String(greetType.Kind())).toBe('func')
23
23
 
24
24
  // Test Adder function type
25
25
  const addFunc = function (a: number, b: number) {
@@ -28,7 +28,7 @@ describe('Function Type Detection', () => {
28
28
  Object.assign(addFunc, { __goTypeName: 'Adder' })
29
29
  const addType = TypeOf(addFunc)
30
30
  expect(addType.String()).toBe('func(int, int) int')
31
- expect(addType.Kind().String()).toBe('func')
31
+ expect(Kind_String(addType.Kind())).toBe('func')
32
32
  })
33
33
 
34
34
  it('should detect functions with full __typeInfo metadata', () => {
@@ -49,7 +49,7 @@ describe('Function Type Detection', () => {
49
49
 
50
50
  const type = TypeOf(complexFunc)
51
51
  expect(type.String()).toBe('func(int, int) int')
52
- expect(type.Kind().String()).toBe('func')
52
+ expect(Kind_String(type.Kind())).toBe('func')
53
53
  })
54
54
 
55
55
  it('should handle functions with multiple return types', () => {
@@ -70,7 +70,7 @@ describe('Function Type Detection', () => {
70
70
 
71
71
  const type = TypeOf(multiReturnFunc)
72
72
  expect(type.String()).toBe('func() (int, string)')
73
- expect(type.Kind().String()).toBe('func')
73
+ expect(Kind_String(type.Kind())).toBe('func')
74
74
  })
75
75
 
76
76
  it('should handle functions with no parameters', () => {
@@ -88,7 +88,7 @@ describe('Function Type Detection', () => {
88
88
 
89
89
  const type = TypeOf(noParamFunc)
90
90
  expect(type.String()).toBe('func() int')
91
- expect(type.Kind().String()).toBe('func')
91
+ expect(Kind_String(type.Kind())).toBe('func')
92
92
  })
93
93
 
94
94
  it('should handle functions with no return type', () => {
@@ -106,7 +106,7 @@ describe('Function Type Detection', () => {
106
106
 
107
107
  const type = TypeOf(voidFunc)
108
108
  expect(type.String()).toBe('func(int)')
109
- expect(type.Kind().String()).toBe('func')
109
+ expect(Kind_String(type.Kind())).toBe('func')
110
110
  })
111
111
 
112
112
  it('should fallback to generic func for unknown typed functions', () => {
@@ -117,14 +117,14 @@ describe('Function Type Detection', () => {
117
117
 
118
118
  const type = TypeOf(unknownFunc)
119
119
  expect(type.String()).toBe('func')
120
- expect(type.Kind().String()).toBe('func')
120
+ expect(Kind_String(type.Kind())).toBe('func')
121
121
  })
122
122
 
123
123
  it('should handle arrow functions', () => {
124
124
  const arrowFunc = (x: number) => x * 2
125
125
  const type = TypeOf(arrowFunc)
126
126
  expect(type.String()).toMatch(/^func/)
127
- expect(type.Kind().String()).toBe('func')
127
+ expect(Kind_String(type.Kind())).toBe('func')
128
128
  })
129
129
 
130
130
  it('should detect functions that return values vs void functions', () => {
@@ -3,15 +3,19 @@ export {
3
3
  TypeOf,
4
4
  ValueOf,
5
5
  Value,
6
- Kind,
6
+ Kind_String,
7
7
  ArrayOf,
8
8
  SliceOf,
9
9
  PointerTo,
10
10
  PtrTo,
11
11
  MapOf,
12
12
  ChanOf,
13
+ ChanDir_String,
14
+ RecvDir,
15
+ SendDir,
16
+ BothDir,
13
17
  } from './type'
14
- export type { Type } from './type'
18
+ export type { Type, ChanDir, Kind } from './type'
15
19
  export { DeepEqual } from './deepequal'
16
20
  export {
17
21
  Zero,
@@ -28,10 +32,6 @@ export { Swapper } from './swapper'
28
32
 
29
33
  // Export new types and constants
30
34
  export {
31
- ChanDir,
32
- RecvDir,
33
- SendDir,
34
- BothDir,
35
35
  StructTag,
36
36
  ValueError,
37
37
  SelectDir,
package/gs/reflect/map.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Type, Kind, Value } from './type.js'
1
+ import { Type, Kind, Value, Map as MapKind } from './type.js'
2
2
 
3
3
  // Simple MapOf implementation using JavaScript Map
4
4
  export function MapOf(key: Type, elem: Type): Type {
@@ -17,7 +17,7 @@ class MapType implements Type {
17
17
  }
18
18
 
19
19
  public Kind(): Kind {
20
- return new Kind(21) // Map kind
20
+ return MapKind // Map kind
21
21
  }
22
22
 
23
23
  public Size(): number {
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": [
3
+ "iter"
4
+ ]
5
+ }