@aws-amplify/datastore
Version:
AppSyncLocal support for aws-amplify
51 lines (49 loc) • 2.01 kB
JavaScript
class ModelSortPredicateCreator {
static createPredicateBuilder(modelDefinition) {
const { name: modelName } = modelDefinition;
const fieldNames = new Set(Object.keys(modelDefinition.fields));
const predicate = new Proxy({}, {
get(_target, propertyKey, receiver) {
const field = propertyKey;
if (!fieldNames.has(field)) {
throw new Error(`Invalid field for model. field: ${String(field)}, model: ${modelName}`);
}
const result = (sortDirection) => {
ModelSortPredicateCreator.sortPredicateGroupsMap
.get(receiver)
?.push({ field, sortDirection });
return receiver;
};
return result;
},
});
ModelSortPredicateCreator.sortPredicateGroupsMap.set(predicate, []);
return predicate;
}
static isValidPredicate(predicate) {
return ModelSortPredicateCreator.sortPredicateGroupsMap.has(predicate);
}
static getPredicates(predicate, throwOnInvalid = true) {
if (throwOnInvalid &&
!ModelSortPredicateCreator.isValidPredicate(predicate)) {
throw new Error('The predicate is not valid');
}
const predicateGroup = ModelSortPredicateCreator.sortPredicateGroupsMap.get(predicate);
if (predicateGroup) {
return predicateGroup;
}
else {
throw new Error('Predicate group not found');
}
}
// transforms cb-style predicate into Proxy
static createFromExisting(modelDefinition, existing) {
if (!existing || !modelDefinition) {
return undefined;
}
return existing(ModelSortPredicateCreator.createPredicateBuilder(modelDefinition));
}
}
ModelSortPredicateCreator.sortPredicateGroupsMap = new WeakMap();
export { ModelSortPredicateCreator };
//# sourceMappingURL=sort.mjs.map