UNPKG

@tpluscode/rdfine

Version:
40 lines (39 loc) 1.65 kB
export function createFactory(mixins, baseInitializer, env) { const fullFactory = (pointer, initializer, { additionalMixins = [] } = {}) => { return env.rdfine().factory.createEntity(pointer, [...mixins, ...additionalMixins], { initializer: { ...baseInitializer, ...(initializer || {}), }, }); }; const curriedNamedFactory = (id, initializer, { additionalMixins = [] } = {}) => { return (ptr) => { const graph = ptr || env.clownface(); const term = typeof id === 'string' ? graph.namedNode(id) : graph.node(id); return env.rdfine().factory.createEntity(term, [...mixins, ...additionalMixins], { initializer: { ...baseInitializer, ...(initializer || {}), }, }); }; }; const curriedBlankFactory = (initializer, { additionalMixins = [] } = {}) => { return (graph) => env.rdfine().factory.createEntity((graph || env.clownface()).blankNode(), [...mixins, ...additionalMixins], { initializer: { ...baseInitializer, ...(initializer || {}), }, }); }; return (first, second, third) => { if (typeof first === 'object' && 'term' in first) { return fullFactory(first, second, third); } if ((typeof first === 'object' && first.termType === 'NamedNode') || typeof first === 'string') { return curriedNamedFactory(first, second, third); } return curriedBlankFactory(first, second); }; }