goscript 0.0.38 → 0.0.40
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/compiler/analysis.go +15 -6
- package/compiler/compiler.go +184 -34
- package/compiler/expr-call.go +19 -9
- package/compiler/field.go +17 -3
- package/compiler/gs_dependencies_test.go +80 -0
- package/compiler/lit.go +12 -6
- package/compiler/output.go +10 -4
- package/compiler/spec.go +15 -2
- package/compiler/type-assert.go +111 -21
- package/compiler/type.go +37 -8
- package/dist/gs/builtin/builtin.d.ts +55 -0
- package/dist/gs/builtin/builtin.js +213 -0
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/slice.js +13 -0
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.d.ts +56 -0
- package/dist/gs/bytes/buffer.gs.js +611 -0
- package/dist/gs/bytes/buffer.gs.js.map +1 -0
- package/dist/gs/bytes/bytes.gs.d.ts +78 -0
- package/dist/gs/bytes/bytes.gs.js +1107 -0
- package/dist/gs/bytes/bytes.gs.js.map +1 -0
- package/dist/gs/bytes/index.d.ts +4 -0
- package/dist/gs/bytes/index.js +5 -0
- package/dist/gs/bytes/index.js.map +1 -0
- package/dist/gs/bytes/iter.gs.d.ts +9 -0
- package/dist/gs/bytes/iter.gs.js +143 -0
- package/dist/gs/bytes/iter.gs.js.map +1 -0
- package/dist/gs/bytes/reader.gs.d.ts +34 -0
- package/dist/gs/bytes/reader.gs.js +198 -0
- package/dist/gs/bytes/reader.gs.js.map +1 -0
- package/dist/gs/fmt/fmt.d.ts +49 -0
- package/dist/gs/fmt/fmt.js +322 -0
- package/dist/gs/fmt/fmt.js.map +1 -0
- package/dist/gs/fmt/index.d.ts +1 -0
- package/dist/gs/fmt/index.js +2 -0
- package/dist/gs/fmt/index.js.map +1 -0
- package/dist/gs/internal/bytealg/index.d.ts +14 -2
- package/dist/gs/internal/bytealg/index.js +114 -8
- package/dist/gs/internal/bytealg/index.js.map +1 -1
- package/dist/gs/path/filepath/index.d.ts +3 -0
- package/dist/gs/path/filepath/index.js +3 -0
- package/dist/gs/path/filepath/index.js.map +1 -0
- package/dist/gs/path/filepath/match.d.ts +3 -0
- package/dist/gs/path/filepath/match.js +212 -0
- package/dist/gs/path/filepath/match.js.map +1 -0
- package/dist/gs/path/filepath/path.d.ts +25 -0
- package/dist/gs/path/filepath/path.js +265 -0
- package/dist/gs/path/filepath/path.js.map +1 -0
- package/dist/gs/reflect/deepequal.d.ts +2 -1
- package/dist/gs/reflect/deepequal.js +5 -53
- package/dist/gs/reflect/deepequal.js.map +1 -1
- package/dist/gs/reflect/map.d.ts +14 -8
- package/dist/gs/reflect/map.js +15 -11
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +17 -9
- package/dist/gs/reflect/type.js +1 -1
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/value.js +15 -6
- package/dist/gs/reflect/value.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js +18 -12
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/sort/index.d.ts +4 -0
- package/dist/gs/sort/index.js +4 -0
- package/dist/gs/sort/index.js.map +1 -0
- package/dist/gs/sort/search.gs.d.ts +6 -0
- package/dist/gs/sort/search.gs.js +125 -0
- package/dist/gs/sort/search.gs.js.map +1 -0
- package/dist/gs/sort/slice.gs.d.ts +4 -0
- package/dist/gs/sort/slice.gs.js +49 -0
- package/dist/gs/sort/slice.gs.js.map +1 -0
- package/dist/gs/sort/sort.gs.d.ts +37 -0
- package/dist/gs/sort/sort.gs.js +203 -0
- package/dist/gs/sort/sort.gs.js.map +1 -0
- package/dist/gs/unicode/utf8/utf8.d.ts +1 -1
- package/dist/gs/unicode/utf8/utf8.js +4 -2
- package/dist/gs/unicode/utf8/utf8.js.map +1 -1
- package/gs/builtin/builtin.ts +236 -0
- package/gs/builtin/slice.ts +17 -1
- package/gs/bytes/buffer.gs.ts +614 -0
- package/gs/bytes/bytes.gs.ts +1288 -0
- package/gs/bytes/godoc.txt +69 -0
- package/gs/bytes/index.ts +69 -0
- package/gs/bytes/iter.gs.ts +149 -0
- package/gs/bytes/metadata.go +12 -0
- package/gs/bytes/reader.gs.ts +230 -0
- package/gs/fmt/fmt.ts +407 -0
- package/gs/fmt/godoc.txt +382 -0
- package/gs/fmt/index.ts +31 -0
- package/gs/fmt/metadata.go +7 -0
- package/gs/internal/bytealg/index.ts +125 -10
- package/gs/internal/metadata.go +7 -0
- package/gs/io/metadata.go +11 -0
- package/gs/maps/metadata.go +8 -0
- package/gs/math/metadata.go +7 -0
- package/gs/os/metadata.go +17 -0
- package/gs/path/filepath/godoc.txt +35 -0
- package/gs/path/filepath/index.ts +27 -0
- package/gs/path/filepath/match.test.ts +274 -0
- package/gs/path/filepath/match.ts +249 -0
- package/gs/path/filepath/path.test.ts +246 -0
- package/gs/path/filepath/path.ts +328 -0
- package/gs/path/metadata.go +8 -0
- package/gs/reflect/deepequal.test.ts +41 -0
- package/gs/reflect/deepequal.ts +19 -4
- package/gs/reflect/map.test.ts +30 -0
- package/gs/reflect/map.ts +22 -18
- package/gs/reflect/metadata.go +7 -0
- package/gs/reflect/type.ts +19 -15
- package/gs/reflect/value.ts +21 -7
- package/gs/reflect/visiblefields.ts +17 -13
- package/gs/sort/godoc.txt +27 -0
- package/gs/sort/index.ts +24 -0
- package/gs/sort/search.gs.ts +128 -0
- package/gs/sort/slice.gs.ts +59 -0
- package/gs/sort/sort.gs.ts +227 -0
- package/gs/strconv/metadata.go +7 -0
- package/gs/strings/metadata.go +11 -0
- package/gs/sync/metadata.go +7 -0
- package/gs/unicode/utf8/utf8.ts +8 -5
- package/package.json +1 -1
- package/dist/gs/internal/testlog/index.d.ts +0 -1
- package/dist/gs/internal/testlog/index.js +0 -5
- package/dist/gs/internal/testlog/index.js.map +0 -1
- package/dist/gs/maps/iter.gs.d.ts +0 -7
- package/dist/gs/maps/iter.gs.js +0 -65
- package/dist/gs/maps/iter.gs.js.map +0 -1
- package/dist/gs/maps/maps.gs.d.ts +0 -7
- package/dist/gs/maps/maps.gs.js +0 -79
- package/dist/gs/maps/maps.gs.js.map +0 -1
- package/dist/gs/reflect/abi.d.ts +0 -59
- package/dist/gs/reflect/abi.gs.d.ts +0 -59
- package/dist/gs/reflect/abi.gs.js +0 -79
- package/dist/gs/reflect/abi.gs.js.map +0 -1
- package/dist/gs/reflect/abi.js +0 -79
- package/dist/gs/reflect/abi.js.map +0 -1
- package/dist/gs/reflect/badlinkname.d.ts +0 -52
- package/dist/gs/reflect/badlinkname.gs.d.ts +0 -52
- package/dist/gs/reflect/badlinkname.gs.js +0 -72
- package/dist/gs/reflect/badlinkname.gs.js.map +0 -1
- package/dist/gs/reflect/badlinkname.js +0 -72
- package/dist/gs/reflect/badlinkname.js.map +0 -1
- package/dist/gs/reflect/deepequal.gs.d.ts +0 -25
- package/dist/gs/reflect/deepequal.gs.js +0 -308
- package/dist/gs/reflect/deepequal.gs.js.map +0 -1
- package/dist/gs/reflect/float32reg_generic.gs.d.ts +0 -2
- package/dist/gs/reflect/float32reg_generic.gs.js +0 -10
- package/dist/gs/reflect/float32reg_generic.gs.js.map +0 -1
- package/dist/gs/reflect/index.gs.d.ts +0 -1
- package/dist/gs/reflect/index.gs.js +0 -3
- package/dist/gs/reflect/index.gs.js.map +0 -1
- package/dist/gs/reflect/iter.gs.d.ts +0 -3
- package/dist/gs/reflect/iter.gs.js +0 -24
- package/dist/gs/reflect/iter.gs.js.map +0 -1
- package/dist/gs/reflect/makefunc.gs.d.ts +0 -34
- package/dist/gs/reflect/makefunc.gs.js +0 -288
- package/dist/gs/reflect/makefunc.gs.js.map +0 -1
- package/dist/gs/reflect/map_swiss.gs.d.ts +0 -14
- package/dist/gs/reflect/map_swiss.gs.js +0 -70
- package/dist/gs/reflect/map_swiss.gs.js.map +0 -1
- package/dist/gs/reflect/reflect.gs.d.ts +0 -132
- package/dist/gs/reflect/reflect.gs.js +0 -437
- package/dist/gs/reflect/reflect.gs.js.map +0 -1
- package/dist/gs/reflect/swapper.gs.d.ts +0 -1
- package/dist/gs/reflect/swapper.gs.js +0 -32
- package/dist/gs/reflect/swapper.gs.js.map +0 -1
- package/dist/gs/reflect/type.gs.d.ts +0 -4
- package/dist/gs/reflect/type.gs.js +0 -21
- package/dist/gs/reflect/type.gs.js.map +0 -1
- package/dist/gs/reflect/value.gs.d.ts +0 -4
- package/dist/gs/reflect/value.gs.js +0 -12
- package/dist/gs/reflect/value.gs.js.map +0 -1
- package/dist/gs/reflect/visiblefields.gs.d.ts +0 -3
- package/dist/gs/reflect/visiblefields.gs.js +0 -123
- package/dist/gs/reflect/visiblefields.gs.js.map +0 -1
- package/dist/gs/stringslite/index.d.ts +0 -1
- package/dist/gs/stringslite/index.js +0 -2
- package/dist/gs/stringslite/index.js.map +0 -1
- package/dist/gs/stringslite/strings.d.ts +0 -11
- package/dist/gs/stringslite/strings.js +0 -67
- package/dist/gs/stringslite/strings.js.map +0 -1
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
// Pattern matching functions for filepath
|
|
2
|
+
export const ErrBadPattern = new Error('syntax error in pattern');
|
|
3
|
+
// Match reports whether name matches the shell file name pattern.
|
|
4
|
+
// The pattern syntax is:
|
|
5
|
+
//
|
|
6
|
+
// pattern:
|
|
7
|
+
// { term }
|
|
8
|
+
// term:
|
|
9
|
+
// '*' matches any sequence of non-Separator characters
|
|
10
|
+
// '?' matches any single non-Separator character
|
|
11
|
+
// '[' [ '^' ] { character-range } ']'
|
|
12
|
+
// character class (must be non-empty)
|
|
13
|
+
// c matches character c (c != '*', '?', '\\', '[')
|
|
14
|
+
// '\\' c matches character c
|
|
15
|
+
//
|
|
16
|
+
// character-range:
|
|
17
|
+
// c matches character c (c != '\\', '-', ']')
|
|
18
|
+
// '\\' c matches character c
|
|
19
|
+
// lo '-' hi matches character c for lo <= c <= hi
|
|
20
|
+
//
|
|
21
|
+
// Match requires pattern to match all of name, not just a substring.
|
|
22
|
+
// The only possible returned error is ErrBadPattern, when pattern
|
|
23
|
+
// is malformed.
|
|
24
|
+
export function Match(pattern, name) {
|
|
25
|
+
try {
|
|
26
|
+
// Validate pattern first
|
|
27
|
+
validatePattern(pattern);
|
|
28
|
+
return [matchPattern(pattern, name), null];
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
return [false, ErrBadPattern];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function validatePattern(pattern) {
|
|
36
|
+
let i = 0;
|
|
37
|
+
while (i < pattern.length) {
|
|
38
|
+
const char = pattern[i];
|
|
39
|
+
switch (char) {
|
|
40
|
+
case '\\':
|
|
41
|
+
// Must be followed by another character
|
|
42
|
+
i++;
|
|
43
|
+
if (i >= pattern.length) {
|
|
44
|
+
throw new Error('bad pattern');
|
|
45
|
+
}
|
|
46
|
+
i++;
|
|
47
|
+
break;
|
|
48
|
+
case '[': {
|
|
49
|
+
// Must have a properly closed character class
|
|
50
|
+
i++;
|
|
51
|
+
let foundContent = false;
|
|
52
|
+
let foundClose = false;
|
|
53
|
+
// Skip negation
|
|
54
|
+
if (i < pattern.length && pattern[i] === '^') {
|
|
55
|
+
i++;
|
|
56
|
+
}
|
|
57
|
+
while (i < pattern.length) {
|
|
58
|
+
if (pattern[i] === ']') {
|
|
59
|
+
foundClose = true;
|
|
60
|
+
i++;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
foundContent = true;
|
|
64
|
+
if (pattern[i] === '\\') {
|
|
65
|
+
i++; // Skip escape character
|
|
66
|
+
if (i >= pattern.length) {
|
|
67
|
+
throw new Error('bad pattern');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
i++;
|
|
71
|
+
}
|
|
72
|
+
if (!foundClose || !foundContent) {
|
|
73
|
+
throw new Error('bad pattern');
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
default:
|
|
78
|
+
i++;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function matchPattern(pattern, name) {
|
|
84
|
+
let patternIndex = 0;
|
|
85
|
+
let nameIndex = 0;
|
|
86
|
+
while (patternIndex < pattern.length && nameIndex < name.length) {
|
|
87
|
+
const p = pattern[patternIndex];
|
|
88
|
+
switch (p) {
|
|
89
|
+
case '*':
|
|
90
|
+
// Handle star - match any sequence of characters
|
|
91
|
+
patternIndex++;
|
|
92
|
+
if (patternIndex >= pattern.length) {
|
|
93
|
+
// Pattern ends with *, matches rest of name
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
// Try to match the rest of the pattern with remaining name
|
|
97
|
+
for (let i = nameIndex; i <= name.length; i++) {
|
|
98
|
+
if (matchPattern(pattern.substring(patternIndex), name.substring(i))) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
case '?':
|
|
104
|
+
// Match any single character except separator
|
|
105
|
+
if (name[nameIndex] === '/') {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
patternIndex++;
|
|
109
|
+
nameIndex++;
|
|
110
|
+
break;
|
|
111
|
+
case '[': {
|
|
112
|
+
// Character class
|
|
113
|
+
const [matched, newPatternIndex] = matchCharClass(pattern, patternIndex, name[nameIndex]);
|
|
114
|
+
if (!matched) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
patternIndex = newPatternIndex;
|
|
118
|
+
nameIndex++;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case '\\':
|
|
122
|
+
// Escaped character (pattern already validated)
|
|
123
|
+
patternIndex++;
|
|
124
|
+
if (pattern[patternIndex] !== name[nameIndex]) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
patternIndex++;
|
|
128
|
+
nameIndex++;
|
|
129
|
+
break;
|
|
130
|
+
default:
|
|
131
|
+
// Literal character
|
|
132
|
+
if (p !== name[nameIndex]) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
patternIndex++;
|
|
136
|
+
nameIndex++;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Handle any remaining stars in pattern
|
|
141
|
+
while (patternIndex < pattern.length && pattern[patternIndex] === '*') {
|
|
142
|
+
patternIndex++;
|
|
143
|
+
}
|
|
144
|
+
// Both pattern and name should be fully consumed
|
|
145
|
+
return patternIndex >= pattern.length && nameIndex >= name.length;
|
|
146
|
+
}
|
|
147
|
+
function matchCharClass(pattern, start, char) {
|
|
148
|
+
let index = start + 1;
|
|
149
|
+
let negated = false;
|
|
150
|
+
// Check for negation
|
|
151
|
+
if (index < pattern.length && pattern[index] === '^') {
|
|
152
|
+
negated = true;
|
|
153
|
+
index++;
|
|
154
|
+
}
|
|
155
|
+
let matched = false;
|
|
156
|
+
while (index < pattern.length) {
|
|
157
|
+
if (pattern[index] === ']') {
|
|
158
|
+
index++;
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
if (pattern[index] === '\\') {
|
|
162
|
+
// Escaped character
|
|
163
|
+
index++;
|
|
164
|
+
if (pattern[index] === char) {
|
|
165
|
+
matched = true;
|
|
166
|
+
}
|
|
167
|
+
index++;
|
|
168
|
+
}
|
|
169
|
+
else if (index + 2 < pattern.length &&
|
|
170
|
+
pattern[index + 1] === '-' &&
|
|
171
|
+
pattern[index + 2] !== ']') {
|
|
172
|
+
// Character range
|
|
173
|
+
const lo = pattern[index];
|
|
174
|
+
const hi = pattern[index + 2];
|
|
175
|
+
if (char >= lo && char <= hi) {
|
|
176
|
+
matched = true;
|
|
177
|
+
}
|
|
178
|
+
index += 3;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Single character
|
|
182
|
+
if (pattern[index] === char) {
|
|
183
|
+
matched = true;
|
|
184
|
+
}
|
|
185
|
+
index++;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (negated) {
|
|
189
|
+
matched = !matched;
|
|
190
|
+
}
|
|
191
|
+
return [matched, index];
|
|
192
|
+
}
|
|
193
|
+
// Glob returns the names of all files matching pattern or null
|
|
194
|
+
// if there is no matching file. The syntax of patterns is the same
|
|
195
|
+
// as in Match. The pattern may describe hierarchical names such as
|
|
196
|
+
// /usr/*/bin/ed (assuming the Separator is '/').
|
|
197
|
+
//
|
|
198
|
+
// Glob ignores file system errors such as I/O errors reading directories.
|
|
199
|
+
// The only possible returned error is ErrBadPattern, when pattern is malformed.
|
|
200
|
+
export function Glob(pattern) {
|
|
201
|
+
try {
|
|
202
|
+
// Validate the pattern using the same logic as Match
|
|
203
|
+
validatePattern(pattern);
|
|
204
|
+
// We don't have filesystem access, so return empty array
|
|
205
|
+
return [[], null];
|
|
206
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
return [[], ErrBadPattern];
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=match.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match.js","sourceRoot":"","sources":["../../../../gs/path/filepath/match.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const Separator = "/";
|
|
2
|
+
export declare const ListSeparator = ":";
|
|
3
|
+
export declare const SkipDir: Error;
|
|
4
|
+
export declare const SkipAll: Error;
|
|
5
|
+
export declare function Base(path: string): string;
|
|
6
|
+
export declare function Dir(path: string): string;
|
|
7
|
+
export declare function Ext(path: string): string;
|
|
8
|
+
export declare function Clean(path: string): string;
|
|
9
|
+
export declare function Join(...elem: string[]): string;
|
|
10
|
+
export declare function Split(path: string): [string, string];
|
|
11
|
+
export declare function IsAbs(path: string): boolean;
|
|
12
|
+
export declare function ToSlash(path: string): string;
|
|
13
|
+
export declare function FromSlash(path: string): string;
|
|
14
|
+
export declare function VolumeName(_path: string): string;
|
|
15
|
+
export declare function IsLocal(path: string): boolean;
|
|
16
|
+
export declare function SplitList(path: string): string[];
|
|
17
|
+
export declare function HasPrefix(p: string, prefix: string): boolean;
|
|
18
|
+
export declare function Abs(path: string): [string, Error | null];
|
|
19
|
+
export declare function Rel(basepath: string, targpath: string): [string, Error | null];
|
|
20
|
+
export declare function EvalSymlinks(path: string): [string, Error | null];
|
|
21
|
+
export declare function Glob(_pattern: string): [string[], Error | null];
|
|
22
|
+
export type WalkFunc = (path: string, info: any, err: Error | null) => Error | null;
|
|
23
|
+
export declare function Walk(root: string, walkFn: WalkFunc): Error | null;
|
|
24
|
+
export declare function WalkDir(_root: string, _walkFn: any): Error | null;
|
|
25
|
+
export declare function Localize(path: string): [string, Error | null];
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
// Package filepath implements utility routines for manipulating filename paths
|
|
2
|
+
// in a way compatible with the target operating system-defined file paths.
|
|
3
|
+
// Path separator constants
|
|
4
|
+
export const Separator = '/';
|
|
5
|
+
export const ListSeparator = ':';
|
|
6
|
+
// Error constants
|
|
7
|
+
export const SkipDir = new Error('skip this directory');
|
|
8
|
+
export const SkipAll = new Error('skip everything and stop the walk');
|
|
9
|
+
// Base returns the last element of path.
|
|
10
|
+
// Trailing path separators are removed before extracting the last element.
|
|
11
|
+
// If the path is empty, Base returns ".".
|
|
12
|
+
// If the path consists entirely of separators, Base returns a single separator.
|
|
13
|
+
export function Base(path) {
|
|
14
|
+
if (path === '') {
|
|
15
|
+
return '.';
|
|
16
|
+
}
|
|
17
|
+
// Strip trailing slashes
|
|
18
|
+
path = path.replace(/\/+$/, '');
|
|
19
|
+
if (path === '') {
|
|
20
|
+
return '/';
|
|
21
|
+
}
|
|
22
|
+
// Find the last slash
|
|
23
|
+
const i = path.lastIndexOf('/');
|
|
24
|
+
if (i >= 0) {
|
|
25
|
+
return path.substring(i + 1);
|
|
26
|
+
}
|
|
27
|
+
return path;
|
|
28
|
+
}
|
|
29
|
+
// Dir returns all but the last element of path, typically the path's directory.
|
|
30
|
+
// After dropping the final element, Dir calls Clean on the path and trailing
|
|
31
|
+
// slashes are removed. If the path is empty, Dir returns ".".
|
|
32
|
+
// If the path consists entirely of separators, Dir returns a single separator.
|
|
33
|
+
export function Dir(path) {
|
|
34
|
+
if (path === '') {
|
|
35
|
+
return '.';
|
|
36
|
+
}
|
|
37
|
+
// Strip trailing slashes
|
|
38
|
+
path = path.replace(/\/+$/, '');
|
|
39
|
+
if (path === '') {
|
|
40
|
+
return '/';
|
|
41
|
+
}
|
|
42
|
+
// Find the last slash
|
|
43
|
+
const i = path.lastIndexOf('/');
|
|
44
|
+
if (i >= 0) {
|
|
45
|
+
const dir = path.substring(0, i);
|
|
46
|
+
return Clean(dir === '' ? '/' : dir);
|
|
47
|
+
}
|
|
48
|
+
return '.';
|
|
49
|
+
}
|
|
50
|
+
// Ext returns the file name extension used by path.
|
|
51
|
+
// The extension is the suffix beginning at the final dot
|
|
52
|
+
// in the final element of path; it is empty if there is no dot.
|
|
53
|
+
export function Ext(path) {
|
|
54
|
+
const base = Base(path);
|
|
55
|
+
// Handle special case: if the base starts with a dot and has no other dots,
|
|
56
|
+
// it's a hidden file with no extension
|
|
57
|
+
if (base.startsWith('.') && base.indexOf('.', 1) === -1) {
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
const i = base.lastIndexOf('.');
|
|
61
|
+
if (i >= 0) {
|
|
62
|
+
return base.substring(i);
|
|
63
|
+
}
|
|
64
|
+
return '';
|
|
65
|
+
}
|
|
66
|
+
// Clean returns the shortest path name equivalent to path
|
|
67
|
+
// by purely lexical processing.
|
|
68
|
+
export function Clean(path) {
|
|
69
|
+
if (path === '') {
|
|
70
|
+
return '.';
|
|
71
|
+
}
|
|
72
|
+
const isAbs = path.startsWith('/');
|
|
73
|
+
const segments = path
|
|
74
|
+
.split('/')
|
|
75
|
+
.filter((segment) => segment !== '' && segment !== '.');
|
|
76
|
+
const result = [];
|
|
77
|
+
for (const segment of segments) {
|
|
78
|
+
if (segment === '..') {
|
|
79
|
+
if (result.length > 0 && result[result.length - 1] !== '..') {
|
|
80
|
+
result.pop();
|
|
81
|
+
}
|
|
82
|
+
else if (!isAbs) {
|
|
83
|
+
result.push('..');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
result.push(segment);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
let cleaned = result.join('/');
|
|
91
|
+
if (isAbs) {
|
|
92
|
+
cleaned = '/' + cleaned;
|
|
93
|
+
}
|
|
94
|
+
return (cleaned === '' ?
|
|
95
|
+
isAbs ? '/'
|
|
96
|
+
: '.'
|
|
97
|
+
: cleaned);
|
|
98
|
+
}
|
|
99
|
+
// Join joins any number of path elements into a single path,
|
|
100
|
+
// separating them with an OS specific Separator. Empty elements
|
|
101
|
+
// are ignored. The result is Cleaned. However, if the argument
|
|
102
|
+
// list is empty or all its elements are empty, Join returns
|
|
103
|
+
// an empty string.
|
|
104
|
+
export function Join(...elem) {
|
|
105
|
+
if (elem.length === 0) {
|
|
106
|
+
return '';
|
|
107
|
+
}
|
|
108
|
+
// Filter out empty elements but handle absolute paths
|
|
109
|
+
const parts = [];
|
|
110
|
+
for (const e of elem) {
|
|
111
|
+
if (e === '') {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// If this element is absolute, start over from here
|
|
115
|
+
if (IsAbs(e)) {
|
|
116
|
+
parts.length = 0; // Clear previous parts
|
|
117
|
+
parts.push(e);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
parts.push(e);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (parts.length === 0) {
|
|
124
|
+
return '';
|
|
125
|
+
}
|
|
126
|
+
return Clean(parts.join('/'));
|
|
127
|
+
}
|
|
128
|
+
// Split splits path immediately following the final Separator,
|
|
129
|
+
// separating it into a directory and file name component.
|
|
130
|
+
// If there is no Separator in path, Split returns an empty dir
|
|
131
|
+
// and file set to path. The returned values have the property
|
|
132
|
+
// that path = dir+file.
|
|
133
|
+
export function Split(path) {
|
|
134
|
+
const i = path.lastIndexOf('/');
|
|
135
|
+
if (i < 0) {
|
|
136
|
+
return ['', path];
|
|
137
|
+
}
|
|
138
|
+
return [path.substring(0, i + 1), path.substring(i + 1)];
|
|
139
|
+
}
|
|
140
|
+
// IsAbs reports whether the path is absolute.
|
|
141
|
+
export function IsAbs(path) {
|
|
142
|
+
return path.startsWith('/');
|
|
143
|
+
}
|
|
144
|
+
// ToSlash returns the result of replacing each separator character
|
|
145
|
+
// in path with a slash ('/') character. Multiple separators are
|
|
146
|
+
// replaced by multiple slashes.
|
|
147
|
+
export function ToSlash(path) {
|
|
148
|
+
// On Unix-like systems (including our JS environment), the separator is already '/'
|
|
149
|
+
// so backslashes are just regular characters and should not be converted
|
|
150
|
+
// This matches Go's behavior on Unix systems
|
|
151
|
+
return path;
|
|
152
|
+
}
|
|
153
|
+
// FromSlash returns the result of replacing each slash ('/') character
|
|
154
|
+
// in path with a separator character. Multiple slashes are replaced
|
|
155
|
+
// by multiple separators.
|
|
156
|
+
export function FromSlash(path) {
|
|
157
|
+
// On Unix-like systems (including our JS environment), separator is '/'
|
|
158
|
+
// so no conversion needed
|
|
159
|
+
return path;
|
|
160
|
+
}
|
|
161
|
+
// VolumeName returns leading volume name.
|
|
162
|
+
// Given "C:\foo\bar" it returns "C:" on Windows.
|
|
163
|
+
// Given "\\host\share\foo" it returns "\\host\share".
|
|
164
|
+
// On other systems, it returns "".
|
|
165
|
+
export function VolumeName(_path) {
|
|
166
|
+
// In our JS environment, we don't have volume names
|
|
167
|
+
return '';
|
|
168
|
+
}
|
|
169
|
+
// IsLocal reports whether path, using lexical analysis only,
|
|
170
|
+
// has all of these properties:
|
|
171
|
+
// - is within the subtree rooted at the directory in which path is evaluated
|
|
172
|
+
// - is not an absolute path
|
|
173
|
+
// - is not empty
|
|
174
|
+
// - on Windows, is not a reserved name such as "NUL"
|
|
175
|
+
export function IsLocal(path) {
|
|
176
|
+
if (path === '' || IsAbs(path)) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
// Check for .. components that would escape
|
|
180
|
+
const segments = path.split('/');
|
|
181
|
+
let depth = 0;
|
|
182
|
+
for (const segment of segments) {
|
|
183
|
+
if (segment === '..') {
|
|
184
|
+
depth--;
|
|
185
|
+
if (depth < 0) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else if (segment !== '.' && segment !== '') {
|
|
190
|
+
depth++;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
// SplitList splits a list of paths joined by the OS-specific ListSeparator,
|
|
196
|
+
// usually found in PATH or GOPATH environment variables.
|
|
197
|
+
// Unlike strings.Split, SplitList returns an empty slice when passed an empty string.
|
|
198
|
+
export function SplitList(path) {
|
|
199
|
+
if (path === '') {
|
|
200
|
+
return [];
|
|
201
|
+
}
|
|
202
|
+
return path.split(ListSeparator);
|
|
203
|
+
}
|
|
204
|
+
// HasPrefix tests whether the path p begins with prefix.
|
|
205
|
+
export function HasPrefix(p, prefix) {
|
|
206
|
+
if (prefix === '') {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
// Normalize both paths
|
|
210
|
+
const normalP = Clean(p);
|
|
211
|
+
const normalPrefix = Clean(prefix);
|
|
212
|
+
if (normalP === normalPrefix) {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
// Check if p starts with prefix followed by a separator
|
|
216
|
+
if (normalP.startsWith(normalPrefix)) {
|
|
217
|
+
const remaining = normalP.substring(normalPrefix.length);
|
|
218
|
+
return remaining.startsWith('/');
|
|
219
|
+
}
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
// Stubs for functions that require filesystem operations
|
|
223
|
+
// These are simplified implementations for compatibility
|
|
224
|
+
export function Abs(path) {
|
|
225
|
+
if (IsAbs(path)) {
|
|
226
|
+
return [Clean(path), null];
|
|
227
|
+
}
|
|
228
|
+
// In a real implementation, this would resolve relative to current working directory
|
|
229
|
+
// For our purposes, we'll just prepend a fake absolute path
|
|
230
|
+
return ['/' + Clean(path), null];
|
|
231
|
+
}
|
|
232
|
+
export function Rel(basepath, targpath) {
|
|
233
|
+
// Simplified implementation - in reality this is much more complex
|
|
234
|
+
const base = Clean(basepath);
|
|
235
|
+
const targ = Clean(targpath);
|
|
236
|
+
if (base === targ) {
|
|
237
|
+
return ['.', null];
|
|
238
|
+
}
|
|
239
|
+
// Very basic relative path calculation
|
|
240
|
+
if (targ.startsWith(base + '/')) {
|
|
241
|
+
return [targ.substring(base.length + 1), null];
|
|
242
|
+
}
|
|
243
|
+
return [targ, null];
|
|
244
|
+
}
|
|
245
|
+
export function EvalSymlinks(path) {
|
|
246
|
+
// No filesystem support, just return the cleaned path
|
|
247
|
+
return [Clean(path), null];
|
|
248
|
+
}
|
|
249
|
+
export function Glob(_pattern) {
|
|
250
|
+
// No filesystem support, return empty array
|
|
251
|
+
return [[], null];
|
|
252
|
+
}
|
|
253
|
+
export function Walk(root, walkFn) {
|
|
254
|
+
// No filesystem support, just call the function with the root
|
|
255
|
+
return walkFn(root, null, new Error('filesystem not supported'));
|
|
256
|
+
}
|
|
257
|
+
export function WalkDir(_root, _walkFn) {
|
|
258
|
+
// No filesystem support
|
|
259
|
+
return new Error('filesystem not supported');
|
|
260
|
+
}
|
|
261
|
+
// Localize is a stub - in Go it's used for Windows path localization
|
|
262
|
+
export function Localize(path) {
|
|
263
|
+
return [path, null];
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../../../gs/path/filepath/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { ReflectValue } from './types.js';
|
|
2
|
+
export declare function DeepEqual(x: ReflectValue | null | undefined, y: ReflectValue | null | undefined): boolean;
|
|
@@ -1,54 +1,3 @@
|
|
|
1
|
-
// DeepEqual reports whether x and y are "deeply equal," defined as follows.
|
|
2
|
-
// Two values of identical type are deeply equal if one of the following cases applies.
|
|
3
|
-
// Values of distinct types are never deeply equal.
|
|
4
|
-
//
|
|
5
|
-
// Array values are deeply equal when their corresponding elements are deeply equal.
|
|
6
|
-
//
|
|
7
|
-
// Struct values are deeply equal if their corresponding fields,
|
|
8
|
-
// both exported and unexported, are deeply equal.
|
|
9
|
-
//
|
|
10
|
-
// Func values are deeply equal if both are nil; otherwise they are not deeply equal.
|
|
11
|
-
//
|
|
12
|
-
// Interface values are deeply equal if they hold deeply equal concrete values.
|
|
13
|
-
//
|
|
14
|
-
// Map values are deeply equal when all of the following are true:
|
|
15
|
-
// they are both nil or both non-nil, they have the same length,
|
|
16
|
-
// and either they are the same map object or their corresponding keys
|
|
17
|
-
// (matched using Go equality) map to deeply equal values.
|
|
18
|
-
//
|
|
19
|
-
// Pointer values are deeply equal if they are equal using Go's == operator
|
|
20
|
-
// or if they point to deeply equal values.
|
|
21
|
-
//
|
|
22
|
-
// Slice values are deeply equal when all of the following are true:
|
|
23
|
-
// they are both nil or both non-nil, they have the same length,
|
|
24
|
-
// and either they point to the same initial entry of the same underlying array
|
|
25
|
-
// (that is, &x[0] == &y[0]) or their corresponding elements (up to length) are deeply equal.
|
|
26
|
-
// Note that a non-nil empty slice and a nil slice (for example, []byte{} and []byte(nil))
|
|
27
|
-
// are not deeply equal.
|
|
28
|
-
//
|
|
29
|
-
// Other values - numbers, bools, strings, and channels - are deeply equal
|
|
30
|
-
// if they are equal using Go's == operator.
|
|
31
|
-
//
|
|
32
|
-
// In general DeepEqual is a recursive relaxation of Go's == operator.
|
|
33
|
-
// However, this idea is impossible to implement without some inconsistency.
|
|
34
|
-
// Specifically, it is possible for a value to be unequal to itself,
|
|
35
|
-
// either because it is of func type (uncomparable in general)
|
|
36
|
-
// or because it is a floating-point NaN value (not equal to itself in floating-point comparison),
|
|
37
|
-
// or because it is an array, struct, or interface containing
|
|
38
|
-
// such a value.
|
|
39
|
-
// On the other hand, pointer values are always equal to themselves,
|
|
40
|
-
// even if they point at or contain such problematic values,
|
|
41
|
-
// because they compare equal using Go's == operator, and that
|
|
42
|
-
// is a sufficient condition to be deeply equal, regardless of content.
|
|
43
|
-
// DeepEqual has been defined so that the same short-cut applies
|
|
44
|
-
// to slices and maps: if x and y are the same slice or the same map,
|
|
45
|
-
// they are deeply equal regardless of content.
|
|
46
|
-
//
|
|
47
|
-
// As DeepEqual traverses the data values it may find a cycle. The
|
|
48
|
-
// second and subsequent times that DeepEqual compares two pointer
|
|
49
|
-
// values that have been compared before, it treats the values as
|
|
50
|
-
// equal rather than examining the values to which they point.
|
|
51
|
-
// This ensures that DeepEqual terminates.
|
|
52
1
|
export function DeepEqual(x, y) {
|
|
53
2
|
// Handle null/undefined cases
|
|
54
3
|
if (x === y) {
|
|
@@ -113,7 +62,8 @@ export function DeepEqual(x, y) {
|
|
|
113
62
|
return false;
|
|
114
63
|
}
|
|
115
64
|
for (const [key, value] of x) {
|
|
116
|
-
if (!y.has(key) ||
|
|
65
|
+
if (!y.has(key) ||
|
|
66
|
+
!DeepEqual(value, y.get(key))) {
|
|
117
67
|
return false;
|
|
118
68
|
}
|
|
119
69
|
}
|
|
@@ -127,7 +77,9 @@ export function DeepEqual(x, y) {
|
|
|
127
77
|
return false;
|
|
128
78
|
}
|
|
129
79
|
for (const key of keysX) {
|
|
130
|
-
|
|
80
|
+
const xObj = x;
|
|
81
|
+
const yObj = y;
|
|
82
|
+
if (!keysY.includes(key) || !DeepEqual(xObj[key], yObj[key])) {
|
|
131
83
|
return false;
|
|
132
84
|
}
|
|
133
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepequal.js","sourceRoot":"","sources":["../../../gs/reflect/deepequal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deepequal.js","sourceRoot":"","sources":["../../../gs/reflect/deepequal.ts"],"names":[],"mappings":"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"}
|
package/dist/gs/reflect/map.d.ts
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import { Type, Value } from './type.js';
|
|
2
2
|
export declare function MapOf(key: Type, elem: Type): Type;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
/**
|
|
4
|
+
* MapIter provides an iterator interface for Go maps.
|
|
5
|
+
* It wraps a JavaScript Map iterator and provides methods to iterate over key-value pairs.
|
|
6
|
+
* @template K - The type of keys in the map
|
|
7
|
+
* @template V - The type of values in the map
|
|
8
|
+
*/
|
|
9
|
+
export declare class MapIter<K = unknown, V = unknown> {
|
|
10
|
+
map: Map<K, V>;
|
|
11
|
+
iterator: Iterator<[K, V]>;
|
|
12
|
+
current: IteratorResult<[K, V]> | null;
|
|
13
|
+
constructor(map: Map<K, V>);
|
|
8
14
|
Next(): boolean;
|
|
9
|
-
Key():
|
|
10
|
-
Value():
|
|
11
|
-
Reset(m:
|
|
15
|
+
Key(): K | null;
|
|
16
|
+
Value(): V | null;
|
|
17
|
+
Reset(m: Map<K, V>): void;
|
|
12
18
|
}
|
|
13
19
|
export declare function MakeMap(typ: Type): Value;
|
|
14
20
|
export declare function MakeMapWithSize(typ: Type, _n: number): Value;
|