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;
+ }
+}