@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.
- package/dist/browser.js +396 -33
- package/dist/browser.js.map +11 -10
- package/dist/bun.js +470 -53
- package/dist/bun.js.map +15 -14
- package/dist/common.d.ts +1 -0
- package/dist/common.d.ts.map +1 -1
- package/dist/node.js +470 -53
- package/dist/node.js.map +15 -14
- package/dist/queue/PostgresQueueStorage.d.ts +1 -1
- package/dist/queue/PostgresQueueStorage.d.ts.map +1 -1
- package/dist/queue-limiter/PostgresRateLimiterStorage.d.ts +1 -1
- package/dist/queue-limiter/PostgresRateLimiterStorage.d.ts.map +1 -1
- package/dist/tabular/BaseTabularStorage.d.ts +21 -0
- package/dist/tabular/BaseTabularStorage.d.ts.map +1 -1
- package/dist/tabular/CachedTabularStorage.d.ts +7 -0
- package/dist/tabular/CachedTabularStorage.d.ts.map +1 -1
- package/dist/tabular/FsFolderTabularStorage.d.ts +7 -0
- package/dist/tabular/FsFolderTabularStorage.d.ts.map +1 -1
- package/dist/tabular/HuggingFaceTabularStorage.d.ts +119 -0
- package/dist/tabular/HuggingFaceTabularStorage.d.ts.map +1 -0
- package/dist/tabular/ITabularStorage.d.ts +19 -3
- package/dist/tabular/ITabularStorage.d.ts.map +1 -1
- package/dist/tabular/InMemoryTabularStorage.d.ts +7 -0
- package/dist/tabular/InMemoryTabularStorage.d.ts.map +1 -1
- package/dist/tabular/IndexedDbTabularStorage.d.ts +7 -0
- package/dist/tabular/IndexedDbTabularStorage.d.ts.map +1 -1
- package/dist/tabular/PostgresTabularStorage.d.ts +7 -0
- package/dist/tabular/PostgresTabularStorage.d.ts.map +1 -1
- package/dist/tabular/SharedInMemoryTabularStorage.d.ts +7 -0
- package/dist/tabular/SharedInMemoryTabularStorage.d.ts.map +1 -1
- package/dist/tabular/SqliteTabularStorage.d.ts +7 -0
- package/dist/tabular/SqliteTabularStorage.d.ts.map +1 -1
- package/dist/tabular/SupabaseTabularStorage.d.ts +7 -0
- package/dist/tabular/SupabaseTabularStorage.d.ts.map +1 -1
- 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
|
|
874
|
+
createServiceToken as createServiceToken5,
|
|
570
875
|
globalServiceRegistry,
|
|
571
876
|
registerInputResolver
|
|
572
877
|
} from "@workglow/util";
|
|
573
|
-
var 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
|
|
912
|
+
import { createServiceToken as createServiceToken7 } from "@workglow/util";
|
|
608
913
|
|
|
609
914
|
// src/kv/KvStorage.ts
|
|
610
|
-
import { createServiceToken as
|
|
611
|
-
var KV_REPOSITORY =
|
|
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 =
|
|
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
|
|
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
|
|
732
|
-
var QUEUE_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 =
|
|
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
|
|
921
|
-
var IN_MEMORY_RATE_LIMITER_STORAGE =
|
|
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
|
|
980
|
-
var RATE_LIMITER_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
|
|
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 =
|
|
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
|
|
2473
|
+
createServiceToken as createServiceToken13
|
|
2134
2474
|
} from "@workglow/util";
|
|
2135
|
-
var SHARED_IN_MEMORY_TABULAR_REPOSITORY =
|
|
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
|
|
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 =
|
|
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
|
|
2906
|
-
var IDB_KV_REPOSITORY =
|
|
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
|
|
2919
|
-
var SUPABASE_KV_REPOSITORY =
|
|
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
|
|
2934
|
-
var INDEXED_DB_QUEUE_STORAGE =
|
|
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
|
|
3503
|
-
var SUPABASE_QUEUE_STORAGE =
|
|
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
|
|
4003
|
-
var INDEXED_DB_RATE_LIMITER_STORAGE =
|
|
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
|
|
4224
|
-
var SUPABASE_RATE_LIMITER_STORAGE =
|
|
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=
|
|
4791
|
+
//# debugId=7DE4087156DCB1A264756E2164756E21
|