import type { Dataset, DatasetFactory, Quad } from "@rdfjs/types"; import { createDataset } from "@ldo/dataset"; import { SubscribableDatasetFactory } from "./SubscribableDatasetFactory.js"; import type { ISubscribableDataset, ISubscribableDatasetFactory, ITransactionDatasetFactory, } from "./types.js"; import { TransactionDatasetFactory } from "./TransactionDatasetFactory.js"; const datasetFactory: DatasetFactory = { dataset: (quads?: Dataset | Quad[]): Dataset => { return createDataset(quads); }, }; /** * Creates a factory that generates TransactionDatasets * @returns TransactionDatasetFactory */ export function createTransactionDatasetFactory(): ITransactionDatasetFactory { return new TransactionDatasetFactory(datasetFactory); } /** * Creates a dataset factory that generates a SubscribableDataset * @returns DatasetFactory for SubscribableDataset */ export function createSubscribableDatasetFactory(): ISubscribableDatasetFactory { return new SubscribableDatasetFactory( datasetFactory, createTransactionDatasetFactory(), ); } /** * Creates a SubscribableDataset * @param quads: A dataset or array of Quads to initialize the dataset. * @returns Dataset */ export function createSubscribableDataset( quads?: Dataset | Quad[], ): ISubscribableDataset { const subscribableDatasetFactory = createSubscribableDatasetFactory(); return subscribableDatasetFactory.dataset(quads); }