@mochabug/adapt-sdk 0.2.6 → 0.2.7
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/cel/index.d.ts.map +1 -1
- package/dist/cjs/cel.cjs +2 -2
- package/dist/cjs/cel.cjs.map +3 -3
- package/dist/esm/cel.mjs +3 -3
- package/dist/esm/cel.mjs.map +3 -3
- package/package.json +1 -1
package/dist/esm/cel.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{celFunc as g,celMethod as v,run as oe,CelScalar as f,isCelError as se,isCelList as ae,isCelMap as le,isCelUint as $,listType as ue,objectType as j}from"@bufbuild/cel";import{strings as ce}from"@bufbuild/cel/ext";import{timestampFromDate as ze,timestampNow as pe,TimestampSchema as V}from"@bufbuild/protobuf/wkt";import{isSchema as Ae,isValidSchema as Re,validate as $e}from"jtd";var ie=10;function b(e,n,t=0){if(t>ie)return null;if(e.ref){let r=n?.[e.ref];return r?b(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[b(e.elements,n,t+1),b(e.elements,n,t+1)];if(e.values)return{key1:b(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]=b(o,n,t+1);if(e.optionalProperties)for(let[i,o]of Object.entries(e.optionalProperties))r[i]=b(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=b(i,n,t+1);return o[e.discriminator]=r,o}return null}return null}function S(e){return typeof e=="number"?e:typeof e=="bigint"?Number(e):$(e)?Number(e.value):null}function w(e,n){if(e===n)return!0;let t=$(e)?e.value:e,r=$(n)?n.value:n;return t===r}function me(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function U(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e}function de(e){return new Uint8Array(e)}var M=typeof Buffer<"u",fe=M?e=>Buffer.from(e,"base64"):typeof Uint8Array.fromBase64=="function"?e=>Uint8Array.fromBase64(e):e=>Uint8Array.from(atob(e),n=>n.charCodeAt(0)),ge=M?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 L(e,n="utf-8"){if(me(e))return U(e);let t=JSON.stringify(A(e));return n==="utf-8"||n==="utf8"?de(new TextEncoder().encode(t)):M?new Uint8Array(Buffer.from(t,n)):Uint8Array.from(t,r=>r.charCodeAt(0))}function F(e,n="utf-8"){let t=U(e);return JSON.parse(new TextDecoder(n).decode(t))}function _(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var h=ue(f.DYN),{DYN:m,BOOL:G,INT:k}=f;function ye(e,n){let t=e.getFullYear(),r=e.getMonth()+1,i=e.getDate(),o=e.getHours(),s=e.getMinutes(),a=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(a).padStart(2,"0"))}var he=[g("sum",[h],m,e=>{let n=0;for(let t of e){let r=S(t);r!==null&&(n+=r)}return n}),v("sum",h,[],m,function(){let e=0;for(let n of this){let t=S(n);t!==null&&(e+=t)}return e}),g("min",[h],m,e=>{let n=null;for(let t of e){let r=S(t);r!==null&&(n===null||r<n)&&(n=r)}return n??0}),v("min",h,[],m,function(){let e=null;for(let n of this){let t=S(n);t!==null&&(e===null||t<e)&&(e=t)}return e??0}),g("max",[h],m,e=>{let n=null;for(let t of e){let r=S(t);r!==null&&(n===null||r>n)&&(n=r)}return n??0}),v("max",h,[],m,function(){let e=null;for(let n of this){let t=S(n);t!==null&&(e===null||t>e)&&(e=t)}return e??0}),g("avg",[h],m,e=>{let n=0,t=0;for(let r of e){let i=S(r);i!==null&&(n+=i,t++)}return t>0?n/t:0}),v("avg",h,[],m,function(){let e=0,n=0;for(let t of this){let r=S(t);r!==null&&(e+=r,n++)}return n>0?e/n:0}),g("includes",[h,m],G,(e,n)=>{for(let t of e)if(w(t,n))return!0;return!1}),v("includes",h,[m],G,function(e){for(let n of this)if(w(n,e))return!0;return!1}),g("findIndex",[h,m],k,(e,n)=>{let t=0n;for(let r of e){if(w(r,n))return t;t++}return-1n}),v("findIndex",h,[m],k,function(e){let n=0n;for(let t of this){if(w(t,e))return n;n++}return-1n}),g("findLastIndex",[h,m],k,(e,n)=>{let t=[...e];for(let r=t.length-1;r>=0;r--)if(w(t[r],n))return BigInt(r);return-1n}),v("findLastIndex",h,[m],k,function(e){let n=[...this];for(let t=n.length-1;t>=0;t--)if(w(n[t],e))return BigInt(t);return-1n}),g("now",[],j(V),()=>pe()),g("lower",[f.STRING],f.STRING,e=>e.toLowerCase()),g("upper",[f.STRING],f.STRING,e=>e.toUpperCase()),v("lower",f.STRING,[],f.STRING,function(){return this.toLowerCase()}),v("upper",f.STRING,[],f.STRING,function(){return this.toUpperCase()}),g("base64decode",[f.STRING],m,e=>fe(e)),g("base64encode",[m],f.STRING,e=>ge(U(e))),g("encode",[m],m,e=>L(e)),g("encode",[m,f.STRING],m,(e,n)=>L(e,n)),g("decode",[m],m,e=>F(e)),g("decode",[m,f.STRING],m,(e,n)=>F(e,n)),g("htmlEscape",[f.STRING],f.STRING,e=>_(e)),g("attrEscape",[f.STRING],f.STRING,e=>_(e)),v("formatDate",j(V),[f.STRING],f.STRING,function(e){let n=this.message,t=Number(n.seconds)*1e3+Math.floor(n.nanos/1e6),r=new Date(t);return ye(r,e)})],be={funcs:[...ce,...he]};function A(e){if(ae(e))return[...e].map(n=>A(n));if(le(e)){let n={};for(let[t,r]of e)n[String(t)]=A(r);return n}return typeof e=="bigint"?Number(e):e}var H=1e4;function ve(e,n){let t=n.filter(l=>l.length>0&&/^\w+$/.test(l));if(t.length===0)return[];let r=[],o=t.map(l=>l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),s=new RegExp(`\\b(${o})(?:(?:\\.([a-zA-Z_]\\w*)|\\["([^"]+)"\\]|\\['([^']+)'\\])|(?=$|[^a-zA-Z_0-9.\\[]))`,"g"),a;for(;(a=s.exec(e))!==null;){let l=a[1],p=a[2]||a[3]||a[4];if(!p){r.push({variableName:l,path:[],fullPath:l});continue}let d=[p],u=a.index+a[0].length;for(;u<e.length;){let y=e.slice(u).match(/^\.([a-zA-Z_]\w*)/);if(y){let T=u+y[0].length;if(e[T]==="(")break;d.push(y[1]),u=T;continue}let x=e.slice(u).match(/^\["([^"]+)"\]|^\['([^']+)'\]/);if(x){d.push(x[1]||x[2]),u+=x[0].length;continue}break}let c=l+"."+d.join(".");r.push({variableName:l,path:d,fullPath:c})}return Te(r)}function Te(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(a=>xe(o,a))||i.push(o);t.push(...i)}return t}function xe(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 Se(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 a=i.optionalProperties,l=i.properties;if(a&&s in a)r.push({segmentIndex:o,propertyName:s,isSignalOptional:!1}),i=a[s];else if(l&&s in l)i=l[s];else break}return r}function Je(e,n){let t=[],r={};for(let i of e)r[i.name]=b(i.schema,i.schema.definitions);t.push({bindings:r,description:"All properties present"});for(let i of n){let o=e.find(a=>a.name===i.variableName);if(!o)continue;let s=Se(i.path,o.schema,o.optional??!1);for(let a of s){let l=structuredClone(r);if(a.isSignalOptional&&a.segmentIndex===-1)delete l[i.variableName],t.push({bindings:l,description:`Variable '${i.variableName}' not bound`,unsetPath:i.variableName});else{let p=i.path.slice(0,a.segmentIndex+1);we(l[i.variableName],p);let d=`${i.variableName}.${p.join(".")}`;t.push({bindings:l,description:`Optional property '${a.propertyName}' unset`,unsetPath:d})}}}return t}function we(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 O(e,n){if(e.length>H)return{error:`Expression exceeds maximum length of ${H} characters`};try{let t={};for(let[i,o]of Object.entries(n))t[i]=o;let r=oe(e,t,be);return se(r)?{error:r.message}:{result:A(r)}}catch(t){return{error:t instanceof Error?t.message:String(t)}}}function Ve(e,n){let t=[];if(!e.trim())return{valid:!0};let r={};for(let l of n)r[l.name]=b(l.schema,l.schema.definitions);let i=O(e,r);if(i.error)return{valid:!1,errors:[{message:`Syntax error: ${i.error}`}]};let o=n.map(l=>l.name),s=ve(e,o);if(s.length===0)return{valid:!0};let a=Je(n,s);for(let l=1;l<a.length;l++){let p=a[l],d=O(e,p.bindings);d.error&&t.push({message:`Expression fails when ${p.description}: ${d.error}`,path:p.unsetPath,isOptionalAccess:!0})}return t.length>0?{valid:!1,errors:t}:{valid:!0}}function Le(e,n){if(!e.trim())return{valid:!0};let t={};for(let i of n)t[i.name]=b(i.schema,i.schema.definitions);let r=O(e,t);return r.error?{valid:!1,errors:[{message:r.error}]}:{valid:!0}}var J="cel",E=[{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"]}],W=[{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"}],B=(()=>{let e=new Map;for(let n of E){let t=n.name.includes(".")?n.name.split(".")[1]:n.name;e.set(t,[n])}for(let n of W){let t=e.get(n.name);t?t.some(r=>r.detail===n.detail)||t.push(n):e.set(n.name,[n])}return e})(),N=[];function Fe(e){N=e}function D(e,n){return e.ref&&n?.[e.ref]?D(n[e.ref],n):e}function Y(e){return e?.definitions}function R(e,n,t){if(!e||n.length===0)return e;let r=D(e,t),[i,...o]=n,s={...r.properties,...r.optionalProperties};if(i&&s[i])return R(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 a of Object.values(r.mapping)){let l={...a.properties,...a.optionalProperties};if(l[i])return R(l[i],o,t)}}}function Z(e,n){let t=D(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 Ce(e,n){if(!e)return[];let t=D(e,n),r=[],i={...t.properties,...t.optionalProperties};for(let[o,s]of Object.entries(i))r.push({name:o,type:Z(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 a of Object.values(t.mapping)){let l={...a.properties,...a.optionalProperties};for(let[p,d]of Object.entries(l))s.has(p)||(s.add(p),r.push({name:p,type:Z(d,n)}))}}return r}function q(e,n){if(!e)return!1;let t=D(e,n);return!!(t.properties||t.optionalProperties||t.discriminator&&t.mapping)}function Ne(){let e=new Set,n=[];for(let t of W){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===J)||(e.languages.register({id:J}),e.languages.setLanguageConfiguration(J,{brackets:[["(",")"],["[","]"],["{","}"]],autoClosingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"},{open:'"',close:'"'},{open:"'",close:"'"}]}),e.languages.setMonarchTokensProvider(J,{keywords:["true","false","null","in"],builtins:E.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(J,{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 u=0;u<r.length;u++){let c=r[u];if(c==="\\"){u++;continue}c==='"'&&!o&&(i=!i),c==="'"&&!i&&(o=!o)}if(i||o)return{suggestions:[]};let s=n.getWordUntilPosition(t),a={startLineNumber:t.lineNumber,startColumn:s.startColumn,endLineNumber:t.lineNumber,endColumn:s.endColumn},l=r.slice(0,r.length-s.word.length).match(/inputs\.(\w+(?:\.\w+)*)\.\s*$/);if(l){let u=l[1].split("."),c=u[0],y=u.slice(1),x=N.find(T=>T.name===c);if(x?.schema){let T=Y(x.schema),z=R(x.schema,y,T);return{suggestions:Ce(z,T).map((I,te)=>{let ne=R(z,[I.name],T),re=q(ne,T);return{label:I.name,kind:re?e.languages.CompletionItemKind.Module:e.languages.CompletionItemKind.Property,detail:I.type,documentation:`Property of inputs.${u.join(".")}`,insertText:I.name,range:a,sortText:String(te).padStart(3,"0")}})}}return{suggestions:[]}}if(/inputs\.\s*$/.test(r.slice(0,r.length-s.word.length)))return{suggestions:N.map((u,c)=>{let y=q(u.schema,Y(u.schema));return{label:u.name,kind:y?e.languages.CompletionItemKind.Module:e.languages.CompletionItemKind.Variable,detail:u.label||(y?"object":"Input variable"),documentation:`Access as inputs.${u.name}${y?" (has nested properties)":""}`,insertText:u.name,range:a,sortText:String(c).padStart(3,"0")}})};if(/\.\s*$/.test(r.slice(0,r.length-s.word.length)))return{suggestions:Ne().map((c,y)=>({label:c.name,kind:e.languages.CompletionItemKind.Method,detail:`${c.detail} (${c.receiverType})`,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:a,sortText:String(y).padStart(3,"0")}))};let p=[],d=0;p.push({label:"inputs",kind:e.languages.CompletionItemKind.Variable,detail:"object",documentation:"Access input signals (e.g., inputs.customerName)",insertText:"inputs.",range:a,sortText:String(d++).padStart(3,"0")});for(let u of N)p.push({label:`inputs.${u.name}`,kind:e.languages.CompletionItemKind.Variable,detail:u.label||"Input variable",documentation:`Access the "${u.name}" input signal`,insertText:`inputs.${u.name}`,range:a,sortText:String(d++).padStart(3,"0")});for(let u of E)p.push({label:u.name,kind:e.languages.CompletionItemKind.Function,detail:u.detail,documentation:u.documentation,insertText:u.params.length>0?`${u.name}($0)`:`${u.name}()`,insertTextRules:u.params.length>0?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:a,sortText:String(d++).padStart(3,"0")});return{suggestions:p}}}),e.languages.registerHoverProvider(J,{provideHover:(n,t)=>{let r=n.getWordAtPosition(t);if(!r)return null;let i=N.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?`
|
|
1
|
+
import{celFunc as g,celMethod as T,run as ue,CelScalar as f,isCelError as ce,isCelList as pe,isCelMap as me,isCelUint as O,listType as de,objectType as _}from"@bufbuild/cel";import{strings as fe}from"@bufbuild/cel/ext";import{timestampFromDate as Ve,timestampNow as ge,TimestampSchema as G}from"@bufbuild/protobuf/wkt";import{isSchema as $e,isValidSchema as Oe,validate as Ee}from"jtd";var le=10;function b(e,n,t=0){if(t>le)return null;if(e.ref){let r=n?.[e.ref];return r?b(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[b(e.elements,n,t+1),b(e.elements,n,t+1)];if(e.values)return{key1:b(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]=b(o,n,t+1);if(e.optionalProperties)for(let[i,o]of Object.entries(e.optionalProperties))r[i]=b(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=b(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):O(e)?Number(e.value):null}function N(e,n){if(e===n)return!0;let t=O(e)?e.value:e,r=O(n)?n.value:n;return t===r}function ye(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function U(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e}function he(e){return new Uint8Array(e)}var z=typeof Buffer<"u",be=z?e=>Buffer.from(e,"base64"):typeof Uint8Array.fromBase64=="function"?e=>Uint8Array.fromBase64(e):e=>Uint8Array.from(atob(e),n=>n.charCodeAt(0)),ve=z?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 H(e,n="utf-8"){if(ye(e))return U(e);let t=JSON.stringify(R(e));return n==="utf-8"||n==="utf8"?he(new TextEncoder().encode(t)):z?new Uint8Array(Buffer.from(t,n)):Uint8Array.from(t,r=>r.charCodeAt(0))}function B(e,n="utf-8"){let t=U(e);return JSON.parse(new TextDecoder(n).decode(t))}function Y(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var h=de(f.DYN),{DYN:m,BOOL:Z,INT:A}=f;function Te(e,n){let t=e.getFullYear(),r=e.getMonth()+1,i=e.getDate(),o=e.getHours(),s=e.getMinutes(),a=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(a).padStart(2,"0"))}var xe=[g("sum",[h],m,e=>{let n=0;for(let t of e){let r=w(t);r!==null&&(n+=r)}return n}),T("sum",h,[],m,function(){let e=0;for(let n of this){let t=w(n);t!==null&&(e+=t)}return e}),g("min",[h],m,e=>{let n=null;for(let t of e){let r=w(t);r!==null&&(n===null||r<n)&&(n=r)}return n??0}),T("min",h,[],m,function(){let e=null;for(let n of this){let t=w(n);t!==null&&(e===null||t<e)&&(e=t)}return e??0}),g("max",[h],m,e=>{let n=null;for(let t of e){let r=w(t);r!==null&&(n===null||r>n)&&(n=r)}return n??0}),T("max",h,[],m,function(){let e=null;for(let n of this){let t=w(n);t!==null&&(e===null||t>e)&&(e=t)}return e??0}),g("avg",[h],m,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}),T("avg",h,[],m,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}),g("includes",[h,m],Z,(e,n)=>{for(let t of e)if(N(t,n))return!0;return!1}),T("includes",h,[m],Z,function(e){for(let n of this)if(N(n,e))return!0;return!1}),g("findIndex",[h,m],A,(e,n)=>{let t=0n;for(let r of e){if(N(r,n))return t;t++}return-1n}),T("findIndex",h,[m],A,function(e){let n=0n;for(let t of this){if(N(t,e))return n;n++}return-1n}),g("findLastIndex",[h,m],A,(e,n)=>{let t=[...e];for(let r=t.length-1;r>=0;r--)if(N(t[r],n))return BigInt(r);return-1n}),T("findLastIndex",h,[m],A,function(e){let n=[...this];for(let t=n.length-1;t>=0;t--)if(N(n[t],e))return BigInt(t);return-1n}),g("now",[],_(G),()=>ge()),g("lower",[f.STRING],f.STRING,e=>e.toLowerCase()),g("upper",[f.STRING],f.STRING,e=>e.toUpperCase()),T("lower",f.STRING,[],f.STRING,function(){return this.toLowerCase()}),T("upper",f.STRING,[],f.STRING,function(){return this.toUpperCase()}),g("base64decode",[f.STRING],m,e=>be(e)),g("base64encode",[m],f.STRING,e=>ve(U(e))),g("encode",[m],m,e=>H(e)),g("encode",[m,f.STRING],m,(e,n)=>H(e,n)),g("decode",[m],m,e=>B(e)),g("decode",[m,f.STRING],m,(e,n)=>B(e,n)),g("htmlEscape",[f.STRING],f.STRING,e=>Y(e)),g("attrEscape",[f.STRING],f.STRING,e=>Y(e)),T("formatDate",_(G),[f.STRING],f.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)})],Se={funcs:[...fe,...xe]};function R(e){if(pe(e))return[...e].map(n=>R(n));if(me(e)){let n={};for(let[t,r]of e)n[String(t)]=R(r);return n}return typeof e=="bigint"?Number(e):e}var q=1e4;function Je(e,n){let t=n.filter(l=>l.length>0&&/^\w+$/.test(l));if(t.length===0)return[];let r=[],o=t.map(l=>l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),s=new RegExp(`\\b(${o})(?:(?:\\.([a-zA-Z_]\\w*)|\\["([^"]+)"\\]|\\['([^']+)'\\])|(?=$|[^a-zA-Z_0-9.\\[]))`,"g"),a;for(;(a=s.exec(e))!==null;){let l=a[1],p=a[2]||a[3]||a[4];if(!p){r.push({variableName:l,path:[],fullPath:l});continue}let d=[p],u=a.index+a[0].length;for(;u<e.length;){let y=e.slice(u).match(/^\.([a-zA-Z_]\w*)/);if(y){let x=u+y[0].length;if(e[x]==="(")break;d.push(y[1]),u=x;continue}let J=e.slice(u).match(/^\["([^"]+)"\]|^\['([^']+)'\]/);if(J){d.push(J[1]||J[2]),u+=J[0].length;continue}break}let c=l+"."+d.join(".");r.push({variableName:l,path:d,fullPath:c})}return we(r)}function we(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(a=>Ce(o,a))||i.push(o);t.push(...i)}return t}function Ce(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 Ne(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 a=i.optionalProperties,l=i.properties;if(a&&s in a)r.push({segmentIndex:o,propertyName:s,isSignalOptional:!1}),i=a[s];else if(l&&s in l)i=l[s];else break}return r}function Pe(e,n){let t=[],r={};for(let i of e)r[i.name]=b(i.schema,i.schema.definitions);t.push({bindings:r,description:"All properties present"});for(let i of n){let o=e.find(a=>a.name===i.variableName);if(!o)continue;let s=Ne(i.path,o.schema,o.optional??!1);for(let a of s){let l=structuredClone(r);if(a.isSignalOptional&&a.segmentIndex===-1)delete l[i.variableName],t.push({bindings:l,description:`Variable '${i.variableName}' not bound`,unsetPath:i.variableName});else{let p=i.path.slice(0,a.segmentIndex+1);De(l[i.variableName],p);let d=`${i.variableName}.${p.join(".")}`;t.push({bindings:l,description:`Optional property '${a.propertyName}' unset`,unsetPath:d})}}}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 E(e,n){if(e.length>q)return{error:`Expression exceeds maximum length of ${q} characters`};try{let t={};for(let[i,o]of Object.entries(n))t[i]=o;let r=ue(e,t,Se);return ce(r)?{error:r.message}:{result:R(r)}}catch(t){return{error:t instanceof Error?t.message:String(t)}}}function Fe(e,n){let t=[];if(!e.trim())return{valid:!0};let r={};for(let l of n)r[l.name]=b(l.schema,l.schema.definitions);let i=E(e,r);if(i.error)return{valid:!1,errors:[{message:`Syntax error: ${i.error}`}]};let o=n.map(l=>l.name),s=Je(e,o);if(s.length===0)return{valid:!0};let a=Pe(n,s);for(let l=1;l<a.length;l++){let p=a[l],d=E(e,p.bindings);d.error&&t.push({message:`Expression fails when ${p.description}: ${d.error}`,path:p.unsetPath,isOptionalAccess:!0})}return t.length>0?{valid:!1,errors:t}:{valid:!0}}function _e(e,n){if(!e.trim())return{valid:!0};let t={};for(let i of n)t[i.name]=b(i.schema,i.schema.definitions);let r=E(e,t);return r.error?{valid:!1,errors:[{message:r.error}]}:{valid:!0}}var C="cel",M=[{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"]}],te=[{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"}],W=(()=>{let e=new Map;for(let n of M){let t=n.name.includes(".")?n.name.split(".")[1]:n.name;e.set(t,[n])}for(let n of te){let t=e.get(n.name);t?t.some(r=>r.detail===n.detail)||t.push(n):e.set(n.name,[n])}return e})(),D=[];function Ge(e){D=e}function k(e,n){return e.ref&&n?.[e.ref]?k(n[e.ref],n):e}function K(e){return e?.definitions}function $(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 $(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 a of Object.values(r.mapping)){let l={...a.properties,...a.optionalProperties};if(l[i])return $(l[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 Ie(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 a of Object.values(t.mapping)){let l={...a.properties,...a.optionalProperties};for(let[p,d]of Object.entries(l))s.has(p)||(s.add(p),r.push({name:p,type:X(d,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 te){let r=`${t.name}|${t.detail}`;e.has(r)||(e.add(r),n.push(t))}return n}function He(e){e.languages.getLanguages().some(n=>n.id===C)||(e.languages.register({id:C}),e.languages.setLanguageConfiguration(C,{brackets:[["(",")"],["[","]"],["{","}"]],autoClosingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"},{open:'"',close:'"'},{open:"'",close:"'"}]}),e.languages.setMonarchTokensProvider(C,{keywords:["true","false","null","in"],builtins:M.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(C,{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 u=0;u<r.length;u++){let c=r[u];if(c==="\\"){u++;continue}c==='"'&&!o&&(i=!i),c==="'"&&!i&&(o=!o)}if(i||o)return{suggestions:[]};let s=n.getWordUntilPosition(t),a={startLineNumber:t.lineNumber,startColumn:s.startColumn,endLineNumber:t.lineNumber,endColumn:s.endColumn},l=r.slice(0,r.length-s.word.length).match(/inputs\.(\w+(?:\.\w+)*)\.\s*$/);if(l){let u=l[1].split("."),c=u[0],y=u.slice(1),J=D.find(x=>x.name===c);if(J?.schema){let x=K(J.schema),j=$(J.schema,y,x),V=Ie(j,x),L=V.map((S,v)=>{let se=$(j,[S.name],x),ae=Q(se,x);return{label:S.name,kind:ae?e.languages.CompletionItemKind.Module:e.languages.CompletionItemKind.Property,detail:S.type,documentation:`Property of inputs.${u.join(".")}`,insertText:S.name,range:a,sortText:String(v).padStart(3,"0")}}),F=ee();for(let S=0;S<F.length;S++){let v=F[S];L.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:a,sortText:String(V.length+S).padStart(3,"0")})}return{suggestions:L}}return{suggestions:[]}}if(/inputs\.\s*$/.test(r.slice(0,r.length-s.word.length)))return{suggestions:D.map((u,c)=>{let y=Q(u.schema,K(u.schema));return{label:u.name,kind:y?e.languages.CompletionItemKind.Module:e.languages.CompletionItemKind.Variable,detail:u.label||(y?"object":"Input variable"),documentation:`Access as inputs.${u.name}${y?" (has nested properties)":""}`,insertText:u.name,range:a,sortText:String(c).padStart(3,"0")}})};if(/\.\s*$/.test(r.slice(0,r.length-s.word.length)))return{suggestions:ee().map((c,y)=>({label:c.name,kind:e.languages.CompletionItemKind.Method,detail:`${c.detail} (${c.receiverType})`,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:a,sortText:String(y).padStart(3,"0")}))};let p=[],d=0;p.push({label:"inputs",kind:e.languages.CompletionItemKind.Variable,detail:"object",documentation:"Access input signals (e.g., inputs.customerName)",insertText:"inputs.",range:a,sortText:String(d++).padStart(3,"0")});for(let u of D)p.push({label:`inputs.${u.name}`,kind:e.languages.CompletionItemKind.Variable,detail:u.label||"Input variable",documentation:`Access the "${u.name}" input signal`,insertText:`inputs.${u.name}`,range:a,sortText:String(d++).padStart(3,"0")});for(let u of M)p.push({label:u.name,kind:e.languages.CompletionItemKind.Function,detail:u.detail,documentation:u.documentation,insertText:u.params.length>0?`${u.name}($0)`:`${u.name}()`,insertTextRules:u.params.length>0?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:a,sortText:String(d++).padStart(3,"0")});return{suggestions:p}}}),e.languages.registerHoverProvider(C,{provideHover:(n,t)=>{let r=n.getWordAtPosition(t);if(!r)return null;let i=D.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=W.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
|
-
${s.documentation}`}))}:null}}),e.languages.registerSignatureHelpProvider(
|
|
5
|
+
${s.documentation}`}))}:null}}),e.languages.registerSignatureHelpProvider(C,{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 c=r.length-1;c>=0;c--){let y=r[c];if(y===")")i++;else if(y==="("){if(i===0){s=c;break}i--}else y===","&&i===0&&o++}if(s<0)return null;let l=r.slice(0,s).match(/([a-zA-Z_]\w*)\s*$/);if(!l)return null;let p=l[1],d=W.get(p);if(!d||d.length===0)return null;let u=d.filter(c=>c.params.length>0).map(c=>({label:c.detail,documentation:c.documentation,parameters:c.params.map(y=>({label:y}))}));return u.length===0?null:{value:{signatures:u,activeSignature:0,activeParameter:Math.min(o,u[0].parameters.length-1)},dispose(){}}}}))}var I="[*]";function ne(e,n){return e.ref&&n?.[e.ref]?ne(n[e.ref],n):e}function P(e,n){let t=ne(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=P(t.elements,n);r[I]=o,i=`${o.detail}[]`}else if(t.values){let o=P(t.values,n);r[I]=o,i=`map<${o.detail}>`}else if(t.properties||t.optionalProperties){let o=[];if(t.properties)for(let[s,a]of Object.entries(t.properties)){let l=P(a,n);r[s]=l,o.push(`${s}: ${l.detail}`)}if(t.optionalProperties)for(let[s,a]of Object.entries(t.optionalProperties)){let l=P(a,n);r[s]=l,o.push(`${s}?: ${l.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 a=P(s,n);for(let[l,p]of Object.entries(a.children))l in r||(r[l]=p)}i=`union(${t.discriminator}: ${o.join(" | ")})`}else i="any";return e.nullable&&(i+="?"),e.ref&&(i=`ref(${e.ref})`),{detail:i,children:r}}function Be(e){let n={};for(let t of e){if(!t.name)continue;let r=t.accepts?.[0],i;r?.jtdSchema?i=P(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 re(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]=re(i));return{detail:`{ ${Object.entries(n).map(([r,i])=>`${r}: ${i.detail}`).join(", ")} }`,children:n}}function ie(e,n){for(let[t,r]of Object.entries(n))typeof r=="object"&&r!==null&&typeof e[t]=="object"&&e[t]!==null?ie(e[t],r):e[t]=r}function Ye(e){let n={};for(let t of Object.values(e))ie(n,t);return re(n)}function Ze(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 ke(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 oe(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 qe(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=oe(r[1]);i.length>0&&n.push({varName:r[2],collectionSegments:i})}return n}function We(e){let n=e.match(/\b([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*|\[[^\]]*\])*)\.\s*$/);if(!n)return null;let t=oe(n[1]);return t.length>0?t:null}function Ae(e,n,t,r){if(n.length===0)return null;let i=n[0];if(i==="inputs"||i==="t")return ke(e,n,r);for(let o=t.length-1;o>=0;o--){let s=t[o];if(s.varName===i){let a=Ae(e,s.collectionSegments,t,r);if(!a)return null;let l=a.children[I];if(!l)return null;let p=l;for(let d=1;d<n.length;d++)if(p=p.children[n[d]],!p)return null;return p}}return null}function Ke(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,a=e.substring(s,o);if(/^[a-zA-Z_]\w*$/.test(a)&&a.length>0)r.unshift(a);else break}return r.push(t),r}export{W as CEL_DESCRIPTORS,C as CEL_LANGUAGE_ID,te as CEL_METHODS,xe as CUSTOM_FUNCS,f as CelScalar,M as GLOBAL_FUNCTIONS,G as TimestampSchema,g as celFunc,T as celMethod,Se as celOptions,ue as celRun,R as celToNative,E as evaluateExpression,Je as extractAccessPaths,Ke as extractHoverSegments,qe as extractLambdaBindings,Ne as findOptionalSegments,Te as formatDateWithPattern,b as fuzzJTD,Be as generateCelSymbolTree,Pe as generateTestPermutations,Ye as generateTranslationsSymbolTree,ce as isCelError,pe as isCelList,me as isCelMap,O as isCelUint,de as listType,_ as objectType,Ze as parseDotPath,We as parseGeneralDotPath,He as registerCelLanguage,ke as resolveNode,Ae as resolveWithLambdas,Ge as setInputVariables,fe as stringsExt,Ve as timestampFromDate,ge as timestampNow,Fe as validateCelExpression,_e as validateCelExpressionSyntax};
|
|
6
6
|
//# sourceMappingURL=cel.mjs.map
|