goscript 0.0.29 → 0.0.31

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 (106) hide show
  1. package/compiler/compiler.go +8 -1
  2. package/compiler/index.ts +1 -1
  3. package/compiler/stmt-assign.go +14 -0
  4. package/dist/compiler/index.js +1 -1
  5. package/dist/compiler/index.js.map +1 -1
  6. package/dist/gs/builtin/channel.d.ts +6 -6
  7. package/dist/gs/builtin/channel.js +3 -3
  8. package/dist/gs/builtin/channel.js.map +1 -1
  9. package/dist/gs/builtin/slice.js +3 -9
  10. package/dist/gs/builtin/slice.js.map +1 -1
  11. package/dist/gs/context/context.js +2 -2
  12. package/dist/gs/context/context.js.map +1 -1
  13. package/dist/gs/internal/oserror/errors.d.ts +1 -1
  14. package/dist/gs/internal/oserror/errors.js +6 -6
  15. package/dist/gs/internal/oserror/index.d.ts +1 -1
  16. package/dist/gs/internal/oserror/index.js +1 -1
  17. package/dist/gs/internal/oserror/index.js.map +1 -1
  18. package/dist/gs/io/fs/format.d.ts +1 -1
  19. package/dist/gs/io/fs/format.js +12 -12
  20. package/dist/gs/io/fs/format.js.map +1 -1
  21. package/dist/gs/io/fs/fs.d.ts +2 -2
  22. package/dist/gs/io/fs/fs.js +258 -36
  23. package/dist/gs/io/fs/fs.js.map +1 -1
  24. package/dist/gs/io/fs/glob.d.ts +2 -2
  25. package/dist/gs/io/fs/glob.js +40 -14
  26. package/dist/gs/io/fs/glob.js.map +1 -1
  27. package/dist/gs/io/fs/index.d.ts +8 -8
  28. package/dist/gs/io/fs/index.js +8 -8
  29. package/dist/gs/io/fs/readdir.d.ts +2 -2
  30. package/dist/gs/io/fs/readdir.js +78 -9
  31. package/dist/gs/io/fs/readdir.js.map +1 -1
  32. package/dist/gs/io/fs/readfile.d.ts +2 -2
  33. package/dist/gs/io/fs/readfile.js +31 -13
  34. package/dist/gs/io/fs/readfile.js.map +1 -1
  35. package/dist/gs/io/fs/stat.d.ts +2 -2
  36. package/dist/gs/io/fs/stat.js +25 -2
  37. package/dist/gs/io/fs/stat.js.map +1 -1
  38. package/dist/gs/io/fs/sub.d.ts +2 -2
  39. package/dist/gs/io/fs/sub.js +264 -28
  40. package/dist/gs/io/fs/sub.js.map +1 -1
  41. package/dist/gs/io/fs/walk.d.ts +2 -2
  42. package/dist/gs/io/fs/walk.js +7 -7
  43. package/dist/gs/io/fs/walk.js.map +1 -1
  44. package/dist/gs/iter/iter.js +1 -1
  45. package/dist/gs/iter/iter.js.map +1 -1
  46. package/dist/gs/path/index.d.ts +2 -2
  47. package/dist/gs/path/index.js +2 -2
  48. package/dist/gs/path/match.d.ts +1 -1
  49. package/dist/gs/path/match.js +39 -33
  50. package/dist/gs/path/match.js.map +1 -1
  51. package/dist/gs/path/path.js +53 -24
  52. package/dist/gs/path/path.js.map +1 -1
  53. package/dist/gs/runtime/runtime.d.ts +3 -3
  54. package/dist/gs/runtime/runtime.js +3 -3
  55. package/dist/gs/runtime/runtime.js.map +1 -1
  56. package/dist/gs/strings/builder.d.ts +1 -1
  57. package/dist/gs/strings/builder.js +1 -1
  58. package/dist/gs/strings/builder.js.map +1 -1
  59. package/dist/gs/strings/clone.js.map +1 -1
  60. package/dist/gs/strings/compare.js.map +1 -1
  61. package/dist/gs/strings/replace.js +4 -2
  62. package/dist/gs/strings/replace.js.map +1 -1
  63. package/dist/gs/strings/strings.js +0 -12
  64. package/dist/gs/strings/strings.js.map +1 -1
  65. package/dist/gs/sync/sync.d.ts +5 -5
  66. package/dist/gs/sync/sync.js +5 -5
  67. package/dist/gs/sync/sync.js.map +1 -1
  68. package/dist/gs/time/time.d.ts +2 -2
  69. package/dist/gs/time/time.js +62 -16
  70. package/dist/gs/time/time.js.map +1 -1
  71. package/dist/gs/unsafe/unsafe.d.ts +8 -8
  72. package/dist/gs/unsafe/unsafe.js +8 -8
  73. package/dist/gs/unsafe/unsafe.js.map +1 -1
  74. package/gs/builtin/builtin.ts +1 -1
  75. package/gs/builtin/channel.ts +6 -6
  76. package/gs/builtin/slice.ts +3 -9
  77. package/gs/context/context.ts +2 -2
  78. package/gs/internal/oserror/errors.ts +7 -8
  79. package/gs/internal/oserror/index.ts +7 -1
  80. package/gs/io/fs/format.ts +39 -40
  81. package/gs/io/fs/fs.ts +446 -222
  82. package/gs/io/fs/glob.ts +164 -131
  83. package/gs/io/fs/index.ts +8 -8
  84. package/gs/io/fs/readdir.ts +188 -106
  85. package/gs/io/fs/readfile.ts +79 -58
  86. package/gs/io/fs/stat.ts +49 -25
  87. package/gs/io/fs/sub.ts +422 -181
  88. package/gs/io/fs/walk.ts +67 -63
  89. package/gs/iter/iter.ts +1 -1
  90. package/gs/path/index.ts +2 -2
  91. package/gs/path/match.ts +263 -250
  92. package/gs/path/path.ts +259 -232
  93. package/gs/runtime/runtime.ts +4 -4
  94. package/gs/strings/builder.test.ts +0 -1
  95. package/gs/strings/builder.ts +1 -1
  96. package/gs/strings/clone.ts +0 -2
  97. package/gs/strings/compare.ts +0 -2
  98. package/gs/strings/iter.test.ts +0 -1
  99. package/gs/strings/replace.test.ts +3 -4
  100. package/gs/strings/replace.ts +4 -7
  101. package/gs/strings/strings.test.ts +6 -6
  102. package/gs/strings/strings.ts +0 -14
  103. package/gs/sync/sync.ts +5 -5
  104. package/gs/time/time.ts +86 -29
  105. package/gs/unsafe/unsafe.ts +8 -8
  106. package/package.json +1 -1
package/gs/io/fs/sub.ts CHANGED
@@ -1,23 +1,46 @@
1
- import * as $ from "@goscript/builtin/builtin.js";
2
- import { ValidPath, FS, PathError, ErrInvalid, File, DirEntry } from "./fs.js";
3
- import { ReadDir } from "./readdir.js";
4
- import { ReadFile } from "./readfile.js";
5
- import { Glob } from "./glob.js";
1
+ import * as $ from '@goscript/builtin/builtin.js'
2
+ import { ValidPath, FS, PathError, ErrInvalid, File, DirEntry } from './fs.js'
3
+ import { ReadDir } from './readdir.js'
4
+ import { ReadFile } from './readfile.js'
5
+ import { Glob } from './glob.js'
6
6
 
7
- import * as errors from "@goscript/errors/index.js"
7
+ import * as errors from '@goscript/errors/index.js'
8
8
 
9
- import * as path from "@goscript/path/index.js"
9
+ import * as path from '@goscript/path/index.js'
10
10
 
11
- export type SubFS = null | {
12
- // Sub returns an FS corresponding to the subtree rooted at dir.
13
- Sub(dir: string): [FS, $.GoError]
14
- } & FS
11
+ export type SubFS =
12
+ | null
13
+ | ({
14
+ // Sub returns an FS corresponding to the subtree rooted at dir.
15
+ Sub(dir: string): [FS, $.GoError]
16
+ } & FS)
15
17
 
16
18
  $.registerInterfaceType(
17
19
  'SubFS',
18
20
  null, // Zero value for interface is null
19
- [{ name: "Sub", args: [{ name: "dir", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: "FS" }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }]
20
- );
21
+ [
22
+ {
23
+ name: 'Sub',
24
+ args: [{ name: 'dir', type: { kind: $.TypeKind.Basic, name: 'string' } }],
25
+ returns: [
26
+ { type: 'FS' },
27
+ {
28
+ type: {
29
+ kind: $.TypeKind.Interface,
30
+ name: 'GoError',
31
+ methods: [
32
+ {
33
+ name: 'Error',
34
+ args: [],
35
+ returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }],
36
+ },
37
+ ],
38
+ },
39
+ },
40
+ ],
41
+ },
42
+ ],
43
+ )
21
44
 
22
45
  // Sub returns an [FS] corresponding to the subtree rooted at fsys's dir.
23
46
  //
@@ -34,175 +57,393 @@ $.registerInterfaceType(
34
57
  // other directories. That is, [os.DirFS] is not a general substitute for a
35
58
  // chroot-style security mechanism, and Sub does not change that fact.
36
59
  export function Sub(fsys: FS, dir: string): [FS, $.GoError] {
37
- if (!ValidPath(dir)) {
38
- return [null, new PathError({Err: ErrInvalid, Op: "sub", Path: dir})]
39
- }
40
- if (dir == ".") {
41
- return [fsys, null]
42
- }
43
- {
44
- let { value: fsysTyped, ok: ok } = $.typeAssert<SubFS>(fsys, 'SubFS')
45
- if (ok) {
46
- return fsysTyped!.Sub(dir)
47
- }
48
- }
49
- return [new subFS({}), null]
60
+ if (!ValidPath(dir)) {
61
+ return [null, new PathError({ Err: ErrInvalid, Op: 'sub', Path: dir })]
62
+ }
63
+ if (dir == '.') {
64
+ return [fsys, null]
65
+ }
66
+ {
67
+ let { value: fsysTyped, ok: ok } = $.typeAssert<SubFS>(fsys, 'SubFS')
68
+ if (ok) {
69
+ return fsysTyped!.Sub(dir)
70
+ }
71
+ }
72
+ return [new subFS({}), null]
50
73
  }
51
74
 
52
75
  class subFS {
53
- public get fsys(): FS {
54
- return this._fields.fsys.value
55
- }
56
- public set fsys(value: FS) {
57
- this._fields.fsys.value = value
58
- }
59
-
60
- public get dir(): string {
61
- return this._fields.dir.value
62
- }
63
- public set dir(value: string) {
64
- this._fields.dir.value = value
65
- }
66
-
67
- public _fields: {
68
- fsys: $.VarRef<FS>;
69
- dir: $.VarRef<string>;
70
- }
71
-
72
- constructor(init?: Partial<{dir?: string, fsys?: FS}>) {
73
- this._fields = {
74
- fsys: $.varRef(init?.fsys ?? null),
75
- dir: $.varRef(init?.dir ?? "")
76
- }
77
- }
78
-
79
- public clone(): subFS {
80
- const cloned = new subFS()
81
- cloned._fields = {
82
- fsys: $.varRef(this._fields.fsys.value),
83
- dir: $.varRef(this._fields.dir.value)
84
- }
85
- return cloned
86
- }
87
-
88
- // fullName maps name to the fully-qualified name dir/name.
89
- public fullName(op: string, name: string): [string, $.GoError] {
90
- const f = this
91
- if (!ValidPath(name)) {
92
- return ["", new PathError({Err: ErrInvalid, Op: op, Path: name})]
93
- }
94
- return [path.Join(f!.dir, name), null]
95
- }
96
-
97
- // shorten maps name, which should start with f.dir, back to the suffix after f.dir.
98
- public shorten(name: string): [string, boolean] {
99
- const f = this
100
- if (name == f!.dir) {
101
- return [".", true]
102
- }
103
- if ($.len(name) >= $.len(f!.dir) + 2 && $.indexString(name, $.len(f!.dir)) == 47 && $.sliceString(name, undefined, $.len(f!.dir)) == f!.dir) {
104
- return [$.sliceString(name, $.len(f!.dir) + 1, undefined), true]
105
- }
106
- return ["", false]
107
- }
108
-
109
- // fixErr shortens any reported names in PathErrors by stripping f.dir.
110
- public fixErr(err: $.GoError): $.GoError {
111
- const f = this
112
- {
113
- let { value: e, ok: ok } = $.typeAssert<PathError | null>(err, {kind: $.TypeKind.Pointer, elemType: 'PathError'})
114
- if (ok) {
115
- {
116
- let [short, ok] = f!.shorten(e!.Path)
117
- if (ok) {
118
- e!.Path = short
119
- }
120
- }
121
- }
122
- }
123
- return err
124
- }
125
-
126
- public Open(name: string): [File, $.GoError] {
127
- const f = this
128
- let [full, err] = f!.fullName("open", name)
129
- if (err != null) {
130
- return [null, err]
131
- }
132
- let file: File
133
- [file, err] = f!.fsys!.Open(full)
134
- return [file, f!.fixErr(err)]
135
- }
136
-
137
- public ReadDir(name: string): [$.Slice<DirEntry>, $.GoError] {
138
- const f = this
139
- let [full, err] = f!.fullName("read", name)
140
- if (err != null) {
141
- return [null, err]
142
- }
143
- let dir: $.Slice<DirEntry>
144
- [dir, err] = ReadDir(f!.fsys, full)
145
- return [dir, f!.fixErr(err)]
146
- }
147
-
148
- public ReadFile(name: string): [Uint8Array, $.GoError] {
149
- const f = this
150
- let [full, err] = f!.fullName("read", name)
151
- if (err != null) {
152
- return [new Uint8Array(0), err]
153
- }
154
- let data: Uint8Array
155
- [data, err] = ReadFile(f!.fsys, full)
156
- return [data, f!.fixErr(err)]
157
- }
158
-
159
- public Glob(pattern: string): [$.Slice<string>, $.GoError] {
160
- const f = this
161
- {
162
- let [, err] = path.Match(pattern, "")
163
- if (err != null) {
164
- return [null, err]
165
- }
166
- }
167
- if (pattern == ".") {
168
- return [$.arrayToSlice<string>(["."]), null]
169
- }
170
- let full = f!.dir + "/" + pattern
171
- let [list, err] = Glob(f!.fsys, full)
172
- for (let i = 0; i < $.len(list); i++) {
173
- const name = list![i]
174
- {
175
- let [shortName, ok] = f!.shorten(name)
176
-
177
- // can't use fmt in this package
178
- if (!ok) {
179
- return [null, errors.New("invalid result from inner fsys Glob: " + shortName + " not in " + f!.dir)]
180
- }
181
- list![i] = shortName
182
- }
183
- }
184
- return [list, f!.fixErr(err)]
185
- }
186
-
187
- public Sub(dir: string): [FS, $.GoError] {
188
- const f = this
189
- if (dir == ".") {
190
- return [f, null]
191
- }
192
- let [full, err] = f!.fullName("sub", dir)
193
- if (err != null) {
194
- return [null, err]
195
- }
196
- return [new subFS({}), null]
197
- }
198
-
199
- // Register this type with the runtime type system
200
- static __typeInfo = $.registerStructType(
201
- 'subFS',
202
- new subFS(),
203
- [{ name: "fullName", args: [{ name: "op", type: { kind: $.TypeKind.Basic, name: "string" } }, { name: "name", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: { kind: $.TypeKind.Basic, name: "string" } }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }, { name: "shorten", args: [{ name: "name", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: { kind: $.TypeKind.Basic, name: "string" } }, { type: { kind: $.TypeKind.Basic, name: "boolean" } }] }, { name: "fixErr", args: [{ name: "err", type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }], returns: [{ type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }, { name: "Open", args: [{ name: "name", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: "File" }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }, { name: "ReadDir", args: [{ name: "name", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: { kind: $.TypeKind.Slice, elemType: "DirEntry" } }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }, { name: "ReadFile", args: [{ name: "name", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: { kind: $.TypeKind.Slice, elemType: { kind: $.TypeKind.Basic, name: "number" } } }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }, { name: "Glob", args: [{ name: "pattern", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: { kind: $.TypeKind.Slice, elemType: { kind: $.TypeKind.Basic, name: "string" } } }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }, { name: "Sub", args: [{ name: "dir", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: "FS" }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }],
204
- subFS,
205
- {"fsys": "FS", "dir": { kind: $.TypeKind.Basic, name: "string" }}
206
- );
207
- }
76
+ public get fsys(): FS {
77
+ return this._fields.fsys.value
78
+ }
79
+ public set fsys(value: FS) {
80
+ this._fields.fsys.value = value
81
+ }
82
+
83
+ public get dir(): string {
84
+ return this._fields.dir.value
85
+ }
86
+ public set dir(value: string) {
87
+ this._fields.dir.value = value
88
+ }
89
+
90
+ public _fields: {
91
+ fsys: $.VarRef<FS>
92
+ dir: $.VarRef<string>
93
+ }
94
+
95
+ constructor(init?: Partial<{ dir?: string; fsys?: FS }>) {
96
+ this._fields = {
97
+ fsys: $.varRef(init?.fsys ?? null),
98
+ dir: $.varRef(init?.dir ?? ''),
99
+ }
100
+ }
101
+
102
+ public clone(): subFS {
103
+ const cloned = new subFS()
104
+ cloned._fields = {
105
+ fsys: $.varRef(this._fields.fsys.value),
106
+ dir: $.varRef(this._fields.dir.value),
107
+ }
108
+ return cloned
109
+ }
110
+
111
+ // fullName maps name to the fully-qualified name dir/name.
112
+ public fullName(op: string, name: string): [string, $.GoError] {
113
+ const f = this
114
+ if (!ValidPath(name)) {
115
+ return ['', new PathError({ Err: ErrInvalid, Op: op, Path: name })]
116
+ }
117
+ return [path.Join(f!.dir, name), null]
118
+ }
119
+
120
+ // shorten maps name, which should start with f.dir, back to the suffix after f.dir.
121
+ public shorten(name: string): [string, boolean] {
122
+ const f = this
123
+ if (name == f!.dir) {
124
+ return ['.', true]
125
+ }
126
+ if (
127
+ $.len(name) >= $.len(f!.dir) + 2 &&
128
+ $.indexString(name, $.len(f!.dir)) == 47 &&
129
+ $.sliceString(name, undefined, $.len(f!.dir)) == f!.dir
130
+ ) {
131
+ return [$.sliceString(name, $.len(f!.dir) + 1, undefined), true]
132
+ }
133
+ return ['', false]
134
+ }
135
+
136
+ // fixErr shortens any reported names in PathErrors by stripping f.dir.
137
+ public fixErr(err: $.GoError): $.GoError {
138
+ const f = this
139
+ {
140
+ let { value: e, ok: ok } = $.typeAssert<PathError | null>(err, {
141
+ kind: $.TypeKind.Pointer,
142
+ elemType: 'PathError',
143
+ })
144
+ if (ok) {
145
+ {
146
+ let [short, ok] = f!.shorten(e!.Path)
147
+ if (ok) {
148
+ e!.Path = short
149
+ }
150
+ }
151
+ }
152
+ }
153
+ return err
154
+ }
208
155
 
156
+ public Open(name: string): [File, $.GoError] {
157
+ const f = this
158
+ let [full, err] = f!.fullName('open', name)
159
+ if (err != null) {
160
+ return [null, err]
161
+ }
162
+ let file: File
163
+ ;[file, err] = f!.fsys!.Open(full)
164
+ return [file, f!.fixErr(err)]
165
+ }
166
+
167
+ public ReadDir(name: string): [$.Slice<DirEntry>, $.GoError] {
168
+ const f = this
169
+ let [full, err] = f!.fullName('read', name)
170
+ if (err != null) {
171
+ return [null, err]
172
+ }
173
+ let dir: $.Slice<DirEntry>
174
+ ;[dir, err] = ReadDir(f!.fsys, full)
175
+ return [dir, f!.fixErr(err)]
176
+ }
177
+
178
+ public ReadFile(name: string): [Uint8Array, $.GoError] {
179
+ const f = this
180
+ let [full, err] = f!.fullName('read', name)
181
+ if (err != null) {
182
+ return [new Uint8Array(0), err]
183
+ }
184
+ let data: Uint8Array
185
+ ;[data, err] = ReadFile(f!.fsys, full)
186
+ return [data, f!.fixErr(err)]
187
+ }
188
+
189
+ public Glob(pattern: string): [$.Slice<string>, $.GoError] {
190
+ const f = this
191
+ {
192
+ let [, err] = path.Match(pattern, '')
193
+ if (err != null) {
194
+ return [null, err]
195
+ }
196
+ }
197
+ if (pattern == '.') {
198
+ return [$.arrayToSlice<string>(['.']), null]
199
+ }
200
+ let full = f!.dir + '/' + pattern
201
+ let [list, err] = Glob(f!.fsys, full)
202
+ for (let i = 0; i < $.len(list); i++) {
203
+ const name = list![i]
204
+ {
205
+ let [shortName, ok] = f!.shorten(name)
206
+
207
+ // can't use fmt in this package
208
+ if (!ok) {
209
+ return [
210
+ null,
211
+ errors.New(
212
+ 'invalid result from inner fsys Glob: ' +
213
+ shortName +
214
+ ' not in ' +
215
+ f!.dir,
216
+ ),
217
+ ]
218
+ }
219
+ list![i] = shortName
220
+ }
221
+ }
222
+ return [list, f!.fixErr(err)]
223
+ }
224
+
225
+ public Sub(dir: string): [FS, $.GoError] {
226
+ const f = this
227
+ if (dir == '.') {
228
+ return [f, null]
229
+ }
230
+ let [_full, err] = f!.fullName('sub', dir)
231
+ if (err != null) {
232
+ return [null, err]
233
+ }
234
+ return [new subFS({}), null]
235
+ }
236
+
237
+ // Register this type with the runtime type system
238
+ static __typeInfo = $.registerStructType(
239
+ 'subFS',
240
+ new subFS(),
241
+ [
242
+ {
243
+ name: 'fullName',
244
+ args: [
245
+ { name: 'op', type: { kind: $.TypeKind.Basic, name: 'string' } },
246
+ { name: 'name', type: { kind: $.TypeKind.Basic, name: 'string' } },
247
+ ],
248
+ returns: [
249
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
250
+ {
251
+ type: {
252
+ kind: $.TypeKind.Interface,
253
+ name: 'GoError',
254
+ methods: [
255
+ {
256
+ name: 'Error',
257
+ args: [],
258
+ returns: [
259
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
260
+ ],
261
+ },
262
+ ],
263
+ },
264
+ },
265
+ ],
266
+ },
267
+ {
268
+ name: 'shorten',
269
+ args: [
270
+ { name: 'name', type: { kind: $.TypeKind.Basic, name: 'string' } },
271
+ ],
272
+ returns: [
273
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
274
+ { type: { kind: $.TypeKind.Basic, name: 'boolean' } },
275
+ ],
276
+ },
277
+ {
278
+ name: 'fixErr',
279
+ args: [
280
+ {
281
+ name: 'err',
282
+ type: {
283
+ kind: $.TypeKind.Interface,
284
+ name: 'GoError',
285
+ methods: [
286
+ {
287
+ name: 'Error',
288
+ args: [],
289
+ returns: [
290
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
291
+ ],
292
+ },
293
+ ],
294
+ },
295
+ },
296
+ ],
297
+ returns: [
298
+ {
299
+ type: {
300
+ kind: $.TypeKind.Interface,
301
+ name: 'GoError',
302
+ methods: [
303
+ {
304
+ name: 'Error',
305
+ args: [],
306
+ returns: [
307
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
308
+ ],
309
+ },
310
+ ],
311
+ },
312
+ },
313
+ ],
314
+ },
315
+ {
316
+ name: 'Open',
317
+ args: [
318
+ { name: 'name', type: { kind: $.TypeKind.Basic, name: 'string' } },
319
+ ],
320
+ returns: [
321
+ { type: 'File' },
322
+ {
323
+ type: {
324
+ kind: $.TypeKind.Interface,
325
+ name: 'GoError',
326
+ methods: [
327
+ {
328
+ name: 'Error',
329
+ args: [],
330
+ returns: [
331
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
332
+ ],
333
+ },
334
+ ],
335
+ },
336
+ },
337
+ ],
338
+ },
339
+ {
340
+ name: 'ReadDir',
341
+ args: [
342
+ { name: 'name', type: { kind: $.TypeKind.Basic, name: 'string' } },
343
+ ],
344
+ returns: [
345
+ { type: { kind: $.TypeKind.Slice, elemType: 'DirEntry' } },
346
+ {
347
+ type: {
348
+ kind: $.TypeKind.Interface,
349
+ name: 'GoError',
350
+ methods: [
351
+ {
352
+ name: 'Error',
353
+ args: [],
354
+ returns: [
355
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
356
+ ],
357
+ },
358
+ ],
359
+ },
360
+ },
361
+ ],
362
+ },
363
+ {
364
+ name: 'ReadFile',
365
+ args: [
366
+ { name: 'name', type: { kind: $.TypeKind.Basic, name: 'string' } },
367
+ ],
368
+ returns: [
369
+ {
370
+ type: {
371
+ kind: $.TypeKind.Slice,
372
+ elemType: { kind: $.TypeKind.Basic, name: 'number' },
373
+ },
374
+ },
375
+ {
376
+ type: {
377
+ kind: $.TypeKind.Interface,
378
+ name: 'GoError',
379
+ methods: [
380
+ {
381
+ name: 'Error',
382
+ args: [],
383
+ returns: [
384
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
385
+ ],
386
+ },
387
+ ],
388
+ },
389
+ },
390
+ ],
391
+ },
392
+ {
393
+ name: 'Glob',
394
+ args: [
395
+ { name: 'pattern', type: { kind: $.TypeKind.Basic, name: 'string' } },
396
+ ],
397
+ returns: [
398
+ {
399
+ type: {
400
+ kind: $.TypeKind.Slice,
401
+ elemType: { kind: $.TypeKind.Basic, name: 'string' },
402
+ },
403
+ },
404
+ {
405
+ type: {
406
+ kind: $.TypeKind.Interface,
407
+ name: 'GoError',
408
+ methods: [
409
+ {
410
+ name: 'Error',
411
+ args: [],
412
+ returns: [
413
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
414
+ ],
415
+ },
416
+ ],
417
+ },
418
+ },
419
+ ],
420
+ },
421
+ {
422
+ name: 'Sub',
423
+ args: [
424
+ { name: 'dir', type: { kind: $.TypeKind.Basic, name: 'string' } },
425
+ ],
426
+ returns: [
427
+ { type: 'FS' },
428
+ {
429
+ type: {
430
+ kind: $.TypeKind.Interface,
431
+ name: 'GoError',
432
+ methods: [
433
+ {
434
+ name: 'Error',
435
+ args: [],
436
+ returns: [
437
+ { type: { kind: $.TypeKind.Basic, name: 'string' } },
438
+ ],
439
+ },
440
+ ],
441
+ },
442
+ },
443
+ ],
444
+ },
445
+ ],
446
+ subFS,
447
+ { fsys: 'FS', dir: { kind: $.TypeKind.Basic, name: 'string' } },
448
+ )
449
+ }