Builds after update refactor

main
Jackson Morgan 6 months ago
parent 8dd341bb87
commit 81aa841f6b
  1. 4
      packages/connected-solid/src/SolidConnectedPlugin.ts
  2. 3
      packages/connected-solid/src/requester/requests/createDataResource.ts
  3. 3
      packages/connected-solid/src/requester/requests/readResource.ts
  4. 3
      packages/connected-solid/src/requester/requests/updateDataResource.ts
  5. 6
      packages/connected-solid/src/requester/results/success/SolidReadSuccess.ts
  6. 14
      packages/connected-solid/src/resources/SolidContainer.ts
  7. 44
      packages/connected-solid/src/resources/SolidLeaf.ts
  8. 25
      packages/connected-solid/src/resources/SolidResource.ts
  9. 5
      packages/connected/src/ConnectedContext.ts
  10. 8
      packages/connected/src/ConnectedLdoDataset.ts
  11. 13
      packages/connected/src/ConnectedLdoTransactionDataset.ts
  12. 6
      packages/connected/src/ConnectedPlugin.ts
  13. 2
      packages/connected/src/InvalidIdentifierResource.ts
  14. 11
      packages/connected/src/Resource.ts
  15. 2
      packages/connected/src/index.ts
  16. 4
      packages/connected/src/results/success/ReadSuccess.ts
  17. 4
      packages/connected/src/results/success/UpdateSuccess.ts
  18. 2
      packages/connected/test/MockResource.ts

@ -44,9 +44,7 @@ export const solidConnectedPlugin: SolidConnectedPlugin = {
throw new Error("Function not implemented.");
},
isUriValid: function (
uri: SolidContainerUri | SolidLeafUri,
): uri is SolidLeafUri | SolidContainerUri {
isUriValid: function (uri: string): uri is SolidLeafUri | SolidContainerUri {
return isSolidUri(uri);
},

@ -5,12 +5,11 @@ import {
getParentUri,
getSlug,
} from "../../util/rdfUtils";
import type { Resource } from "@ldo/connected";
import type { AbsentReadSuccess, Resource } from "@ldo/connected";
import { UnexpectedResourceError } from "@ldo/connected";
import type { HttpErrorResultType } from "../results/error/HttpErrorResult";
import { HttpErrorResult } from "../results/error/HttpErrorResult";
import { CreateSuccess } from "../results/success/CreateSuccess";
import type { AbsentReadSuccess } from "../results/success/SolidReadSuccess";
import type { DeleteResultError } from "./deleteResource";
import { deleteResource } from "./deleteResource";
import type {

@ -13,11 +13,10 @@ import {
DataReadSuccess,
} from "../results/success/SolidReadSuccess";
import { ContainerReadSuccess } from "../results/success/SolidReadSuccess";
import { AbsentReadSuccess } from "../results/success/SolidReadSuccess";
import { NoncompliantPodError } from "../results/error/NoncompliantPodError";
import { guaranteeFetch } from "../../util/guaranteeFetch";
import type { Resource } from "@ldo/connected";
import { UnexpectedResourceError } from "@ldo/connected";
import { UnexpectedResourceError, AbsentReadSuccess } from "@ldo/connected";
import { checkHeadersForRootContainer } from "./checkRootContainer";
import { namedNode } from "@rdfjs/data-model";
import type { SolidLeaf } from "../../resources/SolidLeaf";

@ -3,10 +3,9 @@ import { changesToSparqlUpdate } from "@ldo/rdf-utils";
import type { Quad } from "@rdfjs/types";
import { guaranteeFetch } from "../../util/guaranteeFetch";
import type { Resource } from "@ldo/connected";
import { UnexpectedResourceError } from "@ldo/connected";
import { UnexpectedResourceError, UpdateSuccess } from "@ldo/connected";
import type { HttpErrorResultType } from "../results/error/HttpErrorResult";
import { HttpErrorResult } from "../results/error/HttpErrorResult";
import { UpdateSuccess } from "../results/success/UpdateSuccess";
import type { DatasetRequestOptions } from "./requestOptions";
import type { SolidContainer } from "../../resources/SolidContainer";
import type { SolidLeaf } from "../../resources/SolidLeaf";

@ -1,4 +1,8 @@
import type { Resource, ResourceResult } from "@ldo/connected";
import {
ReadSuccess,
type Resource,
type ResourceResult,
} from "@ldo/connected";
import type { SolidLeaf } from "../../../resources/SolidLeaf";
import type { SolidContainer } from "../../../resources/SolidContainer";

@ -19,7 +19,6 @@ import type {
ReadResultError,
} from "../requester/requests/readResource";
import type { DeleteSuccess } from "../requester/results/success/DeleteSuccess";
import type { AbsentReadSuccess } from "../requester/results/success/SolidReadSuccess";
import type { ContainerReadSuccess } from "../requester/results/success/SolidReadSuccess";
import { getParentUri, ldpContains } from "../util/rdfUtils";
import { NoRootContainerError } from "../requester/results/error/NoRootContainerError";
@ -30,7 +29,8 @@ import type {
SolidContainerUri,
SolidLeafSlug,
} from "../types";
import { AggregateSuccess } from "@ldo/connected";
import type { AbsentReadSuccess } from "@ldo/connected";
import { AggregateSuccess, IgnoredInvalidUpdateSuccess } from "@ldo/connected";
import {
Unfetched,
type ConnectedContext,
@ -39,6 +39,7 @@ import {
import type { SolidConnectedPlugin } from "../SolidConnectedPlugin";
import type { SolidLeaf } from "./SolidLeaf";
import type { HttpErrorResultType } from "../requester/results/error/HttpErrorResult";
import type { DatasetChanges } from "@ldo/rdf-utils";
/**
* Represents the current status of a specific container on a Pod as known by
@ -577,4 +578,13 @@ export class SolidContainer extends SolidResource {
if (createResult.isError) return createResult;
return { ...createResult, resource: this };
}
/**
* You cannot update a Container, so we return an IgnoredInvalidUpdateSuccess
*/
async update(
_datasetChanges: DatasetChanges,
): Promise<IgnoredInvalidUpdateSuccess<this>> {
return new IgnoredInvalidUpdateSuccess(this);
}
}

@ -10,18 +10,19 @@ import type { DeleteResult } from "../requester/requests/deleteResource";
import type { ReadLeafResult } from "../requester/requests/readResource";
import type { UpdateResult } from "../requester/requests/updateDataResource";
import type { DeleteSuccess } from "../requester/results/success/DeleteSuccess";
import type { AbsentReadSuccess } from "../requester/results/success/SolidReadSuccess";
import type {
BinaryReadSuccess,
DataReadSuccess,
} from "../requester/results/success/SolidReadSuccess";
import { DataReadSuccess } from "../requester/results/success/SolidReadSuccess";
import { BinaryReadSuccess } from "../requester/results/success/SolidReadSuccess";
import { getParentUri } from "../util/rdfUtils";
import type { NoRootContainerError } from "../requester/results/error/NoRootContainerError";
import type { SharedStatuses } from "./SolidResource";
import { SolidResource } from "./SolidResource";
import type { SolidLeafUri } from "../types";
import type { ResourceSuccess } from "@ldo/connected";
import { Unfetched, type ConnectedContext } from "@ldo/connected";
import {
AbsentReadSuccess,
Unfetched,
type ConnectedContext,
} from "@ldo/connected";
import type { SolidConnectedPlugin } from "../SolidConnectedPlugin";
import type { SolidContainer } from "./SolidContainer";
@ -253,31 +254,16 @@ export class SolidLeaf extends SolidResource {
*/
protected toReadResult(): ReadLeafResult {
if (this.isAbsent()) {
return {
isError: false,
type: "absentReadSuccess",
uri: this.uri,
recalledFromMemory: true,
resource: this,
};
return new AbsentReadSuccess(this, true);
} else if (this.isBinary()) {
return {
isError: false,
type: "binaryReadSuccess",
uri: this.uri,
recalledFromMemory: true,
blob: this.binaryData!.blob,
mimeType: this.binaryData!.mimeType,
resource: this,
};
return new BinaryReadSuccess(
this,
true,
this.binaryData!.blob,
this.binaryData!.mimeType,
);
} else {
return {
isError: false,
type: "dataReadSuccess",
uri: this.uri,
recalledFromMemory: true,
resource: this,
};
return new DataReadSuccess(this, true);
}
}

@ -1,9 +1,10 @@
import type {
ConnectedContext,
ConnectedResult,
IgnoredInvalidUpdateSuccess,
ReadSuccess,
Resource,
ResourceEventEmitter,
ResourceResult,
ResourceSuccess,
Unfetched,
} from "@ldo/connected";
@ -18,10 +19,7 @@ import type {
} from "../notifications/SolidNotificationSubscription";
import { Websocket2023NotificationSubscription } from "../notifications/Websocket2023NotificationSubscription";
import { getParentUri } from "../util/rdfUtils";
import {
isReadSuccess,
type ReadSuccess,
} from "../requester/results/success/SolidReadSuccess";
import { isReadSuccess } from "../requester/results/success/SolidReadSuccess";
import type {
ReadContainerResult,
ReadLeafResult,
@ -51,6 +49,8 @@ import type { SolidNotificationMessage } from "../notifications/SolidNotificatio
import type { CreateSuccess } from "../requester/results/success/CreateSuccess";
import { GetWacUriSuccess } from "../wac/results/GetWacUriSuccess";
import { GetWacRuleSuccess } from "../wac/results/GetWacRuleSuccess";
import type { DatasetChanges } from "@ldo/rdf-utils";
import type { UpdateResult } from "../requester/requests/updateDataResource";
/**
* Statuses shared between both Leaf and Container
@ -141,10 +141,6 @@ export abstract class SolidResource
);
}
readIfAbsent(): Promise<ResourceResult<this>> {
throw new Error("Method not implemented.");
}
/**
* ===========================================================================
* GETTERS
@ -477,7 +473,7 @@ export abstract class SolidResource
this.absent = false;
this.didInitialFetch = true;
if (isReadSuccess(result)) {
this.updateWithReadSuccess(result);
this.updateWithReadSuccess(result as ReadSuccess<this>);
}
}
@ -547,6 +543,15 @@ export abstract class SolidResource
return result;
}
/**
* UPDATE METHODS
*/
abstract update(
datasetChanges: DatasetChanges,
): Promise<
UpdateResult<SolidLeaf> | IgnoredInvalidUpdateSuccess<SolidContainer>
>;
/**
* ===========================================================================
* PARENT CONTAINER METHODS

@ -1,7 +1,10 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import type { ConnectedLdoDataset } from "./ConnectedLdoDataset";
import type { ConnectedPlugin } from "./ConnectedPlugin";
export type ConnectedContext<Plugins extends ConnectedPlugin[]> = {
export type ConnectedContext<
Plugins extends ConnectedPlugin<any, any, any, any>[],
> = {
dataset: ConnectedLdoDataset<Plugins>;
} & {
[P in Plugins[number] as P["name"]]: P["types"]["context"];

@ -11,7 +11,9 @@ import type {
} from "./IConnectedLdoDataset";
import { ConnectedLdoTransactionDataset } from "./ConnectedLdoTransactionDataset";
export class ConnectedLdoDataset<Plugins extends ConnectedPlugin[]>
export class ConnectedLdoDataset<
Plugins extends ConnectedPlugin<any, any, any, any>[],
>
extends LdoDataset
implements IConnectedLdoDataset<Plugins>
{
@ -89,7 +91,7 @@ export class ConnectedLdoDataset<Plugins extends ConnectedPlugin[]>
let resource = this.resourceMap.get(normalizedUri);
if (!resource) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore I'm not sure why this doesn't work
// @ts-ignore I don't know why this doesn't work
resource = plugin.getResource(uri, this.context);
this.resourceMap.set(normalizedUri, resource);
}
@ -103,7 +105,7 @@ export class ConnectedLdoDataset<Plugins extends ConnectedPlugin[]>
>(name: Name): Promise<ReturnType<Plugin["createResource"]>> {
const validPlugin = this.plugins.find((plugin) => name === plugin.name)!;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore I'm not sure why this doesn't work
// @ts-ignore I don't know why this doesn't work
const newResourceResult = await validPlugin.createResource(this.context);
// HACK: cast to any
if (newResourceResult.isError) return newResourceResult as any;

@ -9,7 +9,10 @@ import type { DatasetChanges, GraphNode } from "@ldo/rdf-utils";
import type { ConnectedPlugin } from "./ConnectedPlugin";
import type { ConnectedContext } from "./ConnectedContext";
import type { InvalidIdentifierResource } from "./InvalidIdentifierResource";
import type { IConnectedLdoDataset } from "./IConnectedLdoDataset";
import type {
IConnectedLdoDataset,
ReturnTypeFromArgs,
} from "./IConnectedLdoDataset";
import { splitChangesByGraph } from "./util/splitChangesByGraph";
import type { IgnoredInvalidUpdateSuccess } from "./results/success/UpdateSuccess";
import { UpdateDefaultGraphSuccess } from "./results/success/UpdateSuccess";
@ -87,12 +90,10 @@ export class ConnectedLdoTransactionDataset<Plugins extends ConnectedPlugin[]>
UriType extends string,
>(
uri: UriType,
pluginName?: Name | undefined,
pluginName?: Name,
): UriType extends Plugin["types"]["uri"]
? Plugin["getResource"] extends (arg: UriType, context: any) => infer R
? R
: never
: InvalidIdentifierResource | ReturnType<Plugin["getResource"]> {
? ReturnTypeFromArgs<Plugin["getResource"], UriType>
: ReturnType<Plugin["getResource"]> | InvalidIdentifierResource {
return this.context.dataset.getResource(uri, pluginName);
}

@ -12,12 +12,12 @@ export interface ConnectedPlugin<
name: Name;
getResource(
uri: UriType,
context: ConnectedContext<ConnectedPlugin[]>,
context: ConnectedContext<ConnectedPlugin<any, any, any, any>[]>,
): ResourceType;
createResource(
context: ConnectedContext<ConnectedPlugin[]>,
context: ConnectedContext<ConnectedPlugin<any, any, any, any>[]>,
): Promise<ResourceType | ErrorResult>;
isUriValid(uri: UriType): uri is UriType;
isUriValid(uri: string): uri is UriType;
normalizeUri?: (uri: UriType) => UriType;
initialContext: ContextType;
// This object exists to transfer typescript types. It does not need to be

@ -41,7 +41,7 @@ export class InvalidIdentifierResource
async read(): Promise<InvalidUriError<this>> {
return this.status;
}
async readIfAbsent(): Promise<InvalidUriError<this>> {
async readIfUnfetched(): Promise<InvalidUriError<this>> {
return this.status;
}
async update(): Promise<InvalidUriError<this>> {

@ -2,7 +2,10 @@
import type TypedEmitter from "typed-emitter";
import type { ConnectedResult } from "./results/ConnectedResult";
import type { DatasetChanges } from "@ldo/rdf-utils";
import type { UpdateSuccess } from "./results/success/UpdateSuccess";
import type {
IgnoredInvalidUpdateSuccess,
UpdateSuccess,
} from "./results/success/UpdateSuccess";
import type { ResourceError } from "./results/error/ErrorResult";
import type { ReadSuccess } from "./results/success/ReadSuccess";
@ -25,10 +28,12 @@ export interface Resource<UriType extends string = string>
isAbsent(): boolean | undefined;
isSubscribedToNotifications(): boolean;
read(): Promise<ReadSuccess<any> | ResourceError<any>>;
readIfAbsent(): Promise<ReadSuccess<any> | ResourceError<any>>;
readIfUnfetched(): Promise<ReadSuccess<any> | ResourceError<any>>;
update(
datasetChanges: DatasetChanges,
): Promise<UpdateSuccess<any> | ResourceError<any>>;
): Promise<
UpdateSuccess<any> | IgnoredInvalidUpdateSuccess<any> | ResourceError<any>
>;
subscribeToNotifications(callbacks?: {
onNotification: (message: any) => void;
onNotificationError: (err: Error) => void;

@ -15,3 +15,5 @@ export * from "./results/error/InvalidUriError";
export * from "./results/error/NotificationErrors";
export * from "./results/success/SuccessResult";
export * from "./results/success/Unfetched";
export * from "./results/success/ReadSuccess";
export * from "./results/success/UpdateSuccess";

@ -1,5 +1,5 @@
import { ResourceSuccess } from "@ldo/connected";
import type { Resource } from "@ldo/connected";
import type { Resource } from "../../Resource";
import { ResourceSuccess } from "./SuccessResult";
/**
* Indicates that the request to read a resource was a success

@ -1,5 +1,5 @@
import { ResourceSuccess, SuccessResult } from "@ldo/connected";
import type { Resource } from "@ldo/connected";
import type { Resource } from "../../Resource";
import { ResourceSuccess, SuccessResult } from "./SuccessResult";
/**
* Indicates that an update request to a resource was successful

@ -50,7 +50,7 @@ export class MockResouce
read(): Promise<ReadSuccess<any> | ResourceError<any>> {
throw new Error("Method not implemented.");
}
readIfAbsent(): Promise<ReadSuccess<any> | ResourceError<any>> {
readIfUnfetched(): Promise<ReadSuccess<any> | ResourceError<any>> {
throw new Error("Method not implemented.");
}
update(

Loading…
Cancel
Save