@melra/file-runtime 0.3.0-alpha.13 → 0.3.0-alpha.15
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/dist/index.d.ts +29 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +269 -48
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -12,14 +12,23 @@ export interface FileRuntimeOptions {
|
|
|
12
12
|
* directory still reaches the same refusal.
|
|
13
13
|
*/
|
|
14
14
|
reserved?: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Directories inside a reserved one whose contents may still be read
|
|
17
|
+
* (`isReserved` with `reading`), recognised the same way: MELRA's artifacts.
|
|
18
|
+
* Nothing may change them, or the directory itself.
|
|
19
|
+
*/
|
|
20
|
+
readable?: string[];
|
|
15
21
|
}
|
|
16
22
|
export declare class FileRuntime {
|
|
17
23
|
readonly root: string;
|
|
18
24
|
readonly maxFileBytes: number;
|
|
19
25
|
readonly maxEntries: number;
|
|
26
|
+
private readonly lexicalRoot;
|
|
20
27
|
private readonly reserved;
|
|
28
|
+
private readonly readable;
|
|
21
29
|
private constructor();
|
|
22
30
|
static create(options: FileRuntimeOptions): Promise<FileRuntime>;
|
|
31
|
+
private inputPath;
|
|
23
32
|
/**
|
|
24
33
|
* `creating` refuses a path that is, or is inside, a git directory: a
|
|
25
34
|
* repository's config, attributes and hooks name programs git runs while
|
|
@@ -31,9 +40,26 @@ export declare class FileRuntime {
|
|
|
31
40
|
* ponytail: by name, so an NTFS stream spelling of `.git` is not caught; the
|
|
32
41
|
* reserved-file check has the same Windows follow-up.
|
|
33
42
|
*/
|
|
34
|
-
resolvePath(input: string, allowRoot?: boolean, creating?: boolean): Promise<string>;
|
|
35
|
-
/**
|
|
36
|
-
|
|
43
|
+
resolvePath(input: string, allowRoot?: boolean, creating?: boolean, changing?: boolean): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* Whether `path` is one of `entries`: by a case-insensitive name and the
|
|
46
|
+
* identity of the directory holding it. On a case-sensitive filesystem a
|
|
47
|
+
* sibling whose name differs from an entry only in case, such as a twin of
|
|
48
|
+
* the data directory, is matched too; that refuses more, never less.
|
|
49
|
+
*/
|
|
50
|
+
private named;
|
|
51
|
+
/**
|
|
52
|
+
* Whether `path` is, or is inside, one of the reserved entries. `reading`
|
|
53
|
+
* says nothing will change it, so the contents of a readable directory are
|
|
54
|
+
* judged only below that directory, where a link to reserved data is still
|
|
55
|
+
* refused. Judged as spelled and again with the part that exists resolved
|
|
56
|
+
* through links: a link may lead below a reserved directory, where neither
|
|
57
|
+
* the names nor the identities compared here would recognise the path. A
|
|
58
|
+
* link whose target does not exist is followed too, so a link to a missing
|
|
59
|
+
* reserved name is refused like one to a present name.
|
|
60
|
+
*/
|
|
61
|
+
isReserved(path: string, reading?: boolean): Promise<boolean>;
|
|
62
|
+
private reservedAsSpelled;
|
|
37
63
|
/** Whether `path` is a directory holding a reserved entry at any depth: a recursive reader given it reaches them unnamed. */
|
|
38
64
|
holdsReserved(path: string): Promise<boolean>;
|
|
39
65
|
execute(operation: FileOperation): Promise<Record<string, unknown>>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAqID,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAEpC,OAAO;WASM,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;IAatE,OAAO,CAAC,SAAS;IAQjB;;;;;;;;;;OAUG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,UAAQ,EAAE,QAAQ,UAAQ,EAAE,QAAQ,UAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IA0C3G;;;;;OAKG;YACW,KAAK;IASnB;;;;;;;;;OASG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;YAwCnD,iBAAiB;IAwC/B,6HAA6H;IACvH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0B7C,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAoJ1E"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright 2026 XAGI Labs Private Limited
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { createHash,
|
|
4
|
-
import { lstat, mkdir, readFile, readdir, realpath, rename, rm, stat,
|
|
3
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
4
|
+
import { lstat, mkdir, open, readFile, readdir, readlink, realpath, rename, rm, stat, } from "node:fs/promises";
|
|
5
5
|
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
6
6
|
function inside(root, candidate) {
|
|
7
7
|
const rel = relative(root, candidate);
|
|
@@ -35,14 +35,118 @@ async function sameEntry(left, right) {
|
|
|
35
35
|
return false;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
/** `look`, asked once per path for as long as `answers` is kept. */
|
|
39
|
+
function remembered(answers, look) {
|
|
40
|
+
return (at) => {
|
|
41
|
+
const answer = answers.get(at) ?? look(at);
|
|
42
|
+
answers.set(at, answer);
|
|
43
|
+
return answer;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* More links than the kernel follows in one lookup (40 on Linux, 32 on
|
|
48
|
+
* macOS): a path that needs them opens nothing.
|
|
49
|
+
*/
|
|
50
|
+
const MAX_LINKS = 40;
|
|
51
|
+
/**
|
|
52
|
+
* `real`: `path` with the deepest part of it that exists resolved through
|
|
53
|
+
* links, and the rest as written. `next`: when the first part that does not
|
|
54
|
+
* exist is a link, `path` with that link replaced by its target, where the
|
|
55
|
+
* kernel would go on. `resolved` keeps each lookup's answer, or why it failed,
|
|
56
|
+
* for the next spelling of a chain.
|
|
57
|
+
*/
|
|
58
|
+
async function realSpelling(path, resolved = new Map()) {
|
|
59
|
+
const resolveLinks = remembered(resolved, (at) => realpath(at).catch((error) => error));
|
|
60
|
+
const whole = await resolveLinks(path);
|
|
61
|
+
if (typeof whole === "string")
|
|
62
|
+
return { real: whole };
|
|
63
|
+
// A part resolves only if every part above it does, so the deepest one that
|
|
64
|
+
// does is found by halving: about log2(depth) lookups, not one per part.
|
|
65
|
+
// ponytail: each realpath still walks its whole prefix, so 100 arguments 300
|
|
66
|
+
// parts deep cost ~1 s here (12 s at one lookup per part). Memoise resolved
|
|
67
|
+
// prefixes across a call's arguments if that ever shows up.
|
|
68
|
+
const chain = [];
|
|
69
|
+
for (let probe = path;; probe = dirname(probe)) {
|
|
70
|
+
chain.unshift(probe);
|
|
71
|
+
if (dirname(probe) === probe)
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
let real = path;
|
|
75
|
+
let parent;
|
|
76
|
+
let [resolves, fails] = [-1, chain.length - 1];
|
|
77
|
+
while (fails - resolves > 1) {
|
|
78
|
+
const middle = (resolves + fails) >> 1;
|
|
79
|
+
const probe = chain[middle];
|
|
80
|
+
const actual = await resolveLinks(probe);
|
|
81
|
+
if (typeof actual !== "string")
|
|
82
|
+
fails = middle;
|
|
83
|
+
else
|
|
84
|
+
[resolves, real, parent] = [middle, join(actual, relative(probe, path)), actual];
|
|
85
|
+
}
|
|
86
|
+
if (parent === undefined)
|
|
87
|
+
return { real };
|
|
88
|
+
// By its bare name in its resolved directory: a trailing separator would
|
|
89
|
+
// follow the link instead of naming it.
|
|
90
|
+
const link = chain[fails];
|
|
91
|
+
const at = join(parent, basename(link));
|
|
92
|
+
if ((await lstat(at).catch(() => undefined))?.isSymbolicLink() !== true)
|
|
93
|
+
return { real };
|
|
94
|
+
const target = await readlink(at).catch(() => undefined);
|
|
95
|
+
if (target === undefined)
|
|
96
|
+
return { real };
|
|
97
|
+
// Joined as written, not normalised: the kernel takes a `..` in it after
|
|
98
|
+
// following the links before it. ponytail: judged where it leads, not at
|
|
99
|
+
// each part it passes on the way; judge those as the terminal judges its
|
|
100
|
+
// arguments (`climbedFrom`) to answer the same there too.
|
|
101
|
+
const joined = isAbsolute(target) ? target : `${parent}${sep}${target}`;
|
|
102
|
+
const next = `${joined}${path.slice(link.length)}`;
|
|
103
|
+
// Nothing through a part that does not resolve does, so the next spelling
|
|
104
|
+
// need not ask again; each ask follows the rest of the chain. The target of
|
|
105
|
+
// a link to a missing name is missing too; after too many links, one fewer
|
|
106
|
+
// may resolve, so that is asked once.
|
|
107
|
+
const failure = await resolveLinks(link);
|
|
108
|
+
const missing = typeof failure !== "string" && (failure.code === "ENOENT" || failure.code === "ENOTDIR");
|
|
109
|
+
const onward = missing ? failure : await resolveLinks(joined);
|
|
110
|
+
if (typeof onward !== "string") {
|
|
111
|
+
for (let through = next; through.length >= joined.length; through = dirname(through)) {
|
|
112
|
+
resolved.set(through, Promise.resolve(onward));
|
|
113
|
+
if (dirname(through) === through)
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { real, next };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The bytes a write's content stands for. Node's base64 decoder is lenient: it
|
|
121
|
+
* stops at the first padding, skips what is not base64, and decoded two joined
|
|
122
|
+
* chunks as the first, plain text as noise and "!!!!" as nothing, each written
|
|
123
|
+
* as a success. So base64 is checked to be canonical first; line breaks and
|
|
124
|
+
* spaces are allowed, as MIME wraps it.
|
|
125
|
+
*/
|
|
126
|
+
function decodeContent(content, encoding) {
|
|
127
|
+
if (encoding !== "base64")
|
|
128
|
+
return Buffer.from(content, encoding);
|
|
129
|
+
// The URL-safe alphabet too, which Node always decoded the same way.
|
|
130
|
+
const compact = content.replace(/\s+/g, "").replaceAll("-", "+").replaceAll("_", "/");
|
|
131
|
+
const decoded = Buffer.from(compact, "base64");
|
|
132
|
+
const padded = compact.padEnd(Math.ceil(compact.length / 4) * 4, "=");
|
|
133
|
+
if (!/^[A-Za-z0-9+/]*={0,2}$/.test(compact) || decoded.toString("base64") !== padded) {
|
|
134
|
+
throw new Error("file_content_invalid_base64");
|
|
135
|
+
}
|
|
136
|
+
return decoded;
|
|
137
|
+
}
|
|
38
138
|
export class FileRuntime {
|
|
39
139
|
root;
|
|
40
140
|
maxFileBytes;
|
|
41
141
|
maxEntries;
|
|
142
|
+
lexicalRoot;
|
|
42
143
|
reserved;
|
|
144
|
+
readable;
|
|
43
145
|
constructor(options, root) {
|
|
44
146
|
this.root = root;
|
|
147
|
+
this.lexicalRoot = resolve(options.root);
|
|
45
148
|
this.reserved = (options.reserved ?? []).map((path) => resolve(path));
|
|
149
|
+
this.readable = (options.readable ?? []).map((path) => resolve(path));
|
|
46
150
|
this.maxFileBytes = options.maxFileBytes ?? 10 * 1024 * 1024;
|
|
47
151
|
this.maxEntries = options.maxEntries ?? 1_000;
|
|
48
152
|
}
|
|
@@ -56,6 +160,14 @@ export class FileRuntime {
|
|
|
56
160
|
await mkdir(options.root, { recursive: true });
|
|
57
161
|
return new FileRuntime(options, await realpath(options.root));
|
|
58
162
|
}
|
|
163
|
+
inputPath(input) {
|
|
164
|
+
if (!isAbsolute(input))
|
|
165
|
+
return input;
|
|
166
|
+
const candidate = resolve(input);
|
|
167
|
+
return inside(this.lexicalRoot, candidate)
|
|
168
|
+
? resolve(this.root, relative(this.lexicalRoot, candidate))
|
|
169
|
+
: input;
|
|
170
|
+
}
|
|
59
171
|
/**
|
|
60
172
|
* `creating` refuses a path that is, or is inside, a git directory: a
|
|
61
173
|
* repository's config, attributes and hooks name programs git runs while
|
|
@@ -67,7 +179,7 @@ export class FileRuntime {
|
|
|
67
179
|
* ponytail: by name, so an NTFS stream spelling of `.git` is not caught; the
|
|
68
180
|
* reserved-file check has the same Windows follow-up.
|
|
69
181
|
*/
|
|
70
|
-
async resolvePath(input, allowRoot = false, creating = false) {
|
|
182
|
+
async resolvePath(input, allowRoot = false, creating = false, changing = creating) {
|
|
71
183
|
const lexical = resolve(this.root, input);
|
|
72
184
|
// "Is it the root" asked the way `inside` asks "is it within": through
|
|
73
185
|
// `relative`, which ignores case on Windows. A string compare let `..\\WS`
|
|
@@ -75,6 +187,11 @@ export class FileRuntime {
|
|
|
75
187
|
if (!inside(this.root, lexical) || (!allowRoot && relative(this.root, lexical) === "")) {
|
|
76
188
|
throw new Error("path_outside_workspace");
|
|
77
189
|
}
|
|
190
|
+
// Before following links, so every reserved name gets the same answer,
|
|
191
|
+
// wherever a link inside it leads. `isReserved` follows them itself, the
|
|
192
|
+
// same way as below, so the path found there needs no second judgement.
|
|
193
|
+
if (await this.isReserved(lexical, !changing))
|
|
194
|
+
throw new Error("path_reserved");
|
|
78
195
|
let probe = lexical;
|
|
79
196
|
let real = lexical;
|
|
80
197
|
while (true) {
|
|
@@ -96,67 +213,124 @@ export class FileRuntime {
|
|
|
96
213
|
probe = parent;
|
|
97
214
|
}
|
|
98
215
|
}
|
|
99
|
-
|
|
216
|
+
// A directory holding reserved data takes it along when it is moved or
|
|
217
|
+
// removed, so neither may happen to it. Making it again changes nothing,
|
|
218
|
+
// and nothing can be renamed onto it while it holds anything.
|
|
219
|
+
if (changing && !creating && (await this.holdsReserved(real)))
|
|
100
220
|
throw new Error("path_reserved");
|
|
101
221
|
if (creating && relative(this.root, real).split(sep).some((part) => spelling(part) === ".git")) {
|
|
102
222
|
throw new Error("path_git_metadata");
|
|
103
223
|
}
|
|
104
224
|
return lexical;
|
|
105
225
|
}
|
|
106
|
-
/**
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
// Only a matching name costs a stat, so ordinary paths cost nothing.
|
|
119
|
-
if (spelling(basename(entry)) === name && (await sameEntry(dirname(current), dirname(entry)))) {
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (dirname(current) === current)
|
|
124
|
-
break;
|
|
226
|
+
/**
|
|
227
|
+
* Whether `path` is one of `entries`: by a case-insensitive name and the
|
|
228
|
+
* identity of the directory holding it. On a case-sensitive filesystem a
|
|
229
|
+
* sibling whose name differs from an entry only in case, such as a twin of
|
|
230
|
+
* the data directory, is matched too; that refuses more, never less.
|
|
231
|
+
*/
|
|
232
|
+
async named(path, entries) {
|
|
233
|
+
const name = spelling(basename(path));
|
|
234
|
+
for (const entry of entries) {
|
|
235
|
+
// Only a matching name costs a stat, so ordinary paths cost nothing.
|
|
236
|
+
if (spelling(basename(entry)) === name && (await sameEntry(dirname(path), dirname(entry))))
|
|
237
|
+
return true;
|
|
125
238
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Whether `path` is, or is inside, one of the reserved entries. `reading`
|
|
243
|
+
* says nothing will change it, so the contents of a readable directory are
|
|
244
|
+
* judged only below that directory, where a link to reserved data is still
|
|
245
|
+
* refused. Judged as spelled and again with the part that exists resolved
|
|
246
|
+
* through links: a link may lead below a reserved directory, where neither
|
|
247
|
+
* the names nor the identities compared here would recognise the path. A
|
|
248
|
+
* link whose target does not exist is followed too, so a link to a missing
|
|
249
|
+
* reserved name is refused like one to a present name.
|
|
250
|
+
*/
|
|
251
|
+
async isReserved(path, reading = false) {
|
|
252
|
+
const spelled = resolve(path);
|
|
253
|
+
// Each part looked up once per call: the spellings a chain of links
|
|
254
|
+
// passes through share most of their parts.
|
|
255
|
+
const lookup = remembered(new Map(), (at) => stat(at, { bigint: true }).catch(() => undefined));
|
|
256
|
+
const resolved = new Map();
|
|
257
|
+
// The same thing under another name, a hard link: so the target and each
|
|
258
|
+
// directory above it are compared by identity with every reserved entry
|
|
259
|
+
// and every file inside a reserved directory.
|
|
130
260
|
const identities = new Set();
|
|
131
261
|
for (const entry of this.reserved) {
|
|
132
|
-
const
|
|
133
|
-
if (
|
|
262
|
+
const held = await lookup(entry);
|
|
263
|
+
if (held === undefined)
|
|
134
264
|
continue;
|
|
135
|
-
identities.add(identity(
|
|
136
|
-
if (!
|
|
265
|
+
identities.add(identity(held));
|
|
266
|
+
if (!held.isDirectory())
|
|
137
267
|
continue;
|
|
138
268
|
for (const name of await readdir(entry).catch(() => [])) {
|
|
139
|
-
const file = await
|
|
269
|
+
const file = await lookup(join(entry, name));
|
|
140
270
|
if (file !== undefined)
|
|
141
271
|
identities.add(identity(file));
|
|
142
272
|
}
|
|
143
273
|
}
|
|
274
|
+
const judge = (at) => this.reservedAsSpelled(at, reading, identities, lookup);
|
|
275
|
+
if (await judge(spelled))
|
|
276
|
+
return true;
|
|
277
|
+
const seen = new Set();
|
|
278
|
+
for (let next = spelled; next !== undefined && !seen.has(next);) {
|
|
279
|
+
// No lookup follows a chain this long, but the answer would still tell
|
|
280
|
+
// where it ends: refused, whatever is there. ponytail: deleting or moving
|
|
281
|
+
// the link itself is refused too; allowing that needs a chain to a
|
|
282
|
+
// present name refused at the same length first.
|
|
283
|
+
if (seen.size > MAX_LINKS)
|
|
284
|
+
return true;
|
|
285
|
+
seen.add(next);
|
|
286
|
+
const step = await realSpelling(next, resolved);
|
|
287
|
+
if (step.real !== spelled && (await judge(step.real)))
|
|
288
|
+
return true;
|
|
289
|
+
next = step.next;
|
|
290
|
+
}
|
|
291
|
+
// Every spelling on the way judged, or a loop, which opens nothing.
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
async reservedAsSpelled(path, reading, identities, lookup) {
|
|
295
|
+
// A descriptor path names whatever this process has open, MELRA's locked
|
|
296
|
+
// files included, and on macOS realpath leaves it under /dev/fd.
|
|
297
|
+
if (process.platform !== "win32" && inside("/dev/fd", resolve(path)))
|
|
298
|
+
return true;
|
|
299
|
+
// macOS's /.vol/<dev>/<ino> names any file or directory by its inode
|
|
300
|
+
// alone, so below it no name or identity compared here need match.
|
|
301
|
+
if (process.platform === "darwin" && inside("/.vol", resolve(path)))
|
|
302
|
+
return true;
|
|
303
|
+
let above;
|
|
304
|
+
for (let current = resolve(path); reading && above === undefined; current = dirname(current)) {
|
|
305
|
+
if (await this.named(current, this.readable))
|
|
306
|
+
above = current;
|
|
307
|
+
if (dirname(current) === current)
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
// ponytail: one stat per name match, so `payload.key/` repeated 340 times
|
|
311
|
+
// across 100 arguments still costs about 0.9 s. Cache the reserved
|
|
312
|
+
// identities if that ever shows up.
|
|
313
|
+
for (let current = resolve(path); current !== above; current = dirname(current)) {
|
|
314
|
+
if (await this.named(current, this.reserved))
|
|
315
|
+
return true;
|
|
316
|
+
if (dirname(current) === current)
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
144
319
|
if (identities.size === 0)
|
|
145
320
|
return false;
|
|
146
321
|
// Root first, stopping at the first missing directory: nothing below it
|
|
147
322
|
// exists, and a 4 KB argument would otherwise cost thousands of failed stats.
|
|
148
323
|
const chain = [];
|
|
149
|
-
for (let current = resolve(path)
|
|
324
|
+
for (let current = resolve(path); current !== above; current = dirname(current)) {
|
|
150
325
|
chain.unshift(current);
|
|
151
326
|
if (dirname(current) === current)
|
|
152
327
|
break;
|
|
153
328
|
}
|
|
154
329
|
for (const current of chain) {
|
|
155
|
-
const found = await
|
|
330
|
+
const found = await lookup(current);
|
|
156
331
|
if (found !== undefined && identities.has(identity(found)))
|
|
157
332
|
return true;
|
|
158
|
-
|
|
159
|
-
if (found === undefined && dirname(current) !== "/.vol")
|
|
333
|
+
if (found === undefined)
|
|
160
334
|
return false;
|
|
161
335
|
}
|
|
162
336
|
return false;
|
|
@@ -167,8 +341,18 @@ export class FileRuntime {
|
|
|
167
341
|
if (target?.isDirectory() !== true)
|
|
168
342
|
return false;
|
|
169
343
|
for (const holder of new Set(this.reserved.map((entry) => dirname(entry)))) {
|
|
170
|
-
// Lexically and through links, so a holder under a symlinked home is
|
|
171
|
-
|
|
344
|
+
// Lexically and through links, so a holder under a symlinked home is
|
|
345
|
+
// still found, even before the holder itself exists.
|
|
346
|
+
const { real } = await realSpelling(holder);
|
|
347
|
+
// macOS also mounts the data volume whole at /System/Volumes/Data, so a
|
|
348
|
+
// directory there, or above it, holds what a firmlinked directory such as
|
|
349
|
+
// /Users or /private holds, though no `..` from those leads to it. For
|
|
350
|
+
// data on another volume this may count those system directories as
|
|
351
|
+
// holders too, which only refuses more.
|
|
352
|
+
const firmlinked = process.platform === "darwin" ? [join("/System/Volumes/Data", real)] : [];
|
|
353
|
+
// ponytail: a second bind mount of an ancestor placed inside the target
|
|
354
|
+
// is on none of these chains; reading the mount table would find it.
|
|
355
|
+
for (const start of new Set([holder, real, ...firmlinked])) {
|
|
172
356
|
for (let current = start;; current = dirname(current)) {
|
|
173
357
|
const found = await stat(current, { bigint: true }).catch(() => undefined);
|
|
174
358
|
if (found !== undefined && identity(found) === identity(target))
|
|
@@ -181,7 +365,10 @@ export class FileRuntime {
|
|
|
181
365
|
return false;
|
|
182
366
|
}
|
|
183
367
|
async execute(operation) {
|
|
184
|
-
const path = await this.resolvePath(
|
|
368
|
+
const path = await this.resolvePath(this.inputPath(operation.path),
|
|
369
|
+
// The root however it is spelled ("./", its absolute path), not only
|
|
370
|
+
// ".": the others were refused as outside the workspace.
|
|
371
|
+
operation.action === "list", operation.action === "write" || operation.action === "mkdir", !["list", "read", "stat", "hash"].includes(operation.action));
|
|
185
372
|
switch (operation.action) {
|
|
186
373
|
case "list": {
|
|
187
374
|
const entries = await readdir(path, { withFileTypes: true });
|
|
@@ -252,19 +439,53 @@ export class FileRuntime {
|
|
|
252
439
|
case "write": {
|
|
253
440
|
if (operation.content === undefined)
|
|
254
441
|
throw new Error("file_write_requires_content");
|
|
255
|
-
const buffer =
|
|
442
|
+
const buffer = decodeContent(operation.content, operation.encoding);
|
|
256
443
|
if (buffer.byteLength > this.maxFileBytes)
|
|
257
444
|
throw new Error("file_size_limit_exceeded");
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
445
|
+
// A link inside the workspace is written through, as `read` reads
|
|
446
|
+
// through it: renaming onto the link replaced it with a plain file and
|
|
447
|
+
// left its target as it was. A dangling one has no target to check.
|
|
448
|
+
const target = (await lstat(path).catch(() => undefined))?.isSymbolicLink() === true
|
|
449
|
+
? await realpath(path).catch(() => {
|
|
450
|
+
throw new Error("file_write_dangling_symlink");
|
|
451
|
+
})
|
|
452
|
+
: path;
|
|
453
|
+
// Checked again as it is now, not as resolvePath found it: the link may
|
|
454
|
+
// have changed since. The rename below replaces whatever is at the
|
|
455
|
+
// checked target without following it.
|
|
456
|
+
if (target !== path)
|
|
457
|
+
await this.resolvePath(target, false, true);
|
|
458
|
+
await mkdir(dirname(target), { recursive: true });
|
|
459
|
+
// A short name beside it, not one built from it: the target's own name
|
|
460
|
+
// may already be as long as the file system allows.
|
|
461
|
+
const temporary = join(dirname(target), `.melra-${randomBytes(6).toString("hex")}.tmp`);
|
|
462
|
+
// The file it replaces keeps its permissions: a private one stays
|
|
463
|
+
// private and a script stays executable. Written private, then set
|
|
464
|
+
// exactly, past the umask; the setuid, setgid and sticky bits are not
|
|
465
|
+
// carried over. A new file gets the default mode, as before.
|
|
466
|
+
const replaced = await stat(target).catch(() => undefined);
|
|
467
|
+
const kept = replaced?.isFile() === true ? replaced.mode & 0o777 : undefined;
|
|
468
|
+
// Only the exclusive create is outside the cleanup: a name already
|
|
469
|
+
// taken is not ours to remove.
|
|
470
|
+
const handle = await open(temporary, "wx", kept === undefined ? 0o666 : 0o600);
|
|
261
471
|
try {
|
|
262
|
-
|
|
472
|
+
try {
|
|
473
|
+
await handle.writeFile(buffer);
|
|
474
|
+
// Through the descriptor: nothing after the create looks the
|
|
475
|
+
// name up again, so a link put in its place is never followed.
|
|
476
|
+
if (kept !== undefined)
|
|
477
|
+
await handle.chmod(kept);
|
|
478
|
+
}
|
|
479
|
+
finally {
|
|
480
|
+
await handle.close();
|
|
481
|
+
}
|
|
482
|
+
await rename(temporary, target);
|
|
263
483
|
}
|
|
264
484
|
catch (error) {
|
|
265
|
-
// A
|
|
266
|
-
//
|
|
267
|
-
//
|
|
485
|
+
// A write that failed partway (a full disk), or a rename that failed
|
|
486
|
+
// (the target is a directory, or held open on Windows), would
|
|
487
|
+
// otherwise leave the content, secrets and all, beside it in the
|
|
488
|
+
// workspace, one copy per retry.
|
|
268
489
|
await rm(temporary, { force: true });
|
|
269
490
|
throw error;
|
|
270
491
|
}
|
|
@@ -279,7 +500,7 @@ export class FileRuntime {
|
|
|
279
500
|
if (operation.destination === undefined) {
|
|
280
501
|
throw new Error("file_move_requires_destination");
|
|
281
502
|
}
|
|
282
|
-
const destination = await this.resolvePath(operation.destination, false, true);
|
|
503
|
+
const destination = await this.resolvePath(this.inputPath(operation.destination), false, true);
|
|
283
504
|
await mkdir(dirname(destination), { recursive: true });
|
|
284
505
|
await rename(path, destination);
|
|
285
506
|
return {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melra/file-runtime",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
3
|
+
"version": "0.3.0-alpha.15",
|
|
4
4
|
"description": "Workspace-confined file reference effect adapter for the MELRA kernel.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@melra/protocol": "0.3.0-alpha.
|
|
24
|
+
"@melra/protocol": "0.3.0-alpha.15"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "tsc -p tsconfig.json",
|