@vantail/api 0.1.3 → 0.1.5-dev.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/database.d.ts +123 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +127 -0
- package/dist/database.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/menu.d.ts +13 -1
- package/dist/menu.d.ts.map +1 -1
- package/dist/menu.js.map +1 -1
- package/dist/network.d.ts +250 -2
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +317 -5
- package/dist/network.js.map +1 -1
- package/dist/path.d.ts +63 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +177 -0
- package/dist/path.js.map +1 -0
- package/dist/protocol.d.ts +2 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +2 -0
- package/dist/protocol.js.map +1 -1
- package/dist/transport.d.ts +9 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +17 -0
- package/dist/transport.js.map +1 -1
- package/dist/tray.d.ts +3 -3
- package/dist/tray.d.ts.map +1 -1
- package/dist/tray.js.map +1 -1
- package/package.json +1 -1
package/dist/network.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|
package/dist/network.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { decode, encode } from "./binary.js";
|
|
2
|
-
import {
|
|
2
|
+
import { VantailError } from "./error.js";
|
|
3
|
+
import { ErrorCode } from "./protocol.js";
|
|
4
|
+
import { invoke, invokeTracked, listen } from "./transport.js";
|
|
3
5
|
/**
|
|
4
6
|
* HTTP from the runtime rather than the webview.
|
|
5
7
|
*
|
|
@@ -24,9 +26,20 @@ import { invoke } from "./transport.js";
|
|
|
24
26
|
* body: JSON.stringify({ lights: [{ on: 1, brightness: 80 }] }),
|
|
25
27
|
* });
|
|
26
28
|
* ```
|
|
29
|
+
*
|
|
30
|
+
* Every URL is checked against `permissions.network.allow` first, redirects
|
|
31
|
+
* included. An application that has to reach a host its user names at run
|
|
32
|
+
* time - an API client, a link checker - says so with `allow: ["*"]`.
|
|
27
33
|
*/
|
|
28
34
|
export const network = {
|
|
29
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Send a request and read the response as text.
|
|
37
|
+
*
|
|
38
|
+
* The body is decoded as UTF-8, and anything that is not valid UTF-8 is
|
|
39
|
+
* replaced with U+FFFD rather than failing. Use {@link network.binary} when
|
|
40
|
+
* the response might not be text, or when you need the bytes exactly;
|
|
41
|
+
* `bodyBytes` is there to tell you when the two disagree.
|
|
42
|
+
*/
|
|
30
43
|
request: async (options) => {
|
|
31
44
|
const response = await send(options, "text");
|
|
32
45
|
return { ...response, body: response.body };
|
|
@@ -41,19 +54,318 @@ export const network = {
|
|
|
41
54
|
throw new SyntaxError(`${response.url} did not return JSON (${response.status}): ${String(cause)}`);
|
|
42
55
|
}
|
|
43
56
|
},
|
|
44
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* The same, with the body as bytes.
|
|
59
|
+
*
|
|
60
|
+
* The better default for anything that is not certainly UTF-8 text: the
|
|
61
|
+
* byte count is exact and nothing is replaced on the way through.
|
|
62
|
+
*/
|
|
45
63
|
binary: async (options) => {
|
|
46
64
|
const response = await send(options, "base64");
|
|
47
65
|
return { ...response, body: decode(response.body) };
|
|
48
66
|
},
|
|
67
|
+
/**
|
|
68
|
+
* A response delivered as it arrives, as text.
|
|
69
|
+
*
|
|
70
|
+
* This is how server-sent events and long-polling are consumed from the
|
|
71
|
+
* runtime at all: `network.request` waits for the whole body, which for a
|
|
72
|
+
* stream that stays open is forever. The webview's own `EventSource` works
|
|
73
|
+
* and is the right tool when CORS allows it - this is for when it does not,
|
|
74
|
+
* and for when the request needs headers `EventSource` cannot set.
|
|
75
|
+
*
|
|
76
|
+
* ```ts
|
|
77
|
+
* const stream = await network.stream({
|
|
78
|
+
* url: `${base}/events`,
|
|
79
|
+
* headers: { authorization: `Bearer ${token}`, accept: "text/event-stream" },
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* let buffer = "";
|
|
83
|
+
* stream.onChunk((chunk) => {
|
|
84
|
+
* buffer += chunk;
|
|
85
|
+
* // SSE separates events with a blank line.
|
|
86
|
+
* const events = buffer.split("\n\n");
|
|
87
|
+
* buffer = events.pop() ?? "";
|
|
88
|
+
* for (const event of events) handle(event);
|
|
89
|
+
* });
|
|
90
|
+
* stream.onEnd(({ error }) => { if (error) retry(); });
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* Chunks are decoded as UTF-8 with any character split across a chunk
|
|
94
|
+
* boundary held back and joined to the next one, so a stream of JSON stays
|
|
95
|
+
* parseable.
|
|
96
|
+
*/
|
|
97
|
+
stream: (options) => open(options, "text", (data) => data),
|
|
98
|
+
/**
|
|
99
|
+
* The same, as bytes - for a download, or anything that is not text.
|
|
100
|
+
*
|
|
101
|
+
* The whole body never has to be held in memory at once, which is what
|
|
102
|
+
* `network.binary` cannot avoid.
|
|
103
|
+
*/
|
|
104
|
+
streamBinary: (options) => open(options, "base64", (data) => decode(data)),
|
|
105
|
+
/**
|
|
106
|
+
* A WebSocket opened by the runtime rather than the page.
|
|
107
|
+
*
|
|
108
|
+
* The webview has its own `WebSocket` and it is the right tool when it can
|
|
109
|
+
* do the job. It cannot set a header on the opening handshake, which is how
|
|
110
|
+
* most APIs authenticate one - so the token goes in the query string, where
|
|
111
|
+
* it ends up in the server's logs. This can set headers, and is not subject
|
|
112
|
+
* to the page's origin rules.
|
|
113
|
+
*
|
|
114
|
+
* ```ts
|
|
115
|
+
* const socket = await network.socket({
|
|
116
|
+
* url: "wss://api.example.com/live",
|
|
117
|
+
* headers: { authorization: `Bearer ${token}` },
|
|
118
|
+
* protocols: ["graphql-transport-ws"],
|
|
119
|
+
* });
|
|
120
|
+
*
|
|
121
|
+
* socket.onMessage((data) => {
|
|
122
|
+
* if (typeof data === "string") handle(JSON.parse(data));
|
|
123
|
+
* });
|
|
124
|
+
* socket.onClose(({ code, error }) => { if (error) reconnect(); });
|
|
125
|
+
*
|
|
126
|
+
* await socket.send(JSON.stringify({ type: "subscribe", topic }));
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* Pings are answered by the runtime, so a socket stays up without the
|
|
130
|
+
* application doing anything. Send latency is bounded at about 10ms: one
|
|
131
|
+
* thread owns the socket, and a send waits for its read to come up for air.
|
|
132
|
+
*/
|
|
133
|
+
socket: async (options) => {
|
|
134
|
+
const { signal, ...rest } = options;
|
|
135
|
+
if (signal?.aborted)
|
|
136
|
+
throw cancelled();
|
|
137
|
+
let requestId;
|
|
138
|
+
const opening = invokeTracked("network.socket", rest, (id) => {
|
|
139
|
+
requestId = id;
|
|
140
|
+
});
|
|
141
|
+
// Same two-phase shape as a stream: before the handshake completes there
|
|
142
|
+
// is no socket to close, so the request is what gets abandoned.
|
|
143
|
+
const abortHandshake = () => {
|
|
144
|
+
if (requestId === undefined)
|
|
145
|
+
return;
|
|
146
|
+
void invoke("network.cancel", { id: requestId }).catch(() => { });
|
|
147
|
+
};
|
|
148
|
+
signal?.addEventListener("abort", abortHandshake, { once: true });
|
|
149
|
+
let opened;
|
|
150
|
+
try {
|
|
151
|
+
opened = await opening;
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
signal?.removeEventListener("abort", abortHandshake);
|
|
155
|
+
}
|
|
156
|
+
const socket = connect(opened);
|
|
157
|
+
if (signal) {
|
|
158
|
+
if (signal.aborted)
|
|
159
|
+
void socket.close().catch(() => { });
|
|
160
|
+
else {
|
|
161
|
+
signal.addEventListener("abort", () => {
|
|
162
|
+
void socket.close().catch(() => { });
|
|
163
|
+
}, { once: true });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return socket;
|
|
167
|
+
},
|
|
49
168
|
};
|
|
169
|
+
function connect(opened) {
|
|
170
|
+
const { id, url, protocol } = opened;
|
|
171
|
+
const messageHandlers = new Set();
|
|
172
|
+
const closeHandlers = new Set();
|
|
173
|
+
let pending = [];
|
|
174
|
+
let closed;
|
|
175
|
+
const stopMessages = listen("network.message", (payload) => {
|
|
176
|
+
if (payload.id !== id)
|
|
177
|
+
return;
|
|
178
|
+
const data = payload.binary ? decode(payload.data) : payload.data;
|
|
179
|
+
if (messageHandlers.size === 0) {
|
|
180
|
+
pending.push(data);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
for (const handler of [...messageHandlers])
|
|
184
|
+
handler(data);
|
|
185
|
+
});
|
|
186
|
+
const stopClose = listen("network.socketClosed", (payload) => {
|
|
187
|
+
if (payload.id !== id)
|
|
188
|
+
return;
|
|
189
|
+
stopMessages();
|
|
190
|
+
stopClose();
|
|
191
|
+
closed = {
|
|
192
|
+
reason: payload.reason,
|
|
193
|
+
cancelled: payload.cancelled,
|
|
194
|
+
...(payload.code === null ? {} : { code: payload.code }),
|
|
195
|
+
...(payload.error ? { error: payload.error } : {}),
|
|
196
|
+
};
|
|
197
|
+
for (const handler of [...closeHandlers])
|
|
198
|
+
handler(closed);
|
|
199
|
+
messageHandlers.clear();
|
|
200
|
+
closeHandlers.clear();
|
|
201
|
+
});
|
|
202
|
+
return {
|
|
203
|
+
id,
|
|
204
|
+
url,
|
|
205
|
+
...(protocol ? { protocol } : {}),
|
|
206
|
+
send: (data) => invoke("network.socketSend", { id, data }),
|
|
207
|
+
sendBytes: (data) => invoke("network.socketSend", {
|
|
208
|
+
id,
|
|
209
|
+
data: encode(data),
|
|
210
|
+
binary: true,
|
|
211
|
+
}),
|
|
212
|
+
onMessage(handler) {
|
|
213
|
+
messageHandlers.add(handler);
|
|
214
|
+
if (pending.length > 0) {
|
|
215
|
+
const backlog = pending;
|
|
216
|
+
pending = [];
|
|
217
|
+
for (const message of backlog)
|
|
218
|
+
handler(message);
|
|
219
|
+
}
|
|
220
|
+
return () => messageHandlers.delete(handler);
|
|
221
|
+
},
|
|
222
|
+
onClose(handler) {
|
|
223
|
+
// Attaching after it has already closed still hears about it.
|
|
224
|
+
if (closed) {
|
|
225
|
+
handler(closed);
|
|
226
|
+
return () => { };
|
|
227
|
+
}
|
|
228
|
+
closeHandlers.add(handler);
|
|
229
|
+
return () => closeHandlers.delete(handler);
|
|
230
|
+
},
|
|
231
|
+
close: (code, reason) => invoke("network.socketClose", { id, code, reason }),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
async function open(options, responseType, decodeChunk) {
|
|
235
|
+
const { bytes, body, signal, ...rest } = options;
|
|
236
|
+
if (signal?.aborted)
|
|
237
|
+
throw cancelled();
|
|
238
|
+
const params = {
|
|
239
|
+
...rest,
|
|
240
|
+
responseType,
|
|
241
|
+
...(bytes === undefined ? {} : { bodyBase64: encode(bytes) }),
|
|
242
|
+
...(bytes === undefined && body !== undefined ? { body } : {}),
|
|
243
|
+
};
|
|
244
|
+
// Two phases, one signal. Before the head arrives there is no stream id to
|
|
245
|
+
// cancel, so the request id is what gets abandoned; afterwards it is the
|
|
246
|
+
// stream. The caller sees one `signal` and one `cancel()`.
|
|
247
|
+
let requestId;
|
|
248
|
+
const opened = invokeTracked("network.stream", params, (id) => {
|
|
249
|
+
requestId = id;
|
|
250
|
+
});
|
|
251
|
+
const abortHead = () => {
|
|
252
|
+
if (requestId === undefined)
|
|
253
|
+
return;
|
|
254
|
+
void invoke("network.cancel", { id: requestId }).catch(() => { });
|
|
255
|
+
};
|
|
256
|
+
signal?.addEventListener("abort", abortHead, { once: true });
|
|
257
|
+
let head;
|
|
258
|
+
try {
|
|
259
|
+
head = await opened;
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
signal?.removeEventListener("abort", abortHead);
|
|
263
|
+
}
|
|
264
|
+
const { id, ...rest2 } = head;
|
|
265
|
+
const stream = track(id, rest2, decodeChunk);
|
|
266
|
+
if (signal) {
|
|
267
|
+
// It may have aborted while the head was still on its way.
|
|
268
|
+
if (signal.aborted)
|
|
269
|
+
void stream.cancel().catch(() => { });
|
|
270
|
+
else {
|
|
271
|
+
signal.addEventListener("abort", () => {
|
|
272
|
+
void stream.cancel().catch(() => { });
|
|
273
|
+
}, { once: true });
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return stream;
|
|
277
|
+
}
|
|
278
|
+
function track(id, head, decodeChunk) {
|
|
279
|
+
const chunkHandlers = new Set();
|
|
280
|
+
const endHandlers = new Set();
|
|
281
|
+
// Held until somebody is listening, so the first events of a stream are not
|
|
282
|
+
// lost to an `await` between opening it and subscribing.
|
|
283
|
+
let pending = [];
|
|
284
|
+
let ended;
|
|
285
|
+
const stopChunks = listen("network.chunk", (payload) => {
|
|
286
|
+
if (payload.id !== id)
|
|
287
|
+
return;
|
|
288
|
+
const chunk = decodeChunk(payload.data);
|
|
289
|
+
if (chunkHandlers.size === 0) {
|
|
290
|
+
pending.push(chunk);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
for (const handler of [...chunkHandlers])
|
|
294
|
+
handler(chunk);
|
|
295
|
+
});
|
|
296
|
+
const stopEnd = listen("network.end", (payload) => {
|
|
297
|
+
if (payload.id !== id)
|
|
298
|
+
return;
|
|
299
|
+
stopChunks();
|
|
300
|
+
stopEnd();
|
|
301
|
+
ended = {
|
|
302
|
+
cancelled: payload.cancelled,
|
|
303
|
+
...(payload.error ? { error: payload.error } : {}),
|
|
304
|
+
};
|
|
305
|
+
for (const handler of [...endHandlers])
|
|
306
|
+
handler(ended);
|
|
307
|
+
chunkHandlers.clear();
|
|
308
|
+
endHandlers.clear();
|
|
309
|
+
});
|
|
310
|
+
return {
|
|
311
|
+
...head,
|
|
312
|
+
id,
|
|
313
|
+
onChunk(handler) {
|
|
314
|
+
chunkHandlers.add(handler);
|
|
315
|
+
// Whatever arrived before anyone was listening, in order.
|
|
316
|
+
if (pending.length > 0) {
|
|
317
|
+
const backlog = pending;
|
|
318
|
+
pending = [];
|
|
319
|
+
for (const chunk of backlog)
|
|
320
|
+
handler(chunk);
|
|
321
|
+
}
|
|
322
|
+
return () => chunkHandlers.delete(handler);
|
|
323
|
+
},
|
|
324
|
+
onEnd(handler) {
|
|
325
|
+
// Attaching after it already finished still hears about it, rather than
|
|
326
|
+
// waiting for an event that has been and gone.
|
|
327
|
+
if (ended) {
|
|
328
|
+
handler(ended);
|
|
329
|
+
return () => { };
|
|
330
|
+
}
|
|
331
|
+
endHandlers.add(handler);
|
|
332
|
+
return () => endHandlers.delete(handler);
|
|
333
|
+
},
|
|
334
|
+
cancel: () => invoke("network.cancelStream", { id }),
|
|
335
|
+
};
|
|
336
|
+
}
|
|
50
337
|
async function send(options, responseType) {
|
|
51
|
-
const { bytes, body, ...rest } = options;
|
|
52
|
-
|
|
338
|
+
const { bytes, body, signal, ...rest } = options;
|
|
339
|
+
if (signal?.aborted) {
|
|
340
|
+
throw cancelled();
|
|
341
|
+
}
|
|
342
|
+
const params = {
|
|
53
343
|
...rest,
|
|
54
344
|
responseType,
|
|
55
345
|
...(bytes === undefined ? {} : { bodyBase64: encode(bytes) }),
|
|
56
346
|
...(bytes === undefined && body !== undefined ? { body } : {}),
|
|
347
|
+
};
|
|
348
|
+
if (!signal)
|
|
349
|
+
return invoke("network.request", params);
|
|
350
|
+
let id;
|
|
351
|
+
const answered = invokeTracked("network.request", params, (sent) => {
|
|
352
|
+
id = sent;
|
|
57
353
|
});
|
|
354
|
+
const abort = () => {
|
|
355
|
+
if (id === undefined)
|
|
356
|
+
return;
|
|
357
|
+
// The runtime rejects `answered` itself, so there is nothing to do with
|
|
358
|
+
// the outcome here - including the case where the request had already
|
|
359
|
+
// finished and there was nothing left to cancel.
|
|
360
|
+
void invoke("network.cancel", { id }).catch(() => { });
|
|
361
|
+
};
|
|
362
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
363
|
+
try {
|
|
364
|
+
return await answered;
|
|
365
|
+
}
|
|
366
|
+
finally {
|
|
367
|
+
signal.removeEventListener("abort", abort);
|
|
368
|
+
}
|
|
58
369
|
}
|
|
370
|
+
const cancelled = () => new VantailError(ErrorCode.CANCELLED, "The request was cancelled");
|
|
59
371
|
//# sourceMappingURL=network.js.map
|
package/dist/network.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|
package/dist/path.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The path operations, for one platform's idea of a path.
|
|
3
|
+
*
|
|
4
|
+
* `path` is this for the platform the application is running on. `path.posix`
|
|
5
|
+
* and `path.win32` are the other two, for the times you are handling a path
|
|
6
|
+
* that came from somewhere else - a config file written on a colleague's
|
|
7
|
+
* machine, a path inside an archive.
|
|
8
|
+
*/
|
|
9
|
+
export interface PathApi {
|
|
10
|
+
/** `/` everywhere but Windows. */
|
|
11
|
+
readonly sep: "/" | "\\";
|
|
12
|
+
/**
|
|
13
|
+
* Join segments with a single separator and tidy the result.
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* path.join(await os.appDataDir(), "projects", name + ".json");
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
join(...parts: string[]): string;
|
|
20
|
+
/** Collapse `.`, `..` and repeated separators. */
|
|
21
|
+
normalize(path: string): string;
|
|
22
|
+
/** Everything before the last segment. `.` when there is nothing. */
|
|
23
|
+
dirname(path: string): string;
|
|
24
|
+
/** The last segment, optionally without a trailing `suffix`. */
|
|
25
|
+
basename(path: string, suffix?: string): string;
|
|
26
|
+
/** The extension including its dot, or `""`. A dotfile has none. */
|
|
27
|
+
extname(path: string): string;
|
|
28
|
+
/** Whether the path names a location without needing a starting point. */
|
|
29
|
+
isAbsolute(path: string): boolean;
|
|
30
|
+
/** The same operations for POSIX paths, whatever platform this is. */
|
|
31
|
+
readonly posix: PathApi;
|
|
32
|
+
/** The same operations for Windows paths, whatever platform this is. */
|
|
33
|
+
readonly win32: PathApi;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Joining and taking apart file paths, without a round trip.
|
|
37
|
+
*
|
|
38
|
+
* A webview has no `path` module, and asking the runtime per join would put
|
|
39
|
+
* an IPC call inside every directory walk - so every application that touches
|
|
40
|
+
* more than one file ends up rewriting `join`, `dirname` and `basename`, and
|
|
41
|
+
* getting the Windows separator subtly wrong. This is that code, once.
|
|
42
|
+
*
|
|
43
|
+
* These are string operations. Nothing here touches the filesystem, so
|
|
44
|
+
* nothing here needs a permission: `path.join` will happily build a path the
|
|
45
|
+
* application is not allowed to read, and `filesystem` will then refuse it.
|
|
46
|
+
*
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { os, path, filesystem } from "@vantail/api";
|
|
49
|
+
*
|
|
50
|
+
* const file = path.join(await os.appDataDir(), "projects", "notes.md");
|
|
51
|
+
* path.basename(file); // "notes.md"
|
|
52
|
+
* path.basename(file, ".md"); // "notes"
|
|
53
|
+
* path.extname(file); // ".md"
|
|
54
|
+
* path.dirname(file); // ".../projects"
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* There is deliberately no `resolve`: a webview has no current working
|
|
58
|
+
* directory to resolve against. Start from `os.appDataDir()`,
|
|
59
|
+
* `os.homeDir()` or a path the user picked in a dialog, which is also the
|
|
60
|
+
* only kind of path `filesystem` will accept.
|
|
61
|
+
*/
|
|
62
|
+
export declare const path: PathApi;
|
|
63
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,kCAAkC;IAClC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAEzB;;;;;;OAMG;IACH,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEjC,kDAAkD;IAClD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhC,qEAAqE;IACrE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAE9B,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhD,oEAAoE;IACpE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAE9B,0EAA0E;IAC1E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAElC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAgLD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,IAAI,EAAE,OACoC,CAAC"}
|
package/dist/path.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { os } from "./os.js";
|
|
2
|
+
const NONE = { raw: "", prefix: "", absolute: false };
|
|
3
|
+
function flavour(sep) {
|
|
4
|
+
const win = sep === "\\";
|
|
5
|
+
const splitter = win ? /[\\/]+/ : /\/+/;
|
|
6
|
+
const trailing = win ? /[\\/]+$/ : /\/+$/;
|
|
7
|
+
const isSep = (char) => char === "/" || (win && char === "\\");
|
|
8
|
+
const lastSep = (text) => win
|
|
9
|
+
? Math.max(text.lastIndexOf("\\"), text.lastIndexOf("/"))
|
|
10
|
+
: text.lastIndexOf("/");
|
|
11
|
+
function rootOf(path) {
|
|
12
|
+
if (!win) {
|
|
13
|
+
return path.startsWith("/")
|
|
14
|
+
? { raw: "/", prefix: "/", absolute: true }
|
|
15
|
+
: NONE;
|
|
16
|
+
}
|
|
17
|
+
// `\\server\share`, which is a root in its own right - the server and the
|
|
18
|
+
// share are not segments you can `..` your way out of.
|
|
19
|
+
const unc = /^[\\/]{2}([^\\/]+)[\\/]+([^\\/]+)[\\/]?/.exec(path);
|
|
20
|
+
if (unc) {
|
|
21
|
+
return {
|
|
22
|
+
raw: unc[0],
|
|
23
|
+
prefix: `\\\\${unc[1]}\\${unc[2]}\\`,
|
|
24
|
+
absolute: true,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const drive = /^[a-zA-Z]:[\\/]/.exec(path);
|
|
28
|
+
if (drive) {
|
|
29
|
+
return { raw: drive[0], prefix: `${path.slice(0, 2)}\\`, absolute: true };
|
|
30
|
+
}
|
|
31
|
+
// `C:file` is relative to whatever the current directory on C: is, which
|
|
32
|
+
// makes it a prefix but not an absolute path.
|
|
33
|
+
if (/^[a-zA-Z]:/.test(path)) {
|
|
34
|
+
return { raw: path.slice(0, 2), prefix: path.slice(0, 2), absolute: false };
|
|
35
|
+
}
|
|
36
|
+
// `\file` is absolute on the current drive.
|
|
37
|
+
if (/^[\\/]/.test(path)) {
|
|
38
|
+
return { raw: path.slice(0, 1), prefix: "\\", absolute: true };
|
|
39
|
+
}
|
|
40
|
+
return NONE;
|
|
41
|
+
}
|
|
42
|
+
function isAbsolute(path) {
|
|
43
|
+
return rootOf(path).absolute;
|
|
44
|
+
}
|
|
45
|
+
function normalize(path) {
|
|
46
|
+
if (path === "")
|
|
47
|
+
return ".";
|
|
48
|
+
const root = rootOf(path);
|
|
49
|
+
const parts = [];
|
|
50
|
+
for (const segment of path.slice(root.raw.length).split(splitter)) {
|
|
51
|
+
if (segment === "" || segment === ".")
|
|
52
|
+
continue;
|
|
53
|
+
if (segment === "..") {
|
|
54
|
+
// Climbing out of an absolute root goes nowhere, the way the
|
|
55
|
+
// filesystem itself treats `/..`.
|
|
56
|
+
if (parts.length > 0 && parts[parts.length - 1] !== "..")
|
|
57
|
+
parts.pop();
|
|
58
|
+
else if (!root.absolute)
|
|
59
|
+
parts.push("..");
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
parts.push(segment);
|
|
63
|
+
}
|
|
64
|
+
let out = parts.join(sep);
|
|
65
|
+
// A trailing separator is how a path says "this is a directory", so it
|
|
66
|
+
// survives.
|
|
67
|
+
if (out !== "" && trailing.test(path))
|
|
68
|
+
out += sep;
|
|
69
|
+
if (out === "")
|
|
70
|
+
return root.prefix === "" ? "." : root.prefix;
|
|
71
|
+
return root.prefix + out;
|
|
72
|
+
}
|
|
73
|
+
function join(...parts) {
|
|
74
|
+
const joined = parts.filter((part) => part !== "").join(sep);
|
|
75
|
+
return joined === "" ? "." : normalize(joined);
|
|
76
|
+
}
|
|
77
|
+
function dirname(path) {
|
|
78
|
+
if (path === "")
|
|
79
|
+
return ".";
|
|
80
|
+
// A slice rather than a rebuild, so the separators the caller wrote come
|
|
81
|
+
// back unchanged - `dirname("C:/foo/bar")` is `"C:/foo"`, not
|
|
82
|
+
// `"C:\\foo"`. Only `normalize` is in the business of tidying.
|
|
83
|
+
const rootEnd = rootOf(path).raw.length;
|
|
84
|
+
// Trailing separators are not the cut: `dirname("foo/bar/")` is `"foo"`.
|
|
85
|
+
let end = path.length;
|
|
86
|
+
while (end > rootEnd && isSep(path[end - 1]))
|
|
87
|
+
end -= 1;
|
|
88
|
+
let at = -1;
|
|
89
|
+
for (let i = end - 1; i >= rootEnd; i -= 1) {
|
|
90
|
+
if (isSep(path[i])) {
|
|
91
|
+
at = i;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Nothing but a single name after the root: the answer is the root, or
|
|
96
|
+
// "here" when there was no root at all.
|
|
97
|
+
if (at < 0)
|
|
98
|
+
return rootEnd === 0 ? "." : path.slice(0, rootEnd);
|
|
99
|
+
return path.slice(0, at);
|
|
100
|
+
}
|
|
101
|
+
function basename(path, suffix) {
|
|
102
|
+
// Asking for the name of a path that is nothing but the suffix leaves
|
|
103
|
+
// nothing, which is what Node answers too.
|
|
104
|
+
if (suffix !== undefined && suffix !== "" && suffix === path)
|
|
105
|
+
return "";
|
|
106
|
+
const rest = path.replace(trailing, "");
|
|
107
|
+
const at = lastSep(rest);
|
|
108
|
+
let name = at < 0 ? rest : rest.slice(at + 1);
|
|
109
|
+
// A bare drive is a root, not a name.
|
|
110
|
+
if (win && /^[a-zA-Z]:$/.test(name))
|
|
111
|
+
name = "";
|
|
112
|
+
if (suffix !== undefined &&
|
|
113
|
+
suffix !== "" &&
|
|
114
|
+
name !== suffix &&
|
|
115
|
+
name.endsWith(suffix)) {
|
|
116
|
+
name = name.slice(0, -suffix.length);
|
|
117
|
+
}
|
|
118
|
+
return name;
|
|
119
|
+
}
|
|
120
|
+
function extname(path) {
|
|
121
|
+
const name = basename(path);
|
|
122
|
+
const at = name.lastIndexOf(".");
|
|
123
|
+
// `0` is a dotfile - `.gitignore` is a name, not an extension.
|
|
124
|
+
if (at <= 0)
|
|
125
|
+
return "";
|
|
126
|
+
return name.slice(at);
|
|
127
|
+
}
|
|
128
|
+
const api = {
|
|
129
|
+
sep,
|
|
130
|
+
join,
|
|
131
|
+
normalize,
|
|
132
|
+
dirname,
|
|
133
|
+
basename,
|
|
134
|
+
extname,
|
|
135
|
+
isAbsolute,
|
|
136
|
+
};
|
|
137
|
+
return api;
|
|
138
|
+
}
|
|
139
|
+
const posix = flavour("/");
|
|
140
|
+
const win32 = flavour("\\");
|
|
141
|
+
// Each flavour can reach the other two, so `path.posix.join` works whichever
|
|
142
|
+
// one `path` turned out to be.
|
|
143
|
+
for (const api of [posix, win32]) {
|
|
144
|
+
Object.defineProperties(api, {
|
|
145
|
+
posix: { value: posix, enumerable: true },
|
|
146
|
+
win32: { value: win32, enumerable: true },
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Joining and taking apart file paths, without a round trip.
|
|
151
|
+
*
|
|
152
|
+
* A webview has no `path` module, and asking the runtime per join would put
|
|
153
|
+
* an IPC call inside every directory walk - so every application that touches
|
|
154
|
+
* more than one file ends up rewriting `join`, `dirname` and `basename`, and
|
|
155
|
+
* getting the Windows separator subtly wrong. This is that code, once.
|
|
156
|
+
*
|
|
157
|
+
* These are string operations. Nothing here touches the filesystem, so
|
|
158
|
+
* nothing here needs a permission: `path.join` will happily build a path the
|
|
159
|
+
* application is not allowed to read, and `filesystem` will then refuse it.
|
|
160
|
+
*
|
|
161
|
+
* ```ts
|
|
162
|
+
* import { os, path, filesystem } from "@vantail/api";
|
|
163
|
+
*
|
|
164
|
+
* const file = path.join(await os.appDataDir(), "projects", "notes.md");
|
|
165
|
+
* path.basename(file); // "notes.md"
|
|
166
|
+
* path.basename(file, ".md"); // "notes"
|
|
167
|
+
* path.extname(file); // ".md"
|
|
168
|
+
* path.dirname(file); // ".../projects"
|
|
169
|
+
* ```
|
|
170
|
+
*
|
|
171
|
+
* There is deliberately no `resolve`: a webview has no current working
|
|
172
|
+
* directory to resolve against. Start from `os.appDataDir()`,
|
|
173
|
+
* `os.homeDir()` or a path the user picked in a dialog, which is also the
|
|
174
|
+
* only kind of path `filesystem` will accept.
|
|
175
|
+
*/
|
|
176
|
+
export const path = os.infoSync()?.platform === "windows" ? win32 : posix;
|
|
177
|
+
//# sourceMappingURL=path.js.map
|
package/dist/path.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"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"}
|
package/dist/protocol.d.ts
CHANGED
|
@@ -40,6 +40,8 @@ export declare const ErrorCode: {
|
|
|
40
40
|
readonly INVALID_UTF8: "INVALID_UTF8";
|
|
41
41
|
readonly UNSUPPORTED: "UNSUPPORTED";
|
|
42
42
|
readonly INTERNAL: "INTERNAL";
|
|
43
|
+
/** The caller abandoned the request before it answered. */
|
|
44
|
+
readonly CANCELLED: "CANCELLED";
|
|
43
45
|
};
|
|
44
46
|
export type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];
|
|
45
47
|
/** The object the runtime injects before any page script runs. */
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAEpE,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,GACvB,OAAO,IAAI,mBAAmB,CAEhC;AAED,8EAA8E;AAC9E,eAAO,MAAM,SAAS;aACpB,UAAU,EAAE,YAAY;aACxB,cAAc,EAAE,gBAAgB;aAChC,cAAc,EAAE,gBAAgB;aAChC,iBAAiB,EAAE,mBAAmB;aACtC,SAAS,EAAE,WAAW;aACtB,cAAc,EAAE,gBAAgB;aAChC,QAAQ,EAAE,UAAU;aACpB,YAAY,EAAE,cAAc;aAC5B,WAAW,EAAE,aAAa;aAC1B,QAAQ,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAEpE,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,GACvB,OAAO,IAAI,mBAAmB,CAEhC;AAED,8EAA8E;AAC9E,eAAO,MAAM,SAAS;aACpB,UAAU,EAAE,YAAY;aACxB,cAAc,EAAE,gBAAgB;aAChC,cAAc,EAAE,gBAAgB;aAChC,iBAAiB,EAAE,mBAAmB;aACtC,SAAS,EAAE,WAAW;aACtB,cAAc,EAAE,gBAAgB;aAChC,QAAQ,EAAE,UAAU;aACpB,YAAY,EAAE,cAAc;aAC5B,WAAW,EAAE,aAAa;aAC1B,QAAQ,EAAE,UAAU;IACpB,2DAA2D;aAC3D,SAAS,EAAE,WAAW;CACd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC3C,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACrE;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,WAAW,CAAC,EAAE,aAAa,CAAC;KAC7B;CACF"}
|