UNPKG

@tpluscode/rdfine

Version:
106 lines (105 loc) 6.25 kB
import type { NamespaceBuilder } from '@rdfjs/namespace'; import type { NamedNode, DatasetCore, BlankNode, Quad_Graph, Term, Literal } from '@rdfjs/types'; import type { MultiPointer, GraphPointer, AnyPointer } from 'clownface'; import type { Constructor, Mixin, ResourceCreationOptions, ResourceIndexer } from './lib/ResourceFactory.js'; import type { TypeCollection } from './lib/TypeCollection.js'; import type { Jsonified } from './lib/toJSON.js'; import { RdfineEnvironment } from './environment.js'; export type ResourceIdentifier = BlankNode | NamedNode; export type ResourceNode<D extends DatasetCore = DatasetCore> = GraphPointer<ResourceIdentifier, D>; export interface GetOptions { strict: boolean; } export interface RdfResourceCore<D extends DatasetCore = DatasetCore> { readonly env: RdfineEnvironment; readonly id: ResourceIdentifier; readonly types: TypeCollection<D>; readonly pointer: GraphPointer<ResourceIdentifier, D>; readonly unionGraphPointer: MultiPointer<ResourceIdentifier, D>; readonly _graphId: Quad_Graph; readonly _parent?: RdfResource<D>; readonly isAnonymous: boolean; equals(other: RdfResource | ResourceIdentifier | GraphPointer | undefined | null): boolean; hasType(type: string | NamedNode): boolean; /** * Gets the value of a property * @param property */ get<T extends RdfResource<D> = RdfResource<D>>(property: string | NamedNode): T; get<T extends RdfResource<D> = RdfResource<D>>(property: string | NamedNode, options?: GetOptions): T | null; /** * Gets the value of a property and ensures that an array will be returned * @param property */ getArray<T extends RdfResource<D> = RdfResource<D>>(property: string | NamedNode, options?: GetOptions): T[]; /** * Gets the property value if it's boolean. Throws if it's not * @param property */ getBoolean(property: string | NamedNode, options?: GetOptions): boolean; /** * Gets the property value if it's a string. Throws if it's not * @param property */ getString(property: string | NamedNode): string; getString(property: string | NamedNode, options?: GetOptions): string | null; /** * Gets the property value if it's a number. Throws if it's not * @param property */ getNumber(property: string | NamedNode): number | null; getNumber(property: string | NamedNode, options?: GetOptions): number | null; /** * Returns JSON-LD-like object which represents the runtime interface of this resource */ toJSON<T extends RdfResourceCore = this>(): Jsonified<RdfResource & T>; _getObjects(property: string | NamedNode, options?: GetOptions): MultiPointer<Term, D>; _create<T extends RdfResourceCore<D>>(term: GraphPointer<Term, D>, mixins?: Mixin[] | [Constructor, ...Mixin[]], options?: ResourceCreationOptions<D, T>): T & ResourceIndexer; } export interface RdfResource<D extends DatasetCore = DatasetCore> extends RdfResourceCore<D> { } export default class RdfResourceImpl<D extends DatasetCore = DatasetCore> implements RdfResourceCore<D> { readonly pointer: GraphPointer<ResourceIdentifier, D>; readonly unionGraphPointer: MultiPointer<ResourceIdentifier, D>; readonly __initialized: boolean; readonly _parent?: RdfResource<D>; private readonly __initializeProperties; static __ns?: NamespaceBuilder; readonly env: RdfineEnvironment; static __mixins: Mixin[]; static __properties: Map<any, any>; static __initializers: Map<any, any>; private static _userInitializeProperties; constructor(pointer: ResourceNode<D>, parentOrEnv: RdfResource<D> | RdfineEnvironment, init?: Initializer<any>); get id(): ResourceIdentifier; get _graphId(): Quad_Graph; get types(): TypeCollection<D>; get isAnonymous(): boolean; hasType(type: string | NamedNode): boolean; equals(other: RdfResource<any> | ResourceIdentifier | GraphPointer | undefined | null): boolean; get<T extends RdfResource<D> = RdfResource<D>>(property: string | NamedNode, options?: GetOptions): T | RdfResource<D> | null; getArray<T extends RdfResource<D> = RdfResource<D>>(property: string | NamedNode, options?: GetOptions): T[]; getNumber(property: string | NamedNode): number; getString(property: string | NamedNode): string; getBoolean(property: string | NamedNode, options?: GetOptions): boolean; _getObjects(property: string | Term, { strict }?: GetOptions): MultiPointer<Term, D>; _create<T extends RdfResourceCore<D>>(term: GraphPointer<Term, D>, mixins?: Mixin[] | [Constructor, ...Mixin[]], options?: ResourceCreationOptions<D, T>): T & ResourceIndexer; toJSON<T extends RdfResourceCore<any> = this>(): Jsonified<T>; } type UserDefinedInterface<T extends RdfResourceCore | undefined> = Omit<T, keyof RdfResource>; type BaseInitializer = Record<string, any> & { types?: NamedNode[] | TypeCollection<any>; id?: RdfResource['id'] | string; }; type InitialNode<Node extends Term = NamedNode | BlankNode> = Node | GraphPointer<Node> | ((graph: AnyPointer) => Node | GraphPointer<Node>); type InitialLiteral = InitialNode<Literal>; interface Factory<T extends RdfResourceCore | undefined> { (graph: AnyPointer): T; } type InitializeSingle<T extends RdfResourceCore | undefined> = Initializer<UserDefinedInterface<T> & BaseInitializer> | InitialNode | Factory<T>; type InitializeArray<T extends RdfResourceCore> = Array<InitializeSingle<T>>; export type Initializer<T> = Omit<{ [P in keyof Required<T>]?: T[P] extends string ? T[P] | InitialLiteral : T[P] extends (RdfResourceCore | undefined) ? InitializeSingle<T[P]> : T[P] extends (Literal | undefined) ? InitialLiteral | string | number | boolean : T[P] extends Term ? T[P] | InitialNode<T[P]> : Extract<T[P], Array<any>> extends (infer U)[] ? U extends RdfResourceCore ? InitializeArray<U> | InitializeSingle<U> : U extends Term ? T[P] | (InitialNode<Term> | InitializeSingle<RdfResourceCore>)[] : T[P] | InitialLiteral | InitialLiteral[] : unknown; }, keyof RdfResource> & BaseInitializer; export declare function fromObject<T extends RdfResource>(initializer: Initializer<UserDefinedInterface<T> & BaseInitializer>): T; export {};