@workglow/storage 0.0.97 → 0.0.99

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.
Files changed (35) hide show
  1. package/dist/browser.js +396 -33
  2. package/dist/browser.js.map +11 -10
  3. package/dist/bun.js +470 -53
  4. package/dist/bun.js.map +15 -14
  5. package/dist/common.d.ts +1 -0
  6. package/dist/common.d.ts.map +1 -1
  7. package/dist/node.js +470 -53
  8. package/dist/node.js.map +15 -14
  9. package/dist/queue/PostgresQueueStorage.d.ts +1 -1
  10. package/dist/queue/PostgresQueueStorage.d.ts.map +1 -1
  11. package/dist/queue-limiter/PostgresRateLimiterStorage.d.ts +1 -1
  12. package/dist/queue-limiter/PostgresRateLimiterStorage.d.ts.map +1 -1
  13. package/dist/tabular/BaseTabularStorage.d.ts +21 -0
  14. package/dist/tabular/BaseTabularStorage.d.ts.map +1 -1
  15. package/dist/tabular/CachedTabularStorage.d.ts +7 -0
  16. package/dist/tabular/CachedTabularStorage.d.ts.map +1 -1
  17. package/dist/tabular/FsFolderTabularStorage.d.ts +7 -0
  18. package/dist/tabular/FsFolderTabularStorage.d.ts.map +1 -1
  19. package/dist/tabular/HuggingFaceTabularStorage.d.ts +119 -0
  20. package/dist/tabular/HuggingFaceTabularStorage.d.ts.map +1 -0
  21. package/dist/tabular/ITabularStorage.d.ts +19 -3
  22. package/dist/tabular/ITabularStorage.d.ts.map +1 -1
  23. package/dist/tabular/InMemoryTabularStorage.d.ts +7 -0
  24. package/dist/tabular/InMemoryTabularStorage.d.ts.map +1 -1
  25. package/dist/tabular/IndexedDbTabularStorage.d.ts +7 -0
  26. package/dist/tabular/IndexedDbTabularStorage.d.ts.map +1 -1
  27. package/dist/tabular/PostgresTabularStorage.d.ts +7 -0
  28. package/dist/tabular/PostgresTabularStorage.d.ts.map +1 -1
  29. package/dist/tabular/SharedInMemoryTabularStorage.d.ts +7 -0
  30. package/dist/tabular/SharedInMemoryTabularStorage.d.ts.map +1 -1
  31. package/dist/tabular/SqliteTabularStorage.d.ts +7 -0
  32. package/dist/tabular/SqliteTabularStorage.d.ts.map +1 -1
  33. package/dist/tabular/SupabaseTabularStorage.d.ts +7 -0
  34. package/dist/tabular/SupabaseTabularStorage.d.ts.map +1 -1
  35. package/package.json +13 -13
package/dist/browser.js CHANGED
@@ -123,6 +123,42 @@ class BaseTabularStorage {
123
123
  waitOn(name) {
124
124
  return this.events.waitOn(name);
125
125
  }
126
+ async* records(pageSize = 100) {
127
+ if (pageSize <= 0) {
128
+ throw new RangeError(`pageSize must be greater than 0, got ${pageSize}`);
129
+ }
130
+ let offset = 0;
131
+ while (true) {
132
+ const page = await this.getBulk(offset, pageSize);
133
+ if (!page || page.length === 0) {
134
+ break;
135
+ }
136
+ for (const entity of page) {
137
+ yield entity;
138
+ }
139
+ if (page.length < pageSize) {
140
+ break;
141
+ }
142
+ offset += pageSize;
143
+ }
144
+ }
145
+ async* pages(pageSize = 100) {
146
+ if (pageSize <= 0) {
147
+ throw new RangeError(`pageSize must be greater than 0, got ${pageSize}`);
148
+ }
149
+ let offset = 0;
150
+ while (true) {
151
+ const page = await this.getBulk(offset, pageSize);
152
+ if (!page || page.length === 0) {
153
+ break;
154
+ }
155
+ yield page;
156
+ if (page.length < pageSize) {
157
+ break;
158
+ }
159
+ offset += pageSize;
160
+ }
161
+ }
126
162
  subscribeToChanges(_callback, _options) {
127
163
  throw new Error(`subscribeToChanges is not implemented for ${this.constructor.name}. ` + `All concrete repository implementations should override this method.`);
128
164
  }
@@ -346,6 +382,22 @@ class InMemoryTabularStorage extends BaseTabularStorage {
346
382
  async size() {
347
383
  return this.values.size;
348
384
  }
385
+ async getBulk(offset, limit) {
386
+ const all = Array.from(this.values.values());
387
+ all.sort((a, b) => {
388
+ for (const key of this.primaryKeyNames) {
389
+ const aVal = a[key];
390
+ const bVal = b[key];
391
+ if (aVal < bVal)
392
+ return -1;
393
+ if (aVal > bVal)
394
+ return 1;
395
+ }
396
+ return 0;
397
+ });
398
+ const page = all.slice(offset, offset + limit);
399
+ return page.length > 0 ? page : undefined;
400
+ }
349
401
  async deleteSearch(criteria) {
350
402
  const criteriaKeys = Object.keys(criteria);
351
403
  if (criteriaKeys.length === 0) {
@@ -531,6 +583,10 @@ class CachedTabularStorage extends BaseTabularStorage {
531
583
  await this.initializeCache();
532
584
  return await this.durable.size();
533
585
  }
586
+ async getBulk(offset, limit) {
587
+ await this.initializeCache();
588
+ return await this.durable.getBulk(offset, limit);
589
+ }
534
590
  async deleteSearch(criteria) {
535
591
  await this.initializeCache();
536
592
  await this.durable.deleteSearch(criteria);
@@ -564,13 +620,262 @@ class CachedTabularStorage extends BaseTabularStorage {
564
620
  this.cache.destroy();
565
621
  }
566
622
  }
623
+ // src/tabular/HuggingFaceTabularStorage.ts
624
+ import {
625
+ createServiceToken as createServiceToken4
626
+ } from "@workglow/util";
627
+ var HF_TABULAR_REPOSITORY = createServiceToken4("storage.tabularRepository.huggingface");
628
+
629
+ class HuggingFaceTabularStorage extends BaseTabularStorage {
630
+ dataset;
631
+ config;
632
+ split;
633
+ token;
634
+ baseUrl;
635
+ constructor(dataset, config, split, schema, primaryKeyNames, options) {
636
+ super(schema, primaryKeyNames, options?.indexes ?? [], "never");
637
+ this.dataset = dataset;
638
+ this.config = config;
639
+ this.split = split;
640
+ this.token = options?.token;
641
+ this.baseUrl = options?.baseUrl ?? "https://datasets-server.huggingface.co";
642
+ }
643
+ static async fromDataset(dataset, config, split, options) {
644
+ const baseUrl = options?.baseUrl ?? "https://datasets-server.huggingface.co";
645
+ const token = options?.token;
646
+ const url = new URL(`${baseUrl}/first-rows`);
647
+ url.searchParams.set("dataset", dataset);
648
+ url.searchParams.set("config", config);
649
+ url.searchParams.set("split", split);
650
+ const headers = {};
651
+ if (token) {
652
+ headers["Authorization"] = `Bearer ${token}`;
653
+ }
654
+ const response = await fetch(url.toString(), { headers });
655
+ if (!response.ok) {
656
+ throw new Error(`Failed to fetch dataset features: ${response.status} ${response.statusText}`);
657
+ }
658
+ const data = await response.json();
659
+ const properties = {};
660
+ const required = [];
661
+ properties["row_idx"] = { type: "integer", "x-auto-generated": true };
662
+ required.push("row_idx");
663
+ for (const feature of data.features) {
664
+ const jsonSchema = hfFeatureToJsonSchema(feature.type);
665
+ properties[feature.name] = jsonSchema;
666
+ required.push(feature.name);
667
+ }
668
+ const schema = {
669
+ type: "object",
670
+ properties,
671
+ required,
672
+ additionalProperties: false
673
+ };
674
+ return new HuggingFaceTabularStorage(dataset, config, split, schema, ["row_idx"], options);
675
+ }
676
+ async setupDatabase() {
677
+ const data = await this.fetchApi("/first-rows", {});
678
+ const schemaColumns = Object.keys(this.schema.properties);
679
+ const hfColumns = data.features.map((f) => f.name);
680
+ const hasRowIdx = schemaColumns.includes("row_idx");
681
+ if (!hasRowIdx) {
682
+ for (const column of schemaColumns) {
683
+ if (!hfColumns.includes(column) && !this.primaryKeyNames.includes(column)) {
684
+ throw new Error(`Schema column "${column}" not found in HuggingFace dataset features`);
685
+ }
686
+ }
687
+ }
688
+ }
689
+ async get(key) {
690
+ const keyObj = this.separateKeyValueFromCombined({ ...key }).key;
691
+ const whereConditions = [];
692
+ for (const [k, v] of Object.entries(keyObj)) {
693
+ if (typeof v === "string") {
694
+ const escaped = v.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
695
+ whereConditions.push(`${k}='${escaped}'`);
696
+ } else {
697
+ whereConditions.push(`${k}=${v}`);
698
+ }
699
+ }
700
+ const where = whereConditions.join(" AND ");
701
+ const data = await this.fetchApi("/filter", { where, limit: "1" });
702
+ if (data.rows.length > 0) {
703
+ const entity = this.rowToEntity(data.rows[0]);
704
+ this.events.emit("get", key, entity);
705
+ return entity;
706
+ }
707
+ this.events.emit("get", key, undefined);
708
+ return;
709
+ }
710
+ async getAll() {
711
+ const allEntities = [];
712
+ let offset = 0;
713
+ const pageSize = 100;
714
+ while (true) {
715
+ const page = await this.getBulk(offset, pageSize);
716
+ if (!page || page.length === 0) {
717
+ break;
718
+ }
719
+ allEntities.push(...page);
720
+ offset += page.length;
721
+ if (page.length < pageSize) {
722
+ break;
723
+ }
724
+ }
725
+ return allEntities.length > 0 ? allEntities : undefined;
726
+ }
727
+ async getBulk(offset, limit) {
728
+ const data = await this.fetchApi("/rows", {
729
+ offset: offset.toString(),
730
+ length: Math.min(limit, 100).toString()
731
+ });
732
+ if (data.rows.length === 0) {
733
+ return;
734
+ }
735
+ const entities = [];
736
+ for (const row of data.rows) {
737
+ entities.push(this.rowToEntity(row));
738
+ }
739
+ return entities;
740
+ }
741
+ async search(key) {
742
+ const searchKeys = Object.keys(key);
743
+ if (searchKeys.length === 0) {
744
+ return;
745
+ }
746
+ const bestIndex = this.findBestMatchingIndex(searchKeys);
747
+ if (!bestIndex) {
748
+ throw new Error(`No suitable index found for the search criteria, searching for ['${searchKeys.join("', '")}'] with pk ['${this.primaryKeyNames.join("', '")}'] and indexes ['${this.indexes.map((idx) => idx.join(",")).join("', '")}'`);
749
+ }
750
+ const whereConditions = [];
751
+ for (const [k, v] of Object.entries(key)) {
752
+ if (v !== undefined && v !== null) {
753
+ if (typeof v === "string") {
754
+ const escaped = v.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
755
+ whereConditions.push(`${k}='${escaped}'`);
756
+ } else {
757
+ whereConditions.push(`${k}=${v}`);
758
+ }
759
+ }
760
+ }
761
+ if (whereConditions.length === 0) {
762
+ throw new Error("Search criteria must include at least one non-null and non-undefined value to build a valid WHERE clause.");
763
+ }
764
+ const where = whereConditions.join(" AND ");
765
+ const allEntities = [];
766
+ let offset = 0;
767
+ const limit = 100;
768
+ while (true) {
769
+ const data = await this.fetchApi("/filter", {
770
+ where,
771
+ offset: offset.toString(),
772
+ limit: limit.toString()
773
+ });
774
+ for (const row of data.rows) {
775
+ allEntities.push(this.rowToEntity(row));
776
+ }
777
+ offset += data.rows.length;
778
+ if (offset >= data.num_rows_total || data.rows.length < limit) {
779
+ break;
780
+ }
781
+ }
782
+ if (allEntities.length > 0) {
783
+ this.events.emit("search", key, allEntities);
784
+ return allEntities;
785
+ } else {
786
+ this.events.emit("search", key, undefined);
787
+ return;
788
+ }
789
+ }
790
+ async size() {
791
+ const data = await this.fetchApi("/size", {});
792
+ return data.size.num_rows;
793
+ }
794
+ async put(_value) {
795
+ throw new Error("HuggingFaceTabularStorage is readonly");
796
+ }
797
+ async putBulk(_values) {
798
+ throw new Error("HuggingFaceTabularStorage is readonly");
799
+ }
800
+ async delete(_value) {
801
+ throw new Error("HuggingFaceTabularStorage is readonly");
802
+ }
803
+ async deleteAll() {
804
+ throw new Error("HuggingFaceTabularStorage is readonly");
805
+ }
806
+ async deleteSearch(_criteria) {
807
+ throw new Error("HuggingFaceTabularStorage is readonly");
808
+ }
809
+ subscribeToChanges(_callback, _options) {
810
+ throw new Error("HuggingFaceTabularStorage does not support subscriptions");
811
+ }
812
+ destroy() {}
813
+ async fetchApi(endpoint, params) {
814
+ const url = new URL(`${this.baseUrl}${endpoint}`);
815
+ url.searchParams.set("dataset", this.dataset);
816
+ url.searchParams.set("config", this.config);
817
+ url.searchParams.set("split", this.split);
818
+ for (const [key, value] of Object.entries(params)) {
819
+ if (value !== undefined) {
820
+ url.searchParams.set(key, value);
821
+ }
822
+ }
823
+ const headers = {};
824
+ if (this.token) {
825
+ headers["Authorization"] = `Bearer ${this.token}`;
826
+ }
827
+ const response = await fetch(url.toString(), { headers });
828
+ if (!response.ok) {
829
+ throw new Error(`HuggingFace API error: ${response.status} ${response.statusText}`);
830
+ }
831
+ return await response.json();
832
+ }
833
+ rowToEntity(row) {
834
+ return { row_idx: row.row_idx, ...row.row };
835
+ }
836
+ }
837
+ function hfFeatureToJsonSchema(feature) {
838
+ if (feature._type === "Value") {
839
+ switch (feature.dtype) {
840
+ case "string":
841
+ return { type: "string" };
842
+ case "int64":
843
+ case "int32":
844
+ case "int16":
845
+ case "int8":
846
+ case "uint64":
847
+ case "uint32":
848
+ case "uint16":
849
+ case "uint8":
850
+ return { type: "integer" };
851
+ case "float64":
852
+ case "float32":
853
+ case "float16":
854
+ return { type: "number" };
855
+ case "bool":
856
+ return { type: "boolean" };
857
+ default:
858
+ return {};
859
+ }
860
+ }
861
+ if (feature._type === "ClassLabel") {
862
+ return { type: "integer" };
863
+ }
864
+ if (feature._type === "Sequence") {
865
+ return {
866
+ type: "array",
867
+ items: hfFeatureToJsonSchema(feature.feature)
868
+ };
869
+ }
870
+ return {};
871
+ }
567
872
  // src/tabular/TabularStorageRegistry.ts
568
873
  import {
569
- createServiceToken as createServiceToken4,
874
+ createServiceToken as createServiceToken5,
570
875
  globalServiceRegistry,
571
876
  registerInputResolver
572
877
  } from "@workglow/util";
573
- var TABULAR_REPOSITORIES = createServiceToken4("storage.tabular.repositories");
878
+ var TABULAR_REPOSITORIES = createServiceToken5("storage.tabular.repositories");
574
879
  if (!globalServiceRegistry.has(TABULAR_REPOSITORIES)) {
575
880
  globalServiceRegistry.register(TABULAR_REPOSITORIES, () => new Map, true);
576
881
  }
@@ -604,11 +909,11 @@ var DefaultKeyValueSchema = {
604
909
  };
605
910
  var DefaultKeyValueKey = ["key"];
606
911
  // src/kv/InMemoryKvStorage.ts
607
- import { createServiceToken as createServiceToken6 } from "@workglow/util";
912
+ import { createServiceToken as createServiceToken7 } from "@workglow/util";
608
913
 
609
914
  // src/kv/KvStorage.ts
610
- import { createServiceToken as createServiceToken5, EventEmitter as EventEmitter2, makeFingerprint as makeFingerprint3 } from "@workglow/util";
611
- var KV_REPOSITORY = createServiceToken5("storage.kvRepository");
915
+ import { createServiceToken as createServiceToken6, EventEmitter as EventEmitter2, makeFingerprint as makeFingerprint3 } from "@workglow/util";
916
+ var KV_REPOSITORY = createServiceToken6("storage.kvRepository");
612
917
 
613
918
  class KvStorage {
614
919
  keySchema;
@@ -715,7 +1020,7 @@ class KvViaTabularStorage extends KvStorage {
715
1020
  }
716
1021
 
717
1022
  // src/kv/InMemoryKvStorage.ts
718
- var MEMORY_KV_REPOSITORY = createServiceToken6("storage.kvRepository.inMemory");
1023
+ var MEMORY_KV_REPOSITORY = createServiceToken7("storage.kvRepository.inMemory");
719
1024
 
720
1025
  class InMemoryKvStorage extends KvViaTabularStorage {
721
1026
  tabularRepository;
@@ -725,11 +1030,11 @@ class InMemoryKvStorage extends KvViaTabularStorage {
725
1030
  }
726
1031
  }
727
1032
  // src/queue/InMemoryQueueStorage.ts
728
- import { createServiceToken as createServiceToken8, EventEmitter as EventEmitter3, makeFingerprint as makeFingerprint4, sleep, uuid4 as uuid42 } from "@workglow/util";
1033
+ import { createServiceToken as createServiceToken9, EventEmitter as EventEmitter3, makeFingerprint as makeFingerprint4, sleep, uuid4 as uuid42 } from "@workglow/util";
729
1034
 
730
1035
  // src/queue/IQueueStorage.ts
731
- import { createServiceToken as createServiceToken7 } from "@workglow/util";
732
- var QUEUE_STORAGE = createServiceToken7("jobqueue.storage");
1036
+ import { createServiceToken as createServiceToken8 } from "@workglow/util";
1037
+ var QUEUE_STORAGE = createServiceToken8("jobqueue.storage");
733
1038
  var JobStatus = {
734
1039
  PENDING: "PENDING",
735
1040
  PROCESSING: "PROCESSING",
@@ -740,7 +1045,7 @@ var JobStatus = {
740
1045
  };
741
1046
 
742
1047
  // src/queue/InMemoryQueueStorage.ts
743
- var IN_MEMORY_QUEUE_STORAGE = createServiceToken8("jobqueue.storage.inMemory");
1048
+ var IN_MEMORY_QUEUE_STORAGE = createServiceToken9("jobqueue.storage.inMemory");
744
1049
 
745
1050
  class InMemoryQueueStorage {
746
1051
  queueName;
@@ -917,8 +1222,8 @@ class InMemoryQueueStorage {
917
1222
  }
918
1223
  }
919
1224
  // src/queue-limiter/InMemoryRateLimiterStorage.ts
920
- import { createServiceToken as createServiceToken9, sleep as sleep2 } from "@workglow/util";
921
- var IN_MEMORY_RATE_LIMITER_STORAGE = createServiceToken9("ratelimiter.storage.inMemory");
1225
+ import { createServiceToken as createServiceToken10, sleep as sleep2 } from "@workglow/util";
1226
+ var IN_MEMORY_RATE_LIMITER_STORAGE = createServiceToken10("ratelimiter.storage.inMemory");
922
1227
 
923
1228
  class InMemoryRateLimiterStorage {
924
1229
  prefixValues;
@@ -976,8 +1281,8 @@ class InMemoryRateLimiterStorage {
976
1281
  }
977
1282
  }
978
1283
  // src/queue-limiter/IRateLimiterStorage.ts
979
- import { createServiceToken as createServiceToken10 } from "@workglow/util";
980
- var RATE_LIMITER_STORAGE = createServiceToken10("ratelimiter.storage");
1284
+ import { createServiceToken as createServiceToken11 } from "@workglow/util";
1285
+ var RATE_LIMITER_STORAGE = createServiceToken11("ratelimiter.storage");
981
1286
  // src/util/HybridSubscriptionManager.ts
982
1287
  class HybridSubscriptionManager {
983
1288
  subscribers = new Set;
@@ -1371,7 +1676,7 @@ class InMemoryVectorStorage extends InMemoryTabularStorage {
1371
1676
  }
1372
1677
  // src/tabular/IndexedDbTabularStorage.ts
1373
1678
  import {
1374
- createServiceToken as createServiceToken11,
1679
+ createServiceToken as createServiceToken12,
1375
1680
  makeFingerprint as makeFingerprint5,
1376
1681
  uuid4 as uuid43
1377
1682
  } from "@workglow/util";
@@ -1714,7 +2019,7 @@ async function dropIndexedDbTable(tableName) {
1714
2019
  }
1715
2020
 
1716
2021
  // src/tabular/IndexedDbTabularStorage.ts
1717
- var IDB_TABULAR_REPOSITORY = createServiceToken11("storage.tabularRepository.indexedDb");
2022
+ var IDB_TABULAR_REPOSITORY = createServiceToken12("storage.tabularRepository.indexedDb");
1718
2023
 
1719
2024
  class IndexedDbTabularStorage extends BaseTabularStorage {
1720
2025
  table;
@@ -2005,6 +2310,41 @@ class IndexedDbTabularStorage extends BaseTabularStorage {
2005
2310
  request.onsuccess = () => resolve(request.result);
2006
2311
  });
2007
2312
  }
2313
+ async getBulk(offset, limit) {
2314
+ if (offset < 0) {
2315
+ throw new RangeError(`offset must be non-negative, got ${offset}`);
2316
+ }
2317
+ if (limit <= 0) {
2318
+ return;
2319
+ }
2320
+ const db = await this.getDb();
2321
+ return new Promise((resolve, reject) => {
2322
+ const transaction = db.transaction(this.table, "readonly");
2323
+ const store = transaction.objectStore(this.table);
2324
+ const request = store.openCursor();
2325
+ const entities = [];
2326
+ let skipped = false;
2327
+ request.onerror = () => reject(request.error);
2328
+ request.onsuccess = () => {
2329
+ const cursor = request.result;
2330
+ if (cursor) {
2331
+ if (!skipped && offset > 0) {
2332
+ skipped = true;
2333
+ cursor.advance(offset);
2334
+ return;
2335
+ }
2336
+ entities.push(cursor.value);
2337
+ if (entities.length === limit) {
2338
+ resolve(entities);
2339
+ return;
2340
+ }
2341
+ cursor.continue();
2342
+ } else {
2343
+ resolve(entities.length > 0 ? entities : undefined);
2344
+ }
2345
+ };
2346
+ });
2347
+ }
2008
2348
  matchesCriteria(record, criteria) {
2009
2349
  for (const column of Object.keys(criteria)) {
2010
2350
  const criterion = criteria[column];
@@ -2130,9 +2470,9 @@ class IndexedDbTabularStorage extends BaseTabularStorage {
2130
2470
  }
2131
2471
  // src/tabular/SharedInMemoryTabularStorage.ts
2132
2472
  import {
2133
- createServiceToken as createServiceToken12
2473
+ createServiceToken as createServiceToken13
2134
2474
  } from "@workglow/util";
2135
- var SHARED_IN_MEMORY_TABULAR_REPOSITORY = createServiceToken12("storage.tabularRepository.sharedInMemory");
2475
+ var SHARED_IN_MEMORY_TABULAR_REPOSITORY = createServiceToken13("storage.tabularRepository.sharedInMemory");
2136
2476
 
2137
2477
  class SharedInMemoryTabularStorage extends BaseTabularStorage {
2138
2478
  channel = null;
@@ -2276,6 +2616,9 @@ class SharedInMemoryTabularStorage extends BaseTabularStorage {
2276
2616
  async size() {
2277
2617
  return await this.inMemoryRepo.size();
2278
2618
  }
2619
+ async getBulk(offset, limit) {
2620
+ return await this.inMemoryRepo.getBulk(offset, limit);
2621
+ }
2279
2622
  async deleteSearch(criteria) {
2280
2623
  await this.inMemoryRepo.deleteSearch(criteria);
2281
2624
  this.broadcast({
@@ -2296,7 +2639,7 @@ class SharedInMemoryTabularStorage extends BaseTabularStorage {
2296
2639
  }
2297
2640
  // src/tabular/SupabaseTabularStorage.ts
2298
2641
  import {
2299
- createServiceToken as createServiceToken13
2642
+ createServiceToken as createServiceToken14
2300
2643
  } from "@workglow/util";
2301
2644
 
2302
2645
  // src/tabular/BaseSqlTabularStorage.ts
@@ -2483,7 +2826,7 @@ class BaseSqlTabularStorage extends BaseTabularStorage {
2483
2826
  }
2484
2827
 
2485
2828
  // src/tabular/SupabaseTabularStorage.ts
2486
- var SUPABASE_TABULAR_REPOSITORY = createServiceToken13("storage.tabularRepository.supabase");
2829
+ var SUPABASE_TABULAR_REPOSITORY = createServiceToken14("storage.tabularRepository.supabase");
2487
2830
 
2488
2831
  class SupabaseTabularStorage extends BaseSqlTabularStorage {
2489
2832
  client;
@@ -2824,6 +3167,24 @@ class SupabaseTabularStorage extends BaseSqlTabularStorage {
2824
3167
  throw error;
2825
3168
  return count ?? 0;
2826
3169
  }
3170
+ async getBulk(offset, limit) {
3171
+ let query = this.client.from(this.table).select("*");
3172
+ for (const pkName of this.primaryKeyNames) {
3173
+ query = query.order(String(pkName));
3174
+ }
3175
+ const { data, error } = await query.range(offset, offset + limit - 1);
3176
+ if (error)
3177
+ throw error;
3178
+ if (!data || data.length === 0) {
3179
+ return;
3180
+ }
3181
+ for (const row of data) {
3182
+ for (const key in this.schema.properties) {
3183
+ row[key] = this.sqlToJsValue(key, row[key]);
3184
+ }
3185
+ }
3186
+ return data;
3187
+ }
2827
3188
  async deleteSearch(criteria) {
2828
3189
  const criteriaKeys = Object.keys(criteria);
2829
3190
  if (criteriaKeys.length === 0) {
@@ -2902,8 +3263,8 @@ class SupabaseTabularStorage extends BaseSqlTabularStorage {
2902
3263
  }
2903
3264
  }
2904
3265
  // src/kv/IndexedDbKvStorage.ts
2905
- import { createServiceToken as createServiceToken14 } from "@workglow/util";
2906
- var IDB_KV_REPOSITORY = createServiceToken14("storage.kvRepository.indexedDb");
3266
+ import { createServiceToken as createServiceToken15 } from "@workglow/util";
3267
+ var IDB_KV_REPOSITORY = createServiceToken15("storage.kvRepository.indexedDb");
2907
3268
 
2908
3269
  class IndexedDbKvStorage extends KvViaTabularStorage {
2909
3270
  dbName;
@@ -2915,8 +3276,8 @@ class IndexedDbKvStorage extends KvViaTabularStorage {
2915
3276
  }
2916
3277
  }
2917
3278
  // src/kv/SupabaseKvStorage.ts
2918
- import { createServiceToken as createServiceToken15 } from "@workglow/util";
2919
- var SUPABASE_KV_REPOSITORY = createServiceToken15("storage.kvRepository.supabase");
3279
+ import { createServiceToken as createServiceToken16 } from "@workglow/util";
3280
+ var SUPABASE_KV_REPOSITORY = createServiceToken16("storage.kvRepository.supabase");
2920
3281
 
2921
3282
  class SupabaseKvStorage extends KvViaTabularStorage {
2922
3283
  client;
@@ -2930,8 +3291,8 @@ class SupabaseKvStorage extends KvViaTabularStorage {
2930
3291
  }
2931
3292
  }
2932
3293
  // src/queue/IndexedDbQueueStorage.ts
2933
- import { createServiceToken as createServiceToken16, makeFingerprint as makeFingerprint6, uuid4 as uuid44 } from "@workglow/util";
2934
- var INDEXED_DB_QUEUE_STORAGE = createServiceToken16("jobqueue.storage.indexedDb");
3294
+ import { createServiceToken as createServiceToken17, makeFingerprint as makeFingerprint6, uuid4 as uuid44 } from "@workglow/util";
3295
+ var INDEXED_DB_QUEUE_STORAGE = createServiceToken17("jobqueue.storage.indexedDb");
2935
3296
 
2936
3297
  class IndexedDbQueueStorage {
2937
3298
  queueName;
@@ -3499,8 +3860,8 @@ class IndexedDbQueueStorage {
3499
3860
  }
3500
3861
  }
3501
3862
  // src/queue/SupabaseQueueStorage.ts
3502
- import { createServiceToken as createServiceToken17, makeFingerprint as makeFingerprint7, uuid4 as uuid45 } from "@workglow/util";
3503
- var SUPABASE_QUEUE_STORAGE = createServiceToken17("jobqueue.storage.supabase");
3863
+ import { createServiceToken as createServiceToken18, makeFingerprint as makeFingerprint7, uuid4 as uuid45 } from "@workglow/util";
3864
+ var SUPABASE_QUEUE_STORAGE = createServiceToken18("jobqueue.storage.supabase");
3504
3865
 
3505
3866
  class SupabaseQueueStorage {
3506
3867
  client;
@@ -3999,8 +4360,8 @@ class SupabaseQueueStorage {
3999
4360
  }
4000
4361
  }
4001
4362
  // src/queue-limiter/IndexedDbRateLimiterStorage.ts
4002
- import { createServiceToken as createServiceToken18 } from "@workglow/util";
4003
- var INDEXED_DB_RATE_LIMITER_STORAGE = createServiceToken18("ratelimiter.storage.indexedDb");
4363
+ import { createServiceToken as createServiceToken19 } from "@workglow/util";
4364
+ var INDEXED_DB_RATE_LIMITER_STORAGE = createServiceToken19("ratelimiter.storage.indexedDb");
4004
4365
 
4005
4366
  class IndexedDbRateLimiterStorage {
4006
4367
  executionDb;
@@ -4220,8 +4581,8 @@ class IndexedDbRateLimiterStorage {
4220
4581
  }
4221
4582
  }
4222
4583
  // src/queue-limiter/SupabaseRateLimiterStorage.ts
4223
- import { createServiceToken as createServiceToken19 } from "@workglow/util";
4224
- var SUPABASE_RATE_LIMITER_STORAGE = createServiceToken19("ratelimiter.storage.supabase");
4584
+ import { createServiceToken as createServiceToken20 } from "@workglow/util";
4585
+ var SUPABASE_RATE_LIMITER_STORAGE = createServiceToken20("ratelimiter.storage.supabase");
4225
4586
 
4226
4587
  class SupabaseRateLimiterStorage {
4227
4588
  client;
@@ -4418,6 +4779,8 @@ export {
4418
4779
  IDB_TABULAR_REPOSITORY,
4419
4780
  IDB_KV_REPOSITORY,
4420
4781
  HybridSubscriptionManager,
4782
+ HuggingFaceTabularStorage,
4783
+ HF_TABULAR_REPOSITORY,
4421
4784
  DefaultKeyValueSchema,
4422
4785
  DefaultKeyValueKey,
4423
4786
  CachedTabularStorage,
@@ -4425,4 +4788,4 @@ export {
4425
4788
  BaseTabularStorage
4426
4789
  };
4427
4790
 
4428
- //# debugId=DD95869160C198CF64756E2164756E21
4791
+ //# debugId=7DE4087156DCB1A264756E2164756E21