@manifesto-ai/core 0.2.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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +434 -0
  3. package/dist/dag/graph.d.ts +62 -0
  4. package/dist/dag/graph.d.ts.map +1 -0
  5. package/dist/dag/graph.js +244 -0
  6. package/dist/dag/graph.js.map +1 -0
  7. package/dist/dag/index.d.ts +4 -0
  8. package/dist/dag/index.d.ts.map +1 -0
  9. package/dist/dag/index.js +4 -0
  10. package/dist/dag/index.js.map +1 -0
  11. package/dist/dag/propagation.d.ts +58 -0
  12. package/dist/dag/propagation.d.ts.map +1 -0
  13. package/dist/dag/propagation.js +224 -0
  14. package/dist/dag/propagation.js.map +1 -0
  15. package/dist/dag/topological.d.ts +33 -0
  16. package/dist/dag/topological.d.ts.map +1 -0
  17. package/dist/dag/topological.js +173 -0
  18. package/dist/dag/topological.js.map +1 -0
  19. package/dist/domain/define.d.ts +82 -0
  20. package/dist/domain/define.d.ts.map +1 -0
  21. package/dist/domain/define.js +91 -0
  22. package/dist/domain/define.js.map +1 -0
  23. package/dist/domain/index.d.ts +4 -0
  24. package/dist/domain/index.d.ts.map +1 -0
  25. package/dist/domain/index.js +4 -0
  26. package/dist/domain/index.js.map +1 -0
  27. package/dist/domain/types.d.ts +203 -0
  28. package/dist/domain/types.d.ts.map +1 -0
  29. package/dist/domain/types.js +2 -0
  30. package/dist/domain/types.js.map +1 -0
  31. package/dist/domain/validate.d.ts +17 -0
  32. package/dist/domain/validate.d.ts.map +1 -0
  33. package/dist/domain/validate.js +204 -0
  34. package/dist/domain/validate.js.map +1 -0
  35. package/dist/effect/index.d.ts +4 -0
  36. package/dist/effect/index.d.ts.map +1 -0
  37. package/dist/effect/index.js +4 -0
  38. package/dist/effect/index.js.map +1 -0
  39. package/dist/effect/result.d.ts +100 -0
  40. package/dist/effect/result.d.ts.map +1 -0
  41. package/dist/effect/result.js +163 -0
  42. package/dist/effect/result.js.map +1 -0
  43. package/dist/effect/runner.d.ts +98 -0
  44. package/dist/effect/runner.d.ts.map +1 -0
  45. package/dist/effect/runner.js +321 -0
  46. package/dist/effect/runner.js.map +1 -0
  47. package/dist/effect/types.d.ts +169 -0
  48. package/dist/effect/types.d.ts.map +1 -0
  49. package/dist/effect/types.js +28 -0
  50. package/dist/effect/types.js.map +1 -0
  51. package/dist/expression/analyzer.d.ts +42 -0
  52. package/dist/expression/analyzer.d.ts.map +1 -0
  53. package/dist/expression/analyzer.js +166 -0
  54. package/dist/expression/analyzer.js.map +1 -0
  55. package/dist/expression/evaluator.d.ts +16 -0
  56. package/dist/expression/evaluator.d.ts.map +1 -0
  57. package/dist/expression/evaluator.js +382 -0
  58. package/dist/expression/evaluator.js.map +1 -0
  59. package/dist/expression/index.d.ts +5 -0
  60. package/dist/expression/index.d.ts.map +1 -0
  61. package/dist/expression/index.js +5 -0
  62. package/dist/expression/index.js.map +1 -0
  63. package/dist/expression/parser.d.ts +37 -0
  64. package/dist/expression/parser.d.ts.map +1 -0
  65. package/dist/expression/parser.js +201 -0
  66. package/dist/expression/parser.js.map +1 -0
  67. package/dist/expression/types.d.ts +123 -0
  68. package/dist/expression/types.d.ts.map +1 -0
  69. package/dist/expression/types.js +10 -0
  70. package/dist/expression/types.js.map +1 -0
  71. package/dist/index.d.ts +17 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +51 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/policy/field-policy.d.ts +63 -0
  76. package/dist/policy/field-policy.d.ts.map +1 -0
  77. package/dist/policy/field-policy.js +138 -0
  78. package/dist/policy/field-policy.js.map +1 -0
  79. package/dist/policy/index.d.ts +3 -0
  80. package/dist/policy/index.d.ts.map +1 -0
  81. package/dist/policy/index.js +3 -0
  82. package/dist/policy/index.js.map +1 -0
  83. package/dist/policy/precondition.d.ts +58 -0
  84. package/dist/policy/precondition.d.ts.map +1 -0
  85. package/dist/policy/precondition.js +115 -0
  86. package/dist/policy/precondition.js.map +1 -0
  87. package/dist/runtime/index.d.ts +4 -0
  88. package/dist/runtime/index.d.ts.map +1 -0
  89. package/dist/runtime/index.js +4 -0
  90. package/dist/runtime/index.js.map +1 -0
  91. package/dist/runtime/runtime.d.ts +94 -0
  92. package/dist/runtime/runtime.d.ts.map +1 -0
  93. package/dist/runtime/runtime.js +294 -0
  94. package/dist/runtime/runtime.js.map +1 -0
  95. package/dist/runtime/snapshot.d.ts +39 -0
  96. package/dist/runtime/snapshot.d.ts.map +1 -0
  97. package/dist/runtime/snapshot.js +264 -0
  98. package/dist/runtime/snapshot.js.map +1 -0
  99. package/dist/runtime/subscription.d.ts +82 -0
  100. package/dist/runtime/subscription.d.ts.map +1 -0
  101. package/dist/runtime/subscription.js +222 -0
  102. package/dist/runtime/subscription.js.map +1 -0
  103. package/dist/schema/index.d.ts +3 -0
  104. package/dist/schema/index.d.ts.map +1 -0
  105. package/dist/schema/index.js +3 -0
  106. package/dist/schema/index.js.map +1 -0
  107. package/dist/schema/integration.d.ts +89 -0
  108. package/dist/schema/integration.d.ts.map +1 -0
  109. package/dist/schema/integration.js +171 -0
  110. package/dist/schema/integration.js.map +1 -0
  111. package/dist/schema/validation.d.ts +51 -0
  112. package/dist/schema/validation.d.ts.map +1 -0
  113. package/dist/schema/validation.js +212 -0
  114. package/dist/schema/validation.js.map +1 -0
  115. package/package.json +58 -0
@@ -0,0 +1,166 @@
1
+ import { extractPaths, isValidExpression } from './parser.js';
2
+ /**
3
+ * Expression 의존성 분석
4
+ */
5
+ export function analyzeExpression(expr) {
6
+ const directDeps = extractPaths(expr);
7
+ const operators = new Set();
8
+ let complexity = 0;
9
+ let usesContext = false;
10
+ function traverse(e) {
11
+ complexity++;
12
+ if (e === null || typeof e !== 'object')
13
+ return;
14
+ if (!Array.isArray(e))
15
+ return;
16
+ const [op, ...args] = e;
17
+ operators.add(op);
18
+ // 컨텍스트 변수 사용 확인
19
+ if (op === 'get') {
20
+ const path = args[0];
21
+ if (path.startsWith('$')) {
22
+ usesContext = true;
23
+ }
24
+ }
25
+ for (const arg of args) {
26
+ if (isValidExpression(arg)) {
27
+ traverse(arg);
28
+ }
29
+ }
30
+ }
31
+ traverse(expr);
32
+ return {
33
+ directDeps,
34
+ operators: [...operators],
35
+ complexity,
36
+ usesContext,
37
+ };
38
+ }
39
+ /**
40
+ * Expression이 순수한지 확인 (부수효과 없음)
41
+ * 모든 Expression은 순수해야 하지만, 추가 검증용
42
+ */
43
+ export function isPureExpression(expr) {
44
+ // 현재 모든 Expression 연산자는 순수함
45
+ // 향후 사용자 정의 함수 허용 시 검증 필요
46
+ return isValidExpression(expr);
47
+ }
48
+ /**
49
+ * Expression이 상수인지 확인 (의존성 없음)
50
+ */
51
+ export function isConstantExpression(expr) {
52
+ const analysis = analyzeExpression(expr);
53
+ return analysis.directDeps.length === 0 && !analysis.usesContext;
54
+ }
55
+ /**
56
+ * 두 Expression이 동일한지 확인 (구조적 동등성)
57
+ */
58
+ export function areExpressionsEqual(a, b) {
59
+ if (a === b)
60
+ return true;
61
+ if (a === null || b === null)
62
+ return a === b;
63
+ if (typeof a !== typeof b)
64
+ return false;
65
+ if (typeof a !== 'object')
66
+ return a === b;
67
+ if (!Array.isArray(a) || !Array.isArray(b))
68
+ return false;
69
+ if (a.length !== b.length)
70
+ return false;
71
+ for (let i = 0; i < a.length; i++) {
72
+ const aItem = a[i];
73
+ const bItem = b[i];
74
+ if (isValidExpression(aItem) && isValidExpression(bItem)) {
75
+ if (!areExpressionsEqual(aItem, bItem))
76
+ return false;
77
+ }
78
+ else if (aItem !== bItem) {
79
+ return false;
80
+ }
81
+ }
82
+ return true;
83
+ }
84
+ /**
85
+ * Expression 최적화 (기본적인 상수 폴딩)
86
+ */
87
+ export function optimizeExpression(expr) {
88
+ if (expr === null || typeof expr !== 'object')
89
+ return expr;
90
+ if (!Array.isArray(expr))
91
+ return expr;
92
+ const [op, ...args] = expr;
93
+ // 재귀적으로 자식 최적화
94
+ const optimizedArgs = args.map((arg) => isValidExpression(arg) ? optimizeExpression(arg) : arg);
95
+ // 상수 폴딩: 모든 인자가 리터럴이면 미리 계산
96
+ const allLiterals = optimizedArgs.every((arg) => !Array.isArray(arg) && typeof arg !== 'object');
97
+ if (allLiterals && canFoldOperator(op)) {
98
+ // 상수 폴딩은 현재 생략 (런타임에 평가)
99
+ // 향후 빌드 타임 최적화로 구현 가능
100
+ }
101
+ // all/any 단축 평가
102
+ if (op === 'all') {
103
+ // all에서 false 리터럴이 있으면 false
104
+ if (optimizedArgs.some((arg) => arg === false)) {
105
+ return false;
106
+ }
107
+ // all에서 모든 인자가 true면 true
108
+ if (optimizedArgs.every((arg) => arg === true)) {
109
+ return true;
110
+ }
111
+ }
112
+ if (op === 'any') {
113
+ // any에서 true 리터럴이 있으면 true
114
+ if (optimizedArgs.some((arg) => arg === true)) {
115
+ return true;
116
+ }
117
+ // any에서 모든 인자가 false면 false
118
+ if (optimizedArgs.every((arg) => arg === false)) {
119
+ return false;
120
+ }
121
+ }
122
+ return [op, ...optimizedArgs];
123
+ }
124
+ /**
125
+ * 상수 폴딩이 가능한 연산자인지 확인
126
+ */
127
+ function canFoldOperator(op) {
128
+ const foldableOps = new Set([
129
+ '+',
130
+ '-',
131
+ '*',
132
+ '/',
133
+ '%',
134
+ '==',
135
+ '!=',
136
+ '>',
137
+ '>=',
138
+ '<',
139
+ '<=',
140
+ '!',
141
+ 'concat',
142
+ 'upper',
143
+ 'lower',
144
+ 'trim',
145
+ ]);
146
+ return foldableOps.has(op);
147
+ }
148
+ /**
149
+ * Expression에서 특정 경로에 대한 의존성 제거
150
+ * (경로가 상수로 대체되었을 때 사용)
151
+ */
152
+ export function substitutePathWithValue(expr, path, value) {
153
+ if (expr === null || typeof expr !== 'object')
154
+ return expr;
155
+ if (!Array.isArray(expr))
156
+ return expr;
157
+ const [op, ...args] = expr;
158
+ if (op === 'get' && args[0] === path) {
159
+ return value;
160
+ }
161
+ return [
162
+ op,
163
+ ...args.map((arg) => isValidExpression(arg) ? substitutePathWithValue(arg, path, value) : arg),
164
+ ];
165
+ }
166
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/expression/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Expression, EvaluationContext } from './types.js';
2
+ /**
3
+ * Expression 평가 결과
4
+ */
5
+ export type EvalResult<T = unknown> = {
6
+ ok: true;
7
+ value: T;
8
+ } | {
9
+ ok: false;
10
+ error: string;
11
+ };
12
+ /**
13
+ * Expression 평가
14
+ */
15
+ export declare function evaluate(expr: Expression, ctx: EvaluationContext): EvalResult;
16
+ //# sourceMappingURL=evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/expression/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,GAAG,UAAU,CAO7E"}
@@ -0,0 +1,382 @@
1
+ /**
2
+ * Expression 평가
3
+ */
4
+ export function evaluate(expr, ctx) {
5
+ try {
6
+ const value = evalExpr(expr, ctx);
7
+ return { ok: true, value };
8
+ }
9
+ catch (e) {
10
+ return { ok: false, error: e instanceof Error ? e.message : String(e) };
11
+ }
12
+ }
13
+ /**
14
+ * 내부 평가 함수
15
+ */
16
+ function evalExpr(expr, ctx) {
17
+ // Literals
18
+ if (expr === null)
19
+ return null;
20
+ if (typeof expr === 'string')
21
+ return expr;
22
+ if (typeof expr === 'number')
23
+ return expr;
24
+ if (typeof expr === 'boolean')
25
+ return expr;
26
+ if (!Array.isArray(expr)) {
27
+ throw new Error(`Invalid expression: ${JSON.stringify(expr)}`);
28
+ }
29
+ const [op, ...args] = expr;
30
+ switch (op) {
31
+ // Value Access
32
+ case 'get':
33
+ return evalGet(args[0], ctx);
34
+ // Comparison
35
+ case '==':
36
+ return evalExpr(args[0], ctx) === evalExpr(args[1], ctx);
37
+ case '!=':
38
+ return evalExpr(args[0], ctx) !== evalExpr(args[1], ctx);
39
+ case '>':
40
+ return (evalExpr(args[0], ctx) >
41
+ evalExpr(args[1], ctx));
42
+ case '>=':
43
+ return (evalExpr(args[0], ctx) >=
44
+ evalExpr(args[1], ctx));
45
+ case '<':
46
+ return (evalExpr(args[0], ctx) <
47
+ evalExpr(args[1], ctx));
48
+ case '<=':
49
+ return (evalExpr(args[0], ctx) <=
50
+ evalExpr(args[1], ctx));
51
+ // Logical
52
+ case '!':
53
+ return !evalExpr(args[0], ctx);
54
+ case 'all':
55
+ return args.every((a) => Boolean(evalExpr(a, ctx)));
56
+ case 'any':
57
+ return args.some((a) => Boolean(evalExpr(a, ctx)));
58
+ // Arithmetic
59
+ case '+':
60
+ return (evalExpr(args[0], ctx) +
61
+ evalExpr(args[1], ctx));
62
+ case '-':
63
+ return (evalExpr(args[0], ctx) -
64
+ evalExpr(args[1], ctx));
65
+ case '*':
66
+ return (evalExpr(args[0], ctx) *
67
+ evalExpr(args[1], ctx));
68
+ case '/':
69
+ return (evalExpr(args[0], ctx) /
70
+ evalExpr(args[1], ctx));
71
+ case '%':
72
+ return (evalExpr(args[0], ctx) %
73
+ evalExpr(args[1], ctx));
74
+ // Conditional
75
+ case 'case':
76
+ return evalCase(args, ctx);
77
+ case 'match':
78
+ return evalMatch(args, ctx);
79
+ case 'coalesce':
80
+ return evalCoalesce(args, ctx);
81
+ // String
82
+ case 'concat':
83
+ return args.map((a) => String(evalExpr(a, ctx))).join('');
84
+ case 'upper':
85
+ return String(evalExpr(args[0], ctx)).toUpperCase();
86
+ case 'lower':
87
+ return String(evalExpr(args[0], ctx)).toLowerCase();
88
+ case 'trim':
89
+ return String(evalExpr(args[0], ctx)).trim();
90
+ case 'slice':
91
+ return String(evalExpr(args[0], ctx)).slice(args[1], args[2]);
92
+ case 'split':
93
+ return String(evalExpr(args[0], ctx)).split(args[1]);
94
+ case 'join':
95
+ return evalExpr(args[0], ctx).join(args[1]);
96
+ case 'matches':
97
+ return new RegExp(args[1]).test(String(evalExpr(args[0], ctx)));
98
+ case 'replace':
99
+ return String(evalExpr(args[0], ctx)).replace(new RegExp(args[1], 'g'), args[2]);
100
+ // Array
101
+ case 'length':
102
+ return evalExpr(args[0], ctx).length;
103
+ case 'at':
104
+ return evalExpr(args[0], ctx)[args[1]];
105
+ case 'first':
106
+ return evalExpr(args[0], ctx)[0];
107
+ case 'last': {
108
+ const arr = evalExpr(args[0], ctx);
109
+ return arr[arr.length - 1];
110
+ }
111
+ case 'includes':
112
+ return evalExpr(args[0], ctx).includes(evalExpr(args[1], ctx));
113
+ case 'indexOf':
114
+ return evalExpr(args[0], ctx).indexOf(evalExpr(args[1], ctx));
115
+ case 'map':
116
+ return evalMap(args, ctx);
117
+ case 'filter':
118
+ return evalFilter(args, ctx);
119
+ case 'every':
120
+ return evalEvery(args, ctx);
121
+ case 'some':
122
+ return evalSome(args, ctx);
123
+ case 'reduce':
124
+ return evalReduce(args, ctx);
125
+ case 'flatten':
126
+ return evalExpr(args[0], ctx).flat();
127
+ case 'unique':
128
+ return [...new Set(evalExpr(args[0], ctx))];
129
+ case 'sort':
130
+ return evalSort(args, ctx);
131
+ case 'reverse':
132
+ return [...evalExpr(args[0], ctx)].reverse();
133
+ // Number
134
+ case 'sum':
135
+ return evalExpr(args[0], ctx).reduce((a, b) => a + b, 0);
136
+ case 'min':
137
+ return Math.min(...evalExpr(args[0], ctx));
138
+ case 'max':
139
+ return Math.max(...evalExpr(args[0], ctx));
140
+ case 'avg': {
141
+ const nums = evalExpr(args[0], ctx);
142
+ return nums.reduce((a, b) => a + b, 0) / nums.length;
143
+ }
144
+ case 'count':
145
+ return evalExpr(args[0], ctx).length;
146
+ case 'round': {
147
+ const val = evalExpr(args[0], ctx);
148
+ const precision = args[1] ?? 0;
149
+ const factor = Math.pow(10, precision);
150
+ return Math.round(val * factor) / factor;
151
+ }
152
+ case 'floor':
153
+ return Math.floor(evalExpr(args[0], ctx));
154
+ case 'ceil':
155
+ return Math.ceil(evalExpr(args[0], ctx));
156
+ case 'abs':
157
+ return Math.abs(evalExpr(args[0], ctx));
158
+ case 'clamp': {
159
+ const val = evalExpr(args[0], ctx);
160
+ const min = args[1];
161
+ const max = args[2];
162
+ return Math.max(min, Math.min(max, val));
163
+ }
164
+ // Object
165
+ case 'has':
166
+ return args[1] in evalExpr(args[0], ctx);
167
+ case 'keys':
168
+ return Object.keys(evalExpr(args[0], ctx));
169
+ case 'values':
170
+ return Object.values(evalExpr(args[0], ctx));
171
+ case 'entries':
172
+ return Object.entries(evalExpr(args[0], ctx));
173
+ case 'pick': {
174
+ const obj = evalExpr(args[0], ctx);
175
+ const keys = args.slice(1);
176
+ const result = {};
177
+ for (const k of keys) {
178
+ if (k in obj)
179
+ result[k] = obj[k];
180
+ }
181
+ return result;
182
+ }
183
+ case 'omit': {
184
+ const obj = evalExpr(args[0], ctx);
185
+ const keysToOmit = new Set(args.slice(1));
186
+ const result = {};
187
+ for (const [k, v] of Object.entries(obj)) {
188
+ if (!keysToOmit.has(k))
189
+ result[k] = v;
190
+ }
191
+ return result;
192
+ }
193
+ // Type
194
+ case 'isNull':
195
+ return evalExpr(args[0], ctx) === null;
196
+ case 'isNumber':
197
+ return typeof evalExpr(args[0], ctx) === 'number';
198
+ case 'isString':
199
+ return typeof evalExpr(args[0], ctx) === 'string';
200
+ case 'isArray':
201
+ return Array.isArray(evalExpr(args[0], ctx));
202
+ case 'isObject': {
203
+ const val = evalExpr(args[0], ctx);
204
+ return val !== null && typeof val === 'object' && !Array.isArray(val);
205
+ }
206
+ case 'toNumber':
207
+ return Number(evalExpr(args[0], ctx));
208
+ case 'toString':
209
+ return String(evalExpr(args[0], ctx));
210
+ // Date
211
+ case 'now':
212
+ return Date.now();
213
+ case 'date':
214
+ return new Date(evalExpr(args[0], ctx)).getTime();
215
+ case 'year':
216
+ return new Date(evalExpr(args[0], ctx)).getFullYear();
217
+ case 'month':
218
+ return new Date(evalExpr(args[0], ctx)).getMonth() + 1;
219
+ case 'day':
220
+ return new Date(evalExpr(args[0], ctx)).getDate();
221
+ case 'diff': {
222
+ const d1 = evalExpr(args[0], ctx);
223
+ const d2 = evalExpr(args[1], ctx);
224
+ const unit = args[2];
225
+ const diffMs = d1 - d2;
226
+ switch (unit) {
227
+ case 'days':
228
+ return Math.floor(diffMs / (1000 * 60 * 60 * 24));
229
+ case 'hours':
230
+ return Math.floor(diffMs / (1000 * 60 * 60));
231
+ case 'minutes':
232
+ return Math.floor(diffMs / (1000 * 60));
233
+ case 'seconds':
234
+ return Math.floor(diffMs / 1000);
235
+ default:
236
+ return diffMs;
237
+ }
238
+ }
239
+ default:
240
+ throw new Error(`Unknown operator: ${op}`);
241
+ }
242
+ }
243
+ /**
244
+ * get 연산자 평가
245
+ */
246
+ function evalGet(path, ctx) {
247
+ if (path === '$') {
248
+ return ctx.current;
249
+ }
250
+ if (path === '$index') {
251
+ return ctx.index;
252
+ }
253
+ if (path === '$acc') {
254
+ return ctx.accumulator;
255
+ }
256
+ if (path.startsWith('$.')) {
257
+ const subPath = path.slice(2);
258
+ return getNestedValue(ctx.current, subPath);
259
+ }
260
+ return ctx.get(path);
261
+ }
262
+ /**
263
+ * 중첩된 객체에서 값 가져오기
264
+ */
265
+ function getNestedValue(obj, path) {
266
+ const parts = path.split('.');
267
+ let current = obj;
268
+ for (const part of parts) {
269
+ if (current === null || current === undefined)
270
+ return undefined;
271
+ current = current[part];
272
+ }
273
+ return current;
274
+ }
275
+ /**
276
+ * case 연산자 평가
277
+ */
278
+ function evalCase(args, ctx) {
279
+ // 마지막이 default, 나머지는 [condition, result] 쌍
280
+ for (let i = 0; i < args.length - 1; i += 2) {
281
+ const condition = args[i];
282
+ const result = args[i + 1];
283
+ if (condition !== undefined && evalExpr(condition, ctx)) {
284
+ return result !== undefined ? evalExpr(result, ctx) : undefined;
285
+ }
286
+ }
287
+ // default
288
+ const defaultVal = args[args.length - 1];
289
+ return defaultVal !== undefined ? evalExpr(defaultVal, ctx) : undefined;
290
+ }
291
+ /**
292
+ * match 연산자 평가
293
+ */
294
+ function evalMatch(args, ctx) {
295
+ const target = evalExpr(args[0], ctx);
296
+ // [target, ...pattern-result pairs, default]
297
+ for (let i = 1; i < args.length - 1; i += 2) {
298
+ const pattern = evalExpr(args[i], ctx);
299
+ const result = args[i + 1];
300
+ if (target === pattern) {
301
+ return result !== undefined ? evalExpr(result, ctx) : undefined;
302
+ }
303
+ }
304
+ // default
305
+ const defaultVal = args[args.length - 1];
306
+ return defaultVal !== undefined ? evalExpr(defaultVal, ctx) : undefined;
307
+ }
308
+ /**
309
+ * coalesce 연산자 평가
310
+ */
311
+ function evalCoalesce(args, ctx) {
312
+ for (const arg of args) {
313
+ const val = evalExpr(arg, ctx);
314
+ if (val !== null && val !== undefined) {
315
+ return val;
316
+ }
317
+ }
318
+ return null;
319
+ }
320
+ /**
321
+ * map 연산자 평가
322
+ */
323
+ function evalMap(args, ctx) {
324
+ const arr = evalExpr(args[0], ctx);
325
+ const mapper = args[1];
326
+ return arr.map((item, index) => evalExpr(mapper, { ...ctx, current: item, index }));
327
+ }
328
+ /**
329
+ * filter 연산자 평가
330
+ */
331
+ function evalFilter(args, ctx) {
332
+ const arr = evalExpr(args[0], ctx);
333
+ const predicate = args[1];
334
+ return arr.filter((item, index) => Boolean(evalExpr(predicate, { ...ctx, current: item, index })));
335
+ }
336
+ /**
337
+ * every 연산자 평가
338
+ */
339
+ function evalEvery(args, ctx) {
340
+ const arr = evalExpr(args[0], ctx);
341
+ const predicate = args[1];
342
+ return arr.every((item, index) => Boolean(evalExpr(predicate, { ...ctx, current: item, index })));
343
+ }
344
+ /**
345
+ * some 연산자 평가
346
+ */
347
+ function evalSome(args, ctx) {
348
+ const arr = evalExpr(args[0], ctx);
349
+ const predicate = args[1];
350
+ return arr.some((item, index) => Boolean(evalExpr(predicate, { ...ctx, current: item, index })));
351
+ }
352
+ /**
353
+ * reduce 연산자 평가
354
+ */
355
+ function evalReduce(args, ctx) {
356
+ const arr = evalExpr(args[0], ctx);
357
+ const reducer = args[1];
358
+ const initial = evalExpr(args[2], ctx);
359
+ return arr.reduce((acc, item, index) => evalExpr(reducer, { ...ctx, current: item, index, accumulator: acc }), initial);
360
+ }
361
+ /**
362
+ * sort 연산자 평가
363
+ */
364
+ function evalSort(args, ctx) {
365
+ const arr = [...evalExpr(args[0], ctx)];
366
+ const comparator = args[1];
367
+ if (!comparator) {
368
+ return arr.sort();
369
+ }
370
+ return arr.sort((a, b) => {
371
+ const aVal = evalExpr(comparator, { ...ctx, current: a });
372
+ const bVal = evalExpr(comparator, { ...ctx, current: b });
373
+ if (aVal === bVal)
374
+ return 0;
375
+ if (aVal === null || aVal === undefined)
376
+ return 1;
377
+ if (bVal === null || bVal === undefined)
378
+ return -1;
379
+ return aVal < bVal ? -1 : 1;
380
+ });
381
+ }
382
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/expression/evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './parser.js';
3
+ export * from './evaluator.js';
4
+ export * from './analyzer.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/expression/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './parser.js';
3
+ export * from './evaluator.js';
4
+ export * from './analyzer.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/expression/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { Expression, GetExpr } from './types.js';
2
+ import type { SemanticPath } from '../domain/types.js';
3
+ /**
4
+ * Expression 파싱 결과
5
+ */
6
+ export type ParseResult = {
7
+ ok: true;
8
+ expression: Expression;
9
+ } | {
10
+ ok: false;
11
+ error: string;
12
+ };
13
+ /**
14
+ * Expression 유효성 검사
15
+ */
16
+ export declare function isValidExpression(expr: unknown): expr is Expression;
17
+ /**
18
+ * Get 표현식인지 확인
19
+ */
20
+ export declare function isGetExpr(expr: Expression): expr is GetExpr;
21
+ /**
22
+ * Expression에서 모든 get 경로 추출
23
+ */
24
+ export declare function extractPaths(expr: Expression): SemanticPath[];
25
+ /**
26
+ * Expression을 JSON 문자열로 변환
27
+ */
28
+ export declare function stringifyExpression(expr: Expression): string;
29
+ /**
30
+ * JSON 문자열을 Expression으로 파싱
31
+ */
32
+ export declare function parseExpression(json: string): ParseResult;
33
+ /**
34
+ * Expression을 사람이 읽을 수 있는 형태로 변환
35
+ */
36
+ export declare function expressionToString(expr: Expression): string;
37
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/expression/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,UAAU,CAanE;AA8FD;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,IAAI,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,EAAE,CAsB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAUzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAgC3D"}