@motiadev/core 0.3.1-beta.87 → 0.3.1-beta.88-406962
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/src/state/adapters/default-state-adapter.d.ts +2 -1
- package/dist/src/state/adapters/default-state-adapter.js +12 -0
- package/dist/src/state/adapters/memory-state-adapter.d.ts +2 -1
- package/dist/src/state/adapters/memory-state-adapter.js +13 -1
- package/dist/src/state/adapters/utils.d.ts +3 -0
- package/dist/src/state/adapters/utils.js +64 -0
- package/dist/src/state/state-adapter.d.ts +16 -0
- package/package.json +3 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StateAdapter } from '../state-adapter';
|
|
1
|
+
import { StateAdapter, StateItem, StateItemsInput } from '../state-adapter';
|
|
2
2
|
export type FileAdapterConfig = {
|
|
3
3
|
adapter: 'default';
|
|
4
4
|
filePath: string;
|
|
@@ -15,6 +15,7 @@ export declare class FileStateAdapter implements StateAdapter {
|
|
|
15
15
|
keys(traceId: string): Promise<string[]>;
|
|
16
16
|
traceIds(): Promise<string[]>;
|
|
17
17
|
cleanup(): Promise<void>;
|
|
18
|
+
items(input: StateItemsInput): Promise<StateItem[]>;
|
|
18
19
|
private _makeKey;
|
|
19
20
|
private _readFile;
|
|
20
21
|
private _writeFile;
|
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.FileStateAdapter = void 0;
|
|
40
40
|
const fs_1 = __importDefault(require("fs"));
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
|
+
const utils_1 = require("./utils");
|
|
42
43
|
class FileStateAdapter {
|
|
43
44
|
constructor(config) {
|
|
44
45
|
this.filePath = path.join(config.filePath, 'motia.state.json');
|
|
@@ -112,6 +113,17 @@ class FileStateAdapter {
|
|
|
112
113
|
async cleanup() {
|
|
113
114
|
// No cleanup needed for file system
|
|
114
115
|
}
|
|
116
|
+
async items(input) {
|
|
117
|
+
const data = this._readFile();
|
|
118
|
+
return Object.entries(data)
|
|
119
|
+
.map(([key, value]) => {
|
|
120
|
+
const [groupId, itemKey] = key.split(':');
|
|
121
|
+
const itemValue = JSON.parse(value);
|
|
122
|
+
return { groupId, key: itemKey, value: itemValue, type: (0, utils_1.inferType)(itemValue) };
|
|
123
|
+
})
|
|
124
|
+
.filter((item) => (input.groupId ? item.groupId === input.groupId : true))
|
|
125
|
+
.filter((item) => (input.filter ? (0, utils_1.filterItem)(item, input.filter) : true));
|
|
126
|
+
}
|
|
115
127
|
_makeKey(traceId, key) {
|
|
116
128
|
return `${traceId}:${key}`;
|
|
117
129
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StateAdapter } from '../state-adapter';
|
|
1
|
+
import { StateAdapter, StateItem, StateItemsInput } from '../state-adapter';
|
|
2
2
|
export declare class MemoryStateAdapter implements StateAdapter {
|
|
3
3
|
private state;
|
|
4
4
|
constructor();
|
|
@@ -9,6 +9,7 @@ export declare class MemoryStateAdapter implements StateAdapter {
|
|
|
9
9
|
clear(traceId: string): Promise<void>;
|
|
10
10
|
keys(traceId: string): Promise<string[]>;
|
|
11
11
|
traceIds(): Promise<string[]>;
|
|
12
|
+
items(input: StateItemsInput): Promise<StateItem[]>;
|
|
12
13
|
cleanup(): Promise<void>;
|
|
13
14
|
private _makeKey;
|
|
14
15
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MemoryStateAdapter = void 0;
|
|
4
|
+
const utils_1 = require("./utils");
|
|
4
5
|
class MemoryStateAdapter {
|
|
5
6
|
constructor() {
|
|
6
7
|
this.state = {};
|
|
@@ -46,8 +47,19 @@ class MemoryStateAdapter {
|
|
|
46
47
|
Object.keys(this.state).forEach((key) => traceIds.add(key.split(':')[0]));
|
|
47
48
|
return Array.from(traceIds);
|
|
48
49
|
}
|
|
50
|
+
async items(input) {
|
|
51
|
+
return Object.entries(this.state)
|
|
52
|
+
.map(([key, value]) => ({
|
|
53
|
+
groupId: key.split(':')[0],
|
|
54
|
+
key: key.split(':')[1],
|
|
55
|
+
type: (0, utils_1.inferType)(value),
|
|
56
|
+
value: value,
|
|
57
|
+
}))
|
|
58
|
+
.filter((item) => (input.groupId ? item.groupId === input.groupId : true))
|
|
59
|
+
.filter((item) => (input.filter ? (0, utils_1.filterItem)(item, input.filter) : true));
|
|
60
|
+
}
|
|
49
61
|
async cleanup() {
|
|
50
|
-
// No cleanup needed for
|
|
62
|
+
// No cleanup needed for memory
|
|
51
63
|
}
|
|
52
64
|
_makeKey(traceId, key) {
|
|
53
65
|
return `${traceId}:${key}`;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.filterItem = exports.inferType = void 0;
|
|
7
|
+
const lodash_get_1 = __importDefault(require("lodash.get"));
|
|
8
|
+
const inferType = (value) => {
|
|
9
|
+
if (typeof value === 'string') {
|
|
10
|
+
return 'string';
|
|
11
|
+
}
|
|
12
|
+
else if (typeof value === 'number') {
|
|
13
|
+
return 'number';
|
|
14
|
+
}
|
|
15
|
+
else if (typeof value === 'boolean') {
|
|
16
|
+
return 'boolean';
|
|
17
|
+
}
|
|
18
|
+
else if (Array.isArray(value)) {
|
|
19
|
+
return 'array';
|
|
20
|
+
}
|
|
21
|
+
else if (typeof value === 'object' && value !== null) {
|
|
22
|
+
return 'object';
|
|
23
|
+
}
|
|
24
|
+
return 'null';
|
|
25
|
+
};
|
|
26
|
+
exports.inferType = inferType;
|
|
27
|
+
const filterItem = (item, filters) => {
|
|
28
|
+
const compare = (value, operation, filterValue) => {
|
|
29
|
+
switch (operation) {
|
|
30
|
+
case 'eq':
|
|
31
|
+
return value === filterValue;
|
|
32
|
+
case 'neq':
|
|
33
|
+
return value !== filterValue;
|
|
34
|
+
case 'gt':
|
|
35
|
+
return value && value > filterValue;
|
|
36
|
+
case 'gte':
|
|
37
|
+
return value && value >= filterValue;
|
|
38
|
+
case 'lt':
|
|
39
|
+
return value && value < filterValue;
|
|
40
|
+
case 'lte':
|
|
41
|
+
return value && value <= filterValue;
|
|
42
|
+
case 'contains':
|
|
43
|
+
return value && value.includes(filterValue);
|
|
44
|
+
case 'notContains':
|
|
45
|
+
return !value || !value.includes(filterValue);
|
|
46
|
+
case 'startsWith':
|
|
47
|
+
return value && value.startsWith(filterValue);
|
|
48
|
+
case 'endsWith':
|
|
49
|
+
return value && value.endsWith(filterValue);
|
|
50
|
+
case 'isNotNull':
|
|
51
|
+
return value !== null && value !== undefined;
|
|
52
|
+
case 'isNull':
|
|
53
|
+
return value === null || value === undefined;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
return filters.every((filter) => {
|
|
57
|
+
const valueFromKey = (0, lodash_get_1.default)(item.value, filter.valueKey);
|
|
58
|
+
if (filter.valueKey === 'key') {
|
|
59
|
+
return compare(item.key, filter.operation, filter.value) || compare(valueFromKey, filter.operation, filter.value);
|
|
60
|
+
}
|
|
61
|
+
return compare(valueFromKey, filter.operation, filter.value);
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
exports.filterItem = filterItem;
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { InternalStateManager } from '../types';
|
|
2
|
+
export interface StateItem {
|
|
3
|
+
groupId: string;
|
|
4
|
+
key: string;
|
|
5
|
+
type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'null';
|
|
6
|
+
value: string | number | boolean | object | unknown[] | null;
|
|
7
|
+
}
|
|
8
|
+
export interface StateFilter {
|
|
9
|
+
valueKey: string;
|
|
10
|
+
operation: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'isNotNull' | 'isNull';
|
|
11
|
+
value: string;
|
|
12
|
+
}
|
|
13
|
+
export interface StateItemsInput {
|
|
14
|
+
groupId?: string;
|
|
15
|
+
filter?: StateFilter[];
|
|
16
|
+
}
|
|
2
17
|
/**
|
|
3
18
|
* Interface for state management adapters
|
|
4
19
|
*/
|
|
@@ -7,4 +22,5 @@ export interface StateAdapter extends InternalStateManager {
|
|
|
7
22
|
cleanup(): Promise<void>;
|
|
8
23
|
keys(traceId: string): Promise<string[]>;
|
|
9
24
|
traceIds(): Promise<string[]>;
|
|
25
|
+
items(input: StateItemsInput): Promise<StateItem[]>;
|
|
10
26
|
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@motiadev/core",
|
|
3
3
|
"description": "Core functionality for the Motia framework, providing the foundation for building event-driven workflows.",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
|
-
"version": "0.3.1-beta.
|
|
5
|
+
"version": "0.3.1-beta.88-406962",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@amplitude/analytics-node": "^1.3.8",
|
|
8
8
|
"body-parser": "^1.20.3",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"cors": "^2.8.5",
|
|
11
11
|
"dotenv": "^16.4.7",
|
|
12
12
|
"express": "^4.21.2",
|
|
13
|
+
"lodash.get": "^4.4.2",
|
|
13
14
|
"node-cron": "^3.0.3",
|
|
14
15
|
"ts-node": "^10.9.2",
|
|
15
16
|
"tsconfig-paths": "^4.2.0",
|
|
@@ -22,6 +23,7 @@
|
|
|
22
23
|
"@types/cors": "^2.8.17",
|
|
23
24
|
"@types/express": "^5.0.0",
|
|
24
25
|
"@types/jest": "^29.5.14",
|
|
26
|
+
"@types/lodash.get": "^4.4.9",
|
|
25
27
|
"@types/node-cron": "^3.0.11",
|
|
26
28
|
"@types/supertest": "^6.0.2",
|
|
27
29
|
"@types/ws": "^8.18.1",
|