@acpus/expression 0.1.0-alpha.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/LICENSE +21 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/evaluator.d.ts +10 -0
- package/dist/evaluator.d.ts.map +1 -0
- package/dist/evaluator.js +295 -0
- package/dist/evaluator.js.map +1 -0
- package/dist/index.d.ts +121 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +260 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/expr.d.ts +52 -0
- package/dist/internal/expr.d.ts.map +1 -0
- package/dist/internal/expr.js +113 -0
- package/dist/internal/expr.js.map +1 -0
- package/dist/internal/operators.d.ts +11 -0
- package/dist/internal/operators.d.ts.map +1 -0
- package/dist/internal/operators.js +28 -0
- package/dist/internal/operators.js.map +1 -0
- package/dist/internal/symbols.d.ts +2 -0
- package/dist/internal/symbols.d.ts.map +1 -0
- package/dist/internal/symbols.js +2 -0
- package/dist/internal/symbols.js.map +1 -0
- package/dist/ir.d.ts +84 -0
- package/dist/ir.d.ts.map +1 -0
- package/dist/ir.js +2 -0
- package/dist/ir.js.map +1 -0
- package/dist/validator.d.ts +8 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +312 -0
- package/dist/validator.js.map +1 -0
- package/package.json +60 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
export { isExpr } from "./internal/expr.js";
|
|
2
|
+
import { accessor, callExpr, isExpr, valueToExprIR, varExpr } from "./internal/expr.js";
|
|
3
|
+
import { WHERE_OPERATOR_KEY_SET } from "./internal/operators.js";
|
|
4
|
+
/** Negates a workflow boolean value. */
|
|
5
|
+
export function not(value) { return callExpr("not", [value]); }
|
|
6
|
+
/** Combines workflow boolean values with logical AND. */
|
|
7
|
+
export function and(...values) { return callExpr("and", values); }
|
|
8
|
+
/** Combines workflow boolean values with logical OR. */
|
|
9
|
+
export function or(...values) { return callExpr("or", values); }
|
|
10
|
+
/** Selects one of two workflow values from a boolean expression. */
|
|
11
|
+
export function ifElse(condition, thenValue, elseValue) { return callExpr("ifElse", [condition, thenValue, elseValue]); }
|
|
12
|
+
/** Compares two workflow values for equality. */
|
|
13
|
+
export function eq(a, b) { return callExpr("eq", [a, b]); }
|
|
14
|
+
/** Compares two workflow values for inequality. */
|
|
15
|
+
export function ne(a, b) { return callExpr("ne", [a, b]); }
|
|
16
|
+
/** Compares two workflow numbers with less-than. */
|
|
17
|
+
export function lt(a, b) { return callExpr("lt", [a, b]); }
|
|
18
|
+
/** Compares two workflow numbers with less-than-or-equal. */
|
|
19
|
+
export function lte(a, b) { return callExpr("lte", [a, b]); }
|
|
20
|
+
/** Compares two workflow numbers with greater-than. */
|
|
21
|
+
export function gt(a, b) { return callExpr("gt", [a, b]); }
|
|
22
|
+
/** Compares two workflow numbers with greater-than-or-equal. */
|
|
23
|
+
export function gte(a, b) { return callExpr("gte", [a, b]); }
|
|
24
|
+
/** Returns the first non-nullish workflow value. */
|
|
25
|
+
export function coalesce(value, ...values) { return callExpr("coalesce", [value, ...values]); }
|
|
26
|
+
/** Returns the length of a workflow string or array value. */
|
|
27
|
+
export function len(value) { return callExpr("len", [value]); }
|
|
28
|
+
export function includes(collection, value) { return callExpr("includes", [collection, value]); }
|
|
29
|
+
/** Checks whether a workflow string or array value is empty. */
|
|
30
|
+
export function isEmpty(value) { return eq(len(value), 0); }
|
|
31
|
+
/** Checks whether a workflow string starts with a prefix. */
|
|
32
|
+
export function startsWith(value, prefix) { return callExpr("startsWith", [value, prefix]); }
|
|
33
|
+
/** Checks whether a workflow string ends with a suffix. */
|
|
34
|
+
export function endsWith(value, suffix) { return callExpr("endsWith", [value, suffix]); }
|
|
35
|
+
/** Checks whether a workflow string matches a pattern. */
|
|
36
|
+
export function matches(value, pattern) { return callExpr("matches", [value, pattern]); }
|
|
37
|
+
export function get(target, key) {
|
|
38
|
+
return callExpr("get", [target, key]);
|
|
39
|
+
}
|
|
40
|
+
/** Reads the first item from a workflow array. */
|
|
41
|
+
export function head(array) { return get(array, 0); }
|
|
42
|
+
export function every(array, predicate) {
|
|
43
|
+
return predicate ? scopedCollection("every", array, predicate) : callExpr("every", [array]);
|
|
44
|
+
}
|
|
45
|
+
export function some(array, predicate) {
|
|
46
|
+
return predicate ? scopedCollection("some", array, predicate) : callExpr("some", [array]);
|
|
47
|
+
}
|
|
48
|
+
/** Filters a workflow array with a scoped predicate. */
|
|
49
|
+
export function filter(array, predicate) {
|
|
50
|
+
return scopedCollection("filter", array, predicate);
|
|
51
|
+
}
|
|
52
|
+
/** Maps a workflow array with a scoped mapper. */
|
|
53
|
+
export function map(array, mapper) {
|
|
54
|
+
return scopedCollection("map", array, mapper);
|
|
55
|
+
}
|
|
56
|
+
/** Returns the maximum number from a workflow array. */
|
|
57
|
+
export function max(values) { return callExpr("max", [values]); }
|
|
58
|
+
/** Returns the minimum number from a workflow array. */
|
|
59
|
+
export function min(values) { return callExpr("min", [values]); }
|
|
60
|
+
export function where(target, filter) {
|
|
61
|
+
return lowerWhere(target, filter);
|
|
62
|
+
}
|
|
63
|
+
/** Projects selected fields from an object accessor. */
|
|
64
|
+
export function pick(source, keys) {
|
|
65
|
+
const out = {};
|
|
66
|
+
const accessor = source;
|
|
67
|
+
for (const key of keys) {
|
|
68
|
+
if (RESERVED_ACCESSOR_KEYS.has(key))
|
|
69
|
+
throw new Error(`pick(source, keys) cannot project reserved accessor key '${key}'.`);
|
|
70
|
+
out[key] = accessor[key];
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Builds an exact string template expression and preserves authored whitespace.
|
|
76
|
+
* Use `md` for multiline Markdown prompts that should be dedented.
|
|
77
|
+
*/
|
|
78
|
+
export function template(strings, ...values) {
|
|
79
|
+
return templateExpr(templateParts(strings, values));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Builds a multiline Markdown template for prompts and messages.
|
|
83
|
+
* Unlike `template`, this helper removes surrounding blank lines and common indentation.
|
|
84
|
+
*/
|
|
85
|
+
export function md(strings, ...values) {
|
|
86
|
+
return templateExpr(dedentTemplateParts(templateParts(strings, values)));
|
|
87
|
+
}
|
|
88
|
+
function templateParts(strings, values) {
|
|
89
|
+
const parts = [];
|
|
90
|
+
strings.forEach((text, index) => {
|
|
91
|
+
parts.push({ kind: "text", value: text });
|
|
92
|
+
if (index < values.length)
|
|
93
|
+
parts.push({ kind: "expr", expr: valueToExprIR(values[index]) });
|
|
94
|
+
});
|
|
95
|
+
return parts;
|
|
96
|
+
}
|
|
97
|
+
function templateExpr(parts) {
|
|
98
|
+
return accessor({ kind: "template", template: { kind: "template", parts } });
|
|
99
|
+
}
|
|
100
|
+
function dedentTemplateParts(parts) {
|
|
101
|
+
const trimmed = trimBoundaryBlankLines(parts);
|
|
102
|
+
const commonIndent = findCommonIndent(trimmed);
|
|
103
|
+
if (commonIndent === 0)
|
|
104
|
+
return trimmed;
|
|
105
|
+
let atLineStart = true;
|
|
106
|
+
let remainingIndent = commonIndent;
|
|
107
|
+
return trimmed.map(part => {
|
|
108
|
+
if (part.kind === "expr") {
|
|
109
|
+
atLineStart = false;
|
|
110
|
+
return part;
|
|
111
|
+
}
|
|
112
|
+
let value = "";
|
|
113
|
+
for (const char of part.value) {
|
|
114
|
+
if (char === "\n") {
|
|
115
|
+
value += char;
|
|
116
|
+
atLineStart = true;
|
|
117
|
+
remainingIndent = commonIndent;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (atLineStart && remainingIndent > 0 && (char === " " || char === "\t")) {
|
|
121
|
+
remainingIndent--;
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
value += char;
|
|
125
|
+
if (char !== " " && char !== "\t")
|
|
126
|
+
atLineStart = false;
|
|
127
|
+
}
|
|
128
|
+
return { kind: "text", value };
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function trimBoundaryBlankLines(parts) {
|
|
132
|
+
const trimmed = parts.map(part => part.kind === "text" ? { ...part } : part);
|
|
133
|
+
const firstText = trimmed.find(part => part.kind === "text");
|
|
134
|
+
if (firstText?.kind === "text")
|
|
135
|
+
firstText.value = firstText.value.replace(/^(?:[ \t]*\r?\n)+/, "");
|
|
136
|
+
for (let index = trimmed.length - 1; index >= 0; index--) {
|
|
137
|
+
const part = trimmed[index];
|
|
138
|
+
if (part?.kind === "text") {
|
|
139
|
+
part.value = part.value.replace(/(?:\r?\n[ \t]*)+$/, "");
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return trimmed;
|
|
144
|
+
}
|
|
145
|
+
function findCommonIndent(parts) {
|
|
146
|
+
const indents = [];
|
|
147
|
+
let atLineStart = true;
|
|
148
|
+
let indent = 0;
|
|
149
|
+
let lineHasContent = false;
|
|
150
|
+
for (const part of parts) {
|
|
151
|
+
if (part.kind === "expr") {
|
|
152
|
+
lineHasContent = true;
|
|
153
|
+
atLineStart = false;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
for (const char of part.value) {
|
|
157
|
+
if (char === "\n") {
|
|
158
|
+
if (lineHasContent)
|
|
159
|
+
indents.push(indent);
|
|
160
|
+
atLineStart = true;
|
|
161
|
+
indent = 0;
|
|
162
|
+
lineHasContent = false;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (atLineStart && (char === " " || char === "\t")) {
|
|
166
|
+
indent++;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
lineHasContent = true;
|
|
170
|
+
atLineStart = false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (lineHasContent)
|
|
174
|
+
indents.push(indent);
|
|
175
|
+
return indents.length === 0 ? 0 : Math.min(...indents);
|
|
176
|
+
}
|
|
177
|
+
function scopedCollection(fn, array, callback) {
|
|
178
|
+
return withBuildContext(context => {
|
|
179
|
+
const itemId = context.nextId();
|
|
180
|
+
const indexId = context.nextId();
|
|
181
|
+
const body = valueToExprIR(callback(varExpr(itemId), varExpr(indexId)));
|
|
182
|
+
return callExpr(fn, [
|
|
183
|
+
array,
|
|
184
|
+
{ kind: "lambda", params: [{ id: itemId }, { id: indexId }], body },
|
|
185
|
+
]);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
let activeBuildContext;
|
|
189
|
+
function withBuildContext(run) {
|
|
190
|
+
if (activeBuildContext)
|
|
191
|
+
return run(activeBuildContext);
|
|
192
|
+
let next = 0;
|
|
193
|
+
const context = { nextId: () => `v${next++}` };
|
|
194
|
+
activeBuildContext = context;
|
|
195
|
+
try {
|
|
196
|
+
return run(context);
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
activeBuildContext = undefined;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function lowerWhere(target, filter) {
|
|
203
|
+
if (isExpr(filter) || filter === null || typeof filter === "string" || typeof filter === "number" || typeof filter === "boolean")
|
|
204
|
+
return eq(target, filter);
|
|
205
|
+
if (!isPlainObject(filter))
|
|
206
|
+
return eq(target, filter);
|
|
207
|
+
const entries = Object.entries(filter);
|
|
208
|
+
if (entries.length === 0)
|
|
209
|
+
throw new Error("where(target, filter) requires at least one filter entry.");
|
|
210
|
+
if (isObjectTyped(target))
|
|
211
|
+
return lowerObjectWhere(target, filter);
|
|
212
|
+
if (entries.every(([key]) => WHERE_OPERATOR_KEY_SET.has(key)))
|
|
213
|
+
return lowerWhereOperators(target, filter);
|
|
214
|
+
return lowerObjectWhere(target, filter);
|
|
215
|
+
}
|
|
216
|
+
function lowerObjectWhere(target, filter) {
|
|
217
|
+
if (!isPlainObject(filter))
|
|
218
|
+
return eq(target, filter);
|
|
219
|
+
const entries = Object.entries(filter);
|
|
220
|
+
if (entries.length === 0)
|
|
221
|
+
throw new Error("where(target, filter) requires at least one filter entry.");
|
|
222
|
+
const clauses = entries.map(([key, value]) => {
|
|
223
|
+
if (WHERE_OPERATOR_KEY_SET.has(key) || RESERVED_ACCESSOR_KEYS.has(key))
|
|
224
|
+
throw new Error(`where(target, filter) cannot use reserved filter key '${key}'.`);
|
|
225
|
+
return lowerWhere(target[key], value);
|
|
226
|
+
});
|
|
227
|
+
return clauses.length === 1 ? clauses[0] : and(...clauses);
|
|
228
|
+
}
|
|
229
|
+
function lowerWhereOperators(target, filter) {
|
|
230
|
+
const clauses = Object.entries(filter).map(([operator, value]) => {
|
|
231
|
+
switch (operator) {
|
|
232
|
+
case "eq": return eq(target, value);
|
|
233
|
+
case "ne": return ne(target, value);
|
|
234
|
+
case "lt": return lt(target, value);
|
|
235
|
+
case "lte": return lte(target, value);
|
|
236
|
+
case "gt": return gt(target, value);
|
|
237
|
+
case "gte": return gte(target, value);
|
|
238
|
+
case "contains": return includes(target, value);
|
|
239
|
+
case "startsWith": return startsWith(target, value);
|
|
240
|
+
case "endsWith": return endsWith(target, value);
|
|
241
|
+
case "matches": return matches(target, value);
|
|
242
|
+
case "length": return lowerWhere(len(target), value);
|
|
243
|
+
default: throw new Error(`Unsupported where operator: ${operator}.`);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
return clauses.length === 1 ? clauses[0] : and(...clauses);
|
|
247
|
+
}
|
|
248
|
+
function isPlainObject(value) {
|
|
249
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
250
|
+
return false;
|
|
251
|
+
const prototype = Object.getPrototypeOf(value);
|
|
252
|
+
return prototype === Object.prototype || prototype === null;
|
|
253
|
+
}
|
|
254
|
+
const RESERVED_ACCESSOR_KEYS = new Set(["__ir", "__type"]);
|
|
255
|
+
function isObjectTyped(value) {
|
|
256
|
+
if (!isExpr(value))
|
|
257
|
+
return false;
|
|
258
|
+
return "type" in value.__ir && (value.__ir.type?.kind === "object" || value.__ir.type?.kind === "record");
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { EXPR } from "./symbols.js";
|
|
2
|
+
import { type Result } from "neverthrow";
|
|
3
|
+
import type { ExprIR, TypeIR } from "../ir.js";
|
|
4
|
+
export interface Expr<T> {
|
|
5
|
+
readonly [EXPR]: true;
|
|
6
|
+
readonly __type: T;
|
|
7
|
+
readonly __ir: ExprIR;
|
|
8
|
+
}
|
|
9
|
+
export type WorkflowPrimitive = string | number | boolean | null;
|
|
10
|
+
export type AnyWorkflowValue = Expr<any> | WorkflowPrimitive | readonly AnyWorkflowValue[] | {
|
|
11
|
+
readonly [key: string]: AnyWorkflowValue;
|
|
12
|
+
};
|
|
13
|
+
type WorkflowLiteralValue<T> = T extends undefined ? never : T extends WorkflowPrimitive ? T : T extends readonly (infer Item)[] ? readonly WorkflowValue<Item>[] : T extends object ? {
|
|
14
|
+
readonly [K in keyof T]: WorkflowValue<T[K]>;
|
|
15
|
+
} : never;
|
|
16
|
+
type IsAny<T> = 0 extends (1 & T) ? true : false;
|
|
17
|
+
export type WorkflowValue<T = any> = IsAny<T> extends true ? AnyWorkflowValue : Expr<T> | WorkflowLiteralValue<T>;
|
|
18
|
+
type Primitive = string | number | boolean | null | undefined;
|
|
19
|
+
type Nullish<T> = Extract<T, null | undefined>;
|
|
20
|
+
export type OutputAccessor<T> = [NonNullable<T>] extends [Primitive] ? Expr<T> : [NonNullable<T>] extends [readonly (infer Item)[]] ? Expr<T> & {
|
|
21
|
+
readonly [index: number]: OutputAccessor<Item | Nullish<T>>;
|
|
22
|
+
} : [NonNullable<T>] extends [object] ? Expr<T> & {
|
|
23
|
+
readonly [K in Exclude<keyof NonNullable<T>, keyof Expr<any>>]-?: OutputAccessor<NonNullable<T>[K] | Nullish<T>>;
|
|
24
|
+
} : Expr<T>;
|
|
25
|
+
export declare function isExpr(value: unknown): value is Expr<any>;
|
|
26
|
+
export declare function expr<T>(ir: ExprIR): Expr<T>;
|
|
27
|
+
export type ExprLoweringError = {
|
|
28
|
+
type: "unsupported-expression-value";
|
|
29
|
+
path: string;
|
|
30
|
+
valueType: string;
|
|
31
|
+
message: string;
|
|
32
|
+
} | {
|
|
33
|
+
type: "sparse-array-hole";
|
|
34
|
+
path: string;
|
|
35
|
+
message: string;
|
|
36
|
+
} | {
|
|
37
|
+
type: "non-plain-object";
|
|
38
|
+
path: string;
|
|
39
|
+
message: string;
|
|
40
|
+
} | {
|
|
41
|
+
type: "symbol-keys";
|
|
42
|
+
path: string;
|
|
43
|
+
message: string;
|
|
44
|
+
};
|
|
45
|
+
export declare function valueToExprIR(value: unknown): ExprIR;
|
|
46
|
+
export declare function tryValueToExprIR(value: unknown, path?: string): Result<ExprIR, ExprLoweringError>;
|
|
47
|
+
export declare function accessor<T>(ir: ExprIR): OutputAccessor<T>;
|
|
48
|
+
export declare function refExpr<T>(path: string[], type?: TypeIR): OutputAccessor<T>;
|
|
49
|
+
export declare function varExpr<T>(id: string, path?: string[], type?: TypeIR): OutputAccessor<T>;
|
|
50
|
+
export declare function callExpr<T>(fn: string, args: unknown[], type?: TypeIR): OutputAccessor<T>;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=expr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expr.d.ts","sourceRoot":"","sources":["../../src/internal/expr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { EXPR } from "./symbols.js";
|
|
2
|
+
import { err, ok } from "neverthrow";
|
|
3
|
+
class ExprImpl {
|
|
4
|
+
__ir;
|
|
5
|
+
[EXPR] = true;
|
|
6
|
+
constructor(__ir) {
|
|
7
|
+
this.__ir = __ir;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function isExpr(value) {
|
|
11
|
+
return Boolean(value && typeof value === "object" && value[EXPR]);
|
|
12
|
+
}
|
|
13
|
+
export function expr(ir) {
|
|
14
|
+
return new ExprImpl(ir);
|
|
15
|
+
}
|
|
16
|
+
export function valueToExprIR(value) {
|
|
17
|
+
return tryValueToExprIR(value).match(ir => ir, error => {
|
|
18
|
+
throw new Error(error.message);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export function tryValueToExprIR(value, path = "$") {
|
|
22
|
+
if (isExpr(value))
|
|
23
|
+
return ok(value.__ir);
|
|
24
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
25
|
+
return ok({ kind: "literal", value });
|
|
26
|
+
}
|
|
27
|
+
if (typeof value === "number") {
|
|
28
|
+
return Number.isFinite(value) ? ok({ kind: "literal", value }) : unsupportedExpressionValue(path, "non-finite number");
|
|
29
|
+
}
|
|
30
|
+
if (value === undefined)
|
|
31
|
+
return unsupportedExpressionValue(path, "undefined");
|
|
32
|
+
if (typeof value === "bigint" || typeof value === "symbol" || typeof value === "function")
|
|
33
|
+
return unsupportedExpressionValue(path, typeof value);
|
|
34
|
+
if (Array.isArray(value)) {
|
|
35
|
+
const items = [];
|
|
36
|
+
for (let index = 0; index < value.length; index++) {
|
|
37
|
+
const itemPath = `${path}[${index}]`;
|
|
38
|
+
if (!Object.prototype.hasOwnProperty.call(value, index))
|
|
39
|
+
return err({ type: "sparse-array-hole", path: itemPath, message: "Unsupported expression value: sparse array hole." });
|
|
40
|
+
const item = tryValueToExprIR(value[index], itemPath);
|
|
41
|
+
if (item.isErr())
|
|
42
|
+
return item;
|
|
43
|
+
items.push(item.value);
|
|
44
|
+
}
|
|
45
|
+
return ok({ kind: "array", items });
|
|
46
|
+
}
|
|
47
|
+
if (value && typeof value === "object") {
|
|
48
|
+
const prototype = Object.getPrototypeOf(value);
|
|
49
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
50
|
+
return err({ type: "non-plain-object", path, message: "Unsupported expression value: non-plain object." });
|
|
51
|
+
if (Object.getOwnPropertySymbols(value).length > 0)
|
|
52
|
+
return err({ type: "symbol-keys", path, message: "Unsupported expression value: symbol keys." });
|
|
53
|
+
const fields = {};
|
|
54
|
+
for (const [key, item] of Object.entries(value)) {
|
|
55
|
+
const child = tryValueToExprIR(item, `${path}.${key}`);
|
|
56
|
+
if (child.isErr()) {
|
|
57
|
+
if (child.error.type === "unsupported-expression-value" && child.error.valueType === "undefined") {
|
|
58
|
+
return err({ ...child.error, message: `Unsupported expression value at key '${key}': undefined.` });
|
|
59
|
+
}
|
|
60
|
+
return child;
|
|
61
|
+
}
|
|
62
|
+
fields[key] = child.value;
|
|
63
|
+
}
|
|
64
|
+
return ok({ kind: "object", fields });
|
|
65
|
+
}
|
|
66
|
+
return unsupportedExpressionValue(path, String(value));
|
|
67
|
+
}
|
|
68
|
+
function unsupportedExpressionValue(path, valueType) {
|
|
69
|
+
return err({ type: "unsupported-expression-value", path, valueType, message: `Unsupported expression value: ${valueType}.` });
|
|
70
|
+
}
|
|
71
|
+
export function accessor(ir) {
|
|
72
|
+
const base = expr(ir);
|
|
73
|
+
return new Proxy(base, {
|
|
74
|
+
get(target, prop, receiver) {
|
|
75
|
+
if (prop === "__ir" || prop === "__type" || prop === EXPR || typeof prop === "symbol")
|
|
76
|
+
return Reflect.get(target, prop, receiver);
|
|
77
|
+
const key = String(prop);
|
|
78
|
+
if (target.__ir.kind === "ref")
|
|
79
|
+
return accessor({ kind: "ref", path: [...target.__ir.path, key] });
|
|
80
|
+
if (target.__ir.kind === "var")
|
|
81
|
+
return accessor({ kind: "var", id: target.__ir.id, path: [...target.__ir.path, key] });
|
|
82
|
+
return accessor({ kind: "call", fn: "get", args: [target.__ir, { kind: "literal", value: key }] });
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export function refExpr(path, type) {
|
|
87
|
+
return accessor(type === undefined ? { kind: "ref", path } : { kind: "ref", path, type });
|
|
88
|
+
}
|
|
89
|
+
export function varExpr(id, path = [], type) {
|
|
90
|
+
return accessor(type === undefined ? { kind: "var", id, path } : { kind: "var", id, path, type });
|
|
91
|
+
}
|
|
92
|
+
export function callExpr(fn, args, type) {
|
|
93
|
+
const irArgs = args.map(valueToCallArgIR);
|
|
94
|
+
const ir = type === undefined ? { kind: "call", fn, args: irArgs } : { kind: "call", fn, args: irArgs, type };
|
|
95
|
+
return accessor(ir);
|
|
96
|
+
}
|
|
97
|
+
function valueToCallArgIR(value) {
|
|
98
|
+
return isExprIR(value) ? value : valueToExprIR(value);
|
|
99
|
+
}
|
|
100
|
+
function isExprIR(value) {
|
|
101
|
+
if (!value || typeof value !== "object")
|
|
102
|
+
return false;
|
|
103
|
+
const kind = value.kind;
|
|
104
|
+
return kind === "literal"
|
|
105
|
+
|| kind === "ref"
|
|
106
|
+
|| kind === "var"
|
|
107
|
+
|| kind === "call"
|
|
108
|
+
|| kind === "array"
|
|
109
|
+
|| kind === "object"
|
|
110
|
+
|| kind === "template"
|
|
111
|
+
|| kind === "lambda";
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=expr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expr.js","sourceRoot":"","sources":["../../src/internal/expr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type OperatorSpec = {
|
|
2
|
+
arity: number[] | {
|
|
3
|
+
min: number;
|
|
4
|
+
};
|
|
5
|
+
lambdaArgs: ReadonlySet<number>;
|
|
6
|
+
};
|
|
7
|
+
export declare const EXPRESSION_OPERATORS: Record<string, OperatorSpec>;
|
|
8
|
+
export declare const WHERE_OPERATOR_KEYS: readonly ["eq", "ne", "lt", "lte", "gt", "gte", "contains", "startsWith", "endsWith", "matches", "length"];
|
|
9
|
+
export type WhereOperatorKey = typeof WHERE_OPERATOR_KEYS[number];
|
|
10
|
+
export declare const WHERE_OPERATOR_KEY_SET: ReadonlySet<WhereOperatorKey>;
|
|
11
|
+
//# sourceMappingURL=operators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../src/internal/operators.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,EAAE,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAwB7D,CAAC;AAEF,eAAO,MAAM,mBAAmB,4GAA6G,CAAC;AAC9I,MAAM,MAAM,gBAAgB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAClE,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,gBAAgB,CAAgC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const EXPRESSION_OPERATORS = {
|
|
2
|
+
not: { arity: [1], lambdaArgs: new Set() },
|
|
3
|
+
and: { arity: { min: 0 }, lambdaArgs: new Set() },
|
|
4
|
+
or: { arity: { min: 0 }, lambdaArgs: new Set() },
|
|
5
|
+
ifElse: { arity: [3], lambdaArgs: new Set() },
|
|
6
|
+
eq: { arity: [2], lambdaArgs: new Set() },
|
|
7
|
+
ne: { arity: [2], lambdaArgs: new Set() },
|
|
8
|
+
lt: { arity: [2], lambdaArgs: new Set() },
|
|
9
|
+
lte: { arity: [2], lambdaArgs: new Set() },
|
|
10
|
+
gt: { arity: [2], lambdaArgs: new Set() },
|
|
11
|
+
gte: { arity: [2], lambdaArgs: new Set() },
|
|
12
|
+
len: { arity: [1], lambdaArgs: new Set() },
|
|
13
|
+
includes: { arity: [2], lambdaArgs: new Set() },
|
|
14
|
+
startsWith: { arity: [2], lambdaArgs: new Set() },
|
|
15
|
+
endsWith: { arity: [2], lambdaArgs: new Set() },
|
|
16
|
+
matches: { arity: [2], lambdaArgs: new Set() },
|
|
17
|
+
coalesce: { arity: { min: 1 }, lambdaArgs: new Set() },
|
|
18
|
+
get: { arity: [2], lambdaArgs: new Set() },
|
|
19
|
+
every: { arity: [1, 2], lambdaArgs: new Set([1]) },
|
|
20
|
+
some: { arity: [1, 2], lambdaArgs: new Set([1]) },
|
|
21
|
+
filter: { arity: [2], lambdaArgs: new Set([1]) },
|
|
22
|
+
map: { arity: [2], lambdaArgs: new Set([1]) },
|
|
23
|
+
max: { arity: [1], lambdaArgs: new Set() },
|
|
24
|
+
min: { arity: [1], lambdaArgs: new Set() },
|
|
25
|
+
};
|
|
26
|
+
export const WHERE_OPERATOR_KEYS = ["eq", "ne", "lt", "lte", "gt", "gte", "contains", "startsWith", "endsWith", "matches", "length"];
|
|
27
|
+
export const WHERE_OPERATOR_KEY_SET = new Set(WHERE_OPERATOR_KEYS);
|
|
28
|
+
//# sourceMappingURL=operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../src/internal/operators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/internal/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,eAAiC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/internal/symbols.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC"}
|
package/dist/ir.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
2
|
+
export type JsonValue = JsonPrimitive | JsonArray | JsonObject;
|
|
3
|
+
export type JsonArray = JsonValue[];
|
|
4
|
+
export type JsonObject = {
|
|
5
|
+
[key: string]: JsonValue;
|
|
6
|
+
};
|
|
7
|
+
export type TypeIR = {
|
|
8
|
+
kind: "unknown";
|
|
9
|
+
} | {
|
|
10
|
+
kind: "string";
|
|
11
|
+
} | {
|
|
12
|
+
kind: "number";
|
|
13
|
+
} | {
|
|
14
|
+
kind: "boolean";
|
|
15
|
+
} | {
|
|
16
|
+
kind: "null";
|
|
17
|
+
} | {
|
|
18
|
+
kind: "array";
|
|
19
|
+
item: TypeIR;
|
|
20
|
+
} | {
|
|
21
|
+
kind: "object";
|
|
22
|
+
fields: Record<string, TypeIR>;
|
|
23
|
+
required: string[];
|
|
24
|
+
additionalProperties: boolean;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "record";
|
|
27
|
+
value: TypeIR;
|
|
28
|
+
} | {
|
|
29
|
+
kind: "union";
|
|
30
|
+
variants: TypeIR[];
|
|
31
|
+
};
|
|
32
|
+
export type ExprIR = {
|
|
33
|
+
kind: "literal";
|
|
34
|
+
value: JsonValue;
|
|
35
|
+
type?: TypeIR;
|
|
36
|
+
} | {
|
|
37
|
+
kind: "ref";
|
|
38
|
+
path: string[];
|
|
39
|
+
type?: TypeIR;
|
|
40
|
+
} | {
|
|
41
|
+
kind: "var";
|
|
42
|
+
id: string;
|
|
43
|
+
path: string[];
|
|
44
|
+
type?: TypeIR;
|
|
45
|
+
} | {
|
|
46
|
+
kind: "call";
|
|
47
|
+
fn: string;
|
|
48
|
+
args: ExprIR[];
|
|
49
|
+
type?: TypeIR;
|
|
50
|
+
} | {
|
|
51
|
+
kind: "array";
|
|
52
|
+
items: ExprIR[];
|
|
53
|
+
type?: TypeIR;
|
|
54
|
+
} | {
|
|
55
|
+
kind: "object";
|
|
56
|
+
fields: Record<string, ExprIR>;
|
|
57
|
+
type?: TypeIR;
|
|
58
|
+
} | {
|
|
59
|
+
kind: "template";
|
|
60
|
+
template: TemplateIR;
|
|
61
|
+
type?: TypeIR;
|
|
62
|
+
} | {
|
|
63
|
+
kind: "lambda";
|
|
64
|
+
params: LambdaParamIR[];
|
|
65
|
+
body: ExprIR;
|
|
66
|
+
};
|
|
67
|
+
export type LambdaParamIR = {
|
|
68
|
+
id: string;
|
|
69
|
+
type?: TypeIR;
|
|
70
|
+
};
|
|
71
|
+
export type TemplateIR = {
|
|
72
|
+
kind: "template";
|
|
73
|
+
parts: TemplatePartIR[];
|
|
74
|
+
};
|
|
75
|
+
export type TemplatePartIR = {
|
|
76
|
+
kind: "text";
|
|
77
|
+
value: string;
|
|
78
|
+
} | {
|
|
79
|
+
kind: "expr";
|
|
80
|
+
expr: ExprIR;
|
|
81
|
+
};
|
|
82
|
+
export { expr, refExpr, valueToExprIR, tryValueToExprIR } from "./internal/expr.js";
|
|
83
|
+
export type { Expr, ExprLoweringError, OutputAccessor, WorkflowValue } from "./internal/expr.js";
|
|
84
|
+
//# sourceMappingURL=ir.d.ts.map
|
package/dist/ir.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"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"}
|
package/dist/ir.js
ADDED
package/dist/ir.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir.js","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,EAAE,CAIpE"}
|