yaml-flow 1.0.0 → 2.1.0
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 +705 -225
- package/dist/batch/index.cjs +109 -0
- package/dist/batch/index.cjs.map +1 -0
- package/dist/batch/index.d.cts +126 -0
- package/dist/batch/index.d.ts +126 -0
- package/dist/batch/index.js +107 -0
- package/dist/batch/index.js.map +1 -0
- package/dist/config/index.cjs +80 -0
- package/dist/config/index.cjs.map +1 -0
- package/dist/config/index.d.cts +71 -0
- package/dist/config/index.d.ts +71 -0
- package/dist/config/index.js +77 -0
- package/dist/config/index.js.map +1 -0
- package/dist/constants-D1fTEbbM.d.cts +330 -0
- package/dist/constants-D1fTEbbM.d.ts +330 -0
- package/dist/event-graph/index.cjs +895 -0
- package/dist/event-graph/index.cjs.map +1 -0
- package/dist/event-graph/index.d.cts +53 -0
- package/dist/event-graph/index.d.ts +53 -0
- package/dist/event-graph/index.js +855 -0
- package/dist/event-graph/index.js.map +1 -0
- package/dist/index.cjs +1309 -312
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +1271 -306
- package/dist/index.js.map +1 -1
- package/dist/step-machine/index.cjs +513 -0
- package/dist/step-machine/index.cjs.map +1 -0
- package/dist/step-machine/index.d.cts +77 -0
- package/dist/step-machine/index.d.ts +77 -0
- package/dist/step-machine/index.js +502 -0
- package/dist/step-machine/index.js.map +1 -0
- package/dist/stores/file.cjs.map +1 -1
- package/dist/stores/file.d.cts +4 -4
- package/dist/stores/file.d.ts +4 -4
- package/dist/stores/file.js.map +1 -1
- package/dist/stores/index.cjs +232 -0
- package/dist/stores/index.cjs.map +1 -0
- package/dist/stores/index.d.cts +4 -0
- package/dist/stores/index.d.ts +4 -0
- package/dist/stores/index.js +228 -0
- package/dist/stores/index.js.map +1 -0
- package/dist/stores/localStorage.cjs.map +1 -1
- package/dist/stores/localStorage.d.cts +4 -4
- package/dist/stores/localStorage.d.ts +4 -4
- package/dist/stores/localStorage.js.map +1 -1
- package/dist/stores/memory.cjs.map +1 -1
- package/dist/stores/memory.d.cts +4 -4
- package/dist/stores/memory.d.ts +4 -4
- package/dist/stores/memory.js.map +1 -1
- package/dist/types-FZ_eyErS.d.cts +115 -0
- package/dist/types-FZ_eyErS.d.ts +115 -0
- package/package.json +26 -6
- package/dist/core/index.cjs +0 -557
- package/dist/core/index.cjs.map +0 -1
- package/dist/core/index.d.cts +0 -102
- package/dist/core/index.d.ts +0 -102
- package/dist/core/index.js +0 -549
- package/dist/core/index.js.map +0 -1
- package/dist/types-BoWndaAJ.d.cts +0 -237
- package/dist/types-BoWndaAJ.d.ts +0 -237
package/dist/stores/file.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/stores/file.ts"],"names":[],"mappings":";;;AAcO,IAAM,YAAN,
|
|
1
|
+
{"version":3,"sources":["../../src/stores/file.ts"],"names":[],"mappings":"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","file":"file.cjs","sourcesContent":["/**\n * yaml-flow - File Store\n * \n * File-system based store for Node.js environments.\n * Stores each run as a JSON file in the specified directory.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport interface FileStoreOptions {\n /** Directory path for storing flow data */\n directory: string;\n}\n\nexport class FileStore implements StepMachineStore {\n private directory: string;\n private fs: typeof import('fs/promises') | null = null;\n private path: typeof import('path') | null = null;\n\n constructor(options: FileStoreOptions) {\n this.directory = options.directory;\n }\n\n private async ensureModules(): Promise<void> {\n if (!this.fs || !this.path) {\n // Dynamic import for Node.js modules\n this.fs = await import('fs/promises');\n this.path = await import('path');\n \n // Ensure directory exists\n await this.fs.mkdir(this.directory, { recursive: true });\n }\n }\n\n private runPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.run.json`);\n }\n\n private dataPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.data.json`);\n }\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n await this.ensureModules();\n await this.fs!.writeFile(\n this.runPath(runId),\n JSON.stringify(state, null, 2),\n 'utf-8'\n );\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.runPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw err;\n }\n }\n\n async deleteRunState(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.runPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n await this.ensureModules();\n const allData = await this.getAllData(runId);\n allData[key] = value;\n await this.fs!.writeFile(\n this.dataPath(runId),\n JSON.stringify(allData, null, 2),\n 'utf-8'\n );\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n const allData = await this.getAllData(runId);\n return allData[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.dataPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return {};\n }\n throw err;\n }\n }\n\n async clearData(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async listRuns(): Promise<string[]> {\n await this.ensureModules();\n try {\n const files = await this.fs!.readdir(this.directory);\n return files\n .filter(f => f.endsWith('.run.json'))\n .map(f => f.replace('.run.json', ''));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw err;\n }\n }\n\n /**\n * Clear all flow data from directory\n */\n async clearAll(): Promise<void> {\n await this.ensureModules();\n const runs = await this.listRuns();\n await Promise.all(runs.map(runId => this.deleteRunState(runId)));\n }\n}\n"]}
|
package/dist/stores/file.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as StepMachineStore, k as StepMachineState } from '../types-FZ_eyErS.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* yaml-flow - File Store
|
|
@@ -11,7 +11,7 @@ interface FileStoreOptions {
|
|
|
11
11
|
/** Directory path for storing flow data */
|
|
12
12
|
directory: string;
|
|
13
13
|
}
|
|
14
|
-
declare class FileStore implements
|
|
14
|
+
declare class FileStore implements StepMachineStore {
|
|
15
15
|
private directory;
|
|
16
16
|
private fs;
|
|
17
17
|
private path;
|
|
@@ -19,8 +19,8 @@ declare class FileStore implements FlowStore {
|
|
|
19
19
|
private ensureModules;
|
|
20
20
|
private runPath;
|
|
21
21
|
private dataPath;
|
|
22
|
-
saveRunState(runId: string, state:
|
|
23
|
-
loadRunState(runId: string): Promise<
|
|
22
|
+
saveRunState(runId: string, state: StepMachineState): Promise<void>;
|
|
23
|
+
loadRunState(runId: string): Promise<StepMachineState | null>;
|
|
24
24
|
deleteRunState(runId: string): Promise<void>;
|
|
25
25
|
setData(runId: string, key: string, value: unknown): Promise<void>;
|
|
26
26
|
getData(runId: string, key: string): Promise<unknown>;
|
package/dist/stores/file.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as StepMachineStore, k as StepMachineState } from '../types-FZ_eyErS.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* yaml-flow - File Store
|
|
@@ -11,7 +11,7 @@ interface FileStoreOptions {
|
|
|
11
11
|
/** Directory path for storing flow data */
|
|
12
12
|
directory: string;
|
|
13
13
|
}
|
|
14
|
-
declare class FileStore implements
|
|
14
|
+
declare class FileStore implements StepMachineStore {
|
|
15
15
|
private directory;
|
|
16
16
|
private fs;
|
|
17
17
|
private path;
|
|
@@ -19,8 +19,8 @@ declare class FileStore implements FlowStore {
|
|
|
19
19
|
private ensureModules;
|
|
20
20
|
private runPath;
|
|
21
21
|
private dataPath;
|
|
22
|
-
saveRunState(runId: string, state:
|
|
23
|
-
loadRunState(runId: string): Promise<
|
|
22
|
+
saveRunState(runId: string, state: StepMachineState): Promise<void>;
|
|
23
|
+
loadRunState(runId: string): Promise<StepMachineState | null>;
|
|
24
24
|
deleteRunState(runId: string): Promise<void>;
|
|
25
25
|
setData(runId: string, key: string, value: unknown): Promise<void>;
|
|
26
26
|
getData(runId: string, key: string): Promise<unknown>;
|
package/dist/stores/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/stores/file.ts"],"names":[],"mappings":";AAcO,IAAM,YAAN,
|
|
1
|
+
{"version":3,"sources":["../../src/stores/file.ts"],"names":[],"mappings":"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","file":"file.js","sourcesContent":["/**\n * yaml-flow - File Store\n * \n * File-system based store for Node.js environments.\n * Stores each run as a JSON file in the specified directory.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport interface FileStoreOptions {\n /** Directory path for storing flow data */\n directory: string;\n}\n\nexport class FileStore implements StepMachineStore {\n private directory: string;\n private fs: typeof import('fs/promises') | null = null;\n private path: typeof import('path') | null = null;\n\n constructor(options: FileStoreOptions) {\n this.directory = options.directory;\n }\n\n private async ensureModules(): Promise<void> {\n if (!this.fs || !this.path) {\n // Dynamic import for Node.js modules\n this.fs = await import('fs/promises');\n this.path = await import('path');\n \n // Ensure directory exists\n await this.fs.mkdir(this.directory, { recursive: true });\n }\n }\n\n private runPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.run.json`);\n }\n\n private dataPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.data.json`);\n }\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n await this.ensureModules();\n await this.fs!.writeFile(\n this.runPath(runId),\n JSON.stringify(state, null, 2),\n 'utf-8'\n );\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.runPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw err;\n }\n }\n\n async deleteRunState(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.runPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n await this.ensureModules();\n const allData = await this.getAllData(runId);\n allData[key] = value;\n await this.fs!.writeFile(\n this.dataPath(runId),\n JSON.stringify(allData, null, 2),\n 'utf-8'\n );\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n const allData = await this.getAllData(runId);\n return allData[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.dataPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return {};\n }\n throw err;\n }\n }\n\n async clearData(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async listRuns(): Promise<string[]> {\n await this.ensureModules();\n try {\n const files = await this.fs!.readdir(this.directory);\n return files\n .filter(f => f.endsWith('.run.json'))\n .map(f => f.replace('.run.json', ''));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw err;\n }\n }\n\n /**\n * Clear all flow data from directory\n */\n async clearAll(): Promise<void> {\n await this.ensureModules();\n const runs = await this.listRuns();\n await Promise.all(runs.map(runId => this.deleteRunState(runId)));\n }\n}\n"]}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/stores/memory.ts
|
|
4
|
+
var MemoryStore = class {
|
|
5
|
+
runs = /* @__PURE__ */ new Map();
|
|
6
|
+
data = /* @__PURE__ */ new Map();
|
|
7
|
+
async saveRunState(runId, state) {
|
|
8
|
+
this.runs.set(runId, { ...state });
|
|
9
|
+
}
|
|
10
|
+
async loadRunState(runId) {
|
|
11
|
+
const state = this.runs.get(runId);
|
|
12
|
+
return state ? { ...state } : null;
|
|
13
|
+
}
|
|
14
|
+
async deleteRunState(runId) {
|
|
15
|
+
this.runs.delete(runId);
|
|
16
|
+
this.data.delete(runId);
|
|
17
|
+
}
|
|
18
|
+
async setData(runId, key, value) {
|
|
19
|
+
if (!this.data.has(runId)) {
|
|
20
|
+
this.data.set(runId, {});
|
|
21
|
+
}
|
|
22
|
+
const runData = this.data.get(runId);
|
|
23
|
+
runData[key] = value;
|
|
24
|
+
}
|
|
25
|
+
async getData(runId, key) {
|
|
26
|
+
return this.data.get(runId)?.[key];
|
|
27
|
+
}
|
|
28
|
+
async getAllData(runId) {
|
|
29
|
+
return { ...this.data.get(runId) ?? {} };
|
|
30
|
+
}
|
|
31
|
+
async clearData(runId) {
|
|
32
|
+
this.data.delete(runId);
|
|
33
|
+
}
|
|
34
|
+
async listRuns() {
|
|
35
|
+
return Array.from(this.runs.keys());
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Clear all data (useful for testing)
|
|
39
|
+
*/
|
|
40
|
+
clear() {
|
|
41
|
+
this.runs.clear();
|
|
42
|
+
this.data.clear();
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// src/stores/localStorage.ts
|
|
47
|
+
var LocalStorageStore = class {
|
|
48
|
+
prefix;
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
this.prefix = options.prefix ?? "yamlflow";
|
|
51
|
+
if (typeof localStorage === "undefined") {
|
|
52
|
+
throw new Error("LocalStorageStore requires localStorage (browser environment)");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
runKey(runId) {
|
|
56
|
+
return `${this.prefix}:run:${runId}`;
|
|
57
|
+
}
|
|
58
|
+
dataKey(runId) {
|
|
59
|
+
return `${this.prefix}:data:${runId}`;
|
|
60
|
+
}
|
|
61
|
+
indexKey() {
|
|
62
|
+
return `${this.prefix}:runs`;
|
|
63
|
+
}
|
|
64
|
+
async saveRunState(runId, state) {
|
|
65
|
+
localStorage.setItem(this.runKey(runId), JSON.stringify(state));
|
|
66
|
+
const runs = await this.listRuns();
|
|
67
|
+
if (!runs.includes(runId)) {
|
|
68
|
+
runs.push(runId);
|
|
69
|
+
localStorage.setItem(this.indexKey(), JSON.stringify(runs));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async loadRunState(runId) {
|
|
73
|
+
const raw = localStorage.getItem(this.runKey(runId));
|
|
74
|
+
return raw ? JSON.parse(raw) : null;
|
|
75
|
+
}
|
|
76
|
+
async deleteRunState(runId) {
|
|
77
|
+
localStorage.removeItem(this.runKey(runId));
|
|
78
|
+
localStorage.removeItem(this.dataKey(runId));
|
|
79
|
+
const runs = await this.listRuns();
|
|
80
|
+
const filtered = runs.filter((id) => id !== runId);
|
|
81
|
+
localStorage.setItem(this.indexKey(), JSON.stringify(filtered));
|
|
82
|
+
}
|
|
83
|
+
async setData(runId, key, value) {
|
|
84
|
+
const allData = await this.getAllData(runId);
|
|
85
|
+
allData[key] = value;
|
|
86
|
+
localStorage.setItem(this.dataKey(runId), JSON.stringify(allData));
|
|
87
|
+
}
|
|
88
|
+
async getData(runId, key) {
|
|
89
|
+
const allData = await this.getAllData(runId);
|
|
90
|
+
return allData[key];
|
|
91
|
+
}
|
|
92
|
+
async getAllData(runId) {
|
|
93
|
+
const raw = localStorage.getItem(this.dataKey(runId));
|
|
94
|
+
return raw ? JSON.parse(raw) : {};
|
|
95
|
+
}
|
|
96
|
+
async clearData(runId) {
|
|
97
|
+
localStorage.removeItem(this.dataKey(runId));
|
|
98
|
+
}
|
|
99
|
+
async listRuns() {
|
|
100
|
+
const raw = localStorage.getItem(this.indexKey());
|
|
101
|
+
return raw ? JSON.parse(raw) : [];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Clear all flow data from localStorage
|
|
105
|
+
*/
|
|
106
|
+
clearAll() {
|
|
107
|
+
const keysToRemove = [];
|
|
108
|
+
for (let i = 0; i < localStorage.length; i++) {
|
|
109
|
+
const key = localStorage.key(i);
|
|
110
|
+
if (key?.startsWith(this.prefix + ":")) {
|
|
111
|
+
keysToRemove.push(key);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
keysToRemove.forEach((key) => localStorage.removeItem(key));
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// src/stores/file.ts
|
|
119
|
+
var FileStore = class {
|
|
120
|
+
directory;
|
|
121
|
+
fs = null;
|
|
122
|
+
path = null;
|
|
123
|
+
constructor(options) {
|
|
124
|
+
this.directory = options.directory;
|
|
125
|
+
}
|
|
126
|
+
async ensureModules() {
|
|
127
|
+
if (!this.fs || !this.path) {
|
|
128
|
+
this.fs = await import('fs/promises');
|
|
129
|
+
this.path = await import('path');
|
|
130
|
+
await this.fs.mkdir(this.directory, { recursive: true });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
runPath(runId) {
|
|
134
|
+
return this.path.join(this.directory, `${runId}.run.json`);
|
|
135
|
+
}
|
|
136
|
+
dataPath(runId) {
|
|
137
|
+
return this.path.join(this.directory, `${runId}.data.json`);
|
|
138
|
+
}
|
|
139
|
+
async saveRunState(runId, state) {
|
|
140
|
+
await this.ensureModules();
|
|
141
|
+
await this.fs.writeFile(
|
|
142
|
+
this.runPath(runId),
|
|
143
|
+
JSON.stringify(state, null, 2),
|
|
144
|
+
"utf-8"
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
async loadRunState(runId) {
|
|
148
|
+
await this.ensureModules();
|
|
149
|
+
try {
|
|
150
|
+
const raw = await this.fs.readFile(this.runPath(runId), "utf-8");
|
|
151
|
+
return JSON.parse(raw);
|
|
152
|
+
} catch (err) {
|
|
153
|
+
if (err.code === "ENOENT") {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
throw err;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async deleteRunState(runId) {
|
|
160
|
+
await this.ensureModules();
|
|
161
|
+
try {
|
|
162
|
+
await this.fs.unlink(this.runPath(runId));
|
|
163
|
+
} catch (err) {
|
|
164
|
+
if (err.code !== "ENOENT") throw err;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
await this.fs.unlink(this.dataPath(runId));
|
|
168
|
+
} catch (err) {
|
|
169
|
+
if (err.code !== "ENOENT") throw err;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async setData(runId, key, value) {
|
|
173
|
+
await this.ensureModules();
|
|
174
|
+
const allData = await this.getAllData(runId);
|
|
175
|
+
allData[key] = value;
|
|
176
|
+
await this.fs.writeFile(
|
|
177
|
+
this.dataPath(runId),
|
|
178
|
+
JSON.stringify(allData, null, 2),
|
|
179
|
+
"utf-8"
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
async getData(runId, key) {
|
|
183
|
+
const allData = await this.getAllData(runId);
|
|
184
|
+
return allData[key];
|
|
185
|
+
}
|
|
186
|
+
async getAllData(runId) {
|
|
187
|
+
await this.ensureModules();
|
|
188
|
+
try {
|
|
189
|
+
const raw = await this.fs.readFile(this.dataPath(runId), "utf-8");
|
|
190
|
+
return JSON.parse(raw);
|
|
191
|
+
} catch (err) {
|
|
192
|
+
if (err.code === "ENOENT") {
|
|
193
|
+
return {};
|
|
194
|
+
}
|
|
195
|
+
throw err;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async clearData(runId) {
|
|
199
|
+
await this.ensureModules();
|
|
200
|
+
try {
|
|
201
|
+
await this.fs.unlink(this.dataPath(runId));
|
|
202
|
+
} catch (err) {
|
|
203
|
+
if (err.code !== "ENOENT") throw err;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async listRuns() {
|
|
207
|
+
await this.ensureModules();
|
|
208
|
+
try {
|
|
209
|
+
const files = await this.fs.readdir(this.directory);
|
|
210
|
+
return files.filter((f) => f.endsWith(".run.json")).map((f) => f.replace(".run.json", ""));
|
|
211
|
+
} catch (err) {
|
|
212
|
+
if (err.code === "ENOENT") {
|
|
213
|
+
return [];
|
|
214
|
+
}
|
|
215
|
+
throw err;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Clear all flow data from directory
|
|
220
|
+
*/
|
|
221
|
+
async clearAll() {
|
|
222
|
+
await this.ensureModules();
|
|
223
|
+
const runs = await this.listRuns();
|
|
224
|
+
await Promise.all(runs.map((runId) => this.deleteRunState(runId)));
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
exports.FileStore = FileStore;
|
|
229
|
+
exports.LocalStorageStore = LocalStorageStore;
|
|
230
|
+
exports.MemoryStore = MemoryStore;
|
|
231
|
+
//# sourceMappingURL=index.cjs.map
|
|
232
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/stores/memory.ts","../../src/stores/localStorage.ts","../../src/stores/file.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * yaml-flow - Memory Store\n * \n * In-memory store implementation. Works in both browser and Node.js.\n * Data is lost when the process exits - use for testing or short-lived flows.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport class MemoryStore implements StepMachineStore {\n private runs: Map<string, StepMachineState> = new Map();\n private data: Map<string, Record<string, unknown>> = new Map();\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n this.runs.set(runId, { ...state });\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n const state = this.runs.get(runId);\n return state ? { ...state } : null;\n }\n\n async deleteRunState(runId: string): Promise<void> {\n this.runs.delete(runId);\n this.data.delete(runId);\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n if (!this.data.has(runId)) {\n this.data.set(runId, {});\n }\n const runData = this.data.get(runId)!;\n runData[key] = value;\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n return this.data.get(runId)?.[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n return { ...(this.data.get(runId) ?? {}) };\n }\n\n async clearData(runId: string): Promise<void> {\n this.data.delete(runId);\n }\n\n async listRuns(): Promise<string[]> {\n return Array.from(this.runs.keys());\n }\n\n /**\n * Clear all data (useful for testing)\n */\n clear(): void {\n this.runs.clear();\n this.data.clear();\n }\n}\n","/**\n * yaml-flow - LocalStorage Store\n * \n * Browser localStorage-based store implementation.\n * Data persists across page reloads but is limited to ~5MB per origin.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport interface LocalStorageStoreOptions {\n /** Key prefix for namespacing (default: 'yamlflow') */\n prefix?: string;\n}\n\nexport class LocalStorageStore implements StepMachineStore {\n private prefix: string;\n\n constructor(options: LocalStorageStoreOptions = {}) {\n this.prefix = options.prefix ?? 'yamlflow';\n \n // Ensure localStorage is available\n if (typeof localStorage === 'undefined') {\n throw new Error('LocalStorageStore requires localStorage (browser environment)');\n }\n }\n\n private runKey(runId: string): string {\n return `${this.prefix}:run:${runId}`;\n }\n\n private dataKey(runId: string): string {\n return `${this.prefix}:data:${runId}`;\n }\n\n private indexKey(): string {\n return `${this.prefix}:runs`;\n }\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n localStorage.setItem(this.runKey(runId), JSON.stringify(state));\n \n // Update run index\n const runs = await this.listRuns();\n if (!runs.includes(runId)) {\n runs.push(runId);\n localStorage.setItem(this.indexKey(), JSON.stringify(runs));\n }\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n const raw = localStorage.getItem(this.runKey(runId));\n return raw ? JSON.parse(raw) : null;\n }\n\n async deleteRunState(runId: string): Promise<void> {\n localStorage.removeItem(this.runKey(runId));\n localStorage.removeItem(this.dataKey(runId));\n \n // Update run index\n const runs = await this.listRuns();\n const filtered = runs.filter(id => id !== runId);\n localStorage.setItem(this.indexKey(), JSON.stringify(filtered));\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n const allData = await this.getAllData(runId);\n allData[key] = value;\n localStorage.setItem(this.dataKey(runId), JSON.stringify(allData));\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n const allData = await this.getAllData(runId);\n return allData[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n const raw = localStorage.getItem(this.dataKey(runId));\n return raw ? JSON.parse(raw) : {};\n }\n\n async clearData(runId: string): Promise<void> {\n localStorage.removeItem(this.dataKey(runId));\n }\n\n async listRuns(): Promise<string[]> {\n const raw = localStorage.getItem(this.indexKey());\n return raw ? JSON.parse(raw) : [];\n }\n\n /**\n * Clear all flow data from localStorage\n */\n clearAll(): void {\n const keysToRemove: string[] = [];\n \n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix + ':')) {\n keysToRemove.push(key);\n }\n }\n \n keysToRemove.forEach(key => localStorage.removeItem(key));\n }\n}\n","/**\n * yaml-flow - File Store\n * \n * File-system based store for Node.js environments.\n * Stores each run as a JSON file in the specified directory.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport interface FileStoreOptions {\n /** Directory path for storing flow data */\n directory: string;\n}\n\nexport class FileStore implements StepMachineStore {\n private directory: string;\n private fs: typeof import('fs/promises') | null = null;\n private path: typeof import('path') | null = null;\n\n constructor(options: FileStoreOptions) {\n this.directory = options.directory;\n }\n\n private async ensureModules(): Promise<void> {\n if (!this.fs || !this.path) {\n // Dynamic import for Node.js modules\n this.fs = await import('fs/promises');\n this.path = await import('path');\n \n // Ensure directory exists\n await this.fs.mkdir(this.directory, { recursive: true });\n }\n }\n\n private runPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.run.json`);\n }\n\n private dataPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.data.json`);\n }\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n await this.ensureModules();\n await this.fs!.writeFile(\n this.runPath(runId),\n JSON.stringify(state, null, 2),\n 'utf-8'\n );\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.runPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw err;\n }\n }\n\n async deleteRunState(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.runPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n await this.ensureModules();\n const allData = await this.getAllData(runId);\n allData[key] = value;\n await this.fs!.writeFile(\n this.dataPath(runId),\n JSON.stringify(allData, null, 2),\n 'utf-8'\n );\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n const allData = await this.getAllData(runId);\n return allData[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.dataPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return {};\n }\n throw err;\n }\n }\n\n async clearData(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async listRuns(): Promise<string[]> {\n await this.ensureModules();\n try {\n const files = await this.fs!.readdir(this.directory);\n return files\n .filter(f => f.endsWith('.run.json'))\n .map(f => f.replace('.run.json', ''));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw err;\n }\n }\n\n /**\n * Clear all flow data from directory\n */\n async clearAll(): Promise<void> {\n await this.ensureModules();\n const runs = await this.listRuns();\n await Promise.all(runs.map(runId => this.deleteRunState(runId)));\n }\n}\n"]}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// src/stores/memory.ts
|
|
2
|
+
var MemoryStore = class {
|
|
3
|
+
runs = /* @__PURE__ */ new Map();
|
|
4
|
+
data = /* @__PURE__ */ new Map();
|
|
5
|
+
async saveRunState(runId, state) {
|
|
6
|
+
this.runs.set(runId, { ...state });
|
|
7
|
+
}
|
|
8
|
+
async loadRunState(runId) {
|
|
9
|
+
const state = this.runs.get(runId);
|
|
10
|
+
return state ? { ...state } : null;
|
|
11
|
+
}
|
|
12
|
+
async deleteRunState(runId) {
|
|
13
|
+
this.runs.delete(runId);
|
|
14
|
+
this.data.delete(runId);
|
|
15
|
+
}
|
|
16
|
+
async setData(runId, key, value) {
|
|
17
|
+
if (!this.data.has(runId)) {
|
|
18
|
+
this.data.set(runId, {});
|
|
19
|
+
}
|
|
20
|
+
const runData = this.data.get(runId);
|
|
21
|
+
runData[key] = value;
|
|
22
|
+
}
|
|
23
|
+
async getData(runId, key) {
|
|
24
|
+
return this.data.get(runId)?.[key];
|
|
25
|
+
}
|
|
26
|
+
async getAllData(runId) {
|
|
27
|
+
return { ...this.data.get(runId) ?? {} };
|
|
28
|
+
}
|
|
29
|
+
async clearData(runId) {
|
|
30
|
+
this.data.delete(runId);
|
|
31
|
+
}
|
|
32
|
+
async listRuns() {
|
|
33
|
+
return Array.from(this.runs.keys());
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Clear all data (useful for testing)
|
|
37
|
+
*/
|
|
38
|
+
clear() {
|
|
39
|
+
this.runs.clear();
|
|
40
|
+
this.data.clear();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// src/stores/localStorage.ts
|
|
45
|
+
var LocalStorageStore = class {
|
|
46
|
+
prefix;
|
|
47
|
+
constructor(options = {}) {
|
|
48
|
+
this.prefix = options.prefix ?? "yamlflow";
|
|
49
|
+
if (typeof localStorage === "undefined") {
|
|
50
|
+
throw new Error("LocalStorageStore requires localStorage (browser environment)");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
runKey(runId) {
|
|
54
|
+
return `${this.prefix}:run:${runId}`;
|
|
55
|
+
}
|
|
56
|
+
dataKey(runId) {
|
|
57
|
+
return `${this.prefix}:data:${runId}`;
|
|
58
|
+
}
|
|
59
|
+
indexKey() {
|
|
60
|
+
return `${this.prefix}:runs`;
|
|
61
|
+
}
|
|
62
|
+
async saveRunState(runId, state) {
|
|
63
|
+
localStorage.setItem(this.runKey(runId), JSON.stringify(state));
|
|
64
|
+
const runs = await this.listRuns();
|
|
65
|
+
if (!runs.includes(runId)) {
|
|
66
|
+
runs.push(runId);
|
|
67
|
+
localStorage.setItem(this.indexKey(), JSON.stringify(runs));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async loadRunState(runId) {
|
|
71
|
+
const raw = localStorage.getItem(this.runKey(runId));
|
|
72
|
+
return raw ? JSON.parse(raw) : null;
|
|
73
|
+
}
|
|
74
|
+
async deleteRunState(runId) {
|
|
75
|
+
localStorage.removeItem(this.runKey(runId));
|
|
76
|
+
localStorage.removeItem(this.dataKey(runId));
|
|
77
|
+
const runs = await this.listRuns();
|
|
78
|
+
const filtered = runs.filter((id) => id !== runId);
|
|
79
|
+
localStorage.setItem(this.indexKey(), JSON.stringify(filtered));
|
|
80
|
+
}
|
|
81
|
+
async setData(runId, key, value) {
|
|
82
|
+
const allData = await this.getAllData(runId);
|
|
83
|
+
allData[key] = value;
|
|
84
|
+
localStorage.setItem(this.dataKey(runId), JSON.stringify(allData));
|
|
85
|
+
}
|
|
86
|
+
async getData(runId, key) {
|
|
87
|
+
const allData = await this.getAllData(runId);
|
|
88
|
+
return allData[key];
|
|
89
|
+
}
|
|
90
|
+
async getAllData(runId) {
|
|
91
|
+
const raw = localStorage.getItem(this.dataKey(runId));
|
|
92
|
+
return raw ? JSON.parse(raw) : {};
|
|
93
|
+
}
|
|
94
|
+
async clearData(runId) {
|
|
95
|
+
localStorage.removeItem(this.dataKey(runId));
|
|
96
|
+
}
|
|
97
|
+
async listRuns() {
|
|
98
|
+
const raw = localStorage.getItem(this.indexKey());
|
|
99
|
+
return raw ? JSON.parse(raw) : [];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Clear all flow data from localStorage
|
|
103
|
+
*/
|
|
104
|
+
clearAll() {
|
|
105
|
+
const keysToRemove = [];
|
|
106
|
+
for (let i = 0; i < localStorage.length; i++) {
|
|
107
|
+
const key = localStorage.key(i);
|
|
108
|
+
if (key?.startsWith(this.prefix + ":")) {
|
|
109
|
+
keysToRemove.push(key);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
keysToRemove.forEach((key) => localStorage.removeItem(key));
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
// src/stores/file.ts
|
|
117
|
+
var FileStore = class {
|
|
118
|
+
directory;
|
|
119
|
+
fs = null;
|
|
120
|
+
path = null;
|
|
121
|
+
constructor(options) {
|
|
122
|
+
this.directory = options.directory;
|
|
123
|
+
}
|
|
124
|
+
async ensureModules() {
|
|
125
|
+
if (!this.fs || !this.path) {
|
|
126
|
+
this.fs = await import('fs/promises');
|
|
127
|
+
this.path = await import('path');
|
|
128
|
+
await this.fs.mkdir(this.directory, { recursive: true });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
runPath(runId) {
|
|
132
|
+
return this.path.join(this.directory, `${runId}.run.json`);
|
|
133
|
+
}
|
|
134
|
+
dataPath(runId) {
|
|
135
|
+
return this.path.join(this.directory, `${runId}.data.json`);
|
|
136
|
+
}
|
|
137
|
+
async saveRunState(runId, state) {
|
|
138
|
+
await this.ensureModules();
|
|
139
|
+
await this.fs.writeFile(
|
|
140
|
+
this.runPath(runId),
|
|
141
|
+
JSON.stringify(state, null, 2),
|
|
142
|
+
"utf-8"
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
async loadRunState(runId) {
|
|
146
|
+
await this.ensureModules();
|
|
147
|
+
try {
|
|
148
|
+
const raw = await this.fs.readFile(this.runPath(runId), "utf-8");
|
|
149
|
+
return JSON.parse(raw);
|
|
150
|
+
} catch (err) {
|
|
151
|
+
if (err.code === "ENOENT") {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
throw err;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async deleteRunState(runId) {
|
|
158
|
+
await this.ensureModules();
|
|
159
|
+
try {
|
|
160
|
+
await this.fs.unlink(this.runPath(runId));
|
|
161
|
+
} catch (err) {
|
|
162
|
+
if (err.code !== "ENOENT") throw err;
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
await this.fs.unlink(this.dataPath(runId));
|
|
166
|
+
} catch (err) {
|
|
167
|
+
if (err.code !== "ENOENT") throw err;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async setData(runId, key, value) {
|
|
171
|
+
await this.ensureModules();
|
|
172
|
+
const allData = await this.getAllData(runId);
|
|
173
|
+
allData[key] = value;
|
|
174
|
+
await this.fs.writeFile(
|
|
175
|
+
this.dataPath(runId),
|
|
176
|
+
JSON.stringify(allData, null, 2),
|
|
177
|
+
"utf-8"
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
async getData(runId, key) {
|
|
181
|
+
const allData = await this.getAllData(runId);
|
|
182
|
+
return allData[key];
|
|
183
|
+
}
|
|
184
|
+
async getAllData(runId) {
|
|
185
|
+
await this.ensureModules();
|
|
186
|
+
try {
|
|
187
|
+
const raw = await this.fs.readFile(this.dataPath(runId), "utf-8");
|
|
188
|
+
return JSON.parse(raw);
|
|
189
|
+
} catch (err) {
|
|
190
|
+
if (err.code === "ENOENT") {
|
|
191
|
+
return {};
|
|
192
|
+
}
|
|
193
|
+
throw err;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async clearData(runId) {
|
|
197
|
+
await this.ensureModules();
|
|
198
|
+
try {
|
|
199
|
+
await this.fs.unlink(this.dataPath(runId));
|
|
200
|
+
} catch (err) {
|
|
201
|
+
if (err.code !== "ENOENT") throw err;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async listRuns() {
|
|
205
|
+
await this.ensureModules();
|
|
206
|
+
try {
|
|
207
|
+
const files = await this.fs.readdir(this.directory);
|
|
208
|
+
return files.filter((f) => f.endsWith(".run.json")).map((f) => f.replace(".run.json", ""));
|
|
209
|
+
} catch (err) {
|
|
210
|
+
if (err.code === "ENOENT") {
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
throw err;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Clear all flow data from directory
|
|
218
|
+
*/
|
|
219
|
+
async clearAll() {
|
|
220
|
+
await this.ensureModules();
|
|
221
|
+
const runs = await this.listRuns();
|
|
222
|
+
await Promise.all(runs.map((runId) => this.deleteRunState(runId)));
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
export { FileStore, LocalStorageStore, MemoryStore };
|
|
227
|
+
//# sourceMappingURL=index.js.map
|
|
228
|
+
//# sourceMappingURL=index.js.map
|