venue-js 1.0.0-next.1 → 1.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -360,6 +360,26 @@ var createPopulator = ({
360
360
  };
361
361
  };
362
362
 
363
+ // src/data/utils/match-filters.ts
364
+ function isInFilter(filter) {
365
+ return typeof filter === "object" && filter !== null && "$in" in filter && Array.isArray(filter.$in);
366
+ }
367
+ var someIntersect = (a, b) => a.some((v) => b.includes(v));
368
+ function matchFilter(value, filter) {
369
+ if (Array.isArray(value)) {
370
+ if (isInFilter(filter)) return someIntersect(value, filter.$in);
371
+ return value.includes(filter);
372
+ } else {
373
+ if (isInFilter(filter)) return filter.$in.includes(value);
374
+ return value === filter;
375
+ }
376
+ }
377
+ function matchFilters(item, filters) {
378
+ return Object.entries(filters).every(([key, filter]) => {
379
+ return matchFilter(item.properties[key], filter);
380
+ });
381
+ }
382
+
363
383
  // src/data/getDataClient.ts
364
384
  var getDataClient = (options) => {
365
385
  const observers = /* @__PURE__ */ new Map();
@@ -435,7 +455,12 @@ var getDataClient = (options) => {
435
455
  queryKey: [featureType, "list", params],
436
456
  queryFn: async () => {
437
457
  const features = await internalFilterByType(featureType);
438
- return params.populate === true ? await Promise.all(features.map((f) => populator[featureType](f))) : features;
458
+ const filters = params.filters ?? {};
459
+ let result = features;
460
+ if (params.filters) {
461
+ result = features.filter((f) => matchFilters(f, filters));
462
+ }
463
+ return params.populate === true ? await Promise.all(result.map((f) => populator[featureType](f))) : result;
439
464
  },
440
465
  ...options2 ?? {}
441
466
  });