@pedit/serve 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/dist/bridge.d.ts +36 -2
- package/dist/bridge.js +192 -82
- package/dist/bridge.js.map +1 -1
- package/dist/hono.d.ts +8 -0
- package/dist/hono.js +15 -9
- package/dist/hono.js.map +1 -1
- package/dist/paths.d.ts +15 -0
- package/dist/paths.js +42 -0
- package/dist/paths.js.map +1 -0
- package/dist/resolve.d.ts +7 -2
- package/dist/resolve.js +54 -19
- package/dist/resolve.js.map +1 -1
- package/dist/served.d.ts +13 -4
- package/dist/served.js +114 -48
- package/dist/served.js.map +1 -1
- package/package.json +3 -5
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Run [`pedit serve`](https://github.com/piconic-ai/pedit) for a local app. pedit holds one file's Yjs
|
|
4
4
|
document and writes the file; this package starts it, checks every request, and bridges a browser's
|
|
5
|
-
WebSocket to pedit's
|
|
5
|
+
WebSocket to a stream on pedit's standard input and output. Your page edits the file live, with several pages at once, and
|
|
6
6
|
there is no room, relay or account.
|
|
7
7
|
|
|
8
8
|
Experimental (0.x): the API may change. The package is published with every pedit release and
|
|
@@ -10,8 +10,8 @@ carries the same version number; the pedit it needs is listed below.
|
|
|
10
10
|
|
|
11
11
|
## Requirements
|
|
12
12
|
|
|
13
|
-
- pedit 0.
|
|
14
|
-
- Node 22 or later, on macOS or
|
|
13
|
+
- pedit 0.5.0 or later on the PATH (or pass `bin`). Older ones are refused with a message on how to update.
|
|
14
|
+
- Node 22 or later, on macOS, Linux or Windows. On Windows, pedit stops a child by closing its input and never kills it: a child that does not exit in time is reported as an error event.
|
|
15
15
|
|
|
16
16
|
## Install
|
|
17
17
|
|
|
@@ -68,7 +68,7 @@ const extensions = [yCollab(conn.text, conn.awareness)] // plus basicSetup, Edit
|
|
|
68
68
|
| `peditRoutes(options)` | A Hono app: `POST /:id/session` and the WebSocket `GET /:id/doc`. Has `close()`. |
|
|
69
69
|
| `options.resolve(id, c)` | Maps an id to `{ path, role: 'edit' \| 'read' }`, or `null` for 404. |
|
|
70
70
|
| `options.root`, `origins`, `app` | The served directory, the exact page origins, and a label shown if another process holds the file. |
|
|
71
|
-
| `options.bin`, `idleMs`, `allowRemote`, `onEvent` | Absolute path to pedit; idle stop (default 60 s); accept non-loopback peers (default false); `started`/`stopped`/`error` events. |
|
|
71
|
+
| `options.bin`, `idleMs`, `graceMs`, `allowRemote`, `onEvent` | Absolute path to pedit; idle stop (default 60 s); how long a child may take to exit after its input closed (default 5 s; on Windows it is then given up on, never killed); accept non-loopback peers (default false); `started`/`stopped`/`error` events. |
|
|
72
72
|
|
|
73
73
|
`@pedit/serve/client`
|
|
74
74
|
|
|
@@ -94,10 +94,11 @@ const extensions = [yCollab(conn.text, conn.awareness)] // plus basicSetup, Edit
|
|
|
94
94
|
- A session token is single use and expires in 60 s; it travels in the WebSocket URL, so log no `token`.
|
|
95
95
|
- A `read` role is enforced by pedit itself, not just by the page: updates from a reader close the socket.
|
|
96
96
|
- The browser never sees a path, a pid or a socket name.
|
|
97
|
+
- On Windows, `resolvePedit` cannot check the owner or write access of the pedit binary it finds on the PATH, so a writable PATH directory (such as `C:\tools`) could hold a planted `pedit.exe`. Pass an absolute `bin` that you trust.
|
|
97
98
|
|
|
98
99
|
## Known limits
|
|
99
100
|
|
|
100
|
-
-
|
|
101
|
+
- One id is one file; at most 32 files and 8 clients per file.
|
|
101
102
|
- Awareness (names, cursors) is unauthenticated: any connected page can claim any name.
|
|
102
103
|
- `gone`: pedit's saved state was discarded, so the page's copy cannot merge into the new document.
|
|
103
104
|
The client stops; the app decides whether to offer the text or reload.
|
package/dist/bridge.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import type { Writable } from 'node:stream';
|
|
1
2
|
import type { Role } from './types.ts';
|
|
2
3
|
export declare const MAX_FRAME: number;
|
|
4
|
+
export declare const OPEN = 1;
|
|
5
|
+
export declare const DATA = 2;
|
|
6
|
+
export declare const CLOSE = 3;
|
|
7
|
+
export declare const EVENT = 4;
|
|
3
8
|
export interface Bridge {
|
|
4
9
|
/** page -> pedit. A frame over 16 MiB closes the bridge. */
|
|
5
10
|
send(frame: Uint8Array): void;
|
|
@@ -9,5 +14,34 @@ export interface Bridge {
|
|
|
9
14
|
onclose: ((reason: string, code?: number) => void) | null;
|
|
10
15
|
close(): void;
|
|
11
16
|
}
|
|
12
|
-
|
|
13
|
-
|
|
17
|
+
export interface Frame {
|
|
18
|
+
kind: number;
|
|
19
|
+
stream: number;
|
|
20
|
+
payload: Buffer;
|
|
21
|
+
}
|
|
22
|
+
/** pedit sent something that is not a frame: the child cannot be trusted any more. */
|
|
23
|
+
export declare class FrameError extends Error {
|
|
24
|
+
}
|
|
25
|
+
/** kind (1 byte) | stream (uint32 BE) | length (uint32 BE) | payload */
|
|
26
|
+
export declare function encodeFrame(kind: number, stream: number, payload?: Uint8Array): Buffer;
|
|
27
|
+
/**
|
|
28
|
+
* Splits the child's stdout into frames. On anything that is not a frame it keeps what it parsed
|
|
29
|
+
* before, sets `error`, and parses nothing more.
|
|
30
|
+
*/
|
|
31
|
+
export declare class FrameParser {
|
|
32
|
+
#private;
|
|
33
|
+
/** Set once the stream broke the format; nothing is parsed after it. */
|
|
34
|
+
error: FrameError | undefined;
|
|
35
|
+
push(chunk: Buffer): Frame[];
|
|
36
|
+
}
|
|
37
|
+
/** The streams of one child: ids start at 1 and are never reused. */
|
|
38
|
+
export declare class Streams {
|
|
39
|
+
#private;
|
|
40
|
+
constructor(stdin: Writable);
|
|
41
|
+
/** A data or close frame from pedit. One for a stream already closed here is dropped. */
|
|
42
|
+
deliver(frame: Frame): void;
|
|
43
|
+
/** The child is gone: end every stream. */
|
|
44
|
+
abort(): void;
|
|
45
|
+
/** Open a stream. `onGone` is called once, when it ends. */
|
|
46
|
+
open(role: Role, onGone: () => void): Bridge;
|
|
47
|
+
}
|
package/dist/bridge.js
CHANGED
|
@@ -1,87 +1,197 @@
|
|
|
1
|
-
import { connect } from 'node:net';
|
|
2
|
-
import { WebSocket } from 'ws';
|
|
3
1
|
export const MAX_FRAME = 16 * 1024 * 1024;
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
2
|
+
/** The most pedit's framing allows in one frame (docs/design/serve.md). */
|
|
3
|
+
const MAX_PAYLOAD = 64 * 1024 * 1024;
|
|
4
|
+
const HEADER = 9;
|
|
5
|
+
export const OPEN = 1;
|
|
6
|
+
export const DATA = 2;
|
|
7
|
+
export const CLOSE = 3;
|
|
8
|
+
export const EVENT = 4;
|
|
9
|
+
/** pedit sent something that is not a frame: the child cannot be trusted any more. */
|
|
10
|
+
export class FrameError extends Error {
|
|
11
|
+
}
|
|
12
|
+
/** kind (1 byte) | stream (uint32 BE) | length (uint32 BE) | payload */
|
|
13
|
+
export function encodeFrame(kind, stream, payload) {
|
|
14
|
+
const body = payload ?? new Uint8Array(0);
|
|
15
|
+
const head = Buffer.alloc(HEADER);
|
|
16
|
+
head[0] = kind;
|
|
17
|
+
head.writeUInt32BE(stream, 1);
|
|
18
|
+
head.writeUInt32BE(body.byteLength, 5);
|
|
19
|
+
return Buffer.concat([head, body]);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Splits the child's stdout into frames. On anything that is not a frame it keeps what it parsed
|
|
23
|
+
* before, sets `error`, and parses nothing more.
|
|
24
|
+
*/
|
|
25
|
+
export class FrameParser {
|
|
26
|
+
/** Set once the stream broke the format; nothing is parsed after it. */
|
|
27
|
+
error;
|
|
28
|
+
#chunks = [];
|
|
29
|
+
#size = 0;
|
|
30
|
+
#head;
|
|
31
|
+
/** Take `n` bytes off the front. A frame within one chunk is not copied. */
|
|
32
|
+
#take(n) {
|
|
33
|
+
this.#size -= n;
|
|
34
|
+
const first = this.#chunks[0];
|
|
35
|
+
if (first && first.length >= n) {
|
|
36
|
+
if (first.length === n)
|
|
37
|
+
this.#chunks.shift();
|
|
38
|
+
else
|
|
39
|
+
this.#chunks[0] = first.subarray(n);
|
|
40
|
+
return first.subarray(0, n);
|
|
41
|
+
}
|
|
42
|
+
const parts = [];
|
|
43
|
+
for (let left = n; left > 0;) {
|
|
44
|
+
const chunk = this.#chunks[0];
|
|
45
|
+
if (chunk.length <= left) {
|
|
46
|
+
parts.push(chunk);
|
|
47
|
+
this.#chunks.shift();
|
|
48
|
+
left -= chunk.length;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
parts.push(chunk.subarray(0, left));
|
|
52
|
+
this.#chunks[0] = chunk.subarray(left);
|
|
53
|
+
left = 0;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return Buffer.concat(parts, n);
|
|
57
|
+
}
|
|
58
|
+
#readHead() {
|
|
59
|
+
if (this.#size < HEADER)
|
|
60
|
+
return undefined;
|
|
61
|
+
const b = this.#take(HEADER);
|
|
62
|
+
const head = { kind: b[0], stream: b.readUInt32BE(1), length: b.readUInt32BE(5) };
|
|
63
|
+
if (head.kind < DATA || head.kind > EVENT)
|
|
64
|
+
throw new FrameError(`unknown frame kind ${head.kind}`);
|
|
65
|
+
if (head.length > MAX_PAYLOAD)
|
|
66
|
+
throw new FrameError('frame too large');
|
|
67
|
+
return head;
|
|
68
|
+
}
|
|
69
|
+
push(chunk) {
|
|
70
|
+
const frames = [];
|
|
71
|
+
if (this.error)
|
|
72
|
+
return frames;
|
|
73
|
+
this.#chunks.push(chunk);
|
|
74
|
+
this.#size += chunk.length;
|
|
75
|
+
try {
|
|
76
|
+
for (;;) {
|
|
77
|
+
this.#head ??= this.#readHead();
|
|
78
|
+
const head = this.#head;
|
|
79
|
+
if (!head || this.#size < head.length)
|
|
80
|
+
break;
|
|
81
|
+
frames.push({ kind: head.kind, stream: head.stream, payload: this.#take(head.length) });
|
|
82
|
+
this.#head = undefined;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
if (!(e instanceof FrameError))
|
|
87
|
+
throw e;
|
|
88
|
+
this.error = e;
|
|
89
|
+
this.#chunks = [];
|
|
90
|
+
this.#size = 0;
|
|
91
|
+
}
|
|
92
|
+
return frames;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** The streams of one child: ids start at 1 and are never reused. */
|
|
96
|
+
export class Streams {
|
|
97
|
+
#stdin;
|
|
98
|
+
#next = 1;
|
|
99
|
+
#streams = new Map();
|
|
100
|
+
constructor(stdin) {
|
|
101
|
+
this.#stdin = stdin;
|
|
102
|
+
}
|
|
103
|
+
/** A data or close frame from pedit. One for a stream already closed here is dropped. */
|
|
104
|
+
deliver(frame) {
|
|
105
|
+
const stream = this.#streams.get(frame.stream);
|
|
106
|
+
if (!stream)
|
|
107
|
+
return;
|
|
108
|
+
if (frame.kind === DATA)
|
|
109
|
+
return stream.frame(frame.payload);
|
|
110
|
+
const p = frame.payload;
|
|
111
|
+
if (p.length >= 2)
|
|
112
|
+
stream.end(p.subarray(2).toString(), p.readUInt16BE(0));
|
|
113
|
+
else
|
|
114
|
+
stream.end('', 1005);
|
|
115
|
+
}
|
|
116
|
+
/** The child is gone: end every stream. */
|
|
117
|
+
abort() {
|
|
118
|
+
for (const s of [...this.#streams.values()])
|
|
119
|
+
s.end('', 1006);
|
|
120
|
+
}
|
|
121
|
+
#write(frame, flushed) {
|
|
122
|
+
if (this.#stdin.writable && !this.#stdin.destroyed)
|
|
123
|
+
this.#stdin.write(frame, flushed);
|
|
124
|
+
}
|
|
125
|
+
/** Open a stream. `onGone` is called once, when it ends. */
|
|
126
|
+
open(role, onGone) {
|
|
127
|
+
const id = this.#next++;
|
|
128
|
+
this.#write(encodeFrame(OPEN, id, Uint8Array.of(role === 'read' ? 1 : 0)));
|
|
129
|
+
let handler = null;
|
|
130
|
+
const held = [];
|
|
131
|
+
let heldBytes = 0;
|
|
132
|
+
let queued = 0; // bytes of this stream's data written to stdin and not yet taken by the child
|
|
133
|
+
let closeHandler = null;
|
|
134
|
+
let ended;
|
|
135
|
+
const end = (reason, code) => {
|
|
136
|
+
if (ended)
|
|
23
137
|
return;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return handler;
|
|
32
|
-
},
|
|
33
|
-
set onframe(fn) {
|
|
34
|
-
handler = fn;
|
|
35
|
-
heldBytes = 0;
|
|
36
|
-
if (fn)
|
|
37
|
-
for (const f of held.splice(0))
|
|
38
|
-
fn(f);
|
|
39
|
-
},
|
|
40
|
-
get onclose() {
|
|
41
|
-
return closeHandler;
|
|
42
|
-
},
|
|
43
|
-
set onclose(fn) {
|
|
44
|
-
closeHandler = fn;
|
|
45
|
-
if (fn && ended)
|
|
46
|
-
fn(ended.reason, ended.code);
|
|
47
|
-
},
|
|
48
|
-
close() {
|
|
49
|
-
if (closing)
|
|
138
|
+
ended = { reason, code };
|
|
139
|
+
this.#streams.delete(id);
|
|
140
|
+
onGone();
|
|
141
|
+
closeHandler?.(reason, code);
|
|
142
|
+
};
|
|
143
|
+
const close = (code, reason) => {
|
|
144
|
+
if (ended)
|
|
50
145
|
return;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
146
|
+
this.#write(encodeFrame(CLOSE, id));
|
|
147
|
+
end(reason, code);
|
|
148
|
+
};
|
|
149
|
+
this.#streams.set(id, {
|
|
150
|
+
frame(payload) {
|
|
151
|
+
const frame = new Uint8Array(payload);
|
|
152
|
+
if (handler)
|
|
153
|
+
return handler(frame);
|
|
154
|
+
held.push(frame);
|
|
155
|
+
heldBytes += frame.byteLength;
|
|
156
|
+
if (heldBytes > MAX_FRAME)
|
|
157
|
+
close(1013, 'no reader');
|
|
158
|
+
},
|
|
159
|
+
end,
|
|
160
|
+
});
|
|
161
|
+
return {
|
|
162
|
+
send: (frame) => {
|
|
163
|
+
if (ended)
|
|
164
|
+
return;
|
|
165
|
+
if (frame.byteLength > MAX_FRAME)
|
|
166
|
+
return close(1009, 'frame too large');
|
|
167
|
+
const out = encodeFrame(DATA, id, frame);
|
|
168
|
+
queued += out.length;
|
|
169
|
+
this.#write(out, () => {
|
|
170
|
+
queued -= out.length;
|
|
171
|
+
});
|
|
172
|
+
if (queued > MAX_FRAME)
|
|
173
|
+
close(1013, 'too slow');
|
|
174
|
+
},
|
|
175
|
+
get onframe() {
|
|
176
|
+
return handler;
|
|
177
|
+
},
|
|
178
|
+
set onframe(fn) {
|
|
179
|
+
handler = fn;
|
|
180
|
+
heldBytes = 0;
|
|
181
|
+
if (fn)
|
|
182
|
+
for (const f of held.splice(0))
|
|
183
|
+
fn(f);
|
|
184
|
+
},
|
|
185
|
+
get onclose() {
|
|
186
|
+
return closeHandler;
|
|
187
|
+
},
|
|
188
|
+
set onclose(fn) {
|
|
189
|
+
closeHandler = fn;
|
|
190
|
+
if (fn && ended)
|
|
191
|
+
fn(ended.reason, ended.code);
|
|
192
|
+
},
|
|
193
|
+
close: () => close(1000, ''),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
86
196
|
}
|
|
87
197
|
//# sourceMappingURL=bridge.js.map
|
package/dist/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/hono.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface PeditOptions<E extends Env = Env> {
|
|
|
18
18
|
/** Absolute path to pedit; default: `pedit` on the PATH. Config only. */
|
|
19
19
|
bin?: string;
|
|
20
20
|
idleMs?: number;
|
|
21
|
+
/** How long a child may take to exit after its input closed (default 5 s) before SIGTERM; on Windows it is given up on, never killed. */
|
|
22
|
+
graceMs?: number;
|
|
21
23
|
/** Default false: refuse peers that are not on loopback. */
|
|
22
24
|
allowRemote?: boolean;
|
|
23
25
|
onEvent?: (event: PeditEvent) => void;
|
|
@@ -38,6 +40,12 @@ export type PeditEvent = {
|
|
|
38
40
|
};
|
|
39
41
|
/** True for 127.0.0.0/8, ::1 and their IPv4-mapped forms. */
|
|
40
42
|
export declare function isLoopback(address: string | undefined): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Component-wise: `root-private/x` is not under `root`. Both are native realpaths, so a prefix test
|
|
45
|
+
* is exact. `path.relative` is not: on Windows it folds case, and `Root` and `root` can be two
|
|
46
|
+
* directories (per-directory case sensitivity). Another drive or share is never a prefix.
|
|
47
|
+
*/
|
|
48
|
+
export declare function inside(root: string, path: string): boolean;
|
|
41
49
|
export declare function peditRoutes<E extends Env = Env>(options: PeditOptions<E>): Hono<E> & {
|
|
42
50
|
close(): Promise<void>;
|
|
43
51
|
};
|
package/dist/hono.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createHash, randomBytes } from 'node:crypto';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { isAbsolute,
|
|
2
|
+
import { statSync } from 'node:fs';
|
|
3
|
+
import { stat } from 'node:fs/promises';
|
|
4
|
+
import { isAbsolute, sep } from 'node:path';
|
|
5
5
|
import { Hono } from 'hono';
|
|
6
6
|
import { HTTPException } from 'hono/http-exception';
|
|
7
7
|
import { HeldError } from "./errors.js";
|
|
8
|
+
import { nativeRealpath, nativeRealpathSync } from "./paths.js";
|
|
8
9
|
import { resolvePedit } from "./resolve.js";
|
|
9
10
|
import { ServedFiles } from "./served.js";
|
|
10
11
|
const ID = /^[A-Za-z0-9_-]{1,128}$/;
|
|
@@ -49,7 +50,7 @@ function validate(options) {
|
|
|
49
50
|
}
|
|
50
51
|
let root;
|
|
51
52
|
try {
|
|
52
|
-
root =
|
|
53
|
+
root = nativeRealpathSync(options.root);
|
|
53
54
|
if (!statSync(root).isDirectory())
|
|
54
55
|
throw new Error();
|
|
55
56
|
}
|
|
@@ -58,10 +59,14 @@ function validate(options) {
|
|
|
58
59
|
}
|
|
59
60
|
return { root, hosts, origins: new Set(options.origins) };
|
|
60
61
|
}
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Component-wise: `root-private/x` is not under `root`. Both are native realpaths, so a prefix test
|
|
64
|
+
* is exact. `path.relative` is not: on Windows it folds case, and `Root` and `root` can be two
|
|
65
|
+
* directories (per-directory case sensitivity). Another drive or share is never a prefix.
|
|
66
|
+
*/
|
|
67
|
+
export function inside(root, path) {
|
|
68
|
+
const prefix = root.endsWith(sep) ? root : root + sep;
|
|
69
|
+
return path.length > prefix.length && path.startsWith(prefix);
|
|
65
70
|
}
|
|
66
71
|
export function peditRoutes(options) {
|
|
67
72
|
const { root, hosts, origins } = validate(options);
|
|
@@ -79,6 +84,7 @@ export function peditRoutes(options) {
|
|
|
79
84
|
bin,
|
|
80
85
|
app: options.app,
|
|
81
86
|
idleMs: options.idleMs,
|
|
87
|
+
graceMs: options.graceMs,
|
|
82
88
|
onEvent(e) {
|
|
83
89
|
const id = (e.path !== null && idByPath.get(e.path)) || null;
|
|
84
90
|
if (e.type === 'error')
|
|
@@ -117,7 +123,7 @@ export function peditRoutes(options) {
|
|
|
117
123
|
if (typeof found.path !== 'string' || !isAbsolute(found.path))
|
|
118
124
|
return null;
|
|
119
125
|
try {
|
|
120
|
-
const real = await
|
|
126
|
+
const real = await nativeRealpath(found.path);
|
|
121
127
|
if (!inside(root, real) || !(await stat(real)).isFile())
|
|
122
128
|
return null;
|
|
123
129
|
return { path: found.path, real, role: found.role };
|
package/dist/hono.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../src/hono.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../src/hono.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Try `native`; on an error that is not about the path (some Windows volumes, such as RAM disks and
|
|
3
|
+
* some SMB or virtual drives, cannot answer the native call) use `fallback`. The fallback keeps the
|
|
4
|
+
* spelling it is given, so it never folds case; the dev:ino check still guards aliases.
|
|
5
|
+
*/
|
|
6
|
+
export declare function withFallback(native: (path: string) => string, fallback: (path: string) => string): (path: string) => string;
|
|
7
|
+
/** The async variant of withFallback. */
|
|
8
|
+
export declare function withFallbackAsync(native: (path: string) => Promise<string>, fallback: (path: string) => Promise<string>): (path: string) => Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* The native realpath: on Windows it asks the open file for its final path, so another casing or
|
|
11
|
+
* an 8.3 short name of a file comes back as the name on disk, and a junction is followed. The JS
|
|
12
|
+
* `fs.promises.realpath` keeps the spelling it was given there. Elsewhere the two agree.
|
|
13
|
+
*/
|
|
14
|
+
export declare const nativeRealpath: (path: string) => Promise<string>;
|
|
15
|
+
export declare const nativeRealpathSync: (path: string) => string;
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { realpath as realpathCb, realpathSync } from 'node:fs';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
/** Errors that mean the path itself is bad, not that the native call is unsupported there. */
|
|
4
|
+
const PATH_ERRORS = new Set(['ENOENT', 'ENOTDIR', 'EACCES', 'EPERM', 'ELOOP', 'ENAMETOOLONG']);
|
|
5
|
+
/**
|
|
6
|
+
* Try `native`; on an error that is not about the path (some Windows volumes, such as RAM disks and
|
|
7
|
+
* some SMB or virtual drives, cannot answer the native call) use `fallback`. The fallback keeps the
|
|
8
|
+
* spelling it is given, so it never folds case; the dev:ino check still guards aliases.
|
|
9
|
+
*/
|
|
10
|
+
export function withFallback(native, fallback) {
|
|
11
|
+
return (path) => {
|
|
12
|
+
try {
|
|
13
|
+
return native(path);
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
if (PATH_ERRORS.has(e.code ?? ''))
|
|
17
|
+
throw e;
|
|
18
|
+
return fallback(path);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** The async variant of withFallback. */
|
|
23
|
+
export function withFallbackAsync(native, fallback) {
|
|
24
|
+
return async (path) => {
|
|
25
|
+
try {
|
|
26
|
+
return await native(path);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
if (PATH_ERRORS.has(e.code ?? ''))
|
|
30
|
+
throw e;
|
|
31
|
+
return fallback(path);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The native realpath: on Windows it asks the open file for its final path, so another casing or
|
|
37
|
+
* an 8.3 short name of a file comes back as the name on disk, and a junction is followed. The JS
|
|
38
|
+
* `fs.promises.realpath` keeps the spelling it was given there. Elsewhere the two agree.
|
|
39
|
+
*/
|
|
40
|
+
export const nativeRealpath = withFallbackAsync(promisify(realpathCb.native), promisify(realpathCb));
|
|
41
|
+
export const nativeRealpathSync = withFallback((p) => realpathSync.native(p), (p) => realpathSync(p));
|
|
42
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,8FAA8F;AAC9F,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;AAE9F;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAgC,EAChC,QAAkC;IAElC,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,WAAW,CAAC,GAAG,CAAE,CAA2B,CAAC,IAAI,IAAI,EAAE,CAAC;gBAAE,MAAM,CAAC,CAAA;YACrE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,iBAAiB,CAC/B,MAAyC,EACzC,QAA2C;IAE3C,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,WAAW,CAAC,GAAG,CAAE,CAA2B,CAAC,IAAI,IAAI,EAAE,CAAC;gBAAE,MAAM,CAAC,CAAA;YACrE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAC7C,SAAS,CAAC,UAAU,CAAC,MAAM,CAAsC,EACjE,SAAS,CAAC,UAAU,CAAsC,CAC3D,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CACvB,CAAA"}
|
package/dist/resolve.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** The first pedit release with `pedit serve --
|
|
2
|
-
export declare const MIN_PEDIT_VERSION = "0.
|
|
1
|
+
/** The first pedit release with `pedit serve --stdio`: framed streams on the child's stdin and stdout. */
|
|
2
|
+
export declare const MIN_PEDIT_VERSION = "0.5.0";
|
|
3
3
|
/**
|
|
4
4
|
* True when `output` (what `pedit --version` prints) is at least MIN_PEDIT_VERSION. A source build
|
|
5
5
|
* prints `dev` or a Go pseudo-version such as `v0.3.1-0.20261031060942-98b75f74184d`; its base
|
|
@@ -8,6 +8,11 @@ export declare const MIN_PEDIT_VERSION = "0.4.0";
|
|
|
8
8
|
export declare function peditVersionOk(output: string, min?: string): boolean;
|
|
9
9
|
/** The only environment a pedit child gets. */
|
|
10
10
|
export declare function peditEnv(): NodeJS.ProcessEnv;
|
|
11
|
+
/**
|
|
12
|
+
* The names to try for `pedit` in a directory. On Windows: PATHEXT's `.exe` and `.com` in its order
|
|
13
|
+
* (a script cannot be spawned without a shell), and `.exe` when PATHEXT lists neither.
|
|
14
|
+
*/
|
|
15
|
+
export declare function candidateNames(win?: boolean, pathext?: string | undefined): string[];
|
|
11
16
|
/**
|
|
12
17
|
* Which pedit binary: `options.bin` (absolute) or `pedit` on the PATH. Config only, never request data.
|
|
13
18
|
* The file must be a regular file owned by this user or root, and not writable by group or others.
|
package/dist/resolve.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { execFile } from 'node:child_process';
|
|
2
2
|
import { constants } from 'node:fs';
|
|
3
|
-
import { access,
|
|
3
|
+
import { access, stat } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
4
5
|
import { delimiter, isAbsolute, join } from 'node:path';
|
|
5
6
|
import { NoPeditError } from "./errors.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
7
|
+
import { nativeRealpath } from "./paths.js";
|
|
8
|
+
/** The first pedit release with `pedit serve --stdio`: framed streams on the child's stdin and stdout. */
|
|
9
|
+
export const MIN_PEDIT_VERSION = '0.5.0';
|
|
10
|
+
const UPDATE_HINT = 'update with Homebrew (brew upgrade pedit), the install script (https://edit.piconic.ai/install.sh; on Windows: irm https://edit.piconic.ai/install.ps1 | iex) or GitHub releases (https://github.com/piconic-ai/pedit/releases)';
|
|
9
11
|
/**
|
|
10
12
|
* True when `output` (what `pedit --version` prints) is at least MIN_PEDIT_VERSION. A source build
|
|
11
13
|
* prints `dev` or a Go pseudo-version such as `v0.3.1-0.20261031060942-98b75f74184d`; its base
|
|
@@ -23,28 +25,60 @@ export function peditVersionOk(output, min = MIN_PEDIT_VERSION) {
|
|
|
23
25
|
if (got[i] !== want[i])
|
|
24
26
|
return (got[i] ?? 0) > (want[i] ?? 0);
|
|
25
27
|
}
|
|
26
|
-
return !/^v?\d+\.\d+\.\d+-/.test(v); // 0.
|
|
28
|
+
return !/^v?\d+\.\d+\.\d+-/.test(v); // 0.5.0-rc1 is older than 0.5.0
|
|
27
29
|
}
|
|
30
|
+
const WIN = process.platform === 'win32';
|
|
31
|
+
/**
|
|
32
|
+
* What Go needs on Windows: os.UserConfigDir (APPDATA), os.UserHomeDir (USERPROFILE), os.TempDir
|
|
33
|
+
* (TMP, TEMP, USERPROFILE), the loader and sockets (SystemRoot, windir), and the drive.
|
|
34
|
+
*/
|
|
35
|
+
const WINDOWS_VARS = [
|
|
36
|
+
'USERPROFILE',
|
|
37
|
+
'APPDATA',
|
|
38
|
+
'LOCALAPPDATA',
|
|
39
|
+
'SystemRoot',
|
|
40
|
+
'windir',
|
|
41
|
+
'SystemDrive',
|
|
42
|
+
'TEMP',
|
|
43
|
+
'TMP',
|
|
44
|
+
'HOMEDRIVE',
|
|
45
|
+
'HOMEPATH',
|
|
46
|
+
];
|
|
28
47
|
/** The only environment a pedit child gets. */
|
|
29
48
|
export function peditEnv() {
|
|
30
49
|
const env = {};
|
|
31
|
-
|
|
50
|
+
const names = ['PATH', 'HOME', 'XDG_CONFIG_HOME', 'TMPDIR', ...(WIN ? WINDOWS_VARS : [])];
|
|
51
|
+
for (const k of names) {
|
|
32
52
|
const v = process.env[k];
|
|
33
53
|
if (v !== undefined)
|
|
34
54
|
env[k] = v;
|
|
35
55
|
}
|
|
36
56
|
return env;
|
|
37
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* The names to try for `pedit` in a directory. On Windows: PATHEXT's `.exe` and `.com` in its order
|
|
60
|
+
* (a script cannot be spawned without a shell), and `.exe` when PATHEXT lists neither.
|
|
61
|
+
*/
|
|
62
|
+
export function candidateNames(win = WIN, pathext = process.env.PATHEXT) {
|
|
63
|
+
if (!win)
|
|
64
|
+
return ['pedit'];
|
|
65
|
+
const exts = (pathext ?? '.COM;.EXE;.BAT;.CMD').split(';').map((e) => e.toLowerCase());
|
|
66
|
+
const names = exts.filter((e) => e === '.exe' || e === '.com');
|
|
67
|
+
return (names.length > 0 ? names : ['.exe']).map((e) => `pedit${e}`);
|
|
68
|
+
}
|
|
38
69
|
async function findOnPath() {
|
|
70
|
+
const names = candidateNames();
|
|
39
71
|
for (const dir of (process.env.PATH ?? '').split(delimiter)) {
|
|
40
72
|
if (!dir || !isAbsolute(dir))
|
|
41
73
|
continue;
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
74
|
+
for (const name of names) {
|
|
75
|
+
const candidate = join(dir, name);
|
|
76
|
+
try {
|
|
77
|
+
await access(candidate, constants.X_OK);
|
|
78
|
+
return candidate;
|
|
79
|
+
}
|
|
80
|
+
catch { }
|
|
46
81
|
}
|
|
47
|
-
catch { }
|
|
48
82
|
}
|
|
49
83
|
return undefined;
|
|
50
84
|
}
|
|
@@ -53,8 +87,6 @@ async function findOnPath() {
|
|
|
53
87
|
* The file must be a regular file owned by this user or root, and not writable by group or others.
|
|
54
88
|
*/
|
|
55
89
|
export async function resolvePedit(options = {}) {
|
|
56
|
-
if (process.platform === 'win32')
|
|
57
|
-
throw new Error('@pedit/serve does not support Windows');
|
|
58
90
|
const given = options.bin ?? (await findOnPath());
|
|
59
91
|
if (given === undefined)
|
|
60
92
|
throw new NoPeditError('pedit was not found on the PATH');
|
|
@@ -62,15 +94,18 @@ export async function resolvePedit(options = {}) {
|
|
|
62
94
|
throw new NoPeditError('the pedit binary must be an absolute path');
|
|
63
95
|
let bin;
|
|
64
96
|
try {
|
|
65
|
-
bin = await
|
|
97
|
+
bin = await nativeRealpath(given);
|
|
66
98
|
const st = await stat(bin);
|
|
67
99
|
if (!st.isFile())
|
|
68
100
|
throw new NoPeditError('the pedit binary is not a regular file');
|
|
69
|
-
|
|
70
|
-
|
|
101
|
+
// Windows has neither uid nor mode bits: the install location's ACL is what protects it.
|
|
102
|
+
if (!WIN) {
|
|
103
|
+
if (st.uid !== process.getuid?.() && st.uid !== 0) {
|
|
104
|
+
throw new NoPeditError('the pedit binary has another owner');
|
|
105
|
+
}
|
|
106
|
+
if (st.mode & 0o022)
|
|
107
|
+
throw new NoPeditError('the pedit binary is writable by others');
|
|
71
108
|
}
|
|
72
|
-
if (st.mode & 0o022)
|
|
73
|
-
throw new NoPeditError('the pedit binary is writable by others');
|
|
74
109
|
}
|
|
75
110
|
catch (e) {
|
|
76
111
|
if (e instanceof NoPeditError)
|
|
@@ -78,7 +113,7 @@ export async function resolvePedit(options = {}) {
|
|
|
78
113
|
throw new NoPeditError('the pedit binary cannot be used');
|
|
79
114
|
}
|
|
80
115
|
const version = await new Promise((resolve, reject) => {
|
|
81
|
-
execFile(bin, ['--version'], { env: peditEnv(), timeout: 5000, cwd:
|
|
116
|
+
execFile(bin, ['--version'], { env: peditEnv(), timeout: 5000, cwd: tmpdir() }, (err, stdout) => err ? reject(new NoPeditError('pedit --version failed')) : resolve(stdout.trim()));
|
|
82
117
|
});
|
|
83
118
|
if (!peditVersionOk(version)) {
|
|
84
119
|
throw new NoPeditError(`pedit ${version} is too old: @pedit/serve needs ${MIN_PEDIT_VERSION} or later; ${UPDATE_HINT}`);
|
package/dist/resolve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/served.d.ts
CHANGED
|
@@ -6,6 +6,10 @@ export interface ServedFilesOptions {
|
|
|
6
6
|
app: string;
|
|
7
7
|
/** Stop the child this long after the last client left. Default 60 s. */
|
|
8
8
|
idleMs?: number;
|
|
9
|
+
/** How long a child may take to exit after stdin closed, before SIGTERM (Windows: before it is given up on). Default 5 s. */
|
|
10
|
+
graceMs?: number;
|
|
11
|
+
/** Tests only: behave as this platform (Windows never signals a child). */
|
|
12
|
+
platform?: NodeJS.Platform;
|
|
9
13
|
/** This layer knows paths, not IDs. */
|
|
10
14
|
onEvent?: (event: ServeEvent) => void;
|
|
11
15
|
}
|
|
@@ -13,17 +17,22 @@ export interface ServedFile {
|
|
|
13
17
|
readonly path: string;
|
|
14
18
|
/** Names the document: the same after a restart that restored it, new when it started afresh. */
|
|
15
19
|
readonly generation: string;
|
|
16
|
-
/** One
|
|
20
|
+
/** One stream to the child; at most 8 per file (LimitError). */
|
|
17
21
|
dial(role: Role): Promise<Bridge>;
|
|
18
22
|
}
|
|
19
23
|
export declare class ServedFiles {
|
|
20
24
|
#private;
|
|
21
25
|
constructor(options: ServedFilesOptions);
|
|
22
26
|
/**
|
|
23
|
-
* Start or reuse the child serving `path` (absolute). Keyed by
|
|
24
|
-
*
|
|
27
|
+
* Start or reuse the child serving `path` (absolute). Keyed by the native realpath (never case
|
|
28
|
+
* folded: on Windows two names that differ in case can be two files) and dev:ino, so a hard link
|
|
29
|
+
* or another spelling of one file never gets two children.
|
|
25
30
|
*/
|
|
26
31
|
acquire(path: string): Promise<ServedFile>;
|
|
27
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* End every child: close stdin, wait, SIGTERM after 5 s. Never SIGKILL inside the write delay.
|
|
34
|
+
* On Windows there is no SIGTERM (it is TerminateProcess), so stdin only: a child that does not
|
|
35
|
+
* exit is reported and given up on, not killed.
|
|
36
|
+
*/
|
|
28
37
|
close(): Promise<void>;
|
|
29
38
|
}
|
package/dist/served.js
CHANGED
|
@@ -1,38 +1,45 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
-
import {
|
|
2
|
+
import { stat } from 'node:fs/promises';
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
4
|
import { basename, dirname, isAbsolute } from 'node:path';
|
|
5
|
-
import {
|
|
5
|
+
import { EVENT, FrameParser, Streams } from "./bridge.js";
|
|
6
6
|
import { HeldError, LimitError, NoPeditError } from "./errors.js";
|
|
7
|
+
import { nativeRealpath } from "./paths.js";
|
|
7
8
|
import { peditEnv } from "./resolve.js";
|
|
8
9
|
const MAX_FILES = 32;
|
|
9
10
|
const MAX_CLIENTS = 8;
|
|
10
|
-
const
|
|
11
|
+
const MAX_EVENT = 4096;
|
|
11
12
|
const STDERR_KEEP = 1024;
|
|
12
13
|
const TERM_AFTER_MS = 5000;
|
|
14
|
+
/**
|
|
15
|
+
* `dev:ino`, or '' when the file system gives no inode (Node reports 0 on FAT and some shares):
|
|
16
|
+
* different files would look like one, so an empty id is never used to alias. bigint keeps the
|
|
17
|
+
* 64-bit file ids of NTFS exact.
|
|
18
|
+
*/
|
|
13
19
|
async function inodeOf(real) {
|
|
14
|
-
const st = await stat(real);
|
|
20
|
+
const st = await stat(real, { bigint: true });
|
|
15
21
|
if (!st.isFile())
|
|
16
22
|
throw new Error('not a regular file');
|
|
17
|
-
return `${st.dev}:${st.ino}`;
|
|
23
|
+
return st.ino === 0n ? '' : `${st.dev}:${st.ino}`;
|
|
18
24
|
}
|
|
19
25
|
export class ServedFiles {
|
|
20
26
|
#options;
|
|
21
27
|
#byPath = new Map();
|
|
22
28
|
#byIno = new Map();
|
|
23
29
|
#closed = false;
|
|
30
|
+
#win;
|
|
24
31
|
constructor(options) {
|
|
25
|
-
if (process.platform === 'win32')
|
|
26
|
-
throw new Error('@pedit/serve does not support Windows');
|
|
27
32
|
if (!isAbsolute(options.bin))
|
|
28
33
|
throw new TypeError('bin must be an absolute path');
|
|
29
34
|
if (!options.app)
|
|
30
35
|
throw new TypeError('app is required');
|
|
31
36
|
this.#options = options;
|
|
37
|
+
this.#win = (options.platform ?? process.platform) === 'win32';
|
|
32
38
|
}
|
|
33
39
|
/**
|
|
34
|
-
* Start or reuse the child serving `path` (absolute). Keyed by
|
|
35
|
-
*
|
|
40
|
+
* Start or reuse the child serving `path` (absolute). Keyed by the native realpath (never case
|
|
41
|
+
* folded: on Windows two names that differ in case can be two files) and dev:ino, so a hard link
|
|
42
|
+
* or another spelling of one file never gets two children.
|
|
36
43
|
*/
|
|
37
44
|
async acquire(path) {
|
|
38
45
|
if (!isAbsolute(path))
|
|
@@ -40,19 +47,17 @@ export class ServedFiles {
|
|
|
40
47
|
for (;;) {
|
|
41
48
|
if (this.#closed)
|
|
42
49
|
throw new Error('ServedFiles is closed');
|
|
43
|
-
const real = await
|
|
50
|
+
const real = await nativeRealpath(path);
|
|
44
51
|
const ino = await inodeOf(real);
|
|
45
|
-
|
|
46
|
-
// gives the served path a new one and splits a hard link into two files.
|
|
47
|
-
const alias = this.#byIno.get(ino);
|
|
48
|
-
const aliasHolds = alias !== undefined &&
|
|
49
|
-
alias.path !== real &&
|
|
50
|
-
(await inodeOf(alias.path).catch(() => '')) === ino;
|
|
52
|
+
const alias = await this.#aliasFor(real, ino);
|
|
51
53
|
if (this.#closed)
|
|
52
54
|
throw new Error('ServedFiles is closed');
|
|
53
|
-
let entry = this.#byPath.get(real) ??
|
|
55
|
+
let entry = this.#byPath.get(real) ?? alias;
|
|
54
56
|
if (entry && entry.ino !== ino && entry.path === real)
|
|
55
57
|
this.#reindex(entry, ino);
|
|
58
|
+
// A child that was given up on still runs and holds the file: a second one would be refused.
|
|
59
|
+
if (entry?.givenUp)
|
|
60
|
+
throw new HeldError({ pid: entry.child.pid ?? 0 });
|
|
56
61
|
if (entry?.stopping) {
|
|
57
62
|
await entry.exited;
|
|
58
63
|
continue;
|
|
@@ -66,13 +71,29 @@ export class ServedFiles {
|
|
|
66
71
|
return entry.handle;
|
|
67
72
|
}
|
|
68
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* The entry that already serves this file under another name. An inode alias counts only while
|
|
76
|
+
* the other path still has that inode: an atomic save gives the served path a new one and splits
|
|
77
|
+
* a hard link into two files. No inode (''), no alias.
|
|
78
|
+
*/
|
|
79
|
+
async #aliasFor(real, ino) {
|
|
80
|
+
const alias = ino === '' ? undefined : this.#byIno.get(ino);
|
|
81
|
+
if (alias === undefined || alias.path === real)
|
|
82
|
+
return undefined;
|
|
83
|
+
return (await inodeOf(alias.path).catch(() => '')) === ino ? alias : undefined;
|
|
84
|
+
}
|
|
69
85
|
#reindex(entry, ino) {
|
|
70
86
|
if (this.#byIno.get(entry.ino) === entry)
|
|
71
87
|
this.#byIno.delete(entry.ino);
|
|
72
88
|
entry.ino = ino;
|
|
73
|
-
|
|
89
|
+
if (ino !== '')
|
|
90
|
+
this.#byIno.set(ino, entry);
|
|
74
91
|
}
|
|
75
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* End every child: close stdin, wait, SIGTERM after 5 s. Never SIGKILL inside the write delay.
|
|
94
|
+
* On Windows there is no SIGTERM (it is TerminateProcess), so stdin only: a child that does not
|
|
95
|
+
* exit is reported and given up on, not killed.
|
|
96
|
+
*/
|
|
76
97
|
async close() {
|
|
77
98
|
this.#closed = true;
|
|
78
99
|
const entries = [...this.#byPath.values()];
|
|
@@ -89,9 +110,9 @@ export class ServedFiles {
|
|
|
89
110
|
#start(path, ino) {
|
|
90
111
|
const child = spawn(this.#options.bin, [
|
|
91
112
|
'serve',
|
|
113
|
+
'--stdio',
|
|
92
114
|
'--root',
|
|
93
115
|
dirname(path),
|
|
94
|
-
'--json',
|
|
95
116
|
'--app',
|
|
96
117
|
this.#options.app,
|
|
97
118
|
'--',
|
|
@@ -113,13 +134,31 @@ export class ServedFiles {
|
|
|
113
134
|
ino,
|
|
114
135
|
child,
|
|
115
136
|
ready,
|
|
116
|
-
|
|
137
|
+
streams: new Streams(child.stdin),
|
|
138
|
+
listening: false,
|
|
117
139
|
generation: '',
|
|
118
140
|
clients: 0,
|
|
119
141
|
idle: undefined,
|
|
120
142
|
stopping: undefined,
|
|
121
143
|
exited,
|
|
122
144
|
dead: false,
|
|
145
|
+
givenUp: false,
|
|
146
|
+
giveUp: () => {
|
|
147
|
+
if (entry.dead)
|
|
148
|
+
return;
|
|
149
|
+
entry.dead = true;
|
|
150
|
+
entry.givenUp = true; // stays in the indexes (and counts) until it really exits
|
|
151
|
+
const message = 'pedit did not exit after its input was closed';
|
|
152
|
+
this.#emit({ type: 'error', path, message });
|
|
153
|
+
entry.streams.abort();
|
|
154
|
+
clearTimeout(entry.idle);
|
|
155
|
+
// Let the host exit without waiting for a child it will not kill.
|
|
156
|
+
child.unref();
|
|
157
|
+
for (const s of [child.stdin, child.stdout, child.stderr])
|
|
158
|
+
s?.unref?.();
|
|
159
|
+
onFail(new Error(message));
|
|
160
|
+
onExit();
|
|
161
|
+
},
|
|
123
162
|
handle: {
|
|
124
163
|
path,
|
|
125
164
|
get generation() {
|
|
@@ -129,36 +168,37 @@ export class ServedFiles {
|
|
|
129
168
|
},
|
|
130
169
|
};
|
|
131
170
|
this.#byPath.set(path, entry);
|
|
132
|
-
|
|
171
|
+
if (ino !== '')
|
|
172
|
+
this.#byIno.set(ino, entry);
|
|
133
173
|
let held;
|
|
134
174
|
let errorMessage;
|
|
135
175
|
let missing = false;
|
|
136
176
|
let stderr = '';
|
|
137
|
-
|
|
177
|
+
const parser = new FrameParser();
|
|
138
178
|
child.stdin.on('error', () => { });
|
|
139
179
|
child.stderr.setEncoding('utf8');
|
|
140
180
|
child.stderr.on('data', (d) => {
|
|
141
181
|
if (stderr.length < STDERR_KEEP)
|
|
142
182
|
stderr = (stderr + d).slice(0, STDERR_KEEP);
|
|
143
183
|
});
|
|
144
|
-
const
|
|
184
|
+
const onEvent = (payload) => {
|
|
145
185
|
let ev;
|
|
146
186
|
try {
|
|
147
|
-
ev = JSON.parse(
|
|
187
|
+
ev = JSON.parse(payload.toString());
|
|
148
188
|
}
|
|
149
189
|
catch {
|
|
150
190
|
return;
|
|
151
191
|
}
|
|
152
|
-
if (ev.event === 'listening' &&
|
|
192
|
+
if (ev.event === 'listening' && !entry.listening) {
|
|
153
193
|
if (typeof ev.generation !== 'string' || ev.generation === '') {
|
|
154
194
|
errorMessage = 'pedit did not report a generation; it is too old';
|
|
155
|
-
return
|
|
195
|
+
return this.#terminate(entry);
|
|
156
196
|
}
|
|
157
|
-
entry.
|
|
197
|
+
entry.listening = true;
|
|
158
198
|
entry.generation = ev.generation;
|
|
159
199
|
this.#emit({ type: 'started', path });
|
|
160
200
|
this.#armIdle(entry);
|
|
161
|
-
onReady(
|
|
201
|
+
onReady();
|
|
162
202
|
}
|
|
163
203
|
else if (ev.event === 'held') {
|
|
164
204
|
held = { pid: Number(ev.pid), ...(typeof ev.app === 'string' ? { app: ev.app } : {}) };
|
|
@@ -167,19 +207,26 @@ export class ServedFiles {
|
|
|
167
207
|
errorMessage = ev.message.slice(0, STDERR_KEEP);
|
|
168
208
|
}
|
|
169
209
|
};
|
|
170
|
-
|
|
210
|
+
let broken = false;
|
|
211
|
+
const frameBroke = () => {
|
|
212
|
+
broken = true;
|
|
213
|
+
this.#terminate(entry);
|
|
214
|
+
};
|
|
171
215
|
child.stdout.on('data', (d) => {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
216
|
+
if (broken)
|
|
217
|
+
return;
|
|
218
|
+
for (const f of parser.push(d)) {
|
|
219
|
+
if (f.kind !== EVENT)
|
|
220
|
+
entry.streams.deliver(f);
|
|
221
|
+
else if (f.stream !== 0 || f.payload.length > MAX_EVENT)
|
|
222
|
+
return frameBroke();
|
|
223
|
+
else
|
|
224
|
+
onEvent(f.payload);
|
|
179
225
|
}
|
|
180
|
-
if (
|
|
181
|
-
|
|
226
|
+
if (parser.error)
|
|
227
|
+
frameBroke();
|
|
182
228
|
});
|
|
229
|
+
child.stdout.on('error', () => { });
|
|
183
230
|
child.on('error', (e) => {
|
|
184
231
|
if (e.code === 'ENOENT')
|
|
185
232
|
missing = true;
|
|
@@ -188,12 +235,10 @@ export class ServedFiles {
|
|
|
188
235
|
});
|
|
189
236
|
child.on('close', (code) => {
|
|
190
237
|
entry.dead = true;
|
|
191
|
-
|
|
192
|
-
if (
|
|
193
|
-
|
|
194
|
-
if (
|
|
195
|
-
this.#byIno.delete(entry.ino);
|
|
196
|
-
if (!entry.socket) {
|
|
238
|
+
this.#forget(entry);
|
|
239
|
+
if (entry.givenUp)
|
|
240
|
+
return; // already reported; its events must not reach a newer child's id
|
|
241
|
+
if (!entry.listening) {
|
|
197
242
|
if (missing)
|
|
198
243
|
onFail(new NoPeditError('the pedit binary cannot be run'));
|
|
199
244
|
else if (code === 3 && held)
|
|
@@ -212,6 +257,19 @@ export class ServedFiles {
|
|
|
212
257
|
});
|
|
213
258
|
return entry;
|
|
214
259
|
}
|
|
260
|
+
/** Drop an exited entry from the indexes and end what hangs off it. */
|
|
261
|
+
#forget(entry) {
|
|
262
|
+
entry.streams.abort();
|
|
263
|
+
clearTimeout(entry.idle);
|
|
264
|
+
if (this.#byPath.get(entry.path) === entry)
|
|
265
|
+
this.#byPath.delete(entry.path);
|
|
266
|
+
if (this.#byIno.get(entry.ino) === entry)
|
|
267
|
+
this.#byIno.delete(entry.ino);
|
|
268
|
+
}
|
|
269
|
+
/** Run `overdue` if the child is still alive after the grace period. */
|
|
270
|
+
#grace(entry, overdue) {
|
|
271
|
+
setTimeout(() => entry.dead || overdue(), this.#options.graceMs ?? TERM_AFTER_MS).unref();
|
|
272
|
+
}
|
|
215
273
|
#armIdle(entry) {
|
|
216
274
|
clearTimeout(entry.idle);
|
|
217
275
|
if (entry.clients > 0 || entry.dead || entry.stopping)
|
|
@@ -226,10 +284,18 @@ export class ServedFiles {
|
|
|
226
284
|
clearTimeout(entry.idle);
|
|
227
285
|
entry.child.stdin?.end();
|
|
228
286
|
// Saving takes a write delay: ask nicely first, and never SIGKILL.
|
|
229
|
-
|
|
287
|
+
this.#grace(entry, () => (this.#win ? entry.giveUp() : entry.child.kill('SIGTERM')));
|
|
288
|
+
}
|
|
289
|
+
/** Ask the child to end after it did not in time, or broke the protocol. */
|
|
290
|
+
#terminate(entry) {
|
|
291
|
+
if (!this.#win)
|
|
292
|
+
return void entry.child.kill('SIGTERM');
|
|
293
|
+
// Windows: closing stdin is the only stop. Wait once more, then give up without killing.
|
|
294
|
+
entry.child.stdin?.end();
|
|
295
|
+
this.#grace(entry, () => entry.giveUp());
|
|
230
296
|
}
|
|
231
297
|
async #dial(entry, role) {
|
|
232
|
-
if (entry.dead || entry.stopping || !entry.
|
|
298
|
+
if (entry.dead || entry.stopping || !entry.listening)
|
|
233
299
|
throw new Error('the file is no longer served');
|
|
234
300
|
if (entry.clients >= MAX_CLIENTS)
|
|
235
301
|
throw new LimitError('too many clients for this file');
|
|
@@ -240,7 +306,7 @@ export class ServedFiles {
|
|
|
240
306
|
this.#armIdle(entry);
|
|
241
307
|
};
|
|
242
308
|
try {
|
|
243
|
-
return
|
|
309
|
+
return entry.streams.open(role, release);
|
|
244
310
|
}
|
|
245
311
|
catch (e) {
|
|
246
312
|
release();
|
package/dist/served.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"served.js","sourceRoot":"","sources":["../src/served.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"served.js","sourceRoot":"","sources":["../src/served.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pedit/serve",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Run pedit serve for a local app: the file's Yjs document over
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Run pedit serve for a local app: the file's Yjs document over the child's stdin and stdout, with Hono routes and a browser client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pedit",
|
|
7
7
|
"yjs",
|
|
@@ -38,9 +38,6 @@
|
|
|
38
38
|
"typecheck": "tsc -p .",
|
|
39
39
|
"test": "vitest run --passWithNoTests"
|
|
40
40
|
},
|
|
41
|
-
"dependencies": {
|
|
42
|
-
"ws": "^8.18.3"
|
|
43
|
-
},
|
|
44
41
|
"peerDependencies": {
|
|
45
42
|
"hono": "^4.9.0",
|
|
46
43
|
"y-protocols": "^1.0.7",
|
|
@@ -67,6 +64,7 @@
|
|
|
67
64
|
"@types/node": "^22.0.0",
|
|
68
65
|
"@types/ws": "^8.18.1",
|
|
69
66
|
"hono": "^4.9.0",
|
|
67
|
+
"ws": "^8.18.3",
|
|
70
68
|
"y-protocols": "^1.0.7",
|
|
71
69
|
"y-websocket": "^3.0.0",
|
|
72
70
|
"yjs": "^13.6.33"
|