@pyric/cli 0.1.0-alpha.12 → 0.1.0-alpha.14
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/cli/serve.js +5 -5
- package/dist/cli/serve.js.map +1 -1
- package/dist/serve/bundler.d.ts +15 -8
- package/dist/serve/bundler.d.ts.map +1 -1
- package/dist/serve/bundler.js +38 -37
- package/dist/serve/bundler.js.map +1 -1
- package/dist/serve/docs-ui/docs/_rhythm/index.html +1 -1
- package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +1 -1
- package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +1 -1
- package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +1 -1
- package/dist/serve/docs-ui/docs/ai-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/api-reference/index.html +1 -1
- package/dist/serve/docs-ui/docs/app-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/auth-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/ai-logic/index.html +44 -22
- package/dist/serve/docs-ui/docs/build/ai-logic.md +69 -21
- package/dist/serve/docs-ui/docs/build/authentication/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/realtime-database/index.html +1 -1
- package/dist/serve/docs-ui/docs/conformance-scores/index.html +1 -1
- package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/database-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/firestore-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +2 -1
- package/dist/serve/docs-ui/docs/get-started/how-the-swap-works.md +2 -0
- package/dist/serve/docs-ui/docs/get-started/start-building/index.html +3 -2
- package/dist/serve/docs-ui/docs/get-started/start-building.md +3 -1
- package/dist/serve/docs-ui/docs/index.json +149 -4
- package/dist/serve/docs-ui/docs/messaging-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/observe/resolve-runtime-status/index.html +28 -0
- package/dist/serve/docs-ui/docs/observe/resolve-runtime-status.md +47 -0
- package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +1 -1
- package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +1 -1
- package/dist/serve/docs-ui/docs/overview/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-messaging-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +38 -11
- package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +26 -8
- package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +11 -8
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +17 -4
- package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/rules-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +1 -1
- package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +1 -1
- package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +1 -1
- package/dist/serve/docs-ui/docs/storage-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +1 -1
- package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +1 -1
- package/dist/serve/docs-ui/docs/tutorial/index.html +429 -0
- package/dist/serve/docs-ui/docs/tutorial.md +701 -0
- package/dist/serve/docs-ui/llms.txt +2 -0
- package/dist/serve/entries/init.d.ts.map +1 -1
- package/dist/serve/entries/init.js +3 -0
- package/dist/serve/entries/init.js.map +1 -1
- package/dist/serve/entries/runtime.d.ts.map +1 -1
- package/dist/serve/entries/runtime.js +20 -5
- package/dist/serve/entries/runtime.js.map +1 -1
- package/dist/serve/entries/worker-runtime.d.ts +2 -2
- package/dist/serve/entries/worker-runtime.d.ts.map +1 -1
- package/dist/serve/entries/worker-runtime.js +45 -10
- package/dist/serve/entries/worker-runtime.js.map +1 -1
- package/dist/serve/runtime/chip-config.d.ts +19 -0
- package/dist/serve/runtime/chip-config.d.ts.map +1 -0
- package/dist/serve/runtime/chip-config.js +19 -0
- package/dist/serve/runtime/chip-config.js.map +1 -0
- package/dist/serve/runtime/chip-install.d.ts +10 -0
- package/dist/serve/runtime/chip-install.d.ts.map +1 -0
- package/dist/serve/runtime/chip-install.js +15 -0
- package/dist/serve/runtime/chip-install.js.map +1 -0
- package/dist/serve/runtime/chip.d.ts +17 -0
- package/dist/serve/runtime/chip.d.ts.map +1 -0
- package/dist/serve/runtime/chip.js +257 -0
- package/dist/serve/runtime/chip.js.map +1 -0
- package/dist/serve/runtime/manifest.d.ts +22 -0
- package/dist/serve/runtime/manifest.d.ts.map +1 -0
- package/dist/serve/runtime/manifest.js +20 -0
- package/dist/serve/runtime/manifest.js.map +1 -0
- package/dist/serve/runtime/status.d.ts +49 -0
- package/dist/serve/runtime/status.d.ts.map +1 -0
- package/dist/serve/runtime/status.js +164 -0
- package/dist/serve/runtime/status.js.map +1 -0
- package/dist/serve/runtime/worker-connection.d.ts +4 -0
- package/dist/serve/runtime/worker-connection.d.ts.map +1 -0
- package/dist/serve/runtime/worker-connection.js +11 -0
- package/dist/serve/runtime/worker-connection.js.map +1 -0
- package/dist/serve/runtime/worker-generation.d.ts +22 -0
- package/dist/serve/runtime/worker-generation.d.ts.map +1 -0
- package/dist/serve/runtime/worker-generation.js +77 -0
- package/dist/serve/runtime/worker-generation.js.map +1 -0
- package/dist/serve/runtime/worker-replacement.d.ts +18 -0
- package/dist/serve/runtime/worker-replacement.d.ts.map +1 -0
- package/dist/serve/runtime/worker-replacement.js +29 -0
- package/dist/serve/runtime/worker-replacement.js.map +1 -0
- package/dist/serve/standalone-assets.d.ts +2 -2
- package/dist/serve/standalone-assets.d.ts.map +1 -1
- package/dist/serve/standalone-assets.js +1 -1
- package/dist/serve/standalone-assets.js.map +1 -1
- package/dist/serve/studio-ui/assets/{RulesCodeEditor-CxVYcZXw.js → RulesCodeEditor-BDlH-5lp.js} +1 -1
- package/dist/serve/studio-ui/assets/{index-cpSfgQ7H.js → index-Bf9SSE8L.js} +5 -5
- package/dist/serve/studio-ui/assets/{seed-DeuFKi4J.js → seed-D_UjxfOU.js} +1 -1
- package/dist/serve/studio-ui/index.html +1 -1
- package/dist/serve/vite-ai-config.d.ts +27 -0
- package/dist/serve/vite-ai-config.d.ts.map +1 -0
- package/dist/serve/vite-ai-config.js +49 -0
- package/dist/serve/vite-ai-config.js.map +1 -0
- package/dist/serve/vite-plugin.d.ts +17 -36
- package/dist/serve/vite-plugin.d.ts.map +1 -1
- package/dist/serve/vite-plugin.js +38 -57
- package/dist/serve/vite-plugin.js.map +1 -1
- package/dist/serve/vite-rules-source.d.ts +8 -0
- package/dist/serve/vite-rules-source.d.ts.map +1 -0
- package/dist/serve/vite-rules-source.js +23 -0
- package/dist/serve/vite-rules-source.js.map +1 -0
- package/dist/serve/vite-worker-runtime.d.ts +20 -0
- package/dist/serve/vite-worker-runtime.d.ts.map +1 -0
- package/dist/serve/vite-worker-runtime.js +29 -0
- package/dist/serve/vite-worker-runtime.js.map +1 -0
- package/dist/serve/worker/client/connection.d.ts +7 -2
- package/dist/serve/worker/client/connection.d.ts.map +1 -1
- package/dist/serve/worker/client/connection.js +13 -16
- package/dist/serve/worker/client/connection.js.map +1 -1
- package/dist/serve/worker/client/core.d.ts +7 -0
- package/dist/serve/worker/client/core.d.ts.map +1 -1
- package/dist/serve/worker/client/core.js +28 -0
- package/dist/serve/worker/client/core.js.map +1 -1
- package/dist/serve/worker/client/runtime-control.d.ts +8 -0
- package/dist/serve/worker/client/runtime-control.d.ts.map +1 -0
- package/dist/serve/worker/client/runtime-control.js +11 -0
- package/dist/serve/worker/client/runtime-control.js.map +1 -0
- package/dist/serve/worker/entry.js +44 -2
- package/dist/serve/worker/entry.js.map +1 -1
- package/dist/serve/worker/host/studio.js +1 -1
- package/dist/serve/worker/host/studio.js.map +1 -1
- package/dist/serve/worker/host-context.d.ts +1 -1
- package/dist/serve/worker/host-context.d.ts.map +1 -1
- package/dist/serve/worker/protocol.d.ts +15 -1
- package/dist/serve/worker/protocol.d.ts.map +1 -1
- package/dist/serve/worker/protocol.js.map +1 -1
- package/dist/serve/worker/retirement.d.ts +21 -0
- package/dist/serve/worker/retirement.d.ts.map +1 -0
- package/dist/serve/worker/retirement.js +97 -0
- package/dist/serve/worker/retirement.js.map +1 -0
- package/dist/serve/worker/serve-init.d.ts.map +1 -1
- package/dist/serve/worker/serve-init.js +5 -6
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/dist/vite.d.ts +1 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js.map +1 -1
- package/package.json +5 -4
- package/src/cli/serve.ts +5 -5
- package/src/serve/bundler.ts +49 -16
- package/src/serve/entries/init.ts +3 -0
- package/src/serve/entries/runtime.ts +23 -7
- package/src/serve/entries/worker-runtime.ts +69 -9
- package/src/serve/runtime/chip-config.ts +30 -0
- package/src/serve/runtime/chip-install.ts +27 -0
- package/src/serve/runtime/chip.ts +282 -0
- package/src/serve/runtime/manifest.ts +37 -0
- package/src/serve/runtime/status.ts +216 -0
- package/src/serve/runtime/worker-connection.ts +14 -0
- package/src/serve/runtime/worker-generation.ts +97 -0
- package/src/serve/runtime/worker-replacement.ts +42 -0
- package/src/serve/standalone-assets.ts +2 -2
- package/src/serve/vite-ai-config.ts +85 -0
- package/src/serve/vite-plugin.ts +61 -87
- package/src/serve/vite-rules-source.ts +28 -0
- package/src/serve/vite-worker-runtime.ts +58 -0
- package/src/serve/worker/client/connection.ts +29 -4
- package/src/serve/worker/client/core.ts +34 -0
- package/src/serve/worker/client/runtime-control.ts +22 -0
- package/src/serve/worker/entry.ts +46 -2
- package/src/serve/worker/host/studio.ts +1 -1
- package/src/serve/worker/host-context.ts +1 -1
- package/src/serve/worker/protocol.ts +13 -1
- package/src/serve/worker/retirement.ts +125 -0
- package/src/serve/worker/serve-init.ts +5 -6
- package/src/vite.ts +1 -0
|
@@ -482,6 +482,8 @@ export type OpMessage = (
|
|
|
482
482
|
| { t: 'op'; id: string; method: 'ai.countTokens'; model: string; request: Record<string, unknown>; engine?: AiEngineConfigWire }
|
|
483
483
|
// Staleness guard: report the worker's baked build version so the page can
|
|
484
484
|
// warn when a still-running OLD worker serves code older than what's served.
|
|
485
|
+
| { t: 'op'; id: string; method: 'getRuntimeEpoch' }
|
|
486
|
+
| { t: 'op'; id: string; method: 'retireRuntime'; targetEpoch: string }
|
|
485
487
|
| { t: 'op'; id: string; method: 'getVersion' }
|
|
486
488
|
// ── Phase 2 (transfer): export/import the FULL sandbox state as a bundle
|
|
487
489
|
// string (the chunk format the persist layer uses). importState CLOBBERS. ──
|
|
@@ -914,7 +916,17 @@ export interface EventStreamMessage {
|
|
|
914
916
|
events: readonly SandboxEvent[];
|
|
915
917
|
}
|
|
916
918
|
|
|
917
|
-
|
|
919
|
+
/** The retiring worker tells every connected page to reload after it drains. */
|
|
920
|
+
export interface RuntimeReloadMessage {
|
|
921
|
+
t: 'runtime-reload';
|
|
922
|
+
epoch: string;
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
export type OutboundMessage =
|
|
926
|
+
| ResMessage
|
|
927
|
+
| SnapMessage
|
|
928
|
+
| EventStreamMessage
|
|
929
|
+
| RuntimeReloadMessage;
|
|
918
930
|
|
|
919
931
|
// ─── Serialized document data ─────────────────────────────────────────────
|
|
920
932
|
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
interface RetirementPort {
|
|
2
|
+
postMessage(message: unknown): void;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
interface WorkerRetirementOptions {
|
|
6
|
+
closeWorker(): void;
|
|
7
|
+
beforeAnnounce?(): Promise<void>;
|
|
8
|
+
drainTimeoutMs?: number;
|
|
9
|
+
schedule?: (run: () => void) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface WorkerRetirement {
|
|
13
|
+
connect(port: RetirementPort): void;
|
|
14
|
+
disconnect(port: RetirementPort): void;
|
|
15
|
+
track(port: RetirementPort, work: Promise<void>): void;
|
|
16
|
+
trackDetached(work: Promise<void>): void;
|
|
17
|
+
accepting(): boolean;
|
|
18
|
+
retire(requester: RetirementPort, requestId: string, targetEpoch: string): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Drain already-accepted port work before every page reloads onto a new worker. */
|
|
22
|
+
export function createWorkerRetirement(options: WorkerRetirementOptions): WorkerRetirement {
|
|
23
|
+
const ports = new Set<RetirementPort>();
|
|
24
|
+
const workByPort = new Map<RetirementPort, Promise<void>>();
|
|
25
|
+
const detachedWork = new Set<Promise<void>>();
|
|
26
|
+
const requests: Array<{ requester: RetirementPort; requestId: string }> = [];
|
|
27
|
+
const schedule = options.schedule ?? ((run) => { setTimeout(run, 50); });
|
|
28
|
+
const drainTimeoutMs = options.drainTimeoutMs ?? 10_000;
|
|
29
|
+
let retiring = false;
|
|
30
|
+
let announced = false;
|
|
31
|
+
let announcedEpoch: string | null = null;
|
|
32
|
+
let retirement: Promise<void> | null = null;
|
|
33
|
+
|
|
34
|
+
const timeout = (work: Promise<void>): Promise<void> => new Promise((resolve, reject) => {
|
|
35
|
+
const timer = setTimeout(
|
|
36
|
+
() => reject(new Error(`Worker retirement drain timed out after ${drainTimeoutMs}ms.`)),
|
|
37
|
+
drainTimeoutMs,
|
|
38
|
+
);
|
|
39
|
+
void work.then(
|
|
40
|
+
() => { clearTimeout(timer); resolve(); },
|
|
41
|
+
(error) => { clearTimeout(timer); reject(error); },
|
|
42
|
+
);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
const failRequests = (error: Error): void => {
|
|
46
|
+
for (const request of requests.splice(0)) {
|
|
47
|
+
request.requester.postMessage({
|
|
48
|
+
t: 'res', id: request.requestId, ok: false,
|
|
49
|
+
error: { code: 'pyric/worker-retirement-timeout', message: error.message },
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
connect(port) {
|
|
56
|
+
ports.add(port);
|
|
57
|
+
if (announcedEpoch) {
|
|
58
|
+
port.postMessage({ t: 'runtime-reload', epoch: announcedEpoch });
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
disconnect(port) {
|
|
62
|
+
ports.delete(port);
|
|
63
|
+
},
|
|
64
|
+
track(port, work) {
|
|
65
|
+
workByPort.set(port, work);
|
|
66
|
+
const settled = (): void => {
|
|
67
|
+
if (workByPort.get(port) === work) workByPort.delete(port);
|
|
68
|
+
};
|
|
69
|
+
void work.then(settled, settled);
|
|
70
|
+
},
|
|
71
|
+
trackDetached(work) {
|
|
72
|
+
detachedWork.add(work);
|
|
73
|
+
void work.then(
|
|
74
|
+
() => { detachedWork.delete(work); },
|
|
75
|
+
() => { detachedWork.delete(work); },
|
|
76
|
+
);
|
|
77
|
+
},
|
|
78
|
+
accepting: () => !retiring,
|
|
79
|
+
async retire(requester, requestId, targetEpoch) {
|
|
80
|
+
if (!/^[a-f0-9]{16}$/.test(targetEpoch)) {
|
|
81
|
+
requester.postMessage({
|
|
82
|
+
t: 'res', id: requestId, ok: false,
|
|
83
|
+
error: { code: 'pyric/invalid-worker-epoch', message: 'Invalid replacement worker epoch.' },
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (announced) {
|
|
88
|
+
requester.postMessage({
|
|
89
|
+
t: 'res', id: requestId, ok: true, value: { retiring: true },
|
|
90
|
+
});
|
|
91
|
+
requester.postMessage({ t: 'runtime-reload', epoch: announcedEpoch! });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
requests.push({ requester, requestId });
|
|
95
|
+
if (!retirement) {
|
|
96
|
+
retiring = true;
|
|
97
|
+
const acceptedWork = [...workByPort.values(), ...detachedWork];
|
|
98
|
+
const attempt = { cancelled: false };
|
|
99
|
+
retirement = timeout((async () => {
|
|
100
|
+
await Promise.allSettled(acceptedWork);
|
|
101
|
+
if (attempt.cancelled) return;
|
|
102
|
+
await options.beforeAnnounce?.();
|
|
103
|
+
if (attempt.cancelled) return;
|
|
104
|
+
for (const request of requests.splice(0)) {
|
|
105
|
+
request.requester.postMessage({
|
|
106
|
+
t: 'res', id: request.requestId, ok: true, value: { retiring: true },
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
announced = true;
|
|
110
|
+
announcedEpoch = targetEpoch;
|
|
111
|
+
for (const port of ports) {
|
|
112
|
+
port.postMessage({ t: 'runtime-reload', epoch: targetEpoch });
|
|
113
|
+
}
|
|
114
|
+
schedule(options.closeWorker);
|
|
115
|
+
})()).catch((error: unknown) => {
|
|
116
|
+
attempt.cancelled = true;
|
|
117
|
+
retiring = false;
|
|
118
|
+
retirement = null;
|
|
119
|
+
failRequests(error instanceof Error ? error : new Error(String(error)));
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
await retirement;
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
@@ -263,7 +263,7 @@ export function applyServeInit(
|
|
|
263
263
|
const debounceMs = payload.capture ? (env.captureDebounceMs ?? 400) : 0;
|
|
264
264
|
let timer: ReturnType<typeof setTimeout> | null = null;
|
|
265
265
|
|
|
266
|
-
const flush = (): void => {
|
|
266
|
+
const flush = async (): Promise<void> => {
|
|
267
267
|
const rtdb = ctx.rtdb ??= getDatabase(ctx.sandbox);
|
|
268
268
|
const rtdbState =
|
|
269
269
|
payload.databaseRules || ctx.sandbox.history().some((event) => event.service === 'rtdb')
|
|
@@ -286,8 +286,7 @@ export function applyServeInit(
|
|
|
286
286
|
}));
|
|
287
287
|
// Relative URL resolves against the worker script's origin (same origin
|
|
288
288
|
// as the page). Fire-and-forget — capture failures never break ops.
|
|
289
|
-
env
|
|
290
|
-
.fetch('/__pyric/capture', {
|
|
289
|
+
await env.fetch('/__pyric/capture', {
|
|
291
290
|
method: 'POST',
|
|
292
291
|
headers: { 'content-type': 'application/json' },
|
|
293
292
|
body,
|
|
@@ -297,7 +296,7 @@ export function applyServeInit(
|
|
|
297
296
|
|
|
298
297
|
const unsub = ctx.sandbox.onEvent(() => {
|
|
299
298
|
if (timer) clearTimeout(timer);
|
|
300
|
-
timer = setTimeout(flush, debounceMs);
|
|
299
|
+
timer = setTimeout(() => { void flush(); }, debounceMs);
|
|
301
300
|
});
|
|
302
301
|
|
|
303
302
|
result.captureEnabled = true;
|
|
@@ -308,12 +307,12 @@ export function applyServeInit(
|
|
|
308
307
|
// the next boot's `hydrateEventHistory` would prime them straight back
|
|
309
308
|
// into Traffic. Bypasses the debounce; cancels any pending flush (it
|
|
310
309
|
// would only re-write the same post-reset history).
|
|
311
|
-
ctx.captureFlush = (): void => {
|
|
310
|
+
ctx.captureFlush = async (): Promise<void> => {
|
|
312
311
|
if (timer) {
|
|
313
312
|
clearTimeout(timer);
|
|
314
313
|
timer = null;
|
|
315
314
|
}
|
|
316
|
-
flush();
|
|
315
|
+
await flush();
|
|
317
316
|
};
|
|
318
317
|
result.dispose = (): void => {
|
|
319
318
|
if (timer) clearTimeout(timer);
|
package/src/vite.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export { pyric } from './serve/vite-plugin.js';
|
|
10
10
|
export type { PyricOptions } from './serve/vite-plugin.js';
|
|
11
|
+
export type { PyricRuntimeChipOption } from './serve/runtime/chip-config.js';
|
|
11
12
|
|
|
12
13
|
// The benign node-builtin shims serve's bundler and this plugin apply when
|
|
13
14
|
// bundling pyric's browser graph (`fs`/`path`/`url` reached via the rules
|