推进 OPFS 机器会话快照保存入口

This commit is contained in:
2026-06-14 15:03:33 +08:00
parent 2bff22e0d9
commit a829984300
4 changed files with 147 additions and 0 deletions

View File

@@ -89,6 +89,12 @@ export async function saveSessionSnapshot(sessionId, payload, options = {}) {
return snapshot;
}
export async function saveMachineSessionSnapshot(sessionId, machineId, options = {}) {
assertPlainObject(options, "machine session snapshot save options");
const payload = createMachineSessionSnapshotPayload(machineId, options);
return saveSessionSnapshot(sessionId, payload, options);
}
export async function loadSessionSnapshot(sessionId, options = {}) {
const path = sessionSnapshotPath(sessionId, options.filename);
const text = await loadTextFile(path, options.storage);

View File

@@ -17,6 +17,7 @@
import {
createMachineSessionSnapshotPayload,
loadSessionSnapshot,
saveMachineSessionSnapshot,
saveSessionSnapshot,
} from "../../runtime/opfs/snapshot-store.js";
import {
@@ -204,6 +205,42 @@ TOOL_TABLE = browser-tool.tbl
customSnapshot.metadata.source,
"custom snapshot metadata",
);
const machineSessionSnapshot = await saveMachineSessionSnapshot(
"browser-machine-session",
"browser-smoke",
{
filename: "browser-machine-snapshot.json",
parameterFilename: "browser-linuxcnc.var",
toolTableFilename: "browser-tool.tbl",
gcodeFilename: "browser-smoke.ngc",
createdAt: "2026-06-08T00:00:00.000Z",
metadata: { source: "browser-machine-session" },
},
);
const loadedMachineSessionSnapshot = await loadSessionSnapshot(
"browser-machine-session",
{ filename: "browser-machine-snapshot.json" },
);
assertEqual(
machineSessionSnapshot.payload.files.parameters,
"linuxcnc/machines/browser-smoke/browser-linuxcnc.var",
"machine session snapshot parameter file",
);
assertEqual(
machineSessionSnapshot.payload.files.toolTable,
"linuxcnc/machines/browser-smoke/browser-tool.tbl",
"machine session snapshot tool table",
);
assertEqual(
loadedMachineSessionSnapshot.payload.files.gcode,
"linuxcnc/gcode/browser-smoke.ngc",
"machine session snapshot G-code",
);
assertEqual(
loadedMachineSessionSnapshot.metadata.source,
"browser-machine-session",
"machine session snapshot metadata",
);
await assertRejects(
"browser snapshot invalid filename save",
() => saveSessionSnapshot("browser-session", {}, {

View File

@@ -19,6 +19,7 @@ import {
createMachineSessionSnapshotPayload,
createSessionSnapshot,
loadSessionSnapshot,
saveMachineSessionSnapshot,
saveSessionSnapshot,
validateSessionSnapshot,
} from "../../../runtime/opfs/snapshot-store.js";
@@ -325,6 +326,30 @@ assert.deepEqual(
}),
customSnapshot,
);
const machineSessionSnapshot = await saveMachineSessionSnapshot(
"machine-session-1",
"xyzab-tdr",
{
storage,
filename: "machine-session-snapshot.json",
gcodeFilename: "fixture.ngc",
createdAt: "2026-06-08T00:00:00.000Z",
metadata: { source: "node-machine-session" },
},
);
assertSessionSnapshotStoragePath(
"machine-session-1",
sessionSnapshotPath("machine-session-1", "machine-session-snapshot.json"),
"machine-session-snapshot.json",
);
assert.deepEqual(machineSessionSnapshot.payload, snapshotPayload);
assert.deepEqual(
await loadSessionSnapshot("machine-session-1", {
storage,
filename: "machine-session-snapshot.json",
}),
machineSessionSnapshot,
);
await saveMachineTextFiles("xyzab-tdr", {
ini: "[EMC]\nMACHINE = xyzab-tdr\n",