You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
ldo-compact-fork/packages/solid/src/requester/ContainerRequester.ts

57 lines
1.9 KiB

import type { SolidLdoDatasetContext } from "../SolidLdoDatasetContext";
import type { ContainerUri } from "../util/uriTypes";
import { Requester } from "./Requester";
import type { CheckRootResult } from "./requests/checkRootContainer";
import { checkRootContainer } from "./requests/checkRootContainer";
import type {
ContainerCreateAndOverwriteResult,
ContainerCreateIfAbsentResult,
} from "./requests/createDataResource";
import type { ReadContainerResult } from "./requests/readResource";
export const IS_ROOT_CONTAINER_KEY = "isRootContainer";
export class ContainerRequester extends Requester {
readonly uri: ContainerUri;
constructor(uri: ContainerUri, context: SolidLdoDatasetContext) {
super(context);
this.uri = uri;
}
read(): Promise<ReadContainerResult> {
return super.read() as Promise<ReadContainerResult>;
}
createDataResource(
overwrite: true,
): Promise<ContainerCreateAndOverwriteResult>;
createDataResource(overwrite?: false): Promise<ContainerCreateIfAbsentResult>;
createDataResource(
overwrite?: boolean,
): Promise<ContainerCreateIfAbsentResult | ContainerCreateAndOverwriteResult>;
createDataResource(
overwrite?: boolean,
): Promise<
ContainerCreateIfAbsentResult | ContainerCreateAndOverwriteResult
> {
return super.createDataResource(overwrite) as Promise<
ContainerCreateIfAbsentResult | ContainerCreateAndOverwriteResult
>;
}
async isRootContainer(): Promise<CheckRootResult> {
return this.requestBatcher.queueProcess({
name: IS_ROOT_CONTAINER_KEY,
args: [this.uri as ContainerUri, { fetch: this.context.fetch }],
perform: checkRootContainer,
modifyQueue: (queue, isLoading) => {
if (queue.length === 0) {
return isLoading[IS_ROOT_CONTAINER_KEY];
} else {
return queue[queue.length - 1].name === IS_ROOT_CONTAINER_KEY;
}
},
});
}
}