goscript 0.0.26 → 0.0.29
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/README.md +4 -4
- package/cmd/goscript/cmd_compile.go +0 -3
- package/cmd/goscript/deps.go +11 -0
- package/compiler/analysis.go +298 -55
- package/compiler/assignment.go +2 -2
- package/compiler/builtin_test.go +1 -1
- package/compiler/compiler.go +200 -68
- package/compiler/compiler_test.go +17 -24
- package/compiler/composite-lit.go +32 -8
- package/compiler/decl.go +6 -6
- package/compiler/expr-call.go +170 -15
- package/compiler/expr-selector.go +100 -0
- package/compiler/expr.go +1 -1
- package/compiler/protobuf.go +557 -0
- package/compiler/spec-struct.go +4 -0
- package/compiler/spec-value.go +89 -10
- package/compiler/spec.go +254 -1
- package/compiler/stmt-assign.go +35 -0
- package/compiler/type-assert.go +87 -0
- package/compiler/type.go +4 -1
- package/dist/gs/builtin/builtin.d.ts +20 -1
- package/dist/gs/builtin/builtin.js +95 -4
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +1 -1
- package/dist/gs/builtin/slice.js +21 -2
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/errors/errors.d.ts +5 -6
- package/dist/gs/errors/errors.js.map +1 -1
- package/dist/gs/internal/oserror/errors.d.ts +6 -0
- package/dist/gs/internal/oserror/errors.js +7 -0
- package/dist/gs/internal/oserror/errors.js.map +1 -0
- package/dist/gs/internal/oserror/index.d.ts +1 -0
- package/dist/gs/internal/oserror/index.js +2 -0
- package/dist/gs/internal/oserror/index.js.map +1 -0
- package/dist/gs/io/fs/format.d.ts +3 -0
- package/dist/gs/io/fs/format.js +56 -0
- package/dist/gs/io/fs/format.js.map +1 -0
- package/dist/gs/io/fs/fs.d.ts +79 -0
- package/dist/gs/io/fs/fs.js +200 -0
- package/dist/gs/io/fs/fs.js.map +1 -0
- package/dist/gs/io/fs/glob.d.ts +10 -0
- package/dist/gs/io/fs/glob.js +141 -0
- package/dist/gs/io/fs/glob.js.map +1 -0
- package/dist/gs/io/fs/index.d.ts +8 -0
- package/dist/gs/io/fs/index.js +9 -0
- package/dist/gs/io/fs/index.js.map +1 -0
- package/dist/gs/io/fs/readdir.d.ts +7 -0
- package/dist/gs/io/fs/readdir.js +152 -0
- package/dist/gs/io/fs/readdir.js.map +1 -0
- package/dist/gs/io/fs/readfile.d.ts +6 -0
- package/dist/gs/io/fs/readfile.js +118 -0
- package/dist/gs/io/fs/readfile.js.map +1 -0
- package/dist/gs/io/fs/stat.d.ts +6 -0
- package/dist/gs/io/fs/stat.js +87 -0
- package/dist/gs/io/fs/stat.js.map +1 -0
- package/dist/gs/io/fs/sub.d.ts +6 -0
- package/dist/gs/io/fs/sub.js +172 -0
- package/dist/gs/io/fs/sub.js.map +1 -0
- package/dist/gs/io/fs/walk.d.ts +7 -0
- package/dist/gs/io/fs/walk.js +76 -0
- package/dist/gs/io/fs/walk.js.map +1 -0
- package/dist/gs/io/index.d.ts +1 -0
- package/dist/gs/io/index.js +2 -0
- package/dist/gs/io/index.js.map +1 -0
- package/dist/gs/io/io.d.ts +107 -0
- package/dist/gs/io/io.js +385 -0
- package/dist/gs/io/io.js.map +1 -0
- package/dist/gs/path/index.d.ts +2 -0
- package/dist/gs/path/index.js +3 -0
- package/dist/gs/path/index.js.map +1 -0
- package/dist/gs/path/match.d.ts +6 -0
- package/dist/gs/path/match.js +281 -0
- package/dist/gs/path/match.js.map +1 -0
- package/dist/gs/path/path.d.ts +7 -0
- package/dist/gs/path/path.js +256 -0
- package/dist/gs/path/path.js.map +1 -0
- package/dist/gs/strings/builder.d.ts +18 -0
- package/dist/gs/strings/builder.js +205 -0
- package/dist/gs/strings/builder.js.map +1 -0
- package/dist/gs/strings/clone.d.ts +1 -0
- package/dist/gs/strings/clone.js +16 -0
- package/dist/gs/strings/clone.js.map +1 -0
- package/dist/gs/strings/compare.d.ts +1 -0
- package/dist/gs/strings/compare.js +14 -0
- package/dist/gs/strings/compare.js.map +1 -0
- package/dist/gs/strings/index.d.ts +2 -0
- package/dist/gs/strings/index.js +3 -0
- package/dist/gs/strings/index.js.map +1 -0
- package/dist/gs/strings/iter.d.ts +8 -0
- package/dist/gs/strings/iter.js +160 -0
- package/dist/gs/strings/iter.js.map +1 -0
- package/dist/gs/strings/reader.d.ts +34 -0
- package/dist/gs/strings/reader.js +418 -0
- package/dist/gs/strings/reader.js.map +1 -0
- package/dist/gs/strings/replace.d.ts +106 -0
- package/dist/gs/strings/replace.js +1136 -0
- package/dist/gs/strings/replace.js.map +1 -0
- package/dist/gs/strings/search.d.ts +24 -0
- package/dist/gs/strings/search.js +169 -0
- package/dist/gs/strings/search.js.map +1 -0
- package/dist/gs/strings/strings.d.ts +47 -0
- package/dist/gs/strings/strings.js +418 -0
- package/dist/gs/strings/strings.js.map +1 -0
- package/dist/gs/stringslite/index.d.ts +1 -0
- package/dist/gs/stringslite/index.js +2 -0
- package/dist/gs/stringslite/index.js.map +1 -0
- package/dist/gs/stringslite/strings.d.ts +11 -0
- package/dist/gs/stringslite/strings.js +67 -0
- package/dist/gs/stringslite/strings.js.map +1 -0
- package/dist/gs/sync/index.d.ts +1 -0
- package/dist/gs/sync/index.js +2 -0
- package/dist/gs/sync/index.js.map +1 -0
- package/dist/gs/sync/sync.d.ts +79 -0
- package/dist/gs/sync/sync.js +392 -0
- package/dist/gs/sync/sync.js.map +1 -0
- package/dist/gs/time/time.d.ts +11 -2
- package/dist/gs/time/time.js +337 -12
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unicode/index.d.ts +1 -0
- package/dist/gs/unicode/index.js +2 -0
- package/dist/gs/unicode/index.js.map +1 -0
- package/dist/gs/unicode/unicode.d.ts +105 -0
- package/dist/gs/unicode/unicode.js +332 -0
- package/dist/gs/unicode/unicode.js.map +1 -0
- package/dist/gs/unicode/utf8/index.d.ts +1 -0
- package/dist/gs/unicode/utf8/index.js +3 -0
- package/dist/gs/unicode/utf8/index.js.map +1 -0
- package/dist/gs/unicode/utf8/utf8.d.ts +20 -0
- package/dist/gs/unicode/utf8/utf8.js +196 -0
- package/dist/gs/unicode/utf8/utf8.js.map +1 -0
- package/dist/gs/unsafe/index.d.ts +1 -0
- package/dist/gs/unsafe/index.js +2 -0
- package/dist/gs/unsafe/index.js.map +1 -0
- package/dist/gs/unsafe/unsafe.d.ts +11 -0
- package/dist/gs/unsafe/unsafe.js +44 -0
- package/dist/gs/unsafe/unsafe.js.map +1 -0
- package/go.mod +2 -1
- package/go.sum +6 -2
- package/gs/README.md +6 -0
- package/gs/builtin/builtin.ts +171 -0
- package/gs/builtin/channel.ts +683 -0
- package/gs/builtin/defer.ts +58 -0
- package/gs/builtin/index.ts +1 -0
- package/gs/builtin/io.ts +22 -0
- package/gs/builtin/map.ts +50 -0
- package/gs/builtin/slice.ts +1030 -0
- package/gs/builtin/type.ts +1106 -0
- package/gs/builtin/varRef.ts +25 -0
- package/gs/cmp/godoc.txt +8 -0
- package/gs/cmp/index.ts +29 -0
- package/gs/context/context.ts +401 -0
- package/gs/context/godoc.txt +69 -0
- package/gs/context/index.ts +1 -0
- package/gs/errors/errors.ts +223 -0
- package/gs/errors/godoc.txt +63 -0
- package/gs/errors/index.ts +1 -0
- package/gs/internal/goarch/godoc.txt +39 -0
- package/gs/internal/goarch/index.ts +18 -0
- package/gs/internal/oserror/errors.ts +14 -0
- package/gs/internal/oserror/index.ts +1 -0
- package/gs/io/fs/format.ts +65 -0
- package/gs/io/fs/fs.ts +359 -0
- package/gs/io/fs/glob.ts +167 -0
- package/gs/io/fs/godoc.txt +35 -0
- package/gs/io/fs/index.ts +8 -0
- package/gs/io/fs/readdir.ts +126 -0
- package/gs/io/fs/readfile.ts +77 -0
- package/gs/io/fs/stat.ts +38 -0
- package/gs/io/fs/sub.ts +208 -0
- package/gs/io/fs/walk.ts +89 -0
- package/gs/io/godoc.txt +61 -0
- package/gs/io/index.ts +1 -0
- package/gs/io/io.go +75 -0
- package/gs/io/io.ts +546 -0
- package/gs/iter/godoc.txt +203 -0
- package/gs/iter/index.ts +1 -0
- package/gs/iter/iter.ts +117 -0
- package/gs/math/bits/index.ts +356 -0
- package/gs/math/godoc.txt +76 -0
- package/gs/path/index.ts +2 -0
- package/gs/path/match.ts +307 -0
- package/gs/path/path.ts +301 -0
- package/gs/runtime/godoc.txt +331 -0
- package/gs/runtime/index.ts +1 -0
- package/gs/runtime/runtime.ts +178 -0
- package/gs/slices/godoc.txt +44 -0
- package/gs/slices/index.ts +1 -0
- package/gs/slices/slices.ts +22 -0
- package/gs/strings/builder.test.ts +121 -0
- package/gs/strings/builder.ts +223 -0
- package/gs/strings/clone.test.ts +43 -0
- package/gs/strings/clone.ts +17 -0
- package/gs/strings/compare.test.ts +84 -0
- package/gs/strings/compare.ts +13 -0
- package/gs/strings/godoc.txt +66 -0
- package/gs/strings/index.ts +2 -0
- package/gs/strings/iter.test.ts +343 -0
- package/gs/strings/iter.ts +171 -0
- package/gs/strings/reader.test.ts +242 -0
- package/gs/strings/reader.ts +451 -0
- package/gs/strings/replace.test.ts +181 -0
- package/gs/strings/replace.ts +1310 -0
- package/gs/strings/search.test.ts +214 -0
- package/gs/strings/search.ts +213 -0
- package/gs/strings/strings.test.ts +477 -0
- package/gs/strings/strings.ts +510 -0
- package/gs/stringslite/godoc.txt +17 -0
- package/gs/stringslite/index.ts +1 -0
- package/gs/stringslite/strings.ts +82 -0
- package/gs/sync/godoc.txt +21 -0
- package/gs/sync/index.ts +1 -0
- package/gs/sync/sync.go +64 -0
- package/gs/sync/sync.ts +449 -0
- package/gs/time/godoc.txt +116 -0
- package/gs/time/index.ts +1 -0
- package/gs/time/time.ts +585 -0
- package/gs/unicode/godoc.txt +52 -0
- package/gs/unicode/index.ts +1 -0
- package/gs/unicode/unicode.go +38 -0
- package/gs/unicode/unicode.ts +418 -0
- package/gs/unicode/utf8/godoc.txt +22 -0
- package/gs/unicode/utf8/index.ts +2 -0
- package/gs/unicode/utf8/utf8.ts +227 -0
- package/gs/unsafe/godoc.txt +19 -0
- package/gs/unsafe/index.ts +1 -0
- package/gs/unsafe/unsafe.test.ts +68 -0
- package/gs/unsafe/unsafe.ts +77 -0
- package/package.json +4 -3
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as $ from "@goscript/builtin/builtin.js";
|
|
2
|
+
import { Stat } from "./stat.js";
|
|
3
|
+
import { ReadDir } from "./readdir.js";
|
|
4
|
+
import * as path from "@goscript/path/index.js";
|
|
5
|
+
$.registerInterfaceType('GlobFS', null, // Zero value for interface is null
|
|
6
|
+
[{ 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' } }] }] } }] }]);
|
|
7
|
+
// Glob returns the names of all files matching pattern or nil
|
|
8
|
+
// if there is no matching file. The syntax of patterns is the same
|
|
9
|
+
// as in [path.Match]. The pattern may describe hierarchical names such as
|
|
10
|
+
// usr/*/bin/ed.
|
|
11
|
+
//
|
|
12
|
+
// Glob ignores file system errors such as I/O errors reading directories.
|
|
13
|
+
// The only possible returned error is [path.ErrBadPattern], reporting that
|
|
14
|
+
// the pattern is malformed.
|
|
15
|
+
//
|
|
16
|
+
// If fs implements [GlobFS], Glob calls fs.Glob.
|
|
17
|
+
// Otherwise, Glob uses [ReadDir] to traverse the directory tree
|
|
18
|
+
// and look for matches for the pattern.
|
|
19
|
+
export function Glob(fsys, pattern) {
|
|
20
|
+
let matches = null;
|
|
21
|
+
let err = null;
|
|
22
|
+
{
|
|
23
|
+
return globWithLimit(fsys, pattern, 0);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function globWithLimit(fsys, pattern, depth) {
|
|
27
|
+
let matches = null;
|
|
28
|
+
let err = null;
|
|
29
|
+
{
|
|
30
|
+
// This limit is added to prevent stack exhaustion issues. See
|
|
31
|
+
// CVE-2022-30630.
|
|
32
|
+
let pathSeparatorsLimit = 10000;
|
|
33
|
+
if (depth > 10000) {
|
|
34
|
+
return [null, path.ErrBadPattern];
|
|
35
|
+
}
|
|
36
|
+
{
|
|
37
|
+
let { value: fsysTyped, ok: ok } = $.typeAssert(fsys, 'GlobFS');
|
|
38
|
+
if (ok) {
|
|
39
|
+
return fsysTyped.Glob(pattern);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Check pattern is well-formed.
|
|
43
|
+
{
|
|
44
|
+
let [, err] = path.Match(pattern, "");
|
|
45
|
+
if (err != null) {
|
|
46
|
+
return [null, err];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (!hasMeta(pattern)) {
|
|
50
|
+
{
|
|
51
|
+
[, err] = Stat(fsys, pattern);
|
|
52
|
+
if (err != null) {
|
|
53
|
+
return [null, null];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return [$.arrayToSlice([pattern]), null];
|
|
57
|
+
}
|
|
58
|
+
let [dir, file] = path.Split(pattern);
|
|
59
|
+
dir = cleanGlobPath(dir);
|
|
60
|
+
if (!hasMeta(dir)) {
|
|
61
|
+
return glob(fsys, dir, file, null);
|
|
62
|
+
}
|
|
63
|
+
// Prevent infinite recursion. See issue 15879.
|
|
64
|
+
if (dir == pattern) {
|
|
65
|
+
return [null, path.ErrBadPattern];
|
|
66
|
+
}
|
|
67
|
+
let m;
|
|
68
|
+
[m, err] = globWithLimit(fsys, dir, depth + 1);
|
|
69
|
+
if (err != null) {
|
|
70
|
+
return [null, err];
|
|
71
|
+
}
|
|
72
|
+
for (let _i = 0; _i < $.len(m); _i++) {
|
|
73
|
+
const d = m[_i];
|
|
74
|
+
{
|
|
75
|
+
[matches, err] = glob(fsys, d, file, matches);
|
|
76
|
+
if (err != null) {
|
|
77
|
+
return [matches, err];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return [matches, err];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// cleanGlobPath prepares path for glob matching.
|
|
85
|
+
export function cleanGlobPath(path) {
|
|
86
|
+
// chop off trailing separator
|
|
87
|
+
switch (path) {
|
|
88
|
+
case "":
|
|
89
|
+
return ".";
|
|
90
|
+
break;
|
|
91
|
+
default:
|
|
92
|
+
return $.sliceString(path, 0, $.len(path) - 1);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// glob searches for files matching pattern in the directory dir
|
|
97
|
+
// and appends them to matches, returning the updated slice.
|
|
98
|
+
// If the directory cannot be opened, glob returns the existing matches.
|
|
99
|
+
// New matches are added in lexicographical order.
|
|
100
|
+
export function glob(fs, dir, pattern, matches) {
|
|
101
|
+
let m = null;
|
|
102
|
+
let e = null;
|
|
103
|
+
{
|
|
104
|
+
m = matches;
|
|
105
|
+
let [infos, err] = ReadDir(fs, dir);
|
|
106
|
+
// ignore I/O error
|
|
107
|
+
if (err != null) {
|
|
108
|
+
return [m, e];
|
|
109
|
+
}
|
|
110
|
+
for (let _i = 0; _i < $.len(infos); _i++) {
|
|
111
|
+
const info = infos[_i];
|
|
112
|
+
{
|
|
113
|
+
let n = info.Name();
|
|
114
|
+
let [matched, err] = path.Match(pattern, n);
|
|
115
|
+
if (err != null) {
|
|
116
|
+
return [m, err];
|
|
117
|
+
}
|
|
118
|
+
if (matched) {
|
|
119
|
+
m = $.append(m, path.Join(dir, n));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return [m, e];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// hasMeta reports whether path contains any of the magic characters
|
|
127
|
+
// recognized by path.Match.
|
|
128
|
+
export function hasMeta(path) {
|
|
129
|
+
for (let i = 0; i < $.len(path); i++) {
|
|
130
|
+
switch ($.indexString(path, i)) {
|
|
131
|
+
case 42:
|
|
132
|
+
case 63:
|
|
133
|
+
case 91:
|
|
134
|
+
case 92:
|
|
135
|
+
return true;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../../../gs/io/fs/glob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./format.js";
|
|
2
|
+
export * from "./fs.js";
|
|
3
|
+
export * from "./glob.js";
|
|
4
|
+
export * from "./readdir.js";
|
|
5
|
+
export * from "./readfile.js";
|
|
6
|
+
export * from "./stat.js";
|
|
7
|
+
export * from "./sub.js";
|
|
8
|
+
export * from "./walk.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../gs/io/fs/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as $ from "@goscript/builtin/builtin.js";
|
|
2
|
+
import { FS, DirEntry, FileInfo } from "./fs.js";
|
|
3
|
+
export type ReadDirFS = null | ({
|
|
4
|
+
ReadDir(name: string): [$.Slice<DirEntry>, $.GoError];
|
|
5
|
+
} & FS);
|
|
6
|
+
export declare function ReadDir(fsys: FS, name: string): [$.Slice<DirEntry>, $.GoError];
|
|
7
|
+
export declare function FileInfoToDirEntry(info: FileInfo): DirEntry;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import * as $ from "@goscript/builtin/builtin.js";
|
|
54
|
+
import { FormatDirEntry } from "./format.js";
|
|
55
|
+
import { PathError, fileModeType } from "./fs.js";
|
|
56
|
+
import * as errors from "@goscript/errors/index.js";
|
|
57
|
+
$.registerInterfaceType('ReadDirFS', null, // Zero value for interface is null
|
|
58
|
+
[{ 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' } }] }] } }] }]);
|
|
59
|
+
// ReadDir reads the named directory
|
|
60
|
+
// and returns a list of directory entries sorted by filename.
|
|
61
|
+
//
|
|
62
|
+
// If fs implements [ReadDirFS], ReadDir calls fs.ReadDir.
|
|
63
|
+
// Otherwise ReadDir calls fs.Open and uses ReadDir and Close
|
|
64
|
+
// on the returned file.
|
|
65
|
+
export function ReadDir(fsys, name) {
|
|
66
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
67
|
+
try {
|
|
68
|
+
const __defer = __addDisposableResource(env_1, new $.DisposableStack(), false);
|
|
69
|
+
{
|
|
70
|
+
let { value: fsysTyped, ok: ok } = $.typeAssert(fsys, 'ReadDirFS');
|
|
71
|
+
if (ok) {
|
|
72
|
+
return fsysTyped.ReadDir(name);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
let [file, err] = fsys.Open(name);
|
|
76
|
+
if (err != null) {
|
|
77
|
+
return [null, err];
|
|
78
|
+
}
|
|
79
|
+
__defer.defer(() => {
|
|
80
|
+
file.Close();
|
|
81
|
+
});
|
|
82
|
+
let { value: dir, ok: ok } = $.typeAssert(file, 'ReadDirFile');
|
|
83
|
+
if (!ok) {
|
|
84
|
+
return [null, new PathError({ Err: errors.New("not implemented"), Op: "readdir", Path: name })];
|
|
85
|
+
}
|
|
86
|
+
let list;
|
|
87
|
+
[list, err] = dir.ReadDir(-1);
|
|
88
|
+
list.sort((a, b) => {
|
|
89
|
+
return a.Name().localeCompare(b.Name());
|
|
90
|
+
});
|
|
91
|
+
return [list, err];
|
|
92
|
+
}
|
|
93
|
+
catch (e_1) {
|
|
94
|
+
env_1.error = e_1;
|
|
95
|
+
env_1.hasError = true;
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
__disposeResources(env_1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
class dirInfo {
|
|
102
|
+
get fileInfo() {
|
|
103
|
+
return this._fields.fileInfo.value;
|
|
104
|
+
}
|
|
105
|
+
set fileInfo(value) {
|
|
106
|
+
this._fields.fileInfo.value = value;
|
|
107
|
+
}
|
|
108
|
+
_fields;
|
|
109
|
+
constructor(init) {
|
|
110
|
+
this._fields = {
|
|
111
|
+
fileInfo: $.varRef(init?.fileInfo ?? null)
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
clone() {
|
|
115
|
+
const cloned = new dirInfo();
|
|
116
|
+
cloned._fields = {
|
|
117
|
+
fileInfo: $.varRef(this._fields.fileInfo.value)
|
|
118
|
+
};
|
|
119
|
+
return cloned;
|
|
120
|
+
}
|
|
121
|
+
IsDir() {
|
|
122
|
+
const di = this;
|
|
123
|
+
return di.fileInfo.IsDir();
|
|
124
|
+
}
|
|
125
|
+
Type() {
|
|
126
|
+
const di = this;
|
|
127
|
+
return fileModeType(di.fileInfo.Mode());
|
|
128
|
+
}
|
|
129
|
+
Info() {
|
|
130
|
+
const di = this;
|
|
131
|
+
return [di.fileInfo, null];
|
|
132
|
+
}
|
|
133
|
+
Name() {
|
|
134
|
+
const di = this;
|
|
135
|
+
return di.fileInfo.Name();
|
|
136
|
+
}
|
|
137
|
+
String() {
|
|
138
|
+
const di = this;
|
|
139
|
+
return FormatDirEntry(di);
|
|
140
|
+
}
|
|
141
|
+
// Register this type with the runtime type system
|
|
142
|
+
static __typeInfo = $.registerStructType('dirInfo', new dirInfo(), [{ name: "IsDir", args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: "boolean" } }] }, { name: "Type", args: [], returns: [{ type: "FileMode" }] }, { name: "Info", args: [], returns: [{ type: "FileInfo" }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }, { name: "Name", args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: "string" } }] }, { name: "String", args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: "string" } }] }], dirInfo, { "fileInfo": "FileInfo" });
|
|
143
|
+
}
|
|
144
|
+
// FileInfoToDirEntry returns a [DirEntry] that returns information from info.
|
|
145
|
+
// If info is nil, FileInfoToDirEntry returns nil.
|
|
146
|
+
export function FileInfoToDirEntry(info) {
|
|
147
|
+
if (info == null) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
return new dirInfo({ fileInfo: info });
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=readdir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readdir.js","sourceRoot":"","sources":["../../../../gs/io/fs/readdir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import * as $ from "@goscript/builtin/builtin.js";
|
|
54
|
+
import * as io from "@goscript/io/index.js";
|
|
55
|
+
$.registerInterfaceType('ReadFileFS', null, // Zero value for interface is null
|
|
56
|
+
[{ 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' } }] }] } }] }]);
|
|
57
|
+
// ReadFile reads the named file from the file system fs and returns its contents.
|
|
58
|
+
// A successful call returns a nil error, not [io.EOF].
|
|
59
|
+
// (Because ReadFile reads the whole file, the expected EOF
|
|
60
|
+
// from the final Read is not treated as an error to be reported.)
|
|
61
|
+
//
|
|
62
|
+
// If fs implements [ReadFileFS], ReadFile calls fs.ReadFile.
|
|
63
|
+
// Otherwise ReadFile calls fs.Open and uses Read and Close
|
|
64
|
+
// on the returned [File].
|
|
65
|
+
export function ReadFile(fsys, name) {
|
|
66
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
67
|
+
try {
|
|
68
|
+
const __defer = __addDisposableResource(env_1, new $.DisposableStack(), false);
|
|
69
|
+
{
|
|
70
|
+
let { value: fsysTyped, ok: ok } = $.typeAssert(fsys, 'ReadFileFS');
|
|
71
|
+
if (ok) {
|
|
72
|
+
return fsysTyped.ReadFile(name);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
let [file, err] = fsys.Open(name);
|
|
76
|
+
if (err != null) {
|
|
77
|
+
return [new Uint8Array(0), err];
|
|
78
|
+
}
|
|
79
|
+
__defer.defer(() => {
|
|
80
|
+
file.Close();
|
|
81
|
+
});
|
|
82
|
+
let size = 0;
|
|
83
|
+
{
|
|
84
|
+
let [info, err] = file.Stat();
|
|
85
|
+
if (err == null) {
|
|
86
|
+
let size64 = info.Size();
|
|
87
|
+
if (size64 == size64) {
|
|
88
|
+
size = size64;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
let data = new Uint8Array(0);
|
|
93
|
+
for (;;) {
|
|
94
|
+
if ($.len(data) >= $.cap(data)) {
|
|
95
|
+
// Grow the array by creating a new larger one
|
|
96
|
+
let newData = new Uint8Array($.len(data) * 2 + 1);
|
|
97
|
+
newData.set(data);
|
|
98
|
+
data = newData;
|
|
99
|
+
}
|
|
100
|
+
let [n, err] = file.Read(data.subarray($.len(data), $.cap(data)));
|
|
101
|
+
data = data.subarray(0, $.len(data) + n);
|
|
102
|
+
if (err != null) {
|
|
103
|
+
if (err == io.EOF) {
|
|
104
|
+
err = null;
|
|
105
|
+
}
|
|
106
|
+
return [data, err];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (e_1) {
|
|
111
|
+
env_1.error = e_1;
|
|
112
|
+
env_1.hasError = true;
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
__disposeResources(env_1);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=readfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readfile.js","sourceRoot":"","sources":["../../../../gs/io/fs/readfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import * as $ from "@goscript/builtin/builtin.js";
|
|
54
|
+
$.registerInterfaceType('StatFS', null, // Zero value for interface is null
|
|
55
|
+
[{ name: "Stat", args: [{ name: "name", type: { kind: $.TypeKind.Basic, name: "string" } }], returns: [{ type: "FileInfo" }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }]);
|
|
56
|
+
// Stat returns a [FileInfo] describing the named file from the file system.
|
|
57
|
+
//
|
|
58
|
+
// If fs implements [StatFS], Stat calls fs.Stat.
|
|
59
|
+
// Otherwise, Stat opens the [File] to stat it.
|
|
60
|
+
export function Stat(fsys, name) {
|
|
61
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
62
|
+
try {
|
|
63
|
+
const __defer = __addDisposableResource(env_1, new $.DisposableStack(), false);
|
|
64
|
+
{
|
|
65
|
+
let { value: fsysTyped, ok: ok } = $.typeAssert(fsys, 'StatFS');
|
|
66
|
+
if (ok) {
|
|
67
|
+
return fsysTyped.Stat(name);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
let [file, err] = fsys.Open(name);
|
|
71
|
+
if (err != null) {
|
|
72
|
+
return [null, err];
|
|
73
|
+
}
|
|
74
|
+
__defer.defer(() => {
|
|
75
|
+
file.Close();
|
|
76
|
+
});
|
|
77
|
+
return file.Stat();
|
|
78
|
+
}
|
|
79
|
+
catch (e_1) {
|
|
80
|
+
env_1.error = e_1;
|
|
81
|
+
env_1.hasError = true;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
__disposeResources(env_1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=stat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../../gs/io/fs/stat.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,CAAC,MAAM,8BAA8B,CAAC;AASlD,CAAC,CAAC,qBAAqB,CACrB,QAAQ,EACR,IAAI,EAAE,mCAAmC;AACzC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CACpS,CAAC;AAEF,4EAA4E;AAC5E,EAAE;AACF,iDAAiD;AACjD,+CAA+C;AAC/C,MAAM,UAAU,IAAI,CAAC,IAAQ,EAAE,IAAY;;;QAC1C,MAAM,OAAO,kCAAG,IAAI,CAAC,CAAC,eAAe,EAAE,QAAA,CAAC;QACxC,CAAC;YACA,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,CAAS,IAAI,EAAE,QAAQ,CAAC,CAAA;YACvE,IAAI,EAAE,EAAE,CAAC;gBACR,OAAO,SAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7B,CAAC;QACF,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YAClB,IAAK,CAAC,KAAK,EAAE,CAAA;QACd,CAAC,CAAC,CAAC;QACH,OAAO,IAAK,CAAC,IAAI,EAAE,CAAA;;;;;;;;;CACnB"}
|