@workglow/storage 0.2.29 → 0.2.31

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @workglow/storage
2
2
 
3
- Modular storage solutions for Workglow.AI platform with multiple backend implementations. Provides consistent interfaces for key-value storage, tabular data storage, and job queue persistence.
3
+ Modular storage solutions for Workglow.AI platform with multiple backend implementations. Provides consistent interfaces for key-value, tabular, and vector data storage. Job queue persistence lives in `@workglow/job-queue` and the vendor `./job-queue` packages.
4
4
 
5
5
  - [Quick Start](#quick-start)
6
6
  - [Installation](#installation)
@@ -20,9 +20,6 @@ Modular storage solutions for Workglow.AI platform with multiple backend impleme
20
20
  - [Bulk Operations](#bulk-operations-1)
21
21
  - [Searching and Filtering](#searching-and-filtering)
22
22
  - [Environment-Specific Tabular Storage](#environment-specific-tabular-storage)
23
- - [Queue Storage](#queue-storage)
24
- - [Basic Job Queue Operations](#basic-job-queue-operations)
25
- - [Job Management](#job-management)
26
23
  - [Environment-Specific Usage](#environment-specific-usage)
27
24
  - [Browser Environment](#browser-environment)
28
25
  - [Node.js Environment](#nodejs-environment)
@@ -35,7 +32,6 @@ Modular storage solutions for Workglow.AI platform with multiple backend impleme
35
32
  - [API Reference](#api-reference)
36
33
  - [IKvStorage\<Key, Value\>](#ikvrepositorykey-value)
37
34
  - [ITabularStorage\<Schema, PrimaryKeyNames\>](#itabularrepositoryschema-primarykeynames)
38
- - [IQueueStorage\<Input, Output\>](#iqueuestorageinput-output)
39
35
  - [Examples](#examples)
40
36
  - [User Management System](#user-management-system)
41
37
  - [Configuration Management](#configuration-management)
@@ -455,14 +451,16 @@ const fileUsers = new FsFolderTabularStorage<typeof UserSchema, ["id"]>(
455
451
 
456
452
  ### Queue Storage
457
453
 
458
- Persistent job queue storage for background processing and task management.
459
-
460
- > **Note**: Queue storage is primarily used internally by the job queue system. Direct usage is for advanced scenarios.
454
+ Persistent job queue storage for background processing and task management lives in
455
+ `@workglow/job-queue`. In-memory queue storage is exported from `@workglow/job-queue`;
456
+ backend-specific queue storage is exported from vendor packages such as
457
+ `@workglow/sqlite/job-queue`, `@workglow/postgres/job-queue`, `@workglow/indexeddb/job-queue`,
458
+ and `@workglow/supabase/job-queue`.
461
459
 
462
460
  #### Basic Job Queue Operations
463
461
 
464
462
  ```typescript
465
- import { InMemoryQueueStorage, JobStatus } from "@workglow/storage";
463
+ import { InMemoryQueueStorage, JobStatus } from "@workglow/job-queue";
466
464
 
467
465
  // Define job input/output types
468
466
  type ProcessingInput = { text: string; options: any };
@@ -520,11 +518,11 @@ await jobQueue.deleteJobsByStatusAndAge(JobStatus.COMPLETED, 24 * 60 * 60 * 1000
520
518
  import {
521
519
  IndexedDbKvRepository,
522
520
  IndexedDbTabularStorage,
523
- IndexedDbQueueStorage,
524
521
  SupabaseKvRepository,
525
522
  SupabaseTabularStorage,
526
- SupabaseQueueStorage,
527
523
  } from "@workglow/storage";
524
+ import { IndexedDbQueueStorage } from "@workglow/indexeddb/job-queue";
525
+ import { SupabaseQueueStorage } from "@workglow/supabase/job-queue";
528
526
  import { createClient } from "@supabase/supabase-js";
529
527
 
530
528
  // Local browser storage with IndexedDB
@@ -560,10 +558,10 @@ const users = new PostgresTabularStorage(pool, "users", UserSchema, ["id"]);
560
558
  import {
561
559
  SqliteTabularStorage,
562
560
  FsFolderJsonKvRepository,
563
- PostgresQueueStorage,
564
561
  SupabaseTabularStorage,
565
562
  } from "@workglow/storage";
566
- import { Sqlite } from "@workglow/storage/sqlite";
563
+ import { PostgresQueueStorage } from "@workglow/postgres/job-queue";
564
+ import { Sqlite } from "@workglow/sqlite/storage";
567
565
  import { createClient } from "@supabase/supabase-js";
568
566
 
569
567
  await Sqlite.init();
@@ -648,7 +646,6 @@ const tabularSchema = TypeTabularStorage({
648
646
  title: "Data Source",
649
647
  description: "Tabular data repository",
650
648
  });
651
-
652
649
  ```
653
650
 
654
651
  ### Event-Driven Architecture
@@ -807,28 +804,6 @@ await repo.deleteSearch({
807
804
  });
808
805
  ```
809
806
 
810
- ### IQueueStorage<Input, Output>
811
-
812
- Core interface for job queue storage:
813
-
814
- ```typescript
815
- interface IQueueStorage<Input, Output> {
816
- add(job: JobStorageFormat<Input, Output>): Promise<unknown>;
817
- get(id: unknown): Promise<JobStorageFormat<Input, Output> | undefined>;
818
- next(): Promise<JobStorageFormat<Input, Output> | undefined>;
819
- complete(job: JobStorageFormat<Input, Output>): Promise<void>;
820
- peek(status?: JobStatus, num?: number): Promise<JobStorageFormat<Input, Output>[]>;
821
- size(status?: JobStatus): Promise<number>;
822
- abort(id: unknown): Promise<void>;
823
- saveProgress(id: unknown, progress: number, message: string, details: any): Promise<void>;
824
- deleteAll(): Promise<void>;
825
- getByRunId(runId: string): Promise<Array<JobStorageFormat<Input, Output>>>;
826
- outputForInput(input: Input): Promise<Output | null>;
827
- delete(id: unknown): Promise<void>;
828
- deleteJobsByStatusAndAge(status: JobStatus, olderThanMs: number): Promise<void>;
829
- }
830
- ```
831
-
832
807
  ## Examples
833
808
 
834
809
  ### User Management System
@@ -970,11 +945,8 @@ class ConfigManager {
970
945
  ```typescript
971
946
  import { createClient } from "@supabase/supabase-js";
972
947
  import { JsonSchema } from "@workglow/util";
973
- import {
974
- SupabaseTabularStorage,
975
- SupabaseKvRepository,
976
- SupabaseQueueStorage,
977
- } from "@workglow/storage";
948
+ import { SupabaseTabularStorage, SupabaseKvRepository } from "@workglow/storage";
949
+ import { SupabaseQueueStorage } from "@workglow/supabase/job-queue";
978
950
 
979
951
  // Initialize Supabase client
980
952
  const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!);
package/dist/browser.js CHANGED
@@ -1443,34 +1443,41 @@ import {
1443
1443
  registerInputResolver
1444
1444
  } from "@workglow/util";
1445
1445
  var TABULAR_REPOSITORIES = createServiceToken5("storage.tabular.repositories");
1446
- globalServiceRegistry.registerIfAbsent(TABULAR_REPOSITORIES, () => new Map, true);
1447
- function getGlobalTabularRepositories() {
1448
- return globalServiceRegistry.get(TABULAR_REPOSITORIES);
1446
+ function getGlobalTabularRepositories(registry = globalServiceRegistry) {
1447
+ if (!registry.has(TABULAR_REPOSITORIES)) {
1448
+ registerTabularStorageDefaults(registry);
1449
+ }
1450
+ return registry.get(TABULAR_REPOSITORIES);
1449
1451
  }
1450
- function registerTabularRepository(id, repository) {
1451
- const repos = getGlobalTabularRepositories();
1452
+ function registerTabularRepository(id, repository, registry = globalServiceRegistry) {
1453
+ const repos = getGlobalTabularRepositories(registry);
1452
1454
  repos.set(id, repository);
1453
1455
  }
1454
- function getTabularRepository(id) {
1455
- return getGlobalTabularRepositories().get(id);
1456
+ function getTabularRepository(id, registry = globalServiceRegistry) {
1457
+ return getGlobalTabularRepositories(registry).get(id);
1456
1458
  }
1457
- function resolveRepositoryFromRegistry(id, format, registry) {
1458
- const repos = registry.has(TABULAR_REPOSITORIES) ? registry.get(TABULAR_REPOSITORIES) : getGlobalTabularRepositories();
1459
+ function resolveRepositoryFromRegistry(id, _format, registry) {
1460
+ const repos = getGlobalTabularRepositories(registry);
1459
1461
  const repo = repos.get(id);
1460
1462
  if (!repo) {
1461
1463
  throw new Error(`Tabular storage "${id}" not found in registry`);
1462
1464
  }
1463
1465
  return repo;
1464
1466
  }
1465
- registerInputResolver("storage:tabular", resolveRepositoryFromRegistry);
1466
- registerInputCompactor("storage:tabular", (value, _format, registry) => {
1467
- const repos = registry.has(TABULAR_REPOSITORIES) ? registry.get(TABULAR_REPOSITORIES) : getGlobalTabularRepositories();
1467
+ function compactTabularRepository(value, _format, registry) {
1468
+ const repos = getGlobalTabularRepositories(registry);
1468
1469
  for (const [id, repo] of repos) {
1469
1470
  if (repo === value)
1470
1471
  return id;
1471
1472
  }
1472
1473
  return;
1473
- });
1474
+ }
1475
+ function registerTabularStorageDefaults(registry = globalServiceRegistry) {
1476
+ registry.registerIfAbsent(TABULAR_REPOSITORIES, () => new Map, true);
1477
+ registerInputResolver("storage:tabular", resolveRepositoryFromRegistry, registry);
1478
+ registerInputCompactor("storage:tabular", compactTabularRepository, registry);
1479
+ }
1480
+ registerTabularStorageDefaults();
1474
1481
  // src/tabular/TelemetryTabularStorage.ts
1475
1482
  import { traced } from "@workglow/util";
1476
1483
 
@@ -2465,6 +2472,7 @@ class SharedInMemoryTabularStorage extends BaseTabularStorage {
2465
2472
  }
2466
2473
  }
2467
2474
  export {
2475
+ registerTabularStorageDefaults,
2468
2476
  registerTabularRepository,
2469
2477
  pickCoveringIndex,
2470
2478
  isSearchCondition,
@@ -2508,4 +2516,4 @@ export {
2508
2516
  BaseSqlTabularStorage
2509
2517
  };
2510
2518
 
2511
- //# debugId=23715A15DDE7420E64756E2164756E21
2519
+ //# debugId=A14C904C88169CB964756E2164756E21