npm package diff

Package: @forge/cache

Versions: 1.0.3-next.0 - 1.0.3-next.0-experimental-ab129b0

File: package/out/kvs/entity-query.js

Index: package/out/kvs/entity-query.js
===================================================================
--- package/out/kvs/entity-query.js
+++ package/out/kvs/entity-query.js
@@ -0,0 +1,102 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FilterBuilder = exports.BaseFilter = exports.KvsIndexQueryBuilder = void 0;
+class KvsIndexQueryBuilder {
+    entityName;
+    storageApi;
+    constructor(entityName, storageApi) {
+        this.entityName = entityName;
+        this.storageApi = storageApi;
+    }
+    index(name, indexOptions) {
+        return new KvsEntityQueryBuilder(this.storageApi, {
+            entityName: this.entityName,
+            indexName: name,
+            partition: indexOptions?.partition,
+            filters: []
+        });
+    }
+}
+exports.KvsIndexQueryBuilder = KvsIndexQueryBuilder;
+class KvsEntityQueryBuilder {
+    storageApi;
+    queryOptions;
+    constructor(storageApi, queryOptions) {
+        this.storageApi = storageApi;
+        this.queryOptions = queryOptions;
+    }
+    where(condition) {
+        this.queryOptions.range = condition;
+        return this;
+    }
+    filters(filter) {
+        this.queryOptions.filters = filter.filters();
+        this.queryOptions.filterOperator = filter.operator();
+        return this;
+    }
+    sort(sort) {
+        this.queryOptions.sort = sort;
+        return this;
+    }
+    cursor(cursor) {
+        this.queryOptions.cursor = cursor;
+        return this;
+    }
+    limit(limit) {
+        this.queryOptions.limit = limit;
+        return this;
+    }
+    async getOne() {
+        const { results } = await this.limit(1).getMany();
+        if (results && results.length > 0) {
+            return results[0];
+        }
+        return undefined;
+    }
+    async getMany() {
+        const { filters, filterOperator, ...rest } = this.queryOptions;
+        if (filters && filterOperator && filters.length > 0) {
+            return this.storageApi.queryEntity({
+                ...rest,
+                filters: {
+                    [filterOperator]: filters
+                }
+            });
+        }
+        return this.storageApi.queryEntity(rest);
+    }
+}
+class BaseFilter {
+    items;
+    constructor(items = []) {
+        this.items = items;
+    }
+    filters() {
+        return this.items;
+    }
+    operator() {
+        return this instanceof AndFilterBuilder ? 'and' : 'or';
+    }
+}
+exports.BaseFilter = BaseFilter;
+class FilterBuilder extends BaseFilter {
+    and(field, condition) {
+        return new AndFilterBuilder().and(field, condition);
+    }
+    or(field, condition) {
+        return new OrFilterBuilder().or(field, condition);
+    }
+}
+exports.FilterBuilder = FilterBuilder;
+class AndFilterBuilder extends BaseFilter {
+    and(field, condition) {
+        this.items.push({ property: field, ...condition });
+        return this;
+    }
+}
+class OrFilterBuilder extends BaseFilter {
+    or(field, condition) {
+        this.items.push({ property: field, ...condition });
+        return this;
+    }
+}