@tpluscode/rdfine
Version:
RDF/JS idiomatic, native, effective
106 lines (105 loc) • 6.25 kB
TypeScript
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 {};