@dossierhq/core
Version:
The core Dossier library used by clients and server alike, used to interact with schema and entities directly, as well as remotely through a client.
68 lines (67 loc) • 3.45 kB
TypeScript
import type { PublishedSchema } from '../schema/PublishedSchema.js';
import type { Schema } from '../schema/Schema.js';
import type { Component, EntityLike, RichTextNode } from '../Types.js';
import type { ContentValuePath } from './ContentPath.js';
export declare const ContentTraverseNodeType: {
readonly component: "component";
readonly entity: "entity";
readonly error: "error";
readonly field: "field";
readonly fieldItem: "fieldItem";
readonly richTextNode: "richTextNode";
};
export type ContentTraverseNodeType = (typeof ContentTraverseNodeType)[keyof typeof ContentTraverseNodeType];
export declare const ContentTraverseNodeErrorType: {
readonly generic: "generic";
readonly missingTypeSpec: "missingTypeSpec";
};
export type ContentTraverseNodeErrorType = (typeof ContentTraverseNodeErrorType)[keyof typeof ContentTraverseNodeErrorType];
export type ContentTraverseNode<TSchema extends Schema | PublishedSchema> = ContentTraverseNodeComponent<TSchema> | ContentTraverseNodeEntity<TSchema> | ContentTraverseNodeErrorGeneric | ContentTraverseNodeErrorMissingTypeSpec | ContentTraverseNodeField<TSchema> | ContentTraverseNodeFieldItem<TSchema> | ContentTraverseNodeRichTextNode<TSchema>;
interface ContentTraverseNodeEntity<TSchema extends Schema | PublishedSchema> {
path: ContentValuePath;
type: 'entity';
entitySpec: TSchema['spec']['entityTypes'][number];
entity: EntityLike<string, object>;
}
interface ContentTraverseNodeErrorGeneric {
path: ContentValuePath;
type: 'error';
errorType: 'generic';
message: string;
}
interface ContentTraverseNodeErrorMissingTypeSpec {
path: ContentValuePath;
type: 'error';
errorType: 'missingTypeSpec';
message: string;
typeName: string;
kind: 'entity' | 'component';
}
interface ContentTraverseNodeField<TSchema extends Schema | PublishedSchema> {
path: ContentValuePath;
type: 'field';
fieldSpec: TSchema['spec']['entityTypes' | 'componentTypes'][number]['fields'][number];
value: unknown;
}
interface ContentTraverseNodeFieldItem<TSchema extends Schema | PublishedSchema> {
path: ContentValuePath;
type: 'fieldItem';
fieldSpec: TSchema['spec']['entityTypes' | 'componentTypes'][number]['fields'][number];
value: unknown;
}
interface ContentTraverseNodeComponent<TSchema extends Schema | PublishedSchema> {
path: ContentValuePath;
type: 'component';
componentSpec: TSchema['spec']['componentTypes'][number];
component: Component;
}
interface ContentTraverseNodeRichTextNode<TSchema extends Schema | PublishedSchema> {
path: ContentValuePath;
type: 'richTextNode';
fieldSpec: TSchema['spec']['entityTypes' | 'componentTypes'][number]['fields'][number];
node: RichTextNode;
}
export declare function traverseEntity<TSchema extends Schema | PublishedSchema>(schema: TSchema, path: ContentValuePath, entity: EntityLike<string, object>): Generator<ContentTraverseNode<TSchema>>;
export declare function traverseComponent<TSchema extends Schema | PublishedSchema>(schema: TSchema, path: ContentValuePath, component: Component): Generator<ContentTraverseNode<TSchema>>;
export declare function traverseContentField<TSchema extends Schema | PublishedSchema>(schema: TSchema, path: ContentValuePath, fieldSpec: TSchema['spec']['entityTypes' | 'componentTypes'][number]['fields'][number], value: unknown): Generator<ContentTraverseNode<TSchema>>;
export {};