@dbml/parse 5.0.0 → 5.2.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/dbml-parse.js +9 -9
- package/dist/dbml-parse.mjs +2003 -1963
- package/dist/src/compiler.d.ts +3 -3
- package/dist/src/index.d.ts +1 -1
- package/dist/src/lib/analyzer/binder/elementBinder/indexes.d.ts +1 -0
- package/dist/src/lib/analyzer/binder/elementBinder/ref.d.ts +1 -0
- package/dist/src/lib/analyzer/binder/elementBinder/table.d.ts +10 -1
- package/dist/src/lib/analyzer/binder/elementBinder/tableGroup.d.ts +1 -0
- package/dist/src/lib/analyzer/binder/elementBinder/tablePartial.d.ts +3 -0
- package/dist/src/lib/analyzer/binder/types.d.ts +1 -0
- package/dist/src/lib/analyzer/utils.d.ts +2 -2
- package/dist/src/lib/parser/utils.d.ts +8 -2
- package/package.json +13 -8
package/dist/dbml-parse.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Wn=typeof global=="object"&&global&&global.Object===Object&&global,Ks=typeof self=="object"&&self&&self.Object===Object&&self,ge=Wn||Ks||Function("return this")(),Ne=ge.Symbol,Hn=Object.prototype,zs=Hn.hasOwnProperty,Ys=Hn.toString,Ke=Ne?Ne.toStringTag:void 0;function qs(e){var t=zs.call(e,Ke),n=e[Ke];try{e[Ke]=void 0;var s=!0}catch{}var r=Ys.call(e);return s&&(t?e[Ke]=n:delete e[Ke]),r}var Qs=Object.prototype,Js=Qs.toString;function Zs(e){return Js.call(e)}var er="[object Null]",tr="[object Undefined]",sn=Ne?Ne.toStringTag:void 0;function Xe(e){return e==null?e===void 0?tr:er:sn&&sn in Object(e)?qs(e):Zs(e)}function xe(e){return e!=null&&typeof e=="object"}var nr="[object Symbol]";function dt(e){return typeof e=="symbol"||xe(e)&&Xe(e)==nr}function Kn(e,t){for(var n=-1,s=e==null?0:e.length,r=Array(s);++n<s;)r[n]=t(e[n],n,e);return r}var pe=Array.isArray,rn=Ne?Ne.prototype:void 0,an=rn?rn.toString:void 0;function zn(e){if(typeof e=="string")return e;if(pe(e))return Kn(e,zn)+"";if(dt(e))return an?an.call(e):"";var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var sr=/\s/;function rr(e){for(var t=e.length;t--&&sr.test(e.charAt(t)););return t}var ir=/^\s+/;function ar(e){return e&&e.slice(0,rr(e)+1).replace(ir,"")}function Ge(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var on=NaN,or=/^[-+]0x[0-9a-f]+$/i,lr=/^0b[01]+$/i,cr=/^0o[0-7]+$/i,ur=parseInt;function hr(e){if(typeof e=="number")return e;if(dt(e))return on;if(Ge(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Ge(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=ar(e);var n=lr.test(e);return n||cr.test(e)?ur(e.slice(2),n?2:8):or.test(e)?on:+e}var ln=1/0,fr=17976931348623157e292;function pr(e){if(!e)return e===0?e:0;if(e=hr(e),e===ln||e===-ln){var t=e<0?-1:1;return t*fr}return e===e?e:0}function dr(e){var t=pr(e),n=t%1;return t===t?n?t-n:t:0}function Et(e){return e}var Er="[object AsyncFunction]",Nr="[object Function]",Tr="[object GeneratorFunction]",br="[object Proxy]";function Yn(e){if(!Ge(e))return!1;var t=Xe(e);return t==Nr||t==Tr||t==Er||t==br}var yt=ge["__core-js_shared__"],cn=function(){var e=/[^.]+$/.exec(yt&&yt.keys&&yt.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function mr(e){return!!cn&&cn in e}var Ir=Function.prototype,_r=Ir.toString;function Me(e){if(e!=null){try{return _r.call(e)}catch{}try{return e+""}catch{}}return""}var gr=/[\\^$.*+?()[\]{}|]/g,Ar=/^\[object .+?Constructor\]$/,Lr=Function.prototype,vr=Object.prototype,yr=Lr.toString,wr=vr.hasOwnProperty,Sr=RegExp("^"+yr.call(wr).replace(gr,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Pr(e){if(!Ge(e)||mr(e))return!1;var t=Yn(e)?Sr:Ar;return t.test(Me(e))}function Or(e,t){return e==null?void 0:e[t]}function Fe(e,t){var n=Or(e,t);return Pr(n)?n:void 0}var Pt=Fe(ge,"WeakMap");function xr(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var Dr=800,kr=16,Rr=Date.now;function Ur(e){var t=0,n=0;return function(){var s=Rr(),r=kr-(s-n);if(n=s,r>0){if(++t>=Dr)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Mr(e){return function(){return e}}var un=function(){try{var e=Fe(Object,"defineProperty");return e({},"",{}),e}catch{}}(),Fr=un?function(e,t){return un(e,"toString",{configurable:!0,enumerable:!1,value:Mr(t),writable:!0})}:Et,Br=Ur(Fr);function Cr(e,t,n,s){e.length;for(var r=n+1;r--;)if(t(e[r],r,e))return r;return-1}var Vr=9007199254740991,Gr=/^(?:0|[1-9]\d*)$/;function qn(e,t){var n=typeof e;return t=t??Vr,!!t&&(n=="number"||n!="symbol"&&Gr.test(e))&&e>-1&&e%1==0&&e<t}function Qn(e,t){return e===t||e!==e&&t!==t}var hn=Math.max;function $r(e,t,n){return t=hn(t===void 0?e.length-1:t,0),function(){for(var s=arguments,r=-1,i=hn(s.length-t,0),a=Array(i);++r<i;)a[r]=s[t+r];r=-1;for(var o=Array(t+1);++r<t;)o[r]=s[r];return o[t]=n(a),xr(e,this,o)}}function Xr(e,t){return Br($r(e,t,Et),e+"")}var jr=9007199254740991;function Bt(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=jr}function Nt(e){return e!=null&&Bt(e.length)&&!Yn(e)}var Wr=Object.prototype;function Jn(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||Wr;return e===n}function Zn(e,t){for(var n=-1,s=Array(e);++n<e;)s[n]=t(n);return s}var Hr="[object Arguments]";function fn(e){return xe(e)&&Xe(e)==Hr}var es=Object.prototype,Kr=es.hasOwnProperty,zr=es.propertyIsEnumerable,Ct=fn(function(){return arguments}())?fn:function(e){return xe(e)&&Kr.call(e,"callee")&&!zr.call(e,"callee")};function Yr(){return!1}var ts=typeof exports=="object"&&exports&&!exports.nodeType&&exports,pn=ts&&typeof module=="object"&&module&&!module.nodeType&&module,qr=pn&&pn.exports===ts,dn=qr?ge.Buffer:void 0,Qr=dn?dn.isBuffer:void 0,Ot=Qr||Yr,Jr="[object Arguments]",Zr="[object Array]",ei="[object Boolean]",ti="[object Date]",ni="[object Error]",si="[object Function]",ri="[object Map]",ii="[object Number]",ai="[object Object]",oi="[object RegExp]",li="[object Set]",ci="[object String]",ui="[object WeakMap]",hi="[object ArrayBuffer]",fi="[object DataView]",pi="[object Float32Array]",di="[object Float64Array]",Ei="[object Int8Array]",Ni="[object Int16Array]",Ti="[object Int32Array]",bi="[object Uint8Array]",mi="[object Uint8ClampedArray]",Ii="[object Uint16Array]",_i="[object Uint32Array]",O={};O[pi]=O[di]=O[Ei]=O[Ni]=O[Ti]=O[bi]=O[mi]=O[Ii]=O[_i]=!0;O[Jr]=O[Zr]=O[hi]=O[ei]=O[fi]=O[ti]=O[ni]=O[si]=O[ri]=O[ii]=O[ai]=O[oi]=O[li]=O[ci]=O[ui]=!1;function gi(e){return xe(e)&&Bt(e.length)&&!!O[Xe(e)]}function Ai(e){return function(t){return e(t)}}var ns=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ze=ns&&typeof module=="object"&&module&&!module.nodeType&&module,Li=ze&&ze.exports===ns,wt=Li&&Wn.process,En=function(){try{var e=ze&&ze.require&&ze.require("util").types;return e||wt&&wt.binding&&wt.binding("util")}catch{}}(),Nn=En&&En.isTypedArray,ss=Nn?Ai(Nn):gi,vi=Object.prototype,yi=vi.hasOwnProperty;function rs(e,t){var n=pe(e),s=!n&&Ct(e),r=!n&&!s&&Ot(e),i=!n&&!s&&!r&&ss(e),a=n||s||r||i,o=a?Zn(e.length,String):[],u=o.length;for(var p in e)(t||yi.call(e,p))&&!(a&&(p=="length"||r&&(p=="offset"||p=="parent")||i&&(p=="buffer"||p=="byteLength"||p=="byteOffset")||qn(p,u)))&&o.push(p);return o}function wi(e,t){return function(n){return e(t(n))}}var Si=wi(Object.keys,Object),Pi=Object.prototype,Oi=Pi.hasOwnProperty;function xi(e){if(!Jn(e))return Si(e);var t=[];for(var n in Object(e))Oi.call(e,n)&&n!="constructor"&&t.push(n);return t}function Vt(e){return Nt(e)?rs(e):xi(e)}function Di(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}var ki=Object.prototype,Ri=ki.hasOwnProperty;function Ui(e){if(!Ge(e))return Di(e);var t=Jn(e),n=[];for(var s in e)s=="constructor"&&(t||!Ri.call(e,s))||n.push(s);return n}function Mi(e){return Nt(e)?rs(e,!0):Ui(e)}var Fi=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Bi=/^\w*$/;function Gt(e,t){if(pe(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||dt(e)?!0:Bi.test(e)||!Fi.test(e)||t!=null&&e in Object(t)}var qe=Fe(Object,"create");function Ci(){this.__data__=qe?qe(null):{},this.size=0}function Vi(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Gi="__lodash_hash_undefined__",$i=Object.prototype,Xi=$i.hasOwnProperty;function ji(e){var t=this.__data__;if(qe){var n=t[e];return n===Gi?void 0:n}return Xi.call(t,e)?t[e]:void 0}var Wi=Object.prototype,Hi=Wi.hasOwnProperty;function Ki(e){var t=this.__data__;return qe?t[e]!==void 0:Hi.call(t,e)}var zi="__lodash_hash_undefined__";function Yi(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=qe&&t===void 0?zi:t,this}function De(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var s=e[t];this.set(s[0],s[1])}}De.prototype.clear=Ci;De.prototype.delete=Vi;De.prototype.get=ji;De.prototype.has=Ki;De.prototype.set=Yi;function qi(){this.__data__=[],this.size=0}function Tt(e,t){for(var n=e.length;n--;)if(Qn(e[n][0],t))return n;return-1}var Qi=Array.prototype,Ji=Qi.splice;function Zi(e){var t=this.__data__,n=Tt(t,e);if(n<0)return!1;var s=t.length-1;return n==s?t.pop():Ji.call(t,n,1),--this.size,!0}function ea(e){var t=this.__data__,n=Tt(t,e);return n<0?void 0:t[n][1]}function ta(e){return Tt(this.__data__,e)>-1}function na(e,t){var n=this.__data__,s=Tt(n,e);return s<0?(++this.size,n.push([e,t])):n[s][1]=t,this}function Ae(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var s=e[t];this.set(s[0],s[1])}}Ae.prototype.clear=qi;Ae.prototype.delete=Zi;Ae.prototype.get=ea;Ae.prototype.has=ta;Ae.prototype.set=na;var Qe=Fe(ge,"Map");function sa(){this.size=0,this.__data__={hash:new De,map:new(Qe||Ae),string:new De}}function ra(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}function bt(e,t){var n=e.__data__;return ra(t)?n[typeof t=="string"?"string":"hash"]:n.map}function ia(e){var t=bt(this,e).delete(e);return this.size-=t?1:0,t}function aa(e){return bt(this,e).get(e)}function oa(e){return bt(this,e).has(e)}function la(e,t){var n=bt(this,e),s=n.size;return n.set(e,t),this.size+=n.size==s?0:1,this}function Le(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var s=e[t];this.set(s[0],s[1])}}Le.prototype.clear=sa;Le.prototype.delete=ia;Le.prototype.get=aa;Le.prototype.has=oa;Le.prototype.set=la;var ca="Expected a function";function $t(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(ca);var n=function(){var s=arguments,r=t?t.apply(this,s):s[0],i=n.cache;if(i.has(r))return i.get(r);var a=e.apply(this,s);return n.cache=i.set(r,a)||i,a};return n.cache=new($t.Cache||Le),n}$t.Cache=Le;var ua=500;function ha(e){var t=$t(e,function(s){return n.size===ua&&n.clear(),s}),n=t.cache;return t}var fa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,pa=/\\(\\)?/g,da=ha(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(fa,function(n,s,r,i){t.push(r?i.replace(pa,"$1"):s||n)}),t});function Ea(e){return e==null?"":zn(e)}function is(e,t){return pe(e)?e:Gt(e,t)?[e]:da(Ea(e))}function mt(e){if(typeof e=="string"||dt(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}function as(e,t){t=is(t,e);for(var n=0,s=t.length;e!=null&&n<s;)e=e[mt(t[n++])];return n&&n==s?e:void 0}function os(e,t,n){var s=e==null?void 0:as(e,t);return s===void 0?n:s}function ls(e,t){for(var n=-1,s=t.length,r=e.length;++n<s;)e[r+n]=t[n];return e}var Tn=Ne?Ne.isConcatSpreadable:void 0;function Na(e){return pe(e)||Ct(e)||!!(Tn&&e&&e[Tn])}function Ta(e,t,n,s,r){var i=-1,a=e.length;for(n||(n=Na),r||(r=[]);++i<a;){var o=e[i];n(o)?ls(r,o):r[r.length]=o}return r}function bn(e){var t=e==null?0:e.length;return t?Ta(e):[]}function ba(){this.__data__=new Ae,this.size=0}function ma(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function Ia(e){return this.__data__.get(e)}function _a(e){return this.__data__.has(e)}var ga=200;function Aa(e,t){var n=this.__data__;if(n instanceof Ae){var s=n.__data__;if(!Qe||s.length<ga-1)return s.push([e,t]),this.size=++n.size,this;n=this.__data__=new Le(s)}return n.set(e,t),this.size=n.size,this}function _e(e){var t=this.__data__=new Ae(e);this.size=t.size}_e.prototype.clear=ba;_e.prototype.delete=ma;_e.prototype.get=Ia;_e.prototype.has=_a;_e.prototype.set=Aa;function cs(e,t){for(var n=-1,s=e==null?0:e.length,r=0,i=[];++n<s;){var a=e[n];t(a,n,e)&&(i[r++]=a)}return i}function La(){return[]}var va=Object.prototype,ya=va.propertyIsEnumerable,mn=Object.getOwnPropertySymbols,wa=mn?function(e){return e==null?[]:(e=Object(e),cs(mn(e),function(t){return ya.call(e,t)}))}:La;function Sa(e,t,n){var s=t(e);return pe(e)?s:ls(s,n(e))}function In(e){return Sa(e,Vt,wa)}var xt=Fe(ge,"DataView"),Dt=Fe(ge,"Promise"),kt=Fe(ge,"Set"),_n="[object Map]",Pa="[object Object]",gn="[object Promise]",An="[object Set]",Ln="[object WeakMap]",vn="[object DataView]",Oa=Me(xt),xa=Me(Qe),Da=Me(Dt),ka=Me(kt),Ra=Me(Pt),we=Xe;(xt&&we(new xt(new ArrayBuffer(1)))!=vn||Qe&&we(new Qe)!=_n||Dt&&we(Dt.resolve())!=gn||kt&&we(new kt)!=An||Pt&&we(new Pt)!=Ln)&&(we=function(e){var t=Xe(e),n=t==Pa?e.constructor:void 0,s=n?Me(n):"";if(s)switch(s){case Oa:return vn;case xa:return _n;case Da:return gn;case ka:return An;case Ra:return Ln}return t});var yn=ge.Uint8Array,Ua="__lodash_hash_undefined__";function Ma(e){return this.__data__.set(e,Ua),this}function Fa(e){return this.__data__.has(e)}function ot(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new Le;++t<n;)this.add(e[t])}ot.prototype.add=ot.prototype.push=Ma;ot.prototype.has=Fa;function Ba(e,t){for(var n=-1,s=e==null?0:e.length;++n<s;)if(t(e[n],n,e))return!0;return!1}function Ca(e,t){return e.has(t)}var Va=1,Ga=2;function us(e,t,n,s,r,i){var a=n&Va,o=e.length,u=t.length;if(o!=u&&!(a&&u>o))return!1;var p=i.get(e),h=i.get(t);if(p&&h)return p==t&&h==e;var d=-1,N=!0,m=n&Ga?new ot:void 0;for(i.set(e,t),i.set(t,e);++d<o;){var A=e[d],I=t[d];if(s)var v=a?s(I,A,d,t,e,i):s(A,I,d,e,t,i);if(v!==void 0){if(v)continue;N=!1;break}if(m){if(!Ba(t,function(H,K){if(!Ca(m,K)&&(A===H||r(A,H,n,s,i)))return m.push(K)})){N=!1;break}}else if(!(A===I||r(A,I,n,s,i))){N=!1;break}}return i.delete(e),i.delete(t),N}function $a(e){var t=-1,n=Array(e.size);return e.forEach(function(s,r){n[++t]=[r,s]}),n}function Xa(e){var t=-1,n=Array(e.size);return e.forEach(function(s){n[++t]=s}),n}var ja=1,Wa=2,Ha="[object Boolean]",Ka="[object Date]",za="[object Error]",Ya="[object Map]",qa="[object Number]",Qa="[object RegExp]",Ja="[object Set]",Za="[object String]",eo="[object Symbol]",to="[object ArrayBuffer]",no="[object DataView]",wn=Ne?Ne.prototype:void 0,St=wn?wn.valueOf:void 0;function so(e,t,n,s,r,i,a){switch(n){case no:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case to:return!(e.byteLength!=t.byteLength||!i(new yn(e),new yn(t)));case Ha:case Ka:case qa:return Qn(+e,+t);case za:return e.name==t.name&&e.message==t.message;case Qa:case Za:return e==t+"";case Ya:var o=$a;case Ja:var u=s&ja;if(o||(o=Xa),e.size!=t.size&&!u)return!1;var p=a.get(e);if(p)return p==t;s|=Wa,a.set(e,t);var h=us(o(e),o(t),s,r,i,a);return a.delete(e),h;case eo:if(St)return St.call(e)==St.call(t)}return!1}var ro=1,io=Object.prototype,ao=io.hasOwnProperty;function oo(e,t,n,s,r,i){var a=n&ro,o=In(e),u=o.length,p=In(t),h=p.length;if(u!=h&&!a)return!1;for(var d=u;d--;){var N=o[d];if(!(a?N in t:ao.call(t,N)))return!1}var m=i.get(e),A=i.get(t);if(m&&A)return m==t&&A==e;var I=!0;i.set(e,t),i.set(t,e);for(var v=a;++d<u;){N=o[d];var H=e[N],K=t[N];if(s)var w=a?s(K,H,N,t,e,i):s(H,K,N,e,t,i);if(!(w===void 0?H===K||r(H,K,n,s,i):w)){I=!1;break}v||(v=N=="constructor")}if(I&&!v){var ee=e.constructor,V=t.constructor;ee!=V&&"constructor"in e&&"constructor"in t&&!(typeof ee=="function"&&ee instanceof ee&&typeof V=="function"&&V instanceof V)&&(I=!1)}return i.delete(e),i.delete(t),I}var lo=1,Sn="[object Arguments]",Pn="[object Array]",st="[object Object]",co=Object.prototype,On=co.hasOwnProperty;function uo(e,t,n,s,r,i){var a=pe(e),o=pe(t),u=a?Pn:we(e),p=o?Pn:we(t);u=u==Sn?st:u,p=p==Sn?st:p;var h=u==st,d=p==st,N=u==p;if(N&&Ot(e)){if(!Ot(t))return!1;a=!0,h=!1}if(N&&!h)return i||(i=new _e),a||ss(e)?us(e,t,n,s,r,i):so(e,t,u,n,s,r,i);if(!(n&lo)){var m=h&&On.call(e,"__wrapped__"),A=d&&On.call(t,"__wrapped__");if(m||A){var I=m?e.value():e,v=A?t.value():t;return i||(i=new _e),r(I,v,n,s,i)}}return N?(i||(i=new _e),oo(e,t,n,s,r,i)):!1}function Xt(e,t,n,s,r){return e===t?!0:e==null||t==null||!xe(e)&&!xe(t)?e!==e&&t!==t:uo(e,t,n,s,Xt,r)}var ho=1,fo=2;function po(e,t,n,s){var r=n.length,i=r;if(e==null)return!i;for(e=Object(e);r--;){var a=n[r];if(a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++r<i;){a=n[r];var o=a[0],u=e[o],p=a[1];if(a[2]){if(u===void 0&&!(o in e))return!1}else{var h=new _e,d;if(!(d===void 0?Xt(p,u,ho|fo,s,h):d))return!1}}return!0}function hs(e){return e===e&&!Ge(e)}function Eo(e){for(var t=Vt(e),n=t.length;n--;){var s=t[n],r=e[s];t[n]=[s,r,hs(r)]}return t}function fs(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}function No(e){var t=Eo(e);return t.length==1&&t[0][2]?fs(t[0][0],t[0][1]):function(n){return n===e||po(n,e,t)}}function To(e,t){return e!=null&&t in Object(e)}function bo(e,t,n){t=is(t,e);for(var s=-1,r=t.length,i=!1;++s<r;){var a=mt(t[s]);if(!(i=e!=null&&n(e,a)))break;e=e[a]}return i||++s!=r?i:(r=e==null?0:e.length,!!r&&Bt(r)&&qn(a,r)&&(pe(e)||Ct(e)))}function mo(e,t){return e!=null&&bo(e,t,To)}var Io=1,_o=2;function go(e,t){return Gt(e)&&hs(t)?fs(mt(e),t):function(n){var s=os(n,e);return s===void 0&&s===t?mo(n,e):Xt(t,s,Io|_o)}}function ps(e){return function(t){return t==null?void 0:t[e]}}function Ao(e){return function(t){return as(t,e)}}function Lo(e){return Gt(e)?ps(mt(e)):Ao(e)}function ds(e){return typeof e=="function"?e:e==null?Et:typeof e=="object"?pe(e)?go(e[0],e[1]):No(e):Lo(e)}function vo(e,t,n,s){for(var r=-1,i=e==null?0:e.length;++r<i;){var a=e[r];t(s,a,n(a),e)}return s}function yo(e){return function(t,n,s){for(var r=-1,i=Object(t),a=s(t),o=a.length;o--;){var u=a[++r];if(n(i[u],u,i)===!1)break}return t}}var Es=yo();function wo(e,t){return e&&Es(e,t,Vt)}function So(e,t){return function(n,s){if(n==null)return n;if(!Nt(n))return e(n,s);for(var r=n.length,i=-1,a=Object(n);++i<r&&s(a[i],i,a)!==!1;);return n}}var Po=So(wo);function Oo(e,t,n,s){return Po(e,function(r,i,a){t(s,r,n(r),a)}),s}function xo(e,t){return function(n,s){var r=pe(n)?vo:Oo,i=t?t():{};return r(n,e,ds(s),i)}}function Do(e){return xe(e)&&Nt(e)}function M(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function ko(e){return typeof e=="function"?e:Et}var Ro=Math.max,Uo=Math.min;function Mo(e,t,n){var s=e==null?0:e.length;if(!s)return-1;var r=s-1;return n!==void 0&&(r=dr(n),r=n<0?Ro(s+r,0):Uo(r,s-1)),Cr(e,ds(t),r)}function Fo(e){return e&&e.length?e[0]:void 0}function Je(e,t){return e==null?e:Es(e,ko(t),Mi)}var oe=xo(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Bo=Math.max;function Co(e){if(!(e&&e.length))return[];var t=0;return e=cs(e,function(n){if(Do(n))return t=Bo(n.length,t),!0}),Zn(t,function(n){return Kn(e,ps(n))})}var Rt=Xr(Co),f=(e=>(e.SPACE="<space>",e.TAB="<tab>",e.NEWLINE="<newline>",e.COMMA="<comma>",e.LPAREN="<lparen>",e.RPAREN="<rparen>",e.LBRACE="<lbrace>",e.RBRACE="<rbrace>",e.LBRACKET="<lbracket>",e.RBRACKET="<rbracket>",e.LANGLE="<langle>",e.RANGLE="<rangle>",e.OP="<op>",e.EOF="<eof>",e.NUMERIC_LITERAL="<number>",e.STRING_LITERAL="<string>",e.COLOR_LITERAL="<color>",e.FUNCTION_EXPRESSION="<function-expression>",e.QUOTED_STRING="<variable>",e.IDENTIFIER="<identifier>",e.SEMICOLON="<semicolon>",e.COLON="<colon>",e.TILDE="<tilde>",e.SINGLE_LINE_COMMENT="<single-line-comment>",e.MULTILINE_COMMENT="<multiline-comment>",e))(f||{});function Vo(e){switch(e.kind){case"<newline>":case"<space>":case"<tab>":case"<single-line-comment>":case"<multiline-comment>":return!0;default:return!1}}function Go(e){if(!e)return!1;switch(e){case"+":case"-":case"*":case"/":case"%":case"<":case">":case"=":case"!":case".":case"&":case"|":return!0;default:return!1}}function xn(e){return e!==void 0&&e.kind==="<op>"}class q{constructor(t,n,s,r,i){this.kind=t,this.startPos=n,this.endPos=s,this.value=r,this.leadingTrivia=[],this.trailingTrivia=[],this.leadingInvalid=[],this.trailingInvalid=[],this.isInvalid=i,this.start=n.offset,this.end=s.offset}static create(t,n,s,r,i){return new q(t,n,s,r,i)}}function Ns(e){return e.trailingTrivia.find(({kind:t})=>t===f.NEWLINE)!==void 0}function Dn(e,t){return t.leadingTrivia.find(({kind:s})=>s===f.NEWLINE)!==void 0||Ns(e)}function Ut(e){return e.trailingTrivia.find(({kind:t})=>[f.SPACE,f.TAB].includes(t))!==void 0}function Ts(e){return e.trailingTrivia.length===0?e.end:Ts(M(e.trailingTrivia))}function bs(e){return e.leadingTrivia.length===0?e.start:bs(e.leadingTrivia[0])}function $o(e){return[f.SINGLE_LINE_COMMENT,f.MULTILINE_COMMENT].includes(e.kind)}class Xo{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class k{constructor(t,n,s){this.id=t,this.kind=n;const r=s.find(a=>a!==void 0&&!Number.isNaN(a.start));r?(this.startPos=r.startPos,this.fullStart=r instanceof q?bs(r):r.fullStart):(this.startPos={offset:NaN,column:NaN,line:NaN},this.fullStart=NaN);const i=[...s].reverse().find(a=>a!==void 0&&!Number.isNaN(a.end));i?(this.endPos=i.endPos,this.fullEnd=i instanceof q?Ts(i):i.fullEnd):(this.endPos={offset:NaN,column:NaN,line:NaN},this.fullEnd=NaN),this.start=this.startPos.offset,this.end=this.endPos.offset}}var Se=(e=>(e.PROGRAM="<program>",e.ELEMENT_DECLARATION="<element-declaration>",e.ATTRIBUTE="<attribute>",e.IDENTIFIER_STREAM="<identifer-stream>",e.LITERAL="<literal>",e.VARIABLE="<variable>",e.PREFIX_EXPRESSION="<prefix-expression>",e.INFIX_EXPRESSION="<infix-expression>",e.POSTFIX_EXPRESSION="<postfix-expression>",e.FUNCTION_EXPRESSION="<function-expression>",e.FUNCTION_APPLICATION="<function-application>",e.BLOCK_EXPRESSION="<block-expression>",e.LIST_EXPRESSION="<list-expression>",e.TUPLE_EXPRESSION="<tuple-expression>",e.CALL_EXPRESSION="<call-expression>",e.PRIMARY_EXPRESSION="<primary-expression>",e.GROUP_EXPRESSION="<group-expression>",e.DUMMY="<dummy>",e.ARRAY="<array>",e.PARTIAL_INJECTION="<partial-injection>",e))(Se||{});class J extends k{constructor({body:t=[],eof:n},s){super(s,"<program>",[...t,n]),this.body=t,this.eof=n}}class S extends k{constructor({type:t,name:n,as:s,alias:r,attributeList:i,bodyColon:a,body:o},u){if(super(u,"<element-declaration>",[t,n,s,r,i,a,o]),o&&a&&!(o instanceof y||o instanceof S))throw new Error("If an element has a simple body, it must be a function application node");this.type=t,this.name=n,this.as=s,this.alias=r,this.attributeList=i,this.bodyColon=a,this.body=o}}class ce extends k{constructor({identifiers:t=[]},n){super(n,"<identifer-stream>",t||[]),this.identifiers=t}}class ue extends k{constructor({name:t,colon:n,value:s},r){super(r,"<attribute>",[t,n,s]),this.name=t,this.value=s,this.colon=n}}class re extends k{constructor({op:t,expression:n},s){super(s,"<prefix-expression>",[t,n]),this.op=t,this.expression=n}}class Te extends k{constructor({op:t,leftExpression:n,rightExpression:s},r){super(r,"<infix-expression>",[n,t,s]),this.op=t,this.leftExpression=n,this.rightExpression=s}}class It extends k{constructor({op:t,expression:n},s){super(s,"<postfix-expression>",[n,t]),this.op=t,this.expression=n}}class ie extends k{constructor({value:t},n){super(n,"<function-expression>",[t]),this.value=t}}class y extends k{constructor({callee:t,args:n=[]},s){super(s,"<function-application>",[t,...n]),this.callee=t,this.args=n}}class Ee extends k{constructor({blockOpenBrace:t,body:n=[],blockCloseBrace:s},r){super(r,"<block-expression>",[t,...n,s]),this.blockOpenBrace=t,this.body=n,this.blockCloseBrace=s}}class ke extends k{constructor({op:t,partial:n},s){super(s,"<partial-injection>",[t,n]),this.partial=n}}class R extends k{constructor({listOpenBracket:t,elementList:n=[],commaList:s=[],listCloseBracket:r},i){super(i,"<list-expression>",[t,...ms(n,s),r]),this.listOpenBracket=t,this.elementList=n,this.commaList=s,this.listCloseBracket=r}}class be extends k{constructor({tupleOpenParen:t,elementList:n=[],commaList:s=[],tupleCloseParen:r},i){super(i,"<tuple-expression>",[t,...ms(n,s),r]),this.tupleOpenParen=t,this.elementList=n,this.commaList=s,this.tupleCloseParen=r}}class jt extends be{constructor({groupOpenParen:t,expression:n,groupCloseParen:s},r){super({tupleOpenParen:t,elementList:n&&[n],commaList:[],tupleCloseParen:s},r),this.kind="<group-expression>"}}class ae extends k{constructor({callee:t,argumentList:n},s){super(s,"<call-expression>",[t,n]),this.callee=t,this.argumentList=n}}class je extends k{constructor({literal:t},n){super(n,"<literal>",[t]),this.literal=t}}class de extends k{constructor({variable:t},n){super(n,"<variable>",[t]),this.variable=t}}class z extends k{constructor({expression:t},n){super(n,"<primary-expression>",[t]),this.expression=t}}class rt extends k{constructor({pre:t},n){const s=q.create(f.SPACE,t.endPos,t.endPos," ",!1);super(n,"<dummy>",[s])}}class Re extends k{constructor({expression:t,indexer:n},s){super(s,"<array>",[t,n]),this.array=t,this.indexer=n}}function ms(e,t){if(!e||e.length===0)return t||[];if(!t||t.length===0)return e||[];const[n]=e,[s]=t;return(n.start<s.start?bn(Rt(e,t)):bn(Rt(t,e))).filter(r=>r!==null)}function jo(e,t=!1){return JSON.stringify(e,function(n,s){var r;return!(this instanceof J)&&n==="symbol"?s==null?void 0:s.id:n==="symbol"?{symbolTable:s==null?void 0:s.symbolTable,id:s==null?void 0:s.id,references:s==null?void 0:s.references.map(i=>i.id),declaration:(r=s==null?void 0:s.declaration)==null?void 0:r.id}:n==="referee"||n==="parent"||n==="declaration"?s==null?void 0:s.id:n==="symbolTable"?Object.fromEntries(s.table):s},t?2:0)}class B{constructor(t){this.value=t}unwrap(){return this.value}unwrap_or(t){return this.value}and_then(t){return t(this.value)}map(t){return new B(t(this.value))}isOk(){return!0}}class x{constructor(){this.value=void 0}unwrap(){throw new Error("Trying to unwrap a None value")}unwrap_or(t){return t}and_then(t){return new x}map(t){return new x}isOk(){return!1}}var _=(e=>(e.Schema="Schema",e.Table="Table",e.Column="Column",e.TableGroup="TableGroup",e.TableGroupField="TableGroup field",e.Enum="Enum",e.EnumField="Enum field",e.Note="Note",e.TablePartial="TablePartial",e.TablePartialInjection="TablePartialInjection",e))(_||{});function Wt(e){return`Schema:${e}`}function lt(e){return`Table:${e}`}function _t(e){return`Column:${e}`}function Ht(e){return`Enum:${e}`}function Kt(e){return`Enum field:${e}`}function zt(e){return`TableGroup:${e}`}function Yt(e){return`TableGroup field:${e}`}function Wo(e){return`Note:${e}`}function qt(e){return`TablePartial:${e}`}function Is(e){return`TablePartialInjection:${e}`}function it(e,t){switch(t){case"Column":return _t(e);case"Enum":return Ht(e);case"Enum field":return Kt(e);case"Schema":return Wt(e);case"Table":return lt(e);case"TableGroup":return zt(e);case"TableGroup field":return Yt(e);case"TablePartial":return qt(e);default:throw new Error("Unreachable")}}function he(e){const[t,n]=e.split(":");return Object.values(_).includes(t)?new B({name:n,kind:t}):new x}function Ho(e){const t=he(e).unwrap_or(void 0);if(!t)return!1;const{kind:n,name:s}=t;return n==="Schema"&&s==="public"}function Ko(e){const t=he(e).unwrap_or(void 0);if(!t)return!1;const{kind:n}=t;return n==="TablePartialInjection"}function zo(e){const t=he(e).unwrap_or(void 0);if(!t)return null;const{kind:n,name:s}=t;return n==="TablePartialInjection"?it(s,"TablePartial"):null}class Yo{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class _s{constructor({symbolTable:t},n){this.references=[],this.id=n,this.symbolTable=t}}class qo{constructor({symbolTable:t,declaration:n},s){this.references=[],this.id=s,this.symbolTable=t,this.declaration=n}}class Qo{constructor({declaration:t},n){this.references=[],this.id=n,this.declaration=t}}class gs{constructor({symbolTable:t,declaration:n},s){this.references=[],this.id=s,this.symbolTable=t,this.declaration=n}}class Qt{constructor({declaration:t},n){this.references=[],this.id=n,this.declaration=t}}class Jo{constructor({symbolTable:t,declaration:n},s){this.references=[],this.id=s,this.symbolTable=t,this.declaration=n}}class Zo{constructor({declaration:t},n){this.references=[],this.id=n,this.declaration=t}}class el{constructor({symbolTable:t,declaration:n},s){this.references=[],this.id=s,this.symbolTable=t,this.declaration=n}}class tl{constructor({declaration:t},n){this.references=[],this.id=n,this.declaration=t}}class nl{constructor({injectorFieldSymbol:t,injectorDeclaration:n},s){this.references=[],this.id=s,this.injectorDeclaration=n,this.injectorFieldSymbol=t}}function sl(e){return[Wt,lt,Ht,zt,_t,Kt,Yt,qt,Is].map(t=>t(e))}function rl(e){return e instanceof Qt?nl:null}function gt(e){return!!e.match(new RegExp("(\\p{L}|_|\\p{M})","gu"))}function ct(e){const[t]=e;return t>="0"&&t<="9"}function il(e){const[t]=e;return ct(t)||gt(t)&&t.toLowerCase()>="a"&&t.toLowerCase()<="f"}function Ve(e){return gt(e)||ct(e)}function kn(e,t){const n=[],s=Math.min(e.length,t.length);for(let r=0;r<s;r+=1)n.push(e[r],t[r]);return n.push(...e.slice(s),...t.slice(s)),n}function Ye(e,t){return e>=t.start&&e<t.end}function As(e){var t;return e instanceof re?`${(t=e.op)==null?void 0:t.value}${As(e.expression)}`:e.expression.literal.value}function Mt(e){var t;return e instanceof re?((t=e.op)==null?void 0:t.value)==="-"?-Mt(e.expression):Mt(e.expression):Number.parseFloat(e.expression.literal.value)}var l=(e=>(e[e.UNKNOWN_SYMBOL=1e3]="UNKNOWN_SYMBOL",e[e.UNEXPECTED_SYMBOL=1001]="UNEXPECTED_SYMBOL",e[e.UNEXPECTED_EOF=1002]="UNEXPECTED_EOF",e[e.UNEXPECTED_NEWLINE=1003]="UNEXPECTED_NEWLINE",e[e.UNKNOWN_TOKEN=1004]="UNKNOWN_TOKEN",e[e.UNEXPECTED_TOKEN=1005]="UNEXPECTED_TOKEN",e[e.UNEXPECTED_ELEMENT_DECLARATION=1006]="UNEXPECTED_ELEMENT_DECLARATION",e[e.MISSING_SPACES=1007]="MISSING_SPACES",e[e.UNKNOWN_PREFIX_OP=1008]="UNKNOWN_PREFIX_OP",e[e.INVALID_OPERAND=1009]="INVALID_OPERAND",e[e.EMPTY_ATTRIBUTE_NAME=1010]="EMPTY_ATTRIBUTE_NAME",e[e.INVALID_ESCAPE_SEQUENCE=1011]="INVALID_ESCAPE_SEQUENCE",e[e.INVALID_NAME=3e3]="INVALID_NAME",e[e.UNEXPECTED_NAME=3001]="UNEXPECTED_NAME",e[e.NAME_NOT_FOUND=3002]="NAME_NOT_FOUND",e[e.DUPLICATE_NAME=3003]="DUPLICATE_NAME",e[e.INVALID_ALIAS=3004]="INVALID_ALIAS",e[e.UNEXPECTED_ALIAS=3005]="UNEXPECTED_ALIAS",e[e.UNEXPECTED_SETTINGS=3006]="UNEXPECTED_SETTINGS",e[e.INVALID_SETTINGS=3007]="INVALID_SETTINGS",e[e.UNEXPECTED_SIMPLE_BODY=3008]="UNEXPECTED_SIMPLE_BODY",e[e.UNEXPECTED_COMPLEX_BODY=3009]="UNEXPECTED_COMPLEX_BODY",e[e.INVALID_TABLE_CONTEXT=3010]="INVALID_TABLE_CONTEXT",e[e.UNKNOWN_TABLE_SETTING=3011]="UNKNOWN_TABLE_SETTING",e[e.DUPLICATE_TABLE_SETTING=3012]="DUPLICATE_TABLE_SETTING",e[e.INVALID_TABLEGROUP_CONTEXT=3013]="INVALID_TABLEGROUP_CONTEXT",e[e.INVALID_TABLEGROUP_ELEMENT_NAME=3014]="INVALID_TABLEGROUP_ELEMENT_NAME",e[e.DUPLICATE_TABLEGROUP_ELEMENT_NAME=3015]="DUPLICATE_TABLEGROUP_ELEMENT_NAME",e[e.DUPLICATE_TABLEGROUP_FIELD_NAME=3016]="DUPLICATE_TABLEGROUP_FIELD_NAME",e[e.INVALID_TABLEGROUP_FIELD=3017]="INVALID_TABLEGROUP_FIELD",e[e.EMPTY_TABLE=3018]="EMPTY_TABLE",e[e.INVALID_COLUMN=3019]="INVALID_COLUMN",e[e.INVALID_COLUMN_NAME=3020]="INVALID_COLUMN_NAME",e[e.UNKNOWN_COLUMN_SETTING=3021]="UNKNOWN_COLUMN_SETTING",e[e.INVALID_COLUMN_TYPE=3022]="INVALID_COLUMN_TYPE",e[e.DUPLICATE_COLUMN_NAME=3023]="DUPLICATE_COLUMN_NAME",e[e.DUPLICATE_COLUMN_SETTING=3024]="DUPLICATE_COLUMN_SETTING",e[e.INVALID_COLUMN_SETTING_VALUE=3025]="INVALID_COLUMN_SETTING_VALUE",e[e.INVALID_ENUM_CONTEXT=3026]="INVALID_ENUM_CONTEXT",e[e.INVALID_ENUM_ELEMENT_NAME=3027]="INVALID_ENUM_ELEMENT_NAME",e[e.INVALID_ENUM_ELEMENT=3028]="INVALID_ENUM_ELEMENT",e[e.DUPLICATE_ENUM_ELEMENT_NAME=3029]="DUPLICATE_ENUM_ELEMENT_NAME",e[e.UNKNOWN_ENUM_ELEMENT_SETTING=3030]="UNKNOWN_ENUM_ELEMENT_SETTING",e[e.DUPLICATE_ENUM_ELEMENT_SETTING=3031]="DUPLICATE_ENUM_ELEMENT_SETTING",e[e.INVALID_ENUM_ELEMENT_SETTING=3032]="INVALID_ENUM_ELEMENT_SETTING",e[e.EMPTY_ENUM=3033]="EMPTY_ENUM",e[e.INVALID_REF_CONTEXT=3034]="INVALID_REF_CONTEXT",e[e.UNKNOWN_REF_SETTING=3035]="UNKNOWN_REF_SETTING",e[e.DUPLICATE_REF_SETTING=3036]="DUPLICATE_REF_SETTING",e[e.INVALID_REF_SETTING_VALUE=3037]="INVALID_REF_SETTING_VALUE",e[e.INVALID_REF_RELATIONSHIP=3038]="INVALID_REF_RELATIONSHIP",e[e.INVALID_REF_FIELD=3039]="INVALID_REF_FIELD",e[e.EMPTY_REF=3040]="EMPTY_REF",e[e.REF_REDEFINED=3041]="REF_REDEFINED",e[e.INVALID_NOTE_CONTEXT=3042]="INVALID_NOTE_CONTEXT",e[e.INVALID_NOTE=3043]="INVALID_NOTE",e[e.NOTE_REDEFINED=3044]="NOTE_REDEFINED",e[e.NOTE_CONTENT_REDEFINED=3045]="NOTE_CONTENT_REDEFINED",e[e.EMPTY_NOTE=3046]="EMPTY_NOTE",e[e.INVALID_INDEXES_CONTEXT=3047]="INVALID_INDEXES_CONTEXT",e[e.INVALID_INDEXES_FIELD=3048]="INVALID_INDEXES_FIELD",e[e.INVALID_INDEX=3049]="INVALID_INDEX",e[e.UNKNOWN_INDEX_SETTING=3050]="UNKNOWN_INDEX_SETTING",e[e.DUPLICATE_INDEX_SETTING=3051]="DUPLICATE_INDEX_SETTING",e[e.UNEXPECTED_INDEX_SETTING_VALUE=3052]="UNEXPECTED_INDEX_SETTING_VALUE",e[e.INVALID_INDEX_SETTING_VALUE=3053]="INVALID_INDEX_SETTING_VALUE",e[e.INVALID_PROJECT_CONTEXT=3054]="INVALID_PROJECT_CONTEXT",e[e.PROJECT_REDEFINED=3055]="PROJECT_REDEFINED",e[e.INVALID_PROJECT_FIELD=3056]="INVALID_PROJECT_FIELD",e[e.INVALID_CUSTOM_CONTEXT=3057]="INVALID_CUSTOM_CONTEXT",e[e.INVALID_CUSTOM_ELEMENT_VALUE=3058]="INVALID_CUSTOM_ELEMENT_VALUE",e[e.INVALID_ELEMENT_IN_SIMPLE_BODY=3059]="INVALID_ELEMENT_IN_SIMPLE_BODY",e[e.INVALID_TABLE_PARTIAL_CONTEXT=3060]="INVALID_TABLE_PARTIAL_CONTEXT",e[e.INVALID_TABLE_PARTIAL_ELEMENT_NAME=3061]="INVALID_TABLE_PARTIAL_ELEMENT_NAME",e[e.INVALID_TABLE_PARTIAL_SETTING_VALUE=3062]="INVALID_TABLE_PARTIAL_SETTING_VALUE",e[e.DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME=3063]="DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME",e[e.DUPLICATE_TABLE_PARTIAL_SETTING=3064]="DUPLICATE_TABLE_PARTIAL_SETTING",e[e.INVALID_TABLE_PARTIAL_INJECTION=3065]="INVALID_TABLE_PARTIAL_INJECTION",e[e.INVALID_TABLE_PARTIAL_INJECTION_OP=3066]="INVALID_TABLE_PARTIAL_INJECTION_OP",e[e.INVALID_TABLE_PARTIAL_INJECTION_NAME=3067]="INVALID_TABLE_PARTIAL_INJECTION_NAME",e[e.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME=3068]="DUPLICATE_TABLE_PARTIAL_INJECTION_NAME",e[e.UNKNOWN_TABLE_PARTIAL_SETTING=3069]="UNKNOWN_TABLE_PARTIAL_SETTING",e[e.INVALID_TABLE_SETTING_VALUE=3070]="INVALID_TABLE_SETTING_VALUE",e[e.INVALID_CHECKS_CONTEXT=3071]="INVALID_CHECKS_CONTEXT",e[e.INVALID_CHECKS_FIELD=3072]="INVALID_CHECKS_FIELD",e[e.INVALID_CHECK=3073]="INVALID_CHECK",e[e.UNKNOWN_CHECK_SETTING=3074]="UNKNOWN_CHECK_SETTING",e[e.DUPLICATE_CHECK_SETTING=3075]="DUPLICATE_CHECK_SETTING",e[e.INVALID_CHECK_SETTING_VALUE=3076]="INVALID_CHECK_SETTING_VALUE",e[e.BINDING_ERROR=4e3]="BINDING_ERROR",e[e.UNSUPPORTED=5e3]="UNSUPPORTED",e[e.CIRCULAR_REF=5001]="CIRCULAR_REF",e[e.SAME_ENDPOINT=5002]="SAME_ENDPOINT",e[e.UNEQUAL_FIELDS_BINARY_REF=5003]="UNEQUAL_FIELDS_BINARY_REF",e[e.CONFLICTING_SETTING=5004]="CONFLICTING_SETTING",e[e.TABLE_REAPPEAR_IN_TABLEGROUP=5005]="TABLE_REAPPEAR_IN_TABLEGROUP",e))(l||{});class c extends Error{constructor(t,n,s){super(n),this.code=t,this.diagnostic=n,this.nodeOrToken=s,this.start=s.start,this.end=s.end,this.name=this.constructor.name,Object.setPrototypeOf(this,c.prototype)}}class se{constructor(t,n){this.value=t,this.errors=n===void 0?[]:n}getValue(){return this.value}getErrors(){return this.errors}chain(t){const n=t(this.value),s=[...this.errors,...n.errors];return new se(n.value,s)}map(t){return new se(t(this.value),this.errors)}}function al(e,t,n){if(!e||!Pe(e)||t.length===0)return new x;const s=[...t],r=Rn(e).unwrap(),i=s.pop();if(!(i instanceof Ee))return new x;const a=M(s)instanceof R?s.pop():void 0;if(s.length===3){const o=Rn(s[1]).value;return!o||!Ft(o)?new x:new B(n.create(S,{type:r,name:s[0],as:o,alias:s[2],attributeList:a,body:i}))}return s.length===1?new B(n.create(S,{type:r,name:s[0],attributeList:a,body:i})):s.length===0?new B(n.create(S,{type:r,attributeList:a,body:i})):new x}function Ft(e){return e.kind===f.IDENTIFIER&&e.value==="as"}function g(e){e&&(e instanceof q?ol(e):ll(e))}function ol(e){e.kind!==f.EOF&&(e.isInvalid=!0)}function ll(e){if(e instanceof S)g(e.type),g(e.name),g(e.as),g(e.alias),g(e.bodyColon),g(e.attributeList),g(e.body);else if(e instanceof ce)e.identifiers.forEach(g);else if(e instanceof ue)g(e.name),g(e.colon),g(e.value);else if(e instanceof re)g(e.op),g(e.expression);else if(e instanceof Te)g(e.leftExpression),g(e.op),g(e.rightExpression);else if(e instanceof It)g(e.op),g(e.expression);else if(e instanceof Ee)g(e.blockOpenBrace),e.body.forEach(g),g(e.blockCloseBrace);else if(e instanceof R)g(e.listOpenBracket),e.commaList.forEach(g),e.elementList.forEach(g),g(e.listCloseBracket);else if(e instanceof be)g(e.tupleOpenParen),e.commaList.forEach(g),e.elementList.forEach(g),g(e.tupleCloseParen);else if(e instanceof ae)g(e.callee),g(e.argumentList);else if(e instanceof y)g(e.callee),e.args.forEach(g);else if(e instanceof z)g(e.expression);else if(e instanceof ie)g(e.value);else if(e instanceof de)g(e.variable);else if(e instanceof je)g(e.literal);else throw e instanceof jt?new Error("This case is handled by the TupleExpressionNode case"):new Error("Unreachable case in markInvalidNode")}function Ls(e){return!!(e!=null&&e.isInvalid)}function X(...e){return e.filter(t=>t!==void 0)}function cl(e){if(e instanceof J)return X(...e.body,e.eof);if(e instanceof S)return X(e.type,e.name,e.as,e.alias,e.attributeList,e.bodyColon,e.body);if(e instanceof ue)return X(e.name,e.colon,e.value);if(e instanceof ce)return e.identifiers;if(e instanceof je)return e.literal?[e.literal]:[];if(e instanceof de)return X(e.variable);if(e instanceof re)return X(e.op,e.expression);if(e instanceof Te)return X(e.leftExpression,e.op,e.rightExpression);if(e instanceof It)return X(e.expression,e.op);if(e instanceof ie)return X(e.value);if(e instanceof y)return X(e.callee,...e.args);if(e instanceof Ee)return X(e.blockOpenBrace,...e.body,e.blockCloseBrace);if(e instanceof R)return X(e.listOpenBracket,...kn(e.elementList,e.commaList),e.listCloseBracket);if(e instanceof be)return X(e.tupleOpenParen,...kn(e.elementList,e.commaList),e.tupleCloseParen);if(e instanceof ae)return X(e.callee,e.argumentList);if(e instanceof z)return X(e.expression);if(e instanceof Re)return X(e.array,e.indexer);if(e instanceof ke)return X(e.partial);throw e instanceof jt?new Error("This case is already handled by TupleExpressionNode"):new Error("Unreachable - no other possible cases")}function Rn(e){return W(e)?new B(e.expression.variable):new x}function Y(e){var t;return e instanceof z&&(e.expression instanceof de&&e.expression.variable instanceof q&&e.expression.variable.kind===f.QUOTED_STRING||e.expression instanceof je&&((t=e.expression.literal)==null?void 0:t.kind)===f.STRING_LITERAL)}function W(e){return e instanceof z&&e.expression instanceof de&&e.expression.variable instanceof q}function Pe(e){var t;return e instanceof z&&e.expression instanceof de&&((t=e.expression.variable)==null?void 0:t.kind)===f.IDENTIFIER}function Jt(e){var t;return e instanceof Te&&e.leftExpression instanceof k&&e.rightExpression instanceof k&&((t=e.op)==null?void 0:t.value)==="."}function $e(e){if(e===void 0)return new x;const t=e.identifiers.map(n=>n.value).join(" ");return t===""?new x:new B(t)}class ul{constructor(t){this.start={offset:0,line:0,column:0},this.current={offset:0,line:0,column:0},this.tokens=[],this.errors=[],this.text=t}isAtEnd(){return this.current.offset>=this.text.length}advance(){const t=this.peek();return this.current={...this.current},t===`
|
|
2
|
-
`?(this.current.line+=1,this.current.column=0):this.current.column+=1,this.current.offset+=1,t}peek(t=0){if(!(this.current.offset+t>=this.text.length))return this.text[this.current.offset+t]}check(t){for(let n=0;n<t.length;n+=1)if(t[n]!==this.peek(n))return!1;return!0}match(t){return this.check(t)?(t.split("").forEach(()=>this.advance()),!0):!1}addToken(t,n=!1){this.tokens.push(this.createToken(t,n))}createToken(t,n=!1){return
|
|
3
|
-
`:this.addToken(f.NEWLINE);break;case" ":this.addToken(f.TAB);break;case",":this.addToken(f.COMMA);break;case"(":this.addToken(f.LPAREN);break;case")":this.addToken(f.RPAREN);break;case"[":this.addToken(f.LBRACKET);break;case"]":this.addToken(f.RBRACKET);break;case"{":this.addToken(f.LBRACE);break;case"}":this.addToken(f.RBRACE);break;case";":this.addToken(f.SEMICOLON);break;case":":this.addToken(f.COLON);break;case"~":this.addToken(f.TILDE);break;case"'":this.match("''")?this.multilineStringLiteral():this.singleLineStringLiteral();break;case'"':this.quotedVariable();break;case"`":this.functionExpression();break;case"#":this.colorLiteral();break;case"/":this.match("/")?this.singleLineComment():this.match("*")?this.multilineComment():this.operator(t);break;default:if(
|
|
4
|
-
`))&&!this.check(n);)this.peek()==="\\"&&!i?(this.advance(),o+=this.escapedString()):o+=this.advance();if(this.isAtEnd()&&!
|
|
5
|
-
`)&&!
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Hn=typeof global=="object"&&global&&global.Object===Object&&global,zr=typeof self=="object"&&self&&self.Object===Object&&self,ge=Hn||zr||Function("return this")(),Ne=ge.Symbol,Kn=Object.prototype,Yr=Kn.hasOwnProperty,qr=Kn.toString,ze=Ne?Ne.toStringTag:void 0;function Qr(e){var t=Yr.call(e,ze),n=e[ze];try{e[ze]=void 0;var r=!0}catch{}var s=qr.call(e);return r&&(t?e[ze]=n:delete e[ze]),s}var Jr=Object.prototype,Zr=Jr.toString;function es(e){return Zr.call(e)}var ts="[object Null]",ns="[object Undefined]",sn=Ne?Ne.toStringTag:void 0;function Xe(e){return e==null?e===void 0?ns:ts:sn&&sn in Object(e)?Qr(e):es(e)}function De(e){return e!=null&&typeof e=="object"}var rs="[object Symbol]";function dt(e){return typeof e=="symbol"||De(e)&&Xe(e)==rs}function zn(e,t){for(var n=-1,r=e==null?0:e.length,s=Array(r);++n<r;)s[n]=t(e[n],n,e);return s}var pe=Array.isArray,an=Ne?Ne.prototype:void 0,on=an?an.toString:void 0;function Yn(e){if(typeof e=="string")return e;if(pe(e))return zn(e,Yn)+"";if(dt(e))return on?on.call(e):"";var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var ss=/\s/;function is(e){for(var t=e.length;t--&&ss.test(e.charAt(t)););return t}var as=/^\s+/;function os(e){return e&&e.slice(0,is(e)+1).replace(as,"")}function Ge(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var ln=NaN,ls=/^[-+]0x[0-9a-f]+$/i,cs=/^0b[01]+$/i,us=/^0o[0-7]+$/i,hs=parseInt;function fs(e){if(typeof e=="number")return e;if(dt(e))return ln;if(Ge(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Ge(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=os(e);var n=cs.test(e);return n||us.test(e)?hs(e.slice(2),n?2:8):ls.test(e)?ln:+e}var cn=1/0,ps=17976931348623157e292;function ds(e){if(!e)return e===0?e:0;if(e=fs(e),e===cn||e===-cn){var t=e<0?-1:1;return t*ps}return e===e?e:0}function Es(e){var t=ds(e),n=t%1;return t===t?n?t-n:t:0}function Et(e){return e}var Ns="[object AsyncFunction]",Ts="[object Function]",bs="[object GeneratorFunction]",ms="[object Proxy]";function qn(e){if(!Ge(e))return!1;var t=Xe(e);return t==Ts||t==bs||t==Ns||t==ms}var wt=ge["__core-js_shared__"],un=function(){var e=/[^.]+$/.exec(wt&&wt.keys&&wt.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Is(e){return!!un&&un in e}var _s=Function.prototype,gs=_s.toString;function Fe(e){if(e!=null){try{return gs.call(e)}catch{}try{return e+""}catch{}}return""}var As=/[\\^$.*+?()[\]{}|]/g,Ls=/^\[object .+?Constructor\]$/,vs=Function.prototype,ys=Object.prototype,ws=vs.toString,Ss=ys.hasOwnProperty,Ps=RegExp("^"+ws.call(Ss).replace(As,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Os(e){if(!Ge(e)||Is(e))return!1;var t=qn(e)?Ps:Ls;return t.test(Fe(e))}function xs(e,t){return e==null?void 0:e[t]}function Be(e,t){var n=xs(e,t);return Os(n)?n:void 0}var Ot=Be(ge,"WeakMap");function Ds(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var ks=800,Rs=16,Us=Date.now;function Ms(e){var t=0,n=0;return function(){var r=Us(),s=Rs-(r-n);if(n=r,s>0){if(++t>=ks)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Fs(e){return function(){return e}}var hn=function(){try{var e=Be(Object,"defineProperty");return e({},"",{}),e}catch{}}(),Bs=hn?function(e,t){return hn(e,"toString",{configurable:!0,enumerable:!1,value:Fs(t),writable:!0})}:Et,Cs=Ms(Bs);function Vs(e,t,n,r){e.length;for(var s=n+1;s--;)if(t(e[s],s,e))return s;return-1}var Gs=9007199254740991,$s=/^(?:0|[1-9]\d*)$/;function Qn(e,t){var n=typeof e;return t=t??Gs,!!t&&(n=="number"||n!="symbol"&&$s.test(e))&&e>-1&&e%1==0&&e<t}function Jn(e,t){return e===t||e!==e&&t!==t}var fn=Math.max;function Xs(e,t,n){return t=fn(t===void 0?e.length-1:t,0),function(){for(var r=arguments,s=-1,i=fn(r.length-t,0),a=Array(i);++s<i;)a[s]=r[t+s];s=-1;for(var o=Array(t+1);++s<t;)o[s]=r[s];return o[t]=n(a),Ds(e,this,o)}}function js(e,t){return Cs(Xs(e,t,Et),e+"")}var Ws=9007199254740991;function Ct(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Ws}function Nt(e){return e!=null&&Ct(e.length)&&!qn(e)}var Hs=Object.prototype;function Zn(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||Hs;return e===n}function er(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}var Ks="[object Arguments]";function pn(e){return De(e)&&Xe(e)==Ks}var tr=Object.prototype,zs=tr.hasOwnProperty,Ys=tr.propertyIsEnumerable,Vt=pn(function(){return arguments}())?pn:function(e){return De(e)&&zs.call(e,"callee")&&!Ys.call(e,"callee")};function qs(){return!1}var nr=typeof exports=="object"&&exports&&!exports.nodeType&&exports,dn=nr&&typeof module=="object"&&module&&!module.nodeType&&module,Qs=dn&&dn.exports===nr,En=Qs?ge.Buffer:void 0,Js=En?En.isBuffer:void 0,xt=Js||qs,Zs="[object Arguments]",ei="[object Array]",ti="[object Boolean]",ni="[object Date]",ri="[object Error]",si="[object Function]",ii="[object Map]",ai="[object Number]",oi="[object Object]",li="[object RegExp]",ci="[object Set]",ui="[object String]",hi="[object WeakMap]",fi="[object ArrayBuffer]",pi="[object DataView]",di="[object Float32Array]",Ei="[object Float64Array]",Ni="[object Int8Array]",Ti="[object Int16Array]",bi="[object Int32Array]",mi="[object Uint8Array]",Ii="[object Uint8ClampedArray]",_i="[object Uint16Array]",gi="[object Uint32Array]",x={};x[di]=x[Ei]=x[Ni]=x[Ti]=x[bi]=x[mi]=x[Ii]=x[_i]=x[gi]=!0;x[Zs]=x[ei]=x[fi]=x[ti]=x[pi]=x[ni]=x[ri]=x[si]=x[ii]=x[ai]=x[oi]=x[li]=x[ci]=x[ui]=x[hi]=!1;function Ai(e){return De(e)&&Ct(e.length)&&!!x[Xe(e)]}function Li(e){return function(t){return e(t)}}var rr=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ye=rr&&typeof module=="object"&&module&&!module.nodeType&&module,vi=Ye&&Ye.exports===rr,St=vi&&Hn.process,Nn=function(){try{var e=Ye&&Ye.require&&Ye.require("util").types;return e||St&&St.binding&&St.binding("util")}catch{}}(),Tn=Nn&&Nn.isTypedArray,sr=Tn?Li(Tn):Ai,yi=Object.prototype,wi=yi.hasOwnProperty;function ir(e,t){var n=pe(e),r=!n&&Vt(e),s=!n&&!r&&xt(e),i=!n&&!r&&!s&&sr(e),a=n||r||s||i,o=a?er(e.length,String):[],u=o.length;for(var p in e)(t||wi.call(e,p))&&!(a&&(p=="length"||s&&(p=="offset"||p=="parent")||i&&(p=="buffer"||p=="byteLength"||p=="byteOffset")||Qn(p,u)))&&o.push(p);return o}function Si(e,t){return function(n){return e(t(n))}}var Pi=Si(Object.keys,Object),Oi=Object.prototype,xi=Oi.hasOwnProperty;function Di(e){if(!Zn(e))return Pi(e);var t=[];for(var n in Object(e))xi.call(e,n)&&n!="constructor"&&t.push(n);return t}function Gt(e){return Nt(e)?ir(e):Di(e)}function ki(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}var Ri=Object.prototype,Ui=Ri.hasOwnProperty;function Mi(e){if(!Ge(e))return ki(e);var t=Zn(e),n=[];for(var r in e)r=="constructor"&&(t||!Ui.call(e,r))||n.push(r);return n}function Fi(e){return Nt(e)?ir(e,!0):Mi(e)}var Bi=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ci=/^\w*$/;function $t(e,t){if(pe(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||dt(e)?!0:Ci.test(e)||!Bi.test(e)||t!=null&&e in Object(t)}var Qe=Be(Object,"create");function Vi(){this.__data__=Qe?Qe(null):{},this.size=0}function Gi(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var $i="__lodash_hash_undefined__",Xi=Object.prototype,ji=Xi.hasOwnProperty;function Wi(e){var t=this.__data__;if(Qe){var n=t[e];return n===$i?void 0:n}return ji.call(t,e)?t[e]:void 0}var Hi=Object.prototype,Ki=Hi.hasOwnProperty;function zi(e){var t=this.__data__;return Qe?t[e]!==void 0:Ki.call(t,e)}var Yi="__lodash_hash_undefined__";function qi(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Qe&&t===void 0?Yi:t,this}function ke(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}ke.prototype.clear=Vi;ke.prototype.delete=Gi;ke.prototype.get=Wi;ke.prototype.has=zi;ke.prototype.set=qi;function Qi(){this.__data__=[],this.size=0}function Tt(e,t){for(var n=e.length;n--;)if(Jn(e[n][0],t))return n;return-1}var Ji=Array.prototype,Zi=Ji.splice;function ea(e){var t=this.__data__,n=Tt(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():Zi.call(t,n,1),--this.size,!0}function ta(e){var t=this.__data__,n=Tt(t,e);return n<0?void 0:t[n][1]}function na(e){return Tt(this.__data__,e)>-1}function ra(e,t){var n=this.__data__,r=Tt(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function Ae(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Ae.prototype.clear=Qi;Ae.prototype.delete=ea;Ae.prototype.get=ta;Ae.prototype.has=na;Ae.prototype.set=ra;var Je=Be(ge,"Map");function sa(){this.size=0,this.__data__={hash:new ke,map:new(Je||Ae),string:new ke}}function ia(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}function bt(e,t){var n=e.__data__;return ia(t)?n[typeof t=="string"?"string":"hash"]:n.map}function aa(e){var t=bt(this,e).delete(e);return this.size-=t?1:0,t}function oa(e){return bt(this,e).get(e)}function la(e){return bt(this,e).has(e)}function ca(e,t){var n=bt(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}function Le(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Le.prototype.clear=sa;Le.prototype.delete=aa;Le.prototype.get=oa;Le.prototype.has=la;Le.prototype.set=ca;var ua="Expected a function";function Xt(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(ua);var n=function(){var r=arguments,s=t?t.apply(this,r):r[0],i=n.cache;if(i.has(s))return i.get(s);var a=e.apply(this,r);return n.cache=i.set(s,a)||i,a};return n.cache=new(Xt.Cache||Le),n}Xt.Cache=Le;var ha=500;function fa(e){var t=Xt(e,function(r){return n.size===ha&&n.clear(),r}),n=t.cache;return t}var pa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,da=/\\(\\)?/g,Ea=fa(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(pa,function(n,r,s,i){t.push(s?i.replace(da,"$1"):r||n)}),t});function Na(e){return e==null?"":Yn(e)}function ar(e,t){return pe(e)?e:$t(e,t)?[e]:Ea(Na(e))}function mt(e){if(typeof e=="string"||dt(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}function or(e,t){t=ar(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[mt(t[n++])];return n&&n==r?e:void 0}function lr(e,t,n){var r=e==null?void 0:or(e,t);return r===void 0?n:r}function cr(e,t){for(var n=-1,r=t.length,s=e.length;++n<r;)e[s+n]=t[n];return e}var bn=Ne?Ne.isConcatSpreadable:void 0;function Ta(e){return pe(e)||Vt(e)||!!(bn&&e&&e[bn])}function ba(e,t,n,r,s){var i=-1,a=e.length;for(n||(n=Ta),s||(s=[]);++i<a;){var o=e[i];n(o)?cr(s,o):s[s.length]=o}return s}function mn(e){var t=e==null?0:e.length;return t?ba(e):[]}function ma(){this.__data__=new Ae,this.size=0}function Ia(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function _a(e){return this.__data__.get(e)}function ga(e){return this.__data__.has(e)}var Aa=200;function La(e,t){var n=this.__data__;if(n instanceof Ae){var r=n.__data__;if(!Je||r.length<Aa-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Le(r)}return n.set(e,t),this.size=n.size,this}function _e(e){var t=this.__data__=new Ae(e);this.size=t.size}_e.prototype.clear=ma;_e.prototype.delete=Ia;_e.prototype.get=_a;_e.prototype.has=ga;_e.prototype.set=La;function ur(e,t){for(var n=-1,r=e==null?0:e.length,s=0,i=[];++n<r;){var a=e[n];t(a,n,e)&&(i[s++]=a)}return i}function va(){return[]}var ya=Object.prototype,wa=ya.propertyIsEnumerable,In=Object.getOwnPropertySymbols,Sa=In?function(e){return e==null?[]:(e=Object(e),ur(In(e),function(t){return wa.call(e,t)}))}:va;function Pa(e,t,n){var r=t(e);return pe(e)?r:cr(r,n(e))}function _n(e){return Pa(e,Gt,Sa)}var Dt=Be(ge,"DataView"),kt=Be(ge,"Promise"),Rt=Be(ge,"Set"),gn="[object Map]",Oa="[object Object]",An="[object Promise]",Ln="[object Set]",vn="[object WeakMap]",yn="[object DataView]",xa=Fe(Dt),Da=Fe(Je),ka=Fe(kt),Ra=Fe(Rt),Ua=Fe(Ot),Se=Xe;(Dt&&Se(new Dt(new ArrayBuffer(1)))!=yn||Je&&Se(new Je)!=gn||kt&&Se(kt.resolve())!=An||Rt&&Se(new Rt)!=Ln||Ot&&Se(new Ot)!=vn)&&(Se=function(e){var t=Xe(e),n=t==Oa?e.constructor:void 0,r=n?Fe(n):"";if(r)switch(r){case xa:return yn;case Da:return gn;case ka:return An;case Ra:return Ln;case Ua:return vn}return t});var wn=ge.Uint8Array,Ma="__lodash_hash_undefined__";function Fa(e){return this.__data__.set(e,Ma),this}function Ba(e){return this.__data__.has(e)}function ot(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new Le;++t<n;)this.add(e[t])}ot.prototype.add=ot.prototype.push=Fa;ot.prototype.has=Ba;function Ca(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}function Va(e,t){return e.has(t)}var Ga=1,$a=2;function hr(e,t,n,r,s,i){var a=n&Ga,o=e.length,u=t.length;if(o!=u&&!(a&&u>o))return!1;var p=i.get(e),h=i.get(t);if(p&&h)return p==t&&h==e;var d=-1,N=!0,b=n&$a?new ot:void 0;for(i.set(e,t),i.set(t,e);++d<o;){var A=e[d],_=t[d];if(r)var v=a?r(_,A,d,t,e,i):r(A,_,d,e,t,i);if(v!==void 0){if(v)continue;N=!1;break}if(b){if(!Ca(t,function(K,z){if(!Va(b,z)&&(A===K||s(A,K,n,r,i)))return b.push(z)})){N=!1;break}}else if(!(A===_||s(A,_,n,r,i))){N=!1;break}}return i.delete(e),i.delete(t),N}function Xa(e){var t=-1,n=Array(e.size);return e.forEach(function(r,s){n[++t]=[s,r]}),n}function ja(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var Wa=1,Ha=2,Ka="[object Boolean]",za="[object Date]",Ya="[object Error]",qa="[object Map]",Qa="[object Number]",Ja="[object RegExp]",Za="[object Set]",eo="[object String]",to="[object Symbol]",no="[object ArrayBuffer]",ro="[object DataView]",Sn=Ne?Ne.prototype:void 0,Pt=Sn?Sn.valueOf:void 0;function so(e,t,n,r,s,i,a){switch(n){case ro:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case no:return!(e.byteLength!=t.byteLength||!i(new wn(e),new wn(t)));case Ka:case za:case Qa:return Jn(+e,+t);case Ya:return e.name==t.name&&e.message==t.message;case Ja:case eo:return e==t+"";case qa:var o=Xa;case Za:var u=r&Wa;if(o||(o=ja),e.size!=t.size&&!u)return!1;var p=a.get(e);if(p)return p==t;r|=Ha,a.set(e,t);var h=hr(o(e),o(t),r,s,i,a);return a.delete(e),h;case to:if(Pt)return Pt.call(e)==Pt.call(t)}return!1}var io=1,ao=Object.prototype,oo=ao.hasOwnProperty;function lo(e,t,n,r,s,i){var a=n&io,o=_n(e),u=o.length,p=_n(t),h=p.length;if(u!=h&&!a)return!1;for(var d=u;d--;){var N=o[d];if(!(a?N in t:oo.call(t,N)))return!1}var b=i.get(e),A=i.get(t);if(b&&A)return b==t&&A==e;var _=!0;i.set(e,t),i.set(t,e);for(var v=a;++d<u;){N=o[d];var K=e[N],z=t[N];if(r)var w=a?r(z,K,N,t,e,i):r(K,z,N,e,t,i);if(!(w===void 0?K===z||s(K,z,n,r,i):w)){_=!1;break}v||(v=N=="constructor")}if(_&&!v){var ee=e.constructor,G=t.constructor;ee!=G&&"constructor"in e&&"constructor"in t&&!(typeof ee=="function"&&ee instanceof ee&&typeof G=="function"&&G instanceof G)&&(_=!1)}return i.delete(e),i.delete(t),_}var co=1,Pn="[object Arguments]",On="[object Array]",rt="[object Object]",uo=Object.prototype,xn=uo.hasOwnProperty;function ho(e,t,n,r,s,i){var a=pe(e),o=pe(t),u=a?On:Se(e),p=o?On:Se(t);u=u==Pn?rt:u,p=p==Pn?rt:p;var h=u==rt,d=p==rt,N=u==p;if(N&&xt(e)){if(!xt(t))return!1;a=!0,h=!1}if(N&&!h)return i||(i=new _e),a||sr(e)?hr(e,t,n,r,s,i):so(e,t,u,n,r,s,i);if(!(n&co)){var b=h&&xn.call(e,"__wrapped__"),A=d&&xn.call(t,"__wrapped__");if(b||A){var _=b?e.value():e,v=A?t.value():t;return i||(i=new _e),s(_,v,n,r,i)}}return N?(i||(i=new _e),lo(e,t,n,r,s,i)):!1}function jt(e,t,n,r,s){return e===t?!0:e==null||t==null||!De(e)&&!De(t)?e!==e&&t!==t:ho(e,t,n,r,jt,s)}var fo=1,po=2;function Eo(e,t,n,r){var s=n.length,i=s;if(e==null)return!i;for(e=Object(e);s--;){var a=n[s];if(a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++s<i;){a=n[s];var o=a[0],u=e[o],p=a[1];if(a[2]){if(u===void 0&&!(o in e))return!1}else{var h=new _e,d;if(!(d===void 0?jt(p,u,fo|po,r,h):d))return!1}}return!0}function fr(e){return e===e&&!Ge(e)}function No(e){for(var t=Gt(e),n=t.length;n--;){var r=t[n],s=e[r];t[n]=[r,s,fr(s)]}return t}function pr(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}function To(e){var t=No(e);return t.length==1&&t[0][2]?pr(t[0][0],t[0][1]):function(n){return n===e||Eo(n,e,t)}}function bo(e,t){return e!=null&&t in Object(e)}function mo(e,t,n){t=ar(t,e);for(var r=-1,s=t.length,i=!1;++r<s;){var a=mt(t[r]);if(!(i=e!=null&&n(e,a)))break;e=e[a]}return i||++r!=s?i:(s=e==null?0:e.length,!!s&&Ct(s)&&Qn(a,s)&&(pe(e)||Vt(e)))}function Io(e,t){return e!=null&&mo(e,t,bo)}var _o=1,go=2;function Ao(e,t){return $t(e)&&fr(t)?pr(mt(e),t):function(n){var r=lr(n,e);return r===void 0&&r===t?Io(n,e):jt(t,r,_o|go)}}function dr(e){return function(t){return t==null?void 0:t[e]}}function Lo(e){return function(t){return or(t,e)}}function vo(e){return $t(e)?dr(mt(e)):Lo(e)}function Er(e){return typeof e=="function"?e:e==null?Et:typeof e=="object"?pe(e)?Ao(e[0],e[1]):To(e):vo(e)}function yo(e,t,n,r){for(var s=-1,i=e==null?0:e.length;++s<i;){var a=e[s];t(r,a,n(a),e)}return r}function wo(e){return function(t,n,r){for(var s=-1,i=Object(t),a=r(t),o=a.length;o--;){var u=a[++s];if(n(i[u],u,i)===!1)break}return t}}var Nr=wo();function So(e,t){return e&&Nr(e,t,Gt)}function Po(e,t){return function(n,r){if(n==null)return n;if(!Nt(n))return e(n,r);for(var s=n.length,i=-1,a=Object(n);++i<s&&r(a[i],i,a)!==!1;);return n}}var Oo=Po(So);function xo(e,t,n,r){return Oo(e,function(s,i,a){t(r,s,n(s),a)}),r}function Do(e,t){return function(n,r){var s=pe(n)?yo:xo,i=t?t():{};return s(n,e,Er(r),i)}}function ko(e){return De(e)&&Nt(e)}function U(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function Ro(e){return typeof e=="function"?e:Et}var Uo=Math.max,Mo=Math.min;function Fo(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var s=r-1;return n!==void 0&&(s=Es(n),s=n<0?Uo(r+s,0):Mo(s,r-1)),Vs(e,Er(t),s)}function Bo(e){return e&&e.length?e[0]:void 0}function Ze(e,t){return e==null?e:Nr(e,Ro(t),Fi)}var oe=Do(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Co=Math.max;function Vo(e){if(!(e&&e.length))return[];var t=0;return e=ur(e,function(n){if(ko(n))return t=Co(n.length,t),!0}),er(t,function(n){return zn(e,dr(n))})}var Ut=js(Vo),f=(e=>(e.SPACE="<space>",e.TAB="<tab>",e.NEWLINE="<newline>",e.COMMA="<comma>",e.LPAREN="<lparen>",e.RPAREN="<rparen>",e.LBRACE="<lbrace>",e.RBRACE="<rbrace>",e.LBRACKET="<lbracket>",e.RBRACKET="<rbracket>",e.LANGLE="<langle>",e.RANGLE="<rangle>",e.OP="<op>",e.EOF="<eof>",e.NUMERIC_LITERAL="<number>",e.STRING_LITERAL="<string>",e.COLOR_LITERAL="<color>",e.FUNCTION_EXPRESSION="<function-expression>",e.QUOTED_STRING="<variable>",e.IDENTIFIER="<identifier>",e.SEMICOLON="<semicolon>",e.COLON="<colon>",e.TILDE="<tilde>",e.SINGLE_LINE_COMMENT="<single-line-comment>",e.MULTILINE_COMMENT="<multiline-comment>",e))(f||{});function Go(e){switch(e.kind){case"<newline>":case"<space>":case"<tab>":case"<single-line-comment>":case"<multiline-comment>":return!0;default:return!1}}function $o(e){if(!e)return!1;switch(e){case"+":case"-":case"*":case"/":case"%":case"<":case">":case"=":case"!":case".":case"&":case"|":return!0;default:return!1}}function Dn(e){return e!==void 0&&e.kind==="<op>"}class Q{constructor(t,n,r,s,i){this.kind=t,this.startPos=n,this.endPos=r,this.value=s,this.leadingTrivia=[],this.trailingTrivia=[],this.leadingInvalid=[],this.trailingInvalid=[],this.isInvalid=i,this.start=n.offset,this.end=r.offset}static create(t,n,r,s,i){return new Q(t,n,r,s,i)}}function Tr(e){return e.trailingTrivia.find(({kind:t})=>t===f.NEWLINE)!==void 0}function kn(e,t){return t.leadingTrivia.find(({kind:r})=>r===f.NEWLINE)!==void 0||Tr(e)}function Mt(e){return e.trailingTrivia.find(({kind:t})=>[f.SPACE,f.TAB].includes(t))!==void 0}function br(e){return e.trailingTrivia.length===0?e.end:br(U(e.trailingTrivia))}function mr(e){return e.leadingTrivia.length===0?e.start:mr(e.leadingTrivia[0])}function Xo(e){return[f.SINGLE_LINE_COMMENT,f.MULTILINE_COMMENT].includes(e.kind)}class jo{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class k{constructor(t,n,r){this.id=t,this.kind=n;const s=r.find(a=>a!==void 0&&!Number.isNaN(a.start));s?(this.startPos=s.startPos,this.fullStart=s instanceof Q?mr(s):s.fullStart):(this.startPos={offset:NaN,column:NaN,line:NaN},this.fullStart=NaN);const i=[...r].reverse().find(a=>a!==void 0&&!Number.isNaN(a.end));i?(this.endPos=i.endPos,this.fullEnd=i instanceof Q?br(i):i.fullEnd):(this.endPos={offset:NaN,column:NaN,line:NaN},this.fullEnd=NaN),this.start=this.startPos.offset,this.end=this.endPos.offset}}var Pe=(e=>(e.PROGRAM="<program>",e.ELEMENT_DECLARATION="<element-declaration>",e.ATTRIBUTE="<attribute>",e.IDENTIFIER_STREAM="<identifer-stream>",e.LITERAL="<literal>",e.VARIABLE="<variable>",e.PREFIX_EXPRESSION="<prefix-expression>",e.INFIX_EXPRESSION="<infix-expression>",e.POSTFIX_EXPRESSION="<postfix-expression>",e.FUNCTION_EXPRESSION="<function-expression>",e.FUNCTION_APPLICATION="<function-application>",e.BLOCK_EXPRESSION="<block-expression>",e.LIST_EXPRESSION="<list-expression>",e.TUPLE_EXPRESSION="<tuple-expression>",e.CALL_EXPRESSION="<call-expression>",e.PRIMARY_EXPRESSION="<primary-expression>",e.GROUP_EXPRESSION="<group-expression>",e.DUMMY="<dummy>",e.ARRAY="<array>",e.PARTIAL_INJECTION="<partial-injection>",e))(Pe||{});class J extends k{constructor({body:t=[],eof:n},r){super(r,"<program>",[...t,n]),this.body=t,this.eof=n}}class S extends k{constructor({type:t,name:n,as:r,alias:s,attributeList:i,bodyColon:a,body:o},u){if(super(u,"<element-declaration>",[t,n,r,s,i,a,o]),o&&a&&!(o instanceof y||o instanceof S))throw new Error("If an element has a simple body, it must be a function application node");this.type=t,this.name=n,this.as=r,this.alias=s,this.attributeList=i,this.bodyColon=a,this.body=o}}class ce extends k{constructor({identifiers:t=[]},n){super(n,"<identifer-stream>",t||[]),this.identifiers=t}}class ue extends k{constructor({name:t,colon:n,value:r},s){super(s,"<attribute>",[t,n,r]),this.name=t,this.value=r,this.colon=n}}class se extends k{constructor({op:t,expression:n},r){super(r,"<prefix-expression>",[t,n]),this.op=t,this.expression=n}}class Te extends k{constructor({op:t,leftExpression:n,rightExpression:r},s){super(s,"<infix-expression>",[n,t,r]),this.op=t,this.leftExpression=n,this.rightExpression=r}}class It extends k{constructor({op:t,expression:n},r){super(r,"<postfix-expression>",[n,t]),this.op=t,this.expression=n}}class ie extends k{constructor({value:t},n){super(n,"<function-expression>",[t]),this.value=t}}class y extends k{constructor({callee:t,args:n=[]},r){super(r,"<function-application>",[t,...n]),this.callee=t,this.args=n}}class Ee extends k{constructor({blockOpenBrace:t,body:n=[],blockCloseBrace:r},s){super(s,"<block-expression>",[t,...n,r]),this.blockOpenBrace=t,this.body=n,this.blockCloseBrace=r}}class Re extends k{constructor({op:t,partial:n},r){super(r,"<partial-injection>",[t,n]),this.partial=n}}class R extends k{constructor({listOpenBracket:t,elementList:n=[],commaList:r=[],listCloseBracket:s},i){super(i,"<list-expression>",[t,...Ir(n,r),s]),this.listOpenBracket=t,this.elementList=n,this.commaList=r,this.listCloseBracket=s}}class be extends k{constructor({tupleOpenParen:t,elementList:n=[],commaList:r=[],tupleCloseParen:s},i){super(i,"<tuple-expression>",[t,...Ir(n,r),s]),this.tupleOpenParen=t,this.elementList=n,this.commaList=r,this.tupleCloseParen=s}}class Wt extends be{constructor({groupOpenParen:t,expression:n,groupCloseParen:r},s){super({tupleOpenParen:t,elementList:n&&[n],commaList:[],tupleCloseParen:r},s),this.kind="<group-expression>"}}class ae extends k{constructor({callee:t,argumentList:n},r){super(r,"<call-expression>",[t,n]),this.callee=t,this.argumentList=n}}class je extends k{constructor({literal:t},n){super(n,"<literal>",[t]),this.literal=t}}class de extends k{constructor({variable:t},n){super(n,"<variable>",[t]),this.variable=t}}class q extends k{constructor({expression:t},n){super(n,"<primary-expression>",[t]),this.expression=t}}class st extends k{constructor({pre:t},n){const r=Q.create(f.SPACE,t.endPos,t.endPos," ",!1);super(n,"<dummy>",[r])}}class Ue extends k{constructor({expression:t,indexer:n},r){super(r,"<array>",[t,n]),this.array=t,this.indexer=n}}function Ir(e,t){if(!e||e.length===0)return t||[];if(!t||t.length===0)return e||[];const[n]=e,[r]=t;return(n.start<r.start?mn(Ut(e,t)):mn(Ut(t,e))).filter(s=>s!==null)}function Wo(e,t=!1){return JSON.stringify(e,function(n,r){var s;return!(this instanceof J)&&n==="symbol"?r==null?void 0:r.id:n==="symbol"?{symbolTable:r==null?void 0:r.symbolTable,id:r==null?void 0:r.id,references:r==null?void 0:r.references.map(i=>i.id),declaration:(s=r==null?void 0:r.declaration)==null?void 0:s.id}:n==="referee"||n==="parent"||n==="declaration"?r==null?void 0:r.id:n==="symbolTable"?Object.fromEntries(r.table):r},t?2:0)}class B{constructor(t){this.value=t}unwrap(){return this.value}unwrap_or(t){return this.value}and_then(t){return t(this.value)}map(t){return new B(t(this.value))}isOk(){return!0}}class O{constructor(){this.value=void 0}unwrap(){throw new Error("Trying to unwrap a None value")}unwrap_or(t){return t}and_then(t){return new O}map(t){return new O}isOk(){return!1}}var m=(e=>(e.Schema="Schema",e.Table="Table",e.Column="Column",e.TableGroup="TableGroup",e.TableGroupField="TableGroup field",e.Enum="Enum",e.EnumField="Enum field",e.Note="Note",e.TablePartial="TablePartial",e.TablePartialInjection="TablePartialInjection",e))(m||{});function Ht(e){return`Schema:${e}`}function lt(e){return`Table:${e}`}function _t(e){return`Column:${e}`}function Kt(e){return`Enum:${e}`}function zt(e){return`Enum field:${e}`}function Yt(e){return`TableGroup:${e}`}function qt(e){return`TableGroup field:${e}`}function Ho(e){return`Note:${e}`}function Qt(e){return`TablePartial:${e}`}function _r(e){return`TablePartialInjection:${e}`}function it(e,t){switch(t){case"Column":return _t(e);case"Enum":return Kt(e);case"Enum field":return zt(e);case"Schema":return Ht(e);case"Table":return lt(e);case"TableGroup":return Yt(e);case"TableGroup field":return qt(e);case"TablePartial":return Qt(e);default:throw new Error("Unreachable")}}function he(e){const[t,n]=e.split(":");return Object.values(m).includes(t)?new B({name:n,kind:t}):new O}function Ko(e){const t=he(e).unwrap_or(void 0);if(!t)return!1;const{kind:n,name:r}=t;return n==="Schema"&&r==="public"}function zo(e){const t=he(e).unwrap_or(void 0);if(!t)return!1;const{kind:n}=t;return n==="TablePartialInjection"}function Yo(e){const t=he(e).unwrap_or(void 0);if(!t)return null;const{kind:n,name:r}=t;return n==="TablePartialInjection"?it(r,"TablePartial"):null}class qo{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class gr{constructor({symbolTable:t},n){this.references=[],this.id=n,this.symbolTable=t}}class Qo{constructor({symbolTable:t,declaration:n},r){this.references=[],this.id=r,this.symbolTable=t,this.declaration=n}}class Jo{constructor({declaration:t},n){this.references=[],this.id=n,this.declaration=t}}class Ar{constructor({symbolTable:t,declaration:n},r){this.references=[],this.id=r,this.symbolTable=t,this.declaration=n}}class Jt{constructor({declaration:t},n){this.references=[],this.id=n,this.declaration=t}}class Zo{constructor({symbolTable:t,declaration:n},r){this.references=[],this.id=r,this.symbolTable=t,this.declaration=n}}class el{constructor({declaration:t},n){this.references=[],this.id=n,this.declaration=t}}class tl{constructor({symbolTable:t,declaration:n},r){this.references=[],this.id=r,this.symbolTable=t,this.declaration=n}}class nl{constructor({declaration:t},n){this.references=[],this.id=n,this.declaration=t}}class rl{constructor({injectorFieldSymbol:t,injectorDeclaration:n},r){this.references=[],this.id=r,this.injectorDeclaration=n,this.injectorFieldSymbol=t}}function sl(e){return[Ht,lt,Kt,Yt,_t,zt,qt,Qt,_r].map(t=>t(e))}function il(e){return e instanceof Jt?rl:null}function gt(e){return!!e.match(new RegExp("(\\p{L}|_|\\p{M})","gu"))}function ct(e){const[t]=e;return t>="0"&&t<="9"}function al(e){const[t]=e;return ct(t)||gt(t)&&t.toLowerCase()>="a"&&t.toLowerCase()<="f"}function Ve(e){return gt(e)||ct(e)}function Rn(e,t){const n=[],r=Math.min(e.length,t.length);for(let s=0;s<r;s+=1)n.push(e[s],t[s]);return n.push(...e.slice(r),...t.slice(r)),n}function qe(e,t){return e>=t.start&&e<t.end}function Lr(e){var t;return e instanceof se?`${(t=e.op)==null?void 0:t.value}${Lr(e.expression)}`:e.expression.literal.value}function Ft(e){var t;return e instanceof se?((t=e.op)==null?void 0:t.value)==="-"?-Ft(e.expression):Ft(e.expression):Number.parseFloat(e.expression.literal.value)}var l=(e=>(e[e.UNKNOWN_SYMBOL=1e3]="UNKNOWN_SYMBOL",e[e.UNEXPECTED_SYMBOL=1001]="UNEXPECTED_SYMBOL",e[e.UNEXPECTED_EOF=1002]="UNEXPECTED_EOF",e[e.UNEXPECTED_NEWLINE=1003]="UNEXPECTED_NEWLINE",e[e.UNKNOWN_TOKEN=1004]="UNKNOWN_TOKEN",e[e.UNEXPECTED_TOKEN=1005]="UNEXPECTED_TOKEN",e[e.UNEXPECTED_ELEMENT_DECLARATION=1006]="UNEXPECTED_ELEMENT_DECLARATION",e[e.MISSING_SPACES=1007]="MISSING_SPACES",e[e.UNKNOWN_PREFIX_OP=1008]="UNKNOWN_PREFIX_OP",e[e.INVALID_OPERAND=1009]="INVALID_OPERAND",e[e.EMPTY_ATTRIBUTE_NAME=1010]="EMPTY_ATTRIBUTE_NAME",e[e.INVALID_ESCAPE_SEQUENCE=1011]="INVALID_ESCAPE_SEQUENCE",e[e.INVALID_NAME=3e3]="INVALID_NAME",e[e.UNEXPECTED_NAME=3001]="UNEXPECTED_NAME",e[e.NAME_NOT_FOUND=3002]="NAME_NOT_FOUND",e[e.DUPLICATE_NAME=3003]="DUPLICATE_NAME",e[e.INVALID_ALIAS=3004]="INVALID_ALIAS",e[e.UNEXPECTED_ALIAS=3005]="UNEXPECTED_ALIAS",e[e.UNEXPECTED_SETTINGS=3006]="UNEXPECTED_SETTINGS",e[e.INVALID_SETTINGS=3007]="INVALID_SETTINGS",e[e.UNEXPECTED_SIMPLE_BODY=3008]="UNEXPECTED_SIMPLE_BODY",e[e.UNEXPECTED_COMPLEX_BODY=3009]="UNEXPECTED_COMPLEX_BODY",e[e.INVALID_TABLE_CONTEXT=3010]="INVALID_TABLE_CONTEXT",e[e.UNKNOWN_TABLE_SETTING=3011]="UNKNOWN_TABLE_SETTING",e[e.DUPLICATE_TABLE_SETTING=3012]="DUPLICATE_TABLE_SETTING",e[e.INVALID_TABLEGROUP_CONTEXT=3013]="INVALID_TABLEGROUP_CONTEXT",e[e.INVALID_TABLEGROUP_ELEMENT_NAME=3014]="INVALID_TABLEGROUP_ELEMENT_NAME",e[e.DUPLICATE_TABLEGROUP_ELEMENT_NAME=3015]="DUPLICATE_TABLEGROUP_ELEMENT_NAME",e[e.DUPLICATE_TABLEGROUP_FIELD_NAME=3016]="DUPLICATE_TABLEGROUP_FIELD_NAME",e[e.INVALID_TABLEGROUP_FIELD=3017]="INVALID_TABLEGROUP_FIELD",e[e.EMPTY_TABLE=3018]="EMPTY_TABLE",e[e.INVALID_COLUMN=3019]="INVALID_COLUMN",e[e.INVALID_COLUMN_NAME=3020]="INVALID_COLUMN_NAME",e[e.UNKNOWN_COLUMN_SETTING=3021]="UNKNOWN_COLUMN_SETTING",e[e.INVALID_COLUMN_TYPE=3022]="INVALID_COLUMN_TYPE",e[e.DUPLICATE_COLUMN_NAME=3023]="DUPLICATE_COLUMN_NAME",e[e.DUPLICATE_COLUMN_SETTING=3024]="DUPLICATE_COLUMN_SETTING",e[e.INVALID_COLUMN_SETTING_VALUE=3025]="INVALID_COLUMN_SETTING_VALUE",e[e.INVALID_ENUM_CONTEXT=3026]="INVALID_ENUM_CONTEXT",e[e.INVALID_ENUM_ELEMENT_NAME=3027]="INVALID_ENUM_ELEMENT_NAME",e[e.INVALID_ENUM_ELEMENT=3028]="INVALID_ENUM_ELEMENT",e[e.DUPLICATE_ENUM_ELEMENT_NAME=3029]="DUPLICATE_ENUM_ELEMENT_NAME",e[e.UNKNOWN_ENUM_ELEMENT_SETTING=3030]="UNKNOWN_ENUM_ELEMENT_SETTING",e[e.DUPLICATE_ENUM_ELEMENT_SETTING=3031]="DUPLICATE_ENUM_ELEMENT_SETTING",e[e.INVALID_ENUM_ELEMENT_SETTING=3032]="INVALID_ENUM_ELEMENT_SETTING",e[e.EMPTY_ENUM=3033]="EMPTY_ENUM",e[e.INVALID_REF_CONTEXT=3034]="INVALID_REF_CONTEXT",e[e.UNKNOWN_REF_SETTING=3035]="UNKNOWN_REF_SETTING",e[e.DUPLICATE_REF_SETTING=3036]="DUPLICATE_REF_SETTING",e[e.INVALID_REF_SETTING_VALUE=3037]="INVALID_REF_SETTING_VALUE",e[e.INVALID_REF_RELATIONSHIP=3038]="INVALID_REF_RELATIONSHIP",e[e.INVALID_REF_FIELD=3039]="INVALID_REF_FIELD",e[e.EMPTY_REF=3040]="EMPTY_REF",e[e.REF_REDEFINED=3041]="REF_REDEFINED",e[e.INVALID_NOTE_CONTEXT=3042]="INVALID_NOTE_CONTEXT",e[e.INVALID_NOTE=3043]="INVALID_NOTE",e[e.NOTE_REDEFINED=3044]="NOTE_REDEFINED",e[e.NOTE_CONTENT_REDEFINED=3045]="NOTE_CONTENT_REDEFINED",e[e.EMPTY_NOTE=3046]="EMPTY_NOTE",e[e.INVALID_INDEXES_CONTEXT=3047]="INVALID_INDEXES_CONTEXT",e[e.INVALID_INDEXES_FIELD=3048]="INVALID_INDEXES_FIELD",e[e.INVALID_INDEX=3049]="INVALID_INDEX",e[e.UNKNOWN_INDEX_SETTING=3050]="UNKNOWN_INDEX_SETTING",e[e.DUPLICATE_INDEX_SETTING=3051]="DUPLICATE_INDEX_SETTING",e[e.UNEXPECTED_INDEX_SETTING_VALUE=3052]="UNEXPECTED_INDEX_SETTING_VALUE",e[e.INVALID_INDEX_SETTING_VALUE=3053]="INVALID_INDEX_SETTING_VALUE",e[e.INVALID_PROJECT_CONTEXT=3054]="INVALID_PROJECT_CONTEXT",e[e.PROJECT_REDEFINED=3055]="PROJECT_REDEFINED",e[e.INVALID_PROJECT_FIELD=3056]="INVALID_PROJECT_FIELD",e[e.INVALID_CUSTOM_CONTEXT=3057]="INVALID_CUSTOM_CONTEXT",e[e.INVALID_CUSTOM_ELEMENT_VALUE=3058]="INVALID_CUSTOM_ELEMENT_VALUE",e[e.INVALID_ELEMENT_IN_SIMPLE_BODY=3059]="INVALID_ELEMENT_IN_SIMPLE_BODY",e[e.INVALID_TABLE_PARTIAL_CONTEXT=3060]="INVALID_TABLE_PARTIAL_CONTEXT",e[e.INVALID_TABLE_PARTIAL_ELEMENT_NAME=3061]="INVALID_TABLE_PARTIAL_ELEMENT_NAME",e[e.INVALID_TABLE_PARTIAL_SETTING_VALUE=3062]="INVALID_TABLE_PARTIAL_SETTING_VALUE",e[e.DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME=3063]="DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME",e[e.DUPLICATE_TABLE_PARTIAL_SETTING=3064]="DUPLICATE_TABLE_PARTIAL_SETTING",e[e.INVALID_TABLE_PARTIAL_INJECTION=3065]="INVALID_TABLE_PARTIAL_INJECTION",e[e.INVALID_TABLE_PARTIAL_INJECTION_OP=3066]="INVALID_TABLE_PARTIAL_INJECTION_OP",e[e.INVALID_TABLE_PARTIAL_INJECTION_NAME=3067]="INVALID_TABLE_PARTIAL_INJECTION_NAME",e[e.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME=3068]="DUPLICATE_TABLE_PARTIAL_INJECTION_NAME",e[e.UNKNOWN_TABLE_PARTIAL_SETTING=3069]="UNKNOWN_TABLE_PARTIAL_SETTING",e[e.INVALID_TABLE_SETTING_VALUE=3070]="INVALID_TABLE_SETTING_VALUE",e[e.INVALID_CHECKS_CONTEXT=3071]="INVALID_CHECKS_CONTEXT",e[e.INVALID_CHECKS_FIELD=3072]="INVALID_CHECKS_FIELD",e[e.INVALID_CHECK=3073]="INVALID_CHECK",e[e.UNKNOWN_CHECK_SETTING=3074]="UNKNOWN_CHECK_SETTING",e[e.DUPLICATE_CHECK_SETTING=3075]="DUPLICATE_CHECK_SETTING",e[e.INVALID_CHECK_SETTING_VALUE=3076]="INVALID_CHECK_SETTING_VALUE",e[e.BINDING_ERROR=4e3]="BINDING_ERROR",e[e.UNSUPPORTED=5e3]="UNSUPPORTED",e[e.CIRCULAR_REF=5001]="CIRCULAR_REF",e[e.SAME_ENDPOINT=5002]="SAME_ENDPOINT",e[e.UNEQUAL_FIELDS_BINARY_REF=5003]="UNEQUAL_FIELDS_BINARY_REF",e[e.CONFLICTING_SETTING=5004]="CONFLICTING_SETTING",e[e.TABLE_REAPPEAR_IN_TABLEGROUP=5005]="TABLE_REAPPEAR_IN_TABLEGROUP",e))(l||{});class c extends Error{constructor(t,n,r){super(n),this.code=t,this.diagnostic=n,this.nodeOrToken=r,this.start=r.start,this.end=r.end,this.name=this.constructor.name,Object.setPrototypeOf(this,c.prototype)}}class re{constructor(t,n){this.value=t,this.errors=n===void 0?[]:n}getValue(){return this.value}getErrors(){return this.errors}chain(t){const n=t(this.value),r=[...this.errors,...n.errors];return new re(n.value,r)}map(t){return new re(t(this.value),this.errors)}}function ol(e,t,n){if(!e||!Oe(e)||t.length===0)return new O;const r=[...t],s=Un(e).unwrap(),i=r.pop();if(!(i instanceof Ee))return new O;const a=U(r)instanceof R?r.pop():void 0;if(r.length===3){const o=Un(r[1]).value;return!o||!Bt(o)?new O:new B(n.create(S,{type:s,name:r[0],as:o,alias:r[2],attributeList:a,body:i}))}return r.length===1?new B(n.create(S,{type:s,name:r[0],attributeList:a,body:i})):r.length===0?new B(n.create(S,{type:s,attributeList:a,body:i})):new O}function Bt(e){return(e==null?void 0:e.kind)===f.IDENTIFIER&&e.value==="as"}function g(e){e&&(e instanceof Q?ll(e):cl(e))}function ll(e){e.kind!==f.EOF&&(e.isInvalid=!0)}function cl(e){if(e instanceof S)g(e.type),g(e.name),g(e.as),g(e.alias),g(e.bodyColon),g(e.attributeList),g(e.body);else if(e instanceof ce)e.identifiers.forEach(g);else if(e instanceof ue)g(e.name),g(e.colon),g(e.value);else if(e instanceof se)g(e.op),g(e.expression);else if(e instanceof Te)g(e.leftExpression),g(e.op),g(e.rightExpression);else if(e instanceof It)g(e.op),g(e.expression);else if(e instanceof Ee)g(e.blockOpenBrace),e.body.forEach(g),g(e.blockCloseBrace);else if(e instanceof R)g(e.listOpenBracket),e.commaList.forEach(g),e.elementList.forEach(g),g(e.listCloseBracket);else if(e instanceof be)g(e.tupleOpenParen),e.commaList.forEach(g),e.elementList.forEach(g),g(e.tupleCloseParen);else if(e instanceof ae)g(e.callee),g(e.argumentList);else if(e instanceof y)g(e.callee),e.args.forEach(g);else if(e instanceof q)g(e.expression);else if(e instanceof ie)g(e.value);else if(e instanceof de)g(e.variable);else if(e instanceof je)g(e.literal);else throw e instanceof Wt?new Error("This case is handled by the TupleExpressionNode case"):new Error("Unreachable case in markInvalidNode")}function vr(e){return!!(e!=null&&e.isInvalid)}function j(...e){return e.filter(t=>t!==void 0)}function ul(e){if(e instanceof J)return j(...e.body,e.eof);if(e instanceof S)return j(e.type,e.name,e.as,e.alias,e.attributeList,e.bodyColon,e.body);if(e instanceof ue)return j(e.name,e.colon,e.value);if(e instanceof ce)return e.identifiers;if(e instanceof je)return e.literal?[e.literal]:[];if(e instanceof de)return j(e.variable);if(e instanceof se)return j(e.op,e.expression);if(e instanceof Te)return j(e.leftExpression,e.op,e.rightExpression);if(e instanceof It)return j(e.expression,e.op);if(e instanceof ie)return j(e.value);if(e instanceof y)return j(e.callee,...e.args);if(e instanceof Ee)return j(e.blockOpenBrace,...e.body,e.blockCloseBrace);if(e instanceof R)return j(e.listOpenBracket,...Rn(e.elementList,e.commaList),e.listCloseBracket);if(e instanceof be)return j(e.tupleOpenParen,...Rn(e.elementList,e.commaList),e.tupleCloseParen);if(e instanceof ae)return j(e.callee,e.argumentList);if(e instanceof q)return j(e.expression);if(e instanceof Ue)return j(e.array,e.indexer);if(e instanceof Re)return j(e.partial);throw e instanceof Wt?new Error("This case is already handled by TupleExpressionNode"):new Error("Unreachable - no other possible cases")}function Un(e){return V(e)?new B(e.expression.variable):new O}function H(e){var t;return e instanceof q&&(e.expression instanceof de&&e.expression.variable instanceof Q&&e.expression.variable.kind===f.QUOTED_STRING||e.expression instanceof je&&((t=e.expression.literal)==null?void 0:t.kind)===f.STRING_LITERAL)}function V(e){return e instanceof q&&e.expression instanceof de&&e.expression.variable instanceof Q}function Oe(e){var t;return e instanceof q&&e.expression instanceof de&&((t=e.expression.variable)==null?void 0:t.kind)===f.IDENTIFIER}function At(e){var t;return e instanceof Te&&e.leftExpression instanceof k&&e.rightExpression instanceof k&&((t=e.op)==null?void 0:t.value)==="."}function Zt(e){return V(e)?!0:At(e)&&V(e.rightExpression)&&Zt(e.leftExpression)}function $e(e){if(e===void 0)return new O;const t=e.identifiers.map(n=>n.value).join(" ");return t===""?new O:new B(t)}class hl{constructor(t){this.start={offset:0,line:0,column:0},this.current={offset:0,line:0,column:0},this.tokens=[],this.errors=[],this.text=t}isAtEnd(){return this.current.offset>=this.text.length}advance(){const t=this.peek();return this.current={...this.current},t===`
|
|
2
|
+
`?(this.current.line+=1,this.current.column=0):this.current.column+=1,this.current.offset+=1,t}peek(t=0){if(!(this.current.offset+t>=this.text.length))return this.text[this.current.offset+t]}check(t){for(let n=0;n<t.length;n+=1)if(t[n]!==this.peek(n))return!1;return!0}match(t){return this.check(t)?(t.split("").forEach(()=>this.advance()),!0):!1}addToken(t,n=!1){this.tokens.push(this.createToken(t,n))}createToken(t,n=!1){return Q.create(t,this.start,this.current,this.text.substring(this.start.offset,this.current.offset),n)}lex(){return this.scanTokens(),this.tokens.push(Q.create(f.EOF,this.start,this.current,"",!1)),this.gatherTrivia(),this.gatherInvalid(),new re(this.tokens,this.errors)}scanTokens(){for(;!this.isAtEnd();){const t=this.advance();switch(t){case" ":this.addToken(f.SPACE);break;case"\r":break;case`
|
|
3
|
+
`:this.addToken(f.NEWLINE);break;case" ":this.addToken(f.TAB);break;case",":this.addToken(f.COMMA);break;case"(":this.addToken(f.LPAREN);break;case")":this.addToken(f.RPAREN);break;case"[":this.addToken(f.LBRACKET);break;case"]":this.addToken(f.RBRACKET);break;case"{":this.addToken(f.LBRACE);break;case"}":this.addToken(f.RBRACE);break;case";":this.addToken(f.SEMICOLON);break;case":":this.addToken(f.COLON);break;case"~":this.addToken(f.TILDE);break;case"'":this.match("''")?this.multilineStringLiteral():this.singleLineStringLiteral();break;case'"':this.quotedVariable();break;case"`":this.functionExpression();break;case"#":this.colorLiteral();break;case"/":this.match("/")?this.singleLineComment():this.match("*")?this.multilineComment():this.operator(t);break;default:if($o(t)){this.operator(t);break}if(gt(t)){this.identifier();break}if(ct(t)){this.numericLiteralOrIdentifier();break}this.addToken(f.OP,!0),this.errors.push(new c(l.UNKNOWN_SYMBOL,`Unexpected token '${t}'`,this.createToken(f.OP,!0)));break}this.start={...this.current}}}gatherTrivia(){let t=!0,n=[],r;const s=[];for(const i of this.tokens)Go(i)?(n.push(i),i.kind===f.NEWLINE&&r&&(r.trailingTrivia=n,t=!0,r=void 0,n=[])):(t?i.leadingTrivia=n:r.trailingTrivia=n,s.push(i),n=[],r=i,t=!1);this.tokens=s}gatherInvalid(){let t;const n=[],r=[];for(t=0;t<this.tokens.length&&vr(this.tokens[t]);t+=1)r.push(this.tokens[t]);let s=this.tokens[t];for(s.leadingInvalid=[...r,...s.leadingInvalid];t<this.tokens.length;t+=1){const i=this.tokens[t];i.isInvalid?s.trailingInvalid.push(i):(s=i,n.push(i))}this.tokens=n}consumeUntil(t,n,{allowNewline:r,allowEof:s,raw:i,consumeStopSequence:a=!0}){let o="";for(;!this.isAtEnd()&&(r||!this.check(`
|
|
4
|
+
`))&&!this.check(n);)this.peek()==="\\"&&!i?(this.advance(),o+=this.escapedString()):o+=this.advance();if(this.isAtEnd()&&!s){const u=this.createToken(t,!0);this.tokens.push(u),this.errors.push(new c(l.UNEXPECTED_EOF,"EOF reached while parsing",u));return}if(this.check(`
|
|
5
|
+
`)&&!r){const u=this.createToken(t,!0);this.tokens.push(u),this.errors.push(new c(l.UNEXPECTED_NEWLINE,"Invalid newline encountered while parsing",u));return}a&&this.match(n),this.tokens.push(Q.create(t,this.start,this.current,o,!1))}singleLineStringLiteral(){this.consumeUntil(f.STRING_LITERAL,"'",{allowNewline:!1,allowEof:!1,raw:!1})}multilineStringLiteral(){this.consumeUntil(f.STRING_LITERAL,"'''",{allowNewline:!0,allowEof:!1,raw:!1})}functionExpression(){this.consumeUntil(f.FUNCTION_EXPRESSION,"`",{allowNewline:!0,allowEof:!1,raw:!0})}quotedVariable(){this.consumeUntil(f.QUOTED_STRING,'"',{allowNewline:!1,allowEof:!1,raw:!1})}singleLineComment(){this.consumeUntil(f.SINGLE_LINE_COMMENT,`
|
|
6
6
|
`,{allowNewline:!0,allowEof:!0,raw:!0,consumeStopSequence:!1})}multilineComment(){this.consumeUntil(f.MULTILINE_COMMENT,"*/",{allowNewline:!0,allowEof:!1,raw:!0})}identifier(){for(;!this.isAtEnd()&&Ve(this.peek());)this.advance();this.addToken(f.IDENTIFIER)}operator(t){switch(t){case"<":[">","="].includes(this.peek())&&this.advance();break;case">":this.peek()==="="&&this.advance();break;case"=":this.peek()==="="&&this.advance();break;case"!":this.peek()==="="&&this.advance();break}this.addToken(f.OP)}numericLiteralOrIdentifier(){let t=0;if(this.isAtEnd())return this.addToken(f.NUMERIC_LITERAL);for(;!this.isAtEnd();){const n=this.check(".");if(t+=n?1:0,t>1)break;if(!n&&this.current.offset===this.text.length-1)return this.advance(),this.addToken(f.NUMERIC_LITERAL);if(!n&&!Ve(this.peek()))return this.addToken(f.NUMERIC_LITERAL);if(!n&&!ct(this.peek()))break;this.advance()}if(t>0){for(;!this.isAtEnd()&&(this.check(".")||Ve(this.peek()));)this.advance();const n=this.createToken(f.NUMERIC_LITERAL,!0);this.tokens.push(n),this.errors.push(new c(l.UNKNOWN_TOKEN,"Invalid number",n))}else{for(;!this.isAtEnd()&&Ve(this.peek());)this.advance();const n=this.createToken(f.IDENTIFIER,!1);this.tokens.push(n)}}colorLiteral(){for(;!this.isAtEnd()&&Ve(this.peek());)this.advance();this.addToken(f.COLOR_LITERAL)}escapedString(){const t={column:this.current.column-1,offset:this.current.offset-1,line:this.current.line};if(this.isAtEnd())return"\\";switch(this.advance()){case"\r":return this.check(`
|
|
7
7
|
`)&&this.advance(),"";case`
|
|
8
8
|
`:return"";case"t":return" ";case"n":return`
|
|
9
|
-
`;case"\\":return"\\";case"r":return"\r";case"'":return"'";case'"':return'"';case"`":return"`";case"0":return"\0";case"b":return"\b";case"v":return"\v";case"f":return"\f";case" ":return"\\ ";case"u":{let n="";for(let s=0;s<=3;s+=1){if(this.isAtEnd()||!Ve(this.peek()))return this.errors.push(new c(l.INVALID_ESCAPE_SEQUENCE,`Invalid unicode escape sequence '\\u${n}', only unicode escape sequences of the form '\\uHHHH' where H is a hexadecimal number are allowed`,q.create(f.STRING_LITERAL,t,this.current,`\\u${n}`,!0))),`\\u${n}`;n+=this.advance()}return String.fromCharCode(parseInt(n,16))}default:return this.text[this.current.offset-1]}}}var at=(e=>(e[e.ListExpression=0]="ListExpression",e[e.GroupExpression=1]="GroupExpression",e[e.BlockExpression=2]="BlockExpression",e))(at||{});class hl{constructor(){this.stack=[],this.numberOfNestedLParens=0,this.numberOfNestedLBrackets=0,this.numberOfNestedLBraces=0}push(t){this.stack.push(t),t===0&&(this.numberOfNestedLBrackets+=1),t===1&&(this.numberOfNestedLParens+=1),t===2&&(this.numberOfNestedLBraces+=1)}pop(){const t=this.stack.pop();return t===0&&(this.numberOfNestedLBrackets-=1),t===1&&(this.numberOfNestedLParens-=1),t===2&&(this.numberOfNestedLBraces-=1),t}top(){return M(this.stack)}isWithinGroupExpressionContext(){return this.numberOfNestedLParens>0}isWithinListExpressionContext(){return this.numberOfNestedLBrackets>0}isWithinBlockExpressionContext(){return this.numberOfNestedLBraces>0}withContextDo(t,n){return()=>{this.push(t);try{return n()}finally{this.pop()}}}findHandlerContext(t,n){if(!(this.numberOfNestedLBraces<=0&&this.numberOfNestedLBrackets<=0&&this.numberOfNestedLParens<=0))for(let s=n;s<t.length-1;s+=1)switch(t[s].kind){case f.COMMA:if(this.isWithinGroupExpressionContext()||this.isWithinListExpressionContext())return[...this.stack].reverse().find(i=>[1,0].includes(i));break;case f.RPAREN:if(this.isWithinGroupExpressionContext())return 1;break;case f.RBRACE:if(this.isWithinBlockExpressionContext())return 2;break;case f.RBRACKET:if(this.isWithinListExpressionContext())return 0;break}}}class fl{constructor(t){this.generator=t}create(t,n){return new t(n,this.generator.nextId())}}class T{constructor(t,n,s){this.token=t,this.partialNode=n,this.handlerContext=s}}class pl{constructor(t,n){this.current=0,this.errors=[],this.contextStack=new hl,this.synchronizeProgram=()=>{const s=this.peek();s.kind!==f.EOF?g(this.advance()):(g(this.peek()),this.logError(s,l.UNEXPECTED_EOF,"Unexpected EOF"))},this.synchronizeElementDeclarationName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(Ft(s)||this.check(f.COLON,f.LBRACE,f.LBRACKET))break;g(s),this.advance()}},this.synchronizeElementDeclarationAlias=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(f.COLON,f.LBRACE,f.LBRACKET))break;g(s),this.advance()}},this.blockExpression=this.contextStack.withContextDo(at.BlockExpression,()=>{const s={body:[]},r=()=>this.nodeFactory.create(Ee,s);try{this.consume("Expect an opening brace '{'",f.LBRACE),s.blockOpenBrace=this.previous()}catch(i){if(!(i instanceof T))throw i;if(s.blockOpenBrace=i.partialNode,!this.canHandle(i))throw new T(i.token,r(),i.handlerContext);this.synchronizeBlock()}for(;!this.isAtEnd()&&!this.check(f.RBRACE);)try{if(this.match(f.TILDE)){const i=this.previous(),a=this.variable(),o=this.nodeFactory.create(ke,{op:i,partial:a});s.body.push(o)}else s.body.push(this.canBeField()?this.fieldDeclaration():this.expression())}catch(i){if(!(i instanceof T))throw i;if(s.body.push(i.partialNode),!this.canHandle(i))throw new T(i.token,r(),i.handlerContext);this.synchronizeBlock()}try{this.consume("Expect a closing brace '}'",f.RBRACE),s.blockCloseBrace=this.previous()}catch(i){if(!(i instanceof T))throw i;if(s.blockCloseBrace=i.partialNode,!this.canHandle(i))throw new T(i.token,r(),i.handlerContext);this.synchronizeBlock()}return r()}),this.synchronizeBlock=()=>{if(!this.check(f.RBRACE))for(g(this.advance());!this.isAtEnd();){const s=this.peek();if(this.check(f.RBRACE)||Dn(this.previous(),s))break;g(s),this.advance()}},this.tupleExpression=this.contextStack.withContextDo(at.GroupExpression,()=>{const s={elementList:[],commaList:[]},r=()=>this.nodeFactory.create(jt,{groupOpenParen:s.tupleOpenParen,groupCloseParen:s.tupleCloseParen,expression:s.elementList[0]}),i=()=>this.nodeFactory.create(be,s);try{this.consume("Expect an opening parenthesis '('",f.LPAREN),s.tupleOpenParen=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.tupleOpenParen=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeTuple()}if(!this.isAtEnd()&&!this.check(f.RPAREN))try{s.elementList.push(this.normalExpression())}catch(a){if(!(a instanceof T))throw a;if(s.elementList.push(a.partialNode),!this.canHandle(a))throw new T(a.token,r(),a.handlerContext);this.synchronizeTuple()}for(;!this.isAtEnd()&&!this.check(f.RPAREN);)try{this.consume("Expect a comma ','",f.COMMA),s.commaList.push(this.previous()),s.elementList.push(this.normalExpression())}catch(a){if(!(a instanceof T))throw a;if(a.partialNode instanceof k&&s.elementList.push(a.partialNode),!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeTuple()}try{this.consume("Expect a closing parenthesis ')'",f.RPAREN),s.tupleCloseParen=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.tupleCloseParen=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeTuple()}return s.elementList.length===1?r():i()}),this.synchronizeTuple=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(f.RPAREN,f.COMMA))break;g(s),this.advance()}},this.listExpression=this.contextStack.withContextDo(at.ListExpression,()=>{const s={elementList:[],commaList:[]},r=()=>this.nodeFactory.create(R,s);try{this.consume("Expect an opening bracket '['",f.LBRACKET),s.listOpenBracket=this.previous()}catch(i){if(!(i instanceof T))throw i;if(s.listOpenBracket=i.partialNode,!this.canHandle(i))throw new T(i.token,r(),i.handlerContext);this.synchronizeList()}if(!this.isAtEnd()&&!this.check(f.RBRACKET))try{s.elementList.push(this.attribute())}catch(i){if(!(i instanceof T))throw i;if(s.elementList.push(i.partialNode),!this.canHandle(i))throw new T(i.token,r(),i.handlerContext);this.synchronizeList()}for(;!this.isAtEnd()&&!this.check(f.RBRACKET);)try{this.consume("Expect a comma ','",f.COMMA),s.commaList.push(this.previous()),s.elementList.push(this.attribute())}catch(i){if(!(i instanceof T))throw i;if(i.partialNode instanceof k&&s.elementList.push(i.partialNode),!this.canHandle(i))throw new T(i.token,r(),i.handlerContext);this.synchronizeList()}try{this.consume("Expect a closing bracket ']'",f.RBRACKET),s.listCloseBracket=this.previous()}catch(i){if(!(i instanceof T))throw i;if(s.listCloseBracket=i.partialNode,!this.canHandle(i))throw new T(i.token,r(),i.handlerContext);this.synchronizeList()}return r()}),this.synchronizeList=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(f.COMMA,f.RBRACKET))break;g(s),this.advance()}},this.synchronizeAttributeName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(f.COMMA,f.RBRACKET,f.COLON))break;g(s),this.advance()}},this.synchronizeAttributeValue=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(f.COMMA,f.RBRACKET))break;g(s),this.advance()}},this.tokens=t,this.nodeFactory=new fl(n)}isAtEnd(){return this.current>=this.tokens.length||this.tokens[this.current].kind===f.EOF}advance(){return this.isAtEnd()?M(this.tokens):this.tokens[this.current++]}peek(t=0){return t+this.current>=this.tokens.length?M(this.tokens):this.tokens[this.current+t]}match(...t){const n=this.check(...t);return n&&this.advance(),n}check(...t){const n=this.peek();return t.includes(n.kind)}previous(){return this.tokens[this.current-1]}canHandle(t){return t.handlerContext===void 0||t.handlerContext===this.contextStack.top()}consume(t,...n){if(!this.match(...n))throw this.logError(this.peek(),l.UNEXPECTED_TOKEN,t),new T(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}discardUntil(t,...n){if(this.isAtEnd()||!this.check(...n)){for(g(this.peek()),this.logError(this.advance(),l.UNEXPECTED_TOKEN,t);!this.isAtEnd()&&!this.check(...n);)g(this.advance());return!this.isAtEnd()}return!0}gatherInvalid(){const t=[],n=[];let s,r=0;for(;r<this.tokens.length&&this.tokens[r].isInvalid;r+=1)n.push(this.tokens[r]);for(s=this.tokens[r],s.leadingInvalid=n,t.push(s),r+=1;r<this.tokens.length;r+=1){const i=this.tokens[r];i.isInvalid?s.trailingInvalid.push(i):(s=i,t.push(s))}this.tokens=t}parse(){const t=this.program(),n=this.advance(),s=this.nodeFactory.create(J,{body:t,eof:n});return this.gatherInvalid(),new se({ast:s,tokens:this.tokens},this.errors)}program(){const t=[];for(;!this.isAtEnd();)try{const n=this.elementDeclaration();t.push(n)}catch(n){if(!(n instanceof T))throw n;t.push(n.partialNode),this.synchronizeProgram()}return t}elementDeclaration(){const t={},n=()=>this.nodeFactory.create(S,t);try{this.consume("Expect an identifier",f.IDENTIFIER),t.type=this.previous()}catch(s){throw s instanceof T?(t.type=s.partialNode,new T(s.token,n(),s.handlerContext)):s}if(!this.check(f.COLON,f.LBRACE,f.LBRACKET))try{t.name=this.normalExpression()}catch(s){if(!(s instanceof T))throw s;if(t.name=s.partialNode,!this.canHandle(s))throw new T(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationName()}if(Ft(this.peek()))if(t.as=this.advance(),this.check(f.COLON,f.LBRACE,f.LBRACKET))this.logError(this.peek(),l.UNEXPECTED_TOKEN,"Expect an alias");else try{t.alias=this.normalExpression()}catch(s){if(!(s instanceof T))throw s;if(t.alias=s.partialNode,!this.canHandle(s))throw new T(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationAlias()}try{t.attributeList=this.check(f.LBRACKET)?this.listExpression():void 0}catch(s){throw s instanceof T?(t.attributeList=s.partialNode,new T(s.token,n(),s.handlerContext)):s}if(!this.discardUntil("Expect an opening brace '{' or a colon ':'",f.LBRACE,f.COLON))return n();try{if(this.match(f.COLON)){t.bodyColon=this.previous();const s=this.expression();s instanceof S?(g(s),this.logError(s,l.UNEXPECTED_ELEMENT_DECLARATION,"An element's simple body must not be an element declaration")):t.body=s}else t.body=this.blockExpression()}catch(s){throw s instanceof T?(t.body=s.partialNode,new T(s.token,n(),s.handlerContext)):s}return this.nodeFactory.create(S,t)}fieldDeclaration(){const t={},n=()=>this.nodeFactory.create(S,t);try{this.consume("Expect an identifier",f.IDENTIFIER),t.type=this.previous()}catch(s){throw s instanceof T?(t.type=s.partialNode,new T(s.token,n(),s.handlerContext)):s}try{this.consume("Expect a colon ':'",f.COLON),t.bodyColon=this.previous()}catch(s){throw s instanceof T?(t.bodyColon=s.partialNode,new T(s.token,n(),s.handlerContext)):s}try{const s=this.expression();s instanceof S?this.errors.push(new c(l.INVALID_ELEMENT_IN_SIMPLE_BODY,"Simple body cannot be an element declaration",s)):t.body=s}catch(s){throw s instanceof T?(t.body=s.partialNode,new T(s.token,n(),s.handlerContext)):s}return this.nodeFactory.create(S,t)}expression(){const t={args:[]},n=()=>al(t.callee,t.args,this.nodeFactory).unwrap_or(this.nodeFactory.create(y,t));try{t.callee=this.normalExpression()}catch(r){throw r instanceof T?(t.callee=r.partialNode,new T(r.token,n(),r.handlerContext)):r}if(this.shouldStopExpression())return n();let s=t.callee;for(;!this.shouldStopExpression();){Ut(this.previous())||this.logError(s,l.MISSING_SPACES,"Expect a following space");try{s=this.normalExpression(),t.args.push(s)}catch(r){throw r instanceof T?(s=r.partialNode,t.args.push(s),new T(r.token,n(),r.handlerContext)):r}}return n()}shouldStopExpression(){if(this.isAtEnd()||Ns(this.previous()))return!0;const t=this.peek().kind;return t===f.RBRACE||t===f.RBRACKET||t===f.RPAREN||t===f.COMMA||t===f.COLON}normalExpression(){return this.expression_bp(0)}expression_bp(t){let n=this.leftExpression_bp();for(;!this.isAtEnd();){const s=this.peek();if(s.kind===f.LPAREN){const{left:r}=Un(s);if(r<t||Dn(this.previous(),s)&&!this.contextStack.isWithinGroupExpressionContext()&&!this.contextStack.isWithinListExpressionContext())break;try{n=this.nodeFactory.create(ae,{callee:n,argumentList:this.tupleExpression()})}catch(i){throw i instanceof T?(n=this.nodeFactory.create(ae,{callee:n,argumentList:i.partialNode}),new T(i.token,n,i.handlerContext)):i}}else if(s.kind===f.LBRACKET){if(Ut(this.previous()))break;try{n=this.nodeFactory.create(Re,{expression:n,indexer:this.listExpression()})}catch(r){throw r instanceof T?(n=this.nodeFactory.create(Re,{expression:n,indexer:r.partialNode}),new T(r.token,n,r.handlerContext)):r}}else if(xn(s)){const r=s,i=Un(r);if(i.left!==null){if(i.left<=t)break;this.advance(),n=this.nodeFactory.create(It,{expression:n,op:r})}else{const a=El(r);if(a.left===null||a.left<=t)break;this.advance();try{n=this.nodeFactory.create(Te,{leftExpression:n,op:r,rightExpression:r.value==="."?this.extractOperand():this.expression_bp(a.right)})}catch(o){throw o instanceof T?(n=this.nodeFactory.create(Te,{leftExpression:n,op:r,rightExpression:o.partialNode}),new T(o.token,n,o.handlerContext)):o}}}else break}return n}leftExpression_bp(){let t;if(xn(this.peek())){const n={};n.op=this.peek();const s=Tl(n.op);if(s.right===null)throw this.logError(n.op,l.UNKNOWN_PREFIX_OP,`Unexpected '${n.op.value}' in an expression`),new T(n.op,this.nodeFactory.create(rt,{pre:n.op}),this.contextStack.findHandlerContext(this.tokens,this.current));this.advance();try{n.expression=this.expression_bp(s.right)}catch(r){throw r instanceof T?(n.expression=r.partialNode,new T(r.token,this.nodeFactory.create(re,n),r.handlerContext)):r}t=this.nodeFactory.create(re,n)}else if(t=this.extractOperand(),t instanceof rt)throw new T(this.peek(),this.nodeFactory.create(rt,{pre:this.peek()}),this.contextStack.findHandlerContext(this.tokens,this.current));return t}extractOperand(){return this.check(f.NUMERIC_LITERAL,f.STRING_LITERAL,f.COLOR_LITERAL,f.QUOTED_STRING,f.IDENTIFIER)?this.primaryExpression():this.check(f.FUNCTION_EXPRESSION)?this.functionExpression():this.check(f.LBRACKET)?this.listExpression():this.check(f.LBRACE)?this.blockExpression():this.check(f.LPAREN)?this.tupleExpression():(this.peek().kind===f.EOF?this.logError(this.peek(),l.UNEXPECTED_EOF,"Unexpected EOF"):this.logError(this.peek(),l.INVALID_OPERAND,`Invalid start of operand "${this.peek().value}"`),this.nodeFactory.create(rt,{pre:this.previous()}))}functionExpression(){const t={};try{this.consume("Expect a function expression",f.FUNCTION_EXPRESSION),t.value=this.previous()}catch(n){throw n instanceof T?(t.value=n.partialNode,new T(n.token,this.nodeFactory.create(ie,t),n.handlerContext)):n}return this.nodeFactory.create(ie,t)}variable(){this.consume("Expect a variable",f.IDENTIFIER);const t=this.previous();return this.nodeFactory.create(de,{variable:t})}canBeField(){return this.peek().kind===f.IDENTIFIER&&this.peek(1).kind===f.COLON}primaryExpression(){if(this.match(f.COLOR_LITERAL,f.STRING_LITERAL,f.NUMERIC_LITERAL))return this.nodeFactory.create(z,{expression:this.nodeFactory.create(je,{literal:this.previous()})});if(this.match(f.QUOTED_STRING,f.IDENTIFIER))return this.nodeFactory.create(z,{expression:this.nodeFactory.create(de,{variable:this.previous()})});throw this.logError(this.peek(),l.UNEXPECTED_TOKEN,"Expect a variable or literal"),new T(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}attribute(){const t={};if(this.check(f.COLON,f.RBRACKET,f.COMMA)){const n=this.peek();this.logError(n,l.EMPTY_ATTRIBUTE_NAME,"Expect a non-empty attribute name"),t.name=this.nodeFactory.create(ce,{identifiers:[]})}else try{t.name=this.attributeName()}catch(n){if(!(n instanceof T))throw n;if(t.name=n.partialNode,!this.canHandle(n))throw new T(n.token,this.nodeFactory.create(ue,t),n.handlerContext);this.synchronizeAttributeName()}return this.match(f.COLON)&&(t.colon=this.previous(),t.value=this.attributeValue()),this.nodeFactory.create(ue,t)}attributeValue(){let t;try{t=this.peek().kind===f.IDENTIFIER&&this.peek(1).kind===f.IDENTIFIER?this.attributeName():this.normalExpression()}catch(n){if(!(n instanceof T)||!this.canHandle(n))throw n;t=n.partialNode,this.synchronizeAttributeValue()}return t}attributeName(){const t=[];if(this.peek().kind!==f.IDENTIFIER)return this.primaryExpression();for(;!this.isAtEnd()&&!this.check(f.COLON,f.COMMA,f.RBRACKET);)try{this.consume("Expect an identifier",f.IDENTIFIER),t.push(this.previous())}catch(n){throw n instanceof T?new T(n.token,this.nodeFactory.create(ce,{identifiers:t}),n.handlerContext):n}return this.nodeFactory.create(ce,{identifiers:t})}logError(t,n,s){this.errors.push(new c(n,s,t))}}const dl={"+":{left:9,right:10},"*":{left:11,right:12},"-":{left:9,right:10},"/":{left:11,right:12},"%":{left:11,right:12},"<":{left:7,right:8},"<=":{left:7,right:8},">":{left:7,right:8},">=":{left:7,right:8},"<>":{left:7,right:8},"=":{left:2,right:3},"==":{left:4,right:5},"!=":{left:4,right:5},".":{left:16,right:17}};function El(e){return dl[e.value]||{left:null,right:null}}const Nl={"+":{left:null,right:15},"-":{left:null,right:15},"<":{left:null,right:15},">":{left:null,right:15},"<>":{left:null,right:15},"!":{left:null,right:15}};function Tl(e){return Nl[e.value]||{left:null,right:null}}const bl={"(":{left:14,right:null}};function Un(e){return bl[e.value]||{left:null,right:null}}var b=(e=>(e.Table="table",e.Enum="enum",e.Ref="ref",e.Note="note",e.Project="project",e.Indexes="indexes",e.TableGroup="tablegroup",e.TablePartial="tablepartial",e.Check="checks",e))(b||{}),E=(e=>(e.Color="color",e.HeaderColor="headercolor",e.Note="note",e.PK="pk",e.PrimaryKey="primary key",e.Unique="unique",e.Ref="ref",e.NotNull="not null",e.Null="null",e.Increment="increment",e.Default="default",e.Name="name",e.Type="type",e.Check="check",e.Update="update",e.Delete="delete",e))(E||{});function Oe(e){var n;const t=(n=e==null?void 0:e.type)==null?void 0:n.value.toLowerCase();switch(t){case b.Enum:case b.Table:case b.Indexes:case b.Note:case b.Project:case b.Ref:case b.TableGroup:case b.TablePartial:case b.Check:return new B(t);default:return new x}}function Be(e){if(!Jt(e))return new B([e]);const t=Be(e.leftExpression).unwrap_or(void 0);return t?(t.push(e.rightExpression),new B(t)):new x}function Z(e){if(e===void 0)return new x;const t=Be(e).unwrap_or(void 0);if(!t)return new x;const n=[];for(const s of t){const r=Q(s).unwrap_or(void 0);if(!r)return new x;n.push(r)}return new B(n)}function Ze(e){if(e===void 0)return new x;const t=Be(e).unwrap_or(void 0);if(!t||t.length===0)return new x;const n=[];let s;if(!W(M(t))){const r=t.pop();if(Ps(r))s=r.elementList.map(i=>j(i).unwrap());else return new x}for(const r of t){const i=Q(r).unwrap_or(void 0);if(!i)return new x;n.push(i)}return new B({variables:n,tupleElements:s})}function Q(e){return W(e)?new B(e.expression.variable.value):new x}function ut(e){if(Mn(e))return e instanceof ie?new B({functional:[e],nonFunctional:[]}):new B({functional:[],nonFunctional:[e]});if(e instanceof be&&e.elementList.every(Mn)){const t=e.elementList.filter(s=>s instanceof ie),n=e.elementList.filter(W);return new B({functional:t,nonFunctional:n})}return new x}function j(e){var n;const t=(n=e==null?void 0:e.expression.variable)==null?void 0:n.value;return t===void 0?new x:new B(t)}function ml(e){var n,s;const t=(s=(n=e==null?void 0:e.partial)==null?void 0:n.variable)==null?void 0:s.value;return t===void 0?new x:new B(t)}function C(e){return Y(e)?e.expression instanceof de?new B(e.expression.variable.value):new B(e.expression.literal.value):new x}function Il(e){var t;return!(e instanceof Te)||!ys((t=e.op)==null?void 0:t.value)?!1:Ze(e.leftExpression).and_then(()=>Ze(e.rightExpression)).unwrap_or(void 0)!==void 0}function _l(e){const t=Ze(e.leftExpression),n=Ze(e.rightExpression);if(!t.isOk()||!n.isOk())return!1;const{tupleElements:s}=t.unwrap(),{tupleElements:r}=n.unwrap();return(s==null?void 0:s.length)===(r==null?void 0:r.length)}function Mn(e){return e instanceof z&&e.expression instanceof de||e instanceof ie}function Fn(e,t){var r,i,a,o;let n=t;const s=Ho(e);for(;n;){if((i=(r=n.symbol)==null?void 0:r.symbolTable)!=null&&i.has(e))return(a=n.symbol.symbolTable)==null?void 0:a.get(e);if(((o=n.symbol)==null?void 0:o.declaration)instanceof J&&s)return n.symbol;if(n instanceof J)return;n=n.parent}}class gl{constructor(t,n,s){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=s}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof J||Oe(this.declarationNode.parent).unwrap_or(void 0)!==b.Project?[new c(l.INVALID_CUSTOM_CONTEXT,"A Custom element can only appear in a Project",this.declarationNode)]:[]}validateName(t){return t?[new c(l.UNEXPECTED_NAME,"A Custom element shouldn't have a name",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_NAME,"A Custom element shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Custom element shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof Ee)return[new c(l.UNEXPECTED_COMPLEX_BODY,"A Custom element can only have an inline field",t)];const n=[];return Y(t.callee)||n.push(new c(l.INVALID_CUSTOM_ELEMENT_VALUE,"A Custom element value can only be a string",t)),t.args.length>0&&n.push(...t.args.map(s=>new c(l.INVALID_CUSTOM_ELEMENT_VALUE,"A Custom element value can only be a string",s))),n}}class We{constructor(){this.table=new Map}has(t){return this.table.has(t)}set(t,n){this.table.set(t,n)}get(t,n){return this.table.get(t)||n!==void 0&&this.set(t,n)||n}entries(){return this.table.entries()}forEach(t){return this.table.forEach(t)}}class Al{constructor(t,n,s){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=s}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.registerElement(),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_PROJECT_CONTEXT,"An Enum can only appear top-level",this.declarationNode)]:[]}validateName(t){return t?vs(t)?[]:[new c(l.INVALID_NAME,"An Enum name must be of the form <enum> or <schema>.<enum>",t)]:[new c(l.NAME_NOT_FOUND,"An Enum must have a name",this.declarationNode)]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",t)]:[]}registerElement(){const t=[];this.declarationNode.symbol=this.symbolFactory.create(qo,{declaration:this.declarationNode,symbolTable:new We});const{name:n}=this.declarationNode,s=Z(n);if(s.isOk()){const r=s.unwrap(),i=r.pop(),a=At(r,this.publicSymbolTable,this.symbolFactory),o=Ht(i);a.has(o)&&t.push(new c(l.DUPLICATE_NAME,`Enum name ${i} already exists in schema '${r.join(".")||"public"}'`,n)),a.set(o,this.declarationNode.symbol)}return t}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"An Enum shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return this.validateFields([t]);const[n,s]=oe(t.body,r=>r instanceof y);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(t){return t.length===0?[new c(l.EMPTY_ENUM,"An Enum must have at least one element",this.declarationNode)]:t.flatMap(n=>{const s=[];n.callee&&!W(n.callee)&&s.push(new c(l.INVALID_ENUM_ELEMENT_NAME,"An enum field must be an identifier or a quoted identifier",n.callee));const r=[...n.args];return M(r)instanceof R?(s.push(...this.validateFieldSettings(M(r))),r.pop()):r[0]instanceof R&&(s.push(...this.validateFieldSettings(r[0])),r.shift()),r.length>0&&s.push(...r.map(i=>new c(l.INVALID_ENUM_ELEMENT,"An Enum must have only a field and optionally a setting list",i))),s.push(...this.registerField(n)),s})}validateFieldSettings(t){const n=F(t),s=n.getErrors(),r=n.getValue();for(const i in r){const a=r[i];switch(i){case"note":a.length>1&&a.forEach(o=>s.push(new c(l.DUPLICATE_ENUM_ELEMENT_SETTING,"'note' can only appear once",o))),a.forEach(o=>{Y(o.value)||s.push(new c(l.INVALID_ENUM_ELEMENT_SETTING,"'note' must be a string",o))});break;default:a.forEach(o=>s.push(new c(l.UNKNOWN_ENUM_ELEMENT_SETTING,`Unknown enum field setting '${i}'`,o)))}}return s}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=me(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}registerField(t){if(t.callee&&W(t.callee)){const n=j(t.callee).unwrap(),s=Kt(n),r=this.symbolFactory.create(Qo,{declaration:t});t.symbol=r;const i=this.declarationNode.symbol.symbolTable;if(i.has(s)){const a=i.get(s);return[new c(l.DUPLICATE_COLUMN_NAME,`Duplicate enum field ${n}`,t),new c(l.DUPLICATE_COLUMN_NAME,`Duplicate enum field ${n}`,a.declaration)]}i.set(s,r)}return[]}}class Ll{constructor(t,n,s){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=s}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){const t=new c(l.INVALID_INDEXES_CONTEXT,"An Indexes can only appear inside a Table or a TablePartial",this.declarationNode);if(this.declarationNode.parent instanceof J)return[t];const n=Oe(this.declarationNode.parent).unwrap_or(void 0);return n&&[b.Table,b.TablePartial].includes(n)?[]:[t]}validateName(t){return t?[new c(l.UNEXPECTED_NAME,"An Indexes shouldn't have a name",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"An Indexes shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"An Indexes shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"An Indexes must have a complex body",t)];const[n,s]=oe(t.body,r=>r instanceof y);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(t){return t.flatMap(n=>{if(!n.callee)return[];const s=[],r=[n.callee,...n.args];return M(r)instanceof R&&s.push(...this.validateFieldSetting(r.pop())),r.forEach(i=>{for(;i instanceof ae;)i.argumentList&&!ut(i.argumentList).isOk()&&s.push(new c(l.INVALID_INDEXES_FIELD,"An index field must be an identifier, a quoted identifier, a functional expression or a tuple of such",i.argumentList)),i=i.callee;ut(i).isOk()||s.push(new c(l.INVALID_INDEXES_FIELD,"An index field must be an identifier, a quoted identifier, a functional expression or a tuple of such",i))}),s})}validateFieldSetting(t){const n=F(t),s=n.getErrors(),r=n.getValue();for(const i in r){const a=r[i];switch(i){case"note":case"name":a.length>1&&a.forEach(o=>s.push(new c(l.DUPLICATE_INDEX_SETTING,`'${i}' can only appear once`,o))),a.forEach(o=>{Y(o.value)||s.push(new c(l.INVALID_INDEX_SETTING_VALUE,`'${i}' must be a string`,o))});break;case"unique":case"pk":a.length>1&&a.forEach(o=>s.push(new c(l.DUPLICATE_INDEX_SETTING,`'${i}' can only appear once`,o))),a.forEach(o=>{ne(o.value)||s.push(new c(l.INVALID_INDEX_SETTING_VALUE,`'${i}' must not have a value`,o))});break;case"type":a.length>1&&a.forEach(o=>s.push(new c(l.DUPLICATE_INDEX_SETTING,"'type' can only appear once",o))),a.forEach(o=>{W(o.value)||s.push(new c(l.INVALID_INDEX_SETTING_VALUE,`'type' must be "btree" or "hash"`,o))});break;default:a.forEach(o=>s.push(new c(l.UNKNOWN_INDEX_SETTING,`Unknown index setting '${i}'`,o)))}}return s}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=me(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class vl{constructor(t,n,s){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=s}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){return!(this.declarationNode.parent instanceof J)&&![b.Table,b.TableGroup,b.TablePartial,b.Project].includes(Oe(this.declarationNode.parent).unwrap_or(void 0))?[new c(l.INVALID_NOTE_CONTEXT,"A Note can only appear inside a Table, a TableGroup, a TablePartial or a Project. Sticky note can only appear at the global scope.",this.declarationNode)]:[]}validateName(t){if(!(this.declarationNode.parent instanceof J))return t?[new c(l.UNEXPECTED_NAME,"A Note shouldn't have a name",t)]:[];if(!t)return[new c(l.INVALID_NAME,"Sticky note must have a name",this.declarationNode)];const n=Z(t);if(!n.isOk())return[new c(l.INVALID_NAME,"Invalid name for sticky note ",this.declarationNode)];const r=n.unwrap().join("."),i=Wo(r);return this.publicSymbolTable.has(i)?[new c(l.DUPLICATE_NAME,`Sticky note "${r}" has already been defined`,t)]:(this.publicSymbolTable.set(i,this.declarationNode.symbol),[])}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Note shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return this.validateFields([t]);const[n,s]=oe(t.body,r=>r instanceof y);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(t){const n=[];return t.length===0?[new c(l.EMPTY_NOTE,"A Note must have a content",this.declarationNode)]:(t.length>1&&t.slice(1).forEach(s=>n.push(new c(l.NOTE_CONTENT_REDEFINED,"A Note can only contain one string",s))),Y(t[0].callee)||n.push(new c(l.INVALID_NOTE,"A Note content must be a quoted string",t[0])),t[0].args.length>0&&n.push(...t[0].args.map(s=>new c(l.INVALID_NOTE,"A Note can only contain one quoted string",s))),n)}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=me(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class yl{constructor(t,n,s){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=s}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_PROJECT_CONTEXT,"A Project can only appear top-level",this.declarationNode)]:[]}validateName(t){return t?He(t)?[]:[new c(l.INVALID_NAME,"A Project's name is optional or must be an identifier or a quoted identifer",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Project shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Project shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A Project's body must be a block",t)];const[n,s]=oe(t.body,r=>r instanceof y);return[...n.map(r=>new c(l.INVALID_PROJECT_FIELD,"A Project can not have inline fields",r)),...this.validateSubElements(s)]}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=me(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class wl{constructor(t,n,s){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=s}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof J?[]:[new c(l.INVALID_REF_CONTEXT,"A Ref must appear top-level",this.declarationNode)]}validateName(t){return t?He(t)?[]:[new c(l.INVALID_NAME,"A Ref's name is optional or must be an identifier or a quoted identifer",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Ref shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return this.validateFields([t]);const[n,s]=oe(t.body,r=>r instanceof y);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(t){if(t.length===0)return[new c(l.EMPTY_REF,"A Ref must have at least one field",this.declarationNode)];const n=[];return t.length>1&&n.push(...t.slice(1).map(s=>new c(l.REF_REDEFINED,"A Ref can only contain one binary relationship",s))),t.forEach(s=>{s.callee&&!Il(s.callee)&&n.push(new c(l.INVALID_REF_FIELD,"A Ref field must be a binary relationship",s.callee)),s.callee&&!_l(s.callee)&&n.push(new c(l.UNEQUAL_FIELDS_BINARY_REF,"Unequal fields in ref endpoints",s.callee));const r=[...s.args];if(M(r)instanceof R){const i=this.validateFieldSettings(M(r));n.push(...i),r.pop()}else r[0]instanceof R&&(n.push(...this.validateFieldSettings(r[0])),r.shift());r.length>0&&n.push(...r.map(i=>new c(l.INVALID_REF_FIELD,"A Ref field should only have a single binary relationship",i)))}),n}validateFieldSettings(t){const n=F(t),s=n.getErrors(),r=n.getValue();for(const i in r){const a=r[i];switch(i){case"delete":case"update":a.length>1&&a.forEach(o=>s.push(new c(l.DUPLICATE_REF_SETTING,`'${i}' can only appear once`,o))),a.forEach(o=>{Sl(o.value)||s.push(new c(l.INVALID_REF_SETTING_VALUE,`'${i}' can only have values "cascade", "no action", "set null", "set default" or "restrict"`,o))});break;case"color":a.length>1&&s.push(...a.map(o=>new c(l.DUPLICATE_REF_SETTING,"'color' can only appear once",o))),a.forEach(o=>{Lt(o.value)||s.push(new c(l.INVALID_REF_SETTING_VALUE,"'color' must be a color literal",o))});break;default:a.forEach(o=>s.push(new c(l.UNKNOWN_REF_SETTING,`Unknown ref setting '${i}'`,o)))}}return s}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=me(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}function Sl(e){if(!(W(e)&&e.expression.variable.kind!==f.QUOTED_STRING)&&!(e instanceof ce))return!1;let t;if(e instanceof ce?t=$e(e).unwrap_or(""):t=e.expression.variable.value,t)switch(t.toLowerCase()){case"cascade":case"no action":case"set null":case"set default":case"restrict":return!0;default:return!1}return!1}class Pl{constructor(t,n,s){this.declarationNode=t,this.symbolFactory=s,this.publicSymbolTable=n}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.registerElement(),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_TABLE_CONTEXT,"Table must appear top-level",this.declarationNode)]:[]}validateName(t){return t?t instanceof Re?[new c(l.INVALID_NAME,"Invalid array as Table name, maybe you forget to add a space between the name and the setting list?",t)]:vs(t)?[]:[new c(l.INVALID_NAME,"A Table name must be of the form <table> or <schema>.<table>",t)]:[new c(l.NAME_NOT_FOUND,"A Table must have a name",this.declarationNode)]}validateAlias(t){return t?Ul(t)?[]:[new c(l.INVALID_ALIAS,"Table aliases can only contains alphanumeric and underscore unless surrounded by double quotes",t)]:[]}validateSettingList(t){const n=F(t),s=n.getErrors(),r=n.getValue();return Je(r,(i,a)=>{switch(a){case E.HeaderColor:i.length>1&&s.push(...i.map(o=>new c(l.DUPLICATE_TABLE_SETTING,"'headercolor' can only appear once",o))),i.forEach(o=>{Lt(o.value)||s.push(new c(l.INVALID_TABLE_SETTING_VALUE,"'headercolor' must be a color literal",o.value||o.name))});break;case E.Note:i.length>1&&s.push(...i.map(o=>new c(l.DUPLICATE_TABLE_SETTING,"'note' can only appear once",o))),i.forEach(o=>{Y(o.value)||s.push(new c(l.INVALID_TABLE_SETTING_VALUE,"'note' must be a string literal",o.value||o.name))});break;default:s.push(...i.map(o=>new c(l.UNKNOWN_TABLE_SETTING,`Unknown '${a}' setting`,o)))}}),s}registerElement(){const t=[];this.declarationNode.symbol=this.symbolFactory.create(gs,{declaration:this.declarationNode,symbolTable:new We});const{name:n,alias:s}=this.declarationNode,r=Z(n);if(r.isOk()){const i=[...r.unwrap()],a=i.pop(),o=At(i,this.publicSymbolTable,this.symbolFactory),u=lt(a);o.has(u)&&t.push(new c(l.DUPLICATE_NAME,`Table name '${a}' already exists in schema '${i.join(".")||"public"}'`,n)),o.set(u,this.declarationNode.symbol)}if(s&&He(s)&&!Ol(s.expression.variable.value,r.unwrap_or([]))){const i=j(s).unwrap(),a=lt(i);this.publicSymbolTable.has(a)&&t.push(new c(l.DUPLICATE_NAME,`Table name '${i}' already exists`,n)),this.publicSymbolTable.set(a,this.declarationNode.symbol)}return t}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A Table's body must be a block",t)];const[n,s,r]=t.body.reduce((i,a)=>(a instanceof y?i[0].push(a):a instanceof ke?i[1].push(a):a instanceof S&&i[2].push(a),i),[[],[],[]]);return[...this.validateFields(n),...this.validateInjections(s),...this.validateSubElements(r)]}validateInjections(t){return t.flatMap(n=>this.registerInjection(n))}registerInjection(t){var o,u,p;if(!((u=(o=t.partial)==null?void 0:o.variable)!=null&&u.value))return[];const n=(p=t.partial.variable)==null?void 0:p.value,s=Is(n),r=this.symbolFactory.create(tl,{declaration:t});t.symbol=r;const i=this.declarationNode.symbol.symbolTable,a=i.get(s);return a?[new c(l.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${n}`,t),new c(l.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${n}`,a.declaration)]:(i.set(s,r),[])}validateFields(t){return t.flatMap(n=>{if(!n.callee)return[];const s=[];n.args.length===0&&s.push(new c(l.INVALID_COLUMN,"A column must have a type",n.callee)),W(n.callee)||s.push(new c(l.INVALID_COLUMN_NAME,"A column name must be an identifier or a quoted identifier",n.callee)),n.args[0]&&!Os(n.args[0])&&s.push(new c(l.INVALID_COLUMN_TYPE,"Invalid column type",n.args[0]));const r=n.args.slice(1);return s.push(...this.validateFieldSetting(r)),s.push(...this.registerField(n)),s})}registerField(t){if(t.callee&&W(t.callee)){const n=j(t.callee).unwrap(),s=_t(n),r=this.symbolFactory.create(Qt,{declaration:t});t.symbol=r;const i=this.declarationNode.symbol.symbolTable;if(i.has(s)){const a=i.get(s);return[new c(l.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,t),new c(l.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,a.declaration)]}i.set(s,r)}return[]}validateFieldSetting(t){if(!t.slice(0,-1).every(Pe)||!t.slice(-1).every(u=>Pe(u)||u instanceof R))return[...t.map(u=>new c(l.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",u))];if(t.length===0)return[];let n;M(t)instanceof R&&(n=t.pop());const s=F(n),r=s.getErrors(),i=s.getValue();t.forEach(u=>{const p=j(u).unwrap_or("").toLowerCase();if(p!=="pk"&&p!=="unique"){r.push(new c(l.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",u));return}i[p]===void 0?i[p]=[u]:i[p].push(u)});const a=i[E.PK]||[],o=i[E.PrimaryKey]||[];return a.length>=1&&o.length>=1&&r.push(...[...a,...o].map(u=>new c(l.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",u))),Je(i,(u,p)=>{switch(p){case E.Note:u.length>1&&r.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"note can only appear once",h))),u.forEach(h=>{Y(h.value)||r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'note' must be a quoted string",h.value||h.name))});break;case E.Ref:u.forEach(h=>{Ss(h.value)||r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'ref' must be a valid unary relationship",h.value||h.name))});break;case E.PrimaryKey:u.length>1&&r.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"primary key can only appear once",h))),u.forEach(h=>{ne(h.value)||r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'primary key' must not have a value",h.value||h.name))});break;case E.PK:u.length>1&&r.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'pk' can only appear once",h))),u.forEach(h=>{h instanceof ue&&!ne(h.value)&&r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'pk' must not have a value",h.value||h.name))});break;case E.NotNull:{u.length>1&&r.push(...u.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,"'not null' can only appear once",d)));const h=i[E.Null]||[];u.length>=1&&h.length>=1&&r.push(...[...u,...h].map(d=>new c(l.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",d))),u.forEach(d=>{ne(d.value)||r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'not null' must not have a value",d.value||d.name))});break}case E.Null:u.length>1&&r.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'null' can only appear once",h))),u.forEach(h=>{ne(h.value)||r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'null' must not have a value",h.value||h.name))});break;case E.Unique:u.length>1&&r.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'unique' can only appear once",h))),u.forEach(h=>{h instanceof ue&&!ne(h.value)&&r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'unique' must not have a value",h.value||h.name))});break;case E.Increment:u.length>1&&r.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'increment' can only appear once",h))),u.forEach(h=>{h instanceof ue&&!ne(h.value)&&r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'increment' must not have a value",h.value||h.name))});break;case E.Default:u.length>1&&r.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'default' can only appear once",h))),u.forEach(h=>{ws(h.value)||r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'default' must be a string literal, number literal, function expression, true, false or null",h.value||h.name))});break;case E.Check:u.forEach(h=>{h.value instanceof ie||r.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'check' must be a function expression",h.value||h.name))});break;default:u.forEach(h=>r.push(new c(l.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${p}'`,h)))}}),r}validateSubElements(t){const n=t.flatMap(r=>{if(r.parent=this.declarationNode,!r.type)return[];const i=me(r);return new i(r,this.publicSymbolTable,this.symbolFactory).validate()}),s=t.filter(r=>{var i;return((i=r.type)==null?void 0:i.value.toLowerCase())==="note"});return s.length>1&&n.push(...s.map(r=>new c(l.NOTE_REDEFINED,"Duplicate notes are defined",r))),n}}function Ol(e,t){return t.length===1&&e===t[0]}class xl{constructor(t,n,s){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=s}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.registerElement(),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_TABLEGROUP_CONTEXT,"TableGroup must appear top-level",this.declarationNode)]:[]}validateName(t){return t?He(t)?[]:[new c(l.INVALID_NAME,"A TableGroup name must be a single identifier",t)]:[new c(l.NAME_NOT_FOUND,"A TableGroup must have a name",this.declarationNode)]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A TableGroup shouldn't have an alias",t)]:[]}registerElement(){const{name:t}=this.declarationNode;this.declarationNode.symbol=this.symbolFactory.create(Jo,{declaration:this.declarationNode,symbolTable:new We});const n=Z(t);if(n.isOk()){const s=n.unwrap(),r=s.pop(),i=At(s,this.publicSymbolTable,this.symbolFactory),a=zt(r);if(i.has(a))return[new c(l.DUPLICATE_NAME,`TableGroup name '${r}' already exists`,t)];i.set(a,this.declarationNode.symbol)}return[]}validateSettingList(t){const n=F(t),s=n.getErrors(),r=n.getValue();return Je(r,(i,a)=>{switch(a){case"color":i.length>1&&s.push(...i.map(o=>new c(l.DUPLICATE_TABLE_SETTING,"'color' can only appear once",o))),i.forEach(o=>{Lt(o.value)||s.push(new c(l.INVALID_TABLE_SETTING_VALUE,"'color' must be a color literal",o.value||o.name))});break;case"note":i.length>1&&s.push(...i.map(o=>new c(l.DUPLICATE_TABLE_SETTING,"'note' can only appear once",o))),i.filter(o=>!Y(o.value)).forEach(o=>{s.push(new c(l.INVALID_TABLE_SETTING_VALUE,"'note' must be a string literal",o.value||o.name))});break;default:s.push(...i.map(o=>new c(l.UNKNOWN_TABLE_SETTING,`Unknown '${a}' setting`,o)));break}}),s}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A TableGroup's body must be a block",t)];const[n,s]=oe(t.body,r=>r instanceof y);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(t){return t.flatMap(n=>{const s=[];return n.callee&&!Z(n.callee).isOk()&&s.push(new c(l.INVALID_TABLEGROUP_FIELD,"A TableGroup field must be of the form <table> or <schema>.<table>",n.callee)),this.registerField(n),n.args.length>0&&s.push(...n.args.map(r=>new c(l.INVALID_TABLEGROUP_FIELD,"A TableGroup field should only have a single Table name",r))),s})}validateSubElements(t){const n=t.flatMap(r=>{if(r.parent=this.declarationNode,!r.type)return[];const i=me(r);return new i(r,this.publicSymbolTable,this.symbolFactory).validate()}),s=t.filter(r=>{var i;return((i=r.type)==null?void 0:i.value.toLowerCase())==="note"});return s.length>1&&n.push(...s.map(r=>new c(l.NOTE_REDEFINED,"Duplicate notes are defined",r))),n}registerField(t){if(t.callee&&W(t.callee)){const n=j(t.callee).unwrap(),s=Yt(n),r=this.symbolFactory.create(Zo,{declaration:t});t.symbol=r;const i=this.declarationNode.symbol.symbolTable;if(i.has(s)){const a=i.get(s);return[new c(l.DUPLICATE_TABLEGROUP_FIELD_NAME,`${n} already exists in the group`,t),new c(l.DUPLICATE_TABLEGROUP_FIELD_NAME,`${n} already exists in the group`,a.declaration)]}i.set(s,r)}return[]}}const Dl=["-","+"];class kl{constructor(t,n,s){this.declarationNode=t,this.symbolFactory=s,this.publicSymbolTable=n}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.registerElement(),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_TABLE_PARTIAL_CONTEXT,"TablePartial must appear top-level",this.declarationNode)]:[]}validateName(t){return t?He(t)?[]:[new c(l.INVALID_NAME,"A TablePartial name must be an identifier or a quoted identifer",t)]:[new c(l.NAME_NOT_FOUND,"A TablePartial must have a name",this.declarationNode)]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A TablePartial shouldn't have an alias",t)]:[]}validateSettingList(t){const n=F(t),s=n.getErrors(),r=n.getValue();return Je(r,(i,a)=>{switch(a){case E.HeaderColor:i.length>1&&s.push(...i.map(o=>new c(l.DUPLICATE_TABLE_PARTIAL_SETTING,`'${a}' can only appear once`,o))),i.forEach(o=>{Lt(o.value)||s.push(new c(l.INVALID_TABLE_PARTIAL_SETTING_VALUE,`'${a}' must be a color literal`,o.value||o.name))});break;case E.Note:i.length>1&&s.push(...i.map(o=>new c(l.DUPLICATE_TABLE_PARTIAL_SETTING,`'${a}' can only appear once`,o))),i.forEach(o=>{Y(o.value)||s.push(new c(l.INVALID_TABLE_PARTIAL_SETTING_VALUE,`'${a}' must be a string literal`,o.value||o.name))});break;default:s.push(...i.map(o=>new c(l.UNKNOWN_TABLE_PARTIAL_SETTING,`Unknown '${a}' setting`,o)))}}),s}registerElement(){const{name:t}=this.declarationNode;this.declarationNode.symbol=this.symbolFactory.create(el,{declaration:this.declarationNode,symbolTable:new We});const n=Z(t);if(!n.isOk())return[];const s=n.unwrap(),r=s.pop(),i=At(s,this.publicSymbolTable,this.symbolFactory),a=qt(r);return i.has(a)?[new c(l.DUPLICATE_NAME,`TablePartial name '${r}' already exists`,t)]:(i.set(a,this.declarationNode.symbol),[])}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A TablePartial's body must be a block",t)];const[n,s]=oe(t.body,r=>r instanceof y);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(t){return t.flatMap(n=>{if(!n.callee)return[];const s=[];n.args.length===0&&s.push(new c(l.INVALID_COLUMN,"A column must have a type",n.callee)),W(n.callee)||s.push(new c(l.INVALID_COLUMN_NAME,"A column name must be an identifier or a quoted identifier",n.callee)),n.args[0]&&!Os(n.args[0])&&s.push(new c(l.INVALID_COLUMN_TYPE,"Invalid column type",n.args[0]));const r=n.args.slice(1);return s.push(...this.validateFieldSetting(r),...this.registerField(n)),s})}registerField(t){if(!t.callee||!W(t.callee))return[];const n=j(t.callee).unwrap(),s=_t(n),r=this.symbolFactory.create(Qt,{declaration:t});t.symbol=r;const i=this.declarationNode.symbol.symbolTable;if(i.has(s)){const a=i.get(s);return[new c(l.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,t),new c(l.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,a.declaration)]}return i.set(s,r),[]}validateFieldSetting(t){const n=M(t);if(!t.slice(0,-1).every(Pe)||!(Pe(n)||n instanceof R))return[...t.map(p=>new c(l.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",p))];if(t.length===0)return[];let s;M(t)instanceof R&&(s=t.pop());const r=F(s),i=r.getErrors(),a=r.getValue();t.forEach(p=>{const h=j(p).unwrap_or("").toLowerCase();if(h!==E.PK&&h!==E.Unique){i.push(new c(l.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",p));return}a[h]===void 0?a[h]=[p]:a[h].push(p)});const o=a[E.PK]||[],u=a[E.PrimaryKey]||[];return o.length>=1&&u.length>=1&&i.push(...[...o,...u].map(p=>new c(l.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",p))),Je(a,(p,h)=>{switch(h){case E.Note:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{Y(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a quoted string`,d.value||d.name))});break;case E.Ref:p.forEach(d=>{Ss(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a valid unary relationship`,d.value||d.name))});break;case E.PrimaryKey:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{ne(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.PK:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof ue&&!ne(d.value)&&i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.NotNull:{p.length>1&&i.push(...p.map(N=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,N)));const d=a[E.Null]||[];p.length>=1&&d.length>=1&&i.push(...[...p,...d].map(N=>new c(l.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",N))),p.forEach(N=>{ne(N.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,N.value||N.name))});break}case E.Null:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{ne(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Unique:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof ue&&!ne(d.value)&&i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Increment:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof ue&&!ne(d.value)&&i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Default:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{ws(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a string literal, number literal, function expression, true, false or null`,d.value||d.name))});break;case E.Check:p.forEach(d=>{d.value instanceof ie||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'check' must be a function expression",d.value||d.name))});break;default:p.forEach(d=>i.push(new c(l.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${h}'`,d)))}}),i}validateSubElements(t){const n=t.flatMap(r=>{if(r.parent=this.declarationNode,!r.type)return[];const i=me(r);return new i(r,this.publicSymbolTable,this.symbolFactory).validate()}),s=t.filter(r=>{var i;return((i=r.type)==null?void 0:i.value.toLowerCase())===b.Note});return s.length>1&&n.push(...s.map(r=>new c(l.NOTE_REDEFINED,"Duplicate notes are defined",r))),n}}class Rl{constructor(t,n,s){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=s}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){const t=new c(l.INVALID_CHECKS_CONTEXT,"A Checks can only appear inside a Table or a TablePartial",this.declarationNode);if(this.declarationNode.parent instanceof J)return[t];const n=Oe(this.declarationNode.parent).unwrap_or(void 0);return n&&[b.Table,b.TablePartial].includes(n)?[]:[t]}validateName(t){return t?[new c(l.UNEXPECTED_NAME,"A Checks shouldn't have a name",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Checks shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Checks shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A Checks must have a complex body",t)];const[n,s]=oe(t.body,r=>r instanceof y);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(t){return t.flatMap(n=>{if(!n.callee)return[];const s=[],r=[n.callee,...n.args];return M(r)instanceof R&&s.push(...this.validateFieldSetting(r.pop())),(r.length>1||!(r[0]instanceof ie))&&s.push(new c(l.INVALID_CHECKS_FIELD,"A check field must be a function expression",n)),s})}validateFieldSetting(t){const n=F(t),s=n.getErrors(),r=n.getValue();for(const i in r){const a=r[i];switch(i){case"name":a.length>1&&a.forEach(o=>s.push(new c(l.DUPLICATE_CHECK_SETTING,`'${i}' can only appear once`,o))),a.forEach(o=>{Y(o.value)||s.push(new c(l.INVALID_CHECK_SETTING_VALUE,`'${i}' must be a string`,o))});break;default:a.forEach(o=>s.push(new c(l.UNKNOWN_CHECK_SETTING,`Unknown check setting '${i}'`,o)))}}return s}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=me(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}function me(e){switch(e.type.value.toLowerCase()){case b.Enum:return Al;case b.Table:return Pl;case b.TableGroup:return xl;case b.Project:return yl;case b.Ref:return wl;case b.Note:return vl;case b.Indexes:return Ll;case b.TablePartial:return kl;case b.Check:return Rl;default:return gl}}function vs(e){return!!Z(e).unwrap_or(!1)}function Ul(e){return He(e)}function He(e){return e instanceof z&&e.expression instanceof de}function At(e,t,n){var r;e[0]==="public"&&(e=e.slice(1));let s=t;for(const i of e){let a;const o=Wt(i);if(s.has(o)){if(a=(r=s.get(o))==null?void 0:r.symbolTable,!a)throw new Error("Expect a symbol table in a schema symbol")}else{a=new We;const u=n.create(_s,{symbolTable:a});s.set(o,u)}s=a}return s}function ys(e){return e==="-"||e==="<>"||e===">"||e==="<"}function Lt(e){var n;if(!(e instanceof z)||!(e.expression instanceof je)||((n=e.expression.literal)==null?void 0:n.kind)!==f.COLOR_LITERAL)return!1;const t=e.expression.literal.value;if(t.length!==4&&t.length!==7||t[0]!=="#")return!1;for(let s=1;s<t.length;s+=1)if(!il(t[s]))return!1;return!0}function ne(e){return e===void 0}function ws(e){var t;return!!(Y(e)||Ue(e)||Pe(e)&&["true","false","null"].includes(e.expression.variable.value.toLowerCase())||e instanceof re&&Dl.includes((t=e.op)==null?void 0:t.value)&&Ue(e.expression)||e instanceof ie)}function Ue(e){var t,n,s;return e instanceof re?((t=e.op)==null?void 0:t.value)!=="-"&&((n=e.op)==null?void 0:n.value)!=="+"?!1:Ue(e.expression):e instanceof z&&e.expression instanceof je&&((s=e.expression.literal)==null?void 0:s.kind)===f.NUMERIC_LITERAL}function Ss(e){var n;if(!(e instanceof re)||!ys((n=e.op)==null?void 0:n.value))return!1;const t=Z(e.expression).unwrap_or(void 0);return t!==void 0&&t.length>0}function Ps(e){return e instanceof be&&e.elementList.every(W)}function Os(e){if(!(e instanceof ae||Jt(e)||e instanceof z||e instanceof Re))return!1;if(e instanceof ae){if(e.callee===void 0||e.argumentList===void 0||!e.argumentList.elementList.every(n=>Ue(n)||Y(n)||Pe(n)))return!1;e=e.callee}for(;e instanceof Re;){if(e.array===void 0||e.indexer===void 0||!e.indexer.elementList.every(n=>!n.colon&&!n.value&&Ue(n.name)))return!1;e=e.array}const t=Z(e).unwrap_or(void 0);return t!==void 0&&t.length>0}function F(e){var s;const t={},n=[];if(!e)return new se({});for(const r of e.elementList){if(!r.name)continue;if(r.name instanceof z){n.push(new c(l.INVALID_SETTINGS,"A setting name must be a stream of identifiers",r.name));continue}const i=(s=$e(r.name).unwrap_or(void 0))==null?void 0:s.toLowerCase();i&&(t[i]===void 0?t[i]=[r]:t[i].push(r))}return new se(t,n)}class Bn{constructor(t,n){this.ast=t,this.symbolFactory=n,this.publicSchemaSymbol=this.symbolFactory.create(_s,{symbolTable:new We}),this.ast.symbol=this.publicSchemaSymbol,this.ast.symbol.declaration=this.ast}validate(){const t=[];this.ast.body.forEach(s=>{if(s.parent=this.ast,s.type===void 0)return;const r=me(s),i=new r(s,this.publicSchemaSymbol.symbolTable,this.symbolFactory);t.push(...i.validate())});const n=this.ast.body.filter(s=>Oe(s).unwrap_or(void 0)===b.Project);return n.length>1&&n.forEach(s=>t.push(new c(l.PROJECT_REDEFINED,"Only one project can exist",s))),new se(this.ast,t)}}class Ie{constructor(t,n){this.declarationNode=t,this.errors=n}bind(){this.bindSettingList(this.declarationNode.attributeList,this.settingList),this.bindBody()}bindSettingList(t,n){t&&t.elementList.forEach(s=>{if(s.name instanceof z)return;const r=$e(s.name).unwrap_or(void 0);if(!r)return;const i=n[r.toLowerCase()];i!=null&&i.shouldBind&&this.scanAndBind(s.value,i)})}bindBody(){const t=this.declarationNode;if(!t.body)return;const{body:n}=t;n instanceof Ee?n.body.forEach(s=>{if(s instanceof S){if(!s.type||Oe(this.declarationNode).unwrap_or(null)===b.TablePartial&&Oe(s).unwrap_or(null)===b.Indexes)return;const r=xs(s);new r(s,this.errors).bind()}else s instanceof y?this.bindSubfield(s):this.bindPartialInjection(s)}):this.bindSubfield(n)}bindSubfield(t){const n=[t.callee,...t.args],s=M(n);s instanceof R&&(n.pop(),this.bindSettingList(s,this.subfield.settingList));const{argBinderRules:r}=this.subfield.arg;for(let i=0;i<Math.min(n.length,r.length);i+=1)r[i].shouldBind&&this.scanAndBind(n[i],r[i])}bindPartialInjection(t){var n;(n=this.injectionBinderRule)!=null&&n.shouldBind&&this.scanAndBind(t,this.injectionBinderRule)}scanAndBind(t,n){var s,r;if(t)if(t instanceof z){if(t.expression instanceof de&&((r=n.keywords)!=null&&r.includes((s=t.expression.variable)==null?void 0:s.value.toLowerCase())))return;this.bindFragments([t],n)}else t instanceof Te?Jt(t)?this.bindFragments(Be(t).unwrap_or([]),n):(this.scanAndBind(t.leftExpression,n),this.scanAndBind(t.rightExpression,n)):t instanceof re?this.scanAndBind(t.expression,n):t instanceof It?this.scanAndBind(t.expression,n):t instanceof be?t.elementList.forEach(i=>this.scanAndBind(i,n)):t instanceof ke&&this.bindFragments([t],n)}bindFragments(t,n){if(t.length===0)return;const s=t.length===1&&t[0]instanceof ke,r=[...n.topSubnamesSymbolKind],{remainingSubnamesSymbolKind:i}=n,a=s?-1:t.findIndex(N=>!W(N)),u=a!==-1&&Ps(t[a])?t[a]:void 0,p=a>=0?r.pop():void 0,h=t.slice(0,a===-1?void 0:a);if(h.length===0)return;const d=[];for(;r.length&&h.length;){const N=r.pop(),m=h.pop(),A=j(m).unwrap();d.unshift({index:it(A,N),referrer:m})}for(;h.length;){const N=h.pop(),m=s?ml(N).unwrap():j(N).unwrap();d.unshift({index:it(m,i),referrer:N})}return u?u.elementList.forEach(N=>this.resolveIndexStack([...d,{index:it(j(N).unwrap(),p),referrer:N}],n.ignoreNameNotFound)):this.resolveIndexStack(d,n.ignoreNameNotFound)}resolveIndexStack(t,n){if(t.length===0)throw new Error("Unreachable - An unresolved name must have at least one name component");const[s,...r]=t,i=Fn(s.index,this.declarationNode);if(i===void 0){const{kind:p,name:h}=he(s.index).unwrap();this.logError(s.referrer,`Can not find ${p} '${h}'`,n);return}i.references.push(s.referrer),s.referrer.referee=i;let a=i.symbolTable,{kind:o,name:u}=he(s.index).unwrap();for(const p of r){const{kind:h,name:d}=he(p.index).unwrap(),N=a.get(p.index);if(!N){this.logError(p.referrer,`${o} '${u}' does not have ${h} '${d}'`,n);return}if(o=h,u=d,p.referrer.referee=N,N.references.push(p.referrer),!N.symbolTable)break;a=N.symbolTable}}logError(t,n,s){s||this.errors.push(new c(l.BINDING_ERROR,n,t))}resolveInjections(t){var r;const n=(r=this.declarationNode.symbol)==null?void 0:r.symbolTable;if(!n)return;const s=new Map;n.forEach((i,a)=>{var p,h;if(!Ko(a))return;const o=Fn(zo(a),this.declarationNode),u=(h=(p=o==null?void 0:o.declaration)==null?void 0:p.symbol)==null?void 0:h.symbolTable;u&&u.forEach((d,N)=>{n.has(N)||s.set(N,{injectorFieldSymbol:d,injectorDeclaration:i.declaration})})}),s.forEach((i,a)=>{const o=rl(i.injectorFieldSymbol);if(!o)return;const u=t.create(o,i);n.set(a,u)})}}class Ml extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Fl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class Bl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Cl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[_.Table,_.Column],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[_.Table,_.Column],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[_.Table,_.Column],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[_.Table,_.Column],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class Vl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Gl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class $l extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[_.Table,_.Column],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class Xl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1},{shouldBind:!0,topSubnamesSymbolKind:[_.Enum],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!0}]},settingList:{ref:{shouldBind:!0,topSubnamesSymbolKind:[_.Table,_.Column],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!1},default:{shouldBind:!1},check:{shouldBind:!1}}},this.settingList={},this.injectionBinderRule={shouldBind:!0,topSubnamesSymbolKind:[],remainingSubnamesSymbolKind:_.TablePartial,ignoreNameNotFound:!1}}}class jl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[_.Table],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class Wl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1},{shouldBind:!0,topSubnamesSymbolKind:[_.Enum],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!0}]},settingList:{ref:{shouldBind:!0,topSubnamesSymbolKind:[_.Table,_.Column],remainingSubnamesSymbolKind:_.Schema,ignoreNameNotFound:!1},default:{shouldBind:!1},check:{shouldBind:!1}}},this.settingList={}}}function xs(e){switch(e.type.value.toLowerCase()){case b.Enum:return Bl;case b.Table:return Xl;case b.TableGroup:return jl;case b.Project:return Gl;case b.Ref:return $l;case b.Note:return Vl;case b.Indexes:return Cl;case b.TablePartial:return Wl;case b.Check:return Ml;default:return Fl}}class Hl{constructor(t){this.ast=t,this.errors=[]}resolve(t){return this.ast.body.map(n=>{if(!n.type)return null;const s=xs(n),r=new s(n,this.errors);return r.resolveInjections(t),r}).forEach(n=>n==null?void 0:n.bind()),new se(this.ast,this.errors)}}class Kl{constructor(t){this.generator=t}create(t,n){return new t(n,this.generator.nextId())}}class zl{constructor(t,n){this.ast=t,this.symbolFactory=new Kl(n)}analyze(){return new Bn(this.ast,this.symbolFactory).validate().chain(n=>new Hl(n).resolve(this.symbolFactory))}validate(){return new Bn(this.ast,this.symbolFactory).validate().chain(n=>new se(n,[]))}}function Cn(e,t){const{variables:n,tupleElements:s}=Ze(e).unwrap();return s?n.length===0?{schemaName:t.schemaName,tableName:t.name,fieldNames:s}:{tableName:n.pop(),schemaName:n.pop()||null,fieldNames:s}:n.length===1?{schemaName:t.schemaName,tableName:t.name,fieldNames:[n[0]]}:{fieldNames:[n.pop()],tableName:n.pop(),schemaName:n.pop()||null}}function Ds(e){switch(e){case"<":return["1","*"];case"<>":return["*","*"];case">":return["*","1"];case"-":return["1","1"];default:throw new Error("Invalid relation op")}}function L(e){return{start:{offset:e.startPos.offset,line:e.startPos.line+1,column:e.startPos.column+1},end:{offset:e.endPos.offset,line:e.endPos.line+1,column:e.endPos.column+1}}}function ht(e){var n;const t=(n=Be(e).unwrap_or(void 0))==null?void 0:n.pop();return t instanceof be?t.elementList.map(s=>s.referee):[t.referee]}function Ce(e){const t=Z(e).unwrap();return{name:t.pop(),schemaName:t}}function tt(e){return e.expression.literal.value}function ks(e,t){if(Array.isArray(e)){const r=e.map(({id:a})=>a).sort().join(","),i=t.map(({id:a})=>a).sort().join(",");return r<i?`${r}-${i}`:`${i}-${r}`}const n=e.id.toString(),s=t.id.toString();return n<s?`${n}-${s}`:`${s}-${n}`}function Zt(e,t){if(Array.isArray(e)){const r=e.map(({id:a})=>a).sort(),i=t.map(({id:a})=>a).sort();return Rt(r,i).every(([a,o])=>a===o)}const n=e.id,s=t.id;return n===s}function fe(e){const t=e.split(`
|
|
10
|
-
`),n=t.slice(t.findIndex(i=>i.trimStart()!=="")),
|
|
11
|
-
`)}function Rs(e){if(e){if(Y(e))return{value:C(e).unwrap(),type:"string"};if(Ue(e))return{type:"number",value:Mt(e)};if(Pe(e))return{value:e.expression.variable.value.toLowerCase(),type:"boolean"};if(e instanceof ie&&e.value)return{value:e.value.value,type:"expression"};throw new Error("Unreachable")}}function Us(e){let t=null;e instanceof ae&&(t=e.argumentList.elementList.map(i=>Ue(i)?As(i):Y(i)?C(i).unwrap():Q(i).unwrap()).join(","),e=e.callee);let n="";for(;e instanceof Re;)n=`[${e.indexer.elementList.map(i=>i.name.expression.literal.value).join(",")}]${n}`,e=e.array;const{name:s,schemaName:r}=Ce(e);return r.length>1?new se({schemaName:r.length===0?null:r[0],type_name:`${s}${n}${t?`(${t})`:""}`,args:t},[new c(l.UNSUPPORTED,"Nested schema is not supported",e)]):new se({schemaName:r.length===0?null:r[0],type_name:`${s}${n}${t?`(${t})`:""}`,args:t})}class Ms{constructor(t,n){this.declarationNode=t,this.env=n,this.table={name:void 0,schemaName:void 0,alias:null,fields:[],token:void 0,indexes:[],partials:[],checks:[]},this.pkColumns=[]}interpret(){this.table.token=L(this.declarationNode),this.env.tables.set(this.declarationNode,this.table);const t=[...this.interpretName(this.declarationNode.name),...this.interpretAlias(this.declarationNode.alias),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)];return this.pkColumns.length>=2&&(this.table.indexes.push({columns:this.pkColumns.map(({name:n,token:s})=>({value:n,type:"column",token:s})),token:{start:{offset:-1,line:-1,column:-1},end:{offset:-1,line:-1,column:-1}},pk:!0}),this.pkColumns.forEach(n=>{n.pk=!1})),t}interpretName(t){const{name:n,schemaName:s}=Ce(t);return s.length>1?(this.table.name=n,this.table.schemaName=s.join("."),[new c(l.UNSUPPORTED,"Nested schema is not supported",t)]):(this.table.name=n,this.table.schemaName=s.length?s[0]:null,[])}interpretAlias(t){if(!t)return[];const n=j(t).unwrap_or(null);return n&&(this.env.aliases.push({name:n,kind:"table",value:{tableName:this.table.name,schemaName:this.table.schemaName}}),this.table.alias=n),[]}interpretSettingList(t){var r,i,a;const n=F(t).getValue();this.table.headerColor=(r=n[E.HeaderColor])!=null&&r.length?tt((a=(i=n[E.HeaderColor])==null?void 0:i.at(0))==null?void 0:a.value):void 0;const[s]=n[E.Note]||[];return this.table.note=s&&{value:C(s==null?void 0:s.value).map(fe).unwrap(),token:L(s)},[]}interpretBody(t){const[n,s]=oe(t.body,r=>r instanceof y||r instanceof ke);return[...this.interpretFields(n),...this.interpretSubElements(s)]}interpretSubElements(t){return t.flatMap(n=>{var s;switch((s=n.type)==null?void 0:s.value.toLowerCase()){case b.Note:return this.table.note={value:C(n.body instanceof Ee?n.body.body[0].callee:n.body.callee).map(fe).unwrap(),token:L(n)},[];case b.Indexes:return this.interpretIndexes(n);case b.Check:return this.interpretChecks(n);default:return[]}})}interpretInjection(t,n){const s={order:n,token:L(t)};return s.name=t.partial.variable.value,this.table.partials.push(s),[]}interpretFields(t){var a;const r=((a=this.declarationNode.symbol)!=null&&a.symbolTable?[...this.declarationNode.symbol.symbolTable.entries()]:[]).filter(([o])=>{const u=he(o).unwrap_or(null);return(u==null?void 0:u.kind)===_.Column}).length?[]:[new c(l.EMPTY_TABLE,"A Table must have at least one column",this.declarationNode)],i=t.flatMap((o,u)=>o instanceof y?this.interpretColumn(o):this.interpretInjection(o,u));return[...r,...i]}interpretColumn(t){var a,o,u,p,h,d,N,m,A;const n=[],s={};s.name=j(t.callee).unwrap();const r=Us(t.args[0]);s.type=r.getValue(),n.push(...r.getErrors()),s.token=L(t),s.inline_refs=[];const i=t.args.slice(1);if(M(i)instanceof R){const I=F(i.pop()).getValue();s.pk=!!((a=I[E.PK])!=null&&a.length)||!!((o=I[E.PrimaryKey])!=null&&o.length),s.increment=!!((u=I[E.Increment])!=null&&u.length),s.unique=!!((p=I[E.Unique])!=null&&p.length),s.not_null=(h=I[E.NotNull])!=null&&h.length?!0:(d=I[E.Null])!=null&&d.length?!1:void 0,s.dbdefault=Rs((m=(N=I[E.Default])==null?void 0:N.at(0))==null?void 0:m.value);const v=(A=I[E.Note])==null?void 0:A.at(0);s.note=v&&{value:C(v.value).map(fe).unwrap(),token:L(v)};const H=I[E.Ref]||[];s.inline_refs=H.flatMap(w=>{const[ee]=ht(w.value.expression);if(Zt(ee,t.symbol))return n.push(new c(l.SAME_ENDPOINT,"Two endpoints are the same",w)),[];const V=w.value.op,G=Z(w.value.expression).unwrap();let le;if(G.length===1){const[te]=G;le={schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[te],relation:V.value,token:L(w)}}else if(G.length===2){const[te,ye]=G;le={schemaName:null,tableName:te,fieldNames:[ye],relation:V.value,token:L(w)}}else if(G.length===3){const[te,ye,nn]=G;le={schemaName:te,tableName:ye,fieldNames:[nn],relation:V.value,token:L(w)}}else{n.push(new c(l.UNSUPPORTED,"Nested schema is not supported",w));const te=G.pop(),ye=G.pop();le={schemaName:G.join("."),tableName:ye,fieldNames:[te],relation:V.value,token:L(w)}}const ve=this.registerInlineRefToEnv(t,ee,le,w);return n.push(...ve),ve.length===0?le:[]});const K=I[E.Check]||[];s.checks=K.map(w=>{const ee=L(w),V=w.value.value.value;return{token:ee,expression:V}})}return s.pk||(s.pk=i.some(I=>Q(I).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=i.some(I=>Q(I).unwrap().toLowerCase()==="unique")),this.table.fields.push(s),s.pk&&this.pkColumns.push(s),n}interpretIndexes(t){return this.table.indexes.push(...t.body.body.map(n=>{var a,o,u,p,h,d,N;const s={columns:[]},r=n;s.token=L(r);const i=[r.callee,...r.args];if(M(i)instanceof R){const m=F(i.pop()).getValue();s.pk=!!((a=m[E.PK])!=null&&a.length),s.unique=!!((o=m[E.Unique])!=null&&o.length),s.name=C((p=(u=m[E.Name])==null?void 0:u.at(0))==null?void 0:p.value).unwrap_or(void 0);const A=(h=m[E.Note])==null?void 0:h.at(0);s.note=A&&{value:C(A.value).unwrap(),token:L(A)},s.type=Q((N=(d=m[E.Type])==null?void 0:d.at(0))==null?void 0:N.value).unwrap_or(void 0)}return i.flatMap(m=>{if(!(m instanceof ae))return m;const A=[];for(;m instanceof ae;)A.push(m.argumentList),m=m.callee;return A.push(m),A}).forEach(m=>{const{functional:A,nonFunctional:I}=ut(m).unwrap();s.columns.push(...A.map(v=>({value:v.value.value,type:"expression",token:L(v)})),...I.map(v=>({value:j(v).unwrap(),type:"column",token:L(v)})))}),s})),[]}interpretChecks(t){return this.table.checks.push(...t.body.body.map(n=>{var i,a;const s={},r=n;if(s.token=L(r),r.args[0]instanceof R){const o=F(r.args[0]).getValue();s.name=C((a=(i=o[E.Name])==null?void 0:i.at(0))==null?void 0:a.value).unwrap_or(void 0)}return s.expression=r.callee.value.value,s})),[]}registerInlineRefToEnv(t,n,s,r){const i=ks(t.symbol,n);if(this.env.refIds[i])return[new c(l.CIRCULAR_REF,"References with same endpoints exist",r),new c(l.CIRCULAR_REF,"References with same endpoints exist",this.env.refIds[i])];const a=Ds(s.relation);return this.env.refIds[i]=r,this.env.ref.set(r,{name:null,schemaName:null,token:s.token,endpoints:[{...s,relation:a[1]},{schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[Q(t.callee).unwrap()],token:L(t),relation:a[0]}]}),[]}}class Yl{constructor(t,n){this.declarationNode=t,this.env=n,this.note={name:void 0,content:void 0,token:void 0}}interpret(){return this.note.token=L(this.declarationNode),this.env.notes.set(this.declarationNode,this.note),[...this.interpretName(this.declarationNode.name),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)]}interpretName(t){const{name:n}=Ce(t);return this.note.name=n,[]}interpretSettingList(t){var s,r,i;const n=F(t).getValue();return this.note.headerColor=(s=n.headercolor)!=null&&s.length?tt((i=(r=n.headercolor)==null?void 0:r.at(0))==null?void 0:i.value):void 0,[]}interpretBody(t){const[n,s]=oe(t.body,r=>r instanceof y);return n.length!==1||s.length>0?[new c(l.INVALID_NOTE,"Invalid note syntax",t)]:[...this.interpretNote(n[0])]}interpretNote(t){const n=os(t,"callee.expression.literal.value","");return this.note.content=fe(n),[]}}class Fs{constructor(t,n){this.declarationNode=t,this.env=n,this.container=this.declarationNode.parent instanceof S?this.env.tables.get(this.declarationNode.parent):void 0,this.ref={}}interpret(){return this.ref.token=L(this.declarationNode),this.env.ref.set(this.declarationNode,this.ref),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(t){const n=[],s=Z(this.declarationNode.name).unwrap_or([]);return this.ref.name=s.pop()||null,s.length>1&&n.push(new c(l.UNSUPPORTED,"Nested schema is not supported",this.declarationNode.name)),this.ref.schemaName=s.join(".")||null,n}interpretBody(t){return t instanceof y?this.interpretField(t):this.interpretField(t.body[0])}interpretField(t){var p,h,d,N,m,A,I;const n=t.callee.op.value,{leftExpression:s,rightExpression:r}=t.callee,i=ht(s),a=ht(r);if(Zt(i,a))return[new c(l.SAME_ENDPOINT,"Two endpoints are the same",t)];const o=ks(i,a);if(this.env.refIds[o])return[new c(l.CIRCULAR_REF,"References with same endpoints exist",this.declarationNode),new c(l.CIRCULAR_REF,"References with same endpoints exist",this.env.refIds[o])];if(t.args[0]){const v=F(t.args[0]).getValue(),H=(h=(p=v.delete)==null?void 0:p.at(0))==null?void 0:h.value;this.ref.onDelete=H instanceof ce?$e(H).unwrap_or(void 0):Q(H).unwrap_or(void 0);const K=(N=(d=v.update)==null?void 0:d.at(0))==null?void 0:N.value;this.ref.onUpdate=K instanceof ce?$e(K).unwrap_or(void 0):Q(K).unwrap_or(void 0),this.ref.color=(m=v.color)!=null&&m.length?tt((I=(A=v.color)==null?void 0:A.at(0))==null?void 0:I.value):void 0}const u=Ds(n);return this.ref.endpoints=[{...Cn(s,this.container),relation:u[0],token:L(s)},{...Cn(r,this.container),relation:u[1],token:L(r)}],this.env.refIds[o]=this.declarationNode,[]}}class Bs{constructor(t,n){this.declarationNode=t,this.env=n,this.tableGroup={tables:[]}}interpret(){const t=[];return this.tableGroup.token=L(this.declarationNode),this.env.tableGroups.set(this.declarationNode,this.tableGroup),t.push(...this.interpretName(this.declarationNode.name),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)),t}interpretName(t){const n=[],{name:s,schemaName:r}=Ce(t);return r.length>=2&&(this.tableGroup.name=s,this.tableGroup.schemaName=r.join("."),n.push(new c(l.UNSUPPORTED,"Nested schema is not supported",this.declarationNode.name))),this.tableGroup.name=s,this.tableGroup.schemaName=r[0]||null,n}interpretBody(t){const[n,s]=oe(t.body,r=>r instanceof y);return[...this.interpretFields(n),...this.interpretSubElements(s)]}interpretSubElements(t){return t.flatMap(n=>{var s;switch((s=n.type)==null?void 0:s.value.toLowerCase()){case"note":this.tableGroup.note={value:C(n.body instanceof Ee?n.body.body[0].callee:n.body.callee).map(fe).unwrap(),token:L(n)};break}return[]})}interpretFields(t){const n=[];return this.tableGroup.tables=t.map(s=>{const r=Z(s.callee).unwrap();r.length>2&&n.push(new c(l.UNSUPPORTED,"Nested schema is not supported",s));const i=Be(s.callee).unwrap().pop().referee.id;if(this.env.groupOfTable[i]){const a=this.env.groupOfTable[i],{schemaName:o,name:u}=this.env.tableGroups.get(a),p=o?`${o}.${u}`:u;n.push(new c(l.TABLE_REAPPEAR_IN_TABLEGROUP,`Table "${r.join(".")}" already appears in group "${p}"`,s))}else this.env.groupOfTable[i]=this.declarationNode;return{name:r.pop(),schemaName:r.join(".")}}),n}interpretSettingList(t){var r,i,a;const n=F(t).getValue();this.tableGroup.color=(r=n.color)!=null&&r.length?tt((a=(i=n.color)==null?void 0:i.at(0))==null?void 0:a.value):void 0;const[s]=n.note||[];return this.tableGroup.note=s&&{value:C(s==null?void 0:s.value).map(fe).unwrap(),token:L(s)},[]}}class Cs{constructor(t,n){this.declarationNode=t,this.env=n,this.enum={values:[]}}interpret(){return this.enum.token=L(this.declarationNode),this.env.enums.set(this.declarationNode,this.enum),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(t){const{name:n,schemaName:s}=Ce(t);return s.length>1?(this.enum.name=n,this.enum.schemaName=s.join("."),[new c(l.UNSUPPORTED,"Nested schema is not supported",t)]):(this.enum.name=n,this.enum.schemaName=s.length?s[0]:null,[])}interpretBody(t){return t.body.flatMap(n=>{var o;const s=n,r={};r.token=L(s),r.name=Q(s.callee).unwrap();const a=(o=F(s.args[0]).getValue().note)==null?void 0:o.at(0);return r.note=a&&{value:C(a.value).map(fe).unwrap(),token:L(a)},this.enum.values.push(r),[]})}}class Vs{constructor(t,n){this.declarationNode=t,this.env=n,this.tablePartial={name:void 0,fields:[],token:void 0,indexes:[],checks:[]},this.pkColumns=[]}interpret(){this.tablePartial.token=L(this.declarationNode),this.env.tablePartials.set(this.declarationNode,this.tablePartial);const t=[...this.interpretName(this.declarationNode.name),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)];return this.pkColumns.length>=2&&(this.tablePartial.indexes.push({columns:this.pkColumns.map(({name:n,token:s})=>({value:n,type:"column",token:s})),token:{start:{offset:-1,line:-1,column:-1},end:{offset:-1,line:-1,column:-1}},pk:!0}),this.pkColumns.forEach(n=>{n.pk=!1})),t}interpretName(t){const{name:n}=Ce(t);return this.tablePartial.name=n,[]}interpretSettingList(t){const n=F(t).getValue(),s=Fo(n[E.HeaderColor]);this.tablePartial.headerColor=s?tt(s.value):void 0;const[r]=n[E.Note]||[];return this.tablePartial.note=r&&{value:C(r==null?void 0:r.value).map(fe).unwrap(),token:L(r)},[]}interpretBody(t){const[n,s]=oe(t.body,r=>r instanceof y);return[...this.interpretFields(n),...this.interpretSubElements(s)]}interpretSubElements(t){return t.flatMap(n=>{var s;switch((s=n.type)==null?void 0:s.value.toLowerCase()){case b.Note:return this.tablePartial.note={value:C(n.body instanceof Ee?n.body.body[0].callee:n.body.callee).map(fe).unwrap(),token:L(n)},[];case b.Indexes:return this.interpretIndexes(n);case b.Check:return this.interpretChecks(n);default:return[]}})}interpretFields(t){return t.flatMap(n=>this.interpretColumn(n))}interpretColumn(t){var a,o,u,p,h,d,N,m,A;const n=[],s={};s.name=j(t.callee).unwrap();const r=Us(t.args[0]);s.type=r.getValue(),n.push(...r.getErrors()),s.token=L(t),s.inline_refs=[];const i=t.args.slice(1);if(M(i)instanceof R){const I=F(i.pop()).getValue();s.pk=!!((a=I[E.PK])!=null&&a.length)||!!((o=I[E.PrimaryKey])!=null&&o.length),s.increment=!!((u=I[E.Increment])!=null&&u.length),s.unique=!!((p=I[E.Unique])!=null&&p.length),s.not_null=(h=I[E.NotNull])!=null&&h.length?!0:(d=I[E.Null])!=null&&d.length?!1:void 0,s.dbdefault=Rs((m=(N=I[E.Default])==null?void 0:N.at(0))==null?void 0:m.value);const v=(A=I[E.Note])==null?void 0:A.at(0);s.note=v&&{value:C(v.value).map(fe).unwrap(),token:L(v)};const H=I[E.Ref]||[];s.inline_refs=H.flatMap(w=>{const[ee]=ht(w.value.expression);if(Zt(ee,t.symbol))return n.push(new c(l.SAME_ENDPOINT,"Two endpoints are the same",w)),[];const V=w.value.op,G=Z(w.value.expression).unwrap();let le;if(G.length===2){const[ve,te]=G;le={schemaName:null,tableName:ve,fieldNames:[te],relation:V.value,token:L(w)}}else if(G.length===3){const[ve,te,ye]=G;le={schemaName:ve,tableName:te,fieldNames:[ye],relation:V.value,token:L(w)}}else{n.push(new c(l.UNSUPPORTED,"Unsupported",w));const ve=G.pop(),te=G.pop();le={schemaName:G.join("."),tableName:te,fieldNames:[ve],relation:V.value,token:L(w)}}return le});const K=I[E.Check]||[];s.checks=K.map(w=>{const ee=L(w),V=w.value.value.value;return{token:ee,expression:V}})}return s.pk||(s.pk=i.some(I=>Q(I).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=i.some(I=>Q(I).unwrap().toLowerCase()==="unique")),this.tablePartial.fields.push(s),s.pk&&this.pkColumns.push(s),n}interpretIndexes(t){return this.tablePartial.indexes.push(...t.body.body.map(n=>{var a,o,u,p,h,d,N;const s={columns:[]},r=n;s.token=L(r);const i=[r.callee,...r.args];if(M(i)instanceof R){const m=F(i.pop()).getValue();s.pk=!!((a=m[E.PK])!=null&&a.length),s.unique=!!((o=m[E.Unique])!=null&&o.length),s.name=C((p=(u=m[E.Name])==null?void 0:u.at(0))==null?void 0:p.value).unwrap_or(void 0);const A=(h=m[E.Note])==null?void 0:h.at(0);s.note=A&&{value:C(A.value).unwrap(),token:L(A)},s.type=Q((N=(d=m[E.Type])==null?void 0:d.at(0))==null?void 0:N.value).unwrap_or(void 0)}return i.flatMap(m=>{if(!(m instanceof ae))return m;const A=[];let I=m;for(;I instanceof ae;)A.push(I.argumentList),I=I.callee;return A.push(I),A}).forEach(m=>{const{functional:A,nonFunctional:I}=ut(m).unwrap();s.columns.push(...A.map(v=>({value:v.value.value,type:"expression",token:L(v)})),...I.map(v=>({value:j(v).unwrap(),type:"column",token:L(v)})))}),s})),[]}interpretChecks(t){return this.tablePartial.checks.push(...t.body.body.map(n=>{var i,a;const s={},r=n;if(s.token=L(r),r.args[0]instanceof R){const o=F(r.args[0]).getValue();s.name=C((a=(i=o[E.Name])==null?void 0:i.at(0))==null?void 0:a.value).unwrap_or(void 0)}return s.expression=r.callee.value.value,s})),[]}}class ql{constructor(t,n){this.declarationNode=t,this.env=n,this.project={enums:[],refs:[],tableGroups:[],tables:[],tablePartials:[]}}interpret(){return this.env.project.set(this.declarationNode,this.project),this.project.token=L(this.declarationNode),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(t){if(!t)return this.project.name=null,[];const{name:n}=Ce(t);return this.project.name=n,[]}interpretBody(t){return t.body.flatMap(n=>{var r;const s=n;switch((r=s.type)==null?void 0:r.value.toLowerCase()){case"table":{const i=new Ms(s,this.env).interpret();return this.project.tables.push(this.env.tables.get(s)),i}case"ref":{const i=new Fs(s,this.env).interpret();return this.project.refs.push(this.env.ref.get(s)),i}case"tablegroup":{const i=new Bs(s,this.env).interpret();return this.project.tableGroups.push(this.env.tableGroups.get(s)),i}case"enum":{const i=new Cs(s,this.env).interpret();return this.project.enums.push(this.env.enums.get(s)),i}case"note":return this.project.note={value:C(s.body instanceof Ee?s.body.body[0].callee:s.body.callee).map(fe).unwrap(),token:L(s)},[];case"tablepartial":{const i=new Vs(s,this.env).interpret();return this.project.tablePartials.push(this.env.tablePartials.get(s)),i}default:return this.project[s.type.value.toLowerCase()]=C(s.body.callee).unwrap(),[]}})}}function Ql(e){return{schemas:[],tables:Array.from(e.tables.values()),notes:Array.from(e.notes.values()),refs:Array.from(e.ref.values()),enums:Array.from(e.enums.values()),tableGroups:Array.from(e.tableGroups.values()),aliases:e.aliases,project:Array.from(e.project.values())[0]||{},tablePartials:Array.from(e.tablePartials.values())}}class Jl{constructor(t){this.ast=t,this.env={schema:[],tables:new Map,notes:new Map,refIds:{},ref:new Map,enums:new Map,tableGroups:new Map,groupOfTable:{},aliases:[],project:new Map,tablePartials:new Map}}interpret(){const t=this.ast.body.flatMap(n=>{switch(Oe(n).unwrap_or(void 0)){case b.Table:return new Ms(n,this.env).interpret();case b.Note:return new Yl(n,this.env).interpret();case b.Ref:return new Fs(n,this.env).interpret();case b.TableGroup:return new Bs(n,this.env).interpret();case b.TablePartial:return new Vs(n,this.env).interpret();case b.Enum:return new Cs(n,this.env).interpret();case b.Project:return new ql(n,this.env).interpret();default:return[]}});return new se(Ql(this.env),t)}}var P=(e=>(e[e.Function=1]="Function",e[e.Constructor=2]="Constructor",e[e.Field=3]="Field",e[e.Variable=4]="Variable",e[e.Class=5]="Class",e[e.Struct=6]="Struct",e[e.Interface=7]="Interface",e[e.Module=8]="Module",e[e.Property=9]="Property",e[e.Event=10]="Event",e[e.Operator=11]="Operator",e[e.Unit=12]="Unit",e[e.Value=13]="Value",e[e.Constant=14]="Constant",e[e.Enum=15]="Enum",e[e.EnumMember=16]="EnumMember",e[e.Keyword=17]="Keyword",e[e.Text=18]="Text",e[e.Color=19]="Color",e[e.File=20]="File",e[e.Reference=21]="Reference",e[e.Customcolor=22]="Customcolor",e[e.Folder=23]="Folder",e[e.TypeParameter=24]="TypeParameter",e[e.User=25]="User",e[e.Issue=26]="Issue",e[e.Snippet=27]="Snippet",e))(P||{}),U=(e=>(e[e.None=0]="None",e[e.KeepWhitespace=1]="KeepWhitespace",e[e.InsertAsSnippet=4]="InsertAsSnippet",e))(U||{});function et(e){switch(e){case _.Schema:return P.Module;case _.Table:case _.TablePartial:return P.Class;case _.Column:case _.TableGroupField:return P.Field;case _.Enum:return P.Enum;case _.EnumField:return P.EnumMember;case _.TableGroup:return P.Struct;default:return P.Text}}function ft(e,t){if(!e||Ut(e))return!1;for(const n of e.trailingTrivia){if(n.start>t)break;if(n.kind===f.NEWLINE&&n.end<=t)return!1}return!0}function $(){return{suggestions:[]}}function pt(e){return{...e,suggestions:e.suggestions.map(t=>({...t,insertText:` ${t.insertText}`}))}}function vt(e){return{...e,suggestions:e.suggestions.map(t=>({...t,insertText:t.insertText.split("").every(gt)?t.insertText:`"${t.insertText}"`}))}}function en(e,t){return e.getOffsetAt(t)}class Gs{constructor(t,n=[]){this.compiler=t,this.triggerCharacters=n}provideCompletionItems(t,n){var h,d;const s=en(t,n),r=this.compiler.token.flatStream(),{token:i,index:a}=this.compiler.container.token(s),o=a===void 0?r[0]:r[a+1];if([...(i==null?void 0:i.trailingTrivia)||[],...(i==null?void 0:i.leadingTrivia)||[],...(o==null?void 0:o.leadingTrivia)||[]].find(N=>$o(N)&&Ye(s,N)))return $();if(a===void 0)return jn();if([f.STRING_LITERAL,f.QUOTED_STRING].includes(i.kind)&&Ye(s,i))return $();const u=this.compiler.container.element(s);if(this.compiler.container.scopeKind(s)===D.TOPLEVEL||u instanceof S&&u.type&&u.type.start<=s&&u.type.end>=s)return jn();const p=[...this.compiler.container.stack(s)].reverse();for(const N of p)if(N instanceof re)switch((h=N.op)==null?void 0:h.value){case">":case"<":case"<>":case"-":return Vn(this.compiler,s,N)}else if(N instanceof Te)switch((d=N.op)==null?void 0:d.value){case">":case"<":case"<>":case"-":return Vn(this.compiler,s,N);case".":return $s(this.compiler,s,N)}else{if(N instanceof ue)return Gn(this.compiler,s,N);if(N instanceof R)return Gn(this.compiler,s,N);if(N instanceof be)return ec(this.compiler,s);if(N instanceof ke)return Zl(this.compiler,s);if(N instanceof y)return Xn(this.compiler,s,N);if(N instanceof S&&(N.bodyColon&&s>=N.bodyColon.end||N.body&&Ye(s,N.body)))return Xn(this.compiler,s,void 0)}return $()}}function Zl(e,t){const n=e.container.element(t);return nt(e,t,n,[_.TablePartial])}function Vn(e,t,n){const s=e.container.scopeKind(t);if([D.REF,D.TABLE,D.TABLEPARTIAL].includes(s)){const r=nt(e,t,e.container.element(t),[_.Table,_.Schema,_.Column]);return ft(n.op,t)?pt(r):r}return $()}function nt(e,t,n,s){var a;if(n===void 0)return $();let r=n;const i={suggestions:[]};for(;r;){if((a=r==null?void 0:r.symbol)!=null&&a.symbolTable){const{symbol:o}=r;i.suggestions.push(...e.symbol.members(o).filter(({kind:u})=>s.includes(u)).map(({name:u,kind:p})=>({label:u,insertText:u,insertTextRules:U.KeepWhitespace,kind:et(p),sortText:et(p).toString().padStart(2,"0"),range:void 0})))}r=r instanceof S?r.parent:void 0}return vt(i)}function ec(e,t){var s;switch(e.container.scopeKind(t)){case D.INDEXES:return js(e,t);case D.REF:{const r=[...e.container.stack(t)];for(;r.length>0;){const i=r.pop();if(i instanceof Te&&((s=i.op)==null?void 0:s.value)===".")return $s(e,t,i)}}return Xs(e,t)}return $()}function Gn(e,t,n){const{token:s}=e.container.token(t);if([f.COMMA,f.LBRACKET].includes(s==null?void 0:s.kind)){const r=$n(e,t);return(s==null?void 0:s.kind)===f.COMMA&&ft(s,t)?pt(r):r}if(n.name&&n.name.start<=t&&n.name.end>=t)return $n(e,t);if(n.name instanceof ce){const r=tc(e,t,$e(n.name).unwrap_or(""));return(s==null?void 0:s.kind)===f.COLON&&ft(s,t)?pt(r):r}return $()}function $n(e,t){const n=e.container.element(t);if(n instanceof J)return $();const s=e.container.scopeKind(t);if(n.body&&!Ye(t,n.body)){let r;switch(s){case D.TABLE:case D.TABLEPARTIAL:r=[E.HeaderColor,E.Note];break;case D.TABLEGROUP:r=[E.Color,E.Note];break;default:r=[]}return{suggestions:r.map(i=>({label:i,insertText:`${i}: `,kind:P.Field,insertTextRules:U.KeepWhitespace,range:void 0}))}}switch(s){case D.TABLE:case D.TABLEPARTIAL:return{suggestions:[...[E.PK,E.PrimaryKey,E.Null,E.NotNull,E.Increment,E.Unique].map(r=>({label:r,insertText:r,kind:P.Property,insertTextRules:U.KeepWhitespace,range:void 0})),...[E.Ref,E.Default,E.Note,E.Check].map(r=>({label:r,insertText:`${r}: `,kind:P.Property,insertTextRules:U.KeepWhitespace,range:void 0}))]};case D.ENUM:return{suggestions:[...[E.Note].map(r=>({label:r,insertText:`${r}: `,kind:P.Property,insertTextRules:U.KeepWhitespace,range:void 0}))]};case D.INDEXES:return{suggestions:[...[E.Unique,E.PK].map(r=>({label:r,insertText:r,insertTextRules:U.KeepWhitespace,kind:P.Property,range:void 0})),...[E.Note,E.Name,E.Type].map(r=>({label:r,insertText:`${r}: `,kind:P.Property,insertTextRules:U.KeepWhitespace,range:void 0}))]};case D.REF:return{suggestions:[E.Update,E.Delete,E.Color].map(r=>({label:r,insertText:`${r}: `,kind:P.Property,insertTextRules:U.KeepWhitespace,range:void 0}))};case D.CHECKS:return{suggestions:[E.Name].map(r=>({label:r,insertText:`${r}: `,kind:P.Property,insertTextRules:U.KeepWhitespace,range:void 0}))}}return $()}function tc(e,t,n){switch(n==null?void 0:n.toLowerCase()){case"update":case"delete":return{suggestions:["cascade","set default","set null","restrict"].map(s=>({label:s,insertText:s,kind:P.Value,insertTextRules:U.KeepWhitespace,range:void 0}))};case"type":return{suggestions:["btree","hash"].map(s=>({label:s,insertText:`${s}`,kind:P.Value,insertTextRules:U.KeepWhitespace,range:void 0}))}}return $()}function $s(e,t,n){const s=Be(n).unwrap_or([]);if(s.pop(),s.some(i=>!W(i)))return $();const r=s.map(i=>Q(i).unwrap());return vt({suggestions:e.symbol.ofName({nameStack:r,owner:e.container.element(t)}).flatMap(({symbol:i})=>e.symbol.members(i)).map(({kind:i,name:a})=>({label:a,insertText:a,kind:et(i),range:void 0}))})}function Xn(e,t,n){var r;switch(e.container.scopeKind(t)){case D.TABLE:case D.TABLEPARTIAL:return sc(e,t,n);case D.PROJECT:return rc(e,t,n);case D.INDEXES:return ac(e,t);case D.ENUM:return nc(e,t,n);case D.REF:{const i=Xs(e,t);return((r=e.container.token(t).token)==null?void 0:r.kind)===f.COLON&&ft(e.container.token(t).token,t)?pt(i):i}case D.TABLEGROUP:return ic(e);default:return $()}}function jn(){return{suggestions:["Table","TableGroup","Enum","Project","Ref","TablePartial"].map(e=>({label:e,insertText:e,insertTextRules:U.KeepWhitespace,kind:P.Keyword,range:void 0}))}}function nc(e,t,n){return n!=null&&n.callee&&tn(t,n)===1?nt(e,t,e.container.element(t),[_.Schema,_.Table,_.Column]):$()}function sc(e,t,n){const s=["Note","indexes","checks"];if(!(n!=null&&n.callee))return{suggestions:s.map(i=>({label:i,insertText:i,insertTextRules:U.KeepWhitespace,kind:P.Keyword,range:void 0}))};const r=tn(t,n);return r===0?{suggestions:s.map(i=>({label:i,insertText:i,insertTextRules:U.KeepWhitespace,kind:P.Keyword,range:void 0}))}:r===1?oc(e,t):$()}function rc(e,t,n){const s=["Table","TableGroup","Enum","Note","Ref","TablePartial"];return n!=null&&n.callee?tn(t,n)===0?{suggestions:s.map(i=>({label:i,insertText:i,insertTextRules:U.KeepWhitespace,kind:P.Keyword,range:void 0}))}:$():{suggestions:s.map(i=>({label:i,insertText:i,insertTextRules:U.KeepWhitespace,kind:P.Keyword,range:void 0}))}}function Xs(e,t){return nt(e,t,e.container.element(t),[_.Schema,_.Table,_.Column])}function ic(e){return{suggestions:[...vt({suggestions:[...e.parse.publicSymbolTable().entries()].flatMap(([t])=>{const n=he(t).unwrap_or(void 0);if(n===void 0)return[];const{kind:s,name:r}=n;return s!==_.Table&&s!==_.Schema?[]:{label:r,insertText:r,insertTextRules:U.KeepWhitespace,kind:et(s),range:void 0}})}).suggestions,...["Note"].map(t=>({label:t,insertText:t,insertTextRules:U.KeepWhitespace,kind:P.Keyword,range:void 0}))]}}function ac(e,t){return js(e,t)}function oc(e,t){return{suggestions:[...["integer","int","tinyint","smallint","mediumint","bigint","bit","bool","binary","varbinary","logical","char","nchar","varchar","varchar2","nvarchar","nvarchar2","binary_float","binary_double","float","double","decimal","dec","real","money","smallmoney","enum","tinyblob","tinytext","blob","text","mediumblob","mediumtext","longblob","longtext","ntext","set","inet6","uuid","image","date","time","datetime","datetime2","timestamp","year","smalldatetime","datetimeoffset","XML","sql_variant","uniqueidentifier","CURSOR","BFILE","CLOB","NCLOB","RAW"].map(n=>({label:n,insertText:n,insertTextRules:U.KeepWhitespace,kind:P.TypeParameter,sortText:P.TypeParameter.toString().padStart(2,"0"),range:void 0})),...nt(e,t,e.container.element(t),[_.Enum,_.Schema]).suggestions]}}function js(e,t){const n=e.container.element(t),s=n==null?void 0:n.parent;if(!((s==null?void 0:s.symbol)instanceof gs))return $();const{symbolTable:r}=s.symbol;return vt({suggestions:[...r.entries()].flatMap(([i])=>{const a=he(i).unwrap_or(void 0);if(a===void 0)return[];const{name:o}=a;return{label:o,insertText:o,insertTextRules:U.KeepWhitespace,kind:et(_.Column),range:void 0}})})}function tn(e,t){if(!t.callee)return-1;const n=[t.callee,...t.args],s=n.findIndex(r=>e<=r.end);return s===-1?n.length:s}class Ws{constructor(t){this.compiler=t}provideDefinition(t,n){var a,o;const{uri:s}=t,r=en(t,n),i=[...this.compiler.container.stack(r)];for(;i.length!==0;){const u=i.pop();if(!(u!=null&&u.referee))continue;let p;if((a=u.referee)!=null&&a.declaration&&[Se.PRIMARY_EXPRESSION,Se.VARIABLE,Se.PARTIAL_INJECTION].includes(u==null?void 0:u.kind)?{declaration:p}=u.referee:(o=u.referee)!=null&&o.injectorDeclaration&&(p=u.referee.injectorDeclaration),p){const{startPos:h,endPos:d}=p;return[{range:{startColumn:h.column+1,startLineNumber:h.line+1,endColumn:d.column+1,endLineNumber:d.line+1},uri:s}]}}return[]}}class Hs{constructor(t){this.compiler=t}provideReferences(t,n){const{uri:s}=t,r=en(t,n),i=[...this.compiler.container.stack(r)];for(;i.length!==0;){const a=i.pop();if(a&&[Se.ELEMENT_DECLARATION,Se.FUNCTION_APPLICATION,Se.PRIMARY_EXPRESSION].includes(a==null?void 0:a.kind)){const{symbol:o}=a;if(o!=null&&o.references.length)return o.references.map(({startPos:u,endPos:p})=>({range:{startColumn:u.column+1,startLineNumber:u.line+1,endColumn:p.column+1,endLineNumber:p.line+1},uri:s}))}}return[]}}const lc=Object.freeze(Object.defineProperty({__proto__:null,CompletionItemInsertTextRule:U,CompletionItemKind:P,DBMLCompletionItemProvider:Gs,DBMLDefinitionProvider:Ws,DBMLReferencesProvider:Hs},Symbol.toStringTag,{value:"Module"}));var D=(e=>(e[e.TABLE=0]="TABLE",e[e.ENUM=1]="ENUM",e[e.TABLEGROUP=2]="TABLEGROUP",e[e.INDEXES=3]="INDEXES",e[e.NOTE=4]="NOTE",e[e.REF=5]="REF",e[e.PROJECT=6]="PROJECT",e[e.CUSTOM=7]="CUSTOM",e[e.TOPLEVEL=8]="TOPLEVEL",e[e.TABLEPARTIAL=9]="TABLEPARTIAL",e[e.CHECKS=10]="CHECKS",e))(D||{});class cc{constructor(){this.source="",this.cache=new Array(16).fill(null),this.nodeIdGenerator=new Xo,this.symbolIdGenerator=new Yo,this.token={invalidStream:this.createQuery(6,()=>this.parse.tokens().filter(Ls)),flatStream:this.createQuery(7,()=>this.parse.tokens().flatMap(t=>[...t.leadingInvalid,t,...t.trailingInvalid]))},this.parse={source:()=>this.source,_:this.createQuery(0,()=>{const t=new ul(this.source).lex().chain(n=>new pl(n,this.nodeIdGenerator).parse()).chain(({ast:n,tokens:s})=>new zl(n,this.symbolIdGenerator).analyze().map(()=>({ast:n,tokens:s})));return t.getErrors().length>0?t:t.chain(({ast:n,tokens:s})=>new Jl(n).interpret().map(i=>({ast:n,tokens:s,rawDb:i})))}),ast:this.createQuery(1,()=>this.parse._().getValue().ast),errors:this.createQuery(2,()=>this.parse._().getErrors()),tokens:this.createQuery(4,()=>this.parse._().getValue().tokens),rawDb:this.createQuery(3,()=>this.parse._().getValue().rawDb),publicSymbolTable:this.createQuery(5,()=>this.parse._().getValue().ast.symbol.symbolTable)},this.container={stack:this.createQuery(10,t=>{const n=this.token.flatStream(),{index:s,token:r}=this.container.token(t),i=s===void 0?-1:Mo(n,p=>!p.isInvalid,s);if(i===-1)return[this.parse.ast()];const a=n[i].start;let o=this.parse.ast();const u=[o];for(;;){const h=cl(o).find(d=>Ye(a,d));if(h===void 0||h instanceof q)break;u.push(h),o=h}if((r==null?void 0:r.kind)===f.COLON)return u;for(;u.length>0;){let p=!1;const h=M(u);if(h instanceof y){const d=this.parse.source();for(let N=h.end;N<t;N+=1)d[N]===`
|
|
12
|
-
`&&(u.pop(),p=!0)}else h instanceof
|
|
9
|
+
`;case"\\":return"\\";case"r":return"\r";case"'":return"'";case'"':return'"';case"`":return"`";case"0":return"\0";case"b":return"\b";case"v":return"\v";case"f":return"\f";case" ":return"\\ ";case"u":{let n="";for(let r=0;r<=3;r+=1){if(this.isAtEnd()||!Ve(this.peek()))return this.errors.push(new c(l.INVALID_ESCAPE_SEQUENCE,`Invalid unicode escape sequence '\\u${n}', only unicode escape sequences of the form '\\uHHHH' where H is a hexadecimal number are allowed`,Q.create(f.STRING_LITERAL,t,this.current,`\\u${n}`,!0))),`\\u${n}`;n+=this.advance()}return String.fromCharCode(parseInt(n,16))}default:return this.text[this.current.offset-1]}}}var at=(e=>(e[e.ListExpression=0]="ListExpression",e[e.GroupExpression=1]="GroupExpression",e[e.BlockExpression=2]="BlockExpression",e))(at||{});class fl{constructor(){this.stack=[],this.numberOfNestedLParens=0,this.numberOfNestedLBrackets=0,this.numberOfNestedLBraces=0}push(t){this.stack.push(t),t===0&&(this.numberOfNestedLBrackets+=1),t===1&&(this.numberOfNestedLParens+=1),t===2&&(this.numberOfNestedLBraces+=1)}pop(){const t=this.stack.pop();return t===0&&(this.numberOfNestedLBrackets-=1),t===1&&(this.numberOfNestedLParens-=1),t===2&&(this.numberOfNestedLBraces-=1),t}top(){return U(this.stack)}isWithinGroupExpressionContext(){return this.numberOfNestedLParens>0}isWithinListExpressionContext(){return this.numberOfNestedLBrackets>0}isWithinBlockExpressionContext(){return this.numberOfNestedLBraces>0}withContextDo(t,n){return()=>{this.push(t);try{return n()}finally{this.pop()}}}findHandlerContext(t,n){if(!(this.numberOfNestedLBraces<=0&&this.numberOfNestedLBrackets<=0&&this.numberOfNestedLParens<=0))for(let r=n;r<t.length-1;r+=1)switch(t[r].kind){case f.COMMA:if(this.isWithinGroupExpressionContext()||this.isWithinListExpressionContext())return[...this.stack].reverse().find(i=>[1,0].includes(i));break;case f.RPAREN:if(this.isWithinGroupExpressionContext())return 1;break;case f.RBRACE:if(this.isWithinBlockExpressionContext())return 2;break;case f.RBRACKET:if(this.isWithinListExpressionContext())return 0;break}}}class pl{constructor(t){this.generator=t}create(t,n){return new t(n,this.generator.nextId())}}class T{constructor(t,n,r){this.token=t,this.partialNode=n,this.handlerContext=r}}class dl{constructor(t,n){this.current=0,this.errors=[],this.contextStack=new fl,this.synchronizeProgram=()=>{const r=this.peek();r.kind!==f.EOF?g(this.advance()):(g(this.peek()),this.logError(r,l.UNEXPECTED_EOF,"Unexpected EOF"))},this.synchronizeElementDeclarationName=()=>{for(;!this.isAtEnd();){const r=this.peek();if(Bt(r)||this.check(f.COLON,f.LBRACE,f.LBRACKET))break;g(r),this.advance()}},this.synchronizeElementDeclarationAlias=()=>{for(;!this.isAtEnd();){const r=this.peek();if(this.check(f.COLON,f.LBRACE,f.LBRACKET))break;g(r),this.advance()}},this.blockExpression=this.contextStack.withContextDo(at.BlockExpression,()=>{const r={body:[]},s=()=>this.nodeFactory.create(Ee,r);try{this.consume("Expect an opening brace '{'",f.LBRACE),r.blockOpenBrace=this.previous()}catch(i){if(!(i instanceof T))throw i;if(r.blockOpenBrace=i.partialNode,!this.canHandle(i))throw new T(i.token,s(),i.handlerContext);this.synchronizeBlock()}for(;!this.isAtEnd()&&!this.check(f.RBRACE);)try{if(this.match(f.TILDE)){const i=this.previous(),a=this.variable(),o=this.nodeFactory.create(Re,{op:i,partial:a});r.body.push(o)}else r.body.push(this.canBeField()?this.fieldDeclaration():this.expression())}catch(i){if(!(i instanceof T))throw i;if(r.body.push(i.partialNode),!this.canHandle(i))throw new T(i.token,s(),i.handlerContext);this.synchronizeBlock()}try{this.consume("Expect a closing brace '}'",f.RBRACE),r.blockCloseBrace=this.previous()}catch(i){if(!(i instanceof T))throw i;if(r.blockCloseBrace=i.partialNode,!this.canHandle(i))throw new T(i.token,s(),i.handlerContext);this.synchronizeBlock()}return s()}),this.synchronizeBlock=()=>{if(!this.check(f.RBRACE))for(g(this.advance());!this.isAtEnd();){const r=this.peek();if(this.check(f.RBRACE)||kn(this.previous(),r))break;g(r),this.advance()}},this.tupleExpression=this.contextStack.withContextDo(at.GroupExpression,()=>{const r={elementList:[],commaList:[]},s=()=>this.nodeFactory.create(Wt,{groupOpenParen:r.tupleOpenParen,groupCloseParen:r.tupleCloseParen,expression:r.elementList[0]}),i=()=>this.nodeFactory.create(be,r);try{this.consume("Expect an opening parenthesis '('",f.LPAREN),r.tupleOpenParen=this.previous()}catch(a){if(!(a instanceof T))throw a;if(r.tupleOpenParen=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeTuple()}if(!this.isAtEnd()&&!this.check(f.RPAREN))try{r.elementList.push(this.normalExpression())}catch(a){if(!(a instanceof T))throw a;if(r.elementList.push(a.partialNode),!this.canHandle(a))throw new T(a.token,s(),a.handlerContext);this.synchronizeTuple()}for(;!this.isAtEnd()&&!this.check(f.RPAREN);)try{this.consume("Expect a comma ','",f.COMMA),r.commaList.push(this.previous()),r.elementList.push(this.normalExpression())}catch(a){if(!(a instanceof T))throw a;if(a.partialNode instanceof k&&r.elementList.push(a.partialNode),!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeTuple()}try{this.consume("Expect a closing parenthesis ')'",f.RPAREN),r.tupleCloseParen=this.previous()}catch(a){if(!(a instanceof T))throw a;if(r.tupleCloseParen=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeTuple()}return r.elementList.length===1?s():i()}),this.synchronizeTuple=()=>{for(;!this.isAtEnd();){const r=this.peek();if(this.check(f.RPAREN,f.COMMA))break;g(r),this.advance()}},this.listExpression=this.contextStack.withContextDo(at.ListExpression,()=>{const r={elementList:[],commaList:[]},s=()=>this.nodeFactory.create(R,r);try{this.consume("Expect an opening bracket '['",f.LBRACKET),r.listOpenBracket=this.previous()}catch(i){if(!(i instanceof T))throw i;if(r.listOpenBracket=i.partialNode,!this.canHandle(i))throw new T(i.token,s(),i.handlerContext);this.synchronizeList()}if(!this.isAtEnd()&&!this.check(f.RBRACKET))try{r.elementList.push(this.attribute())}catch(i){if(!(i instanceof T))throw i;if(r.elementList.push(i.partialNode),!this.canHandle(i))throw new T(i.token,s(),i.handlerContext);this.synchronizeList()}for(;!this.isAtEnd()&&!this.check(f.RBRACKET);)try{this.consume("Expect a comma ','",f.COMMA),r.commaList.push(this.previous()),r.elementList.push(this.attribute())}catch(i){if(!(i instanceof T))throw i;if(i.partialNode instanceof k&&r.elementList.push(i.partialNode),!this.canHandle(i))throw new T(i.token,s(),i.handlerContext);this.synchronizeList()}try{this.consume("Expect a closing bracket ']'",f.RBRACKET),r.listCloseBracket=this.previous()}catch(i){if(!(i instanceof T))throw i;if(r.listCloseBracket=i.partialNode,!this.canHandle(i))throw new T(i.token,s(),i.handlerContext);this.synchronizeList()}return s()}),this.synchronizeList=()=>{for(;!this.isAtEnd();){const r=this.peek();if(this.check(f.COMMA,f.RBRACKET))break;g(r),this.advance()}},this.synchronizeAttributeName=()=>{for(;!this.isAtEnd();){const r=this.peek();if(this.check(f.COMMA,f.RBRACKET,f.COLON))break;g(r),this.advance()}},this.synchronizeAttributeValue=()=>{for(;!this.isAtEnd();){const r=this.peek();if(this.check(f.COMMA,f.RBRACKET))break;g(r),this.advance()}},this.tokens=t,this.nodeFactory=new pl(n)}isAtEnd(){return this.current>=this.tokens.length||this.tokens[this.current].kind===f.EOF}advance(){return this.isAtEnd()?U(this.tokens):this.tokens[this.current++]}peek(t=0){return t+this.current>=this.tokens.length?U(this.tokens):this.tokens[this.current+t]}match(...t){const n=this.check(...t);return n&&this.advance(),n}check(...t){const n=this.peek();return t.includes(n.kind)}previous(){return this.tokens[this.current-1]}canHandle(t){return t.handlerContext===void 0||t.handlerContext===this.contextStack.top()}consume(t,...n){if(!this.match(...n))throw this.logError(this.peek(),l.UNEXPECTED_TOKEN,t),new T(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}discardUntil(t,...n){if(this.isAtEnd()||!this.check(...n)){for(g(this.peek()),this.logError(this.advance(),l.UNEXPECTED_TOKEN,t);!this.isAtEnd()&&!this.check(...n);)g(this.advance());return!this.isAtEnd()}return!0}gatherInvalid(){const t=[],n=[];let r,s=0;for(;s<this.tokens.length&&this.tokens[s].isInvalid;s+=1)n.push(this.tokens[s]);for(r=this.tokens[s],r.leadingInvalid=n,t.push(r),s+=1;s<this.tokens.length;s+=1){const i=this.tokens[s];i.isInvalid?r.trailingInvalid.push(i):(r=i,t.push(r))}this.tokens=t}parse(){const t=this.program(),n=this.advance(),r=this.nodeFactory.create(J,{body:t,eof:n});return this.gatherInvalid(),new re({ast:r,tokens:this.tokens},this.errors)}program(){const t=[];for(;!this.isAtEnd();)try{const n=this.elementDeclaration();t.push(n)}catch(n){if(!(n instanceof T))throw n;t.push(n.partialNode),this.synchronizeProgram()}return t}elementDeclaration(){const t={},n=()=>this.nodeFactory.create(S,t);try{this.consume("Expect an identifier",f.IDENTIFIER),t.type=this.previous()}catch(r){throw r instanceof T?(t.type=r.partialNode,new T(r.token,n(),r.handlerContext)):r}if(!this.check(f.COLON,f.LBRACE,f.LBRACKET))try{t.name=this.normalExpression()}catch(r){if(!(r instanceof T))throw r;if(t.name=r.partialNode,!this.canHandle(r))throw new T(r.token,n(),r.handlerContext);this.synchronizeElementDeclarationName()}if(Bt(this.peek()))if(t.as=this.advance(),this.check(f.COLON,f.LBRACE,f.LBRACKET))this.logError(this.peek(),l.UNEXPECTED_TOKEN,"Expect an alias");else try{t.alias=this.normalExpression()}catch(r){if(!(r instanceof T))throw r;if(t.alias=r.partialNode,!this.canHandle(r))throw new T(r.token,n(),r.handlerContext);this.synchronizeElementDeclarationAlias()}try{t.attributeList=this.check(f.LBRACKET)?this.listExpression():void 0}catch(r){throw r instanceof T?(t.attributeList=r.partialNode,new T(r.token,n(),r.handlerContext)):r}if(!this.discardUntil("Expect an opening brace '{' or a colon ':'",f.LBRACE,f.COLON))return n();try{if(this.match(f.COLON)){t.bodyColon=this.previous();const r=this.expression();r instanceof S?(g(r),this.logError(r,l.UNEXPECTED_ELEMENT_DECLARATION,"An element's simple body must not be an element declaration")):t.body=r}else t.body=this.blockExpression()}catch(r){throw r instanceof T?(t.body=r.partialNode,new T(r.token,n(),r.handlerContext)):r}return this.nodeFactory.create(S,t)}fieldDeclaration(){const t={},n=()=>this.nodeFactory.create(S,t);try{this.consume("Expect an identifier",f.IDENTIFIER),t.type=this.previous()}catch(r){throw r instanceof T?(t.type=r.partialNode,new T(r.token,n(),r.handlerContext)):r}try{this.consume("Expect a colon ':'",f.COLON),t.bodyColon=this.previous()}catch(r){throw r instanceof T?(t.bodyColon=r.partialNode,new T(r.token,n(),r.handlerContext)):r}try{const r=this.expression();r instanceof S?this.errors.push(new c(l.INVALID_ELEMENT_IN_SIMPLE_BODY,"Simple body cannot be an element declaration",r)):t.body=r}catch(r){throw r instanceof T?(t.body=r.partialNode,new T(r.token,n(),r.handlerContext)):r}return this.nodeFactory.create(S,t)}expression(){const t={args:[]},n=()=>ol(t.callee,t.args,this.nodeFactory).unwrap_or(this.nodeFactory.create(y,t));try{t.callee=this.normalExpression()}catch(s){throw s instanceof T?(t.callee=s.partialNode,new T(s.token,n(),s.handlerContext)):s}if(this.shouldStopExpression())return n();let r=t.callee;for(;!this.shouldStopExpression();){Mt(this.previous())||this.logError(r,l.MISSING_SPACES,"Expect a following space");try{r=this.normalExpression(),t.args.push(r)}catch(s){throw s instanceof T?(r=s.partialNode,t.args.push(r),new T(s.token,n(),s.handlerContext)):s}}return n()}shouldStopExpression(){if(this.isAtEnd()||Tr(this.previous()))return!0;const t=this.peek().kind;return t===f.RBRACE||t===f.RBRACKET||t===f.RPAREN||t===f.COMMA||t===f.COLON}normalExpression(){return this.expression_bp(0)}expression_bp(t){let n=this.leftExpression_bp();for(;!this.isAtEnd();){const r=this.peek();if(r.kind===f.LPAREN){const{left:s}=Mn(r);if(s<t||kn(this.previous(),r)&&!this.contextStack.isWithinGroupExpressionContext()&&!this.contextStack.isWithinListExpressionContext())break;try{n=this.nodeFactory.create(ae,{callee:n,argumentList:this.tupleExpression()})}catch(i){throw i instanceof T?(n=this.nodeFactory.create(ae,{callee:n,argumentList:i.partialNode}),new T(i.token,n,i.handlerContext)):i}}else if(r.kind===f.LBRACKET){if(Mt(this.previous()))break;try{n=this.nodeFactory.create(Ue,{expression:n,indexer:this.listExpression()})}catch(s){throw s instanceof T?(n=this.nodeFactory.create(Ue,{expression:n,indexer:s.partialNode}),new T(s.token,n,s.handlerContext)):s}}else if(Dn(r)){const s=r,i=Mn(s);if(i.left!==null){if(i.left<=t)break;this.advance(),n=this.nodeFactory.create(It,{expression:n,op:s})}else{const a=Nl(s);if(a.left===null||a.left<=t)break;this.advance();try{n=this.nodeFactory.create(Te,{leftExpression:n,op:s,rightExpression:s.value==="."?this.extractOperand():this.expression_bp(a.right)})}catch(o){throw o instanceof T?(n=this.nodeFactory.create(Te,{leftExpression:n,op:s,rightExpression:o.partialNode}),new T(o.token,n,o.handlerContext)):o}}}else break}return n}leftExpression_bp(){let t;if(Dn(this.peek())){const n={};n.op=this.peek();const r=bl(n.op);if(r.right===null)throw this.logError(n.op,l.UNKNOWN_PREFIX_OP,`Unexpected '${n.op.value}' in an expression`),new T(n.op,this.nodeFactory.create(st,{pre:n.op}),this.contextStack.findHandlerContext(this.tokens,this.current));this.advance();try{n.expression=this.expression_bp(r.right)}catch(s){throw s instanceof T?(n.expression=s.partialNode,new T(s.token,this.nodeFactory.create(se,n),s.handlerContext)):s}t=this.nodeFactory.create(se,n)}else if(t=this.extractOperand(),t instanceof st)throw new T(this.peek(),this.nodeFactory.create(st,{pre:this.peek()}),this.contextStack.findHandlerContext(this.tokens,this.current));return t}extractOperand(){return this.check(f.NUMERIC_LITERAL,f.STRING_LITERAL,f.COLOR_LITERAL,f.QUOTED_STRING,f.IDENTIFIER)?this.primaryExpression():this.check(f.FUNCTION_EXPRESSION)?this.functionExpression():this.check(f.LBRACKET)?this.listExpression():this.check(f.LBRACE)?this.blockExpression():this.check(f.LPAREN)?this.tupleExpression():(this.peek().kind===f.EOF?this.logError(this.peek(),l.UNEXPECTED_EOF,"Unexpected EOF"):this.logError(this.peek(),l.INVALID_OPERAND,`Invalid start of operand "${this.peek().value}"`),this.nodeFactory.create(st,{pre:this.previous()}))}functionExpression(){const t={};try{this.consume("Expect a function expression",f.FUNCTION_EXPRESSION),t.value=this.previous()}catch(n){throw n instanceof T?(t.value=n.partialNode,new T(n.token,this.nodeFactory.create(ie,t),n.handlerContext)):n}return this.nodeFactory.create(ie,t)}variable(){this.consume("Expect a variable",f.IDENTIFIER);const t=this.previous();return this.nodeFactory.create(de,{variable:t})}canBeField(){return this.peek().kind===f.IDENTIFIER&&this.peek(1).kind===f.COLON}primaryExpression(){if(this.match(f.COLOR_LITERAL,f.STRING_LITERAL,f.NUMERIC_LITERAL))return this.nodeFactory.create(q,{expression:this.nodeFactory.create(je,{literal:this.previous()})});if(this.match(f.QUOTED_STRING,f.IDENTIFIER))return this.nodeFactory.create(q,{expression:this.nodeFactory.create(de,{variable:this.previous()})});throw this.logError(this.peek(),l.UNEXPECTED_TOKEN,"Expect a variable or literal"),new T(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}attribute(){const t={};if(this.check(f.COLON,f.RBRACKET,f.COMMA)){const n=this.peek();this.logError(n,l.EMPTY_ATTRIBUTE_NAME,"Expect a non-empty attribute name"),t.name=this.nodeFactory.create(ce,{identifiers:[]})}else try{t.name=this.attributeName()}catch(n){if(!(n instanceof T))throw n;if(t.name=n.partialNode,!this.canHandle(n))throw new T(n.token,this.nodeFactory.create(ue,t),n.handlerContext);this.synchronizeAttributeName()}return this.match(f.COLON)&&(t.colon=this.previous(),t.value=this.attributeValue()),this.nodeFactory.create(ue,t)}attributeValue(){let t;try{t=this.peek().kind===f.IDENTIFIER&&this.peek(1).kind===f.IDENTIFIER?this.attributeName():this.normalExpression()}catch(n){if(!(n instanceof T)||!this.canHandle(n))throw n;t=n.partialNode,this.synchronizeAttributeValue()}return t}attributeName(){const t=[];if(this.peek().kind!==f.IDENTIFIER)return this.primaryExpression();for(;!this.isAtEnd()&&!this.check(f.COLON,f.COMMA,f.RBRACKET);)try{this.consume("Expect an identifier",f.IDENTIFIER),t.push(this.previous())}catch(n){throw n instanceof T?new T(n.token,this.nodeFactory.create(ce,{identifiers:t}),n.handlerContext):n}return this.nodeFactory.create(ce,{identifiers:t})}logError(t,n,r){this.errors.push(new c(n,r,t))}}const El={"+":{left:9,right:10},"*":{left:11,right:12},"-":{left:9,right:10},"/":{left:11,right:12},"%":{left:11,right:12},"<":{left:7,right:8},"<=":{left:7,right:8},">":{left:7,right:8},">=":{left:7,right:8},"<>":{left:7,right:8},"=":{left:2,right:3},"==":{left:4,right:5},"!=":{left:4,right:5},".":{left:16,right:17}};function Nl(e){return El[e.value]||{left:null,right:null}}const Tl={"+":{left:null,right:15},"-":{left:null,right:15},"<":{left:null,right:15},">":{left:null,right:15},"<>":{left:null,right:15},"!":{left:null,right:15}};function bl(e){return Tl[e.value]||{left:null,right:null}}const ml={"(":{left:14,right:null}};function Mn(e){return ml[e.value]||{left:null,right:null}}var I=(e=>(e.Table="table",e.Enum="enum",e.Ref="ref",e.Note="note",e.Project="project",e.Indexes="indexes",e.TableGroup="tablegroup",e.TablePartial="tablepartial",e.Check="checks",e))(I||{}),E=(e=>(e.Color="color",e.HeaderColor="headercolor",e.Note="note",e.PK="pk",e.PrimaryKey="primary key",e.Unique="unique",e.Ref="ref",e.NotNull="not null",e.Null="null",e.Increment="increment",e.Default="default",e.Name="name",e.Type="type",e.Check="check",e.Update="update",e.Delete="delete",e))(E||{});function xe(e){var n;const t=(n=e==null?void 0:e.type)==null?void 0:n.value.toLowerCase();switch(t){case I.Enum:case I.Table:case I.Indexes:case I.Note:case I.Project:case I.Ref:case I.TableGroup:case I.TablePartial:case I.Check:return new B(t);default:return new O}}function ve(e){if(!e)return new O;if(!At(e))return new B([e]);const t=ve(e.leftExpression).unwrap_or(void 0);return t?(t.push(e.rightExpression),new B(t)):new O}function Z(e){if(e===void 0)return new O;const t=ve(e).unwrap_or(void 0);if(!t)return new O;const n=[];for(const r of t){const s=Y(r).unwrap_or(void 0);if(!s)return new O;n.push(s)}return new B(n)}function et(e){if(e===void 0)return new O;const t=ve(e).unwrap_or(void 0);if(!t||t.length===0)return new O;const n=[];let r;if(!V(U(t))){const s=t.pop();if(Or(s))r=s.elementList.map(i=>W(i).unwrap());else return new O}for(const s of t){const i=Y(s).unwrap_or(void 0);if(!i)return new O;n.push(i)}return new B({variables:n,tupleElements:r})}function Y(e){return V(e)?new B(e.expression.variable.value):new O}function ut(e){if(Fn(e))return e instanceof ie?new B({functional:[e],nonFunctional:[]}):new B({functional:[],nonFunctional:[e]});if(e instanceof be&&e.elementList.every(Fn)){const t=e.elementList.filter(r=>r instanceof ie),n=e.elementList.filter(V);return new B({functional:t,nonFunctional:n})}return new O}function W(e){var n;const t=(n=e==null?void 0:e.expression.variable)==null?void 0:n.value;return t===void 0?new O:new B(t)}function Il(e){var n,r;const t=(r=(n=e==null?void 0:e.partial)==null?void 0:n.variable)==null?void 0:r.value;return t===void 0?new O:new B(t)}function C(e){return H(e)?e.expression instanceof de?new B(e.expression.variable.value):new B(e.expression.literal.value):new O}function _l(e){var t;return!(e instanceof Te)||!wr((t=e.op)==null?void 0:t.value)?!1:et(e.leftExpression).and_then(()=>et(e.rightExpression)).unwrap_or(void 0)!==void 0}function gl(e){const t=et(e.leftExpression),n=et(e.rightExpression);if(!t.isOk()||!n.isOk())return!1;const{tupleElements:r}=t.unwrap(),{tupleElements:s}=n.unwrap();return(r==null?void 0:r.length)===(s==null?void 0:s.length)}function Fn(e){return e instanceof q&&e.expression instanceof de||e instanceof ie}function Bn(e,t){var s,i,a,o;let n=t;const r=Ko(e);for(;n;){if((i=(s=n.symbol)==null?void 0:s.symbolTable)!=null&&i.has(e))return(a=n.symbol.symbolTable)==null?void 0:a.get(e);if(((o=n.symbol)==null?void 0:o.declaration)instanceof J&&r)return n.symbol;if(n instanceof J)return;n=n.parent}}class Al{constructor(t,n,r){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=r}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof J||xe(this.declarationNode.parent).unwrap_or(void 0)!==I.Project?[new c(l.INVALID_CUSTOM_CONTEXT,"A Custom element can only appear in a Project",this.declarationNode)]:[]}validateName(t){return t?[new c(l.UNEXPECTED_NAME,"A Custom element shouldn't have a name",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_NAME,"A Custom element shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Custom element shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof Ee)return[new c(l.UNEXPECTED_COMPLEX_BODY,"A Custom element can only have an inline field",t)];const n=[];return H(t.callee)||n.push(new c(l.INVALID_CUSTOM_ELEMENT_VALUE,"A Custom element value can only be a string",t)),t.args.length>0&&n.push(...t.args.map(r=>new c(l.INVALID_CUSTOM_ELEMENT_VALUE,"A Custom element value can only be a string",r))),n}}class We{constructor(){this.table=new Map}has(t){return this.table.has(t)}set(t,n){this.table.set(t,n)}get(t,n){return this.table.get(t)||n!==void 0&&this.set(t,n)||n}entries(){return this.table.entries()}forEach(t){return this.table.forEach(t)}}class Ll{constructor(t,n,r){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=r}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.registerElement(),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_PROJECT_CONTEXT,"An Enum can only appear top-level",this.declarationNode)]:[]}validateName(t){return t?yr(t)?[]:[new c(l.INVALID_NAME,"An Enum name must be of the form <enum> or <schema>.<enum>",t)]:[new c(l.NAME_NOT_FOUND,"An Enum must have a name",this.declarationNode)]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"An Enum shouldn't have an alias",t)]:[]}registerElement(){const t=[];this.declarationNode.symbol=this.symbolFactory.create(Qo,{declaration:this.declarationNode,symbolTable:new We});const{name:n}=this.declarationNode,r=Z(n);if(r.isOk()){const s=r.unwrap(),i=s.pop(),a=Lt(s,this.publicSymbolTable,this.symbolFactory),o=Kt(i);a.has(o)&&t.push(new c(l.DUPLICATE_NAME,`Enum name ${i} already exists in schema '${s.join(".")||"public"}'`,n)),a.set(o,this.declarationNode.symbol)}return t}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"An Enum shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return this.validateFields([t]);const[n,r]=oe(t.body,s=>s instanceof y);return[...this.validateFields(n),...this.validateSubElements(r)]}validateFields(t){return t.length===0?[new c(l.EMPTY_ENUM,"An Enum must have at least one element",this.declarationNode)]:t.flatMap(n=>{const r=[];n.callee&&!V(n.callee)&&r.push(new c(l.INVALID_ENUM_ELEMENT_NAME,"An enum field must be an identifier or a quoted identifier",n.callee));const s=[...n.args];return U(s)instanceof R?(r.push(...this.validateFieldSettings(U(s))),s.pop()):s[0]instanceof R&&(r.push(...this.validateFieldSettings(s[0])),s.shift()),s.length>0&&r.push(...s.map(i=>new c(l.INVALID_ENUM_ELEMENT,"An Enum must have only a field and optionally a setting list",i))),r.push(...this.registerField(n)),r})}validateFieldSettings(t){const n=F(t),r=n.getErrors(),s=n.getValue();for(const i in s){const a=s[i];switch(i){case"note":a.length>1&&a.forEach(o=>r.push(new c(l.DUPLICATE_ENUM_ELEMENT_SETTING,"'note' can only appear once",o))),a.forEach(o=>{H(o.value)||r.push(new c(l.INVALID_ENUM_ELEMENT_SETTING,"'note' must be a string",o))});break;default:a.forEach(o=>r.push(new c(l.UNKNOWN_ENUM_ELEMENT_SETTING,`Unknown enum field setting '${i}'`,o)))}}return r}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const r=me(n);return new r(n,this.publicSymbolTable,this.symbolFactory).validate()})}registerField(t){if(t.callee&&V(t.callee)){const n=W(t.callee).unwrap(),r=zt(n),s=this.symbolFactory.create(Jo,{declaration:t});t.symbol=s;const i=this.declarationNode.symbol.symbolTable;if(i.has(r)){const a=i.get(r);return[new c(l.DUPLICATE_COLUMN_NAME,`Duplicate enum field ${n}`,t),new c(l.DUPLICATE_COLUMN_NAME,`Duplicate enum field ${n}`,a.declaration)]}i.set(r,s)}return[]}}class vl{constructor(t,n,r){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=r}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){const t=new c(l.INVALID_INDEXES_CONTEXT,"An Indexes can only appear inside a Table or a TablePartial",this.declarationNode);if(this.declarationNode.parent instanceof J)return[t];const n=xe(this.declarationNode.parent).unwrap_or(void 0);return n&&[I.Table,I.TablePartial].includes(n)?[]:[t]}validateName(t){return t?[new c(l.UNEXPECTED_NAME,"An Indexes shouldn't have a name",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"An Indexes shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"An Indexes shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"An Indexes must have a complex body",t)];const[n,r]=oe(t.body,s=>s instanceof y);return[...this.validateFields(n),...this.validateSubElements(r)]}validateFields(t){return t.flatMap(n=>{if(!n.callee)return[];const r=[],s=[n.callee,...n.args];return U(s)instanceof R&&r.push(...this.validateFieldSetting(s.pop())),s.forEach(i=>{for(;i instanceof ae;)i.argumentList&&!ut(i.argumentList).isOk()&&r.push(new c(l.INVALID_INDEXES_FIELD,"An index field must be an identifier, a quoted identifier, a functional expression or a tuple of such",i.argumentList)),i=i.callee;ut(i).isOk()||r.push(new c(l.INVALID_INDEXES_FIELD,"An index field must be an identifier, a quoted identifier, a functional expression or a tuple of such",i))}),r})}validateFieldSetting(t){const n=F(t),r=n.getErrors(),s=n.getValue();for(const i in s){const a=s[i];switch(i){case"note":case"name":a.length>1&&a.forEach(o=>r.push(new c(l.DUPLICATE_INDEX_SETTING,`'${i}' can only appear once`,o))),a.forEach(o=>{H(o.value)||r.push(new c(l.INVALID_INDEX_SETTING_VALUE,`'${i}' must be a string`,o))});break;case"unique":case"pk":a.length>1&&a.forEach(o=>r.push(new c(l.DUPLICATE_INDEX_SETTING,`'${i}' can only appear once`,o))),a.forEach(o=>{ne(o.value)||r.push(new c(l.INVALID_INDEX_SETTING_VALUE,`'${i}' must not have a value`,o))});break;case"type":a.length>1&&a.forEach(o=>r.push(new c(l.DUPLICATE_INDEX_SETTING,"'type' can only appear once",o))),a.forEach(o=>{V(o.value)||r.push(new c(l.INVALID_INDEX_SETTING_VALUE,`'type' must be "btree" or "hash"`,o))});break;default:a.forEach(o=>r.push(new c(l.UNKNOWN_INDEX_SETTING,`Unknown index setting '${i}'`,o)))}}return r}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const r=me(n);return new r(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class yl{constructor(t,n,r){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=r}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){return!(this.declarationNode.parent instanceof J)&&![I.Table,I.TableGroup,I.TablePartial,I.Project].includes(xe(this.declarationNode.parent).unwrap_or(void 0))?[new c(l.INVALID_NOTE_CONTEXT,"A Note can only appear inside a Table, a TableGroup, a TablePartial or a Project. Sticky note can only appear at the global scope.",this.declarationNode)]:[]}validateName(t){if(!(this.declarationNode.parent instanceof J))return t?[new c(l.UNEXPECTED_NAME,"A Note shouldn't have a name",t)]:[];if(!t)return[new c(l.INVALID_NAME,"Sticky note must have a name",this.declarationNode)];const n=Z(t);if(!n.isOk())return[new c(l.INVALID_NAME,"Invalid name for sticky note ",this.declarationNode)];const s=n.unwrap().join("."),i=Ho(s);return this.publicSymbolTable.has(i)?[new c(l.DUPLICATE_NAME,`Sticky note "${s}" has already been defined`,t)]:(this.publicSymbolTable.set(i,this.declarationNode.symbol),[])}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Note shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return this.validateFields([t]);const[n,r]=oe(t.body,s=>s instanceof y);return[...this.validateFields(n),...this.validateSubElements(r)]}validateFields(t){const n=[];return t.length===0?[new c(l.EMPTY_NOTE,"A Note must have a content",this.declarationNode)]:(t.length>1&&t.slice(1).forEach(r=>n.push(new c(l.NOTE_CONTENT_REDEFINED,"A Note can only contain one string",r))),H(t[0].callee)||n.push(new c(l.INVALID_NOTE,"A Note content must be a quoted string",t[0])),t[0].args.length>0&&n.push(...t[0].args.map(r=>new c(l.INVALID_NOTE,"A Note can only contain one quoted string",r))),n)}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const r=me(n);return new r(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class wl{constructor(t,n,r){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=r}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_PROJECT_CONTEXT,"A Project can only appear top-level",this.declarationNode)]:[]}validateName(t){return t?He(t)?[]:[new c(l.INVALID_NAME,"A Project's name is optional or must be an identifier or a quoted identifer",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Project shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Project shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A Project's body must be a block",t)];const[n,r]=oe(t.body,s=>s instanceof y);return[...n.map(s=>new c(l.INVALID_PROJECT_FIELD,"A Project can not have inline fields",s)),...this.validateSubElements(r)]}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const r=me(n);return new r(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class Sl{constructor(t,n,r){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=r}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof J?[]:[new c(l.INVALID_REF_CONTEXT,"A Ref must appear top-level",this.declarationNode)]}validateName(t){return t?He(t)?[]:[new c(l.INVALID_NAME,"A Ref's name is optional or must be an identifier or a quoted identifer",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Ref shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return this.validateFields([t]);const[n,r]=oe(t.body,s=>s instanceof y);return[...this.validateFields(n),...this.validateSubElements(r)]}validateFields(t){if(t.length===0)return[new c(l.EMPTY_REF,"A Ref must have at least one field",this.declarationNode)];const n=[];return t.length>1&&n.push(...t.slice(1).map(r=>new c(l.REF_REDEFINED,"A Ref can only contain one binary relationship",r))),t.forEach(r=>{r.callee&&!_l(r.callee)&&n.push(new c(l.INVALID_REF_FIELD,"A Ref field must be a binary relationship",r.callee)),r.callee&&!gl(r.callee)&&n.push(new c(l.UNEQUAL_FIELDS_BINARY_REF,"Unequal fields in ref endpoints",r.callee));const s=[...r.args];if(U(s)instanceof R){const i=this.validateFieldSettings(U(s));n.push(...i),s.pop()}else s[0]instanceof R&&(n.push(...this.validateFieldSettings(s[0])),s.shift());s.length>0&&n.push(...s.map(i=>new c(l.INVALID_REF_FIELD,"A Ref field should only have a single binary relationship",i)))}),n}validateFieldSettings(t){const n=F(t),r=n.getErrors(),s=n.getValue();for(const i in s){const a=s[i];switch(i){case"delete":case"update":a.length>1&&a.forEach(o=>r.push(new c(l.DUPLICATE_REF_SETTING,`'${i}' can only appear once`,o))),a.forEach(o=>{Pl(o.value)||r.push(new c(l.INVALID_REF_SETTING_VALUE,`'${i}' can only have values "cascade", "no action", "set null", "set default" or "restrict"`,o))});break;case"color":a.length>1&&r.push(...a.map(o=>new c(l.DUPLICATE_REF_SETTING,"'color' can only appear once",o))),a.forEach(o=>{vt(o.value)||r.push(new c(l.INVALID_REF_SETTING_VALUE,"'color' must be a color literal",o))});break;default:a.forEach(o=>r.push(new c(l.UNKNOWN_REF_SETTING,`Unknown ref setting '${i}'`,o)))}}return r}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const r=me(n);return new r(n,this.publicSymbolTable,this.symbolFactory).validate()})}}function Pl(e){if(!(V(e)&&e.expression.variable.kind!==f.QUOTED_STRING)&&!(e instanceof ce))return!1;let t;if(e instanceof ce?t=$e(e).unwrap_or(""):t=e.expression.variable.value,t)switch(t.toLowerCase()){case"cascade":case"no action":case"set null":case"set default":case"restrict":return!0;default:return!1}return!1}class Ol{constructor(t,n,r){this.declarationNode=t,this.symbolFactory=r,this.publicSymbolTable=n}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.registerElement(),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_TABLE_CONTEXT,"Table must appear top-level",this.declarationNode)]:[]}validateName(t){return t?t instanceof Ue?[new c(l.INVALID_NAME,"Invalid array as Table name, maybe you forget to add a space between the name and the setting list?",t)]:yr(t)?[]:[new c(l.INVALID_NAME,"A Table name must be of the form <table> or <schema>.<table>",t)]:[new c(l.NAME_NOT_FOUND,"A Table must have a name",this.declarationNode)]}validateAlias(t){return t?Ml(t)?[]:[new c(l.INVALID_ALIAS,"Table aliases can only contains alphanumeric and underscore unless surrounded by double quotes",t)]:[]}validateSettingList(t){const n=F(t),r=n.getErrors(),s=n.getValue();return Ze(s,(i,a)=>{switch(a){case E.HeaderColor:i.length>1&&r.push(...i.map(o=>new c(l.DUPLICATE_TABLE_SETTING,"'headercolor' can only appear once",o))),i.forEach(o=>{vt(o.value)||r.push(new c(l.INVALID_TABLE_SETTING_VALUE,"'headercolor' must be a color literal",o.value||o.name))});break;case E.Note:i.length>1&&r.push(...i.map(o=>new c(l.DUPLICATE_TABLE_SETTING,"'note' can only appear once",o))),i.forEach(o=>{H(o.value)||r.push(new c(l.INVALID_TABLE_SETTING_VALUE,"'note' must be a string literal",o.value||o.name))});break;default:r.push(...i.map(o=>new c(l.UNKNOWN_TABLE_SETTING,`Unknown '${a}' setting`,o)))}}),r}registerElement(){const t=[];this.declarationNode.symbol=this.symbolFactory.create(Ar,{declaration:this.declarationNode,symbolTable:new We});const{name:n,alias:r}=this.declarationNode,s=Z(n);if(s.isOk()){const i=[...s.unwrap()],a=i.pop(),o=Lt(i,this.publicSymbolTable,this.symbolFactory),u=lt(a);o.has(u)&&t.push(new c(l.DUPLICATE_NAME,`Table name '${a}' already exists in schema '${i.join(".")||"public"}'`,n)),o.set(u,this.declarationNode.symbol)}if(r&&He(r)&&!xl(r.expression.variable.value,s.unwrap_or([]))){const i=W(r).unwrap(),a=lt(i);this.publicSymbolTable.has(a)&&t.push(new c(l.DUPLICATE_NAME,`Table name '${i}' already exists`,n)),this.publicSymbolTable.set(a,this.declarationNode.symbol)}return t}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A Table's body must be a block",t)];const[n,r,s]=t.body.reduce((i,a)=>(a instanceof y?i[0].push(a):a instanceof Re?i[1].push(a):a instanceof S&&i[2].push(a),i),[[],[],[]]);return[...this.validateFields(n),...this.validateInjections(r),...this.validateSubElements(s)]}validateInjections(t){return t.flatMap(n=>this.registerInjection(n))}registerInjection(t){var o,u,p;if(!((u=(o=t.partial)==null?void 0:o.variable)!=null&&u.value))return[];const n=(p=t.partial.variable)==null?void 0:p.value,r=_r(n),s=this.symbolFactory.create(nl,{declaration:t});t.symbol=s;const i=this.declarationNode.symbol.symbolTable,a=i.get(r);return a?[new c(l.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${n}`,t),new c(l.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${n}`,a.declaration)]:(i.set(r,s),[])}validateFields(t){return t.flatMap(n=>{if(!n.callee)return[];const r=[];n.args.length===0&&r.push(new c(l.INVALID_COLUMN,"A column must have a type",n.callee)),V(n.callee)||r.push(new c(l.INVALID_COLUMN_NAME,"A column name must be an identifier or a quoted identifier",n.callee)),n.args[0]&&!xr(n.args[0])&&r.push(new c(l.INVALID_COLUMN_TYPE,"Invalid column type",n.args[0]));const s=n.args.slice(1);return r.push(...this.validateFieldSetting(s)),r.push(...this.registerField(n)),r})}registerField(t){if(t.callee&&V(t.callee)){const n=W(t.callee).unwrap(),r=_t(n),s=this.symbolFactory.create(Jt,{declaration:t});t.symbol=s;const i=this.declarationNode.symbol.symbolTable;if(i.has(r)){const a=i.get(r);return[new c(l.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,t),new c(l.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,a.declaration)]}i.set(r,s)}return[]}validateFieldSetting(t){if(!t.slice(0,-1).every(Oe)||!t.slice(-1).every(u=>Oe(u)||u instanceof R))return[...t.map(u=>new c(l.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",u))];if(t.length===0)return[];let n;U(t)instanceof R&&(n=t.pop());const r=F(n),s=r.getErrors(),i=r.getValue();t.forEach(u=>{const p=W(u).unwrap_or("").toLowerCase();if(p!=="pk"&&p!=="unique"){s.push(new c(l.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",u));return}i[p]===void 0?i[p]=[u]:i[p].push(u)});const a=i[E.PK]||[],o=i[E.PrimaryKey]||[];return a.length>=1&&o.length>=1&&s.push(...[...a,...o].map(u=>new c(l.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",u))),Ze(i,(u,p)=>{switch(p){case E.Note:u.length>1&&s.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"note can only appear once",h))),u.forEach(h=>{H(h.value)||s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'note' must be a quoted string",h.value||h.name))});break;case E.Ref:u.forEach(h=>{Pr(h.value)||s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'ref' must be a valid unary relationship",h.value||h.name))});break;case E.PrimaryKey:u.length>1&&s.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"primary key can only appear once",h))),u.forEach(h=>{ne(h.value)||s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'primary key' must not have a value",h.value||h.name))});break;case E.PK:u.length>1&&s.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'pk' can only appear once",h))),u.forEach(h=>{h instanceof ue&&!ne(h.value)&&s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'pk' must not have a value",h.value||h.name))});break;case E.NotNull:{u.length>1&&s.push(...u.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,"'not null' can only appear once",d)));const h=i[E.Null]||[];u.length>=1&&h.length>=1&&s.push(...[...u,...h].map(d=>new c(l.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",d))),u.forEach(d=>{ne(d.value)||s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'not null' must not have a value",d.value||d.name))});break}case E.Null:u.length>1&&s.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'null' can only appear once",h))),u.forEach(h=>{ne(h.value)||s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'null' must not have a value",h.value||h.name))});break;case E.Unique:u.length>1&&s.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'unique' can only appear once",h))),u.forEach(h=>{h instanceof ue&&!ne(h.value)&&s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'unique' must not have a value",h.value||h.name))});break;case E.Increment:u.length>1&&s.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'increment' can only appear once",h))),u.forEach(h=>{h instanceof ue&&!ne(h.value)&&s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'increment' must not have a value",h.value||h.name))});break;case E.Default:u.length>1&&s.push(...u.map(h=>new c(l.DUPLICATE_COLUMN_SETTING,"'default' can only appear once",h))),u.forEach(h=>{Sr(h.value)||s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'default' must be an enum value, a string literal, number literal, function expression, true, false or null",h.value||h.name))});break;case E.Check:u.forEach(h=>{h.value instanceof ie||s.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'check' must be a function expression",h.value||h.name))});break;default:u.forEach(h=>s.push(new c(l.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${p}'`,h)))}}),s}validateSubElements(t){const n=t.flatMap(s=>{if(s.parent=this.declarationNode,!s.type)return[];const i=me(s);return new i(s,this.publicSymbolTable,this.symbolFactory).validate()}),r=t.filter(s=>{var i;return((i=s.type)==null?void 0:i.value.toLowerCase())==="note"});return r.length>1&&n.push(...r.map(s=>new c(l.NOTE_REDEFINED,"Duplicate notes are defined",s))),n}}function xl(e,t){return t.length===1&&e===t[0]}class Dl{constructor(t,n,r){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=r}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.registerElement(),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_TABLEGROUP_CONTEXT,"TableGroup must appear top-level",this.declarationNode)]:[]}validateName(t){return t?He(t)?[]:[new c(l.INVALID_NAME,"A TableGroup name must be a single identifier",t)]:[new c(l.NAME_NOT_FOUND,"A TableGroup must have a name",this.declarationNode)]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A TableGroup shouldn't have an alias",t)]:[]}registerElement(){const{name:t}=this.declarationNode;this.declarationNode.symbol=this.symbolFactory.create(Zo,{declaration:this.declarationNode,symbolTable:new We});const n=Z(t);if(n.isOk()){const r=n.unwrap(),s=r.pop(),i=Lt(r,this.publicSymbolTable,this.symbolFactory),a=Yt(s);if(i.has(a))return[new c(l.DUPLICATE_NAME,`TableGroup name '${s}' already exists`,t)];i.set(a,this.declarationNode.symbol)}return[]}validateSettingList(t){const n=F(t),r=n.getErrors(),s=n.getValue();return Ze(s,(i,a)=>{switch(a){case"color":i.length>1&&r.push(...i.map(o=>new c(l.DUPLICATE_TABLE_SETTING,"'color' can only appear once",o))),i.forEach(o=>{vt(o.value)||r.push(new c(l.INVALID_TABLE_SETTING_VALUE,"'color' must be a color literal",o.value||o.name))});break;case"note":i.length>1&&r.push(...i.map(o=>new c(l.DUPLICATE_TABLE_SETTING,"'note' can only appear once",o))),i.filter(o=>!H(o.value)).forEach(o=>{r.push(new c(l.INVALID_TABLE_SETTING_VALUE,"'note' must be a string literal",o.value||o.name))});break;default:r.push(...i.map(o=>new c(l.UNKNOWN_TABLE_SETTING,`Unknown '${a}' setting`,o)));break}}),r}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A TableGroup's body must be a block",t)];const[n,r]=oe(t.body,s=>s instanceof y);return[...this.validateFields(n),...this.validateSubElements(r)]}validateFields(t){return t.flatMap(n=>{const r=[];return n.callee&&!Z(n.callee).isOk()&&r.push(new c(l.INVALID_TABLEGROUP_FIELD,"A TableGroup field must be of the form <table> or <schema>.<table>",n.callee)),this.registerField(n),n.args.length>0&&r.push(...n.args.map(s=>new c(l.INVALID_TABLEGROUP_FIELD,"A TableGroup field should only have a single Table name",s))),r})}validateSubElements(t){const n=t.flatMap(s=>{if(s.parent=this.declarationNode,!s.type)return[];const i=me(s);return new i(s,this.publicSymbolTable,this.symbolFactory).validate()}),r=t.filter(s=>{var i;return((i=s.type)==null?void 0:i.value.toLowerCase())==="note"});return r.length>1&&n.push(...r.map(s=>new c(l.NOTE_REDEFINED,"Duplicate notes are defined",s))),n}registerField(t){if(t.callee&&V(t.callee)){const n=W(t.callee).unwrap(),r=qt(n),s=this.symbolFactory.create(el,{declaration:t});t.symbol=s;const i=this.declarationNode.symbol.symbolTable;if(i.has(r)){const a=i.get(r);return[new c(l.DUPLICATE_TABLEGROUP_FIELD_NAME,`${n} already exists in the group`,t),new c(l.DUPLICATE_TABLEGROUP_FIELD_NAME,`${n} already exists in the group`,a.declaration)]}i.set(r,s)}return[]}}const kl=["-","+"];class Rl{constructor(t,n,r){this.declarationNode=t,this.symbolFactory=r,this.publicSymbolTable=n}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.registerElement(),...this.validateBody(this.declarationNode.body)]}validateContext(){return this.declarationNode.parent instanceof S?[new c(l.INVALID_TABLE_PARTIAL_CONTEXT,"TablePartial must appear top-level",this.declarationNode)]:[]}validateName(t){return t?He(t)?[]:[new c(l.INVALID_NAME,"A TablePartial name must be an identifier or a quoted identifer",t)]:[new c(l.NAME_NOT_FOUND,"A TablePartial must have a name",this.declarationNode)]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A TablePartial shouldn't have an alias",t)]:[]}validateSettingList(t){const n=F(t),r=n.getErrors(),s=n.getValue();return Ze(s,(i,a)=>{switch(a){case E.HeaderColor:i.length>1&&r.push(...i.map(o=>new c(l.DUPLICATE_TABLE_PARTIAL_SETTING,`'${a}' can only appear once`,o))),i.forEach(o=>{vt(o.value)||r.push(new c(l.INVALID_TABLE_PARTIAL_SETTING_VALUE,`'${a}' must be a color literal`,o.value||o.name))});break;case E.Note:i.length>1&&r.push(...i.map(o=>new c(l.DUPLICATE_TABLE_PARTIAL_SETTING,`'${a}' can only appear once`,o))),i.forEach(o=>{H(o.value)||r.push(new c(l.INVALID_TABLE_PARTIAL_SETTING_VALUE,`'${a}' must be a string literal`,o.value||o.name))});break;default:r.push(...i.map(o=>new c(l.UNKNOWN_TABLE_PARTIAL_SETTING,`Unknown '${a}' setting`,o)))}}),r}registerElement(){const{name:t}=this.declarationNode;this.declarationNode.symbol=this.symbolFactory.create(tl,{declaration:this.declarationNode,symbolTable:new We});const n=Z(t);if(!n.isOk())return[];const r=n.unwrap(),s=r.pop(),i=Lt(r,this.publicSymbolTable,this.symbolFactory),a=Qt(s);return i.has(a)?[new c(l.DUPLICATE_NAME,`TablePartial name '${s}' already exists`,t)]:(i.set(a,this.declarationNode.symbol),[])}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A TablePartial's body must be a block",t)];const[n,r]=oe(t.body,s=>s instanceof y);return[...this.validateFields(n),...this.validateSubElements(r)]}validateFields(t){return t.flatMap(n=>{if(!n.callee)return[];const r=[];n.args.length===0&&r.push(new c(l.INVALID_COLUMN,"A column must have a type",n.callee)),V(n.callee)||r.push(new c(l.INVALID_COLUMN_NAME,"A column name must be an identifier or a quoted identifier",n.callee)),n.args[0]&&!xr(n.args[0])&&r.push(new c(l.INVALID_COLUMN_TYPE,"Invalid column type",n.args[0]));const s=n.args.slice(1);return r.push(...this.validateFieldSetting(s),...this.registerField(n)),r})}registerField(t){if(!t.callee||!V(t.callee))return[];const n=W(t.callee).unwrap(),r=_t(n),s=this.symbolFactory.create(Jt,{declaration:t});t.symbol=s;const i=this.declarationNode.symbol.symbolTable;if(i.has(r)){const a=i.get(r);return[new c(l.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,t),new c(l.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,a.declaration)]}return i.set(r,s),[]}validateFieldSetting(t){const n=U(t);if(!t.slice(0,-1).every(Oe)||!(Oe(n)||n instanceof R))return[...t.map(p=>new c(l.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",p))];if(t.length===0)return[];let r;U(t)instanceof R&&(r=t.pop());const s=F(r),i=s.getErrors(),a=s.getValue();t.forEach(p=>{const h=W(p).unwrap_or("").toLowerCase();if(h!==E.PK&&h!==E.Unique){i.push(new c(l.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",p));return}a[h]===void 0?a[h]=[p]:a[h].push(p)});const o=a[E.PK]||[],u=a[E.PrimaryKey]||[];return o.length>=1&&u.length>=1&&i.push(...[...o,...u].map(p=>new c(l.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",p))),Ze(a,(p,h)=>{switch(h){case E.Note:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{H(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a quoted string`,d.value||d.name))});break;case E.Ref:p.forEach(d=>{Pr(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a valid unary relationship`,d.value||d.name))});break;case E.PrimaryKey:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{ne(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.PK:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof ue&&!ne(d.value)&&i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.NotNull:{p.length>1&&i.push(...p.map(N=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,N)));const d=a[E.Null]||[];p.length>=1&&d.length>=1&&i.push(...[...p,...d].map(N=>new c(l.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",N))),p.forEach(N=>{ne(N.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,N.value||N.name))});break}case E.Null:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{ne(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Unique:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof ue&&!ne(d.value)&&i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Increment:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof ue&&!ne(d.value)&&i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Default:p.length>1&&i.push(...p.map(d=>new c(l.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{Sr(d.value)||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a string literal, number literal, function expression, true, false or null`,d.value||d.name))});break;case E.Check:p.forEach(d=>{d.value instanceof ie||i.push(new c(l.INVALID_COLUMN_SETTING_VALUE,"'check' must be a function expression",d.value||d.name))});break;default:p.forEach(d=>i.push(new c(l.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${h}'`,d)))}}),i}validateSubElements(t){const n=t.flatMap(s=>{if(s.parent=this.declarationNode,!s.type)return[];const i=me(s);return new i(s,this.publicSymbolTable,this.symbolFactory).validate()}),r=t.filter(s=>{var i;return((i=s.type)==null?void 0:i.value.toLowerCase())===I.Note});return r.length>1&&n.push(...r.map(s=>new c(l.NOTE_REDEFINED,"Duplicate notes are defined",s))),n}}class Ul{constructor(t,n,r){this.declarationNode=t,this.publicSymbolTable=n,this.symbolFactory=r}validate(){return[...this.validateContext(),...this.validateName(this.declarationNode.name),...this.validateAlias(this.declarationNode.alias),...this.validateSettingList(this.declarationNode.attributeList),...this.validateBody(this.declarationNode.body)]}validateContext(){const t=new c(l.INVALID_CHECKS_CONTEXT,"A Checks can only appear inside a Table or a TablePartial",this.declarationNode);if(this.declarationNode.parent instanceof J)return[t];const n=xe(this.declarationNode.parent).unwrap_or(void 0);return n&&[I.Table,I.TablePartial].includes(n)?[]:[t]}validateName(t){return t?[new c(l.UNEXPECTED_NAME,"A Checks shouldn't have a name",t)]:[]}validateAlias(t){return t?[new c(l.UNEXPECTED_ALIAS,"A Checks shouldn't have an alias",t)]:[]}validateSettingList(t){return t?[new c(l.UNEXPECTED_SETTINGS,"A Checks shouldn't have a setting list",t)]:[]}validateBody(t){if(!t)return[];if(t instanceof y)return[new c(l.UNEXPECTED_SIMPLE_BODY,"A Checks must have a complex body",t)];const[n,r]=oe(t.body,s=>s instanceof y);return[...this.validateFields(n),...this.validateSubElements(r)]}validateFields(t){return t.flatMap(n=>{if(!n.callee)return[];const r=[],s=[n.callee,...n.args];return U(s)instanceof R&&r.push(...this.validateFieldSetting(s.pop())),(s.length>1||!(s[0]instanceof ie))&&r.push(new c(l.INVALID_CHECKS_FIELD,"A check field must be a function expression",n)),r})}validateFieldSetting(t){const n=F(t),r=n.getErrors(),s=n.getValue();for(const i in s){const a=s[i];switch(i){case"name":a.length>1&&a.forEach(o=>r.push(new c(l.DUPLICATE_CHECK_SETTING,`'${i}' can only appear once`,o))),a.forEach(o=>{H(o.value)||r.push(new c(l.INVALID_CHECK_SETTING_VALUE,`'${i}' must be a string`,o))});break;default:a.forEach(o=>r.push(new c(l.UNKNOWN_CHECK_SETTING,`Unknown check setting '${i}'`,o)))}}return r}validateSubElements(t){return t.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const r=me(n);return new r(n,this.publicSymbolTable,this.symbolFactory).validate()})}}function me(e){switch(e.type.value.toLowerCase()){case I.Enum:return Ll;case I.Table:return Ol;case I.TableGroup:return Dl;case I.Project:return wl;case I.Ref:return Sl;case I.Note:return yl;case I.Indexes:return vl;case I.TablePartial:return Rl;case I.Check:return Ul;default:return Al}}function yr(e){return!!Z(e).unwrap_or(!1)}function Ml(e){return He(e)}function He(e){return e instanceof q&&e.expression instanceof de}function Lt(e,t,n){var s;e[0]==="public"&&(e=e.slice(1));let r=t;for(const i of e){let a;const o=Ht(i);if(r.has(o)){if(a=(s=r.get(o))==null?void 0:s.symbolTable,!a)throw new Error("Expect a symbol table in a schema symbol")}else{a=new We;const u=n.create(gr,{symbolTable:a});r.set(o,u)}r=a}return r}function wr(e){return e==="-"||e==="<>"||e===">"||e==="<"}function vt(e){var n;if(!(e instanceof q)||!(e.expression instanceof je)||((n=e.expression.literal)==null?void 0:n.kind)!==f.COLOR_LITERAL)return!1;const t=e.expression.literal.value;if(t.length!==4&&t.length!==7||t[0]!=="#")return!1;for(let r=1;r<t.length;r+=1)if(!al(t[r]))return!1;return!0}function ne(e){return e===void 0}function Sr(e){var n;if(H(e)||Me(e)||Oe(e)&&["true","false","null"].includes(e.expression.variable.value.toLowerCase())||e instanceof se&&kl.includes((n=e.op)==null?void 0:n.value)&&Me(e.expression)||e instanceof ie)return!0;if(!e||!Zt(e))return!1;const t=ve(e).unwrap();return t.length===2||t.length===3}function Me(e){var t,n,r;return e instanceof se?((t=e.op)==null?void 0:t.value)!=="-"&&((n=e.op)==null?void 0:n.value)!=="+"?!1:Me(e.expression):e instanceof q&&e.expression instanceof je&&((r=e.expression.literal)==null?void 0:r.kind)===f.NUMERIC_LITERAL}function Pr(e){var n;if(!(e instanceof se)||!wr((n=e.op)==null?void 0:n.value))return!1;const t=Z(e.expression).unwrap_or(void 0);return t!==void 0&&t.length>0}function Or(e){return e instanceof be&&e.elementList.every(V)}function xr(e){if(!(e instanceof ae||At(e)||e instanceof q||e instanceof Ue))return!1;if(e instanceof ae){if(e.callee===void 0||e.argumentList===void 0||!e.argumentList.elementList.every(n=>Me(n)||H(n)||Oe(n)))return!1;e=e.callee}for(;e instanceof Ue;){if(e.array===void 0||e.indexer===void 0||!e.indexer.elementList.every(n=>!n.colon&&!n.value&&Me(n.name)))return!1;e=e.array}const t=Z(e).unwrap_or(void 0);return t!==void 0&&t.length>0}function F(e){const t={},n=[];return e?(e.elementList.forEach(r=>{var i;if(!r.name)return;if(r.name instanceof q){n.push(new c(l.INVALID_SETTINGS,"A setting name must be a stream of identifiers",r.name));return}const s=(i=$e(r.name).unwrap_or(void 0))==null?void 0:i.toLowerCase();s&&(t[s]===void 0?t[s]=[r]:t[s].push(r))}),new re(t,n)):new re({})}class Cn{constructor(t,n){this.ast=t,this.symbolFactory=n,this.publicSchemaSymbol=this.symbolFactory.create(gr,{symbolTable:new We}),this.ast.symbol=this.publicSchemaSymbol,this.ast.symbol.declaration=this.ast}validate(){const t=[];this.ast.body.forEach(r=>{if(r.parent=this.ast,r.type===void 0)return;const s=me(r),i=new s(r,this.publicSchemaSymbol.symbolTable,this.symbolFactory);t.push(...i.validate())});const n=this.ast.body.filter(r=>xe(r).unwrap_or(void 0)===I.Project);return n.length>1&&n.forEach(r=>t.push(new c(l.PROJECT_REDEFINED,"Only one project can exist",r))),new re(this.ast,t)}}class Ie{constructor(t,n){this.declarationNode=t,this.errors=n}bind(){this.bindSettingList(this.declarationNode.attributeList,this.settingList),this.bindBody()}bindSettingList(t,n){t&&t.elementList.forEach(r=>{if(r.name instanceof q)return;const s=$e(r.name).unwrap_or(void 0);if(!s)return;const i=n[s.toLowerCase()];i!=null&&i.shouldBind&&this.scanAndBind(r.value,i)})}bindBody(){const t=this.declarationNode;if(!t.body)return;const{body:n}=t;n instanceof Ee?n.body.forEach(r=>{if(r instanceof S){if(!r.type||xe(this.declarationNode).unwrap_or(null)===I.TablePartial&&xe(r).unwrap_or(null)===I.Indexes)return;const s=Dr(r);new s(r,this.errors).bind()}else r instanceof y?this.bindSubfield(r):this.bindPartialInjection(r)}):this.bindSubfield(n)}bindSubfield(t){const n=[t.callee,...t.args],r=U(n);r instanceof R&&(n.pop(),this.bindSettingList(r,this.subfield.settingList));const{argBinderRules:s}=this.subfield.arg;for(let i=0;i<Math.min(n.length,s.length);i+=1)s[i].shouldBind&&this.scanAndBind(n[i],s[i])}bindPartialInjection(t){var n;(n=this.injectionBinderRule)!=null&&n.shouldBind&&this.scanAndBind(t,this.injectionBinderRule)}scanAndBind(t,n){var r,s;if(t)if(t instanceof q){if(t.expression instanceof de&&((s=n.keywords)!=null&&s.includes((r=t.expression.variable)==null?void 0:r.value.toLowerCase())))return;this.bindFragments([t],n)}else t instanceof Te?At(t)?this.bindFragments(ve(t).unwrap_or([]),n):(this.scanAndBind(t.leftExpression,n),this.scanAndBind(t.rightExpression,n)):t instanceof se?this.scanAndBind(t.expression,n):t instanceof It?this.scanAndBind(t.expression,n):t instanceof be?t.elementList.forEach(i=>this.scanAndBind(i,n)):t instanceof Re&&this.bindFragments([t],n)}bindFragments(t,n){if(t.length===0)return;const r=t.length===1&&t[0]instanceof Re,s=[...n.topSubnamesSymbolKind],i=r?-1:t.findIndex(N=>!V(N)),o=i!==-1&&Or(t[i])?t[i]:void 0,u=i>=0?s.pop():void 0,p=t.slice(0,i===-1?void 0:i);if(p.length===0)return;const h=[];for(;s.length&&p.length;){const N=s.pop(),b=p.pop(),A=W(b).unwrap();h.unshift({index:it(A,N),referrer:b})}for(;p.length;){const N=p.pop(),b=r?Il(N).unwrap():W(N).unwrap();h.unshift({index:it(b,n.remainingSubnamesSymbolKind),referrer:N})}const d=H(t[0]);return o?o.elementList.forEach(N=>this.resolveIndexStack([...h,{index:it(W(N).unwrap(),u),referrer:N}],n,d)):this.resolveIndexStack(h,n,d)}resolveIndexStack(t,n,r){if(t.length===0)throw new Error("Unreachable - An unresolved name must have at least one name component");const[s,...i]=t,a=Bn(s.index,this.declarationNode);if(a===void 0){const{kind:h,name:d}=he(s.index).unwrap();this.logError(s.referrer,`Can not find ${h} '${d}'`,n.ignoreNameNotFound||!!n.ignoreNameNotFoundForQuotedVariable&&r);return}a.references.push(s.referrer),s.referrer.referee=a;let o=a.symbolTable,{kind:u,name:p}=he(s.index).unwrap();for(const h of i){const{kind:d,name:N}=he(h.index).unwrap(),b=o.get(h.index);if(!b){this.logError(h.referrer,`${u} '${p}' does not have ${d} '${N}'`,n.ignoreNameNotFound);return}if(u=d,p=N,h.referrer.referee=b,b.references.push(h.referrer),!b.symbolTable)break;o=b.symbolTable}}logError(t,n,r){r||this.errors.push(new c(l.BINDING_ERROR,n,t))}resolveInjections(t){var s;const n=(s=this.declarationNode.symbol)==null?void 0:s.symbolTable;if(!n)return;const r=new Map;n.forEach((i,a)=>{var p,h;if(!zo(a))return;const o=Bn(Yo(a),this.declarationNode),u=(h=(p=o==null?void 0:o.declaration)==null?void 0:p.symbol)==null?void 0:h.symbolTable;u&&u.forEach((d,N)=>{n.has(N)||r.set(N,{injectorFieldSymbol:d,injectorDeclaration:i.declaration})})}),r.forEach((i,a)=>{const o=il(i.injectorFieldSymbol);if(!o)return;const u=t.create(o,i);n.set(a,u)})}}class Fl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Bl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class Cl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Vl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1}]},settingList:{}},this.settingList={}}}class Gl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class $l extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class Xl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1}]},settingList:{}},this.settingList={}}}class jl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Enum],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!0,ignoreNameNotFoundForQuotedVariable:!0}]},settingList:{ref:{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1},default:{shouldBind:!0,topSubnamesSymbolKind:[m.Enum,m.EnumField],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,keywords:["false","true","null"],ignoreNameNotFoundForQuotedVariable:!0},check:{shouldBind:!1}}},this.settingList={},this.injectionBinderRule={shouldBind:!0,topSubnamesSymbolKind:[],remainingSubnamesSymbolKind:m.TablePartial,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1}}}class Wl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1}]},settingList:{}},this.settingList={}}}class Hl extends Ie{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Enum],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!0,ignoreNameNotFoundForQuotedVariable:!1}]},settingList:{ref:{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1,ignoreNameNotFoundForQuotedVariable:!1},default:{shouldBind:!1},check:{shouldBind:!1}}},this.settingList={}}}function Dr(e){switch(e.type.value.toLowerCase()){case I.Enum:return Cl;case I.Table:return jl;case I.TableGroup:return Wl;case I.Project:return $l;case I.Ref:return Xl;case I.Note:return Gl;case I.Indexes:return Vl;case I.TablePartial:return Hl;case I.Check:return Fl;default:return Bl}}class Kl{constructor(t){this.ast=t,this.errors=[]}resolve(t){return this.ast.body.map(n=>{if(!n.type)return null;const r=Dr(n),s=new r(n,this.errors);return s.resolveInjections(t),s}).forEach(n=>n==null?void 0:n.bind()),new re(this.ast,this.errors)}}class zl{constructor(t){this.generator=t}create(t,n){return new t(n,this.generator.nextId())}}class Yl{constructor(t,n){this.ast=t,this.symbolFactory=new zl(n)}analyze(){return new Cn(this.ast,this.symbolFactory).validate().chain(n=>new Kl(n).resolve(this.symbolFactory))}validate(){return new Cn(this.ast,this.symbolFactory).validate().chain(n=>new re(n,[]))}}function Vn(e,t){const{variables:n,tupleElements:r}=et(e).unwrap();return r?n.length===0?{schemaName:t.schemaName,tableName:t.name,fieldNames:r}:{tableName:n.pop(),schemaName:n.pop()||null,fieldNames:r}:n.length===1?{schemaName:t.schemaName,tableName:t.name,fieldNames:[n[0]]}:{fieldNames:[n.pop()],tableName:n.pop(),schemaName:n.pop()||null}}function kr(e){switch(e){case"<":return["1","*"];case"<>":return["*","*"];case">":return["*","1"];case"-":return["1","1"];default:throw new Error("Invalid relation op")}}function L(e){return{start:{offset:e.startPos.offset,line:e.startPos.line+1,column:e.startPos.column+1},end:{offset:e.endPos.offset,line:e.endPos.line+1,column:e.endPos.column+1}}}function ht(e){var n;const t=(n=ve(e).unwrap_or(void 0))==null?void 0:n.pop();return t instanceof be?t.elementList.map(r=>r.referee):[t.referee]}function Ce(e){const t=Z(e).unwrap();return{name:t.pop(),schemaName:t}}function nt(e){return e.expression.literal.value}function Rr(e,t){if(Array.isArray(e)){const s=e.map(({id:a})=>a).sort().join(","),i=t.map(({id:a})=>a).sort().join(",");return s<i?`${s}-${i}`:`${i}-${s}`}const n=e.id.toString(),r=t.id.toString();return n<r?`${n}-${r}`:`${r}-${n}`}function en(e,t){if(Array.isArray(e)){const s=e.map(({id:a})=>a).sort(),i=t.map(({id:a})=>a).sort();return Ut(s,i).every(([a,o])=>a===o)}const n=e.id,r=t.id;return n===r}function fe(e){const t=e.split(`
|
|
10
|
+
`),n=t.slice(t.findIndex(i=>i.trimStart()!=="")),r=n.filter(i=>i.trimStart()),s=Math.min(...r.map(i=>i.length-i.trimStart().length));return n.map(i=>i.slice(s)).join(`
|
|
11
|
+
`)}function Ur(e){if(e){if(H(e))return{value:C(e).unwrap(),type:"string"};if(Me(e))return{type:"number",value:Ft(e)};if(Oe(e))return{value:e.expression.variable.value.toLowerCase(),type:"boolean"};if(e instanceof ie&&e.value)return{value:e.value.value,type:"expression"};if(Zt(e))return{value:ve(e).map(U).and_then(Y).unwrap(),type:"string"};throw new Error("Unreachable")}}function Mr(e){let t=null;e instanceof ae&&(t=e.argumentList.elementList.map(i=>Me(i)?Lr(i):H(i)?C(i).unwrap():Y(i).unwrap()).join(","),e=e.callee);let n="";for(;e instanceof Ue;)n=`[${e.indexer.elementList.map(i=>i.name.expression.literal.value).join(",")}]${n}`,e=e.array;const{name:r,schemaName:s}=Ce(e);return s.length>1?new re({schemaName:s.length===0?null:s[0],type_name:`${r}${n}${t?`(${t})`:""}`,args:t},[new c(l.UNSUPPORTED,"Nested schema is not supported",e)]):new re({schemaName:s.length===0?null:s[0],type_name:`${r}${n}${t?`(${t})`:""}`,args:t})}class Fr{constructor(t,n){this.declarationNode=t,this.env=n,this.table={name:void 0,schemaName:void 0,alias:null,fields:[],token:void 0,indexes:[],partials:[],checks:[]},this.pkColumns=[]}interpret(){this.table.token=L(this.declarationNode),this.env.tables.set(this.declarationNode,this.table);const t=[...this.interpretName(this.declarationNode.name),...this.interpretAlias(this.declarationNode.alias),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)];return this.pkColumns.length>=2&&(this.table.indexes.push({columns:this.pkColumns.map(({name:n,token:r})=>({value:n,type:"column",token:r})),token:{start:{offset:-1,line:-1,column:-1},end:{offset:-1,line:-1,column:-1}},pk:!0}),this.pkColumns.forEach(n=>{n.pk=!1})),t}interpretName(t){const{name:n,schemaName:r}=Ce(t);return r.length>1?(this.table.name=n,this.table.schemaName=r.join("."),[new c(l.UNSUPPORTED,"Nested schema is not supported",t)]):(this.table.name=n,this.table.schemaName=r.length?r[0]:null,[])}interpretAlias(t){if(!t)return[];const n=W(t).unwrap_or(null);return n&&(this.env.aliases.push({name:n,kind:"table",value:{tableName:this.table.name,schemaName:this.table.schemaName}}),this.table.alias=n),[]}interpretSettingList(t){var s,i,a;const n=F(t).getValue();this.table.headerColor=(s=n[E.HeaderColor])!=null&&s.length?nt((a=(i=n[E.HeaderColor])==null?void 0:i.at(0))==null?void 0:a.value):void 0;const[r]=n[E.Note]||[];return this.table.note=r&&{value:C(r==null?void 0:r.value).map(fe).unwrap(),token:L(r)},[]}interpretBody(t){const[n,r]=oe(t.body,s=>s instanceof y||s instanceof Re);return[...this.interpretFields(n),...this.interpretSubElements(r)]}interpretSubElements(t){return t.flatMap(n=>{var r;switch((r=n.type)==null?void 0:r.value.toLowerCase()){case I.Note:return this.table.note={value:C(n.body instanceof Ee?n.body.body[0].callee:n.body.callee).map(fe).unwrap(),token:L(n)},[];case I.Indexes:return this.interpretIndexes(n);case I.Check:return this.interpretChecks(n);default:return[]}})}interpretInjection(t,n){const r={order:n,token:L(t)};return r.name=t.partial.variable.value,this.table.partials.push(r),[]}interpretFields(t){var a;const s=((a=this.declarationNode.symbol)!=null&&a.symbolTable?[...this.declarationNode.symbol.symbolTable.entries()]:[]).filter(([o])=>{const u=he(o).unwrap_or(null);return(u==null?void 0:u.kind)===m.Column}).length?[]:[new c(l.EMPTY_TABLE,"A Table must have at least one column",this.declarationNode)],i=t.flatMap((o,u)=>o instanceof y?this.interpretColumn(o):this.interpretInjection(o,u));return[...s,...i]}interpretColumn(t){var a,o,u,p,h,d,N,b,A;const n=[],r={};r.name=W(t.callee).unwrap();const s=Mr(t.args[0]);r.type=s.getValue(),n.push(...s.getErrors()),r.token=L(t),r.inline_refs=[];const i=t.args.slice(1);if(U(i)instanceof R){const _=F(i.pop()).getValue();r.pk=!!((a=_[E.PK])!=null&&a.length)||!!((o=_[E.PrimaryKey])!=null&&o.length),r.increment=!!((u=_[E.Increment])!=null&&u.length),r.unique=!!((p=_[E.Unique])!=null&&p.length),r.not_null=(h=_[E.NotNull])!=null&&h.length?!0:(d=_[E.Null])!=null&&d.length?!1:void 0,r.dbdefault=Ur((b=(N=_[E.Default])==null?void 0:N.at(0))==null?void 0:b.value);const v=(A=_[E.Note])==null?void 0:A.at(0);r.note=v&&{value:C(v.value).map(fe).unwrap(),token:L(v)};const K=_[E.Ref]||[];r.inline_refs=K.flatMap(w=>{const[ee]=ht(w.value.expression);if(en(ee,t.symbol))return n.push(new c(l.SAME_ENDPOINT,"Two endpoints are the same",w)),[];const G=w.value.op,$=Z(w.value.expression).unwrap();let le;if($.length===1){const[te]=$;le={schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[te],relation:G.value,token:L(w)}}else if($.length===2){const[te,we]=$;le={schemaName:null,tableName:te,fieldNames:[we],relation:G.value,token:L(w)}}else if($.length===3){const[te,we,rn]=$;le={schemaName:te,tableName:we,fieldNames:[rn],relation:G.value,token:L(w)}}else{n.push(new c(l.UNSUPPORTED,"Nested schema is not supported",w));const te=$.pop(),we=$.pop();le={schemaName:$.join("."),tableName:we,fieldNames:[te],relation:G.value,token:L(w)}}const ye=this.registerInlineRefToEnv(t,ee,le,w);return n.push(...ye),ye.length===0?le:[]});const z=_[E.Check]||[];r.checks=z.map(w=>{const ee=L(w),G=w.value.value.value;return{token:ee,expression:G}})}return r.pk||(r.pk=i.some(_=>Y(_).unwrap().toLowerCase()==="pk")),r.unique||(r.unique=i.some(_=>Y(_).unwrap().toLowerCase()==="unique")),this.table.fields.push(r),r.pk&&this.pkColumns.push(r),n}interpretIndexes(t){return this.table.indexes.push(...t.body.body.map(n=>{var a,o,u,p,h,d,N;const r={columns:[]},s=n;r.token=L(s);const i=[s.callee,...s.args];if(U(i)instanceof R){const b=F(i.pop()).getValue();r.pk=!!((a=b[E.PK])!=null&&a.length),r.unique=!!((o=b[E.Unique])!=null&&o.length),r.name=C((p=(u=b[E.Name])==null?void 0:u.at(0))==null?void 0:p.value).unwrap_or(void 0);const A=(h=b[E.Note])==null?void 0:h.at(0);r.note=A&&{value:C(A.value).unwrap(),token:L(A)},r.type=Y((N=(d=b[E.Type])==null?void 0:d.at(0))==null?void 0:N.value).unwrap_or(void 0)}return i.flatMap(b=>{if(!(b instanceof ae))return b;const A=[];for(;b instanceof ae;)A.push(b.argumentList),b=b.callee;return A.push(b),A}).forEach(b=>{const{functional:A,nonFunctional:_}=ut(b).unwrap();r.columns.push(...A.map(v=>({value:v.value.value,type:"expression",token:L(v)})),..._.map(v=>({value:W(v).unwrap(),type:"column",token:L(v)})))}),r})),[]}interpretChecks(t){return this.table.checks.push(...t.body.body.map(n=>{var i,a;const r={},s=n;if(r.token=L(s),s.args[0]instanceof R){const o=F(s.args[0]).getValue();r.name=C((a=(i=o[E.Name])==null?void 0:i.at(0))==null?void 0:a.value).unwrap_or(void 0)}return r.expression=s.callee.value.value,r})),[]}registerInlineRefToEnv(t,n,r,s){const i=Rr(t.symbol,n);if(this.env.refIds[i])return[new c(l.CIRCULAR_REF,"References with same endpoints exist",s),new c(l.CIRCULAR_REF,"References with same endpoints exist",this.env.refIds[i])];const a=kr(r.relation);return this.env.refIds[i]=s,this.env.ref.set(s,{name:null,schemaName:null,token:r.token,endpoints:[{...r,relation:a[1]},{schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[Y(t.callee).unwrap()],token:L(t),relation:a[0]}]}),[]}}class ql{constructor(t,n){this.declarationNode=t,this.env=n,this.note={name:void 0,content:void 0,token:void 0}}interpret(){return this.note.token=L(this.declarationNode),this.env.notes.set(this.declarationNode,this.note),[...this.interpretName(this.declarationNode.name),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)]}interpretName(t){const{name:n}=Ce(t);return this.note.name=n,[]}interpretSettingList(t){var r,s,i;const n=F(t).getValue();return this.note.headerColor=(r=n.headercolor)!=null&&r.length?nt((i=(s=n.headercolor)==null?void 0:s.at(0))==null?void 0:i.value):void 0,[]}interpretBody(t){const[n,r]=oe(t.body,s=>s instanceof y);return n.length!==1||r.length>0?[new c(l.INVALID_NOTE,"Invalid note syntax",t)]:[...this.interpretNote(n[0])]}interpretNote(t){const n=lr(t,"callee.expression.literal.value","");return this.note.content=fe(n),[]}}class Br{constructor(t,n){this.declarationNode=t,this.env=n,this.container=this.declarationNode.parent instanceof S?this.env.tables.get(this.declarationNode.parent):void 0,this.ref={}}interpret(){return this.ref.token=L(this.declarationNode),this.env.ref.set(this.declarationNode,this.ref),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(t){const n=[],r=Z(this.declarationNode.name).unwrap_or([]);return this.ref.name=r.pop()||null,r.length>1&&n.push(new c(l.UNSUPPORTED,"Nested schema is not supported",this.declarationNode.name)),this.ref.schemaName=r.join(".")||null,n}interpretBody(t){return t instanceof y?this.interpretField(t):this.interpretField(t.body[0])}interpretField(t){var p,h,d,N,b,A,_;const n=t.callee.op.value,{leftExpression:r,rightExpression:s}=t.callee,i=ht(r),a=ht(s);if(en(i,a))return[new c(l.SAME_ENDPOINT,"Two endpoints are the same",t)];const o=Rr(i,a);if(this.env.refIds[o])return[new c(l.CIRCULAR_REF,"References with same endpoints exist",this.declarationNode),new c(l.CIRCULAR_REF,"References with same endpoints exist",this.env.refIds[o])];if(t.args[0]){const v=F(t.args[0]).getValue(),K=(h=(p=v.delete)==null?void 0:p.at(0))==null?void 0:h.value;this.ref.onDelete=K instanceof ce?$e(K).unwrap_or(void 0):Y(K).unwrap_or(void 0);const z=(N=(d=v.update)==null?void 0:d.at(0))==null?void 0:N.value;this.ref.onUpdate=z instanceof ce?$e(z).unwrap_or(void 0):Y(z).unwrap_or(void 0),this.ref.color=(b=v.color)!=null&&b.length?nt((_=(A=v.color)==null?void 0:A.at(0))==null?void 0:_.value):void 0}const u=kr(n);return this.ref.endpoints=[{...Vn(r,this.container),relation:u[0],token:L(r)},{...Vn(s,this.container),relation:u[1],token:L(s)}],this.env.refIds[o]=this.declarationNode,[]}}class Cr{constructor(t,n){this.declarationNode=t,this.env=n,this.tableGroup={tables:[]}}interpret(){const t=[];return this.tableGroup.token=L(this.declarationNode),this.env.tableGroups.set(this.declarationNode,this.tableGroup),t.push(...this.interpretName(this.declarationNode.name),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)),t}interpretName(t){const n=[],{name:r,schemaName:s}=Ce(t);return s.length>=2&&(this.tableGroup.name=r,this.tableGroup.schemaName=s.join("."),n.push(new c(l.UNSUPPORTED,"Nested schema is not supported",this.declarationNode.name))),this.tableGroup.name=r,this.tableGroup.schemaName=s[0]||null,n}interpretBody(t){const[n,r]=oe(t.body,s=>s instanceof y);return[...this.interpretFields(n),...this.interpretSubElements(r)]}interpretSubElements(t){return t.flatMap(n=>{var r;switch((r=n.type)==null?void 0:r.value.toLowerCase()){case"note":this.tableGroup.note={value:C(n.body instanceof Ee?n.body.body[0].callee:n.body.callee).map(fe).unwrap(),token:L(n)};break}return[]})}interpretFields(t){const n=[];return this.tableGroup.tables=t.map(r=>{const s=Z(r.callee).unwrap();s.length>2&&n.push(new c(l.UNSUPPORTED,"Nested schema is not supported",r));const i=ve(r.callee).unwrap().pop().referee.id;if(this.env.groupOfTable[i]){const a=this.env.groupOfTable[i],{schemaName:o,name:u}=this.env.tableGroups.get(a),p=o?`${o}.${u}`:u;n.push(new c(l.TABLE_REAPPEAR_IN_TABLEGROUP,`Table "${s.join(".")}" already appears in group "${p}"`,r))}else this.env.groupOfTable[i]=this.declarationNode;return{name:s.pop(),schemaName:s.join(".")}}),n}interpretSettingList(t){var s,i,a;const n=F(t).getValue();this.tableGroup.color=(s=n.color)!=null&&s.length?nt((a=(i=n.color)==null?void 0:i.at(0))==null?void 0:a.value):void 0;const[r]=n.note||[];return this.tableGroup.note=r&&{value:C(r==null?void 0:r.value).map(fe).unwrap(),token:L(r)},[]}}class Vr{constructor(t,n){this.declarationNode=t,this.env=n,this.enum={values:[]}}interpret(){return this.enum.token=L(this.declarationNode),this.env.enums.set(this.declarationNode,this.enum),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(t){const{name:n,schemaName:r}=Ce(t);return r.length>1?(this.enum.name=n,this.enum.schemaName=r.join("."),[new c(l.UNSUPPORTED,"Nested schema is not supported",t)]):(this.enum.name=n,this.enum.schemaName=r.length?r[0]:null,[])}interpretBody(t){return t.body.flatMap(n=>{var o;const r=n,s={};s.token=L(r),s.name=Y(r.callee).unwrap();const a=(o=F(r.args[0]).getValue().note)==null?void 0:o.at(0);return s.note=a&&{value:C(a.value).map(fe).unwrap(),token:L(a)},this.enum.values.push(s),[]})}}class Gr{constructor(t,n){this.declarationNode=t,this.env=n,this.tablePartial={name:void 0,fields:[],token:void 0,indexes:[],checks:[]},this.pkColumns=[]}interpret(){this.tablePartial.token=L(this.declarationNode),this.env.tablePartials.set(this.declarationNode,this.tablePartial);const t=[...this.interpretName(this.declarationNode.name),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)];return this.pkColumns.length>=2&&(this.tablePartial.indexes.push({columns:this.pkColumns.map(({name:n,token:r})=>({value:n,type:"column",token:r})),token:{start:{offset:-1,line:-1,column:-1},end:{offset:-1,line:-1,column:-1}},pk:!0}),this.pkColumns.forEach(n=>{n.pk=!1})),t}interpretName(t){const{name:n}=Ce(t);return this.tablePartial.name=n,[]}interpretSettingList(t){const n=F(t).getValue(),r=Bo(n[E.HeaderColor]);this.tablePartial.headerColor=r?nt(r.value):void 0;const[s]=n[E.Note]||[];return this.tablePartial.note=s&&{value:C(s==null?void 0:s.value).map(fe).unwrap(),token:L(s)},[]}interpretBody(t){const[n,r]=oe(t.body,s=>s instanceof y);return[...this.interpretFields(n),...this.interpretSubElements(r)]}interpretSubElements(t){return t.flatMap(n=>{var r;switch((r=n.type)==null?void 0:r.value.toLowerCase()){case I.Note:return this.tablePartial.note={value:C(n.body instanceof Ee?n.body.body[0].callee:n.body.callee).map(fe).unwrap(),token:L(n)},[];case I.Indexes:return this.interpretIndexes(n);case I.Check:return this.interpretChecks(n);default:return[]}})}interpretFields(t){return t.flatMap(n=>this.interpretColumn(n))}interpretColumn(t){var a,o,u,p,h,d,N,b,A;const n=[],r={};r.name=W(t.callee).unwrap();const s=Mr(t.args[0]);r.type=s.getValue(),n.push(...s.getErrors()),r.token=L(t),r.inline_refs=[];const i=t.args.slice(1);if(U(i)instanceof R){const _=F(i.pop()).getValue();r.pk=!!((a=_[E.PK])!=null&&a.length)||!!((o=_[E.PrimaryKey])!=null&&o.length),r.increment=!!((u=_[E.Increment])!=null&&u.length),r.unique=!!((p=_[E.Unique])!=null&&p.length),r.not_null=(h=_[E.NotNull])!=null&&h.length?!0:(d=_[E.Null])!=null&&d.length?!1:void 0,r.dbdefault=Ur((b=(N=_[E.Default])==null?void 0:N.at(0))==null?void 0:b.value);const v=(A=_[E.Note])==null?void 0:A.at(0);r.note=v&&{value:C(v.value).map(fe).unwrap(),token:L(v)};const K=_[E.Ref]||[];r.inline_refs=K.flatMap(w=>{const[ee]=ht(w.value.expression);if(en(ee,t.symbol))return n.push(new c(l.SAME_ENDPOINT,"Two endpoints are the same",w)),[];const G=w.value.op,$=Z(w.value.expression).unwrap();let le;if($.length===2){const[ye,te]=$;le={schemaName:null,tableName:ye,fieldNames:[te],relation:G.value,token:L(w)}}else if($.length===3){const[ye,te,we]=$;le={schemaName:ye,tableName:te,fieldNames:[we],relation:G.value,token:L(w)}}else{n.push(new c(l.UNSUPPORTED,"Unsupported",w));const ye=$.pop(),te=$.pop();le={schemaName:$.join("."),tableName:te,fieldNames:[ye],relation:G.value,token:L(w)}}return le});const z=_[E.Check]||[];r.checks=z.map(w=>{const ee=L(w),G=w.value.value.value;return{token:ee,expression:G}})}return r.pk||(r.pk=i.some(_=>Y(_).unwrap().toLowerCase()==="pk")),r.unique||(r.unique=i.some(_=>Y(_).unwrap().toLowerCase()==="unique")),this.tablePartial.fields.push(r),r.pk&&this.pkColumns.push(r),n}interpretIndexes(t){return this.tablePartial.indexes.push(...t.body.body.map(n=>{var a,o,u,p,h,d,N;const r={columns:[]},s=n;r.token=L(s);const i=[s.callee,...s.args];if(U(i)instanceof R){const b=F(i.pop()).getValue();r.pk=!!((a=b[E.PK])!=null&&a.length),r.unique=!!((o=b[E.Unique])!=null&&o.length),r.name=C((p=(u=b[E.Name])==null?void 0:u.at(0))==null?void 0:p.value).unwrap_or(void 0);const A=(h=b[E.Note])==null?void 0:h.at(0);r.note=A&&{value:C(A.value).unwrap(),token:L(A)},r.type=Y((N=(d=b[E.Type])==null?void 0:d.at(0))==null?void 0:N.value).unwrap_or(void 0)}return i.flatMap(b=>{if(!(b instanceof ae))return b;const A=[];let _=b;for(;_ instanceof ae;)A.push(_.argumentList),_=_.callee;return A.push(_),A}).forEach(b=>{const{functional:A,nonFunctional:_}=ut(b).unwrap();r.columns.push(...A.map(v=>({value:v.value.value,type:"expression",token:L(v)})),..._.map(v=>({value:W(v).unwrap(),type:"column",token:L(v)})))}),r})),[]}interpretChecks(t){return this.tablePartial.checks.push(...t.body.body.map(n=>{var i,a;const r={},s=n;if(r.token=L(s),s.args[0]instanceof R){const o=F(s.args[0]).getValue();r.name=C((a=(i=o[E.Name])==null?void 0:i.at(0))==null?void 0:a.value).unwrap_or(void 0)}return r.expression=s.callee.value.value,r})),[]}}class Ql{constructor(t,n){this.declarationNode=t,this.env=n,this.project={enums:[],refs:[],tableGroups:[],tables:[],tablePartials:[]}}interpret(){return this.env.project.set(this.declarationNode,this.project),this.project.token=L(this.declarationNode),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(t){if(!t)return this.project.name=null,[];const{name:n}=Ce(t);return this.project.name=n,[]}interpretBody(t){return t.body.flatMap(n=>{var s;const r=n;switch((s=r.type)==null?void 0:s.value.toLowerCase()){case"table":{const i=new Fr(r,this.env).interpret();return this.project.tables.push(this.env.tables.get(r)),i}case"ref":{const i=new Br(r,this.env).interpret();return this.project.refs.push(this.env.ref.get(r)),i}case"tablegroup":{const i=new Cr(r,this.env).interpret();return this.project.tableGroups.push(this.env.tableGroups.get(r)),i}case"enum":{const i=new Vr(r,this.env).interpret();return this.project.enums.push(this.env.enums.get(r)),i}case"note":return this.project.note={value:C(r.body instanceof Ee?r.body.body[0].callee:r.body.callee).map(fe).unwrap(),token:L(r)},[];case"tablepartial":{const i=new Gr(r,this.env).interpret();return this.project.tablePartials.push(this.env.tablePartials.get(r)),i}default:return this.project[r.type.value.toLowerCase()]=C(r.body.callee).unwrap(),[]}})}}function Jl(e){return{schemas:[],tables:Array.from(e.tables.values()),notes:Array.from(e.notes.values()),refs:Array.from(e.ref.values()),enums:Array.from(e.enums.values()),tableGroups:Array.from(e.tableGroups.values()),aliases:e.aliases,project:Array.from(e.project.values())[0]||{},tablePartials:Array.from(e.tablePartials.values())}}class Zl{constructor(t){this.ast=t,this.env={schema:[],tables:new Map,notes:new Map,refIds:{},ref:new Map,enums:new Map,tableGroups:new Map,groupOfTable:{},aliases:[],project:new Map,tablePartials:new Map}}interpret(){const t=this.ast.body.flatMap(n=>{switch(xe(n).unwrap_or(void 0)){case I.Table:return new Fr(n,this.env).interpret();case I.Note:return new ql(n,this.env).interpret();case I.Ref:return new Br(n,this.env).interpret();case I.TableGroup:return new Cr(n,this.env).interpret();case I.TablePartial:return new Gr(n,this.env).interpret();case I.Enum:return new Vr(n,this.env).interpret();case I.Project:return new Ql(n,this.env).interpret();default:return[]}});return new re(Jl(this.env),t)}}var P=(e=>(e[e.Function=1]="Function",e[e.Constructor=2]="Constructor",e[e.Field=3]="Field",e[e.Variable=4]="Variable",e[e.Class=5]="Class",e[e.Struct=6]="Struct",e[e.Interface=7]="Interface",e[e.Module=8]="Module",e[e.Property=9]="Property",e[e.Event=10]="Event",e[e.Operator=11]="Operator",e[e.Unit=12]="Unit",e[e.Value=13]="Value",e[e.Constant=14]="Constant",e[e.Enum=15]="Enum",e[e.EnumMember=16]="EnumMember",e[e.Keyword=17]="Keyword",e[e.Text=18]="Text",e[e.Color=19]="Color",e[e.File=20]="File",e[e.Reference=21]="Reference",e[e.Customcolor=22]="Customcolor",e[e.Folder=23]="Folder",e[e.TypeParameter=24]="TypeParameter",e[e.User=25]="User",e[e.Issue=26]="Issue",e[e.Snippet=27]="Snippet",e))(P||{}),M=(e=>(e[e.None=0]="None",e[e.KeepWhitespace=1]="KeepWhitespace",e[e.InsertAsSnippet=4]="InsertAsSnippet",e))(M||{});function tt(e){switch(e){case m.Schema:return P.Module;case m.Table:case m.TablePartial:return P.Class;case m.Column:case m.TableGroupField:return P.Field;case m.Enum:return P.Enum;case m.EnumField:return P.EnumMember;case m.TableGroup:return P.Struct;default:return P.Text}}function ft(e,t){if(!e||Mt(e))return!1;for(const n of e.trailingTrivia){if(n.start>t)break;if(n.kind===f.NEWLINE&&n.end<=t)return!1}return!0}function X(){return{suggestions:[]}}function pt(e){return{...e,suggestions:e.suggestions.map(t=>({...t,insertText:` ${t.insertText}`}))}}function yt(e){return{...e,suggestions:e.suggestions.map(t=>({...t,insertText:t.insertText.split("").every(gt)?t.insertText:`"${t.insertText}"`}))}}function tn(e,t){return e.getOffsetAt(t)}class $r{constructor(t,n=[]){this.compiler=t,this.triggerCharacters=n}provideCompletionItems(t,n){var h,d;const r=tn(t,n),s=this.compiler.token.flatStream(),{token:i,index:a}=this.compiler.container.token(r),o=a===void 0?s[0]:s[a+1];if([...(i==null?void 0:i.trailingTrivia)||[],...(i==null?void 0:i.leadingTrivia)||[],...(o==null?void 0:o.leadingTrivia)||[]].find(N=>Xo(N)&&qe(r,N)))return X();if(a===void 0)return Wn();if([f.STRING_LITERAL,f.QUOTED_STRING].includes(i.kind)&&qe(r,i))return X();const u=this.compiler.container.element(r);if(this.compiler.container.scopeKind(r)===D.TOPLEVEL||u instanceof S&&u.type&&u.type.start<=r&&u.type.end>=r)return Wn();const p=[...this.compiler.container.stack(r)].reverse();for(const N of p)if(N instanceof se)switch((h=N.op)==null?void 0:h.value){case">":case"<":case"<>":case"-":return Gn(this.compiler,r,N)}else if(N instanceof Te)switch((d=N.op)==null?void 0:d.value){case">":case"<":case"<>":case"-":return Gn(this.compiler,r,N);case".":return Xr(this.compiler,r,N)}else{if(N instanceof ue)return $n(this.compiler,r,N);if(N instanceof R)return $n(this.compiler,r,N);if(N instanceof be)return tc(this.compiler,r);if(N instanceof Re)return ec(this.compiler,r);if(N instanceof y)return jn(this.compiler,r,N);if(N instanceof S&&(N.bodyColon&&r>=N.bodyColon.end||N.body&&qe(r,N.body)))return jn(this.compiler,r,void 0)}return X()}}function ec(e,t){const n=e.container.element(t);return Ke(e,t,n,[m.TablePartial])}function Gn(e,t,n){const r=e.container.scopeKind(t);if([D.REF,D.TABLE,D.TABLEPARTIAL].includes(r)){const s=Ke(e,t,e.container.element(t),[m.Table,m.Schema,m.Column]);return ft(n.op,t)?pt(s):s}return X()}function Ke(e,t,n,r){var a;if(n===void 0)return X();let s=n;const i={suggestions:[]};for(;s;){if((a=s==null?void 0:s.symbol)!=null&&a.symbolTable){const{symbol:o}=s;i.suggestions.push(...e.symbol.members(o).filter(({kind:u})=>r.includes(u)).map(({name:u,kind:p})=>({label:u,insertText:u,insertTextRules:M.KeepWhitespace,kind:tt(p),sortText:tt(p).toString().padStart(2,"0"),range:void 0})))}s=s instanceof S?s.parent:void 0}return yt(i)}function tc(e,t){var r;switch(e.container.scopeKind(t)){case D.INDEXES:return Wr(e,t);case D.REF:{const s=[...e.container.stack(t)];for(;s.length>0;){const i=s.pop();if(i instanceof Te&&((r=i.op)==null?void 0:r.value)===".")return Xr(e,t,i)}}return jr(e,t)}return X()}function $n(e,t,n){const{token:r}=e.container.token(t);if([f.COMMA,f.LBRACKET].includes(r==null?void 0:r.kind)){const s=Xn(e,t);return(r==null?void 0:r.kind)===f.COMMA&&ft(r,t)?pt(s):s}if(n.name&&n.name.start<=t&&n.name.end>=t)return Xn(e,t);if(n.name instanceof ce){const s=nc(e,t,$e(n.name).unwrap_or(""));return(r==null?void 0:r.kind)===f.COLON&&ft(r,t)?pt(s):s}return X()}function Xn(e,t){const n=e.container.element(t);if(n instanceof J)return X();const r=e.container.scopeKind(t);if(n.body&&!qe(t,n.body)){let s;switch(r){case D.TABLE:case D.TABLEPARTIAL:s=[E.HeaderColor,E.Note];break;case D.TABLEGROUP:s=[E.Color,E.Note];break;default:s=[]}return{suggestions:s.map(i=>({label:i,insertText:`${i}: `,kind:P.Field,insertTextRules:M.KeepWhitespace,range:void 0}))}}switch(r){case D.TABLE:case D.TABLEPARTIAL:return{suggestions:[...[E.PK,E.PrimaryKey,E.Null,E.NotNull,E.Increment,E.Unique].map(s=>({label:s,insertText:s,kind:P.Property,insertTextRules:M.KeepWhitespace,range:void 0})),...[E.Ref,E.Default,E.Note,E.Check].map(s=>({label:s,insertText:`${s}: `,kind:P.Property,insertTextRules:M.KeepWhitespace,range:void 0}))]};case D.ENUM:return{suggestions:[...[E.Note].map(s=>({label:s,insertText:`${s}: `,kind:P.Property,insertTextRules:M.KeepWhitespace,range:void 0}))]};case D.INDEXES:return{suggestions:[...[E.Unique,E.PK].map(s=>({label:s,insertText:s,insertTextRules:M.KeepWhitespace,kind:P.Property,range:void 0})),...[E.Note,E.Name,E.Type].map(s=>({label:s,insertText:`${s}: `,kind:P.Property,insertTextRules:M.KeepWhitespace,range:void 0}))]};case D.REF:return{suggestions:[E.Update,E.Delete,E.Color].map(s=>({label:s,insertText:`${s}: `,kind:P.Property,insertTextRules:M.KeepWhitespace,range:void 0}))};case D.CHECKS:return{suggestions:[E.Name].map(s=>({label:s,insertText:`${s}: `,kind:P.Property,insertTextRules:M.KeepWhitespace,range:void 0}))}}return X()}function nc(e,t,n){switch(n==null?void 0:n.toLowerCase()){case"update":case"delete":return{suggestions:["cascade","set default","set null","restrict"].map(r=>({label:r,insertText:r,kind:P.Value,insertTextRules:M.KeepWhitespace,range:void 0}))};case"type":return{suggestions:["btree","hash"].map(r=>({label:r,insertText:`${r}`,kind:P.Value,insertTextRules:M.KeepWhitespace,range:void 0}))};case"default":return Ke(e,t,e.container.element(t),[m.Schema,m.Enum])}return X()}function Xr(e,t,n){const r=ve(n).unwrap_or([]);if(r.pop(),r.some(i=>!V(i)))return X();const s=r.map(i=>Y(i).unwrap());return yt({suggestions:e.symbol.ofName({nameStack:s,owner:e.container.element(t)}).flatMap(({symbol:i})=>e.symbol.members(i)).map(({kind:i,name:a})=>({label:a,insertText:a,kind:tt(i),range:void 0}))})}function jn(e,t,n){var s;switch(e.container.scopeKind(t)){case D.TABLE:case D.TABLEPARTIAL:return sc(e,t,n);case D.PROJECT:return ic(e,t,n);case D.INDEXES:return oc(e,t);case D.ENUM:return rc(e,t,n);case D.REF:{const i=jr(e,t);return((s=e.container.token(t).token)==null?void 0:s.kind)===f.COLON&&ft(e.container.token(t).token,t)?pt(i):i}case D.TABLEGROUP:return ac(e);default:return X()}}function Wn(){return{suggestions:["Table","TableGroup","Enum","Project","Ref","TablePartial"].map(e=>({label:e,insertText:e,insertTextRules:M.KeepWhitespace,kind:P.Keyword,range:void 0}))}}function rc(e,t,n){return n!=null&&n.callee&&nn(t,n)===1?Ke(e,t,e.container.element(t),[m.Schema,m.Table,m.Column]):X()}function sc(e,t,n){const r=["Note","indexes","checks"];if(!(n!=null&&n.callee))return{suggestions:r.map(i=>({label:i,insertText:i,insertTextRules:M.KeepWhitespace,kind:P.Keyword,range:void 0}))};const s=nn(t,n);return s===0?{suggestions:r.map(i=>({label:i,insertText:i,insertTextRules:M.KeepWhitespace,kind:P.Keyword,range:void 0}))}:s===1?lc(e,t):X()}function ic(e,t,n){const r=["Table","TableGroup","Enum","Note","Ref","TablePartial"];return n!=null&&n.callee?nn(t,n)===0?{suggestions:r.map(i=>({label:i,insertText:i,insertTextRules:M.KeepWhitespace,kind:P.Keyword,range:void 0}))}:X():{suggestions:r.map(i=>({label:i,insertText:i,insertTextRules:M.KeepWhitespace,kind:P.Keyword,range:void 0}))}}function jr(e,t){return Ke(e,t,e.container.element(t),[m.Schema,m.Table,m.Column])}function ac(e){return{suggestions:[...yt({suggestions:[...e.parse.publicSymbolTable().entries()].flatMap(([t])=>{const n=he(t).unwrap_or(void 0);if(n===void 0)return[];const{kind:r,name:s}=n;return r!==m.Table&&r!==m.Schema?[]:{label:s,insertText:s,insertTextRules:M.KeepWhitespace,kind:tt(r),range:void 0}})}).suggestions,...["Note"].map(t=>({label:t,insertText:t,insertTextRules:M.KeepWhitespace,kind:P.Keyword,range:void 0}))]}}function oc(e,t){return Wr(e,t)}function lc(e,t){return{suggestions:[...["integer","int","tinyint","smallint","mediumint","bigint","bit","bool","binary","varbinary","logical","char","nchar","varchar","varchar2","nvarchar","nvarchar2","binary_float","binary_double","float","double","decimal","dec","real","money","smallmoney","enum","tinyblob","tinytext","blob","text","mediumblob","mediumtext","longblob","longtext","ntext","set","inet6","uuid","image","date","time","datetime","datetime2","timestamp","year","smalldatetime","datetimeoffset","XML","sql_variant","uniqueidentifier","CURSOR","BFILE","CLOB","NCLOB","RAW"].map(n=>({label:n,insertText:n,insertTextRules:M.KeepWhitespace,kind:P.TypeParameter,sortText:P.TypeParameter.toString().padStart(2,"0"),range:void 0})),...Ke(e,t,e.container.element(t),[m.Enum,m.Schema]).suggestions]}}function Wr(e,t){const n=e.container.element(t),r=n==null?void 0:n.parent;if(!((r==null?void 0:r.symbol)instanceof Ar))return X();const{symbolTable:s}=r.symbol;return yt({suggestions:[...s.entries()].flatMap(([i])=>{const a=he(i).unwrap_or(void 0);if(a===void 0)return[];const{name:o}=a;return{label:o,insertText:o,insertTextRules:M.KeepWhitespace,kind:tt(m.Column),range:void 0}})})}function nn(e,t){if(!t.callee)return-1;const n=[t.callee,...t.args],r=n.findIndex(s=>e<=s.end);return r===-1?n.length:r}class Hr{constructor(t){this.compiler=t}provideDefinition(t,n){var a,o;const{uri:r}=t,s=tn(t,n),i=[...this.compiler.container.stack(s)];for(;i.length!==0;){const u=i.pop();if(!(u!=null&&u.referee))continue;let p;if((a=u.referee)!=null&&a.declaration&&[Pe.PRIMARY_EXPRESSION,Pe.VARIABLE,Pe.PARTIAL_INJECTION].includes(u==null?void 0:u.kind)?{declaration:p}=u.referee:(o=u.referee)!=null&&o.injectorDeclaration&&(p=u.referee.injectorDeclaration),p){const{startPos:h,endPos:d}=p;return[{range:{startColumn:h.column+1,startLineNumber:h.line+1,endColumn:d.column+1,endLineNumber:d.line+1},uri:r}]}}return[]}}class Kr{constructor(t){this.compiler=t}provideReferences(t,n){const{uri:r}=t,s=tn(t,n),i=[...this.compiler.container.stack(s)];for(;i.length!==0;){const a=i.pop();if(a&&[Pe.ELEMENT_DECLARATION,Pe.FUNCTION_APPLICATION,Pe.PRIMARY_EXPRESSION].includes(a==null?void 0:a.kind)){const{symbol:o}=a;if(o!=null&&o.references.length)return o.references.map(({startPos:u,endPos:p})=>({range:{startColumn:u.column+1,startLineNumber:u.line+1,endColumn:p.column+1,endLineNumber:p.line+1},uri:r}))}}return[]}}const cc=Object.freeze(Object.defineProperty({__proto__:null,CompletionItemInsertTextRule:M,CompletionItemKind:P,DBMLCompletionItemProvider:$r,DBMLDefinitionProvider:Hr,DBMLReferencesProvider:Kr},Symbol.toStringTag,{value:"Module"}));var D=(e=>(e[e.TABLE=0]="TABLE",e[e.ENUM=1]="ENUM",e[e.TABLEGROUP=2]="TABLEGROUP",e[e.INDEXES=3]="INDEXES",e[e.NOTE=4]="NOTE",e[e.REF=5]="REF",e[e.PROJECT=6]="PROJECT",e[e.CUSTOM=7]="CUSTOM",e[e.TOPLEVEL=8]="TOPLEVEL",e[e.TABLEPARTIAL=9]="TABLEPARTIAL",e[e.CHECKS=10]="CHECKS",e))(D||{});class uc{constructor(){this.source="",this.cache=new Array(16).fill(null),this.nodeIdGenerator=new jo,this.symbolIdGenerator=new qo,this.token={invalidStream:this.createQuery(6,()=>this.parse.tokens().filter(vr)),flatStream:this.createQuery(7,()=>this.parse.tokens().flatMap(t=>[...t.leadingInvalid,t,...t.trailingInvalid]))},this.parse={source:()=>this.source,_:this.createQuery(0,()=>{const t=new hl(this.source).lex().chain(n=>new dl(n,this.nodeIdGenerator).parse()).chain(({ast:n,tokens:r})=>new Yl(n,this.symbolIdGenerator).analyze().map(()=>({ast:n,tokens:r})));return t.getErrors().length>0?t:t.chain(({ast:n,tokens:r})=>new Zl(n).interpret().map(i=>({ast:n,tokens:r,rawDb:i})))}),ast:this.createQuery(1,()=>this.parse._().getValue().ast),errors:this.createQuery(2,()=>this.parse._().getErrors()),tokens:this.createQuery(4,()=>this.parse._().getValue().tokens),rawDb:this.createQuery(3,()=>this.parse._().getValue().rawDb),publicSymbolTable:this.createQuery(5,()=>this.parse._().getValue().ast.symbol.symbolTable)},this.container={stack:this.createQuery(10,t=>{const n=this.token.flatStream(),{index:r,token:s}=this.container.token(t),i=r===void 0?-1:Fo(n,p=>!p.isInvalid,r);if(i===-1)return[this.parse.ast()];const a=n[i].start;let o=this.parse.ast();const u=[o];for(;;){const h=ul(o).find(d=>qe(a,d));if(h===void 0||h instanceof Q)break;u.push(h),o=h}if((s==null?void 0:s.kind)===f.COLON)return u;for(;u.length>0;){let p=!1;const h=U(u);if(h instanceof y){const d=this.parse.source();for(let N=h.end;N<t;N+=1)d[N]===`
|
|
12
|
+
`&&(u.pop(),p=!0)}else h instanceof se||h instanceof Te?this.container.token(t).token!==h.op&&(u.pop(),p=!0):h instanceof R?h.listCloseBracket&&h.end<=t&&(u.pop(),p=!0):h instanceof be?h.tupleCloseParen&&h.end<=t&&(u.pop(),p=!0):h instanceof Ee?h.blockCloseBrace&&h.end<=t&&(u.pop(),p=!0):h instanceof ce||h.end<t&&(u.pop(),p=!0);if(p){const d=U(u);d instanceof S&&d.end<=t&&u.pop()}if(!p)break}return u}),token:this.createQuery(11,t=>{const n=this.token.flatStream().findIndex(r=>r.start>=t);return n===void 0?{token:void 0,index:void 0}:n<=0?{token:void 0,index:void 0}:{token:this.token.flatStream()[n-1],index:n-1}}),element:this.createQuery(12,t=>{const n=this.container.stack(t);for(let r=n.length-1;r>=0;r-=1)if(n[r]instanceof S)return n[r];return this.parse.ast()}),scope:this.createQuery(14,t=>{var n,r;return(r=(n=this.container.element(t))==null?void 0:n.symbol)==null?void 0:r.symbolTable}),scopeKind:this.createQuery(15,t=>{var r;if(this.container.element(t)instanceof J)return 8;switch((r=this.container.element(t).type)==null?void 0:r.value.toLowerCase()){case"table":return 0;case"enum":return 1;case"ref":return 5;case"tablegroup":return 2;case"indexes":return 3;case"note":return 4;case"project":return 6;case"tablepartial":return 9;case"checks":return 10;default:return 7}})},this.symbol={ofName:this.createQuery(8,({nameStack:t,owner:n=this.parse.ast()})=>{var s;if(t.length===0)return[];const r=[];for(let i=n;i;i=i instanceof S?i.parent:void 0){if(!((s=i.symbol)!=null&&s.symbolTable))continue;const{symbolTable:a}=i.symbol;let o=[a],u=[];for(const p of t)u=o.flatMap(h=>sl(p).flatMap(d=>{const N=h.get(d),b=he(d).unwrap_or(void 0);return!N||!b?[]:{...b,symbol:N}})),o=u.flatMap(h=>h.symbol.symbolTable?h.symbol.symbolTable:[]);r.push(...u)}return r},({nameStack:t,owner:n})=>`${t.join(".")}@${n.id}`),members:this.createQuery(9,t=>t.symbolTable?[...t.symbolTable.entries()].map(([n,r])=>({...he(n).unwrap(),symbol:r})):[])}}createQuery(t,n,r){return s=>{const i=this.cache[t],a=s&&r?r(s):s;if(i!==null){if(!(i instanceof Map))return i;if(i.has(a))return i.get(a)}const o=n(s);return s!==void 0?i instanceof Map?i.set(a,o):(this.cache[t]=new Map,this.cache[t].set(a,o)):this.cache[t]=o,o}}setSource(t){this.source=t,this.cache=new Array(16).fill(null),this.nodeIdGenerator.reset(),this.symbolIdGenerator.reset()}initMonacoServices(){return{definitionProvider:new Hr(this),referenceProvider:new Kr(this),autocompletionProvider:new $r(this)}}}exports.CompileError=c;exports.CompileErrorCode=l;exports.Compiler=uc;exports.ElementDeclarationNode=S;exports.ElementKind=I;exports.ProgramNode=J;exports.ScopeKind=D;exports.SyntaxNode=k;exports.SyntaxNodeKind=Pe;exports.SyntaxToken=Q;exports.SyntaxTokenKind=f;exports.serialize=Wo;exports.services=cc;
|