@telorun/cel 0.0.0-stage → 0.107.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 +17 -0
- package/README.md +281 -2
- package/dist/activation.d.ts +27 -0
- package/dist/activation.d.ts.map +1 -0
- package/dist/activation.js +24 -0
- package/dist/backend-runtime.d.ts +146 -0
- package/dist/backend-runtime.d.ts.map +1 -0
- package/dist/backend-runtime.js +322 -0
- package/dist/bounded-cache.d.ts +21 -0
- package/dist/bounded-cache.d.ts.map +1 -0
- package/dist/bounded-cache.js +42 -0
- package/dist/catalog-runtime.d.ts +59 -0
- package/dist/catalog-runtime.d.ts.map +1 -0
- package/dist/catalog-runtime.js +785 -0
- package/dist/cel-expression.d.ts +32 -0
- package/dist/cel-expression.d.ts.map +1 -0
- package/dist/cel-expression.js +29 -0
- package/dist/cel-map-value.d.ts +34 -0
- package/dist/cel-map-value.d.ts.map +1 -0
- package/dist/cel-map-value.js +74 -0
- package/dist/cel-program.d.ts +44 -0
- package/dist/cel-program.d.ts.map +1 -0
- package/dist/cel-program.js +72 -0
- package/dist/cel-type.d.ts +131 -0
- package/dist/cel-type.d.ts.map +1 -0
- package/dist/cel-type.js +293 -0
- package/dist/cel-value.d.ts +159 -0
- package/dist/cel-value.d.ts.map +1 -0
- package/dist/cel-value.js +225 -0
- package/dist/check-diagnostic.d.ts +53 -0
- package/dist/check-diagnostic.d.ts.map +1 -0
- package/dist/check-diagnostic.js +66 -0
- package/dist/checker.d.ts +77 -0
- package/dist/checker.d.ts.map +1 -0
- package/dist/checker.js +721 -0
- package/dist/closure-backend.d.ts +21 -0
- package/dist/closure-backend.d.ts.map +1 -0
- package/dist/closure-backend.js +436 -0
- package/dist/comprehension-bindings.d.ts +33 -0
- package/dist/comprehension-bindings.d.ts.map +1 -0
- package/dist/comprehension-bindings.js +50 -0
- package/dist/comprehension-runtime.d.ts +44 -0
- package/dist/comprehension-runtime.d.ts.map +1 -0
- package/dist/comprehension-runtime.js +137 -0
- package/dist/declared-chain.d.ts +35 -0
- package/dist/declared-chain.d.ts.map +1 -0
- package/dist/declared-chain.js +36 -0
- package/dist/duration-value.d.ts +59 -0
- package/dist/duration-value.d.ts.map +1 -0
- package/dist/duration-value.js +135 -0
- package/dist/emitted-module.d.ts +207 -0
- package/dist/emitted-module.d.ts.map +1 -0
- package/dist/emitted-module.js +359 -0
- package/dist/engine-version.d.ts +3 -0
- package/dist/engine-version.d.ts.map +1 -0
- package/dist/engine-version.js +8 -0
- package/dist/environment-digest.d.ts +44 -0
- package/dist/environment-digest.d.ts.map +1 -0
- package/dist/environment-digest.js +98 -0
- package/dist/environment.d.ts +283 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +459 -0
- package/dist/function-catalog.d.ts +66 -0
- package/dist/function-catalog.d.ts.map +1 -0
- package/dist/function-catalog.js +77 -0
- package/dist/function-registry.d.ts +78 -0
- package/dist/function-registry.d.ts.map +1 -0
- package/dist/function-registry.js +189 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/integer-arithmetic.d.ts +27 -0
- package/dist/integer-arithmetic.d.ts.map +1 -0
- package/dist/integer-arithmetic.js +58 -0
- package/dist/js-emitter.d.ts +132 -0
- package/dist/js-emitter.d.ts.map +1 -0
- package/dist/js-emitter.js +562 -0
- package/dist/json-schema-type.d.ts +182 -0
- package/dist/json-schema-type.d.ts.map +1 -0
- package/dist/json-schema-type.js +487 -0
- package/dist/json-text-scan.d.ts +28 -0
- package/dist/json-text-scan.d.ts.map +1 -0
- package/dist/json-text-scan.js +159 -0
- package/dist/lexer.d.ts +103 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +458 -0
- package/dist/macro-check.d.ts +33 -0
- package/dist/macro-check.d.ts.map +1 -0
- package/dist/macro-check.js +162 -0
- package/dist/macro-shape.d.ts +24 -0
- package/dist/macro-shape.d.ts.map +1 -0
- package/dist/macro-shape.js +55 -0
- package/dist/member-read.d.ts +52 -0
- package/dist/member-read.d.ts.map +1 -0
- package/dist/member-read.js +125 -0
- package/dist/namespace-resolution.d.ts +35 -0
- package/dist/namespace-resolution.d.ts.map +1 -0
- package/dist/namespace-resolution.js +160 -0
- package/dist/nominal-type.d.ts +63 -0
- package/dist/nominal-type.d.ts.map +1 -0
- package/dist/nominal-type.js +98 -0
- package/dist/nullable-access.d.ts +38 -0
- package/dist/nullable-access.d.ts.map +1 -0
- package/dist/nullable-access.js +93 -0
- package/dist/parse-limits.d.ts +26 -0
- package/dist/parse-limits.d.ts.map +1 -0
- package/dist/parse-limits.js +21 -0
- package/dist/parser.d.ts +48 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +503 -0
- package/dist/qualified-calls.d.ts +22 -0
- package/dist/qualified-calls.d.ts.map +1 -0
- package/dist/qualified-calls.js +27 -0
- package/dist/regular-expression.d.ts +48 -0
- package/dist/regular-expression.d.ts.map +1 -0
- package/dist/regular-expression.js +77 -0
- package/dist/reserved-words.d.ts +52 -0
- package/dist/reserved-words.d.ts.map +1 -0
- package/dist/reserved-words.js +77 -0
- package/dist/resolved-call.d.ts +33 -0
- package/dist/resolved-call.d.ts.map +1 -0
- package/dist/resolved-call.js +15 -0
- package/dist/root-references.d.ts +23 -0
- package/dist/root-references.d.ts.map +1 -0
- package/dist/root-references.js +120 -0
- package/dist/runtime-library.d.ts +56 -0
- package/dist/runtime-library.d.ts.map +1 -0
- package/dist/runtime-library.js +545 -0
- package/dist/serializer.d.ts +24 -0
- package/dist/serializer.d.ts.map +1 -0
- package/dist/serializer.js +240 -0
- package/dist/sha256.d.ts +20 -0
- package/dist/sha256.d.ts.map +1 -0
- package/dist/sha256.js +103 -0
- package/dist/signature.d.ts +72 -0
- package/dist/signature.d.ts.map +1 -0
- package/dist/signature.js +61 -0
- package/dist/signatures/function-catalog.json +788 -0
- package/dist/signatures/standard-library.json +229 -0
- package/dist/standard-library.d.ts +41 -0
- package/dist/standard-library.d.ts.map +1 -0
- package/dist/standard-library.js +85 -0
- package/dist/syntax-diagnostic.d.ts +61 -0
- package/dist/syntax-diagnostic.d.ts.map +1 -0
- package/dist/syntax-diagnostic.js +28 -0
- package/dist/syntax-tree.d.ts +160 -0
- package/dist/syntax-tree.d.ts.map +1 -0
- package/dist/syntax-tree.js +58 -0
- package/dist/timestamp-value.d.ts +53 -0
- package/dist/timestamp-value.d.ts.map +1 -0
- package/dist/timestamp-value.js +223 -0
- package/dist/tree-equality.d.ts +15 -0
- package/dist/tree-equality.d.ts.map +1 -0
- package/dist/tree-equality.js +105 -0
- package/dist/type-expression.d.ts +26 -0
- package/dist/type-expression.d.ts.map +1 -0
- package/dist/type-expression.js +134 -0
- package/dist/value-equality.d.ts +38 -0
- package/dist/value-equality.d.ts.map +1 -0
- package/dist/value-equality.js +196 -0
- package/dist/value-text.d.ts +25 -0
- package/dist/value-text.d.ts.map +1 -0
- package/dist/value-text.js +44 -0
- package/dist/zoned-calendar.d.ts +61 -0
- package/dist/zoned-calendar.d.ts.map +1 -0
- package/dist/zoned-calendar.js +143 -0
- package/package.json +56 -3
- package/src/activation.ts +32 -0
- package/src/backend-runtime.ts +454 -0
- package/src/bounded-cache.ts +45 -0
- package/src/catalog-runtime.ts +921 -0
- package/src/cel-expression.ts +53 -0
- package/src/cel-map-value.ts +86 -0
- package/src/cel-program.ts +103 -0
- package/src/cel-type.ts +359 -0
- package/src/cel-value.ts +353 -0
- package/src/check-diagnostic.ts +102 -0
- package/src/checker.ts +932 -0
- package/src/closure-backend.ts +502 -0
- package/src/comprehension-bindings.ts +66 -0
- package/src/comprehension-runtime.ts +157 -0
- package/src/declared-chain.ts +45 -0
- package/src/duration-value.ts +145 -0
- package/src/emitted-module.ts +494 -0
- package/src/engine-version.ts +9 -0
- package/src/environment-digest.ts +111 -0
- package/src/environment.ts +740 -0
- package/src/function-catalog.ts +140 -0
- package/src/function-registry.ts +229 -0
- package/src/index.ts +386 -0
- package/src/integer-arithmetic.ts +64 -0
- package/src/js-emitter.ts +713 -0
- package/src/json-schema-type.ts +664 -0
- package/src/json-text-scan.ts +163 -0
- package/src/lexer.ts +562 -0
- package/src/macro-check.ts +191 -0
- package/src/macro-shape.ts +66 -0
- package/src/member-read.ts +126 -0
- package/src/namespace-resolution.ts +167 -0
- package/src/nominal-type.ts +149 -0
- package/src/nullable-access.ts +95 -0
- package/src/parse-limits.ts +36 -0
- package/src/parser.ts +554 -0
- package/src/qualified-calls.ts +39 -0
- package/src/regular-expression.ts +101 -0
- package/src/reserved-words.ts +94 -0
- package/src/resolved-call.ts +34 -0
- package/src/root-references.ts +126 -0
- package/src/runtime-library.ts +615 -0
- package/src/serializer.ts +246 -0
- package/src/sha256.ts +112 -0
- package/src/signature.ts +127 -0
- package/src/signatures/function-catalog.json +788 -0
- package/src/signatures/standard-library.json +235 -0
- package/src/standard-library.ts +149 -0
- package/src/syntax-diagnostic.ts +72 -0
- package/src/syntax-tree.ts +229 -0
- package/src/timestamp-value.ts +294 -0
- package/src/tree-equality.ts +130 -0
- package/src/type-expression.ts +160 -0
- package/src/value-equality.ts +201 -0
- package/src/value-text.ts +45 -0
- package/src/zoned-calendar.ts +178 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a text stops being a prefix of any RFC 8259 JSON text.
|
|
3
|
+
*
|
|
4
|
+
* It is the offset `parseJson`'s refusal names, and it is computed here so the wording
|
|
5
|
+
* is the catalog's own and never the host JSON parser's: the host's verdict decides
|
|
6
|
+
* WHETHER a text is JSON, and this scan decides only how the refusal reads. A text the
|
|
7
|
+
* host refused and this scan reads as JSON is a defect here, raised as one with the
|
|
8
|
+
* host's error as its cause (`catalog-runtime.ts`).
|
|
9
|
+
*
|
|
10
|
+
* Its agreement with RFC 8259 is a property of the scan, never asserted at runtime. What
|
|
11
|
+
* holds it here is the catalog's own conformance rows, which pin the offset of thirteen
|
|
12
|
+
* refusals — a mid-text one, an end-of-input one, a bad escape, a leading zero, a byte-order
|
|
13
|
+
* mark and a raw control character among them. What those rows cannot reach is a text no row
|
|
14
|
+
* writes: the scan's agreement over arbitrary input was measured by differential fuzzing
|
|
15
|
+
* against the host parser where it was first written, and that measurement travels with the
|
|
16
|
+
* suite that made it rather than with this copy.
|
|
17
|
+
*/
|
|
18
|
+
export interface JsonRefusal {
|
|
19
|
+
/** UTF-16 offset of the first offending code unit; the text's length when
|
|
20
|
+
* every prefix is viable and the text is merely incomplete. */
|
|
21
|
+
readonly offset: number;
|
|
22
|
+
readonly endOfInput: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type ScanState = "value" | "valueOrClose" | "key" | "keyOrClose" | "after";
|
|
26
|
+
|
|
27
|
+
const QUOTE = 0x22;
|
|
28
|
+
const BACKSLASH = 0x5c;
|
|
29
|
+
const SIMPLE_ESCAPES = '"\\/bfnrt';
|
|
30
|
+
|
|
31
|
+
const isWhitespace = (c: string | undefined): boolean => c === " " || c === "\t" || c === "\n" || c === "\r";
|
|
32
|
+
const isDigit = (c: string | undefined): boolean => c !== undefined && c >= "0" && c <= "9";
|
|
33
|
+
const isHexDigit = (c: string): boolean => isDigit(c) || (c >= "a" && c <= "f") || (c >= "A" && c <= "F");
|
|
34
|
+
|
|
35
|
+
/** The refusal of `text`, or `undefined` when it is a JSON text. Iterative, so
|
|
36
|
+
* nesting depth is bounded by memory rather than by the call stack. Neither
|
|
37
|
+
* stricter nor laxer than RFC 8259. */
|
|
38
|
+
export function scanJsonPrefix(text: string): JsonRefusal | undefined {
|
|
39
|
+
const length = text.length;
|
|
40
|
+
let at = 0;
|
|
41
|
+
|
|
42
|
+
// Each token reader returns the offset it refuses, or `undefined` once `at`
|
|
43
|
+
// is past the token.
|
|
44
|
+
const readString = (): number | undefined => {
|
|
45
|
+
at++;
|
|
46
|
+
for (;;) {
|
|
47
|
+
if (at >= length) return length;
|
|
48
|
+
const code = text.charCodeAt(at);
|
|
49
|
+
if (code === QUOTE) {
|
|
50
|
+
at++;
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (code < 0x20) return at;
|
|
54
|
+
at++;
|
|
55
|
+
if (code !== BACKSLASH) continue;
|
|
56
|
+
if (at >= length) return length;
|
|
57
|
+
const escape = text[at]!;
|
|
58
|
+
if (escape === "u") {
|
|
59
|
+
at++;
|
|
60
|
+
for (let digit = 0; digit < 4; digit++, at++) {
|
|
61
|
+
if (at >= length) return length;
|
|
62
|
+
if (!isHexDigit(text[at]!)) return at;
|
|
63
|
+
}
|
|
64
|
+
} else if (SIMPLE_ESCAPES.includes(escape)) at++;
|
|
65
|
+
else return at;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const readDigits = (): number | undefined => {
|
|
70
|
+
if (!isDigit(text[at])) return at;
|
|
71
|
+
while (isDigit(text[at])) at++;
|
|
72
|
+
return undefined;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const readNumber = (): number | undefined => {
|
|
76
|
+
if (text[at] === "-") at++;
|
|
77
|
+
if (text[at] === "0") at++;
|
|
78
|
+
else {
|
|
79
|
+
const refused = readDigits();
|
|
80
|
+
if (refused !== undefined) return refused;
|
|
81
|
+
}
|
|
82
|
+
if (text[at] === ".") {
|
|
83
|
+
at++;
|
|
84
|
+
const refused = readDigits();
|
|
85
|
+
if (refused !== undefined) return refused;
|
|
86
|
+
}
|
|
87
|
+
if (text[at] === "e" || text[at] === "E") {
|
|
88
|
+
at++;
|
|
89
|
+
if (text[at] === "+" || text[at] === "-") at++;
|
|
90
|
+
return readDigits();
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const readLiteral = (literal: string): number | undefined => {
|
|
96
|
+
for (const expected of literal) {
|
|
97
|
+
if (text[at] !== expected) return at;
|
|
98
|
+
at++;
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const refusedAt = (offset: number): JsonRefusal => ({ offset, endOfInput: offset >= length });
|
|
104
|
+
|
|
105
|
+
const open: ("{" | "[")[] = [];
|
|
106
|
+
let state: ScanState = "value";
|
|
107
|
+
for (;;) {
|
|
108
|
+
while (isWhitespace(text[at])) at++;
|
|
109
|
+
const c = text[at];
|
|
110
|
+
|
|
111
|
+
if (state === "after") {
|
|
112
|
+
const container = open[open.length - 1];
|
|
113
|
+
if (container === undefined) return at === length ? undefined : refusedAt(at);
|
|
114
|
+
if (c === ",") {
|
|
115
|
+
at++;
|
|
116
|
+
state = container === "{" ? "key" : "value";
|
|
117
|
+
} else if (c === (container === "{" ? "}" : "]")) {
|
|
118
|
+
at++;
|
|
119
|
+
open.pop();
|
|
120
|
+
} else return refusedAt(at);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (state === "key" || state === "keyOrClose") {
|
|
125
|
+
if (state === "keyOrClose" && c === "}") {
|
|
126
|
+
at++;
|
|
127
|
+
open.pop();
|
|
128
|
+
state = "after";
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (c !== '"') return refusedAt(at);
|
|
132
|
+
const refused = readString();
|
|
133
|
+
if (refused !== undefined) return refusedAt(refused);
|
|
134
|
+
while (isWhitespace(text[at])) at++;
|
|
135
|
+
if (text[at] !== ":") return refusedAt(at);
|
|
136
|
+
at++;
|
|
137
|
+
state = "value";
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (state === "valueOrClose" && c === "]") {
|
|
142
|
+
at++;
|
|
143
|
+
open.pop();
|
|
144
|
+
state = "after";
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (c === "{" || c === "[") {
|
|
148
|
+
at++;
|
|
149
|
+
open.push(c);
|
|
150
|
+
state = c === "{" ? "keyOrClose" : "valueOrClose";
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
let refused: number | undefined;
|
|
154
|
+
if (c === '"') refused = readString();
|
|
155
|
+
else if (c === "-" || isDigit(c)) refused = readNumber();
|
|
156
|
+
else if (c === "t") refused = readLiteral("true");
|
|
157
|
+
else if (c === "f") refused = readLiteral("false");
|
|
158
|
+
else if (c === "n") refused = readLiteral("null");
|
|
159
|
+
else refused = at;
|
|
160
|
+
if (refused !== undefined) return refusedAt(refused);
|
|
161
|
+
state = "after";
|
|
162
|
+
}
|
|
163
|
+
}
|