@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 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 Unix socket. Your page edits the file live, with several pages at once, and
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.4.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 or Linux (Unix sockets; not Windows).
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
- - Unix only; one id is one file; at most 32 files and 8 clients per file.
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
- /** Dial the child's socket. `ws+unix://` URLs break on paths with spaces, so hand ws the connection. */
13
- export declare function dialSocket(socketPath: string, role: Role, onGone: () => void): Promise<Bridge>;
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
- /** Dial the child's socket. `ws+unix://` URLs break on paths with spaces, so hand ws the connection. */
5
- export async function dialSocket(socketPath, role, onGone) {
6
- const ws = new WebSocket('ws://pedit/', {
7
- createConnection: () => connect(socketPath),
8
- headers: role === 'read' ? { 'X-Pedit-Role': 'read' } : {},
9
- perMessageDeflate: false,
10
- maxPayload: 4 * MAX_FRAME,
11
- handshakeTimeout: 5000,
12
- });
13
- let handler = null;
14
- const held = [];
15
- let heldBytes = 0;
16
- let closeHandler = null;
17
- let ended;
18
- let opened = false;
19
- let closing = false;
20
- const bridge = {
21
- send(frame) {
22
- if (ws.readyState !== WebSocket.OPEN)
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
- if (frame.byteLength > MAX_FRAME)
25
- return ws.close(1009, 'frame too large');
26
- ws.send(frame, { binary: true });
27
- if (ws.bufferedAmount > MAX_FRAME)
28
- ws.close(1013, 'too slow');
29
- },
30
- get onframe() {
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
- closing = true;
52
- ws.close(1000);
53
- // Do not wait for a stuck peer to answer: the slot must come back.
54
- setTimeout(() => ws.terminate(), 2000).unref();
55
- },
56
- };
57
- ws.on('message', (data) => {
58
- const frame = Array.isArray(data) ? Buffer.concat(data) : new Uint8Array(data);
59
- if (handler)
60
- return handler(frame);
61
- held.push(frame);
62
- heldBytes += frame.byteLength;
63
- if (heldBytes > MAX_FRAME)
64
- ws.close(1013, 'no reader');
65
- });
66
- ws.on('close', (code, reason) => {
67
- if (!opened || ended)
68
- return;
69
- ended = { reason: reason.toString(), code };
70
- onGone();
71
- closeHandler?.(ended.reason, ended.code);
72
- });
73
- // Listen before waiting for the open: pedit's first frame can arrive in the same tick.
74
- await new Promise((resolve, reject) => {
75
- ws.once('open', resolve);
76
- ws.once('error', reject);
77
- ws.once('unexpected-response', () => reject(new Error('pedit refused the connection')));
78
- });
79
- opened = true;
80
- ws.removeAllListeners('error');
81
- ws.on('error', () => ws.terminate());
82
- // A close in the same tick as the open came before `opened` was set.
83
- if (ws.readyState === WebSocket.CLOSED)
84
- ws.emit('close', 1006, Buffer.alloc(0));
85
- return bridge;
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
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
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 { realpathSync, statSync } from 'node:fs';
3
- import { realpath, stat } from 'node:fs/promises';
4
- import { isAbsolute, relative, sep } from 'node:path';
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 = realpathSync(options.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
- /** Component-wise: `root-private/x` is not under `root`. */
62
- function inside(root, path) {
63
- const rel = relative(root, path);
64
- return rel !== '' && rel !== '..' && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);
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 realpath(found.path);
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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"}
@@ -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 --root`, `generation` in `listening` and `X-Pedit-Role`. */
2
- export declare const MIN_PEDIT_VERSION = "0.4.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, realpath, stat } from 'node:fs/promises';
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
- /** The first pedit release with `pedit serve --root`, `generation` in `listening` and `X-Pedit-Role`. */
7
- export const MIN_PEDIT_VERSION = '0.4.0';
8
- const UPDATE_HINT = 'update with Homebrew (brew upgrade pedit), the install script (https://edit.piconic.ai/install.sh) or GitHub releases (https://github.com/piconic-ai/pedit/releases)';
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.4.0-rc1 is older than 0.4.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
- for (const k of ['PATH', 'HOME', 'XDG_CONFIG_HOME', 'TMPDIR']) {
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 candidate = join(dir, 'pedit');
43
- try {
44
- await access(candidate, constants.X_OK);
45
- return candidate;
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 realpath(given);
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
- if (st.uid !== process.getuid?.() && st.uid !== 0) {
70
- throw new NoPeditError('the pedit binary has another owner');
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: '/' }, (err, stdout) => err ? reject(new NoPeditError('pedit --version failed')) : resolve(stdout.trim()));
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}`);
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
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,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,0GAA0G;AAC1G,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAA;AAExC,MAAM,WAAW,GACf,iOAAiO,CAAA;AAEnO;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,GAAG,GAAG,iBAAiB;IACpE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IAChD,IAAI,CAAC,KAAK,KAAK,IAAI,oCAAoC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5E,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC/F,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,gCAAgC;AACtE,CAAC;AAED,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAExC;;;GAGG;AACH,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,SAAS;IACT,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,MAAM;IACN,KAAK;IACL,WAAW;IACX,UAAU;CACX,CAAA;AAED,+CAA+C;AAC/C,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACzF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAG,GAAG,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO;IACrE,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1B,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;IACtF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,CAAC,CAAA;IAC9D,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACtE,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,KAAK,GAAG,cAAc,EAAE,CAAA;IAC9B,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;gBACvC,OAAO,SAAS,CAAA;YAClB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAA4B,EAAE;IAE9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,UAAU,EAAE,CAAC,CAAA;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,YAAY,CAAC,iCAAiC,CAAC,CAAA;IAClF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,2CAA2C,CAAC,CAAA;IAC3F,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,YAAY,CAAC,wCAAwC,CAAC,CAAA;QAClF,yFAAyF;QACzF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,YAAY,CAAC,oCAAoC,CAAC,CAAA;YAC9D,CAAC;YACD,IAAI,EAAE,CAAC,IAAI,GAAG,KAAK;gBAAE,MAAM,IAAI,YAAY,CAAC,wCAAwC,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,YAAY;YAAE,MAAM,CAAC,CAAA;QACtC,MAAM,IAAI,YAAY,CAAC,iCAAiC,CAAC,CAAA;IAC3D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5D,QAAQ,CACN,GAAG,EACH,CAAC,WAAW,CAAC,EACb,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EACjD,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CACd,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACpF,CAAA;IACH,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,YAAY,CACpB,SAAS,OAAO,mCAAmC,iBAAiB,cAAc,WAAW,EAAE,CAChG,CAAA;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;AACzB,CAAC"}
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 connection to the child's socket; at most 8 per file (LimitError). */
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 realpath and dev:ino, so a hard
24
- * link or a case variant of one file never gets two children.
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
- /** End every child: close stdin, wait, SIGTERM after 5 s. Never SIGKILL inside the write delay. */
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 { realpath, stat } from 'node:fs/promises';
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 { dialSocket } from "./bridge.js";
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 MAX_LINE = 4096;
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 realpath and dev:ino, so a hard
35
- * link or a case variant of one file never gets two children.
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 realpath(path);
50
+ const real = await nativeRealpath(path);
44
51
  const ino = await inodeOf(real);
45
- // An inode alias counts only while the other path still has that inode: an atomic save
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) ?? (aliasHolds ? alias : undefined);
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
- this.#byIno.set(ino, entry);
89
+ if (ino !== '')
90
+ this.#byIno.set(ino, entry);
74
91
  }
75
- /** End every child: close stdin, wait, SIGTERM after 5 s. Never SIGKILL inside the write delay. */
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
- socket: undefined,
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
- this.#byIno.set(ino, entry);
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
- let buf = '';
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 onLine = (line) => {
184
+ const onEvent = (payload) => {
145
185
  let ev;
146
186
  try {
147
- ev = JSON.parse(line);
187
+ ev = JSON.parse(payload.toString());
148
188
  }
149
189
  catch {
150
190
  return;
151
191
  }
152
- if (ev.event === 'listening' && typeof ev.socket === 'string' && !entry.socket) {
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 child.kill('SIGTERM');
195
+ return this.#terminate(entry);
156
196
  }
157
- entry.socket = ev.socket;
197
+ entry.listening = true;
158
198
  entry.generation = ev.generation;
159
199
  this.#emit({ type: 'started', path });
160
200
  this.#armIdle(entry);
161
- onReady(ev.socket);
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
- child.stdout.setEncoding('utf8');
210
+ let broken = false;
211
+ const frameBroke = () => {
212
+ broken = true;
213
+ this.#terminate(entry);
214
+ };
171
215
  child.stdout.on('data', (d) => {
172
- buf += d;
173
- for (let i = buf.indexOf('\n'); i >= 0; i = buf.indexOf('\n')) {
174
- const line = buf.slice(0, i);
175
- buf = buf.slice(i + 1);
176
- if (line.length > MAX_LINE)
177
- return child.kill('SIGTERM');
178
- onLine(line);
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 (buf.length > MAX_LINE)
181
- child.kill('SIGTERM');
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
- clearTimeout(entry.idle);
192
- if (this.#byPath.get(path) === entry)
193
- this.#byPath.delete(path);
194
- if (this.#byIno.get(entry.ino) === entry)
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
- setTimeout(() => entry.dead || entry.child.kill('SIGTERM'), TERM_AFTER_MS).unref();
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.socket)
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 await dialSocket(entry.socket, role, release);
309
+ return entry.streams.open(role, release);
244
310
  }
245
311
  catch (e) {
246
312
  release();
@@ -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.0",
4
- "description": "Run pedit serve for a local app: the file's Yjs document over a Unix socket, with Hono routes and a browser client",
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"