DataStore
The DataStore is a file system-based storage system used to manage content during the fetch and transform process. It provides a simple API for storing and retrieving content, with support for namespaces and documents.
Core Concepts
Namespaces
Namespaces represent collections of documents from a single source. Each content source gets its own namespace, identified by the source's ID.
Documents
Documents are individual files containing content data. They can be either single JSON files or batched files (for paginated content).
API Reference
DataStore
createNamespace(namespaceId: string)
Creates a new namespace in the data store. Returns a Result containing the namespace.
namespace(namespaceId: string)
Gets an existing namespace. Returns a Result containing the namespace.
getDocument(namespaceId: string, documentId: string)
Gets a specific document from a namespace. Returns a Result containing the document.
filter(ids?: DataKeys)
Filters documents based on namespace and document IDs. Returns grouped results by namespace.
Namespace
insert<T>(id: string, data: Promise<T> | AsyncIterable<T>)
Inserts a new document into the namespace. Data can be a Promise for single documents or an AsyncIterable for batched documents.
document(id: string)
Gets a document by ID from the namespace.
documents()
Gets all documents in the namespace.
waitFor(id: string)
Returns a promise that resolves when the document with the passed ID has finished being written.
Document
update(cb: (data: T) => T | Promise<T>)
Updates document content using a callback function.
apply(pathExpression: string, fn: (x: unknown) => unknown)
Applies a transformation to specific paths in the document using JSONPath.
query(pathExpression: string)
Queries document content using JSONPath expressions.
Error Handling
The DataStore uses the neverthrow library for error handling. Most methods return a Result or ResultAsync type:
const namespaceResult = dataStore.namespace('my-source');
if (namespaceResult.isErr()) {
console.error('Error:', namespaceResult.error);
} else {
const namespace = namespaceResult.value;
// Use namespace...
}For async operations, you can use the andThen method:
await dataStore
.createNamespace('my-source')
.andThen(namespace => namespace.insert('doc1', data));