UNPKG

@aws-amplify/datastore

Version:

AppSyncLocal support for aws-amplify

51 lines (49 loc) 2.01 kB
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