@manifesto-ai/core 0.3.0 → 1.0.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.
Files changed (259) hide show
  1. package/README.md +129 -499
  2. package/dist/core/apply.d.ts +16 -0
  3. package/dist/core/apply.d.ts.map +1 -0
  4. package/dist/core/apply.js +52 -0
  5. package/dist/core/apply.js.map +1 -0
  6. package/dist/core/compute.d.ts +17 -0
  7. package/dist/core/compute.d.ts.map +1 -0
  8. package/dist/core/compute.js +197 -0
  9. package/dist/core/compute.js.map +1 -0
  10. package/dist/core/compute.test.d.ts +2 -0
  11. package/dist/core/compute.test.d.ts.map +1 -0
  12. package/dist/core/compute.test.js +400 -0
  13. package/dist/core/compute.test.js.map +1 -0
  14. package/dist/core/explain.d.ts +14 -0
  15. package/dist/core/explain.d.ts.map +1 -0
  16. package/dist/core/explain.js +74 -0
  17. package/dist/core/explain.js.map +1 -0
  18. package/dist/core/index.d.ts +5 -0
  19. package/dist/core/index.d.ts.map +1 -0
  20. package/dist/core/index.js +5 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/validate.d.ts +15 -0
  23. package/dist/core/validate.d.ts.map +1 -0
  24. package/dist/core/validate.js +143 -0
  25. package/dist/core/validate.js.map +1 -0
  26. package/dist/core/validate.test.d.ts +2 -0
  27. package/dist/core/validate.test.d.ts.map +1 -0
  28. package/dist/core/validate.test.js +450 -0
  29. package/dist/core/validate.test.js.map +1 -0
  30. package/dist/errors.d.ts +30 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +51 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/evaluator/computed.d.ts +14 -0
  35. package/dist/evaluator/computed.d.ts.map +1 -0
  36. package/dist/evaluator/computed.js +57 -0
  37. package/dist/evaluator/computed.js.map +1 -0
  38. package/dist/evaluator/context.d.ts +46 -0
  39. package/dist/evaluator/context.d.ts.map +1 -0
  40. package/dist/evaluator/context.js +35 -0
  41. package/dist/evaluator/context.js.map +1 -0
  42. package/dist/evaluator/dag.d.ts +30 -0
  43. package/dist/evaluator/dag.d.ts.map +1 -0
  44. package/dist/evaluator/dag.js +121 -0
  45. package/dist/evaluator/dag.js.map +1 -0
  46. package/dist/evaluator/expr.d.ts +11 -0
  47. package/dist/evaluator/expr.d.ts.map +1 -0
  48. package/dist/evaluator/expr.js +498 -0
  49. package/dist/evaluator/expr.js.map +1 -0
  50. package/dist/evaluator/expr.test.d.ts +2 -0
  51. package/dist/evaluator/expr.test.d.ts.map +1 -0
  52. package/dist/evaluator/expr.test.js +426 -0
  53. package/dist/evaluator/expr.test.js.map +1 -0
  54. package/dist/evaluator/flow.d.ts +35 -0
  55. package/dist/evaluator/flow.d.ts.map +1 -0
  56. package/dist/evaluator/flow.js +234 -0
  57. package/dist/evaluator/flow.js.map +1 -0
  58. package/dist/evaluator/flow.test.d.ts +2 -0
  59. package/dist/evaluator/flow.test.d.ts.map +1 -0
  60. package/dist/evaluator/flow.test.js +446 -0
  61. package/dist/evaluator/flow.test.js.map +1 -0
  62. package/dist/evaluator/index.d.ts +6 -0
  63. package/dist/evaluator/index.d.ts.map +1 -0
  64. package/dist/evaluator/index.js +6 -0
  65. package/dist/evaluator/index.js.map +1 -0
  66. package/dist/factories.d.ts +20 -0
  67. package/dist/factories.d.ts.map +1 -0
  68. package/dist/factories.js +43 -0
  69. package/dist/factories.js.map +1 -0
  70. package/dist/index.d.ts +46 -11
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +30 -45
  73. package/dist/index.js.map +1 -1
  74. package/dist/index.test.d.ts +2 -0
  75. package/dist/index.test.d.ts.map +1 -0
  76. package/dist/index.test.js +13 -0
  77. package/dist/index.test.js.map +1 -0
  78. package/dist/schema/action.d.ts +14 -0
  79. package/dist/schema/action.d.ts.map +1 -0
  80. package/dist/schema/action.js +30 -0
  81. package/dist/schema/action.js.map +1 -0
  82. package/dist/schema/common.d.ts +37 -0
  83. package/dist/schema/common.d.ts.map +1 -0
  84. package/dist/schema/common.js +20 -0
  85. package/dist/schema/common.js.map +1 -0
  86. package/dist/schema/computed.d.ts +23 -0
  87. package/dist/schema/computed.d.ts.map +1 -0
  88. package/dist/schema/computed.js +34 -0
  89. package/dist/schema/computed.js.map +1 -0
  90. package/dist/schema/domain.d.ts +46 -0
  91. package/dist/schema/domain.d.ts.map +1 -0
  92. package/dist/schema/domain.js +54 -0
  93. package/dist/schema/domain.js.map +1 -0
  94. package/dist/schema/expr.d.ts +260 -0
  95. package/dist/schema/expr.d.ts.map +1 -0
  96. package/dist/schema/expr.js +247 -0
  97. package/dist/schema/expr.js.map +1 -0
  98. package/dist/schema/field.d.ts +48 -0
  99. package/dist/schema/field.d.ts.map +1 -0
  100. package/dist/schema/field.js +31 -0
  101. package/dist/schema/field.js.map +1 -0
  102. package/dist/schema/flow.d.ts +103 -0
  103. package/dist/schema/flow.d.ts.map +1 -0
  104. package/dist/schema/flow.js +82 -0
  105. package/dist/schema/flow.js.map +1 -0
  106. package/dist/schema/index.d.ts +11 -2
  107. package/dist/schema/index.d.ts.map +1 -1
  108. package/dist/schema/index.js +22 -2
  109. package/dist/schema/index.js.map +1 -1
  110. package/dist/schema/patch.d.ts +59 -0
  111. package/dist/schema/patch.d.ts.map +1 -0
  112. package/dist/schema/patch.js +60 -0
  113. package/dist/schema/patch.js.map +1 -0
  114. package/dist/schema/result.d.ts +130 -0
  115. package/dist/schema/result.d.ts.map +1 -0
  116. package/dist/schema/result.js +90 -0
  117. package/dist/schema/result.js.map +1 -0
  118. package/dist/schema/snapshot.d.ts +151 -0
  119. package/dist/schema/snapshot.d.ts.map +1 -0
  120. package/dist/schema/snapshot.js +156 -0
  121. package/dist/schema/snapshot.js.map +1 -0
  122. package/dist/schema/trace.d.ts +87 -0
  123. package/dist/schema/trace.d.ts.map +1 -0
  124. package/dist/schema/trace.js +79 -0
  125. package/dist/schema/trace.js.map +1 -0
  126. package/dist/utils/canonical.d.ts +29 -0
  127. package/dist/utils/canonical.d.ts.map +1 -0
  128. package/dist/utils/canonical.js +56 -0
  129. package/dist/utils/canonical.js.map +1 -0
  130. package/dist/utils/canonical.test.d.ts +2 -0
  131. package/dist/utils/canonical.test.d.ts.map +1 -0
  132. package/dist/utils/canonical.test.js +153 -0
  133. package/dist/utils/canonical.test.js.map +1 -0
  134. package/dist/utils/hash.d.ts +20 -0
  135. package/dist/utils/hash.d.ts.map +1 -0
  136. package/dist/utils/hash.js +38 -0
  137. package/dist/utils/hash.js.map +1 -0
  138. package/dist/utils/hash.test.d.ts +2 -0
  139. package/dist/utils/hash.test.d.ts.map +1 -0
  140. package/dist/utils/hash.test.js +146 -0
  141. package/dist/utils/hash.test.js.map +1 -0
  142. package/dist/utils/index.d.ts +4 -0
  143. package/dist/utils/index.d.ts.map +1 -0
  144. package/dist/utils/index.js +4 -0
  145. package/dist/utils/index.js.map +1 -0
  146. package/dist/utils/path.d.ts +40 -0
  147. package/dist/utils/path.d.ts.map +1 -0
  148. package/dist/utils/path.js +132 -0
  149. package/dist/utils/path.js.map +1 -0
  150. package/dist/utils/path.test.d.ts +2 -0
  151. package/dist/utils/path.test.d.ts.map +1 -0
  152. package/dist/utils/path.test.js +191 -0
  153. package/dist/utils/path.test.js.map +1 -0
  154. package/package.json +25 -39
  155. package/LICENSE +0 -21
  156. package/dist/dag/graph.d.ts +0 -62
  157. package/dist/dag/graph.d.ts.map +0 -1
  158. package/dist/dag/graph.js +0 -244
  159. package/dist/dag/graph.js.map +0 -1
  160. package/dist/dag/index.d.ts +0 -4
  161. package/dist/dag/index.d.ts.map +0 -1
  162. package/dist/dag/index.js +0 -4
  163. package/dist/dag/index.js.map +0 -1
  164. package/dist/dag/propagation.d.ts +0 -58
  165. package/dist/dag/propagation.d.ts.map +0 -1
  166. package/dist/dag/propagation.js +0 -224
  167. package/dist/dag/propagation.js.map +0 -1
  168. package/dist/dag/topological.d.ts +0 -33
  169. package/dist/dag/topological.d.ts.map +0 -1
  170. package/dist/dag/topological.js +0 -173
  171. package/dist/dag/topological.js.map +0 -1
  172. package/dist/domain/define.d.ts +0 -82
  173. package/dist/domain/define.d.ts.map +0 -1
  174. package/dist/domain/define.js +0 -105
  175. package/dist/domain/define.js.map +0 -1
  176. package/dist/domain/index.d.ts +0 -4
  177. package/dist/domain/index.d.ts.map +0 -1
  178. package/dist/domain/index.js +0 -4
  179. package/dist/domain/index.js.map +0 -1
  180. package/dist/domain/types.d.ts +0 -203
  181. package/dist/domain/types.d.ts.map +0 -1
  182. package/dist/domain/types.js +0 -2
  183. package/dist/domain/types.js.map +0 -1
  184. package/dist/domain/validate.d.ts +0 -17
  185. package/dist/domain/validate.d.ts.map +0 -1
  186. package/dist/domain/validate.js +0 -204
  187. package/dist/domain/validate.js.map +0 -1
  188. package/dist/effect/index.d.ts +0 -4
  189. package/dist/effect/index.d.ts.map +0 -1
  190. package/dist/effect/index.js +0 -4
  191. package/dist/effect/index.js.map +0 -1
  192. package/dist/effect/result.d.ts +0 -100
  193. package/dist/effect/result.d.ts.map +0 -1
  194. package/dist/effect/result.js +0 -163
  195. package/dist/effect/result.js.map +0 -1
  196. package/dist/effect/runner.d.ts +0 -98
  197. package/dist/effect/runner.d.ts.map +0 -1
  198. package/dist/effect/runner.js +0 -321
  199. package/dist/effect/runner.js.map +0 -1
  200. package/dist/effect/types.d.ts +0 -169
  201. package/dist/effect/types.d.ts.map +0 -1
  202. package/dist/effect/types.js +0 -28
  203. package/dist/effect/types.js.map +0 -1
  204. package/dist/expression/analyzer.d.ts +0 -42
  205. package/dist/expression/analyzer.d.ts.map +0 -1
  206. package/dist/expression/analyzer.js +0 -166
  207. package/dist/expression/analyzer.js.map +0 -1
  208. package/dist/expression/evaluator.d.ts +0 -16
  209. package/dist/expression/evaluator.d.ts.map +0 -1
  210. package/dist/expression/evaluator.js +0 -382
  211. package/dist/expression/evaluator.js.map +0 -1
  212. package/dist/expression/index.d.ts +0 -5
  213. package/dist/expression/index.d.ts.map +0 -1
  214. package/dist/expression/index.js +0 -5
  215. package/dist/expression/index.js.map +0 -1
  216. package/dist/expression/parser.d.ts +0 -37
  217. package/dist/expression/parser.d.ts.map +0 -1
  218. package/dist/expression/parser.js +0 -201
  219. package/dist/expression/parser.js.map +0 -1
  220. package/dist/expression/types.d.ts +0 -123
  221. package/dist/expression/types.d.ts.map +0 -1
  222. package/dist/expression/types.js +0 -10
  223. package/dist/expression/types.js.map +0 -1
  224. package/dist/policy/field-policy.d.ts +0 -63
  225. package/dist/policy/field-policy.d.ts.map +0 -1
  226. package/dist/policy/field-policy.js +0 -138
  227. package/dist/policy/field-policy.js.map +0 -1
  228. package/dist/policy/index.d.ts +0 -3
  229. package/dist/policy/index.d.ts.map +0 -1
  230. package/dist/policy/index.js +0 -3
  231. package/dist/policy/index.js.map +0 -1
  232. package/dist/policy/precondition.d.ts +0 -58
  233. package/dist/policy/precondition.d.ts.map +0 -1
  234. package/dist/policy/precondition.js +0 -115
  235. package/dist/policy/precondition.js.map +0 -1
  236. package/dist/runtime/index.d.ts +0 -4
  237. package/dist/runtime/index.d.ts.map +0 -1
  238. package/dist/runtime/index.js +0 -4
  239. package/dist/runtime/index.js.map +0 -1
  240. package/dist/runtime/runtime.d.ts +0 -94
  241. package/dist/runtime/runtime.d.ts.map +0 -1
  242. package/dist/runtime/runtime.js +0 -294
  243. package/dist/runtime/runtime.js.map +0 -1
  244. package/dist/runtime/snapshot.d.ts +0 -39
  245. package/dist/runtime/snapshot.d.ts.map +0 -1
  246. package/dist/runtime/snapshot.js +0 -264
  247. package/dist/runtime/snapshot.js.map +0 -1
  248. package/dist/runtime/subscription.d.ts +0 -82
  249. package/dist/runtime/subscription.d.ts.map +0 -1
  250. package/dist/runtime/subscription.js +0 -222
  251. package/dist/runtime/subscription.js.map +0 -1
  252. package/dist/schema/integration.d.ts +0 -89
  253. package/dist/schema/integration.d.ts.map +0 -1
  254. package/dist/schema/integration.js +0 -171
  255. package/dist/schema/integration.js.map +0 -1
  256. package/dist/schema/validation.d.ts +0 -51
  257. package/dist/schema/validation.d.ts.map +0 -1
  258. package/dist/schema/validation.js +0 -212
  259. package/dist/schema/validation.js.map +0 -1
@@ -1,100 +0,0 @@
1
- import type { Effect } from './types.js';
2
- import type { EvaluationContext } from '../expression/types.js';
3
- /**
4
- * Result: 성공/실패를 명시적으로 표현
5
- */
6
- export type Result<T, E = EffectError> = {
7
- ok: true;
8
- value: T;
9
- } | {
10
- ok: false;
11
- error: E;
12
- };
13
- /**
14
- * EffectError: Effect 실행 에러
15
- */
16
- export type EffectError = {
17
- _tag: 'EffectError';
18
- /** 실패한 Effect */
19
- effect: Effect;
20
- /** 에러 원인 */
21
- cause: Error;
22
- /** 실패 시점 컨텍스트 */
23
- context?: EvaluationContext;
24
- /** 에러 코드 (있으면) */
25
- code?: string;
26
- };
27
- /**
28
- * 성공 Result 생성
29
- */
30
- export declare function ok<T>(value: T): Result<T, never>;
31
- /**
32
- * 실패 Result 생성
33
- */
34
- export declare function err<E>(error: E): Result<never, E>;
35
- /**
36
- * EffectError 생성
37
- */
38
- export declare function effectError(effect: Effect, cause: Error, options?: {
39
- context?: EvaluationContext;
40
- code?: string;
41
- }): EffectError;
42
- /**
43
- * Result가 성공인지 확인
44
- */
45
- export declare function isOk<T, E>(result: Result<T, E>): result is {
46
- ok: true;
47
- value: T;
48
- };
49
- /**
50
- * Result가 실패인지 확인
51
- */
52
- export declare function isErr<T, E>(result: Result<T, E>): result is {
53
- ok: false;
54
- error: E;
55
- };
56
- /**
57
- * Result에서 값 추출 (실패 시 예외)
58
- */
59
- export declare function unwrap<T, E>(result: Result<T, E>): T;
60
- /**
61
- * Result에서 값 추출 (실패 시 기본값)
62
- */
63
- export declare function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T;
64
- /**
65
- * Result에서 에러 추출 (성공 시 undefined)
66
- */
67
- export declare function unwrapErr<T, E>(result: Result<T, E>): E | undefined;
68
- /**
69
- * Result.map: 성공 값 변환
70
- */
71
- export declare function map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E>;
72
- /**
73
- * Result.mapErr: 에러 값 변환
74
- */
75
- export declare function mapErr<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F>;
76
- /**
77
- * Result.flatMap (bind/chain): 연쇄 연산
78
- */
79
- export declare function flatMap<T, U, E>(result: Result<T, E>, fn: (value: T) => Result<U, E>): Result<U, E>;
80
- /**
81
- * Result.flatten: 중첩 Result 평탄화
82
- */
83
- export declare function flatten<T, E>(result: Result<Result<T, E>, E>): Result<T, E>;
84
- /**
85
- * 여러 Result를 하나로 합침 (모두 성공해야 성공)
86
- */
87
- export declare function all<T, E>(results: Result<T, E>[]): Result<T[], E>;
88
- /**
89
- * 첫 번째 성공 Result 반환
90
- */
91
- export declare function any<T, E>(results: Result<T, E>[]): Result<T, E[]>;
92
- /**
93
- * Promise를 Result로 변환
94
- */
95
- export declare function fromPromise<T>(promise: Promise<T>, mapError?: (e: unknown) => Error): Promise<Result<T, Error>>;
96
- /**
97
- * try-catch를 Result로 변환
98
- */
99
- export declare function tryCatch<T>(fn: () => T, mapError?: (e: unknown) => Error): Result<T, Error>;
100
- //# sourceMappingURL=result.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/effect/result.ts"],"names":[],"mappings":"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"}
@@ -1,163 +0,0 @@
1
- // =============================================================================
2
- // Result Constructors
3
- // =============================================================================
4
- /**
5
- * 성공 Result 생성
6
- */
7
- export function ok(value) {
8
- return { ok: true, value };
9
- }
10
- /**
11
- * 실패 Result 생성
12
- */
13
- export function err(error) {
14
- return { ok: false, error };
15
- }
16
- /**
17
- * EffectError 생성
18
- */
19
- export function effectError(effect, cause, options) {
20
- return {
21
- _tag: 'EffectError',
22
- effect,
23
- cause,
24
- context: options?.context,
25
- code: options?.code,
26
- };
27
- }
28
- // =============================================================================
29
- // Result Utilities
30
- // =============================================================================
31
- /**
32
- * Result가 성공인지 확인
33
- */
34
- export function isOk(result) {
35
- return result.ok;
36
- }
37
- /**
38
- * Result가 실패인지 확인
39
- */
40
- export function isErr(result) {
41
- return !result.ok;
42
- }
43
- /**
44
- * Result에서 값 추출 (실패 시 예외)
45
- */
46
- export function unwrap(result) {
47
- if (result.ok) {
48
- return result.value;
49
- }
50
- throw result.error;
51
- }
52
- /**
53
- * Result에서 값 추출 (실패 시 기본값)
54
- */
55
- export function unwrapOr(result, defaultValue) {
56
- if (result.ok) {
57
- return result.value;
58
- }
59
- return defaultValue;
60
- }
61
- /**
62
- * Result에서 에러 추출 (성공 시 undefined)
63
- */
64
- export function unwrapErr(result) {
65
- if (!result.ok) {
66
- return result.error;
67
- }
68
- return undefined;
69
- }
70
- // =============================================================================
71
- // Result Transformations (Monadic Operations)
72
- // =============================================================================
73
- /**
74
- * Result.map: 성공 값 변환
75
- */
76
- export function map(result, fn) {
77
- if (result.ok) {
78
- return ok(fn(result.value));
79
- }
80
- return result;
81
- }
82
- /**
83
- * Result.mapErr: 에러 값 변환
84
- */
85
- export function mapErr(result, fn) {
86
- if (!result.ok) {
87
- return err(fn(result.error));
88
- }
89
- return result;
90
- }
91
- /**
92
- * Result.flatMap (bind/chain): 연쇄 연산
93
- */
94
- export function flatMap(result, fn) {
95
- if (result.ok) {
96
- return fn(result.value);
97
- }
98
- return result;
99
- }
100
- /**
101
- * Result.flatten: 중첩 Result 평탄화
102
- */
103
- export function flatten(result) {
104
- if (result.ok) {
105
- return result.value;
106
- }
107
- return result;
108
- }
109
- // =============================================================================
110
- // Result Combinators
111
- // =============================================================================
112
- /**
113
- * 여러 Result를 하나로 합침 (모두 성공해야 성공)
114
- */
115
- export function all(results) {
116
- const values = [];
117
- for (const result of results) {
118
- if (!result.ok) {
119
- return result;
120
- }
121
- values.push(result.value);
122
- }
123
- return ok(values);
124
- }
125
- /**
126
- * 첫 번째 성공 Result 반환
127
- */
128
- export function any(results) {
129
- const errors = [];
130
- for (const result of results) {
131
- if (result.ok) {
132
- return result;
133
- }
134
- errors.push(result.error);
135
- }
136
- return err(errors);
137
- }
138
- /**
139
- * Promise를 Result로 변환
140
- */
141
- export async function fromPromise(promise, mapError) {
142
- try {
143
- const value = await promise;
144
- return ok(value);
145
- }
146
- catch (e) {
147
- const error = mapError ? mapError(e) : e instanceof Error ? e : new Error(String(e));
148
- return err(error);
149
- }
150
- }
151
- /**
152
- * try-catch를 Result로 변환
153
- */
154
- export function tryCatch(fn, mapError) {
155
- try {
156
- return ok(fn());
157
- }
158
- catch (e) {
159
- const error = mapError ? mapError(e) : e instanceof Error ? e : new Error(String(e));
160
- return err(error);
161
- }
162
- }
163
- //# sourceMappingURL=result.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/effect/result.ts"],"names":[],"mappings":"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"}
@@ -1,98 +0,0 @@
1
- import type { Effect, SetValueEffect, SetStateEffect, ApiCallEffect, NavigateEffect, DelayEffect, SequenceEffect, ParallelEffect, ConditionalEffect, CatchEffect, EmitEventEffect } from './types.js';
2
- import type { Result } from './result.js';
3
- import type { EvaluationContext, Expression } from '../expression/types.js';
4
- import type { SemanticPath } from '../domain/types.js';
5
- /**
6
- * Effect 실행 핸들러
7
- */
8
- export type EffectHandler = {
9
- /** 데이터 값 설정 */
10
- setValue: (path: SemanticPath, value: unknown) => void;
11
- /** 상태 값 설정 */
12
- setState: (path: SemanticPath, value: unknown) => void;
13
- /** API 호출 */
14
- apiCall: (request: {
15
- endpoint: string;
16
- method: string;
17
- body?: unknown;
18
- headers?: Record<string, string>;
19
- query?: Record<string, unknown>;
20
- timeout?: number;
21
- }) => Promise<unknown>;
22
- /** 네비게이션 */
23
- navigate: (to: string, mode?: 'push' | 'replace') => void;
24
- /** 이벤트 발행 */
25
- emitEvent: (channel: string, payload: unknown) => void;
26
- };
27
- /**
28
- * Effect Runner 설정
29
- */
30
- export type EffectRunnerConfig = {
31
- handler: EffectHandler;
32
- context: EvaluationContext;
33
- };
34
- /**
35
- * Effect 실행 결과
36
- */
37
- export type EffectResult = Result<unknown, import('./result.js').EffectError>;
38
- /**
39
- * Effect 실행
40
- */
41
- export declare function runEffect(effect: Effect, config: EffectRunnerConfig): Promise<EffectResult>;
42
- /**
43
- * SetValue Effect 생성
44
- */
45
- export declare function setValue(path: SemanticPath, value: Expression, description: string): SetValueEffect;
46
- /**
47
- * SetState Effect 생성
48
- */
49
- export declare function setState(path: SemanticPath, value: Expression, description: string): SetStateEffect;
50
- /**
51
- * ApiCall Effect 생성
52
- */
53
- export declare function apiCall(options: Omit<ApiCallEffect, '_tag'>): ApiCallEffect;
54
- /**
55
- * Navigate Effect 생성
56
- */
57
- export declare function navigate(to: string | Expression, options?: {
58
- mode?: 'push' | 'replace';
59
- description?: string;
60
- }): NavigateEffect;
61
- /**
62
- * Delay Effect 생성
63
- */
64
- export declare function delay(ms: number, description?: string): DelayEffect;
65
- /**
66
- * Sequence Effect 생성
67
- */
68
- export declare function sequence(effects: Effect[], description?: string): SequenceEffect;
69
- /**
70
- * Parallel Effect 생성
71
- */
72
- export declare function parallel(effects: Effect[], options?: {
73
- waitAll?: boolean;
74
- description?: string;
75
- }): ParallelEffect;
76
- /**
77
- * Conditional Effect 생성
78
- */
79
- export declare function conditional(options: {
80
- condition: Expression;
81
- then: Effect;
82
- else?: Effect;
83
- description?: string;
84
- }): ConditionalEffect;
85
- /**
86
- * Catch Effect 생성
87
- */
88
- export declare function catchEffect(options: {
89
- try: Effect;
90
- catch: Effect;
91
- finally?: Effect;
92
- description?: string;
93
- }): CatchEffect;
94
- /**
95
- * EmitEvent Effect 생성
96
- */
97
- export declare function emitEvent(channel: 'ui' | 'domain' | 'analytics', payload: EmitEventEffect['payload'], description?: string): EmitEventEffect;
98
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/effect/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,eAAe;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvD,cAAc;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvD,aAAa;IACb,OAAO,EAAE,CAAC,OAAO,EAAE;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvB,YAAY;IACZ,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAE1D,aAAa;IACb,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,aAAa,EAAE,WAAW,CAAC,CAAC;AAE9E;;GAEG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,YAAY,CAAC,CA6CvB;AAmPD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,GAClB,cAAc,CAEhB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,GAClB,cAAc,CAEhB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,aAAa,CAE3E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,MAAM,GAAG,UAAU,EACvB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,cAAc,CAOhB;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAMnE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc,CAMhF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,cAAc,CAOhB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACnC,SAAS,EAAE,UAAU,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,iBAAiB,CAQpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,WAAW,CAQd;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,IAAI,GAAG,QAAQ,GAAG,WAAW,EACtC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,EACnC,WAAW,CAAC,EAAE,MAAM,GACnB,eAAe,CAOjB"}
@@ -1,321 +0,0 @@
1
- import { ok, err, effectError } from './result.js';
2
- import { evaluate } from '../expression/evaluator.js';
3
- /**
4
- * Effect 실행
5
- */
6
- export async function runEffect(effect, config) {
7
- const { handler, context } = config;
8
- try {
9
- switch (effect._tag) {
10
- case 'SetValue':
11
- return await runSetValue(effect, handler, context);
12
- case 'SetState':
13
- return await runSetState(effect, handler, context);
14
- case 'ApiCall':
15
- return await runApiCall(effect, handler, context);
16
- case 'Navigate':
17
- return await runNavigate(effect, handler, context);
18
- case 'Delay':
19
- return await runDelay(effect);
20
- case 'Sequence':
21
- return await runSequence(effect, config);
22
- case 'Parallel':
23
- return await runParallel(effect, config);
24
- case 'Conditional':
25
- return await runConditional(effect, config);
26
- case 'Catch':
27
- return await runCatch(effect, config);
28
- case 'EmitEvent':
29
- return await runEmitEvent(effect, handler);
30
- default:
31
- return err(effectError(effect, new Error(`Unknown effect type: ${effect._tag}`)));
32
- }
33
- }
34
- catch (e) {
35
- return err(effectError(effect, e instanceof Error ? e : new Error(String(e)), { context }));
36
- }
37
- }
38
- /**
39
- * SetValue 실행
40
- */
41
- async function runSetValue(effect, handler, context) {
42
- const valueResult = evaluate(effect.value, context);
43
- if (!valueResult.ok) {
44
- return err(effectError(effect, new Error(valueResult.error)));
45
- }
46
- handler.setValue(effect.path, valueResult.value);
47
- return ok(undefined);
48
- }
49
- /**
50
- * SetState 실행
51
- */
52
- async function runSetState(effect, handler, context) {
53
- const valueResult = evaluate(effect.value, context);
54
- if (!valueResult.ok) {
55
- return err(effectError(effect, new Error(valueResult.error)));
56
- }
57
- handler.setState(effect.path, valueResult.value);
58
- return ok(undefined);
59
- }
60
- /**
61
- * ApiCall 실행
62
- */
63
- async function runApiCall(effect, handler, context) {
64
- // 엔드포인트 평가
65
- let endpoint;
66
- if (typeof effect.endpoint === 'string') {
67
- endpoint = effect.endpoint;
68
- }
69
- else {
70
- const endpointResult = evaluate(effect.endpoint, context);
71
- if (!endpointResult.ok) {
72
- return err(effectError(effect, new Error(endpointResult.error)));
73
- }
74
- endpoint = String(endpointResult.value);
75
- }
76
- // body 평가
77
- let body = undefined;
78
- if (effect.body) {
79
- const evaluatedBody = {};
80
- for (const [key, expr] of Object.entries(effect.body)) {
81
- const result = evaluate(expr, context);
82
- if (!result.ok) {
83
- return err(effectError(effect, new Error(result.error)));
84
- }
85
- evaluatedBody[key] = result.value;
86
- }
87
- body = evaluatedBody;
88
- }
89
- // query 평가
90
- let query = undefined;
91
- if (effect.query) {
92
- query = {};
93
- for (const [key, expr] of Object.entries(effect.query)) {
94
- const result = evaluate(expr, context);
95
- if (!result.ok) {
96
- return err(effectError(effect, new Error(result.error)));
97
- }
98
- query[key] = result.value;
99
- }
100
- }
101
- try {
102
- const response = await handler.apiCall({
103
- endpoint,
104
- method: effect.method,
105
- body,
106
- headers: effect.headers,
107
- query,
108
- timeout: effect.timeout,
109
- });
110
- return ok(response);
111
- }
112
- catch (e) {
113
- return err(effectError(effect, e instanceof Error ? e : new Error(String(e)), {
114
- code: 'API_CALL_FAILED',
115
- }));
116
- }
117
- }
118
- /**
119
- * Navigate 실행
120
- */
121
- async function runNavigate(effect, handler, context) {
122
- let to;
123
- if (typeof effect.to === 'string') {
124
- to = effect.to;
125
- }
126
- else {
127
- const toResult = evaluate(effect.to, context);
128
- if (!toResult.ok) {
129
- return err(effectError(effect, new Error(toResult.error)));
130
- }
131
- to = String(toResult.value);
132
- }
133
- handler.navigate(to, effect.mode);
134
- return ok(undefined);
135
- }
136
- /**
137
- * Delay 실행
138
- */
139
- async function runDelay(effect) {
140
- await new Promise((resolve) => setTimeout(resolve, effect.ms));
141
- return ok(undefined);
142
- }
143
- /**
144
- * Sequence 실행
145
- */
146
- async function runSequence(effect, config) {
147
- let lastResult = undefined;
148
- for (const childEffect of effect.effects) {
149
- const result = await runEffect(childEffect, config);
150
- if (!result.ok) {
151
- return result;
152
- }
153
- lastResult = result.value;
154
- }
155
- return ok(lastResult);
156
- }
157
- /**
158
- * Parallel 실행
159
- */
160
- async function runParallel(effect, config) {
161
- const promises = effect.effects.map((e) => runEffect(e, config));
162
- if (effect.waitAll !== false) {
163
- const results = await Promise.all(promises);
164
- const values = [];
165
- for (const result of results) {
166
- if (!result.ok) {
167
- return result;
168
- }
169
- values.push(result.value);
170
- }
171
- return ok(values);
172
- }
173
- else {
174
- // 하나라도 완료되면 반환
175
- const result = await Promise.race(promises);
176
- return result;
177
- }
178
- }
179
- /**
180
- * Conditional 실행
181
- */
182
- async function runConditional(effect, config) {
183
- const conditionResult = evaluate(effect.condition, config.context);
184
- if (!conditionResult.ok) {
185
- return err(effectError(effect, new Error(conditionResult.error)));
186
- }
187
- if (conditionResult.value) {
188
- return runEffect(effect.then, config);
189
- }
190
- else if (effect.else) {
191
- return runEffect(effect.else, config);
192
- }
193
- return ok(undefined);
194
- }
195
- /**
196
- * Catch 실행
197
- */
198
- async function runCatch(effect, config) {
199
- let result;
200
- try {
201
- result = await runEffect(effect.try, config);
202
- }
203
- catch (e) {
204
- result = err(effectError(effect.try, e instanceof Error ? e : new Error(String(e))));
205
- }
206
- // 에러 발생 시 catch 실행
207
- if (!result.ok) {
208
- result = await runEffect(effect.catch, config);
209
- }
210
- // finally 항상 실행
211
- if (effect.finally) {
212
- await runEffect(effect.finally, config);
213
- }
214
- return result;
215
- }
216
- /**
217
- * EmitEvent 실행
218
- */
219
- async function runEmitEvent(effect, handler) {
220
- handler.emitEvent(effect.channel, effect.payload);
221
- return ok(undefined);
222
- }
223
- // =============================================================================
224
- // Effect Builders
225
- // =============================================================================
226
- /**
227
- * SetValue Effect 생성
228
- */
229
- export function setValue(path, value, description) {
230
- return { _tag: 'SetValue', path, value, description };
231
- }
232
- /**
233
- * SetState Effect 생성
234
- */
235
- export function setState(path, value, description) {
236
- return { _tag: 'SetState', path, value, description };
237
- }
238
- /**
239
- * ApiCall Effect 생성
240
- */
241
- export function apiCall(options) {
242
- return { _tag: 'ApiCall', ...options };
243
- }
244
- /**
245
- * Navigate Effect 생성
246
- */
247
- export function navigate(to, options) {
248
- return {
249
- _tag: 'Navigate',
250
- to,
251
- mode: options?.mode,
252
- description: options?.description ?? `Navigate to ${typeof to === 'string' ? to : 'computed path'}`,
253
- };
254
- }
255
- /**
256
- * Delay Effect 생성
257
- */
258
- export function delay(ms, description) {
259
- return {
260
- _tag: 'Delay',
261
- ms,
262
- description: description ?? `Wait ${ms}ms`,
263
- };
264
- }
265
- /**
266
- * Sequence Effect 생성
267
- */
268
- export function sequence(effects, description) {
269
- return {
270
- _tag: 'Sequence',
271
- effects,
272
- description: description ?? `Sequence of ${effects.length} effects`,
273
- };
274
- }
275
- /**
276
- * Parallel Effect 생성
277
- */
278
- export function parallel(effects, options) {
279
- return {
280
- _tag: 'Parallel',
281
- effects,
282
- waitAll: options?.waitAll,
283
- description: options?.description ?? `Parallel execution of ${effects.length} effects`,
284
- };
285
- }
286
- /**
287
- * Conditional Effect 생성
288
- */
289
- export function conditional(options) {
290
- return {
291
- _tag: 'Conditional',
292
- condition: options.condition,
293
- then: options.then,
294
- else: options.else,
295
- description: options.description ?? 'Conditional effect',
296
- };
297
- }
298
- /**
299
- * Catch Effect 생성
300
- */
301
- export function catchEffect(options) {
302
- return {
303
- _tag: 'Catch',
304
- try: options.try,
305
- catch: options.catch,
306
- finally: options.finally,
307
- description: options.description ?? 'Try-catch effect',
308
- };
309
- }
310
- /**
311
- * EmitEvent Effect 생성
312
- */
313
- export function emitEvent(channel, payload, description) {
314
- return {
315
- _tag: 'EmitEvent',
316
- channel,
317
- payload,
318
- description: description ?? `Emit ${payload.type} event`,
319
- };
320
- }
321
- //# sourceMappingURL=runner.js.map