UNPKG

@tpluscode/rdfine

Version:
39 lines (38 loc) 1.35 kB
import RdfResourceImpl from './RdfResource.js'; import ResourceFactoryImpl from './lib/ResourceFactory.js'; import { toLiteral, fromLiteral } from './lib/conversion.js'; export class RdfineFactory { init() { // eslint-disable-next-line @typescript-eslint/no-this-alias const env = this; class Base extends RdfResourceImpl { static get env() { return env; } } // eslint-disable-next-line prefer-const let factory; this.rdfine = () => ({ factory, createEntity: factory.createEntity.bind(factory), convert: { toLiteral: toLiteral.bind(null, env), fromLiteral: fromLiteral.bind(null, env), }, }); this.rdfine.Resource = Base; factory = new ResourceFactoryImpl(env); } static get exports() { return ['_initVocabulary']; } _initVocabulary(vocabulary) { this.rdfine().factory.addMixin(...Object.values(vocabulary)); return Object.fromEntries(Object.entries(vocabulary).reduce((previous, [name, mixin]) => { if ('createFactory' in mixin) { return [...previous, [name.replace(/Mixin$/, ''), mixin.createFactory(this)]]; } return previous; }, [])); } }