@telorun/cel 0.0.0-stage → 0.108.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 (223) hide show
  1. package/LICENSE +17 -0
  2. package/README.md +281 -2
  3. package/dist/activation.d.ts +27 -0
  4. package/dist/activation.d.ts.map +1 -0
  5. package/dist/activation.js +24 -0
  6. package/dist/backend-runtime.d.ts +184 -0
  7. package/dist/backend-runtime.d.ts.map +1 -0
  8. package/dist/backend-runtime.js +425 -0
  9. package/dist/bounded-cache.d.ts +21 -0
  10. package/dist/bounded-cache.d.ts.map +1 -0
  11. package/dist/bounded-cache.js +42 -0
  12. package/dist/catalog-runtime.d.ts +59 -0
  13. package/dist/catalog-runtime.d.ts.map +1 -0
  14. package/dist/catalog-runtime.js +786 -0
  15. package/dist/cel-expression.d.ts +32 -0
  16. package/dist/cel-expression.d.ts.map +1 -0
  17. package/dist/cel-expression.js +29 -0
  18. package/dist/cel-map-value.d.ts +47 -0
  19. package/dist/cel-map-value.d.ts.map +1 -0
  20. package/dist/cel-map-value.js +85 -0
  21. package/dist/cel-program.d.ts +44 -0
  22. package/dist/cel-program.d.ts.map +1 -0
  23. package/dist/cel-program.js +72 -0
  24. package/dist/cel-type.d.ts +131 -0
  25. package/dist/cel-type.d.ts.map +1 -0
  26. package/dist/cel-type.js +293 -0
  27. package/dist/cel-value.d.ts +166 -0
  28. package/dist/cel-value.d.ts.map +1 -0
  29. package/dist/cel-value.js +225 -0
  30. package/dist/check-diagnostic.d.ts +54 -0
  31. package/dist/check-diagnostic.d.ts.map +1 -0
  32. package/dist/check-diagnostic.js +66 -0
  33. package/dist/checker.d.ts +86 -0
  34. package/dist/checker.d.ts.map +1 -0
  35. package/dist/checker.js +806 -0
  36. package/dist/closure-backend.d.ts +21 -0
  37. package/dist/closure-backend.d.ts.map +1 -0
  38. package/dist/closure-backend.js +487 -0
  39. package/dist/comprehension-bindings.d.ts +33 -0
  40. package/dist/comprehension-bindings.d.ts.map +1 -0
  41. package/dist/comprehension-bindings.js +50 -0
  42. package/dist/comprehension-runtime.d.ts +44 -0
  43. package/dist/comprehension-runtime.d.ts.map +1 -0
  44. package/dist/comprehension-runtime.js +137 -0
  45. package/dist/declared-chain.d.ts +35 -0
  46. package/dist/declared-chain.d.ts.map +1 -0
  47. package/dist/declared-chain.js +36 -0
  48. package/dist/duration-value.d.ts +70 -0
  49. package/dist/duration-value.d.ts.map +1 -0
  50. package/dist/duration-value.js +149 -0
  51. package/dist/emitted-module.d.ts +207 -0
  52. package/dist/emitted-module.d.ts.map +1 -0
  53. package/dist/emitted-module.js +359 -0
  54. package/dist/engine-version.d.ts +3 -0
  55. package/dist/engine-version.d.ts.map +1 -0
  56. package/dist/engine-version.js +8 -0
  57. package/dist/environment-digest.d.ts +44 -0
  58. package/dist/environment-digest.d.ts.map +1 -0
  59. package/dist/environment-digest.js +98 -0
  60. package/dist/environment.d.ts +291 -0
  61. package/dist/environment.d.ts.map +1 -0
  62. package/dist/environment.js +474 -0
  63. package/dist/function-catalog.d.ts +66 -0
  64. package/dist/function-catalog.d.ts.map +1 -0
  65. package/dist/function-catalog.js +77 -0
  66. package/dist/function-registry.d.ts +118 -0
  67. package/dist/function-registry.d.ts.map +1 -0
  68. package/dist/function-registry.js +292 -0
  69. package/dist/index.d.ts +93 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +65 -0
  72. package/dist/integer-arithmetic.d.ts +27 -0
  73. package/dist/integer-arithmetic.d.ts.map +1 -0
  74. package/dist/integer-arithmetic.js +58 -0
  75. package/dist/js-emitter.d.ts +133 -0
  76. package/dist/js-emitter.d.ts.map +1 -0
  77. package/dist/js-emitter.js +568 -0
  78. package/dist/json-schema-type.d.ts +182 -0
  79. package/dist/json-schema-type.d.ts.map +1 -0
  80. package/dist/json-schema-type.js +487 -0
  81. package/dist/json-text-scan.d.ts +28 -0
  82. package/dist/json-text-scan.d.ts.map +1 -0
  83. package/dist/json-text-scan.js +159 -0
  84. package/dist/lexer.d.ts +103 -0
  85. package/dist/lexer.d.ts.map +1 -0
  86. package/dist/lexer.js +458 -0
  87. package/dist/macro-check.d.ts +41 -0
  88. package/dist/macro-check.d.ts.map +1 -0
  89. package/dist/macro-check.js +162 -0
  90. package/dist/macro-shape.d.ts +24 -0
  91. package/dist/macro-shape.d.ts.map +1 -0
  92. package/dist/macro-shape.js +55 -0
  93. package/dist/member-read.d.ts +89 -0
  94. package/dist/member-read.d.ts.map +1 -0
  95. package/dist/member-read.js +166 -0
  96. package/dist/namespace-resolution.d.ts +35 -0
  97. package/dist/namespace-resolution.d.ts.map +1 -0
  98. package/dist/namespace-resolution.js +160 -0
  99. package/dist/nominal-type.d.ts +63 -0
  100. package/dist/nominal-type.d.ts.map +1 -0
  101. package/dist/nominal-type.js +98 -0
  102. package/dist/nullable-access.d.ts +38 -0
  103. package/dist/nullable-access.d.ts.map +1 -0
  104. package/dist/nullable-access.js +93 -0
  105. package/dist/parse-limits.d.ts +26 -0
  106. package/dist/parse-limits.d.ts.map +1 -0
  107. package/dist/parse-limits.js +21 -0
  108. package/dist/parser.d.ts +48 -0
  109. package/dist/parser.d.ts.map +1 -0
  110. package/dist/parser.js +503 -0
  111. package/dist/qualified-calls.d.ts +22 -0
  112. package/dist/qualified-calls.d.ts.map +1 -0
  113. package/dist/qualified-calls.js +27 -0
  114. package/dist/regular-expression.d.ts +48 -0
  115. package/dist/regular-expression.d.ts.map +1 -0
  116. package/dist/regular-expression.js +77 -0
  117. package/dist/reserved-words.d.ts +52 -0
  118. package/dist/reserved-words.d.ts.map +1 -0
  119. package/dist/reserved-words.js +77 -0
  120. package/dist/resolved-call.d.ts +46 -0
  121. package/dist/resolved-call.d.ts.map +1 -0
  122. package/dist/resolved-call.js +15 -0
  123. package/dist/root-references.d.ts +23 -0
  124. package/dist/root-references.d.ts.map +1 -0
  125. package/dist/root-references.js +120 -0
  126. package/dist/runtime-library.d.ts +67 -0
  127. package/dist/runtime-library.d.ts.map +1 -0
  128. package/dist/runtime-library.js +554 -0
  129. package/dist/serializer.d.ts +24 -0
  130. package/dist/serializer.d.ts.map +1 -0
  131. package/dist/serializer.js +256 -0
  132. package/dist/sha256.d.ts +20 -0
  133. package/dist/sha256.d.ts.map +1 -0
  134. package/dist/sha256.js +103 -0
  135. package/dist/signature.d.ts +72 -0
  136. package/dist/signature.d.ts.map +1 -0
  137. package/dist/signature.js +61 -0
  138. package/dist/signatures/function-catalog.json +788 -0
  139. package/dist/signatures/standard-library.json +229 -0
  140. package/dist/standard-library.d.ts +41 -0
  141. package/dist/standard-library.d.ts.map +1 -0
  142. package/dist/standard-library.js +85 -0
  143. package/dist/syntax-diagnostic.d.ts +61 -0
  144. package/dist/syntax-diagnostic.d.ts.map +1 -0
  145. package/dist/syntax-diagnostic.js +28 -0
  146. package/dist/syntax-tree.d.ts +160 -0
  147. package/dist/syntax-tree.d.ts.map +1 -0
  148. package/dist/syntax-tree.js +58 -0
  149. package/dist/timestamp-value.d.ts +62 -0
  150. package/dist/timestamp-value.d.ts.map +1 -0
  151. package/dist/timestamp-value.js +238 -0
  152. package/dist/tree-equality.d.ts +15 -0
  153. package/dist/tree-equality.d.ts.map +1 -0
  154. package/dist/tree-equality.js +105 -0
  155. package/dist/type-expression.d.ts +42 -0
  156. package/dist/type-expression.d.ts.map +1 -0
  157. package/dist/type-expression.js +154 -0
  158. package/dist/value-equality.d.ts +38 -0
  159. package/dist/value-equality.d.ts.map +1 -0
  160. package/dist/value-equality.js +196 -0
  161. package/dist/value-text.d.ts +25 -0
  162. package/dist/value-text.d.ts.map +1 -0
  163. package/dist/value-text.js +44 -0
  164. package/dist/zoned-calendar.d.ts +61 -0
  165. package/dist/zoned-calendar.d.ts.map +1 -0
  166. package/dist/zoned-calendar.js +143 -0
  167. package/package.json +56 -3
  168. package/src/activation.ts +32 -0
  169. package/src/backend-runtime.ts +604 -0
  170. package/src/bounded-cache.ts +45 -0
  171. package/src/catalog-runtime.ts +921 -0
  172. package/src/cel-expression.ts +53 -0
  173. package/src/cel-map-value.ts +97 -0
  174. package/src/cel-program.ts +103 -0
  175. package/src/cel-type.ts +359 -0
  176. package/src/cel-value.ts +361 -0
  177. package/src/check-diagnostic.ts +104 -0
  178. package/src/checker.ts +1045 -0
  179. package/src/closure-backend.ts +547 -0
  180. package/src/comprehension-bindings.ts +66 -0
  181. package/src/comprehension-runtime.ts +157 -0
  182. package/src/declared-chain.ts +45 -0
  183. package/src/duration-value.ts +160 -0
  184. package/src/emitted-module.ts +494 -0
  185. package/src/engine-version.ts +9 -0
  186. package/src/environment-digest.ts +111 -0
  187. package/src/environment.ts +761 -0
  188. package/src/function-catalog.ts +140 -0
  189. package/src/function-registry.ts +341 -0
  190. package/src/index.ts +407 -0
  191. package/src/integer-arithmetic.ts +64 -0
  192. package/src/js-emitter.ts +721 -0
  193. package/src/json-schema-type.ts +664 -0
  194. package/src/json-text-scan.ts +163 -0
  195. package/src/lexer.ts +562 -0
  196. package/src/macro-check.ts +197 -0
  197. package/src/macro-shape.ts +66 -0
  198. package/src/member-read.ts +167 -0
  199. package/src/namespace-resolution.ts +167 -0
  200. package/src/nominal-type.ts +149 -0
  201. package/src/nullable-access.ts +95 -0
  202. package/src/parse-limits.ts +36 -0
  203. package/src/parser.ts +554 -0
  204. package/src/qualified-calls.ts +39 -0
  205. package/src/regular-expression.ts +101 -0
  206. package/src/reserved-words.ts +94 -0
  207. package/src/resolved-call.ts +47 -0
  208. package/src/root-references.ts +126 -0
  209. package/src/runtime-library.ts +639 -0
  210. package/src/serializer.ts +262 -0
  211. package/src/sha256.ts +112 -0
  212. package/src/signature.ts +127 -0
  213. package/src/signatures/function-catalog.json +788 -0
  214. package/src/signatures/standard-library.json +235 -0
  215. package/src/standard-library.ts +149 -0
  216. package/src/syntax-diagnostic.ts +72 -0
  217. package/src/syntax-tree.ts +229 -0
  218. package/src/timestamp-value.ts +310 -0
  219. package/src/tree-equality.ts +130 -0
  220. package/src/type-expression.ts +182 -0
  221. package/src/value-equality.ts +201 -0
  222. package/src/value-text.ts +45 -0
  223. package/src/zoned-calendar.ts +178 -0
@@ -0,0 +1,788 @@
1
+ {
2
+ "generation": 1,
3
+ "description": "The function catalog this engine registers beside CEL's own library: the dialect a manifest is written in. One entry per function, with every signature it registers, the category and the summary a listing prints, and the two flags a consumer reads - whether two calls with the same arguments answer the same thing, and whether the implementation is the host's.",
4
+ "spec": false,
5
+ "reason": "Not one function here is defined by cel-spec, and that is what a dialect IS rather than an omission: cel-spec defines the standard library (signatures/standard-library.json) and everything in this file is declared beside it. The declaration is made once for the whole file, because repeating it on 67 entries would say nothing a reader of the file does not already know - and a port reading this data inherits none of it as CEL.",
6
+ "categories": [
7
+ "collection",
8
+ "encoding",
9
+ "formatting",
10
+ "hashing",
11
+ "json",
12
+ "math",
13
+ "null",
14
+ "string",
15
+ "time",
16
+ "uuid"
17
+ ],
18
+ "functions": [
19
+ {
20
+ "name": "join",
21
+ "signature": "join(list, string): string",
22
+ "signatures": [
23
+ "join(list, string): string"
24
+ ],
25
+ "category": "collection",
26
+ "summary": "Join list elements into a string with a separator.",
27
+ "deterministic": true,
28
+ "hostBacked": false
29
+ },
30
+ {
31
+ "name": "keys",
32
+ "signature": "keys(map): list",
33
+ "signatures": [
34
+ "keys(map): list"
35
+ ],
36
+ "category": "collection",
37
+ "summary": "List a map's keys.",
38
+ "deterministic": true,
39
+ "hostBacked": false
40
+ },
41
+ {
42
+ "name": "values",
43
+ "signature": "values(map): list",
44
+ "signatures": [
45
+ "values(map): list"
46
+ ],
47
+ "category": "collection",
48
+ "summary": "List a map's values.",
49
+ "deterministic": true,
50
+ "hostBacked": false
51
+ },
52
+ {
53
+ "name": "distinct",
54
+ "signature": "distinct(list): list",
55
+ "signatures": [
56
+ "distinct(list): list"
57
+ ],
58
+ "category": "collection",
59
+ "summary": "Remove duplicate elements, preserving order.",
60
+ "deterministic": true,
61
+ "hostBacked": false
62
+ },
63
+ {
64
+ "name": "reverse",
65
+ "signature": "reverse(list): list",
66
+ "signatures": [
67
+ "reverse(list): list"
68
+ ],
69
+ "category": "collection",
70
+ "summary": "Reverse a list (copy; never mutates the input).",
71
+ "deterministic": true,
72
+ "hostBacked": false
73
+ },
74
+ {
75
+ "name": "flatten",
76
+ "signature": "flatten(list): list",
77
+ "signatures": [
78
+ "flatten(list): list"
79
+ ],
80
+ "category": "collection",
81
+ "summary": "Flatten one level of nested lists.",
82
+ "deterministic": true,
83
+ "hostBacked": false
84
+ },
85
+ {
86
+ "name": "sort",
87
+ "signature": "sort(list): list",
88
+ "signatures": [
89
+ "sort(list): list"
90
+ ],
91
+ "category": "collection",
92
+ "summary": "Sort a list numerically (numbers) or lexicographically; copy.",
93
+ "deterministic": true,
94
+ "hostBacked": false
95
+ },
96
+ {
97
+ "name": "range",
98
+ "signature": "range(int): list<int>",
99
+ "signatures": [
100
+ "range(int): list<int>"
101
+ ],
102
+ "category": "collection",
103
+ "summary": "Integers [0, n-1] (empty for n <= 0); materializes indices for an unknown-length list.",
104
+ "deterministic": true,
105
+ "hostBacked": false
106
+ },
107
+ {
108
+ "name": "enumerate",
109
+ "signature": "enumerate(list): list",
110
+ "signatures": [
111
+ "enumerate(list): list"
112
+ ],
113
+ "category": "collection",
114
+ "summary": "Pair each element with its zero-based position as {index, value}.",
115
+ "deterministic": true,
116
+ "hostBacked": false
117
+ },
118
+ {
119
+ "name": "lower",
120
+ "signature": "lower(string): string",
121
+ "signatures": [
122
+ "lower(string): string"
123
+ ],
124
+ "category": "string",
125
+ "summary": "Lowercase a string.",
126
+ "deterministic": true,
127
+ "hostBacked": false
128
+ },
129
+ {
130
+ "name": "upper",
131
+ "signature": "upper(string): string",
132
+ "signatures": [
133
+ "upper(string): string"
134
+ ],
135
+ "category": "string",
136
+ "summary": "Uppercase a string.",
137
+ "deterministic": true,
138
+ "hostBacked": false
139
+ },
140
+ {
141
+ "name": "trim",
142
+ "signature": "trim(string): string",
143
+ "signatures": [
144
+ "trim(string): string"
145
+ ],
146
+ "category": "string",
147
+ "summary": "Strip leading/trailing whitespace.",
148
+ "deterministic": true,
149
+ "hostBacked": false
150
+ },
151
+ {
152
+ "name": "replace",
153
+ "signature": "replace(string, string, string): string",
154
+ "signatures": [
155
+ "replace(string, string, string): string"
156
+ ],
157
+ "category": "string",
158
+ "summary": "Replace all occurrences of a substring.",
159
+ "deterministic": true,
160
+ "hostBacked": false
161
+ },
162
+ {
163
+ "name": "split",
164
+ "signature": "split(string, string): list",
165
+ "signatures": [
166
+ "split(string, string): list"
167
+ ],
168
+ "category": "string",
169
+ "summary": "Split a string on a separator into a list.",
170
+ "deterministic": true,
171
+ "hostBacked": false
172
+ },
173
+ {
174
+ "name": "regexReplace",
175
+ "signature": "regexReplace(string, string, string, string?): string",
176
+ "signatures": [
177
+ "regexReplace(string, string, string): string",
178
+ "regexReplace(string, string, string, string): string"
179
+ ],
180
+ "category": "string",
181
+ "summary": "Replace every regex match (RE2 syntax) with a replacement ($1 backrefs); flags like 'i', 'm', 's'.",
182
+ "deterministic": true,
183
+ "hostBacked": false,
184
+ "checksLiteralArguments": true
185
+ },
186
+ {
187
+ "name": "regexExtract",
188
+ "signature": "regexExtract(string, string, string?): string",
189
+ "signatures": [
190
+ "regexExtract(string, string): string",
191
+ "regexExtract(string, string, string): string"
192
+ ],
193
+ "category": "string",
194
+ "summary": "First whole match of a regex (RE2 syntax), or '' when there is none.",
195
+ "deterministic": true,
196
+ "hostBacked": false,
197
+ "checksLiteralArguments": true
198
+ },
199
+ {
200
+ "name": "regexExtractAll",
201
+ "signature": "regexExtractAll(string, string, string?): list<string>",
202
+ "signatures": [
203
+ "regexExtractAll(string, string): list<string>",
204
+ "regexExtractAll(string, string, string): list<string>"
205
+ ],
206
+ "category": "string",
207
+ "summary": "Every whole match of a regex (RE2 syntax), in order.",
208
+ "deterministic": true,
209
+ "hostBacked": false,
210
+ "checksLiteralArguments": true
211
+ },
212
+ {
213
+ "name": "regexGroups",
214
+ "signature": "regexGroups(string, string, string?): list<string>",
215
+ "signatures": [
216
+ "regexGroups(string, string): list<string>",
217
+ "regexGroups(string, string, string): list<string>"
218
+ ],
219
+ "category": "string",
220
+ "summary": "Capture groups of the first regex match (RE2 syntax); empty list when there is no match.",
221
+ "deterministic": true,
222
+ "hostBacked": false,
223
+ "checksLiteralArguments": true
224
+ },
225
+ {
226
+ "name": "trimPrefix",
227
+ "signature": "trimPrefix(string, string): string",
228
+ "signatures": [
229
+ "trimPrefix(string, string): string"
230
+ ],
231
+ "category": "string",
232
+ "summary": "Strip a leading prefix if present.",
233
+ "deterministic": true,
234
+ "hostBacked": false
235
+ },
236
+ {
237
+ "name": "trimSuffix",
238
+ "signature": "trimSuffix(string, string): string",
239
+ "signatures": [
240
+ "trimSuffix(string, string): string"
241
+ ],
242
+ "category": "string",
243
+ "summary": "Strip a trailing suffix if present.",
244
+ "deterministic": true,
245
+ "hostBacked": false
246
+ },
247
+ {
248
+ "name": "slice",
249
+ "signature": "slice(dyn, int, int): dyn",
250
+ "signatures": [
251
+ "slice(bytes, int, int): dyn",
252
+ "slice(string, int, int): dyn",
253
+ "slice(list, int, int): dyn"
254
+ ],
255
+ "category": "collection",
256
+ "summary": "Take the half-open range [start, end) of a string, bytes or list.",
257
+ "deterministic": true,
258
+ "hostBacked": false
259
+ },
260
+ {
261
+ "name": "abs",
262
+ "signature": "abs(dyn): double",
263
+ "signatures": [
264
+ "abs(dyn): double"
265
+ ],
266
+ "category": "math",
267
+ "summary": "Absolute value.",
268
+ "deterministic": true,
269
+ "hostBacked": false
270
+ },
271
+ {
272
+ "name": "floor",
273
+ "signature": "floor(dyn): double",
274
+ "signatures": [
275
+ "floor(dyn): double"
276
+ ],
277
+ "category": "math",
278
+ "summary": "Round down to an integer.",
279
+ "deterministic": true,
280
+ "hostBacked": false
281
+ },
282
+ {
283
+ "name": "ceil",
284
+ "signature": "ceil(dyn): double",
285
+ "signatures": [
286
+ "ceil(dyn): double"
287
+ ],
288
+ "category": "math",
289
+ "summary": "Round up to an integer.",
290
+ "deterministic": true,
291
+ "hostBacked": false
292
+ },
293
+ {
294
+ "name": "round",
295
+ "signature": "round(dyn, int?): double",
296
+ "signatures": [
297
+ "round(double): double",
298
+ "round(int): double",
299
+ "round(double, int): double",
300
+ "round(int, int): double"
301
+ ],
302
+ "category": "math",
303
+ "summary": "Round to the nearest integer, or to the given number of decimal places (0–10). The two-argument form shares the formatter's rounding rule, so a rounded value and the cell rendered beside it agree at the boundary. An integer past 2^53 is refused rather than rounded to a neighbour.",
304
+ "deterministic": true,
305
+ "hostBacked": false,
306
+ "checksLiteralArguments": true
307
+ },
308
+ {
309
+ "name": "min",
310
+ "signature": "min(list): dyn",
311
+ "signatures": [
312
+ "min(list): dyn"
313
+ ],
314
+ "category": "math",
315
+ "summary": "Smallest element (by numeric value); null for an empty list.",
316
+ "deterministic": true,
317
+ "hostBacked": false
318
+ },
319
+ {
320
+ "name": "max",
321
+ "signature": "max(list): dyn",
322
+ "signatures": [
323
+ "max(list): dyn"
324
+ ],
325
+ "category": "math",
326
+ "summary": "Largest element (by numeric value); null for an empty list.",
327
+ "deterministic": true,
328
+ "hostBacked": false
329
+ },
330
+ {
331
+ "name": "sum",
332
+ "signature": "sum(list): double",
333
+ "signatures": [
334
+ "sum(list): double"
335
+ ],
336
+ "category": "math",
337
+ "summary": "Sum of a list's numeric elements; 0 for an empty list.",
338
+ "deterministic": true,
339
+ "hostBacked": false
340
+ },
341
+ {
342
+ "name": "avg",
343
+ "signature": "avg(list): dyn",
344
+ "signatures": [
345
+ "avg(list): dyn"
346
+ ],
347
+ "category": "math",
348
+ "summary": "Arithmetic mean of a list's numeric elements; null for an empty list.",
349
+ "deterministic": true,
350
+ "hostBacked": false
351
+ },
352
+ {
353
+ "name": "json",
354
+ "signature": "json(dyn): string",
355
+ "signatures": [
356
+ "json(dyn): string"
357
+ ],
358
+ "category": "json",
359
+ "summary": "Serialize any value to a JSON string.",
360
+ "deterministic": true,
361
+ "hostBacked": true
362
+ },
363
+ {
364
+ "name": "parseJson",
365
+ "signature": "parseJson(string): dyn",
366
+ "signatures": [
367
+ "parseJson(string): dyn"
368
+ ],
369
+ "category": "json",
370
+ "summary": "Parse a JSON string into a value (numbers come back as doubles).",
371
+ "deterministic": true,
372
+ "hostBacked": false
373
+ },
374
+ {
375
+ "name": "joinPath",
376
+ "signature": "string.joinPath(string): string",
377
+ "signatures": [
378
+ "string.joinPath(string): string"
379
+ ],
380
+ "category": "string",
381
+ "summary": "Join a relative path onto a path with the host's separator (`\\` on Windows). On a host path it yields a host path; an absolute argument is refused.",
382
+ "deterministic": true,
383
+ "hostBacked": true
384
+ },
385
+ {
386
+ "name": "base64Encode",
387
+ "signature": "base64Encode(string): string",
388
+ "signatures": [
389
+ "base64Encode(string): string"
390
+ ],
391
+ "category": "encoding",
392
+ "summary": "Encode a UTF-8 string as base64.",
393
+ "deterministic": true,
394
+ "hostBacked": true
395
+ },
396
+ {
397
+ "name": "base64Decode",
398
+ "signature": "base64Decode(string): string",
399
+ "signatures": [
400
+ "base64Decode(string): string"
401
+ ],
402
+ "category": "encoding",
403
+ "summary": "Decode a base64 string to UTF-8.",
404
+ "deterministic": true,
405
+ "hostBacked": true
406
+ },
407
+ {
408
+ "name": "bytesFromBase64",
409
+ "signature": "bytesFromBase64(string): bytes",
410
+ "signatures": [
411
+ "bytesFromBase64(string): bytes"
412
+ ],
413
+ "category": "encoding",
414
+ "summary": "Decode a base64 string to raw bytes.",
415
+ "deterministic": true,
416
+ "hostBacked": false
417
+ },
418
+ {
419
+ "name": "bytesToBase64",
420
+ "signature": "bytesToBase64(bytes): string",
421
+ "signatures": [
422
+ "bytesToBase64(bytes): string"
423
+ ],
424
+ "category": "encoding",
425
+ "summary": "Encode raw bytes as a base64 string.",
426
+ "deterministic": true,
427
+ "hostBacked": false
428
+ },
429
+ {
430
+ "name": "urlEncode",
431
+ "signature": "urlEncode(string): string",
432
+ "signatures": [
433
+ "urlEncode(string): string"
434
+ ],
435
+ "category": "encoding",
436
+ "summary": "Percent-encode a URI component.",
437
+ "deterministic": true,
438
+ "hostBacked": false
439
+ },
440
+ {
441
+ "name": "urlDecode",
442
+ "signature": "urlDecode(string): string",
443
+ "signatures": [
444
+ "urlDecode(string): string"
445
+ ],
446
+ "category": "encoding",
447
+ "summary": "Decode a percent-encoded URI component.",
448
+ "deterministic": true,
449
+ "hostBacked": false
450
+ },
451
+ {
452
+ "name": "sha256",
453
+ "signature": "sha256(string): string",
454
+ "signatures": [
455
+ "sha256(string): string"
456
+ ],
457
+ "category": "hashing",
458
+ "summary": "SHA-256 hash, hex-encoded.",
459
+ "deterministic": true,
460
+ "hostBacked": true
461
+ },
462
+ {
463
+ "name": "md5",
464
+ "signature": "md5(string): string",
465
+ "signatures": [
466
+ "md5(string): string"
467
+ ],
468
+ "category": "hashing",
469
+ "summary": "MD5 hash, hex-encoded.",
470
+ "deterministic": true,
471
+ "hostBacked": true
472
+ },
473
+ {
474
+ "name": "sha1",
475
+ "signature": "sha1(string): string",
476
+ "signatures": [
477
+ "sha1(string): string"
478
+ ],
479
+ "category": "hashing",
480
+ "summary": "SHA-1 hash, hex-encoded.",
481
+ "deterministic": true,
482
+ "hostBacked": true
483
+ },
484
+ {
485
+ "name": "sha512",
486
+ "signature": "sha512(string): string",
487
+ "signatures": [
488
+ "sha512(string): string"
489
+ ],
490
+ "category": "hashing",
491
+ "summary": "SHA-512 hash, hex-encoded.",
492
+ "deterministic": true,
493
+ "hostBacked": true
494
+ },
495
+ {
496
+ "name": "hmac",
497
+ "signature": "hmac(string, string, string): string",
498
+ "signatures": [
499
+ "hmac(string, string, string): string"
500
+ ],
501
+ "category": "hashing",
502
+ "summary": "HMAC of message under key for an algorithm (e.g. 'sha256'), hex.",
503
+ "deterministic": true,
504
+ "hostBacked": true
505
+ },
506
+ {
507
+ "name": "default",
508
+ "signature": "default(dyn, dyn): dyn",
509
+ "signatures": [
510
+ "default(dyn, dyn): dyn"
511
+ ],
512
+ "category": "null",
513
+ "summary": "Return the value, or the fallback when it is null.",
514
+ "deterministic": true,
515
+ "hostBacked": false
516
+ },
517
+ {
518
+ "name": "coalesce",
519
+ "signature": "coalesce(list): dyn",
520
+ "signatures": [
521
+ "coalesce(list): dyn"
522
+ ],
523
+ "category": "null",
524
+ "summary": "First non-null element of a list, or null.",
525
+ "deterministic": true,
526
+ "hostBacked": false
527
+ },
528
+ {
529
+ "name": "now",
530
+ "signature": "now(): timestamp",
531
+ "signatures": [
532
+ "now(): google.protobuf.Timestamp"
533
+ ],
534
+ "category": "time",
535
+ "summary": "Current instant as a native timestamp, for comparison and duration arithmetic.",
536
+ "deterministic": false,
537
+ "hostBacked": false
538
+ },
539
+ {
540
+ "name": "nowIso",
541
+ "signature": "nowIso(string?): string",
542
+ "signatures": [
543
+ "nowIso(): string",
544
+ "nowIso(string): string"
545
+ ],
546
+ "category": "time",
547
+ "summary": "Current time as ISO-8601; UTC by default, or in the given IANA timezone.",
548
+ "deterministic": false,
549
+ "hostBacked": false
550
+ },
551
+ {
552
+ "name": "today",
553
+ "signature": "today(string?): string",
554
+ "signatures": [
555
+ "today(): string",
556
+ "today(string): string"
557
+ ],
558
+ "category": "time",
559
+ "summary": "Current calendar date (YYYY-MM-DD); UTC by default, or in the given IANA timezone.",
560
+ "deterministic": false,
561
+ "hostBacked": false
562
+ },
563
+ {
564
+ "name": "nowMillis",
565
+ "signature": "nowMillis(): int",
566
+ "signatures": [
567
+ "nowMillis(): int"
568
+ ],
569
+ "category": "time",
570
+ "summary": "Current time as epoch milliseconds (absolute; timezone-independent).",
571
+ "deterministic": false,
572
+ "hostBacked": false
573
+ },
574
+ {
575
+ "name": "nowSeconds",
576
+ "signature": "nowSeconds(): int",
577
+ "signatures": [
578
+ "nowSeconds(): int"
579
+ ],
580
+ "category": "time",
581
+ "summary": "Current time as epoch seconds (absolute; timezone-independent).",
582
+ "deterministic": false,
583
+ "hostBacked": false
584
+ },
585
+ {
586
+ "name": "format",
587
+ "signature": "format(dyn, string): string",
588
+ "signatures": [
589
+ "format(double, string): string",
590
+ "format(int, string): string"
591
+ ],
592
+ "category": "formatting",
593
+ "summary": "Format a number with a d3-format specifier (`.2f`, `,.2f`, `.1%`, `.2s`).",
594
+ "deterministic": true,
595
+ "hostBacked": false,
596
+ "checksLiteralArguments": true
597
+ },
598
+ {
599
+ "name": "fixed",
600
+ "signature": "fixed(dyn, int): string",
601
+ "signatures": [
602
+ "fixed(double, int): string",
603
+ "fixed(int, int): string"
604
+ ],
605
+ "category": "formatting",
606
+ "summary": "Fixed-decimal string with the given number of places (0–10).",
607
+ "deterministic": true,
608
+ "hostBacked": false,
609
+ "checksLiteralArguments": true
610
+ },
611
+ {
612
+ "name": "formatDuration",
613
+ "signature": "formatDuration(dyn, int): string",
614
+ "signatures": [
615
+ "formatDuration(double, int): string",
616
+ "formatDuration(int, int): string"
617
+ ],
618
+ "category": "formatting",
619
+ "summary": "Render a minute count against a declared day length: `formatDuration(510, 480)` is `1d 30m`. The day length is an argument because it is a policy, not arithmetic. The result is a rendering for a reader, not a duration literal — its `d` is the declared day, so it must not be fed back into a field that parses a duration.",
620
+ "deterministic": true,
621
+ "hostBacked": false,
622
+ "checksLiteralArguments": true
623
+ },
624
+ {
625
+ "name": "dateIn",
626
+ "signature": "dateIn(timestamp, string?): string",
627
+ "signatures": [
628
+ "dateIn(google.protobuf.Timestamp): string",
629
+ "dateIn(google.protobuf.Timestamp, string): string"
630
+ ],
631
+ "category": "time",
632
+ "summary": "Calendar date (`YYYY-MM-DD`) of an instant, in an IANA zone (UTC by default).",
633
+ "deterministic": true,
634
+ "hostBacked": false,
635
+ "checksLiteralArguments": true
636
+ },
637
+ {
638
+ "name": "isoIn",
639
+ "signature": "isoIn(timestamp, string?): string",
640
+ "signatures": [
641
+ "isoIn(google.protobuf.Timestamp): string",
642
+ "isoIn(google.protobuf.Timestamp, string): string"
643
+ ],
644
+ "category": "time",
645
+ "summary": "ISO-8601 rendering of an instant, in an IANA zone (UTC by default).",
646
+ "deterministic": true,
647
+ "hostBacked": false,
648
+ "checksLiteralArguments": true
649
+ },
650
+ {
651
+ "name": "startOfMonth",
652
+ "signature": "startOfMonth(timestamp, string?): timestamp",
653
+ "signatures": [
654
+ "startOfMonth(google.protobuf.Timestamp): google.protobuf.Timestamp",
655
+ "startOfMonth(google.protobuf.Timestamp, string): google.protobuf.Timestamp"
656
+ ],
657
+ "category": "time",
658
+ "summary": "Midnight on the 1st of the instant's month, in an IANA zone (UTC by default).",
659
+ "deterministic": true,
660
+ "hostBacked": false,
661
+ "checksLiteralArguments": true
662
+ },
663
+ {
664
+ "name": "addMonths",
665
+ "signature": "addMonths(timestamp, int, string?): timestamp",
666
+ "signatures": [
667
+ "addMonths(google.protobuf.Timestamp, int): google.protobuf.Timestamp",
668
+ "addMonths(google.protobuf.Timestamp, int, string): google.protobuf.Timestamp"
669
+ ],
670
+ "category": "time",
671
+ "summary": "Shift an instant by whole months in an IANA zone, clamping the day of month (Jan 31 + 1 month is Feb 28).",
672
+ "deterministic": true,
673
+ "hostBacked": false,
674
+ "checksLiteralArguments": true
675
+ },
676
+ {
677
+ "name": "compact",
678
+ "signature": "compact(dyn): dyn",
679
+ "signatures": [
680
+ "compact(list): list",
681
+ "compact(map): map"
682
+ ],
683
+ "category": "collection",
684
+ "summary": "Drop entries whose value is null or the empty string, from a map or a list.",
685
+ "deterministic": true,
686
+ "hostBacked": false
687
+ },
688
+ {
689
+ "name": "merge",
690
+ "signature": "merge(map, map): map",
691
+ "signatures": [
692
+ "merge(map, map): map"
693
+ ],
694
+ "category": "collection",
695
+ "summary": "Combine two maps, with the right-hand map winning on a shared key. Use it to add to a map rather than replace it — `merge(defaults, overrides)`.",
696
+ "deterministic": true,
697
+ "hostBacked": false
698
+ },
699
+ {
700
+ "name": "uuidv1",
701
+ "signature": "uuidv1(): string",
702
+ "signatures": [
703
+ "uuidv1(): string"
704
+ ],
705
+ "category": "uuid",
706
+ "summary": "Time-based UUID (v1).",
707
+ "deterministic": false,
708
+ "hostBacked": false
709
+ },
710
+ {
711
+ "name": "uuidv4",
712
+ "signature": "uuidv4(): string",
713
+ "signatures": [
714
+ "uuidv4(): string"
715
+ ],
716
+ "category": "uuid",
717
+ "summary": "Random UUID (v4).",
718
+ "deterministic": false,
719
+ "hostBacked": false
720
+ },
721
+ {
722
+ "name": "uuidv6",
723
+ "signature": "uuidv6(): string",
724
+ "signatures": [
725
+ "uuidv6(): string"
726
+ ],
727
+ "category": "uuid",
728
+ "summary": "Time-ordered UUID (v6).",
729
+ "deterministic": false,
730
+ "hostBacked": false
731
+ },
732
+ {
733
+ "name": "uuidv7",
734
+ "signature": "uuidv7(): string",
735
+ "signatures": [
736
+ "uuidv7(): string"
737
+ ],
738
+ "category": "uuid",
739
+ "summary": "Time-ordered UUID (v7).",
740
+ "deterministic": false,
741
+ "hostBacked": false
742
+ },
743
+ {
744
+ "name": "uuidv3",
745
+ "signature": "uuidv3(string, string): string",
746
+ "signatures": [
747
+ "uuidv3(string, string): string"
748
+ ],
749
+ "category": "uuid",
750
+ "summary": "Name-based UUID (v3, MD5) under a namespace UUID.",
751
+ "deterministic": true,
752
+ "hostBacked": false
753
+ },
754
+ {
755
+ "name": "uuidv5",
756
+ "signature": "uuidv5(string, string): string",
757
+ "signatures": [
758
+ "uuidv5(string, string): string"
759
+ ],
760
+ "category": "uuid",
761
+ "summary": "Name-based UUID (v5, SHA-1) under a namespace UUID.",
762
+ "deterministic": true,
763
+ "hostBacked": false
764
+ },
765
+ {
766
+ "name": "uuidValidate",
767
+ "signature": "uuidValidate(string): bool",
768
+ "signatures": [
769
+ "uuidValidate(string): bool"
770
+ ],
771
+ "category": "uuid",
772
+ "summary": "True if the string is a valid UUID.",
773
+ "deterministic": true,
774
+ "hostBacked": false
775
+ },
776
+ {
777
+ "name": "uuidVersion",
778
+ "signature": "uuidVersion(string): int",
779
+ "signatures": [
780
+ "uuidVersion(string): int"
781
+ ],
782
+ "category": "uuid",
783
+ "summary": "The version number of a UUID.",
784
+ "deterministic": true,
785
+ "hostBacked": false
786
+ }
787
+ ]
788
+ }