Release Toolbox SDK 0.3.0
Verify / verify (push) Canceled after 0s

This commit is contained in:
2026-09-02 00:58:50 +02:00
parent ef2dab4b46
commit bc91659a42
18 changed files with 1225 additions and 21 deletions
+84
View File
@@ -33,6 +33,10 @@ const app = (
indexedDb: true,
crossOriginIsolated: false,
},
capabilities: {
required: ["workers"],
optional: [],
},
privacy: {
processing: "local",
fileUploads: false,
@@ -117,6 +121,86 @@ describe("v1 runtime parsing", () => {
).toThrow(/absolute HTTP\(S\) URL/u);
});
it("normalizes declared formats and capability profiles", () => {
const parsed = parseToolboxApp(
app({
io: {
accepts: [
{
mediaType: "Application/PDF",
extensions: [".PDF"],
label: "PDF",
},
],
produces: [{ mediaType: "image/*", extensions: [".png"] }],
},
capabilities: {
required: ["workers"],
optional: ["file-system-access"],
},
}),
);
expect(parsed.io?.accepts[0]).toEqual({
mediaType: "application/pdf",
extensions: [".pdf"],
label: "PDF",
});
expect(parsed.capabilities).toEqual({
required: ["workers"],
optional: ["file-system-access"],
});
});
it("rejects malformed formats and duplicate capabilities", () => {
expect(() =>
parseToolboxApp(
app({
io: {
accepts: [{ mediaType: "pdf", extensions: ["pdf"] }],
produces: [],
},
}),
),
).toThrow(/mediaType|start with a dot/u);
expect(() =>
parseToolboxApp(
app({
capabilities: { required: ["workers"], optional: ["workers"] },
}),
),
).toThrow(/already required/u);
});
it("keeps worker requirements and required capabilities consistent", () => {
const legacyManifest = app();
delete legacyManifest.capabilities;
expect(parseToolboxApp(legacyManifest).requirements.workers).toBe(true);
expect(() =>
parseToolboxApp(
app({
capabilities: { required: [], optional: ["workers"] },
}),
),
).toThrow(/required must include workers.*requirements\.workers is true/u);
expect(() =>
parseToolboxApp(
app({
requirements: {
secureContext: true,
workers: false,
indexedDb: true,
crossOriginIsolated: false,
},
capabilities: { required: ["workers"], optional: [] },
}),
),
).toThrow(
/required must not include workers.*requirements\.workers is false/u,
);
});
it("parses manifest references and external inline catalog entries", () => {
const parsed = parseToolboxCatalog(
catalog({