@tpluscode/rdfine
Version:
RDF/JS idiomatic, native, effective
39 lines (38 loc) • 1.35 kB
JavaScript
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;
}, []));
}
}