pinia-orm
Version:
The Pinia plugin to enable Object-Relational Mapping access to the Pinia Store.
53 lines (49 loc) • 1.72 kB
JavaScript
;
const Utils = require('./pinia-orm.DiWsQ6gA.cjs');
Symbol.metadata ??= Symbol.for("Symbol.metadata");
const FIELDS = Symbol.for("pinia-orm:fields");
const MUTATORS = Symbol.for("pinia-orm:mutators");
const CASTS = Symbol.for("pinia-orm:casts");
const HIDDEN = Symbol.for("pinia-orm:hidden");
const FIELDS_ON_DELETE = Symbol.for("pinia-orm:fieldsOnDelete");
function ownMetadataRecord(metadata, key) {
if (!Object.prototype.hasOwnProperty.call(metadata, key)) {
metadata[key] = { ...metadata[key] ?? {} };
}
return metadata[key];
}
function assertFieldContext(context) {
if (!context || typeof context !== "object" || context.kind !== "field") {
Utils.throwError([
"Decorators require the standard ECMAScript decorator semantics.",
'Please remove "experimentalDecorators" from your tsconfig and use TypeScript >= 5.2.'
]);
}
}
function keepHydratedValue(context) {
return function(_initialValue) {
return this[context.name];
};
}
function createFieldDecorator(factory) {
return (_value, context) => {
assertFieldContext(context);
ownMetadataRecord(context.metadata, FIELDS)[String(context.name)] = factory;
return keepHydratedValue(context);
};
}
function createRegistrationDecorator(register) {
return (_value, context) => {
assertFieldContext(context);
register(context);
return keepHydratedValue(context);
};
}
exports.CASTS = CASTS;
exports.FIELDS = FIELDS;
exports.FIELDS_ON_DELETE = FIELDS_ON_DELETE;
exports.HIDDEN = HIDDEN;
exports.MUTATORS = MUTATORS;
exports.createFieldDecorator = createFieldDecorator;
exports.createRegistrationDecorator = createRegistrationDecorator;
exports.ownMetadataRecord = ownMetadataRecord;