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.
Files changed (228) hide show
  1. package/README.md +4 -4
  2. package/cmd/goscript/cmd_compile.go +0 -3
  3. package/cmd/goscript/deps.go +11 -0
  4. package/compiler/analysis.go +298 -55
  5. package/compiler/assignment.go +2 -2
  6. package/compiler/builtin_test.go +1 -1
  7. package/compiler/compiler.go +200 -68
  8. package/compiler/compiler_test.go +17 -24
  9. package/compiler/composite-lit.go +32 -8
  10. package/compiler/decl.go +6 -6
  11. package/compiler/expr-call.go +170 -15
  12. package/compiler/expr-selector.go +100 -0
  13. package/compiler/expr.go +1 -1
  14. package/compiler/protobuf.go +557 -0
  15. package/compiler/spec-struct.go +4 -0
  16. package/compiler/spec-value.go +89 -10
  17. package/compiler/spec.go +254 -1
  18. package/compiler/stmt-assign.go +35 -0
  19. package/compiler/type-assert.go +87 -0
  20. package/compiler/type.go +4 -1
  21. package/dist/gs/builtin/builtin.d.ts +20 -1
  22. package/dist/gs/builtin/builtin.js +95 -4
  23. package/dist/gs/builtin/builtin.js.map +1 -1
  24. package/dist/gs/builtin/slice.d.ts +1 -1
  25. package/dist/gs/builtin/slice.js +21 -2
  26. package/dist/gs/builtin/slice.js.map +1 -1
  27. package/dist/gs/errors/errors.d.ts +5 -6
  28. package/dist/gs/errors/errors.js.map +1 -1
  29. package/dist/gs/internal/oserror/errors.d.ts +6 -0
  30. package/dist/gs/internal/oserror/errors.js +7 -0
  31. package/dist/gs/internal/oserror/errors.js.map +1 -0
  32. package/dist/gs/internal/oserror/index.d.ts +1 -0
  33. package/dist/gs/internal/oserror/index.js +2 -0
  34. package/dist/gs/internal/oserror/index.js.map +1 -0
  35. package/dist/gs/io/fs/format.d.ts +3 -0
  36. package/dist/gs/io/fs/format.js +56 -0
  37. package/dist/gs/io/fs/format.js.map +1 -0
  38. package/dist/gs/io/fs/fs.d.ts +79 -0
  39. package/dist/gs/io/fs/fs.js +200 -0
  40. package/dist/gs/io/fs/fs.js.map +1 -0
  41. package/dist/gs/io/fs/glob.d.ts +10 -0
  42. package/dist/gs/io/fs/glob.js +141 -0
  43. package/dist/gs/io/fs/glob.js.map +1 -0
  44. package/dist/gs/io/fs/index.d.ts +8 -0
  45. package/dist/gs/io/fs/index.js +9 -0
  46. package/dist/gs/io/fs/index.js.map +1 -0
  47. package/dist/gs/io/fs/readdir.d.ts +7 -0
  48. package/dist/gs/io/fs/readdir.js +152 -0
  49. package/dist/gs/io/fs/readdir.js.map +1 -0
  50. package/dist/gs/io/fs/readfile.d.ts +6 -0
  51. package/dist/gs/io/fs/readfile.js +118 -0
  52. package/dist/gs/io/fs/readfile.js.map +1 -0
  53. package/dist/gs/io/fs/stat.d.ts +6 -0
  54. package/dist/gs/io/fs/stat.js +87 -0
  55. package/dist/gs/io/fs/stat.js.map +1 -0
  56. package/dist/gs/io/fs/sub.d.ts +6 -0
  57. package/dist/gs/io/fs/sub.js +172 -0
  58. package/dist/gs/io/fs/sub.js.map +1 -0
  59. package/dist/gs/io/fs/walk.d.ts +7 -0
  60. package/dist/gs/io/fs/walk.js +76 -0
  61. package/dist/gs/io/fs/walk.js.map +1 -0
  62. package/dist/gs/io/index.d.ts +1 -0
  63. package/dist/gs/io/index.js +2 -0
  64. package/dist/gs/io/index.js.map +1 -0
  65. package/dist/gs/io/io.d.ts +107 -0
  66. package/dist/gs/io/io.js +385 -0
  67. package/dist/gs/io/io.js.map +1 -0
  68. package/dist/gs/path/index.d.ts +2 -0
  69. package/dist/gs/path/index.js +3 -0
  70. package/dist/gs/path/index.js.map +1 -0
  71. package/dist/gs/path/match.d.ts +6 -0
  72. package/dist/gs/path/match.js +281 -0
  73. package/dist/gs/path/match.js.map +1 -0
  74. package/dist/gs/path/path.d.ts +7 -0
  75. package/dist/gs/path/path.js +256 -0
  76. package/dist/gs/path/path.js.map +1 -0
  77. package/dist/gs/strings/builder.d.ts +18 -0
  78. package/dist/gs/strings/builder.js +205 -0
  79. package/dist/gs/strings/builder.js.map +1 -0
  80. package/dist/gs/strings/clone.d.ts +1 -0
  81. package/dist/gs/strings/clone.js +16 -0
  82. package/dist/gs/strings/clone.js.map +1 -0
  83. package/dist/gs/strings/compare.d.ts +1 -0
  84. package/dist/gs/strings/compare.js +14 -0
  85. package/dist/gs/strings/compare.js.map +1 -0
  86. package/dist/gs/strings/index.d.ts +2 -0
  87. package/dist/gs/strings/index.js +3 -0
  88. package/dist/gs/strings/index.js.map +1 -0
  89. package/dist/gs/strings/iter.d.ts +8 -0
  90. package/dist/gs/strings/iter.js +160 -0
  91. package/dist/gs/strings/iter.js.map +1 -0
  92. package/dist/gs/strings/reader.d.ts +34 -0
  93. package/dist/gs/strings/reader.js +418 -0
  94. package/dist/gs/strings/reader.js.map +1 -0
  95. package/dist/gs/strings/replace.d.ts +106 -0
  96. package/dist/gs/strings/replace.js +1136 -0
  97. package/dist/gs/strings/replace.js.map +1 -0
  98. package/dist/gs/strings/search.d.ts +24 -0
  99. package/dist/gs/strings/search.js +169 -0
  100. package/dist/gs/strings/search.js.map +1 -0
  101. package/dist/gs/strings/strings.d.ts +47 -0
  102. package/dist/gs/strings/strings.js +418 -0
  103. package/dist/gs/strings/strings.js.map +1 -0
  104. package/dist/gs/stringslite/index.d.ts +1 -0
  105. package/dist/gs/stringslite/index.js +2 -0
  106. package/dist/gs/stringslite/index.js.map +1 -0
  107. package/dist/gs/stringslite/strings.d.ts +11 -0
  108. package/dist/gs/stringslite/strings.js +67 -0
  109. package/dist/gs/stringslite/strings.js.map +1 -0
  110. package/dist/gs/sync/index.d.ts +1 -0
  111. package/dist/gs/sync/index.js +2 -0
  112. package/dist/gs/sync/index.js.map +1 -0
  113. package/dist/gs/sync/sync.d.ts +79 -0
  114. package/dist/gs/sync/sync.js +392 -0
  115. package/dist/gs/sync/sync.js.map +1 -0
  116. package/dist/gs/time/time.d.ts +11 -2
  117. package/dist/gs/time/time.js +337 -12
  118. package/dist/gs/time/time.js.map +1 -1
  119. package/dist/gs/unicode/index.d.ts +1 -0
  120. package/dist/gs/unicode/index.js +2 -0
  121. package/dist/gs/unicode/index.js.map +1 -0
  122. package/dist/gs/unicode/unicode.d.ts +105 -0
  123. package/dist/gs/unicode/unicode.js +332 -0
  124. package/dist/gs/unicode/unicode.js.map +1 -0
  125. package/dist/gs/unicode/utf8/index.d.ts +1 -0
  126. package/dist/gs/unicode/utf8/index.js +3 -0
  127. package/dist/gs/unicode/utf8/index.js.map +1 -0
  128. package/dist/gs/unicode/utf8/utf8.d.ts +20 -0
  129. package/dist/gs/unicode/utf8/utf8.js +196 -0
  130. package/dist/gs/unicode/utf8/utf8.js.map +1 -0
  131. package/dist/gs/unsafe/index.d.ts +1 -0
  132. package/dist/gs/unsafe/index.js +2 -0
  133. package/dist/gs/unsafe/index.js.map +1 -0
  134. package/dist/gs/unsafe/unsafe.d.ts +11 -0
  135. package/dist/gs/unsafe/unsafe.js +44 -0
  136. package/dist/gs/unsafe/unsafe.js.map +1 -0
  137. package/go.mod +2 -1
  138. package/go.sum +6 -2
  139. package/gs/README.md +6 -0
  140. package/gs/builtin/builtin.ts +171 -0
  141. package/gs/builtin/channel.ts +683 -0
  142. package/gs/builtin/defer.ts +58 -0
  143. package/gs/builtin/index.ts +1 -0
  144. package/gs/builtin/io.ts +22 -0
  145. package/gs/builtin/map.ts +50 -0
  146. package/gs/builtin/slice.ts +1030 -0
  147. package/gs/builtin/type.ts +1106 -0
  148. package/gs/builtin/varRef.ts +25 -0
  149. package/gs/cmp/godoc.txt +8 -0
  150. package/gs/cmp/index.ts +29 -0
  151. package/gs/context/context.ts +401 -0
  152. package/gs/context/godoc.txt +69 -0
  153. package/gs/context/index.ts +1 -0
  154. package/gs/errors/errors.ts +223 -0
  155. package/gs/errors/godoc.txt +63 -0
  156. package/gs/errors/index.ts +1 -0
  157. package/gs/internal/goarch/godoc.txt +39 -0
  158. package/gs/internal/goarch/index.ts +18 -0
  159. package/gs/internal/oserror/errors.ts +14 -0
  160. package/gs/internal/oserror/index.ts +1 -0
  161. package/gs/io/fs/format.ts +65 -0
  162. package/gs/io/fs/fs.ts +359 -0
  163. package/gs/io/fs/glob.ts +167 -0
  164. package/gs/io/fs/godoc.txt +35 -0
  165. package/gs/io/fs/index.ts +8 -0
  166. package/gs/io/fs/readdir.ts +126 -0
  167. package/gs/io/fs/readfile.ts +77 -0
  168. package/gs/io/fs/stat.ts +38 -0
  169. package/gs/io/fs/sub.ts +208 -0
  170. package/gs/io/fs/walk.ts +89 -0
  171. package/gs/io/godoc.txt +61 -0
  172. package/gs/io/index.ts +1 -0
  173. package/gs/io/io.go +75 -0
  174. package/gs/io/io.ts +546 -0
  175. package/gs/iter/godoc.txt +203 -0
  176. package/gs/iter/index.ts +1 -0
  177. package/gs/iter/iter.ts +117 -0
  178. package/gs/math/bits/index.ts +356 -0
  179. package/gs/math/godoc.txt +76 -0
  180. package/gs/path/index.ts +2 -0
  181. package/gs/path/match.ts +307 -0
  182. package/gs/path/path.ts +301 -0
  183. package/gs/runtime/godoc.txt +331 -0
  184. package/gs/runtime/index.ts +1 -0
  185. package/gs/runtime/runtime.ts +178 -0
  186. package/gs/slices/godoc.txt +44 -0
  187. package/gs/slices/index.ts +1 -0
  188. package/gs/slices/slices.ts +22 -0
  189. package/gs/strings/builder.test.ts +121 -0
  190. package/gs/strings/builder.ts +223 -0
  191. package/gs/strings/clone.test.ts +43 -0
  192. package/gs/strings/clone.ts +17 -0
  193. package/gs/strings/compare.test.ts +84 -0
  194. package/gs/strings/compare.ts +13 -0
  195. package/gs/strings/godoc.txt +66 -0
  196. package/gs/strings/index.ts +2 -0
  197. package/gs/strings/iter.test.ts +343 -0
  198. package/gs/strings/iter.ts +171 -0
  199. package/gs/strings/reader.test.ts +242 -0
  200. package/gs/strings/reader.ts +451 -0
  201. package/gs/strings/replace.test.ts +181 -0
  202. package/gs/strings/replace.ts +1310 -0
  203. package/gs/strings/search.test.ts +214 -0
  204. package/gs/strings/search.ts +213 -0
  205. package/gs/strings/strings.test.ts +477 -0
  206. package/gs/strings/strings.ts +510 -0
  207. package/gs/stringslite/godoc.txt +17 -0
  208. package/gs/stringslite/index.ts +1 -0
  209. package/gs/stringslite/strings.ts +82 -0
  210. package/gs/sync/godoc.txt +21 -0
  211. package/gs/sync/index.ts +1 -0
  212. package/gs/sync/sync.go +64 -0
  213. package/gs/sync/sync.ts +449 -0
  214. package/gs/time/godoc.txt +116 -0
  215. package/gs/time/index.ts +1 -0
  216. package/gs/time/time.ts +585 -0
  217. package/gs/unicode/godoc.txt +52 -0
  218. package/gs/unicode/index.ts +1 -0
  219. package/gs/unicode/unicode.go +38 -0
  220. package/gs/unicode/unicode.ts +418 -0
  221. package/gs/unicode/utf8/godoc.txt +22 -0
  222. package/gs/unicode/utf8/index.ts +2 -0
  223. package/gs/unicode/utf8/utf8.ts +227 -0
  224. package/gs/unsafe/godoc.txt +19 -0
  225. package/gs/unsafe/index.ts +1 -0
  226. package/gs/unsafe/unsafe.test.ts +68 -0
  227. package/gs/unsafe/unsafe.ts +77 -0
  228. 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":"AAAA,OAAO,KAAK,CAAC,MAAM,8BAA8B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAA;AAS/C,CAAC,CAAC,qBAAqB,CACrB,QAAQ,EACR,IAAI,EAAE,mCAAmC;AACzC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,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,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,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,CAC7W,CAAC;AAEF,8DAA8D;AAC9D,mEAAmE;AACnE,0EAA0E;AAC1E,gBAAgB;AAChB,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,4BAA4B;AAC5B,EAAE;AACF,iDAAiD;AACjD,gEAAgE;AAChE,wCAAwC;AACxC,MAAM,UAAU,IAAI,CAAC,IAAQ,EAAE,OAAe;IAC7C,IAAI,OAAO,GAAoB,IAAI,CAAA;IACnC,IAAI,GAAG,GAAc,IAAI,CAAA;IACzB,CAAC;QACA,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACvC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAQ,EAAE,OAAe,EAAE,KAAa;IACrE,IAAI,OAAO,GAAoB,IAAI,CAAA;IACnC,IAAI,GAAG,GAAc,IAAI,CAAA;IACzB,CAAC;QACA,8DAA8D;QAC9D,kBAAkB;QAClB,IAAI,mBAAmB,GAAW,KAAK,CAAA;QACvC,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAClC,CAAC;QACD,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,OAAO,CAAC,CAAA;YAChC,CAAC;QACF,CAAC;QAED,gCAAgC;QAChC,CAAC;YACA,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YACrC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YACnB,CAAC;QACF,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,CAAC;gBACA,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBAC7B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBACpB,CAAC;YACF,CAAC;YACD,OAAO,CAAC,CAAC,CAAC,YAAY,CAAS,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACjD,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAExB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QACnC,CAAC;QAED,+CAA+C;QAC/C,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAClC,CAAC;QAED,IAAI,CAAkB,CAAA;QACtB,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC9C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACnB,CAAC;QACD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAE,CAAC,EAAE,CAAC,CAAA;YAChB,CAAC;gBACA,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;gBAC7C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;gBACtB,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACtB,CAAC;AACF,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,aAAa,CAAC,IAAY;IAEzC,8BAA8B;IAC9B,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,EAAE;YACN,OAAO,GAAG,CAAA;YACV,MAAK;QACN;YACC,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9C,MAAK;IACP,CAAC;AACF,CAAC;AAED,gEAAgE;AAChE,4DAA4D;AAC5D,wEAAwE;AACxE,kDAAkD;AAClD,MAAM,UAAU,IAAI,CAAC,EAAM,EAAE,GAAW,EAAE,OAAe,EAAE,OAAwB;IAClF,IAAI,CAAC,GAAoB,IAAI,CAAA;IAC7B,IAAI,CAAC,GAAc,IAAI,CAAA;IACvB,CAAC;QACA,CAAC,GAAG,OAAO,CAAA;QACX,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAEnC,mBAAmB;QACnB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACd,CAAC;QAED,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAM,CAAC,EAAE,CAAC,CAAA;YACvB,CAAC;gBACA,IAAI,CAAC,GAAG,IAAK,CAAC,IAAI,EAAE,CAAA;gBACpB,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;gBAC3C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;gBAChB,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACb,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;gBACnC,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACd,CAAC;AACF,CAAC;AAED,oEAAoE;AACpE,4BAA4B;AAC5B,MAAM,UAAU,OAAO,CAAC,IAAY;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,QAAQ,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAChC,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,KAAK,EAAE;gBACN,OAAO,IAAI,CAAA;gBACX,MAAK;QACP,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC"}
@@ -0,0 +1,8 @@
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";
@@ -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,6 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { FS } from "./fs.js";
3
+ export type ReadFileFS = null | ({
4
+ ReadFile(name: string): [Uint8Array, $.GoError];
5
+ } & FS);
6
+ export declare function ReadFile(fsys: FS, name: string): [Uint8Array, $.GoError];
@@ -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,6 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { FS, FileInfo } from "./fs.js";
3
+ export type StatFS = null | ({
4
+ Stat(name: string): [FileInfo, $.GoError];
5
+ } & FS);
6
+ export declare function Stat(fsys: FS, name: string): [FileInfo, $.GoError];
@@ -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"}
@@ -0,0 +1,6 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { FS } from "./fs.js";
3
+ export type SubFS = null | ({
4
+ Sub(dir: string): [FS, $.GoError];
5
+ } & FS);
6
+ export declare function Sub(fsys: FS, dir: string): [FS, $.GoError];