diff --git a/packages/solid/src/SolidLdoTransactionDataset.ts b/packages/solid/src/SolidLdoTransactionDataset.ts index 65bcaf9..f66265f 100644 --- a/packages/solid/src/SolidLdoTransactionDataset.ts +++ b/packages/solid/src/SolidLdoTransactionDataset.ts @@ -18,6 +18,7 @@ import type { SolidLdoDataset } from "./SolidLdoDataset"; import type { AggregateSuccess } from "./requester/results/success/SuccessResult"; import type { ResourceResult } from "./resource/resourceResult/ResourceResult"; import type { + IgnoredInvalidUpdateSuccess, UpdateDefaultGraphSuccess, UpdateSuccess, } from "./requester/results/success/UpdateSuccess"; @@ -26,7 +27,6 @@ import type { UpdateResult, UpdateResultError, } from "./requester/requests/updateDataResource"; -import { InvalidUriError } from "./requester/results/error/InvalidUriError"; import type { DatasetChanges, GraphNode } from "@ldo/rdf-utils"; import { splitChangesByGraph } from "./util/splitChangesByGraph"; @@ -112,7 +112,7 @@ export class SolidLdoTransactionDataset | AggregateSuccess< ResourceResult > - | AggregateError + | AggregateError > { const changes = this.getChanges(); const changesByGraph = splitChangesByGraph(changes); @@ -123,7 +123,7 @@ export class SolidLdoTransactionDataset const results: [ GraphNode, DatasetChanges, - UpdateResult | InvalidUriError | UpdateDefaultGraphSuccess, + UpdateResult | IgnoredInvalidUpdateSuccess | UpdateDefaultGraphSuccess, ][] = await Promise.all( Array.from(changesByGraph.entries()).map( async ([graph, datasetChanges]) => { @@ -140,14 +140,13 @@ export class SolidLdoTransactionDataset ]; } if (isContainerUri(graph.value)) { - console.log(datasetChanges.removed?.toString()); return [ graph, datasetChanges, - new InvalidUriError( - graph.value, - `Container URIs are not allowed for custom data.`, - ), + { + type: "ignoredInvalidUpdateSuccess", + isError: false, + } as IgnoredInvalidUpdateSuccess, ]; } const resource = this.getResource(graph.value as LeafUri); @@ -162,9 +161,7 @@ export class SolidLdoTransactionDataset if (errors.length > 0) { return new AggregateError( - errors.map( - (result) => result[2] as UpdateResultError | InvalidUriError, - ), + errors.map((result) => result[2] as UpdateResultError), ); } return { @@ -175,7 +172,8 @@ export class SolidLdoTransactionDataset .filter( (result): result is ResourceResult => result.type === "updateSuccess" || - result.type === "updateDefaultGraphSuccess", + result.type === "updateDefaultGraphSuccess" || + result.type === "ignoredInvalidUpdateSuccess", ), }; } diff --git a/packages/solid/src/requester/results/success/UpdateSuccess.ts b/packages/solid/src/requester/results/success/UpdateSuccess.ts index a22a06c..5b740a0 100644 --- a/packages/solid/src/requester/results/success/UpdateSuccess.ts +++ b/packages/solid/src/requester/results/success/UpdateSuccess.ts @@ -14,3 +14,11 @@ export interface UpdateSuccess extends ResourceSuccess { export interface UpdateDefaultGraphSuccess extends ResourceSuccess { type: "updateDefaultGraphSuccess"; } + +/** + * Indicates that LDO ignored an invalid update (usually because a container + * attempted an update) + */ +export interface IgnoredInvalidUpdateSuccess extends ResourceSuccess { + type: "ignoredInvalidUpdateSuccess"; +} diff --git a/packages/solid/test/Integration.test.ts b/packages/solid/test/Integration.test.ts index eda134b..e0c4433 100644 --- a/packages/solid/test/Integration.test.ts +++ b/packages/solid/test/Integration.test.ts @@ -18,6 +18,7 @@ import { import type { CreateSuccess } from "../src/requester/results/success/CreateSuccess"; import type { AggregateSuccess } from "../src/requester/results/success/SuccessResult"; import type { + IgnoredInvalidUpdateSuccess, UpdateDefaultGraphSuccess, UpdateSuccess, } from "../src/requester/results/success/UpdateSuccess"; @@ -1204,7 +1205,7 @@ describe("Integration", () => { expect(aggregateError.errors[0].type).toBe("unexpectedResourceError"); }); - it("errors when trying to update a container", async () => { + it("ignores update when trying to update a container", async () => { const badContainerQuad = createQuad( namedNode("http://example.org/#green-goblin"), namedNode("http://xmlns.com/foaf/0.1/name"), @@ -1214,13 +1215,15 @@ describe("Integration", () => { const transaction = solidLdoDataset.startTransaction(); transaction.add(badContainerQuad); const result = await transaction.commitToPod(); - expect(result.isError).toBe(true); - expect(result.type).toBe("aggregateError"); - const aggregateError = result as AggregateError< - UpdateResultError | InvalidUriError + expect(result.isError).toBe(false); + expect(result.type).toBe("aggregateSuccess"); + const aggregateSuccess = result as AggregateSuccess< + UpdateSuccess | IgnoredInvalidUpdateSuccess >; - expect(aggregateError.errors.length).toBe(1); - expect(aggregateError.errors[0].type === "invalidUriError").toBe(true); + expect(aggregateSuccess.results.length).toBe(1); + expect(aggregateSuccess.results[0].type).toBe( + "ignoredInvalidUpdateSuccess", + ); }); it("writes to the default graph without fetching", async () => {