@tpluscode/rdfine
Version:
RDF/JS idiomatic, native, effective
37 lines (36 loc) • 1.09 kB
JavaScript
import { propertyDecorator } from './decoratorFactory.js';
export default function (options = {}) {
const type = options.type || String;
return propertyDecorator({
...options,
fromTerm(obj) {
return this.env.rdfine().convert.fromLiteral(type, obj);
},
toTerm(value) {
return this.env.rdfine().convert.toLiteral(value, options.datatype);
},
valueTypeName: type.name,
assertSetValue: (value) => {
if (value instanceof Date) {
return true;
}
if (typeof value === 'object') {
let term;
if ('id' in value) {
return false;
}
if ('term' in value) {
term = value.term;
}
else {
term = value;
}
return term.termType === 'Literal';
}
return true;
},
compare(left, right) {
return left === right;
},
});
}