import type { ConnectedContext, ConnectedPlugin } from "@ldo/connected"; import type { SolidContainerUri, SolidLeafUri, SolidUri } from "./types"; import { SolidLeaf } from "./resources/SolidLeaf"; import { SolidContainer } from "./resources/SolidContainer"; import { isSolidContainerUri, isSolidUri } from "./util/isSolidUri"; /** * The Type of the SolidConnectedContext */ export interface SolidConnectedContext { fetch?: typeof fetch; } export interface SolidConnectedPlugin extends ConnectedPlugin< "solid", SolidUri, SolidLeaf | SolidContainer, SolidConnectedContext, undefined > { name: "solid"; getResource: | ((uri: SolidLeafUri, context: ConnectedContext) => SolidLeaf) | (( uri: SolidContainerUri, context: ConnectedContext, ) => SolidContainer); createResource(context: ConnectedContext): Promise; } function getResource( uri: SolidLeafUri, context: ConnectedContext, ): SolidLeaf; function getResource( uri: SolidContainerUri, context: ConnectedContext, ): SolidContainer; function getResource( uri: SolidLeafUri | SolidContainerUri, context: ConnectedContext, ): SolidLeaf | SolidContainer { if (isSolidContainerUri(uri)) { return new SolidContainer(uri, context); } else { return new SolidLeaf(uri, context); } } /** * This plugin can be given to a ConnectedDataset to let it connect to Solid * servers. * * @example * ``` * import { createConnectedLdoDataset } from "@ldo/connected"; * import { solidConnectedPlugin } from "@ldo/connected-solid"; * * const solidConnectedDataset = createConnectedLdoDataset([ * solidConnectedPlugin * ]); * ``` */ export const solidConnectedPlugin: SolidConnectedPlugin = { name: "solid", getResource, createResource: function (): Promise { throw new Error("Function not implemented."); }, isUriValid: function (uri: string): uri is SolidLeafUri | SolidContainerUri { return isSolidUri(uri); }, initialContext: { fetch: undefined, }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore "Types" only exists for the typing system types: {}, };