@motiadev/core 0.3.1-beta.87 → 0.3.1-beta.88-041205

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.
@@ -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 file system
62
+ // No cleanup needed for memory
51
63
  }
52
64
  _makeKey(traceId, key) {
53
65
  return `${traceId}:${key}`;
@@ -0,0 +1,3 @@
1
+ import { StateFilter, StateItem } from '../state-adapter';
2
+ export declare const inferType: (value: unknown) => StateItem["type"];
3
+ export declare const filterItem: (item: StateItem, filters: StateFilter[]) => boolean;
@@ -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.87",
5
+ "version": "0.3.1-beta.88-041205",
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",