UNPKG

@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
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 {};