@mochabug/adapt-sdk 0.3.11 → 0.4.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/dist/anthropic/index.d.ts +53 -0
- package/dist/anthropic/index.d.ts.map +1 -0
- package/dist/cel/index.d.ts +2 -2
- package/dist/cel/index.d.ts.map +1 -1
- package/dist/cjs/anthropic.cjs +2 -0
- package/dist/cjs/anthropic.cjs.map +7 -0
- package/dist/cjs/cel.cjs +3 -3
- package/dist/cjs/cel.cjs.map +2 -2
- package/dist/cjs/gemini.cjs +2 -0
- package/dist/cjs/gemini.cjs.map +7 -0
- package/dist/cjs/openai.cjs +2 -0
- package/dist/cjs/openai.cjs.map +7 -0
- package/dist/cjs/signals.cjs +1 -1
- package/dist/cjs/signals.cjs.map +3 -3
- package/dist/esm/anthropic.mjs +2 -0
- package/dist/esm/anthropic.mjs.map +7 -0
- package/dist/esm/cel.mjs +3 -3
- package/dist/esm/cel.mjs.map +3 -3
- package/dist/esm/gemini.mjs +2 -0
- package/dist/esm/gemini.mjs.map +7 -0
- package/dist/esm/openai.mjs +2 -0
- package/dist/esm/openai.mjs.map +7 -0
- package/dist/esm/signals.mjs +1 -1
- package/dist/esm/signals.mjs.map +3 -3
- package/dist/gemini/index.d.ts +52 -0
- package/dist/gemini/index.d.ts.map +1 -0
- package/dist/openai/index.d.ts +55 -0
- package/dist/openai/index.d.ts.map +1 -0
- package/dist/signals/index.d.ts +3 -110
- package/dist/signals/index.d.ts.map +1 -1
- package/package.json +19 -3
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { JTDSchemaJson, SignalDescriptorJson } from '../api';
|
|
2
|
+
/** JSON Schema subset supported by Anthropic structured output. */
|
|
3
|
+
export interface AnthropicSchema {
|
|
4
|
+
type?: string | string[];
|
|
5
|
+
description?: string;
|
|
6
|
+
properties?: Record<string, AnthropicSchema>;
|
|
7
|
+
required?: string[];
|
|
8
|
+
additionalProperties?: false;
|
|
9
|
+
enum?: (string | number | boolean | null)[];
|
|
10
|
+
const?: string | number | boolean | null;
|
|
11
|
+
format?: string;
|
|
12
|
+
items?: AnthropicSchema;
|
|
13
|
+
anyOf?: AnthropicSchema[];
|
|
14
|
+
$defs?: Record<string, AnthropicSchema>;
|
|
15
|
+
$ref?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ConvertSuccess {
|
|
18
|
+
success: true;
|
|
19
|
+
data: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface ConvertFailure {
|
|
22
|
+
success: false;
|
|
23
|
+
errors: string[];
|
|
24
|
+
}
|
|
25
|
+
export type ConvertResult = ConvertSuccess | ConvertFailure;
|
|
26
|
+
export interface AnthropicConversionResult {
|
|
27
|
+
/** Anthropic structured output compatible JSON Schema. */
|
|
28
|
+
schema: AnthropicSchema;
|
|
29
|
+
/** Whether the schema supports strict mode. False for unstructured (empty) schemas. */
|
|
30
|
+
strict: boolean;
|
|
31
|
+
/** Convert Anthropic JSON output back to JTD-conforming JSON. */
|
|
32
|
+
convert: (anthropicJson: unknown) => ConvertResult;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Convert a JTD schema to an Anthropic structured output compatible JSON Schema,
|
|
36
|
+
* with a converter function that transforms and validates Anthropic output against
|
|
37
|
+
* the original JTD schema.
|
|
38
|
+
*
|
|
39
|
+
* @throws {Error} if the JTD schema contains recursive definitions (not supported by Anthropic).
|
|
40
|
+
* @throws {Error} if the JTD schema contains unresolved refs.
|
|
41
|
+
*/
|
|
42
|
+
export declare function convertToAnthropicSchema(jtdSchema: JTDSchemaJson): AnthropicConversionResult;
|
|
43
|
+
/**
|
|
44
|
+
* Convert a SignalDescriptorJson to an Anthropic structured output compatible JSON Schema.
|
|
45
|
+
*
|
|
46
|
+
* Handles single and multi-format signals:
|
|
47
|
+
* - Single format: schema is the converted format directly.
|
|
48
|
+
* - Multiple formats: wrapper object with genuinely optional `format_0`, `format_1`, etc.
|
|
49
|
+
*
|
|
50
|
+
* @throws {Error} if the descriptor has no formats.
|
|
51
|
+
*/
|
|
52
|
+
export declare function convertSignalToAnthropicSchema(descriptor: SignalDescriptorJson): AnthropicConversionResult;
|
|
53
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/anthropic/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EAErB,MAAM,QAAQ,CAAC;AAOhB,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,CAAC,EAAE,KAAK,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;AAE5D,MAAM,WAAW,yBAAyB;IACxC,0DAA0D;IAC1D,MAAM,EAAE,eAAe,CAAC;IACxB,uFAAuF;IACvF,MAAM,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,OAAO,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,aAAa,CAAC;CACpD;AA+lBD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,aAAa,GACvB,yBAAyB,CA+C3B;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,oBAAoB,GAC/B,yBAAyB,CA8F3B"}
|
package/dist/cel/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { celFunc, celMethod, run as celRun, CelScalar, isCelError, isCelList, isCelMap, isCelUint, listType, objectType, type CelFunc as CelFuncType, type CelInput, type CelValue } from '@bufbuild/cel';
|
|
2
2
|
import { strings as stringsExt } from '@bufbuild/cel/ext';
|
|
3
|
-
import { timestampFromDate, timestampNow, TimestampSchema } from '@bufbuild/protobuf/wkt';
|
|
3
|
+
import { timestampDate, timestampFromDate, timestampMs, timestampNow, TimestampSchema } from '@bufbuild/protobuf/wkt';
|
|
4
4
|
import type { JTDSchemaJson, SignalBindingJson } from '../api';
|
|
5
5
|
/**
|
|
6
6
|
* Format a timestamp using a pattern string.
|
|
@@ -25,7 +25,7 @@ export declare const celOptions: {
|
|
|
25
25
|
export declare function celToNative(value: CelValue): unknown;
|
|
26
26
|
export type { CelFuncType, CelInput, CelValue };
|
|
27
27
|
export { celRun, isCelError, celFunc, celMethod, CelScalar, objectType, listType, isCelList, isCelMap, isCelUint };
|
|
28
|
-
export { stringsExt, timestampFromDate, timestampNow, TimestampSchema };
|
|
28
|
+
export { stringsExt, timestampDate, timestampFromDate, timestampMs, timestampNow, TimestampSchema };
|
|
29
29
|
export { fuzzJTD } from '../signals';
|
|
30
30
|
export interface CelVariable {
|
|
31
31
|
name: string;
|
package/dist/cel/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,SAAS,EACT,GAAG,IAAI,MAAM,EACb,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,EACV,KAAK,OAAO,IAAI,WAAW,EAC3B,KAAK,QAAQ,EACb,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAwG/D;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAgBR;AAED,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,WAAW,EA2LrC,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,UAAU;;CAEtB,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAepD;AAGD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChD,OAAO,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACV,CAAC;AACF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cel/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var v=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var N=(e,n)=>{for(var i in n)v(e,i,{get:n[i],enumerable:!0})},C=(e,n,i,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of x(n))!E.call(e,t)&&t!==i&&v(e,t,{get:()=>n[t],enumerable:!(o=P(n,t))||o.enumerable});return e};var I=e=>C(v({},"__esModule",{value:!0}),e);var W={};N(W,{convertSignalToAnthropicSchema:()=>L,convertToAnthropicSchema:()=>O});module.exports=I(W);var b=require("jtd");var M=new Set(["int8","uint8","int16","uint16","int32","uint32"]);function F(e){return e.length===0?"/":e.map(n=>/^\d+$/.test(n)?`[${n}]`:`.${n}`).join("")}function $(e,n){let i=e;for(let o=0;o<n.length-1&&(i&&typeof i=="object"&&n[o]in i);o++)i=i[n[o]];return i}function q(e,n){let i=e;for(let o of n)if(i&&typeof i=="object")i=i[o];else return;return i}function V(e,n,i){let{instancePath:o,schemaPath:t}=e,r=F(o),s=t[t.length-1];if(s==="type"){let c=$(n,t)?.type;return c==="boolean"?`${r}: expected boolean`:c==="string"?`${r}: expected string`:c==="timestamp"?`${r}: expected timestamp string`:M.has(c)?`${r}: expected integer`:`${r}: expected number`}if(s==="enum"){let c=$(n,t)?.enum;return`${r}: expected one of [${c.join(", ")}]`}if(t.length>=2&&t[t.length-2]==="properties"&&s)return`${r==="/"?"":r}.${s}: missing required property`;if(s==="elements")return`${r}: expected array`;if(s==="properties"||s==="optionalProperties"||s==="values")return`${r}: expected object`;if(s==="discriminator")return`${r}: expected string discriminator`;if(s==="mapping"){let a=q(i,o);return`${r}: unknown variant "${a}"`}return t.length===0?`${r}: unexpected property`:`${r}: validation error at /${t.join("/")}`}function k(e,n,i){let o=i??e.definitions,t=o?{...e,definitions:o}:e;return(0,b.isValidSchema)(t)?(0,b.validate)(t,n,{maxDepth:_,maxErrors:K}).map(s=>V(s,t,n)):e.ref?[`/: unknown ref "${e.ref}"`]:["/: invalid schema"]}var _=32,K=100;var h=32,R={int8:{minimum:-128,maximum:127},uint8:{minimum:0,maximum:255},int16:{minimum:-32768,maximum:32767},uint16:{minimum:0,maximum:65535},int32:{minimum:-2147483648,maximum:2147483647},uint32:{minimum:0,maximum:4294967295}},A={minimum:-34028235e31,maximum:34028235e31};function T(e){return!e||typeof e!="object"?!0:e.type||e.enum||e.elements||e.values||e.discriminator||e.ref||e.properties&&Object.keys(e.properties).length>0||e.optionalProperties&&Object.keys(e.optionalProperties).length>0?!1:(e.properties!==void 0||e.optionalProperties!==void 0)&&e.additionalProperties===!0?!0:!(e.properties!==void 0||e.optionalProperties!==void 0)}function H(e,n){let i=e,o=0;for(;i.ref&&o<h;){let t=n?.[i.ref];if(!t)return!1;i=t,o++}return o>=h?!1:T(i)}function S(e){let n=[];if(!e||typeof e!="object")return n;if(e.ref&&n.push(e.ref),e.properties)for(let i of Object.values(e.properties))n.push(...S(i));if(e.optionalProperties)for(let i of Object.values(e.optionalProperties))n.push(...S(i));if(e.elements&&n.push(...S(e.elements)),e.values&&n.push(...S(e.values)),e.mapping)for(let i of Object.values(e.mapping))n.push(...S(i));return n}function U(e){let t=new Map;for(let s of Object.keys(e))t.set(s,0);function r(s){t.set(s,1);let a=e[s];if(a){for(let c of S(a))if(t.has(c)){if(t.get(c)===1)return c;if(t.get(c)===0){let u=r(c);if(u)return u}}}return t.set(s,2),null}for(let s of Object.keys(e))if(t.get(s)===0){let a=r(s);if(a)return a}return null}function w(e,n){e.description=e.description?`${e.description} ${n}`:n}var B=new Set(["title","label","name","description"]);function f(e,n){let i=n.metadata;if(!i)return;let o=[],t=typeof i.title=="string"&&i.title.trim()||typeof i.label=="string"&&i.label.trim()||typeof i.name=="string"&&i.name.trim(),r=typeof i.description=="string"?i.description.trim():"";t&&r?o.push(`${t}. ${r}`):t?o.push(t):r&&o.push(r);let s=[];for(let[a,c]of Object.entries(i))B.has(a)||(typeof c=="string"&&c.trim()?s.push(`[${a}: ${c.trim()}]`):(typeof c=="number"||typeof c=="boolean")&&s.push(`[${a}: ${c}]`));if(s.length>0&&o.push(s.join(" ")),o.length>0){let a=o.join(" ");e.description=e.description?`${e.description} ${a}`:a}}function J(e,n,i){if(i>h)throw new Error(`Schema nesting exceeded ${h} levels`);if(!e||typeof e!="object")return{type:"string",description:"Must be a valid JSON value."};if(T(e)){let r={type:e.nullable===!0?["string","null"]:"string",description:"Must be a valid JSON value."};return f(r,e),r}let o=e.nullable===!0;if(e.ref){let t=e.ref;if(!n?.[t])throw new Error(`Unresolved ref "${t}"`);if(o){let r={anyOf:[{$ref:`#/$defs/${t}`},{type:"null"}]};return f(r,e),r}return{$ref:`#/$defs/${t}`}}if(e.type){let t=e.type,r={},s=R[t];if(s)return r.type=o?["integer","null"]:"integer",f(r,e),w(r,`Value range: [${s.minimum}, ${s.maximum}].`),r;switch(t){case"boolean":r.type=o?["boolean","null"]:"boolean";break;case"string":r.type=o?["string","null"]:"string";break;case"timestamp":r.type=o?["string","null"]:"string",r.format="date-time";break;case"float32":return r.type=o?["number","null"]:"number",f(r,e),w(r,`Value range: [${A.minimum}, ${A.maximum}].`),r;case"float64":r.type=o?["number","null"]:"number";break;default:throw new Error(`Unknown JTD type "${t}"`)}return f(r,e),r}if(e.enum){let t={type:o?["string","null"]:"string",enum:o?[...e.enum,null]:[...e.enum]};return f(t,e),t}if(e.elements){let t={type:o?["array","null"]:"array",items:J(e.elements,n,i+1)};return f(t,e),t}if(e.properties||e.optionalProperties){let t={type:o?["object","null"]:"object",properties:{},additionalProperties:!1},r=[];if(e.properties)for(let[s,a]of Object.entries(e.properties))t.properties[s]=J(a,n,i+1),r.push(s);if(e.optionalProperties)for(let[s,a]of Object.entries(e.optionalProperties))t.properties[s]=J(a,n,i+1);return r.length>0&&(t.required=r),f(t,e),t}if(e.values){let t=J(e.values,n,i+1),r={type:o?["array","null"]:"array",items:{type:"object",properties:{key:{type:"string"},value:t},required:["key","value"],additionalProperties:!1}};return f(r,e),r}if(e.discriminator&&e.mapping){let t=e.discriminator,r=e.mapping,s=[];for(let[c,u]of Object.entries(r)){let p;T(u)?p={type:"object",properties:{[t]:{const:c},_data:{type:"string",description:"Must be a valid JSON value representing the variant data."}},required:[t,"_data"],additionalProperties:!1}:(p=J(u,n,i+1),p.properties[t]={const:c},(p.required??=[]).unshift(t),p.additionalProperties=!1),f(p,u),s.push(p)}let a={anyOf:s};return o&&a.anyOf.push({type:"null"}),f(a,e),a}return{type:"string",description:"Must be a valid JSON value."}}var G=new Set(Object.keys(R));function g(e,n,i,o){if(o>h||e==null)return e;if(n.ref){let t=i?.[n.ref];return t?g(e,t,i,o+1):e}if(T(n)){if(typeof e=="string")try{return JSON.parse(e)}catch{return e}return e}if(n.type&&G.has(n.type))return typeof e=="number"&&!Number.isInteger(e)?Math.round(e):e;if(n.elements&&Array.isArray(e))return e.map(t=>g(t,n.elements,i,o+1));if((n.properties||n.optionalProperties)&&typeof e=="object"&&e!==null){let t={...e};if(n.properties)for(let[r,s]of Object.entries(n.properties))r in t&&(t[r]=g(t[r],s,i,o+1));if(n.optionalProperties)for(let[r,s]of Object.entries(n.optionalProperties))r in t&&(t[r]=g(t[r],s,i,o+1));return t}if(n.values&&Array.isArray(e)){let t={};for(let r of e)if(typeof r=="object"&&r!==null){let s=r,a=s.key;t[a]=g(s.value,n.values,i,o+1)}return t}if(n.discriminator&&n.mapping&&typeof e=="object"&&e!==null){let t=e,r=n.discriminator,s=t[r],a=n.mapping[s];if(!a)return e;if(T(a)){let u=t._data;if(typeof u=="string")try{let p=JSON.parse(u);if(typeof p=="object"&&p!==null)return{[r]:s,...p}}catch{}return{[r]:s}}let c={[r]:s};if(a.properties)for(let[u,p]of Object.entries(a.properties))u in t&&(c[u]=g(t[u],p,i,o+1));if(a.optionalProperties)for(let[u,p]of Object.entries(a.optionalProperties))u in t&&(c[u]=g(t[u],p,i,o+1));return c}return e}function O(e){let n=e.definitions;if(n&&Object.keys(n).length>0){let r=U(n);if(r)throw new Error(`Anthropic structured output does not support recursive schemas. Definition "${r}" contains a circular reference.`)}let i=!H(e,n),o;if(i){if(o=J(e,n,0),n&&Object.keys(n).length>0){let r={};for(let[s,a]of Object.entries(n))r[s]=J(a,n,0);o.$defs=r}}else o={},f(o,e);return{schema:o,strict:i,convert:r=>{let s=g(r,e,n,0),a=k(e,s,n);return a.length>0?{success:!1,errors:a}:{success:!0,data:s}}}}function Y(e){return{type:"string",description:`Base64-encoded binary content (MIME type: ${e}).`}}function j(e){if(e.jtdSchema)return O(e.jtdSchema);if(e.mimeType)return{schema:Y(e.mimeType),strict:!0,convert:o=>typeof o!="string"?{success:!1,errors:[`/: expected base64 string for MIME type ${e.mimeType}, got ${typeof o}`]}:{success:!0,data:o}};throw new Error("Signal format has neither jtdSchema nor mimeType")}function L(e){let n=e.formats;if(!n||n.length===0)throw new Error("Signal descriptor has no formats");let i=e.name??"unnamed",o=e.optional===!0;if(n.length===1){let l=j(n[0]);if(e.label||e.description){let m=[];e.label&&m.push(e.label),e.description&&m.push(e.description);let d=m.join(". ");l.schema.description=l.schema.description?`${d} ${l.schema.description}`:d}return l}let t=[],r={};for(let l=0;l<n.length;l++){let m=n[l],d=`format_${l}`,y=j(m);if(m.jtdSchema){let D=y.schema.description;y.schema.description=D?`Structured JSON data. ${D}`:"Structured JSON data."}r[d]=y.schema,t.push({key:d,converter:y})}let s=t.map(l=>l.key),a=e.description??"",c=o?"Provide at most ONE of the following format properties. All are optional.":`You MUST provide exactly ONE of the following format properties: ${s.join(", ")}.`;return{schema:{type:"object",description:a?`${a} ${c}`:c,properties:r,additionalProperties:!1},strict:!0,convert:l=>{if(typeof l!="object"||l===null)return{success:!1,errors:[`/: expected object with format properties, got ${typeof l}`]};let m=l,d=t.find(({key:y})=>m[y]!==void 0&&m[y]!==null);return d?d.converter.convert(m[d.key]):o?{success:!0,data:null}:{success:!1,errors:[`Signal '${i}' is required but no format was provided. Set exactly one of: ${s.join(", ")}.`]}}}}0&&(module.exports={convertSignalToAnthropicSchema,convertToAnthropicSchema});
|
|
2
|
+
//# sourceMappingURL=anthropic.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/anthropic/index.ts", "../../src/signals/index.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright 2024-2025 Mochabug, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0.\n\nimport type {\n JTDSchemaJson,\n SignalDescriptorJson,\n SignalFormatJson\n} from '../api';\nimport { validateJsonAgainstJTD } from '../signals';\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Types\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** JSON Schema subset supported by Anthropic structured output. */\nexport interface AnthropicSchema {\n type?: string | string[];\n description?: string;\n properties?: Record<string, AnthropicSchema>;\n required?: string[];\n additionalProperties?: false;\n enum?: (string | number | boolean | null)[];\n const?: string | number | boolean | null;\n format?: string;\n items?: AnthropicSchema;\n anyOf?: AnthropicSchema[];\n $defs?: Record<string, AnthropicSchema>;\n $ref?: string;\n}\n\nexport interface ConvertSuccess {\n success: true;\n data: unknown;\n}\n\nexport interface ConvertFailure {\n success: false;\n errors: string[];\n}\n\nexport type ConvertResult = ConvertSuccess | ConvertFailure;\n\nexport interface AnthropicConversionResult {\n /** Anthropic structured output compatible JSON Schema. */\n schema: AnthropicSchema;\n /** Whether the schema supports strict mode. False for unstructured (empty) schemas. */\n strict: boolean;\n /** Convert Anthropic JSON output back to JTD-conforming JSON. */\n convert: (anthropicJson: unknown) => ConvertResult;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Constants\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst MAX_REF_DEPTH = 32;\n\nconst INTEGER_BOUNDS: Record<string, { minimum: number; maximum: number }> = {\n int8: { minimum: -128, maximum: 127 },\n uint8: { minimum: 0, maximum: 255 },\n int16: { minimum: -32768, maximum: 32767 },\n uint16: { minimum: 0, maximum: 65535 },\n int32: { minimum: -2147483648, maximum: 2147483647 },\n uint32: { minimum: 0, maximum: 4294967295 }\n};\n\nconst FLOAT32_BOUNDS = {\n minimum: -3.4028235e38,\n maximum: 3.4028235e38\n};\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Helpers\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** Check if a JTD schema is unstructured (empty form or equivalent). */\nfunction isUnstructuredSchema(schema: JTDSchemaJson): boolean {\n if (!schema || typeof schema !== 'object') return true;\n\n if (\n schema.type ||\n schema.enum ||\n schema.elements ||\n schema.values ||\n schema.discriminator ||\n schema.ref\n ) {\n return false;\n }\n\n const hasRealProps =\n (schema.properties && Object.keys(schema.properties).length > 0) ||\n (schema.optionalProperties &&\n Object.keys(schema.optionalProperties).length > 0);\n\n if (hasRealProps) return false;\n\n if (\n (schema.properties !== undefined ||\n schema.optionalProperties !== undefined) &&\n schema.additionalProperties === true\n ) {\n return true;\n }\n\n if (\n schema.properties !== undefined ||\n schema.optionalProperties !== undefined\n ) {\n return false;\n }\n\n return true;\n}\n\n/** Resolve refs at root to determine if the root target is unstructured. */\nfunction isRootUnstructured(\n schema: JTDSchemaJson,\n defs: Record<string, JTDSchemaJson> | undefined\n): boolean {\n let resolved = schema;\n let depth = 0;\n while (resolved.ref && depth < MAX_REF_DEPTH) {\n const target = defs?.[resolved.ref as string];\n if (!target) return false;\n resolved = target;\n depth++;\n }\n if (depth >= MAX_REF_DEPTH) return false;\n return isUnstructuredSchema(resolved);\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Circular ref detection (Anthropic does not support recursive schemas)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nfunction collectRefsInSchema(schema: JTDSchemaJson): string[] {\n const refs: string[] = [];\n if (!schema || typeof schema !== 'object') return refs;\n if (schema.ref) refs.push(schema.ref as string);\n if (schema.properties) {\n for (const v of Object.values(schema.properties)) {\n refs.push(...collectRefsInSchema(v as JTDSchemaJson));\n }\n }\n if (schema.optionalProperties) {\n for (const v of Object.values(schema.optionalProperties)) {\n refs.push(...collectRefsInSchema(v as JTDSchemaJson));\n }\n }\n if (schema.elements)\n refs.push(...collectRefsInSchema(schema.elements as JTDSchemaJson));\n if (schema.values)\n refs.push(...collectRefsInSchema(schema.values as JTDSchemaJson));\n if (schema.mapping) {\n for (const v of Object.values(schema.mapping)) {\n refs.push(...collectRefsInSchema(v as JTDSchemaJson));\n }\n }\n return refs;\n}\n\n/**\n * Detect circular references in JTD definitions.\n * Returns the name of a definition involved in a cycle, or null if acyclic.\n */\nfunction detectCircularRefs(\n defs: Record<string, JTDSchemaJson>\n): string | null {\n const WHITE = 0,\n GRAY = 1,\n BLACK = 2;\n const color = new Map<string, number>();\n for (const name of Object.keys(defs)) color.set(name, WHITE);\n\n function dfs(name: string): string | null {\n color.set(name, GRAY);\n const schema = defs[name];\n if (schema) {\n for (const ref of collectRefsInSchema(schema)) {\n if (!color.has(ref)) continue;\n if (color.get(ref) === GRAY) return ref;\n if (color.get(ref) === WHITE) {\n const result = dfs(ref);\n if (result) return result;\n }\n }\n }\n color.set(name, BLACK);\n return null;\n }\n\n for (const name of Object.keys(defs)) {\n if (color.get(name) === WHITE) {\n const cycle = dfs(name);\n if (cycle) return cycle;\n }\n }\n return null;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Metadata helper\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nfunction appendToDescription(result: AnthropicSchema, text: string): void {\n result.description = result.description\n ? `${result.description} ${text}`\n : text;\n}\n\nconst METADATA_KNOWN_KEYS = new Set(['title', 'label', 'name', 'description']);\n\nfunction applyMetadata(result: AnthropicSchema, schema: JTDSchemaJson): void {\n const meta = schema.metadata as Record<string, unknown> | undefined;\n if (!meta) return;\n\n const descParts: string[] = [];\n\n const titleCandidate =\n (typeof meta['title'] === 'string' && meta['title'].trim()) ||\n (typeof meta['label'] === 'string' && meta['label'].trim()) ||\n (typeof meta['name'] === 'string' && meta['name'].trim());\n\n const descText =\n typeof meta['description'] === 'string' ? meta['description'].trim() : '';\n\n if (titleCandidate && descText) {\n descParts.push(`${titleCandidate}. ${descText}`);\n } else if (titleCandidate) {\n descParts.push(titleCandidate);\n } else if (descText) {\n descParts.push(descText);\n }\n\n const extras: string[] = [];\n for (const [key, value] of Object.entries(meta)) {\n if (METADATA_KNOWN_KEYS.has(key)) continue;\n if (typeof value === 'string' && value.trim()) {\n extras.push(`[${key}: ${value.trim()}]`);\n } else if (typeof value === 'number' || typeof value === 'boolean') {\n extras.push(`[${key}: ${value}]`);\n }\n }\n if (extras.length > 0) {\n descParts.push(extras.join(' '));\n }\n\n if (descParts.length > 0) {\n const newDesc = descParts.join(' ');\n result.description = result.description\n ? `${result.description} ${newDesc}`\n : newDesc;\n }\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Schema conversion (JTD \u2192 Anthropic JSON Schema)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nfunction convertNode(\n schema: JTDSchemaJson,\n defs: Record<string, JTDSchemaJson> | undefined,\n depth: number\n): AnthropicSchema {\n if (depth > MAX_REF_DEPTH) {\n throw new Error(`Schema nesting exceeded ${MAX_REF_DEPTH} levels`);\n }\n\n if (!schema || typeof schema !== 'object') {\n return { type: 'string', description: 'Must be a valid JSON value.' };\n }\n\n // Unstructured \u2192 string\n if (isUnstructuredSchema(schema)) {\n const isNullable = schema.nullable === true;\n const result: AnthropicSchema = {\n type: isNullable ? ['string', 'null'] : 'string',\n description: 'Must be a valid JSON value.'\n };\n applyMetadata(result, schema);\n return result;\n }\n\n const isNullable = schema.nullable === true;\n\n // Ref form \u2192 $ref\n if (schema.ref) {\n const refName = schema.ref as string;\n if (!defs?.[refName]) {\n throw new Error(`Unresolved ref \"${refName}\"`);\n }\n if (isNullable) {\n const result: AnthropicSchema = {\n anyOf: [{ $ref: `#/$defs/${refName}` }, { type: 'null' }]\n };\n applyMetadata(result, schema);\n return result;\n }\n return { $ref: `#/$defs/${refName}` };\n }\n\n // Type form\n if (schema.type) {\n const jtdType = schema.type as string;\n const result: AnthropicSchema = {};\n\n // Anthropic doesn't support min/max \u2014 encode bounds in description\n const intBounds = INTEGER_BOUNDS[jtdType];\n if (intBounds) {\n result.type = isNullable ? ['integer', 'null'] : 'integer';\n applyMetadata(result, schema);\n appendToDescription(result, `Value range: [${intBounds.minimum}, ${intBounds.maximum}].`);\n return result;\n }\n\n switch (jtdType) {\n case 'boolean':\n result.type = isNullable ? ['boolean', 'null'] : 'boolean';\n break;\n case 'string':\n result.type = isNullable ? ['string', 'null'] : 'string';\n break;\n case 'timestamp':\n result.type = isNullable ? ['string', 'null'] : 'string';\n result.format = 'date-time';\n break;\n case 'float32':\n result.type = isNullable ? ['number', 'null'] : 'number';\n applyMetadata(result, schema);\n appendToDescription(result, `Value range: [${FLOAT32_BOUNDS.minimum}, ${FLOAT32_BOUNDS.maximum}].`);\n return result;\n case 'float64':\n result.type = isNullable ? ['number', 'null'] : 'number';\n break;\n default:\n throw new Error(`Unknown JTD type \"${jtdType}\"`);\n }\n\n applyMetadata(result, schema);\n return result;\n }\n\n // Enum form\n if (schema.enum) {\n const result: AnthropicSchema = {\n type: isNullable ? ['string', 'null'] : 'string',\n enum: isNullable\n ? [...(schema.enum as string[]), null]\n : [...(schema.enum as string[])]\n };\n applyMetadata(result, schema);\n return result;\n }\n\n // Elements form\n if (schema.elements) {\n const result: AnthropicSchema = {\n type: isNullable ? ['array', 'null'] : 'array',\n items: convertNode(schema.elements as JTDSchemaJson, defs, depth + 1)\n };\n applyMetadata(result, schema);\n return result;\n }\n\n // Properties form \u2014 optional properties stay optional (not in required)\n if (schema.properties || schema.optionalProperties) {\n const result: AnthropicSchema = {\n type: isNullable ? ['object', 'null'] : 'object',\n properties: {},\n additionalProperties: false\n };\n const required: string[] = [];\n\n if (schema.properties) {\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n result.properties![key] = convertNode(\n propSchema as JTDSchemaJson,\n defs,\n depth + 1\n );\n required.push(key);\n }\n }\n\n if (schema.optionalProperties) {\n for (const [key, propSchema] of Object.entries(\n schema.optionalProperties\n )) {\n result.properties![key] = convertNode(\n propSchema as JTDSchemaJson,\n defs,\n depth + 1\n );\n // NOT added to required \u2014 genuinely optional\n }\n }\n\n if (required.length > 0) {\n result.required = required;\n }\n\n applyMetadata(result, schema);\n return result;\n }\n\n // Values form \u2192 array of {key, value} objects\n if (schema.values) {\n const valueSchema = convertNode(\n schema.values as JTDSchemaJson,\n defs,\n depth + 1\n );\n const result: AnthropicSchema = {\n type: isNullable ? ['array', 'null'] : 'array',\n items: {\n type: 'object',\n properties: {\n key: { type: 'string' },\n value: valueSchema\n },\n required: ['key', 'value'],\n additionalProperties: false\n }\n };\n applyMetadata(result, schema);\n return result;\n }\n\n // Discriminator form \u2192 anyOf with const for discriminator\n if (schema.discriminator && schema.mapping) {\n const discKey = schema.discriminator as string;\n const mapping = schema.mapping as Record<string, JTDSchemaJson>;\n const variants: AnthropicSchema[] = [];\n\n for (const [tag, variantSchema] of Object.entries(mapping)) {\n let variantOut: AnthropicSchema;\n\n if (isUnstructuredSchema(variantSchema)) {\n variantOut = {\n type: 'object',\n properties: {\n [discKey]: { const: tag },\n _data: {\n type: 'string',\n description:\n 'Must be a valid JSON value representing the variant data.'\n }\n },\n required: [discKey, '_data'],\n additionalProperties: false\n };\n } else {\n variantOut = convertNode(variantSchema, defs, depth + 1);\n // Per RFC 8927, mapping values are always properties form,\n // and the discriminator tag never appears in variant properties.\n variantOut.properties![discKey] = { const: tag };\n (variantOut.required ??= []).unshift(discKey);\n variantOut.additionalProperties = false;\n }\n\n applyMetadata(variantOut, variantSchema);\n variants.push(variantOut);\n }\n\n const result: AnthropicSchema = { anyOf: variants };\n if (isNullable) {\n result.anyOf!.push({ type: 'null' });\n }\n applyMetadata(result, schema);\n return result;\n }\n\n // Fallback\n return { type: 'string', description: 'Must be a valid JSON value.' };\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Coercion (Anthropic output \u2192 JTD-conforming JSON)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst INTEGER_TYPE_SET = new Set(Object.keys(INTEGER_BOUNDS));\n\nfunction coerceToJTD(\n value: unknown,\n schema: JTDSchemaJson,\n defs: Record<string, JTDSchemaJson> | undefined,\n depth: number\n): unknown {\n if (depth > MAX_REF_DEPTH) return value;\n if (value === null || value === undefined) return value;\n\n // Ref form\n if (schema.ref) {\n const resolved = defs?.[schema.ref as string];\n if (resolved) {\n return coerceToJTD(value, resolved, defs, depth + 1);\n }\n return value;\n }\n\n // Unstructured \u2014 parse JSON string\n if (isUnstructuredSchema(schema)) {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n return value;\n }\n\n // Type form \u2014 integer coercion\n if (schema.type && INTEGER_TYPE_SET.has(schema.type as string)) {\n if (typeof value === 'number' && !Number.isInteger(value)) {\n return Math.round(value);\n }\n return value;\n }\n\n // Elements form\n if (schema.elements && Array.isArray(value)) {\n return value.map((item) =>\n coerceToJTD(item, schema.elements as JTDSchemaJson, defs, depth + 1)\n );\n }\n\n // Properties form \u2014 no null-stripping needed (optionals are genuinely optional)\n if (\n (schema.properties || schema.optionalProperties) &&\n typeof value === 'object' &&\n value !== null\n ) {\n const obj = { ...(value as Record<string, unknown>) };\n\n if (schema.properties) {\n for (const [k, propSchema] of Object.entries(schema.properties)) {\n if (k in obj) {\n obj[k] = coerceToJTD(\n obj[k],\n propSchema as JTDSchemaJson,\n defs,\n depth + 1\n );\n }\n }\n }\n\n if (schema.optionalProperties) {\n for (const [k, propSchema] of Object.entries(\n schema.optionalProperties\n )) {\n if (k in obj) {\n obj[k] = coerceToJTD(\n obj[k],\n propSchema as JTDSchemaJson,\n defs,\n depth + 1\n );\n }\n }\n }\n\n return obj;\n }\n\n // Values form \u2014 array of {key, value} \u2192 Record\n if (schema.values && Array.isArray(value)) {\n const result: Record<string, unknown> = {};\n for (const entry of value) {\n if (typeof entry === 'object' && entry !== null) {\n const rec = entry as Record<string, unknown>;\n const key = rec.key as string;\n result[key] = coerceToJTD(\n rec.value,\n schema.values as JTDSchemaJson,\n defs,\n depth + 1\n );\n }\n }\n return result;\n }\n\n // Discriminator form \u2014 flat object, coerce variant fields\n if (\n schema.discriminator &&\n schema.mapping &&\n typeof value === 'object' &&\n value !== null\n ) {\n const rec = value as Record<string, unknown>;\n const discKey = schema.discriminator as string;\n const tag = rec[discKey] as string;\n const variantSchema = (schema.mapping as Record<string, JTDSchemaJson>)[\n tag\n ];\n\n if (!variantSchema) return value;\n\n if (isUnstructuredSchema(variantSchema)) {\n const dataStr = rec._data;\n if (typeof dataStr === 'string') {\n try {\n const parsed = JSON.parse(dataStr);\n if (typeof parsed === 'object' && parsed !== null) {\n return { [discKey]: tag, ...parsed };\n }\n } catch {\n /* validation catches */\n }\n }\n return { [discKey]: tag };\n }\n\n const result: Record<string, unknown> = { [discKey]: tag };\n\n if (variantSchema.properties) {\n for (const [k, propSchema] of Object.entries(variantSchema.properties)) {\n if (k in rec) {\n result[k] = coerceToJTD(\n rec[k],\n propSchema as JTDSchemaJson,\n defs,\n depth + 1\n );\n }\n }\n }\n\n if (variantSchema.optionalProperties) {\n for (const [k, propSchema] of Object.entries(\n variantSchema.optionalProperties\n )) {\n if (k in rec) {\n result[k] = coerceToJTD(\n rec[k],\n propSchema as JTDSchemaJson,\n defs,\n depth + 1\n );\n }\n }\n }\n\n return result;\n }\n\n return value;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Public API\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/**\n * Convert a JTD schema to an Anthropic structured output compatible JSON Schema,\n * with a converter function that transforms and validates Anthropic output against\n * the original JTD schema.\n *\n * @throws {Error} if the JTD schema contains recursive definitions (not supported by Anthropic).\n * @throws {Error} if the JTD schema contains unresolved refs.\n */\nexport function convertToAnthropicSchema(\n jtdSchema: JTDSchemaJson\n): AnthropicConversionResult {\n const defs = jtdSchema.definitions as\n | Record<string, JTDSchemaJson>\n | undefined;\n\n // Anthropic does not support recursive schemas \u2014 detect and throw\n if (defs && Object.keys(defs).length > 0) {\n const cycleNode = detectCircularRefs(defs);\n if (cycleNode) {\n throw new Error(\n `Anthropic structured output does not support recursive schemas. Definition \"${cycleNode}\" contains a circular reference.`\n );\n }\n }\n\n const strict = !isRootUnstructured(jtdSchema, defs);\n\n let schema: AnthropicSchema;\n if (strict) {\n schema = convertNode(jtdSchema, defs, 0);\n\n if (defs && Object.keys(defs).length > 0) {\n const anthropicDefs: Record<string, AnthropicSchema> = {};\n for (const [name, defSchema] of Object.entries(defs)) {\n anthropicDefs[name] = convertNode(\n defSchema as JTDSchemaJson,\n defs,\n 0\n );\n }\n schema.$defs = anthropicDefs;\n }\n } else {\n schema = {};\n applyMetadata(schema, jtdSchema);\n }\n\n const convert = (anthropicJson: unknown): ConvertResult => {\n const coerced = coerceToJTD(anthropicJson, jtdSchema, defs, 0);\n const errors = validateJsonAgainstJTD(jtdSchema, coerced, defs);\n if (errors.length > 0) {\n return { success: false, errors };\n }\n return { success: true, data: coerced };\n };\n\n return { schema, strict, convert };\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Signal-level conversion (SignalDescriptorJson \u2192 Anthropic schema)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nfunction convertMimeFormat(mimeType: string): AnthropicSchema {\n return {\n type: 'string',\n description: `Base64-encoded binary content (MIME type: ${mimeType}).`\n };\n}\n\nfunction convertSingleFormat(\n format: SignalFormatJson\n): AnthropicConversionResult {\n if (format.jtdSchema) {\n return convertToAnthropicSchema(format.jtdSchema);\n }\n if (format.mimeType) {\n const schema = convertMimeFormat(format.mimeType);\n const convert = (anthropicJson: unknown): ConvertResult => {\n if (typeof anthropicJson !== 'string') {\n return {\n success: false,\n errors: [\n `/: expected base64 string for MIME type ${format.mimeType}, got ${typeof anthropicJson}`\n ]\n };\n }\n return { success: true, data: anthropicJson };\n };\n return { schema, strict: true, convert };\n }\n throw new Error('Signal format has neither jtdSchema nor mimeType');\n}\n\n/**\n * Convert a SignalDescriptorJson to an Anthropic structured output compatible JSON Schema.\n *\n * Handles single and multi-format signals:\n * - Single format: schema is the converted format directly.\n * - Multiple formats: wrapper object with genuinely optional `format_0`, `format_1`, etc.\n *\n * @throws {Error} if the descriptor has no formats.\n */\nexport function convertSignalToAnthropicSchema(\n descriptor: SignalDescriptorJson\n): AnthropicConversionResult {\n const formats = descriptor.formats as SignalFormatJson[] | undefined;\n if (!formats || formats.length === 0) {\n throw new Error('Signal descriptor has no formats');\n }\n\n const signalName = descriptor.name ?? 'unnamed';\n const isOptional = descriptor.optional === true;\n\n // Single format \u2014 no wrapper\n if (formats.length === 1) {\n const result = convertSingleFormat(formats[0]!);\n if (descriptor.label || descriptor.description) {\n const parts: string[] = [];\n if (descriptor.label) parts.push(descriptor.label);\n if (descriptor.description) parts.push(descriptor.description);\n const newDesc = parts.join('. ');\n result.schema.description = result.schema.description\n ? `${newDesc} ${result.schema.description}`\n : newDesc;\n }\n return result;\n }\n\n // Multiple formats \u2014 optional format_N properties (Anthropic supports native optionals)\n const formatConverters: Array<{\n key: string;\n converter: AnthropicConversionResult;\n }> = [];\n\n const wrapperProps: Record<string, AnthropicSchema> = {};\n\n for (let i = 0; i < formats.length; i++) {\n const fmt = formats[i]!;\n const key = `format_${i}`;\n const conv = convertSingleFormat(fmt);\n\n if (fmt.jtdSchema) {\n const existing = conv.schema.description;\n conv.schema.description = existing\n ? `Structured JSON data. ${existing}`\n : 'Structured JSON data.';\n }\n\n wrapperProps[key] = conv.schema;\n formatConverters.push({ key, converter: conv });\n }\n\n const keys = formatConverters.map((f) => f.key);\n const baseDesc = descriptor.description ?? '';\n const guidance = isOptional\n ? 'Provide at most ONE of the following format properties. All are optional.'\n : `You MUST provide exactly ONE of the following format properties: ${keys.join(', ')}.`;\n\n const schema: AnthropicSchema = {\n type: 'object',\n description: baseDesc ? `${baseDesc} ${guidance}` : guidance,\n properties: wrapperProps,\n additionalProperties: false\n // No required \u2014 all format props are genuinely optional\n };\n\n const convert = (anthropicJson: unknown): ConvertResult => {\n if (typeof anthropicJson !== 'object' || anthropicJson === null) {\n return {\n success: false,\n errors: [\n `/: expected object with format properties, got ${typeof anthropicJson}`\n ]\n };\n }\n\n const rec = anthropicJson as Record<string, unknown>;\n\n const selected = formatConverters.find(\n ({ key }) => rec[key] !== undefined && rec[key] !== null\n );\n\n if (!selected) {\n if (isOptional) {\n return { success: true, data: null };\n }\n return {\n success: false,\n errors: [\n `Signal '${signalName}' is required but no format was provided. Set exactly one of: ${keys.join(', ')}.`\n ]\n };\n }\n\n return selected.converter.convert(rec[selected.key]);\n };\n\n return { schema, strict: true, convert };\n}\n", "import type {\n JTDSchemaJson,\n SignalDescriptorJson,\n SignalFormatJson\n} from '../api';\nimport { isSchema, isValidSchema, validate as jtdValidate } from 'jtd';\nimport type { Schema, ValidationError } from 'jtd';\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD FUZZER (generate sample values from JTD schemas)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** Maximum recursion depth for fuzzJTD to prevent infinite loops on self-referencing schemas. */\nconst FUZZ_MAX_DEPTH = 10;\n\n/** Generate a fuzzed (sample) value from a JTD schema. */\nexport function fuzzJTD(\n schema: JTDSchemaJson,\n definitions?: Record<string, JTDSchemaJson>,\n _depth: number = 0\n): unknown {\n if (_depth > FUZZ_MAX_DEPTH) return null;\n\n if (schema.ref) {\n const def = definitions?.[schema.ref];\n if (def) return fuzzJTD(def, definitions, _depth + 1);\n return null;\n }\n\n if (schema.type) {\n switch (schema.type) {\n case 'string':\n return 'Lorem ipsum';\n case 'timestamp':\n return '2024-01-15T10:30:00Z';\n case 'float32':\n case 'float64':\n return 42.5;\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return BigInt(42);\n case 'boolean':\n return true;\n default:\n return null;\n }\n }\n\n if (schema.enum) {\n return schema.enum[0] ?? null;\n }\n\n if (schema.elements) {\n return [\n fuzzJTD(schema.elements, definitions, _depth + 1),\n fuzzJTD(schema.elements, definitions, _depth + 1)\n ];\n }\n\n if (schema.values) {\n return { key1: fuzzJTD(schema.values, definitions, _depth + 1) };\n }\n\n if (schema.properties || schema.optionalProperties) {\n const obj: Record<string, unknown> = {};\n if (schema.properties) {\n for (const [k, v] of Object.entries(schema.properties)) {\n obj[k] = fuzzJTD(v, definitions, _depth + 1);\n }\n }\n if (schema.optionalProperties) {\n for (const [k, v] of Object.entries(schema.optionalProperties)) {\n obj[k] = fuzzJTD(v, definitions, _depth + 1);\n }\n }\n return obj;\n }\n\n if (schema.discriminator && schema.mapping) {\n const firstKey = Object.keys(schema.mapping)[0];\n if (firstKey) {\n const variant = schema.mapping[firstKey]!;\n const obj = fuzzJTD(variant, definitions, _depth + 1) as Record<\n string,\n unknown\n >;\n obj[schema.discriminator] = firstKey;\n return obj;\n }\n return null;\n }\n\n // Empty schema\n return null;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD VALUE VALIDATION (delegates to the `jtd` npm package)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst INTEGER_TYPES = new Set([\n 'int8',\n 'uint8',\n 'int16',\n 'uint16',\n 'int32',\n 'uint32'\n]);\n\nfunction formatInstancePath(instancePath: string[]): string {\n if (instancePath.length === 0) return '/';\n return instancePath\n .map((p) => (/^\\d+$/.test(p) ? `[${p}]` : `.${p}`))\n .join('');\n}\n\nfunction resolveSchemaParent(\n schema: Record<string, unknown>,\n schemaPath: string[]\n): Record<string, unknown> {\n let current: any = schema;\n for (let i = 0; i < schemaPath.length - 1; i++) {\n if (current && typeof current === 'object' && schemaPath[i]! in current) {\n current = current[schemaPath[i]!];\n } else {\n break;\n }\n }\n return current as Record<string, unknown>;\n}\n\nfunction resolveInstanceValue(value: unknown, instancePath: string[]): unknown {\n let current = value;\n for (const key of instancePath) {\n if (current && typeof current === 'object') {\n current = (current as Record<string, unknown>)[key];\n } else {\n return undefined;\n }\n }\n return current;\n}\n\nfunction formatValidationError(\n error: ValidationError,\n schema: Record<string, unknown>,\n value: unknown\n): string {\n const { instancePath, schemaPath } = error;\n const path = formatInstancePath(instancePath);\n const lastKey = schemaPath[schemaPath.length - 1];\n\n if (lastKey === 'type') {\n const parent = resolveSchemaParent(schema, schemaPath);\n const jtdType = parent?.type as string;\n if (jtdType === 'boolean') return `${path}: expected boolean`;\n if (jtdType === 'string') return `${path}: expected string`;\n if (jtdType === 'timestamp') return `${path}: expected timestamp string`;\n if (INTEGER_TYPES.has(jtdType)) return `${path}: expected integer`;\n return `${path}: expected number`;\n }\n\n if (lastKey === 'enum') {\n const parent = resolveSchemaParent(schema, schemaPath);\n const enumValues = parent?.enum as string[];\n return `${path}: expected one of [${enumValues.join(', ')}]`;\n }\n\n if (\n schemaPath.length >= 2 &&\n schemaPath[schemaPath.length - 2] === 'properties' &&\n lastKey\n ) {\n const prefix = path === '/' ? '' : path;\n return `${prefix}.${lastKey}: missing required property`;\n }\n\n if (lastKey === 'elements') return `${path}: expected array`;\n\n if (\n lastKey === 'properties' ||\n lastKey === 'optionalProperties' ||\n lastKey === 'values'\n ) {\n return `${path}: expected object`;\n }\n\n if (lastKey === 'discriminator')\n return `${path}: expected string discriminator`;\n\n if (lastKey === 'mapping') {\n const discValue = resolveInstanceValue(value, instancePath);\n return `${path}: unknown variant \"${discValue}\"`;\n }\n\n if (schemaPath.length === 0) return `${path}: unexpected property`;\n\n return `${path}: validation error at /${schemaPath.join('/')}`;\n}\n\n/**\n * Validate a value against a JTD schema, returning an array of error messages.\n * Delegates to the `jtd` npm package for spec-compliant validation.\n */\nexport function validateJsonAgainstJTD(\n schema: JTDSchemaJson,\n value: unknown,\n definitions?: Record<string, JTDSchemaJson>\n): string[] {\n const defs =\n definitions ??\n (schema.definitions as Record<string, JTDSchemaJson> | undefined);\n\n const schemaForValidation = defs\n ? ({ ...schema, definitions: defs } as Schema)\n : (schema as Schema);\n\n // The jtd lib throws on invalid schemas (e.g., unresolved refs).\n if (!isValidSchema(schemaForValidation)) {\n if (schema.ref) {\n return [`/: unknown ref \"${schema.ref}\"`];\n }\n return [`/: invalid schema`];\n }\n\n const errors = jtdValidate(schemaForValidation, value, {\n maxDepth: MAX_VALIDATION_DEPTH,\n maxErrors: MAX_VALIDATION_ERRORS\n });\n\n return errors.map((err) =>\n formatValidationError(\n err,\n schemaForValidation as Record<string, unknown>,\n value\n )\n );\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// SIGNAL-LEVEL VALIDATION (JSON values against JTD formats)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** Validate a JSON value against a single SignalFormatJson. */\nexport function validateJsonAgainstSignal(\n format: SignalFormatJson,\n jsonValue: unknown\n): string[];\n/** Validate a JSON value against a SignalDescriptorJson (valid if value matches ANY JTD format). */\nexport function validateJsonAgainstSignal(\n descriptor: SignalDescriptorJson,\n jsonValue: unknown\n): string[];\nexport function validateJsonAgainstSignal(\n formatOrDescriptor: SignalFormatJson | SignalDescriptorJson,\n jsonValue: unknown\n): string[] {\n // Descriptor path \u2014 has `formats` array\n if (\n 'formats' in formatOrDescriptor &&\n Array.isArray(formatOrDescriptor.formats)\n ) {\n const jtdFormats = (\n formatOrDescriptor.formats as SignalFormatJson[]\n ).filter((f) => f.jtdSchema);\n if (jtdFormats.length === 0) {\n return ['/: no JTD formats in signal descriptor'];\n }\n // Valid if value matches ANY JTD format\n for (const format of jtdFormats) {\n const errors = validateJsonAgainstJTD(format.jtdSchema!, jsonValue);\n if (errors.length === 0) return [];\n }\n // None matched \u2014 return errors from last format attempt\n return validateJsonAgainstJTD(\n jtdFormats[jtdFormats.length - 1]!.jtdSchema!,\n jsonValue\n );\n }\n\n // Single format path\n const format = formatOrDescriptor as SignalFormatJson;\n if (!format.jtdSchema) {\n return ['/: signal format has no jtdSchema'];\n }\n return validateJsonAgainstJTD(format.jtdSchema, jsonValue);\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD \u2192 JSON SCHEMA CONVERTER\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/**\n * Convert JTD (JSON Type Definition) schema to JSON Schema for validation.\n *\n * Supports all 8 JTD schema forms per RFC 8927:\n * - Empty form: {}\n * - Ref form: { ref: \"...\" }\n * - Type form: { type: \"...\" }\n * - Enum form: { enum: [...] }\n * - Elements form: { elements: {...} }\n * - Properties form: { properties: {...}, optionalProperties: {...} }\n * - Values form: { values: {...} }\n * - Discriminator form: { discriminator: \"...\", mapping: {...} }\n */\nexport function jtdToJsonSchema(\n jtdSchema: JTDSchemaJson,\n definitions?: Record<string, JTDSchemaJson>,\n isRoot = true\n): any {\n if (!jtdSchema || typeof jtdSchema !== 'object') {\n return {};\n }\n\n const isNullable = jtdSchema['nullable'];\n const defs =\n definitions ||\n (jtdSchema['definitions'] as Record<string, JTDSchemaJson> | undefined);\n\n const result: any = {};\n\n if (isRoot) {\n result.$schema = 'http://json-schema.org/draft-07/schema#';\n }\n\n // Ref form\n if (jtdSchema['ref']) {\n const refName = jtdSchema['ref'] as string;\n if (defs && defs[refName]) {\n const resolvedSchema = jtdToJsonSchema(\n defs[refName] as JTDSchemaJson,\n defs,\n false\n );\n\n if (isNullable) {\n if (resolvedSchema.type) {\n resolvedSchema.type = Array.isArray(resolvedSchema.type)\n ? [...resolvedSchema.type, 'null']\n : [resolvedSchema.type, 'null'];\n } else {\n return {\n ...resolvedSchema,\n anyOf: [resolvedSchema, { type: 'null' }],\n ...(isRoot\n ? { $schema: 'http://json-schema.org/draft-07/schema#' }\n : {})\n };\n }\n }\n\n return isRoot\n ? {\n ...resolvedSchema,\n $schema: 'http://json-schema.org/draft-07/schema#'\n }\n : resolvedSchema;\n }\n return isRoot ? result : {};\n }\n\n // Type form\n if (jtdSchema['type']) {\n const typeMap: Record<string, string> = {\n boolean: 'boolean',\n string: 'string',\n timestamp: 'string',\n float32: 'number',\n float64: 'number',\n int8: 'integer',\n uint8: 'integer',\n int16: 'integer',\n uint16: 'integer',\n int32: 'integer',\n uint32: 'integer'\n };\n const jtdType = jtdSchema['type'] as string;\n const baseType = typeMap[jtdType] || 'string';\n\n result.type = isNullable ? [baseType, 'null'] : baseType;\n\n if (baseType === 'string' && jtdType === 'timestamp') {\n result.format = 'date-time';\n }\n return result;\n }\n\n // Enum form\n if (jtdSchema['enum']) {\n result.type = isNullable ? ['string', 'null'] : 'string';\n result.enum = isNullable\n ? [...(jtdSchema['enum'] as string[]), null]\n : jtdSchema['enum'];\n return result;\n }\n\n // Elements form\n if (jtdSchema['elements']) {\n result.type = isNullable ? ['array', 'null'] : 'array';\n result.items = jtdToJsonSchema(\n jtdSchema['elements'] as JTDSchemaJson,\n defs,\n false\n );\n return result;\n }\n\n // Properties form\n if (jtdSchema['properties'] || jtdSchema['optionalProperties']) {\n result.type = isNullable ? ['object', 'null'] : 'object';\n result.properties = {};\n result.required = [];\n\n if (jtdSchema['properties']) {\n for (const [key, value] of Object.entries(jtdSchema['properties'])) {\n result.properties[key] = jtdToJsonSchema(\n value as JTDSchemaJson,\n defs,\n false\n );\n result.required.push(key);\n }\n }\n\n if (jtdSchema['optionalProperties']) {\n for (const [key, value] of Object.entries(\n jtdSchema['optionalProperties']\n )) {\n result.properties[key] = jtdToJsonSchema(\n value as JTDSchemaJson,\n defs,\n false\n );\n }\n }\n\n // JTD is strict by default\n if (jtdSchema['additionalProperties'] !== true) {\n result.additionalProperties = false;\n }\n\n return result;\n }\n\n // Values form\n if (jtdSchema['values']) {\n result.type = isNullable ? ['object', 'null'] : 'object';\n result.additionalProperties = jtdToJsonSchema(\n jtdSchema['values'] as JTDSchemaJson,\n defs,\n false\n );\n return result;\n }\n\n // Discriminator form\n if (jtdSchema['discriminator'] && jtdSchema['mapping']) {\n const variants = [];\n const discriminatorKey = jtdSchema['discriminator'] as string;\n\n for (const [tag, schema] of Object.entries(jtdSchema['mapping'])) {\n const variantSchema = jtdToJsonSchema(\n schema as JTDSchemaJson,\n defs,\n false\n );\n\n if (!variantSchema.type) {\n variantSchema.type = 'object';\n } else if (\n variantSchema.type !== 'object' &&\n !Array.isArray(variantSchema.type)\n ) {\n variantSchema.type = 'object';\n }\n\n variantSchema.properties = variantSchema.properties || {};\n variantSchema.properties[discriminatorKey] = { const: tag };\n\n variantSchema.required = variantSchema.required || [];\n if (!variantSchema.required.includes(discriminatorKey)) {\n variantSchema.required.unshift(discriminatorKey);\n }\n\n // JTD discriminator variants are strict by default\n if (variantSchema.additionalProperties === undefined) {\n variantSchema.additionalProperties = false;\n }\n\n variants.push(variantSchema);\n }\n\n if (isNullable) {\n variants.push({ type: 'null' });\n }\n\n result.oneOf = variants;\n return result;\n }\n\n // Empty form\n return result;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD SCHEMA VALIDATION (using the `jtd` npm package)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nexport const MAX_VALIDATION_DEPTH = 32;\nexport const MAX_VALIDATION_ERRORS = 100;\n\n/** Validate that the input is a valid JTD schema. */\nexport function validateJTDSchema(\n schema: unknown\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n if (!isSchema(schema)) {\n return {\n valid: false,\n error: 'Invalid JTD schema: Schema does not match JTD structure'\n };\n }\n\n if (!isValidSchema(schema)) {\n return {\n valid: false,\n error:\n 'Invalid JTD schema: Schema has semantic errors (e.g., circular references, conflicting forms)'\n };\n }\n\n return { valid: true, schema: schema as unknown as JTDSchemaJson };\n}\n\n/** Parse and validate a JSON string. */\nexport function validateJSON(jsonString: string): {\n valid: boolean;\n data?: unknown;\n error?: string;\n} {\n try {\n const data = JSON.parse(jsonString);\n return { valid: true, data };\n } catch (error) {\n return {\n valid: false,\n error: `Invalid JSON: ${error instanceof Error ? error.message : 'Parse error'}`\n };\n }\n}\n\n/** Parse a JSON string and validate it as a JTD schema. */\nexport function validateJTDSchemaString(\n schemaString: string\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n const jsonResult = validateJSON(schemaString);\n if (!jsonResult.valid) return { valid: false, error: jsonResult.error! };\n\n return validateJTDSchema(jsonResult.data);\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// MONACO EDITOR CONFIG FOR JTD SCHEMA EDITING\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** Monaco editor JSON schema configuration for JTD schema IntelliSense and validation. */\nexport const JTD_SCHEMA_CONFIG = {\n uri: 'https://jsontypedef.com/schemas/jtd-schema.json',\n fileMatch: ['inmemory://jtd-schema/*.json'],\n schema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n type: {\n description: 'Type form - defines a primitive type',\n enum: [\n 'boolean',\n 'string',\n 'timestamp',\n 'float32',\n 'float64',\n 'int8',\n 'uint8',\n 'int16',\n 'uint16',\n 'int32',\n 'uint32'\n ]\n },\n enum: {\n description: 'Enum form - defines a set of string values',\n type: 'array',\n items: { type: 'string' }\n },\n elements: {\n description: 'Elements form - defines an array with typed elements',\n $ref: '#'\n },\n properties: {\n description:\n 'Properties form - defines an object with required properties',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n optionalProperties: {\n description: 'Optional properties - defines optional object properties',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n values: {\n description: 'Values form - defines a map/dictionary with typed values',\n $ref: '#'\n },\n discriminator: {\n description: 'Discriminator form - defines a tagged union',\n type: 'string'\n },\n mapping: {\n description: 'Mapping for discriminator form',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n ref: {\n description: 'Ref form - references a definition',\n type: 'string'\n },\n definitions: {\n description: 'Top-level definitions for reusable schemas',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n nullable: {\n description: 'Allow null values',\n type: 'boolean'\n },\n metadata: {\n description: 'Custom metadata for documentation',\n type: 'object'\n },\n additionalProperties: {\n description: 'Allow additional properties (properties form only)',\n type: 'boolean'\n }\n }\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["anthropic_exports", "__export", "convertSignalToAnthropicSchema", "convertToAnthropicSchema", "__toCommonJS", "import_jtd", "INTEGER_TYPES", "formatInstancePath", "instancePath", "p", "resolveSchemaParent", "schema", "schemaPath", "current", "i", "resolveInstanceValue", "value", "key", "formatValidationError", "error", "path", "lastKey", "jtdType", "enumValues", "discValue", "validateJsonAgainstJTD", "definitions", "defs", "schemaForValidation", "jtdValidate", "MAX_VALIDATION_DEPTH", "MAX_VALIDATION_ERRORS", "err", "MAX_VALIDATION_DEPTH", "MAX_VALIDATION_ERRORS", "MAX_REF_DEPTH", "INTEGER_BOUNDS", "FLOAT32_BOUNDS", "isUnstructuredSchema", "schema", "isRootUnstructured", "defs", "resolved", "depth", "target", "collectRefsInSchema", "refs", "v", "detectCircularRefs", "color", "name", "dfs", "ref", "result", "cycle", "appendToDescription", "text", "METADATA_KNOWN_KEYS", "applyMetadata", "meta", "descParts", "titleCandidate", "descText", "extras", "key", "value", "newDesc", "convertNode", "isNullable", "refName", "jtdType", "intBounds", "required", "propSchema", "valueSchema", "discKey", "mapping", "variants", "tag", "variantSchema", "variantOut", "INTEGER_TYPE_SET", "coerceToJTD", "item", "obj", "k", "entry", "rec", "dataStr", "parsed", "convertToAnthropicSchema", "jtdSchema", "cycleNode", "strict", "anthropicDefs", "defSchema", "anthropicJson", "coerced", "errors", "validateJsonAgainstJTD", "convertMimeFormat", "mimeType", "convertSingleFormat", "format", "convertSignalToAnthropicSchema", "descriptor", "formats", "signalName", "isOptional", "parts", "formatConverters", "wrapperProps", "i", "fmt", "conv", "existing", "keys", "f", "baseDesc", "guidance", "selected"]
|
|
7
|
+
}
|
package/dist/cjs/cel.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var E=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var he=Object.prototype.hasOwnProperty;var be=(e,n)=>{for(var t in n)E(e,t,{get:n[t],enumerable:!0})},ve=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of ye(n))!he.call(e,i)&&i!==t&&E(e,i,{get:()=>n[i],enumerable:!(r=ge(n,i))||r.enumerable});return e};var Te=e=>ve(E({},"__esModule",{value:!0}),e);var Ve={};be(Ve,{CEL_DESCRIPTORS:()=>U,CEL_LANGUAGE_ID:()=>w,CEL_METHODS:()=>L,CUSTOM_FUNCS:()=>ne,CelScalar:()=>s.CelScalar,GLOBAL_FUNCTIONS:()=>$,TimestampSchema:()=>x.TimestampSchema,celFunc:()=>s.celFunc,celMethod:()=>s.celMethod,celOptions:()=>re,celRun:()=>s.run,celToNative:()=>D,evaluateExpression:()=>R,extractAccessPaths:()=>ie,extractHoverSegments:()=>je,extractLambdaBindings:()=>Ue,findOptionalSegments:()=>oe,formatDateWithPattern:()=>te,fuzzJTD:()=>h,generateCelSymbolTree:()=>Oe,generateTestPermutations:()=>se,generateTranslationsSymbolTree:()=>Ee,isCelError:()=>s.isCelError,isCelList:()=>s.isCelList,isCelMap:()=>s.isCelMap,isCelUint:()=>s.isCelUint,listType:()=>s.listType,objectType:()=>s.objectType,parseDotPath:()=>Me,parseGeneralDotPath:()=>ze,registerCelLanguage:()=>$e,resolveNode:()=>ce,resolveWithLambdas:()=>me,setInputVariables:()=>Ae,stringsExt:()=>z.strings,timestampFromDate:()=>x.timestampFromDate,timestampNow:()=>x.timestampNow,validateCelExpression:()=>Ie,validateCelExpressionSyntax:()=>ke});module.exports=Te(Ve);var s=require("@bufbuild/cel"),z=require("@bufbuild/cel/ext"),x=require("@bufbuild/protobuf/wkt");var M=require("jtd"),xe=10;function h(e,n,t=0){if(t>xe)return null;if(e.ref){let r=n?.[e.ref];return r?h(r,n,t+1):null}if(e.type)switch(e.type){case"string":return"Lorem ipsum";case"timestamp":return"2024-01-15T10:30:00Z";case"float32":case"float64":return 42.5;case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return BigInt(42);case"boolean":return!0;default:return null}if(e.enum)return e.enum[0]??null;if(e.elements)return[h(e.elements,n,t+1),h(e.elements,n,t+1)];if(e.values)return{key1:h(e.values,n,t+1)};if(e.properties||e.optionalProperties){let r={};if(e.properties)for(let[i,o]of Object.entries(e.properties))r[i]=h(o,n,t+1);if(e.optionalProperties)for(let[i,o]of Object.entries(e.optionalProperties))r[i]=h(o,n,t+1);return r}if(e.discriminator&&e.mapping){let r=Object.keys(e.mapping)[0];if(r){let i=e.mapping[r],o=h(i,n,t+1);return o[e.discriminator]=r,o}return null}return null}function J(e){return typeof e=="number"?e:typeof e=="bigint"?Number(e):(0,s.isCelUint)(e)?Number(e.value):null}function C(e,n){if(e===n)return!0;let t=(0,s.isCelUint)(e)?e.value:e,r=(0,s.isCelUint)(n)?n.value:n;return t===r}function Se(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function j(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e}function Je(e){return new Uint8Array(e)}var V=typeof Buffer<"u",we=V?e=>Buffer.from(e,"base64"):typeof Uint8Array.fromBase64=="function"?e=>Uint8Array.fromBase64(e):e=>Uint8Array.from(atob(e),n=>n.charCodeAt(0)),Ce=V?e=>Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("base64"):typeof Uint8Array.prototype.toBase64=="function"?e=>e.toBase64():e=>btoa(Array.from(e,n=>String.fromCharCode(n)).join(""));function B(e,n="utf-8"){if(Se(e))return j(e);let t=JSON.stringify(D(e));return n==="utf-8"||n==="utf8"?Je(new TextEncoder().encode(t)):V?new Uint8Array(Buffer.from(t,n)):Uint8Array.from(t,r=>r.charCodeAt(0))}function Y(e,n="utf-8"){let t=j(e);return JSON.parse(new TextDecoder(n).decode(t))}function Z(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var y=(0,s.listType)(s.CelScalar.DYN),{DYN:d,BOOL:q,INT:A}=s.CelScalar;function te(e,n){let t=e.getFullYear(),r=e.getMonth()+1,i=e.getDate(),o=e.getHours(),a=e.getMinutes(),l=e.getSeconds();return n.replace(/YYYY/g,String(t)).replace(/YY/g,String(t).slice(-2)).replace(/MM/g,String(r).padStart(2,"0")).replace(/DD/g,String(i).padStart(2,"0")).replace(/HH/g,String(o).padStart(2,"0")).replace(/mm/g,String(a).padStart(2,"0")).replace(/ss/g,String(l).padStart(2,"0"))}var ne=[(0,s.celFunc)("sum",[y],d,e=>{let n=0;for(let t of e){let r=J(t);r!==null&&(n+=r)}return n}),(0,s.celMethod)("sum",y,[],d,function(){let e=0;for(let n of this){let t=J(n);t!==null&&(e+=t)}return e}),(0,s.celFunc)("min",[y],d,e=>{let n=null;for(let t of e){let r=J(t);r!==null&&(n===null||r<n)&&(n=r)}return n??0}),(0,s.celMethod)("min",y,[],d,function(){let e=null;for(let n of this){let t=J(n);t!==null&&(e===null||t<e)&&(e=t)}return e??0}),(0,s.celFunc)("max",[y],d,e=>{let n=null;for(let t of e){let r=J(t);r!==null&&(n===null||r>n)&&(n=r)}return n??0}),(0,s.celMethod)("max",y,[],d,function(){let e=null;for(let n of this){let t=J(n);t!==null&&(e===null||t>e)&&(e=t)}return e??0}),(0,s.celFunc)("avg",[y],d,e=>{let n=0,t=0;for(let r of e){let i=J(r);i!==null&&(n+=i,t++)}return t>0?n/t:0}),(0,s.celMethod)("avg",y,[],d,function(){let e=0,n=0;for(let t of this){let r=J(t);r!==null&&(e+=r,n++)}return n>0?e/n:0}),(0,s.celFunc)("includes",[y,d],q,(e,n)=>{for(let t of e)if(C(t,n))return!0;return!1}),(0,s.celMethod)("includes",y,[d],q,function(e){for(let n of this)if(C(n,e))return!0;return!1}),(0,s.celFunc)("findIndex",[y,d],A,(e,n)=>{let t=0n;for(let r of e){if(C(r,n))return t;t++}return-1n}),(0,s.celMethod)("findIndex",y,[d],A,function(e){let n=0n;for(let t of this){if(C(t,e))return n;n++}return-1n}),(0,s.celFunc)("findLastIndex",[y,d],A,(e,n)=>{let t=[...e];for(let r=t.length-1;r>=0;r--)if(C(t[r],n))return BigInt(r);return-1n}),(0,s.celMethod)("findLastIndex",y,[d],A,function(e){let n=[...this];for(let t=n.length-1;t>=0;t--)if(C(n[t],e))return BigInt(t);return-1n}),(0,s.celFunc)("now",[],(0,s.objectType)(x.TimestampSchema),()=>(0,x.timestampNow)()),(0,s.celFunc)("lower",[s.CelScalar.STRING],s.CelScalar.STRING,e=>e.toLowerCase()),(0,s.celFunc)("upper",[s.CelScalar.STRING],s.CelScalar.STRING,e=>e.toUpperCase()),(0,s.celMethod)("lower",s.CelScalar.STRING,[],s.CelScalar.STRING,function(){return this.toLowerCase()}),(0,s.celMethod)("upper",s.CelScalar.STRING,[],s.CelScalar.STRING,function(){return this.toUpperCase()}),(0,s.celFunc)("base64decode",[s.CelScalar.STRING],d,e=>we(e)),(0,s.celFunc)("base64encode",[d],s.CelScalar.STRING,e=>Ce(j(e))),(0,s.celFunc)("encode",[d],d,e=>B(e)),(0,s.celFunc)("encode",[d,s.CelScalar.STRING],d,(e,n)=>B(e,n)),(0,s.celFunc)("decode",[d],d,e=>Y(e)),(0,s.celFunc)("decode",[d,s.CelScalar.STRING],d,(e,n)=>Y(e,n)),(0,s.celFunc)("htmlEscape",[s.CelScalar.STRING],s.CelScalar.STRING,e=>Z(e)),(0,s.celFunc)("attrEscape",[s.CelScalar.STRING],s.CelScalar.STRING,e=>Z(e)),(0,s.celMethod)("formatDate",(0,s.objectType)(x.TimestampSchema),[s.CelScalar.STRING],s.CelScalar.STRING,function(e){let n=this.message,t=Number(n.seconds)*1e3+Math.floor(n.nanos/1e6),r=new Date(t);return te(r,e)})],re={funcs:[...z.strings,...ne]};function D(e){if((0,s.isCelList)(e))return[...e].map(n=>D(n));if((0,s.isCelMap)(e)){let n={};for(let[t,r]of e)n[String(t)]=D(r);return n}return typeof e=="bigint"?Number(e):e}var W=1e4;function ie(e,n){let t=n.filter(u=>u.length>0&&/^\w+$/.test(u));if(t.length===0)return[];let r=[],o=t.map(u=>u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),a=new RegExp(`\\b(${o})(?:(?:\\.([a-zA-Z_]\\w*)|\\["([^"]+)"\\]|\\['([^']+)'\\])|(?=$|[^a-zA-Z_0-9.\\[]))`,"g"),l;for(;(l=a.exec(e))!==null;){let u=l[1],m=l[2]||l[3]||l[4];if(!m){r.push({variableName:u,path:[],fullPath:u});continue}let f=[m],c=l.index+l[0].length;for(;c<e.length;){let g=e.slice(c).match(/^\.([a-zA-Z_]\w*)/);if(g){let v=c+g[0].length;if(e[v]==="(")break;f.push(g[1]),c=v;continue}let S=e.slice(c).match(/^\["([^"]+)"\]|^\['([^']+)'\]/);if(S){f.push(S[1]||S[2]),c+=S[0].length;continue}break}let p=u+"."+f.join(".");r.push({variableName:u,path:f,fullPath:p})}return Ne(r)}function Ne(e){let n=new Map;for(let r of e){let i=n.get(r.variableName)||[];i.push(r),n.set(r.variableName,i)}let t=[];for(let[,r]of n){r.sort((o,a)=>a.path.length-o.path.length);let i=[];for(let o of r)i.some(l=>Pe(o,l))||i.push(o);t.push(...i)}return t}function Pe(e,n){if(e.variableName!==n.variableName||e.path.length>n.path.length)return!1;for(let t=0;t<e.path.length;t++)if(e.path[t]!==n.path[t])return!1;return!0}function oe(e,n,t){let r=[];if(t&&r.push({segmentIndex:-1,propertyName:"",isSignalOptional:!0}),!n||e.length===0)return r;let i=n;for(let o=0;o<e.length;o++){let a=e[o];if(!i)break;let l=i.optionalProperties,u=i.properties;if(l&&a in l)r.push({segmentIndex:o,propertyName:a,isSignalOptional:!1}),i=l[a];else if(u&&a in u)i=u[a];else break}return r}function se(e,n){let t=[],r={};for(let i of e)r[i.name]=h(i.schema,i.schema.definitions);t.push({bindings:r,description:"All properties present"});for(let i of n){let o=e.find(l=>l.name===i.variableName);if(!o)continue;let a=oe(i.path,o.schema,o.optional??!1);for(let l of a){let u=structuredClone(r);if(l.isSignalOptional&&l.segmentIndex===-1)delete u[i.variableName],t.push({bindings:u,description:`Variable '${i.variableName}' not bound`,unsetPath:i.variableName});else{let m=i.path.slice(0,l.segmentIndex+1);De(u[i.variableName],m);let f=`${i.variableName}.${m.join(".")}`;t.push({bindings:u,description:`Optional property '${l.propertyName}' unset`,unsetPath:f})}}}return t}function De(e,n){if(n.length===0||e===null||typeof e!="object")return;let t=e;for(let r=0;r<n.length-1;r++){if(t===null||typeof t!="object")return;t=t[n[r]]}t!==null&&typeof t=="object"&&delete t[n[n.length-1]]}function R(e,n){if(e.length>W)return{error:`Expression exceeds maximum length of ${W} characters`};try{let t={};for(let[i,o]of Object.entries(n))t[i]=o;let r=(0,s.run)(e,t,re);return(0,s.isCelError)(r)?{error:r.message}:{result:D(r)}}catch(t){return{error:t instanceof Error?t.message:String(t)}}}function Ie(e,n){let t=[];if(!e.trim())return{valid:!0};let r={};for(let u of n)r[u.name]=h(u.schema,u.schema.definitions);let i=R(e,r);if(i.error)return{valid:!1,errors:[{message:`Syntax error: ${i.error}`}]};let o=n.map(u=>u.name),a=ie(e,o);if(a.length===0)return{valid:!0};let l=se(n,a);for(let u=1;u<l.length;u++){let m=l[u],f=R(e,m.bindings);f.error&&t.push({message:`Expression fails when ${m.description}: ${f.error}`,path:m.unsetPath,isOptionalAccess:!0})}return t.length>0?{valid:!1,errors:t}:{valid:!0}}function ke(e,n){if(!e.trim())return{valid:!0};let t={};for(let i of n)t[i.name]=h(i.schema,i.schema.definitions);let r=R(e,t);return r.error?{valid:!1,errors:[{message:r.error}]}:{valid:!0}}var w="cel",$=[{name:"string",detail:"string(x) \u2192 string",documentation:"Convert value to string. Works on bool, int, uint, double, bytes, timestamp, duration.",params:["x"]},{name:"int",detail:"int(x) \u2192 int",documentation:"Convert value to integer. Works on uint, double, string, timestamp, duration.",params:["x"]},{name:"uint",detail:"uint(x) \u2192 uint",documentation:"Convert value to unsigned integer. Works on int, double, string.",params:["x"]},{name:"double",detail:"double(x) \u2192 double",documentation:"Convert value to double. Works on int, uint, string.",params:["x"]},{name:"bool",detail:"bool(x) \u2192 bool",documentation:'Convert value to boolean. String values: "true", "false", "t", "f", "1", "0".',params:["x"]},{name:"bytes",detail:"bytes(x) \u2192 bytes",documentation:"Convert value to bytes. String is UTF-8 encoded.",params:["x"]},{name:"timestamp",detail:"timestamp(x) \u2192 timestamp",documentation:"Convert value to timestamp. String must be RFC3339 format.",params:["x"]},{name:"duration",detail:"duration(x) \u2192 duration",documentation:'Convert value to duration. String format: "300s", "1.5h", "2m30s".',params:["x"]},{name:"type",detail:"type(x) \u2192 type",documentation:"Returns the type of the value.",params:["x"]},{name:"dyn",detail:"dyn(x) \u2192 dyn",documentation:"Identity function, returns the value unchanged.",params:["x"]},{name:"size",detail:"size(x) \u2192 int",documentation:"Returns size of string (codepoints), list, bytes, or map.",params:["x"]},{name:"has",detail:"has(x.field) \u2192 bool",documentation:"Check if field exists and is not null. Use to guard optional values.",params:["x.field"]},{name:"now",detail:"now() \u2192 timestamp",documentation:"Returns the current timestamp.",params:[]},{name:"strings.quote",detail:"strings.quote(s) \u2192 string",documentation:"Returns a quoted string with escape sequences.",params:["s"]},{name:"sum",detail:"sum(list) \u2192 number",documentation:"Sum of numeric list elements.",params:["list"]},{name:"min",detail:"min(list) \u2192 number",documentation:"Minimum value in a numeric list.",params:["list"]},{name:"max",detail:"max(list) \u2192 number",documentation:"Maximum value in a numeric list.",params:["list"]},{name:"avg",detail:"avg(list) \u2192 number",documentation:"Average of numeric list elements.",params:["list"]},{name:"includes",detail:"includes(list, element) \u2192 bool",documentation:"True if list contains element.",params:["list","element"]},{name:"findIndex",detail:"findIndex(list, element) \u2192 int",documentation:"Index of first occurrence, or -1.",params:["list","element"]},{name:"findLastIndex",detail:"findLastIndex(list, element) \u2192 int",documentation:"Index of last occurrence, or -1.",params:["list","element"]},{name:"lower",detail:"lower(s) \u2192 string",documentation:"Full Unicode lowercase.",params:["s"]},{name:"upper",detail:"upper(s) \u2192 string",documentation:"Full Unicode uppercase.",params:["s"]},{name:"base64decode",detail:"base64decode(s) \u2192 bytes",documentation:"Decode base64 string to bytes.",params:["s"]},{name:"base64encode",detail:"base64encode(data) \u2192 string",documentation:"Encode bytes to base64 string.",params:["data"]},{name:"encode",detail:"encode(value, encoding?) \u2192 bytes",documentation:"JSON-serialize any value to bytes. Default encoding: utf-8. If value is already bytes, passes through.",params:["value","encoding"]},{name:"decode",detail:"decode(data, encoding?) \u2192 dyn",documentation:"Parse JSON bytes to a value. Default encoding: utf-8.",params:["data","encoding"]},{name:"htmlEscape",detail:"htmlEscape(s) \u2192 string",documentation:"HTML-encode a string for safe insertion into HTML text content.",params:["s"]},{name:"attrEscape",detail:"attrEscape(s) \u2192 string",documentation:"HTML-encode a string for safe insertion into an HTML attribute value.",params:["s"]}],L=[{name:"contains",detail:".contains(substr) \u2192 bool",documentation:"True if string contains substr.",params:["substr"],receiverType:"string"},{name:"startsWith",detail:".startsWith(prefix) \u2192 bool",documentation:"True if string starts with prefix.",params:["prefix"],receiverType:"string"},{name:"endsWith",detail:".endsWith(suffix) \u2192 bool",documentation:"True if string ends with suffix.",params:["suffix"],receiverType:"string"},{name:"matches",detail:".matches(regex) \u2192 bool",documentation:"True if string matches RE2 regex pattern.",params:["regex"],receiverType:"string"},{name:"size",detail:".size() \u2192 int",documentation:"Returns number of Unicode codepoints in string.",params:[],receiverType:"string"},{name:"charAt",detail:".charAt(index) \u2192 string",documentation:"Returns character at index.",params:["index"],receiverType:"string"},{name:"indexOf",detail:".indexOf(substr, start?) \u2192 int",documentation:"Index of first occurrence of substr, or -1 if not found.",params:["substr","start"],receiverType:"string"},{name:"lastIndexOf",detail:".lastIndexOf(substr, start?) \u2192 int",documentation:"Index of last occurrence of substr, or -1 if not found.",params:["substr","start"],receiverType:"string"},{name:"lowerAscii",detail:".lowerAscii() \u2192 string",documentation:"Convert ASCII letters to lowercase (A-Z only).",params:[],receiverType:"string"},{name:"upperAscii",detail:".upperAscii() \u2192 string",documentation:"Convert ASCII letters to uppercase (a-z only).",params:[],receiverType:"string"},{name:"replace",detail:".replace(old, new, count?) \u2192 string",documentation:"Replace occurrences of old with new. If count specified, replaces at most count times.",params:["old","new","count"],receiverType:"string"},{name:"split",detail:".split(sep, count?) \u2192 list",documentation:"Split string by separator. If count specified, splits into at most count parts.",params:["sep","count"],receiverType:"string"},{name:"substring",detail:".substring(start, end?) \u2192 string",documentation:"Extract substring from start index to end index (exclusive).",params:["start","end"],receiverType:"string"},{name:"trim",detail:".trim() \u2192 string",documentation:"Remove leading and trailing Unicode whitespace.",params:[],receiverType:"string"},{name:"format",detail:".format(args) \u2192 string",documentation:"Format string with arguments. Placeholders: %s (string), %d (decimal), %f (float), %e (exponent), %x (hex), %o (octal), %b (binary).",params:["args"],receiverType:"string"},{name:"lower",detail:".lower() \u2192 string",documentation:"Lowercase string (full Unicode).",params:[],receiverType:"string"},{name:"upper",detail:".upper() \u2192 string",documentation:"Uppercase string (full Unicode).",params:[],receiverType:"string"},{name:"join",detail:".join(sep?) \u2192 string",documentation:"Join list elements into string with optional separator.",params:["sep"],receiverType:"list"},{name:"size",detail:".size() \u2192 int",documentation:"Number of elements in list.",params:[],receiverType:"list"},{name:"map",detail:".map(x, expr) \u2192 list",documentation:"Transform each element using expression.",params:["x","expr"],receiverType:"list"},{name:"filter",detail:".filter(x, predicate) \u2192 list",documentation:"Filter elements by predicate.",params:["x","predicate"],receiverType:"list"},{name:"all",detail:".all(x, predicate) \u2192 bool",documentation:"True if all elements match predicate.",params:["x","predicate"],receiverType:"list"},{name:"exists",detail:".exists(x, predicate) \u2192 bool",documentation:"True if any element matches predicate.",params:["x","predicate"],receiverType:"list"},{name:"exists_one",detail:".exists_one(x, predicate) \u2192 bool",documentation:"True if exactly one element matches predicate.",params:["x","predicate"],receiverType:"list"},{name:"sum",detail:".sum() \u2192 number",documentation:"Sum of numeric list elements.",params:[],receiverType:"list"},{name:"min",detail:".min() \u2192 number",documentation:"Minimum value in list.",params:[],receiverType:"list"},{name:"max",detail:".max() \u2192 number",documentation:"Maximum value in list.",params:[],receiverType:"list"},{name:"avg",detail:".avg() \u2192 number",documentation:"Average of list elements.",params:[],receiverType:"list"},{name:"includes",detail:".includes(element) \u2192 bool",documentation:"True if list contains element.",params:["element"],receiverType:"list"},{name:"findIndex",detail:".findIndex(element) \u2192 int",documentation:"First index of element, or -1.",params:["element"],receiverType:"list"},{name:"findLastIndex",detail:".findLastIndex(element) \u2192 int",documentation:"Last index of element, or -1.",params:["element"],receiverType:"list"},{name:"getFullYear",detail:".getFullYear(tz?) \u2192 int",documentation:"4-digit year. Optional timezone (IANA or fixed offset).",params:["tz"],receiverType:"timestamp"},{name:"getMonth",detail:".getMonth(tz?) \u2192 int",documentation:"Month (0-11). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getDate",detail:".getDate(tz?) \u2192 int",documentation:"Day of month (1-31). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getDayOfMonth",detail:".getDayOfMonth(tz?) \u2192 int",documentation:"Day of month (0-30). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getDayOfWeek",detail:".getDayOfWeek(tz?) \u2192 int",documentation:"Day of week (0=Sunday). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getDayOfYear",detail:".getDayOfYear(tz?) \u2192 int",documentation:"Day of year (0-365). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getHours",detail:".getHours(tz?) \u2192 int",documentation:"Hours (0-23). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getMinutes",detail:".getMinutes(tz?) \u2192 int",documentation:"Minutes (0-59). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getSeconds",detail:".getSeconds(tz?) \u2192 int",documentation:"Seconds (0-59). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getMilliseconds",detail:".getMilliseconds(tz?) \u2192 int",documentation:"Milliseconds (0-999). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"formatDate",detail:".formatDate(pattern) \u2192 string",documentation:"Format timestamp. Patterns: YYYY, YY, MM, DD, HH, mm, ss.",params:["pattern"],receiverType:"timestamp"},{name:"getSeconds",detail:".getSeconds() \u2192 int",documentation:"Total seconds in duration.",params:[],receiverType:"duration"},{name:"getMinutes",detail:".getMinutes() \u2192 int",documentation:"Total minutes in duration (seconds / 60).",params:[],receiverType:"duration"},{name:"getHours",detail:".getHours() \u2192 int",documentation:"Total hours in duration (seconds / 3600).",params:[],receiverType:"duration"},{name:"getMilliseconds",detail:".getMilliseconds() \u2192 int",documentation:"Milliseconds portion of duration.",params:[],receiverType:"duration"},{name:"size",detail:".size() \u2192 int",documentation:"Number of entries in map or bytes in buffer.",params:[],receiverType:"map"}],U=(()=>{let e=new Map;for(let n of $){let t=n.name.includes(".")?n.name.split(".")[1]:n.name;e.set(t,[n])}for(let n of L){let t=e.get(n.name);t?t.some(r=>r.detail===n.detail)||t.push(n):e.set(n.name,[n])}return e})(),P=[];function Ae(e){P=e}function k(e,n){return e.ref&&n?.[e.ref]?k(n[e.ref],n):e}function K(e){return e?.definitions}function O(e,n,t){if(!e||n.length===0)return e;let r=k(e,t),[i,...o]=n,a={...r.properties,...r.optionalProperties};if(i&&a[i])return O(a[i],o,t);if(r.discriminator&&r.mapping&&i){if(i===r.discriminator)return o.length===0?{enum:Object.keys(r.mapping)}:void 0;for(let l of Object.values(r.mapping)){let u={...l.properties,...l.optionalProperties};if(u[i])return O(u[i],o,t)}}}function X(e,n){let t=k(e,n);return t.type?t.type:t.enum?`enum(${t.enum.slice(0,3).join(", ")}${t.enum.length>3?"...":""})`:t.properties||t.optionalProperties?"object":t.elements?"list":t.values?"map":t.discriminator?`union(${t.discriminator})`:"any"}function Re(e,n){if(!e)return[];let t=k(e,n),r=[],i={...t.properties,...t.optionalProperties};for(let[o,a]of Object.entries(i))r.push({name:o,type:X(a,n)});if(t.discriminator&&t.mapping){let o=Object.keys(t.mapping);r.push({name:t.discriminator,type:o.join(" | ")});let a=new Set([t.discriminator]);for(let l of Object.values(t.mapping)){let u={...l.properties,...l.optionalProperties};for(let[m,f]of Object.entries(u))a.has(m)||(a.add(m),r.push({name:m,type:X(f,n)}))}}return r}function Q(e,n){if(!e)return!1;let t=k(e,n);return!!(t.properties||t.optionalProperties||t.discriminator&&t.mapping)}function ee(){let e=new Set,n=[];for(let t of L){let r=`${t.name}|${t.detail}`;e.has(r)||(e.add(r),n.push(t))}return n}function $e(e){e.languages.getLanguages().some(n=>n.id===w)||(e.languages.register({id:w}),e.languages.setLanguageConfiguration(w,{brackets:[["(",")"],["[","]"],["{","}"]],autoClosingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"},{open:'"',close:'"'},{open:"'",close:"'"}]}),e.languages.setMonarchTokensProvider(w,{keywords:["true","false","null","in"],builtins:$.map(n=>n.name.split(".")[0]),operators:["&&","||","!","==","!=","<=",">=","<",">","+","-","*","/","%","?",":"],tokenizer:{root:[[/"(?:[^"\\]|\\.)*"/,"string"],[/'(?:[^'\\]|\\.)*'/,"string"],[/\d+\.\d*([eE][-+]?\d+)?/,"number.float"],[/\d*\.\d+([eE][-+]?\d+)?/,"number.float"],[/\d+[eE][-+]?\d+/,"number.float"],[/0[xX][0-9a-fA-F]+[uU]?/,"number.hex"],[/\d+[uU]?/,"number"],[/\./,"delimiter","@afterDot"],[/[a-zA-Z_]\w*/,{cases:{"@keywords":"keyword","@builtins":"predefined","@default":"identifier"}}],[/&&|\|\||[!=]=|[<>]=?/,"operator"],[/[+\-*/%?:!]/,"operator"],[/[[\](){}]/,"@brackets"],[/,/,"delimiter"],[/\s+/,"white"]],afterDot:[[/[a-zA-Z_]\w*/,"variable.property","@pop"],[/\s+/,"white"],[/./,"@rematch","@pop"]]}}),e.languages.registerCompletionItemProvider(w,{triggerCharacters:["."],provideCompletionItems:(n,t)=>{let r=n.getValueInRange({startLineNumber:t.lineNumber,startColumn:1,endLineNumber:t.lineNumber,endColumn:t.column}),i=!1,o=!1;for(let c=0;c<r.length;c++){let p=r[c];if(p==="\\"){c++;continue}p==='"'&&!o&&(i=!i),p==="'"&&!i&&(o=!o)}if(i||o)return{suggestions:[]};let a=n.getWordUntilPosition(t),l={startLineNumber:t.lineNumber,startColumn:a.startColumn,endLineNumber:t.lineNumber,endColumn:a.endColumn},u=r.slice(0,r.length-a.word.length).match(/inputs\.(\w+(?:\.\w+)*)\.\s*$/);if(u){let c=u[1].split("."),p=c[0],g=c.slice(1),S=P.find(v=>v.name===p);if(S?.schema){let v=K(S.schema),F=O(S.schema,g,v),_=Re(F,v),G=_.map((T,b)=>{let de=O(F,[T.name],v),fe=Q(de,v);return{label:T.name,kind:fe?e.languages.CompletionItemKind.Module:e.languages.CompletionItemKind.Property,detail:T.type,documentation:`Property of inputs.${c.join(".")}`,insertText:T.name,range:l,sortText:String(b).padStart(3,"0")}}),H=ee();for(let T=0;T<H.length;T++){let b=H[T];G.push({label:b.name,kind:e.languages.CompletionItemKind.Method,detail:`${b.detail} (${b.receiverType})`,documentation:b.documentation,insertText:b.params.length>0?`${b.name}($0)`:`${b.name}()`,insertTextRules:b.params.length>0?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:l,sortText:String(_.length+T).padStart(3,"0")})}return{suggestions:G}}return{suggestions:[]}}if(/inputs\.\s*$/.test(r.slice(0,r.length-a.word.length)))return{suggestions:P.map((c,p)=>{let g=Q(c.schema,K(c.schema));return{label:c.name,kind:g?e.languages.CompletionItemKind.Module:e.languages.CompletionItemKind.Variable,detail:c.label||(g?"object":"Input variable"),documentation:`Access as inputs.${c.name}${g?" (has nested properties)":""}`,insertText:c.name,range:l,sortText:String(p).padStart(3,"0")}})};if(/\.\s*$/.test(r.slice(0,r.length-a.word.length)))return{suggestions:ee().map((p,g)=>({label:p.name,kind:e.languages.CompletionItemKind.Method,detail:`${p.detail} (${p.receiverType})`,documentation:p.documentation,insertText:p.params.length>0?`${p.name}($0)`:`${p.name}()`,insertTextRules:p.params.length>0?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:l,sortText:String(g).padStart(3,"0")}))};let m=[],f=0;m.push({label:"inputs",kind:e.languages.CompletionItemKind.Variable,detail:"object",documentation:"Access input signals (e.g., inputs.customerName)",insertText:"inputs.",range:l,sortText:String(f++).padStart(3,"0")});for(let c of P)m.push({label:`inputs.${c.name}`,kind:e.languages.CompletionItemKind.Variable,detail:c.label||"Input variable",documentation:`Access the "${c.name}" input signal`,insertText:`inputs.${c.name}`,range:l,sortText:String(f++).padStart(3,"0")});for(let c of $)m.push({label:c.name,kind:e.languages.CompletionItemKind.Function,detail:c.detail,documentation:c.documentation,insertText:c.params.length>0?`${c.name}($0)`:`${c.name}()`,insertTextRules:c.params.length>0?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:l,sortText:String(f++).padStart(3,"0")});return{suggestions:m}}}),e.languages.registerHoverProvider(w,{provideHover:(n,t)=>{let r=n.getWordAtPosition(t);if(!r)return null;let i=P.find(a=>a.name===r.word);if(i)return{range:{startLineNumber:t.lineNumber,startColumn:r.startColumn,endLineNumber:t.lineNumber,endColumn:r.endColumn},contents:[{value:`**inputs.${i.name}**${i.label?`
|
|
1
|
+
"use strict";var j=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var ye=Object.prototype.hasOwnProperty;var be=(e,n)=>{for(var t in n)j(e,t,{get:n[t],enumerable:!0})},ve=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of he(n))!ye.call(e,i)&&i!==t&&j(e,i,{get:()=>n[i],enumerable:!(r=ge(n,i))||r.enumerable});return e};var xe=e=>ve(j({},"__esModule",{value:!0}),e);var Le={};be(Le,{CEL_DESCRIPTORS:()=>z,CEL_LANGUAGE_ID:()=>N,CEL_METHODS:()=>U,CUSTOM_FUNCS:()=>ne,CelScalar:()=>a.CelScalar,GLOBAL_FUNCTIONS:()=>$,TimestampSchema:()=>b.TimestampSchema,celFunc:()=>a.celFunc,celMethod:()=>a.celMethod,celOptions:()=>re,celRun:()=>a.run,celToNative:()=>D,evaluateExpression:()=>R,extractAccessPaths:()=>ie,extractHoverSegments:()=>Ve,extractLambdaBindings:()=>ze,findOptionalSegments:()=>oe,formatDateWithPattern:()=>te,fuzzJTD:()=>y,generateCelSymbolTree:()=>Oe,generateTestPermutations:()=>ae,generateTranslationsSymbolTree:()=>je,isCelError:()=>a.isCelError,isCelList:()=>a.isCelList,isCelMap:()=>a.isCelMap,isCelUint:()=>a.isCelUint,listType:()=>a.listType,objectType:()=>a.objectType,parseDotPath:()=>Me,parseGeneralDotPath:()=>Ee,registerCelLanguage:()=>$e,resolveNode:()=>ce,resolveWithLambdas:()=>me,setInputVariables:()=>Ae,stringsExt:()=>E.strings,timestampDate:()=>b.timestampDate,timestampFromDate:()=>b.timestampFromDate,timestampMs:()=>b.timestampMs,timestampNow:()=>b.timestampNow,validateCelExpression:()=>Ie,validateCelExpressionSyntax:()=>ke});module.exports=xe(Le);var a=require("@bufbuild/cel"),E=require("@bufbuild/cel/ext"),b=require("@bufbuild/protobuf/wkt");var M=require("jtd"),Te=10;function y(e,n,t=0){if(t>Te)return null;if(e.ref){let r=n?.[e.ref];return r?y(r,n,t+1):null}if(e.type)switch(e.type){case"string":return"Lorem ipsum";case"timestamp":return"2024-01-15T10:30:00Z";case"float32":case"float64":return 42.5;case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return BigInt(42);case"boolean":return!0;default:return null}if(e.enum)return e.enum[0]??null;if(e.elements)return[y(e.elements,n,t+1),y(e.elements,n,t+1)];if(e.values)return{key1:y(e.values,n,t+1)};if(e.properties||e.optionalProperties){let r={};if(e.properties)for(let[i,o]of Object.entries(e.properties))r[i]=y(o,n,t+1);if(e.optionalProperties)for(let[i,o]of Object.entries(e.optionalProperties))r[i]=y(o,n,t+1);return r}if(e.discriminator&&e.mapping){let r=Object.keys(e.mapping)[0];if(r){let i=e.mapping[r],o=y(i,n,t+1);return o[e.discriminator]=r,o}return null}return null}function w(e){return typeof e=="number"?e:typeof e=="bigint"?Number(e):(0,a.isCelUint)(e)?Number(e.value):null}function J(e,n){if(e===n)return!0;let t=(0,a.isCelUint)(e)?e.value:e,r=(0,a.isCelUint)(n)?n.value:n;return t===r}function Se(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function V(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e}function we(e){return new Uint8Array(e)}var L=typeof Buffer<"u",Ne=L?e=>Buffer.from(e,"base64"):typeof Uint8Array.fromBase64=="function"?e=>Uint8Array.fromBase64(e):e=>Uint8Array.from(atob(e),n=>n.charCodeAt(0)),Je=L?e=>Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("base64"):typeof Uint8Array.prototype.toBase64=="function"?e=>e.toBase64():e=>btoa(Array.from(e,n=>String.fromCharCode(n)).join(""));function G(e,n="utf-8"){if(Se(e))return V(e);let t=JSON.stringify(D(e));return n==="utf-8"||n==="utf8"?we(new TextEncoder().encode(t)):L?new Uint8Array(Buffer.from(t,n)):Uint8Array.from(t,r=>r.charCodeAt(0))}function Y(e,n="utf-8"){let t=V(e);return JSON.parse(new TextDecoder(n).decode(t))}function Z(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var h=(0,a.listType)(a.CelScalar.DYN),{DYN:d,BOOL:q,INT:A}=a.CelScalar;function te(e,n){let t=e.getFullYear(),r=e.getMonth()+1,i=e.getDate(),o=e.getHours(),s=e.getMinutes(),l=e.getSeconds();return n.replace(/YYYY/g,String(t)).replace(/YY/g,String(t).slice(-2)).replace(/MM/g,String(r).padStart(2,"0")).replace(/DD/g,String(i).padStart(2,"0")).replace(/HH/g,String(o).padStart(2,"0")).replace(/mm/g,String(s).padStart(2,"0")).replace(/ss/g,String(l).padStart(2,"0"))}var ne=[(0,a.celFunc)("sum",[h],d,e=>{let n=0;for(let t of e){let r=w(t);r!==null&&(n+=r)}return n}),(0,a.celMethod)("sum",h,[],d,function(){let e=0;for(let n of this){let t=w(n);t!==null&&(e+=t)}return e}),(0,a.celFunc)("min",[h],d,e=>{let n=null;for(let t of e){let r=w(t);r!==null&&(n===null||r<n)&&(n=r)}return n??0}),(0,a.celMethod)("min",h,[],d,function(){let e=null;for(let n of this){let t=w(n);t!==null&&(e===null||t<e)&&(e=t)}return e??0}),(0,a.celFunc)("max",[h],d,e=>{let n=null;for(let t of e){let r=w(t);r!==null&&(n===null||r>n)&&(n=r)}return n??0}),(0,a.celMethod)("max",h,[],d,function(){let e=null;for(let n of this){let t=w(n);t!==null&&(e===null||t>e)&&(e=t)}return e??0}),(0,a.celFunc)("avg",[h],d,e=>{let n=0,t=0;for(let r of e){let i=w(r);i!==null&&(n+=i,t++)}return t>0?n/t:0}),(0,a.celMethod)("avg",h,[],d,function(){let e=0,n=0;for(let t of this){let r=w(t);r!==null&&(e+=r,n++)}return n>0?e/n:0}),(0,a.celFunc)("includes",[h,d],q,(e,n)=>{for(let t of e)if(J(t,n))return!0;return!1}),(0,a.celMethod)("includes",h,[d],q,function(e){for(let n of this)if(J(n,e))return!0;return!1}),(0,a.celFunc)("findIndex",[h,d],A,(e,n)=>{let t=0n;for(let r of e){if(J(r,n))return t;t++}return-1n}),(0,a.celMethod)("findIndex",h,[d],A,function(e){let n=0n;for(let t of this){if(J(t,e))return n;n++}return-1n}),(0,a.celFunc)("findLastIndex",[h,d],A,(e,n)=>{let t=[...e];for(let r=t.length-1;r>=0;r--)if(J(t[r],n))return BigInt(r);return-1n}),(0,a.celMethod)("findLastIndex",h,[d],A,function(e){let n=[...this];for(let t=n.length-1;t>=0;t--)if(J(n[t],e))return BigInt(t);return-1n}),(0,a.celFunc)("now",[],(0,a.objectType)(b.TimestampSchema),()=>(0,b.timestampNow)()),(0,a.celFunc)("lower",[a.CelScalar.STRING],a.CelScalar.STRING,e=>e.toLowerCase()),(0,a.celFunc)("upper",[a.CelScalar.STRING],a.CelScalar.STRING,e=>e.toUpperCase()),(0,a.celMethod)("lower",a.CelScalar.STRING,[],a.CelScalar.STRING,function(){return this.toLowerCase()}),(0,a.celMethod)("upper",a.CelScalar.STRING,[],a.CelScalar.STRING,function(){return this.toUpperCase()}),(0,a.celFunc)("base64decode",[a.CelScalar.STRING],d,e=>Ne(e)),(0,a.celFunc)("base64encode",[d],a.CelScalar.STRING,e=>Je(V(e))),(0,a.celFunc)("encode",[d],d,e=>G(e)),(0,a.celFunc)("encode",[d,a.CelScalar.STRING],d,(e,n)=>G(e,n)),(0,a.celFunc)("decode",[d],d,e=>Y(e)),(0,a.celFunc)("decode",[d,a.CelScalar.STRING],d,(e,n)=>Y(e,n)),(0,a.celFunc)("htmlEscape",[a.CelScalar.STRING],a.CelScalar.STRING,e=>Z(e)),(0,a.celFunc)("attrEscape",[a.CelScalar.STRING],a.CelScalar.STRING,e=>Z(e)),(0,a.celMethod)("formatDate",(0,a.objectType)(b.TimestampSchema),[a.CelScalar.STRING],a.CelScalar.STRING,function(e){let n=this.message,t=Number(n.seconds)*1e3+Math.floor(n.nanos/1e6),r=new Date(t);return te(r,e)})],re={funcs:[...E.strings,...ne]};function D(e){if((0,a.isCelList)(e))return[...e].map(n=>D(n));if((0,a.isCelMap)(e)){let n={};for(let[t,r]of e)n[String(t)]=D(r);return n}return typeof e=="bigint"?Number(e):e}var W=1e4;function ie(e,n){let t=n.filter(u=>u.length>0&&/^\w+$/.test(u));if(t.length===0)return[];let r=[],o=t.map(u=>u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),s=new RegExp(`\\b(${o})(?:(?:\\.([a-zA-Z_]\\w*)|\\["([^"]+)"\\]|\\['([^']+)'\\])|(?=$|[^a-zA-Z_0-9.\\[]))`,"g"),l;for(;(l=s.exec(e))!==null;){let u=l[1],m=l[2]||l[3]||l[4];if(!m){r.push({variableName:u,path:[],fullPath:u});continue}let f=[m],c=l.index+l[0].length;for(;c<e.length;){let g=e.slice(c).match(/^\.([a-zA-Z_]\w*)/);if(g){let x=c+g[0].length;if(e[x]==="(")break;f.push(g[1]),c=x;continue}let S=e.slice(c).match(/^\["([^"]+)"\]|^\['([^']+)'\]/);if(S){f.push(S[1]||S[2]),c+=S[0].length;continue}break}let p=u+"."+f.join(".");r.push({variableName:u,path:f,fullPath:p})}return Ce(r)}function Ce(e){let n=new Map;for(let r of e){let i=n.get(r.variableName)||[];i.push(r),n.set(r.variableName,i)}let t=[];for(let[,r]of n){r.sort((o,s)=>s.path.length-o.path.length);let i=[];for(let o of r)i.some(l=>Pe(o,l))||i.push(o);t.push(...i)}return t}function Pe(e,n){if(e.variableName!==n.variableName||e.path.length>n.path.length)return!1;for(let t=0;t<e.path.length;t++)if(e.path[t]!==n.path[t])return!1;return!0}function oe(e,n,t){let r=[];if(t&&r.push({segmentIndex:-1,propertyName:"",isSignalOptional:!0}),!n||e.length===0)return r;let i=n;for(let o=0;o<e.length;o++){let s=e[o];if(!i)break;let l=i.optionalProperties,u=i.properties;if(l&&s in l)r.push({segmentIndex:o,propertyName:s,isSignalOptional:!1}),i=l[s];else if(u&&s in u)i=u[s];else break}return r}function ae(e,n){let t=[],r={};for(let i of e)r[i.name]=y(i.schema,i.schema.definitions);t.push({bindings:r,description:"All properties present"});for(let i of n){let o=e.find(l=>l.name===i.variableName);if(!o)continue;let s=oe(i.path,o.schema,o.optional??!1);for(let l of s){let u=structuredClone(r);if(l.isSignalOptional&&l.segmentIndex===-1)delete u[i.variableName],t.push({bindings:u,description:`Variable '${i.variableName}' not bound`,unsetPath:i.variableName});else{let m=i.path.slice(0,l.segmentIndex+1);De(u[i.variableName],m);let f=`${i.variableName}.${m.join(".")}`;t.push({bindings:u,description:`Optional property '${l.propertyName}' unset`,unsetPath:f})}}}return t}function De(e,n){if(n.length===0||e===null||typeof e!="object")return;let t=e;for(let r=0;r<n.length-1;r++){if(t===null||typeof t!="object")return;t=t[n[r]]}t!==null&&typeof t=="object"&&delete t[n[n.length-1]]}function R(e,n){if(e.length>W)return{error:`Expression exceeds maximum length of ${W} characters`};try{let t={};for(let[i,o]of Object.entries(n))t[i]=o;let r=(0,a.run)(e,t,re);return(0,a.isCelError)(r)?{error:r.message}:{result:D(r)}}catch(t){return{error:t instanceof Error?t.message:String(t)}}}function Ie(e,n){let t=[];if(!e.trim())return{valid:!0};let r={};for(let u of n)r[u.name]=y(u.schema,u.schema.definitions);let i=R(e,r);if(i.error)return{valid:!1,errors:[{message:`Syntax error: ${i.error}`}]};let o=n.map(u=>u.name),s=ie(e,o);if(s.length===0)return{valid:!0};let l=ae(n,s);for(let u=1;u<l.length;u++){let m=l[u],f=R(e,m.bindings);f.error&&t.push({message:`Expression fails when ${m.description}: ${f.error}`,path:m.unsetPath,isOptionalAccess:!0})}return t.length>0?{valid:!1,errors:t}:{valid:!0}}function ke(e,n){if(!e.trim())return{valid:!0};let t={};for(let i of n)t[i.name]=y(i.schema,i.schema.definitions);let r=R(e,t);return r.error?{valid:!1,errors:[{message:r.error}]}:{valid:!0}}var N="cel",$=[{name:"string",detail:"string(x) \u2192 string",documentation:"Convert value to string. Works on bool, int, uint, double, bytes, timestamp, duration.",params:["x"]},{name:"int",detail:"int(x) \u2192 int",documentation:"Convert value to integer. Works on uint, double, string, timestamp, duration.",params:["x"]},{name:"uint",detail:"uint(x) \u2192 uint",documentation:"Convert value to unsigned integer. Works on int, double, string.",params:["x"]},{name:"double",detail:"double(x) \u2192 double",documentation:"Convert value to double. Works on int, uint, string.",params:["x"]},{name:"bool",detail:"bool(x) \u2192 bool",documentation:'Convert value to boolean. String values: "true", "false", "t", "f", "1", "0".',params:["x"]},{name:"bytes",detail:"bytes(x) \u2192 bytes",documentation:"Convert value to bytes. String is UTF-8 encoded.",params:["x"]},{name:"timestamp",detail:"timestamp(x) \u2192 timestamp",documentation:"Convert value to timestamp. String must be RFC3339 format.",params:["x"]},{name:"duration",detail:"duration(x) \u2192 duration",documentation:'Convert value to duration. String format: "300s", "1.5h", "2m30s".',params:["x"]},{name:"type",detail:"type(x) \u2192 type",documentation:"Returns the type of the value.",params:["x"]},{name:"dyn",detail:"dyn(x) \u2192 dyn",documentation:"Identity function, returns the value unchanged.",params:["x"]},{name:"size",detail:"size(x) \u2192 int",documentation:"Returns size of string (codepoints), list, bytes, or map.",params:["x"]},{name:"has",detail:"has(x.field) \u2192 bool",documentation:"Check if field exists and is not null. Use to guard optional values.",params:["x.field"]},{name:"now",detail:"now() \u2192 timestamp",documentation:"Returns the current timestamp.",params:[]},{name:"strings.quote",detail:"strings.quote(s) \u2192 string",documentation:"Returns a quoted string with escape sequences.",params:["s"]},{name:"sum",detail:"sum(list) \u2192 number",documentation:"Sum of numeric list elements.",params:["list"]},{name:"min",detail:"min(list) \u2192 number",documentation:"Minimum value in a numeric list.",params:["list"]},{name:"max",detail:"max(list) \u2192 number",documentation:"Maximum value in a numeric list.",params:["list"]},{name:"avg",detail:"avg(list) \u2192 number",documentation:"Average of numeric list elements.",params:["list"]},{name:"includes",detail:"includes(list, element) \u2192 bool",documentation:"True if list contains element.",params:["list","element"]},{name:"findIndex",detail:"findIndex(list, element) \u2192 int",documentation:"Index of first occurrence, or -1.",params:["list","element"]},{name:"findLastIndex",detail:"findLastIndex(list, element) \u2192 int",documentation:"Index of last occurrence, or -1.",params:["list","element"]},{name:"lower",detail:"lower(s) \u2192 string",documentation:"Full Unicode lowercase.",params:["s"]},{name:"upper",detail:"upper(s) \u2192 string",documentation:"Full Unicode uppercase.",params:["s"]},{name:"base64decode",detail:"base64decode(s) \u2192 bytes",documentation:"Decode base64 string to bytes.",params:["s"]},{name:"base64encode",detail:"base64encode(data) \u2192 string",documentation:"Encode bytes to base64 string.",params:["data"]},{name:"encode",detail:"encode(value, encoding?) \u2192 bytes",documentation:"JSON-serialize any value to bytes. Default encoding: utf-8. If value is already bytes, passes through.",params:["value","encoding"]},{name:"decode",detail:"decode(data, encoding?) \u2192 dyn",documentation:"Parse JSON bytes to a value. Default encoding: utf-8.",params:["data","encoding"]},{name:"htmlEscape",detail:"htmlEscape(s) \u2192 string",documentation:"HTML-encode a string for safe insertion into HTML text content.",params:["s"]},{name:"attrEscape",detail:"attrEscape(s) \u2192 string",documentation:"HTML-encode a string for safe insertion into an HTML attribute value.",params:["s"]}],U=[{name:"contains",detail:".contains(substr) \u2192 bool",documentation:"True if string contains substr.",params:["substr"],receiverType:"string"},{name:"startsWith",detail:".startsWith(prefix) \u2192 bool",documentation:"True if string starts with prefix.",params:["prefix"],receiverType:"string"},{name:"endsWith",detail:".endsWith(suffix) \u2192 bool",documentation:"True if string ends with suffix.",params:["suffix"],receiverType:"string"},{name:"matches",detail:".matches(regex) \u2192 bool",documentation:"True if string matches RE2 regex pattern.",params:["regex"],receiverType:"string"},{name:"size",detail:".size() \u2192 int",documentation:"Returns number of Unicode codepoints in string.",params:[],receiverType:"string"},{name:"charAt",detail:".charAt(index) \u2192 string",documentation:"Returns character at index.",params:["index"],receiverType:"string"},{name:"indexOf",detail:".indexOf(substr, start?) \u2192 int",documentation:"Index of first occurrence of substr, or -1 if not found.",params:["substr","start"],receiverType:"string"},{name:"lastIndexOf",detail:".lastIndexOf(substr, start?) \u2192 int",documentation:"Index of last occurrence of substr, or -1 if not found.",params:["substr","start"],receiverType:"string"},{name:"lowerAscii",detail:".lowerAscii() \u2192 string",documentation:"Convert ASCII letters to lowercase (A-Z only).",params:[],receiverType:"string"},{name:"upperAscii",detail:".upperAscii() \u2192 string",documentation:"Convert ASCII letters to uppercase (a-z only).",params:[],receiverType:"string"},{name:"replace",detail:".replace(old, new, count?) \u2192 string",documentation:"Replace occurrences of old with new. If count specified, replaces at most count times.",params:["old","new","count"],receiverType:"string"},{name:"split",detail:".split(sep, count?) \u2192 list",documentation:"Split string by separator. If count specified, splits into at most count parts.",params:["sep","count"],receiverType:"string"},{name:"substring",detail:".substring(start, end?) \u2192 string",documentation:"Extract substring from start index to end index (exclusive).",params:["start","end"],receiverType:"string"},{name:"trim",detail:".trim() \u2192 string",documentation:"Remove leading and trailing Unicode whitespace.",params:[],receiverType:"string"},{name:"format",detail:".format(args) \u2192 string",documentation:"Format string with arguments. Placeholders: %s (string), %d (decimal), %f (float), %e (exponent), %x (hex), %o (octal), %b (binary).",params:["args"],receiverType:"string"},{name:"lower",detail:".lower() \u2192 string",documentation:"Lowercase string (full Unicode).",params:[],receiverType:"string"},{name:"upper",detail:".upper() \u2192 string",documentation:"Uppercase string (full Unicode).",params:[],receiverType:"string"},{name:"join",detail:".join(sep?) \u2192 string",documentation:"Join list elements into string with optional separator.",params:["sep"],receiverType:"list"},{name:"size",detail:".size() \u2192 int",documentation:"Number of elements in list.",params:[],receiverType:"list"},{name:"map",detail:".map(x, expr) \u2192 list",documentation:"Transform each element using expression.",params:["x","expr"],receiverType:"list"},{name:"filter",detail:".filter(x, predicate) \u2192 list",documentation:"Filter elements by predicate.",params:["x","predicate"],receiverType:"list"},{name:"all",detail:".all(x, predicate) \u2192 bool",documentation:"True if all elements match predicate.",params:["x","predicate"],receiverType:"list"},{name:"exists",detail:".exists(x, predicate) \u2192 bool",documentation:"True if any element matches predicate.",params:["x","predicate"],receiverType:"list"},{name:"exists_one",detail:".exists_one(x, predicate) \u2192 bool",documentation:"True if exactly one element matches predicate.",params:["x","predicate"],receiverType:"list"},{name:"sum",detail:".sum() \u2192 number",documentation:"Sum of numeric list elements.",params:[],receiverType:"list"},{name:"min",detail:".min() \u2192 number",documentation:"Minimum value in list.",params:[],receiverType:"list"},{name:"max",detail:".max() \u2192 number",documentation:"Maximum value in list.",params:[],receiverType:"list"},{name:"avg",detail:".avg() \u2192 number",documentation:"Average of list elements.",params:[],receiverType:"list"},{name:"includes",detail:".includes(element) \u2192 bool",documentation:"True if list contains element.",params:["element"],receiverType:"list"},{name:"findIndex",detail:".findIndex(element) \u2192 int",documentation:"First index of element, or -1.",params:["element"],receiverType:"list"},{name:"findLastIndex",detail:".findLastIndex(element) \u2192 int",documentation:"Last index of element, or -1.",params:["element"],receiverType:"list"},{name:"getFullYear",detail:".getFullYear(tz?) \u2192 int",documentation:"4-digit year. Optional timezone (IANA or fixed offset).",params:["tz"],receiverType:"timestamp"},{name:"getMonth",detail:".getMonth(tz?) \u2192 int",documentation:"Month (0-11). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getDate",detail:".getDate(tz?) \u2192 int",documentation:"Day of month (1-31). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getDayOfMonth",detail:".getDayOfMonth(tz?) \u2192 int",documentation:"Day of month (0-30). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getDayOfWeek",detail:".getDayOfWeek(tz?) \u2192 int",documentation:"Day of week (0=Sunday). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getDayOfYear",detail:".getDayOfYear(tz?) \u2192 int",documentation:"Day of year (0-365). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getHours",detail:".getHours(tz?) \u2192 int",documentation:"Hours (0-23). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getMinutes",detail:".getMinutes(tz?) \u2192 int",documentation:"Minutes (0-59). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getSeconds",detail:".getSeconds(tz?) \u2192 int",documentation:"Seconds (0-59). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"getMilliseconds",detail:".getMilliseconds(tz?) \u2192 int",documentation:"Milliseconds (0-999). Optional timezone.",params:["tz"],receiverType:"timestamp"},{name:"formatDate",detail:".formatDate(pattern) \u2192 string",documentation:"Format timestamp. Patterns: YYYY, YY, MM, DD, HH, mm, ss.",params:["pattern"],receiverType:"timestamp"},{name:"getSeconds",detail:".getSeconds() \u2192 int",documentation:"Total seconds in duration.",params:[],receiverType:"duration"},{name:"getMinutes",detail:".getMinutes() \u2192 int",documentation:"Total minutes in duration (seconds / 60).",params:[],receiverType:"duration"},{name:"getHours",detail:".getHours() \u2192 int",documentation:"Total hours in duration (seconds / 3600).",params:[],receiverType:"duration"},{name:"getMilliseconds",detail:".getMilliseconds() \u2192 int",documentation:"Milliseconds portion of duration.",params:[],receiverType:"duration"},{name:"size",detail:".size() \u2192 int",documentation:"Number of entries in map or bytes in buffer.",params:[],receiverType:"map"}],z=(()=>{let e=new Map;for(let n of $){let t=n.name.includes(".")?n.name.split(".")[1]:n.name;e.set(t,[n])}for(let n of U){let t=e.get(n.name);t?t.some(r=>r.detail===n.detail)||t.push(n):e.set(n.name,[n])}return e})(),P=[];function Ae(e){P=e}function k(e,n){return e.ref&&n?.[e.ref]?k(n[e.ref],n):e}function K(e){return e?.definitions}function O(e,n,t){if(!e||n.length===0)return e;let r=k(e,t),[i,...o]=n,s={...r.properties,...r.optionalProperties};if(i&&s[i])return O(s[i],o,t);if(r.discriminator&&r.mapping&&i){if(i===r.discriminator)return o.length===0?{enum:Object.keys(r.mapping)}:void 0;for(let l of Object.values(r.mapping)){let u={...l.properties,...l.optionalProperties};if(u[i])return O(u[i],o,t)}}}function X(e,n){let t=k(e,n);return t.type?t.type:t.enum?`enum(${t.enum.slice(0,3).join(", ")}${t.enum.length>3?"...":""})`:t.properties||t.optionalProperties?"object":t.elements?"list":t.values?"map":t.discriminator?`union(${t.discriminator})`:"any"}function Re(e,n){if(!e)return[];let t=k(e,n),r=[],i={...t.properties,...t.optionalProperties};for(let[o,s]of Object.entries(i))r.push({name:o,type:X(s,n)});if(t.discriminator&&t.mapping){let o=Object.keys(t.mapping);r.push({name:t.discriminator,type:o.join(" | ")});let s=new Set([t.discriminator]);for(let l of Object.values(t.mapping)){let u={...l.properties,...l.optionalProperties};for(let[m,f]of Object.entries(u))s.has(m)||(s.add(m),r.push({name:m,type:X(f,n)}))}}return r}function Q(e,n){if(!e)return!1;let t=k(e,n);return!!(t.properties||t.optionalProperties||t.discriminator&&t.mapping)}function ee(){let e=new Set,n=[];for(let t of U){let r=`${t.name}|${t.detail}`;e.has(r)||(e.add(r),n.push(t))}return n}function $e(e){e.languages.getLanguages().some(n=>n.id===N)||(e.languages.register({id:N}),e.languages.setLanguageConfiguration(N,{brackets:[["(",")"],["[","]"],["{","}"]],autoClosingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"},{open:'"',close:'"'},{open:"'",close:"'"}]}),e.languages.setMonarchTokensProvider(N,{keywords:["true","false","null","in"],builtins:$.map(n=>n.name.split(".")[0]),operators:["&&","||","!","==","!=","<=",">=","<",">","+","-","*","/","%","?",":"],tokenizer:{root:[[/"(?:[^"\\]|\\.)*"/,"string"],[/'(?:[^'\\]|\\.)*'/,"string"],[/\d+\.\d*([eE][-+]?\d+)?/,"number.float"],[/\d*\.\d+([eE][-+]?\d+)?/,"number.float"],[/\d+[eE][-+]?\d+/,"number.float"],[/0[xX][0-9a-fA-F]+[uU]?/,"number.hex"],[/\d+[uU]?/,"number"],[/\./,"delimiter","@afterDot"],[/[a-zA-Z_]\w*/,{cases:{"@keywords":"keyword","@builtins":"predefined","@default":"identifier"}}],[/&&|\|\||[!=]=|[<>]=?/,"operator"],[/[+\-*/%?:!]/,"operator"],[/[[\](){}]/,"@brackets"],[/,/,"delimiter"],[/\s+/,"white"]],afterDot:[[/[a-zA-Z_]\w*/,"variable.property","@pop"],[/\s+/,"white"],[/./,"@rematch","@pop"]]}}),e.languages.registerCompletionItemProvider(N,{triggerCharacters:["."],provideCompletionItems:(n,t)=>{let r=n.getValueInRange({startLineNumber:t.lineNumber,startColumn:1,endLineNumber:t.lineNumber,endColumn:t.column}),i=!1,o=!1;for(let c=0;c<r.length;c++){let p=r[c];if(p==="\\"){c++;continue}p==='"'&&!o&&(i=!i),p==="'"&&!i&&(o=!o)}if(i||o)return{suggestions:[]};let s=n.getWordUntilPosition(t),l={startLineNumber:t.lineNumber,startColumn:s.startColumn,endLineNumber:t.lineNumber,endColumn:s.endColumn},u=r.slice(0,r.length-s.word.length).match(/inputs\.(\w+(?:\.\w+)*)\.\s*$/);if(u){let c=u[1].split("."),p=c[0],g=c.slice(1),S=P.find(x=>x.name===p);if(S?.schema){let x=K(S.schema),F=O(S.schema,g,x),_=Re(F,x),H=_.map((T,v)=>{let de=O(F,[T.name],x),fe=Q(de,x);return{label:T.name,kind:fe?e.languages.CompletionItemKind.Module:e.languages.CompletionItemKind.Property,detail:T.type,documentation:`Property of inputs.${c.join(".")}`,insertText:T.name,range:l,sortText:String(v).padStart(3,"0")}}),B=ee();for(let T=0;T<B.length;T++){let v=B[T];H.push({label:v.name,kind:e.languages.CompletionItemKind.Method,detail:`${v.detail} (${v.receiverType})`,documentation:v.documentation,insertText:v.params.length>0?`${v.name}($0)`:`${v.name}()`,insertTextRules:v.params.length>0?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:l,sortText:String(_.length+T).padStart(3,"0")})}return{suggestions:H}}return{suggestions:[]}}if(/inputs\.\s*$/.test(r.slice(0,r.length-s.word.length)))return{suggestions:P.map((c,p)=>{let g=Q(c.schema,K(c.schema));return{label:c.name,kind:g?e.languages.CompletionItemKind.Module:e.languages.CompletionItemKind.Variable,detail:c.label||(g?"object":"Input variable"),documentation:`Access as inputs.${c.name}${g?" (has nested properties)":""}`,insertText:c.name,range:l,sortText:String(p).padStart(3,"0")}})};if(/\.\s*$/.test(r.slice(0,r.length-s.word.length)))return{suggestions:ee().map((p,g)=>({label:p.name,kind:e.languages.CompletionItemKind.Method,detail:`${p.detail} (${p.receiverType})`,documentation:p.documentation,insertText:p.params.length>0?`${p.name}($0)`:`${p.name}()`,insertTextRules:p.params.length>0?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:l,sortText:String(g).padStart(3,"0")}))};let m=[],f=0;m.push({label:"inputs",kind:e.languages.CompletionItemKind.Variable,detail:"object",documentation:"Access input signals (e.g., inputs.customerName)",insertText:"inputs.",range:l,sortText:String(f++).padStart(3,"0")});for(let c of P)m.push({label:`inputs.${c.name}`,kind:e.languages.CompletionItemKind.Variable,detail:c.label||"Input variable",documentation:`Access the "${c.name}" input signal`,insertText:`inputs.${c.name}`,range:l,sortText:String(f++).padStart(3,"0")});for(let c of $)m.push({label:c.name,kind:e.languages.CompletionItemKind.Function,detail:c.detail,documentation:c.documentation,insertText:c.params.length>0?`${c.name}($0)`:`${c.name}()`,insertTextRules:c.params.length>0?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:l,sortText:String(f++).padStart(3,"0")});return{suggestions:m}}}),e.languages.registerHoverProvider(N,{provideHover:(n,t)=>{let r=n.getWordAtPosition(t);if(!r)return null;let i=P.find(s=>s.name===r.word);if(i)return{range:{startLineNumber:t.lineNumber,startColumn:r.startColumn,endLineNumber:t.lineNumber,endColumn:r.endColumn},contents:[{value:`**inputs.${i.name}**${i.label?`
|
|
2
2
|
|
|
3
|
-
${i.label}`:""}`}]};let o=
|
|
3
|
+
${i.label}`:""}`}]};let o=z.get(r.word);return o&&o.length>0?{range:{startLineNumber:t.lineNumber,startColumn:r.startColumn,endLineNumber:t.lineNumber,endColumn:r.endColumn},contents:o.map(s=>({value:`**${s.detail}**
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${s.documentation}`}))}:null}}),e.languages.registerSignatureHelpProvider(N,{signatureHelpTriggerCharacters:["(",","],provideSignatureHelp:(n,t)=>{let r=n.getValueInRange({startLineNumber:t.lineNumber,startColumn:1,endLineNumber:t.lineNumber,endColumn:t.column}),i=0,o=0,s=-1;for(let p=r.length-1;p>=0;p--){let g=r[p];if(g===")")i++;else if(g==="("){if(i===0){s=p;break}i--}else g===","&&i===0&&o++}if(s<0)return null;let u=r.slice(0,s).match(/([a-zA-Z_]\w*)\s*$/);if(!u)return null;let m=u[1],f=z.get(m);if(!f||f.length===0)return null;let c=f.filter(p=>p.params.length>0).map(p=>({label:p.detail,documentation:p.documentation,parameters:p.params.map(g=>({label:g}))}));return c.length===0?null:{value:{signatures:c,activeSignature:0,activeParameter:Math.min(o,c[0].parameters.length-1)},dispose(){}}}}))}var I="[*]";function se(e,n){return e.ref&&n?.[e.ref]?se(n[e.ref],n):e}function C(e,n){let t=se(e,n),r={},i;if(t.type)i=t.type;else if(t.enum)i=t.enum.map(o=>JSON.stringify(o)).join(" | ");else if(t.elements){let o=C(t.elements,n);r[I]=o,i=`${o.detail}[]`}else if(t.values){let o=C(t.values,n);r[I]=o,i=`map<${o.detail}>`}else if(t.properties||t.optionalProperties){let o=[];if(t.properties)for(let[s,l]of Object.entries(t.properties)){let u=C(l,n);r[s]=u,o.push(`${s}: ${u.detail}`)}if(t.optionalProperties)for(let[s,l]of Object.entries(t.optionalProperties)){let u=C(l,n);r[s]=u,o.push(`${s}?: ${u.detail}`)}i=`{ ${o.join(", ")} }`}else if(t.discriminator&&t.mapping){let o=Object.keys(t.mapping);r[t.discriminator]={detail:o.map(s=>JSON.stringify(s)).join(" | "),children:{}};for(let s of Object.values(t.mapping)){let l=C(s,n);for(let[u,m]of Object.entries(l.children))u in r||(r[u]=m)}i=`union(${t.discriminator}: ${o.join(" | ")})`}else i="any";return e.nullable&&(i+="?"),e.ref&&(i=`ref(${e.ref})`),{detail:i,children:r}}function Oe(e){let n={};for(let t of e){if(!t.name)continue;let r=t.accepts?.[0],i;r?.jtdSchema?i=C(r.jtdSchema,r.jtdSchema.definitions):r?.mimeType?i={detail:r.mimeType,children:{}}:i={detail:"any",children:{}},t.optional&&(i={...i,detail:i.detail+" | null"}),n[t.name]=i}return n}function le(e){let n={};for(let[r,i]of Object.entries(e))typeof i=="string"?n[r]={detail:"string",children:{}}:typeof i=="object"&&i!==null&&(n[r]=le(i));return{detail:`{ ${Object.entries(n).map(([r,i])=>`${r}: ${i.detail}`).join(", ")} }`,children:n}}function ue(e,n){for(let[t,r]of Object.entries(n))typeof r=="object"&&r!==null&&typeof e[t]=="object"&&e[t]!==null?ue(e[t],r):e[t]=r}function je(e){let n={};for(let t of Object.values(e))ue(n,t);return le(n)}function Me(e){let n=e.match(/\b(inputs|t)((?:\.[a-zA-Z_]\w*|\[[^\]]*\])*)\.\s*$/);if(!n)return null;let t=n[1],r=n[2],i=[t],o=0;for(;o<r.length;)if(r[o]==="."){o++;let s=r.substring(o).match(/^[a-zA-Z_]\w*/);s&&(i.push(s[0]),o+=s[0].length)}else if(r[o]==="["){let s=r.indexOf("]",o);if(s===-1)break;i.push(I),o=s+1}else o++;return i}function ce(e,n,t){if(n.length===0)return null;if(n[0]==="inputs"){if(n.length===1)return{detail:"Signal inputs",children:e};let r=e[n[1]];if(!r)return null;for(let i=2;i<n.length;i++)if(r=r.children[n[i]],!r)return null;return r}if(n[0]==="t"&&t){if(n.length===1)return t;let r=t.children[n[1]];if(!r)return null;for(let i=2;i<n.length;i++)if(r=r.children[n[i]],!r)return null;return r}return null}function pe(e){let n=[],t=e.match(/^[a-zA-Z_]\w*/);if(!t)return n;n.push(t[0]);let r=t[0].length;for(;r<e.length;)if(e[r]==="."){r++;let i=e.substring(r).match(/^[a-zA-Z_]\w*/);if(i)n.push(i[0]),r+=i[0].length;else break}else if(e[r]==="["){let i=e.indexOf("]",r);if(i===-1)break;n.push(I),r=i+1}else break;return n}function ze(e){let n=[],t=/([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*|\[[^\]]*\])*)\.(?:map|filter|all|exists_one|exists)\s*\(\s*([a-zA-Z_]\w*)\s*,/g,r;for(;(r=t.exec(e))!==null;){let i=pe(r[1]);i.length>0&&n.push({varName:r[2],collectionSegments:i})}return n}function Ee(e){let n=e.match(/\b([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*|\[[^\]]*\])*)\.\s*$/);if(!n)return null;let t=pe(n[1]);return t.length>0?t:null}function me(e,n,t,r){if(n.length===0)return null;let i=n[0];if(i==="inputs"||i==="t")return ce(e,n,r);for(let o=t.length-1;o>=0;o--){let s=t[o];if(s.varName===i){let l=me(e,s.collectionSegments,t,r);if(!l)return null;let u=l.children[I];if(!u)return null;let m=u;for(let f=1;f<n.length;f++)if(m=m.children[n[f]],!m)return null;return m}}return null}function Ve(e,n,t){let r=[],i=n-2;for(;i>=0&&e[i]===".";){i--;let o=i+1;for(;i>=0&&/[a-zA-Z_0-9]/.test(e[i]);)i--;let s=i+1,l=e.substring(s,o);if(/^[a-zA-Z_]\w*$/.test(l)&&l.length>0)r.unshift(l);else break}return r.push(t),r}0&&(module.exports={CEL_DESCRIPTORS,CEL_LANGUAGE_ID,CEL_METHODS,CUSTOM_FUNCS,CelScalar,GLOBAL_FUNCTIONS,TimestampSchema,celFunc,celMethod,celOptions,celRun,celToNative,evaluateExpression,extractAccessPaths,extractHoverSegments,extractLambdaBindings,findOptionalSegments,formatDateWithPattern,fuzzJTD,generateCelSymbolTree,generateTestPermutations,generateTranslationsSymbolTree,isCelError,isCelList,isCelMap,isCelUint,listType,objectType,parseDotPath,parseGeneralDotPath,registerCelLanguage,resolveNode,resolveWithLambdas,setInputVariables,stringsExt,timestampDate,timestampFromDate,timestampMs,timestampNow,validateCelExpression,validateCelExpressionSyntax});
|
|
6
6
|
//# sourceMappingURL=cel.cjs.map
|