shelving
Version:
Toolkit for using data in JavaScript.
46 lines (45 loc) • 3.64 kB
TypeScript
import type { DataSchema, DataSchemas } from "../schema/DataSchema.js";
import type { DataKey, Database } from "../util/data.js";
import type { ItemQuery, Items, OptionalItem } from "../util/item.js";
import type { Sourceable } from "../util/source.js";
import type { Updates } from "../util/update.js";
import type { AsyncProvider, Provider } from "./Provider.js";
import { AsyncThroughProvider, ThroughProvider } from "./ThroughProvider.js";
/** Validate a synchronous source provider (source can have any type because validation guarantees the type). */
export declare class ValidationProvider<T extends Database> extends ThroughProvider<T> implements Provider<T>, Sourceable<Provider<T>> {
readonly schemas: DataSchemas<T>;
constructor(schemas: DataSchemas<T>, source: Provider<T>);
/** Get a named schema. */
getSchema<K extends DataKey<T>>(collection: K): DataSchema<T[K]>;
getItem<K extends DataKey<T>>(collection: K, id: string): OptionalItem<T[K]>;
getItemSequence<K extends DataKey<T>>(collection: K, id: string): AsyncIterable<OptionalItem<T[K]>>;
addItem<K extends DataKey<T>>(collection: K, data: T[K]): string;
setItem<K extends DataKey<T>>(collection: K, id: string, data: T[K]): void;
updateItem<K extends DataKey<T>>(collection: K, id: string, updates: Updates<T[K]>): void;
deleteItem<K extends DataKey<T>>(collection: K, id: string): void;
countQuery<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): number;
getQuery<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): Items<T[K]>;
setQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, data: T[K]): void;
updateQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, updates: Updates<T[K]>): void;
deleteQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): void;
getQuerySequence<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>;
}
/** Validate an asynchronous source provider (source can have any type because validation guarantees the type). */
export declare class AsyncValidationProvider<T extends Database> extends AsyncThroughProvider<T> implements AsyncProvider<T>, Sourceable<AsyncProvider<T>> {
readonly schemas: DataSchemas<T>;
constructor(schemas: DataSchemas<T>, source: AsyncProvider<T>);
/** Get a named data schema for this database. */
getSchema<K extends DataKey<T>>(collection: K): DataSchema<T[K]>;
getItem<K extends DataKey<T>>(collection: K, id: string): Promise<OptionalItem<T[K]>>;
getItemSequence<K extends DataKey<T>>(collection: K, id: string): AsyncIterable<OptionalItem<T[K]>>;
addItem<K extends DataKey<T>>(collection: K, data: T[K]): Promise<string>;
setItem<K extends DataKey<T>>(collection: K, id: string, data: T[K]): Promise<void>;
updateItem<K extends DataKey<T>>(collection: K, id: string, updates: Updates<T[K]>): Promise<void>;
deleteItem<K extends DataKey<T>>(collection: K, id: string): Promise<void>;
countQuery<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): Promise<number>;
getQuery<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): Promise<Items<T[K]>>;
getQuerySequence<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>;
setQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, data: T[K]): Promise<void>;
updateQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, updates: Updates<T[K]>): Promise<void>;
deleteQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): Promise<void>;
}