@dbml/parse 3.12.0 → 3.13.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/LICENSE +0 -0
  2. package/dist/compiler.d.ts +2 -1
  3. package/dist/constants.d.ts +0 -0
  4. package/dist/dbml-parse.js +10 -10
  5. package/dist/dbml-parse.mjs +2204 -1542
  6. package/dist/index.d.ts +0 -0
  7. package/dist/lib/analyzer/analyzer.d.ts +0 -0
  8. package/dist/lib/analyzer/binder/binder.d.ts +2 -1
  9. package/dist/lib/analyzer/binder/elementBinder/custom.d.ts +0 -0
  10. package/dist/lib/analyzer/binder/elementBinder/elementBinder.d.ts +5 -1
  11. package/dist/lib/analyzer/binder/elementBinder/enum.d.ts +0 -0
  12. package/dist/lib/analyzer/binder/elementBinder/indexes.d.ts +0 -0
  13. package/dist/lib/analyzer/binder/elementBinder/note.d.ts +0 -0
  14. package/dist/lib/analyzer/binder/elementBinder/project.d.ts +0 -0
  15. package/dist/lib/analyzer/binder/elementBinder/ref.d.ts +0 -0
  16. package/dist/lib/analyzer/binder/elementBinder/table.d.ts +8 -0
  17. package/dist/lib/analyzer/binder/elementBinder/tableGroup.d.ts +0 -0
  18. package/dist/lib/analyzer/binder/elementBinder/tablePartial.d.ts +31 -0
  19. package/dist/lib/analyzer/binder/types.d.ts +3 -0
  20. package/dist/lib/analyzer/binder/utils.d.ts +2 -1
  21. package/dist/lib/analyzer/symbol/factory.d.ts +0 -0
  22. package/dist/lib/analyzer/symbol/symbolIndex.d.ts +7 -1
  23. package/dist/lib/analyzer/symbol/symbolTable.d.ts +1 -0
  24. package/dist/lib/analyzer/symbol/symbols.d.ts +27 -0
  25. package/dist/lib/analyzer/symbol/utils.d.ts +0 -0
  26. package/dist/lib/analyzer/types.d.ts +2 -1
  27. package/dist/lib/analyzer/utils.d.ts +0 -0
  28. package/dist/lib/analyzer/validator/elementValidators/custom.d.ts +0 -0
  29. package/dist/lib/analyzer/validator/elementValidators/enum.d.ts +0 -0
  30. package/dist/lib/analyzer/validator/elementValidators/indexes.d.ts +0 -0
  31. package/dist/lib/analyzer/validator/elementValidators/note.d.ts +0 -0
  32. package/dist/lib/analyzer/validator/elementValidators/project.d.ts +0 -0
  33. package/dist/lib/analyzer/validator/elementValidators/ref.d.ts +0 -0
  34. package/dist/lib/analyzer/validator/elementValidators/table.d.ts +6 -3
  35. package/dist/lib/analyzer/validator/elementValidators/tableGroup.d.ts +0 -0
  36. package/dist/lib/analyzer/validator/elementValidators/tablePartial.d.ts +25 -0
  37. package/dist/lib/analyzer/validator/types.d.ts +0 -0
  38. package/dist/lib/analyzer/validator/utils.d.ts +2 -1
  39. package/dist/lib/analyzer/validator/validator.d.ts +0 -0
  40. package/dist/lib/errors.d.ts +57 -47
  41. package/dist/lib/interpreter/elementInterpreter/enum.d.ts +0 -0
  42. package/dist/lib/interpreter/elementInterpreter/project.d.ts +0 -0
  43. package/dist/lib/interpreter/elementInterpreter/ref.d.ts +0 -0
  44. package/dist/lib/interpreter/elementInterpreter/sticky_note.d.ts +0 -0
  45. package/dist/lib/interpreter/elementInterpreter/table.d.ts +1 -0
  46. package/dist/lib/interpreter/elementInterpreter/tableGroup.d.ts +0 -0
  47. package/dist/lib/interpreter/elementInterpreter/tablePartial.d.ts +18 -0
  48. package/dist/lib/interpreter/interpreter.d.ts +0 -0
  49. package/dist/lib/interpreter/types.d.ts +21 -1
  50. package/dist/lib/interpreter/utils.d.ts +0 -0
  51. package/dist/lib/lexer/lexer.d.ts +0 -0
  52. package/dist/lib/lexer/tokens.d.ts +1 -0
  53. package/dist/lib/lexer/utils.d.ts +0 -0
  54. package/dist/lib/option.d.ts +0 -0
  55. package/dist/lib/parser/contextStack.d.ts +0 -0
  56. package/dist/lib/parser/factory.d.ts +0 -0
  57. package/dist/lib/parser/nodes.d.ts +11 -3
  58. package/dist/lib/parser/parser.d.ts +1 -0
  59. package/dist/lib/parser/utils.d.ts +0 -0
  60. package/dist/lib/report.d.ts +0 -0
  61. package/dist/lib/serialization/serialize.d.ts +0 -0
  62. package/dist/lib/types.d.ts +0 -0
  63. package/dist/lib/utils.d.ts +0 -0
  64. package/dist/services/definition/provider.d.ts +0 -0
  65. package/dist/services/index.d.ts +0 -0
  66. package/dist/services/references/provider.d.ts +0 -0
  67. package/dist/services/suggestions/provider.d.ts +0 -0
  68. package/dist/services/suggestions/utils.d.ts +0 -0
  69. package/dist/services/types.d.ts +0 -0
  70. package/dist/services/utils.d.ts +0 -0
  71. package/package.json +2 -2
@@ -1,12 +1,12 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("lodash");var u=(t=>(t.SPACE="<space>",t.TAB="<tab>",t.NEWLINE="<newline>",t.COMMA="<comma>",t.LPAREN="<lparen>",t.RPAREN="<rparen>",t.LBRACE="<lbrace>",t.RBRACE="<rbrace>",t.LBRACKET="<lbracket>",t.RBRACKET="<rbracket>",t.LANGLE="<langle>",t.RANGLE="<rangle>",t.OP="<op>",t.EOF="<eof>",t.NUMERIC_LITERAL="<number>",t.STRING_LITERAL="<string>",t.COLOR_LITERAL="<color>",t.FUNCTION_EXPRESSION="<function-expression>",t.QUOTED_STRING="<variable>",t.IDENTIFIER="<identifier>",t.SEMICOLON="<semicolon>",t.COLON="<colon>",t.SINGLE_LINE_COMMENT="<single-line-comment>",t.MULTILINE_COMMENT="<multiline-comment>",t))(u||{});function Yt(t){switch(t.kind){case"<newline>":case"<space>":case"<tab>":case"<single-line-comment>":case"<multiline-comment>":return!0;default:return!1}}function ot(t){if(!t)return!1;switch(t){case"+":case"-":case"*":case"/":case"%":case"<":case">":case"=":case"!":case".":case"&":case"|":return!0;default:return!1}}function lt(t){return t!==void 0&&t.kind==="<op>"}class G{constructor(e,n,s,i,r){this.kind=e,this.startPos=n,this.endPos=s,this.value=i,this.leadingTrivia=[],this.trailingTrivia=[],this.leadingInvalid=[],this.trailingInvalid=[],this.isInvalid=r,this.start=n.offset,this.end=s.offset}static create(e,n,s,i,r){return new G(e,n,s,i,r)}}function Lt(t){return t.trailingTrivia.find(({kind:e})=>e===u.NEWLINE)!==void 0}function ct(t,e){return e.leadingTrivia.find(({kind:s})=>s===u.NEWLINE)!==void 0||Lt(t)}function $e(t){return t.trailingTrivia.find(({kind:e})=>[u.SPACE,u.TAB].includes(e))!==void 0}function gt(t){return t.trailingTrivia.length===0?t.end:gt(b.last(t.trailingTrivia))}function _t(t){return t.leadingTrivia.length===0?t.start:_t(t.leadingTrivia[0])}function zt(t){return[u.SINGLE_LINE_COMMENT,u.MULTILINE_COMMENT].includes(t.kind)}class Qt{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class k{constructor(e,n,s){this.id=e,this.kind=n;const i=s.find(a=>a!==void 0&&!Number.isNaN(a.start));i?(this.startPos=i.startPos,this.fullStart=i instanceof G?_t(i):i.fullStart):(this.startPos={offset:NaN,column:NaN,line:NaN},this.fullStart=NaN);const r=[...s].reverse().find(a=>a!==void 0&&!Number.isNaN(a.end));r?(this.endPos=r.endPos,this.fullEnd=r instanceof G?gt(r):r.fullEnd):(this.endPos={offset:NaN,column:NaN,line:NaN},this.fullEnd=NaN),this.start=this.startPos.offset,this.end=this.endPos.offset}}var Ne=(t=>(t.PROGRAM="<program>",t.ELEMENT_DECLARATION="<element-declaration>",t.ATTRIBUTE="<attribute>",t.IDENTIFIER_STREAM="<identifer-stream>",t.LITERAL="<literal>",t.VARIABLE="<variable>",t.PREFIX_EXPRESSION="<prefix-expression>",t.INFIX_EXPRESSION="<infix-expression>",t.POSTFIX_EXPRESSION="<postfix-expression>",t.FUNCTION_EXPRESSION="<function-expression>",t.FUNCTION_APPLICATION="<function-application>",t.BLOCK_EXPRESSION="<block-expression>",t.LIST_EXPRESSION="<list-expression>",t.TUPLE_EXPRESSION="<tuple-expression>",t.CALL_EXPRESSION="<call-expression>",t.PRIMARY_EXPRESSION="<primary-expression>",t.GROUP_EXPRESSION="<group-expression>",t.DUMMY="<dummy>",t.ARRAY="<array>",t))(Ne||{});class j extends k{constructor({body:e=[],eof:n},s){super(s,"<program>",[...e,n]),this.body=e,this.eof=n}}class A extends k{constructor({type:e,name:n,as:s,alias:i,attributeList:r,bodyColon:a,body:l},p){if(super(p,"<element-declaration>",[e,n,s,i,r,a,l]),l&&a&&!(l instanceof v||l instanceof A))throw new Error("If an element has a simple body, it must be a function application node");this.type=e,this.name=n,this.as=s,this.alias=i,this.attributeList=r,this.bodyColon=a,this.body=l}}class q extends k{constructor({identifiers:e=[]},n){super(n,"<identifer-stream>",e||[]),this.identifiers=e}}class ie extends k{constructor({name:e,colon:n,value:s},i){super(i,"<attribute>",[e,n,s]),this.name=e,this.value=s,this.colon=n}}class H extends k{constructor({op:e,expression:n},s){super(s,"<prefix-expression>",[e,n]),this.op=e,this.expression=n}}class J extends k{constructor({op:e,leftExpression:n,rightExpression:s},i){super(i,"<infix-expression>",[n,e,s]),this.op=e,this.leftExpression=n,this.rightExpression=s}}class Me extends k{constructor({op:e,expression:n},s){super(s,"<postfix-expression>",[n,e]),this.op=e,this.expression=n}}class se extends k{constructor({value:e},n){super(n,"<function-expression>",[e]),this.value=e}}class v extends k{constructor({callee:e,args:n=[]},s){super(s,"<function-application>",[e,...n]),this.callee=e,this.args=n}}class K extends k{constructor({blockOpenBrace:e,body:n=[],blockCloseBrace:s},i){super(i,"<block-expression>",[e,...n,s]),this.blockOpenBrace=e,this.body=n,this.blockCloseBrace=s}}class R extends k{constructor({listOpenBracket:e,elementList:n=[],commaList:s=[],listCloseBracket:i},r){super(r,"<list-expression>",[e,...At(n,s),i]),this.listOpenBracket=e,this.elementList=n,this.commaList=s,this.listCloseBracket=i}}class ee extends k{constructor({tupleOpenParen:e,elementList:n=[],commaList:s=[],tupleCloseParen:i},r){super(r,"<tuple-expression>",[e,...At(n,s),i]),this.tupleOpenParen=e,this.elementList=n,this.commaList=s,this.tupleCloseParen=i}}class Ye extends ee{constructor({groupOpenParen:e,expression:n,groupCloseParen:s},i){super({tupleOpenParen:e,elementList:n&&[n],commaList:[],tupleCloseParen:s},i),this.kind="<group-expression>"}}class Z extends k{constructor({callee:e,argumentList:n},s){super(s,"<call-expression>",[e,n]),this.callee=e,this.argumentList=n}}class be extends k{constructor({literal:e},n){super(n,"<literal>",[e]),this.literal=e}}class te extends k{constructor({variable:e},n){super(n,"<variable>",[e]),this.variable=e}}class M extends k{constructor({expression:e},n){super(n,"<primary-expression>",[e]),this.expression=e}}class Se extends k{constructor({pre:e},n){const s=G.create(u.SPACE,e.endPos,e.endPos," ",!1);super(n,"<dummy>",[s])}}class he extends k{constructor({expression:e,indexer:n},s){super(s,"<array>",[e,n]),this.array=e,this.indexer=n}}function At(t,e){if(!t||t.length===0)return e||[];if(!e||e.length===0)return t||[];const[n]=t,[s]=e;return(n.start<s.start?b.flatten(b.zip(t,e)):b.flatten(b.zip(e,t))).filter(i=>i!==null)}function qt(t,e=!1){return JSON.stringify(t,function(n,s){var i;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(r=>r.id),declaration:(i=s==null?void 0:s.declaration)==null?void 0:i.id}:n==="referee"||n==="parent"||n==="declaration"?s==null?void 0:s.id:n==="symbolTable"?Object.fromEntries(s.table):s},e?2:0)}class x{constructor(e){this.value=e}unwrap(){return this.value}unwrap_or(e){return this.value}and_then(e){return e(this.value)}map(e){return new x(e(this.value))}isOk(){return!0}}class y{unwrap(){throw new Error("Trying to unwrap a None value")}unwrap_or(e){return e}and_then(e){return new y}map(e){return new y}isOk(){return!1}}var T=(t=>(t.Schema="Schema",t.Table="Table",t.Column="Column",t.TableGroup="TableGroup",t.TableGroupField="TableGroup field",t.Enum="Enum",t.EnumField="Enum field",t.Note="Note",t))(T||{});function ze(t){return`Schema:${t}`}function De(t){return`Table:${t}`}function Qe(t){return`Column:${t}`}function qe(t){return`Enum:${t}`}function He(t){return`Enum field:${t}`}function Je(t){return`TableGroup:${t}`}function Ze(t){return`TableGroup field:${t}`}function Ht(t){return`Note:${t}`}function Ce(t,e){switch(e){case"Column":return Qe(t);case"Enum":return qe(t);case"Enum field":return He(t);case"Schema":return ze(t);case"Table":return De(t);case"TableGroup":return Je(t);case"TableGroup field":return Ze(t);default:throw new Error("Unreachable")}}function re(t){const[e,n]=t.split(":");return Object.values(T).includes(e)?new x({name:n,kind:e}):new y}function Jt(t){const e=re(t).unwrap_or(void 0);if(!e)return!1;const{kind:n,name:s}=e;return n==="Schema"&&s==="public"}function Zt(t){return[ze,De,qe,Je,Qe,He,Ze].map(e=>e(t))}function Fe(t){return!!t.match(/(\p{L}|_|\p{M})/gu)}function Re(t){const[e]=t;return e>="0"&&e<="9"}function Kt(t){const[e]=t;return Re(e)||Fe(e)&&e.toLowerCase()>="a"&&e.toLowerCase()<="f"}function Ee(t){return Fe(t)||Re(t)}function ut(t,e){const n=[],s=Math.min(t.length,e.length);for(let i=0;i<s;i+=1)n.push(t[i],e[i]);return n.push(...t.slice(s),...e.slice(s)),n}function _e(t,e){return t>=e.start&&t<e.end}class en{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class vt{constructor({symbolTable:e},n){this.references=[],this.id=n,this.symbolTable=e}}class tn{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class nn{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class wt{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class sn{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class rn{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class an{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}var o=(t=>(t[t.UNKNOWN_SYMBOL=1e3]="UNKNOWN_SYMBOL",t[t.UNEXPECTED_SYMBOL=1001]="UNEXPECTED_SYMBOL",t[t.UNEXPECTED_EOF=1002]="UNEXPECTED_EOF",t[t.UNEXPECTED_NEWLINE=1003]="UNEXPECTED_NEWLINE",t[t.UNKNOWN_TOKEN=1004]="UNKNOWN_TOKEN",t[t.UNEXPECTED_TOKEN=1005]="UNEXPECTED_TOKEN",t[t.UNEXPECTED_ELEMENT_DECLARATION=1006]="UNEXPECTED_ELEMENT_DECLARATION",t[t.MISSING_SPACES=1007]="MISSING_SPACES",t[t.UNKNOWN_PREFIX_OP=1008]="UNKNOWN_PREFIX_OP",t[t.INVALID_OPERAND=1009]="INVALID_OPERAND",t[t.EMPTY_ATTRIBUTE_NAME=1010]="EMPTY_ATTRIBUTE_NAME",t[t.INVALID_ESCAPE_SEQUENCE=1011]="INVALID_ESCAPE_SEQUENCE",t[t.INVALID_NAME=3e3]="INVALID_NAME",t[t.UNEXPECTED_NAME=3001]="UNEXPECTED_NAME",t[t.NAME_NOT_FOUND=3002]="NAME_NOT_FOUND",t[t.DUPLICATE_NAME=3003]="DUPLICATE_NAME",t[t.INVALID_ALIAS=3004]="INVALID_ALIAS",t[t.UNEXPECTED_ALIAS=3005]="UNEXPECTED_ALIAS",t[t.UNEXPECTED_SETTINGS=3006]="UNEXPECTED_SETTINGS",t[t.INVALID_SETTINGS=3007]="INVALID_SETTINGS",t[t.UNEXPECTED_SIMPLE_BODY=3008]="UNEXPECTED_SIMPLE_BODY",t[t.UNEXPECTED_COMPLEX_BODY=3009]="UNEXPECTED_COMPLEX_BODY",t[t.INVALID_TABLE_CONTEXT=3010]="INVALID_TABLE_CONTEXT",t[t.INVALID_TABLE_SETTING=3011]="INVALID_TABLE_SETTING",t[t.DUPLICATE_TABLE_SETTING=3012]="DUPLICATE_TABLE_SETTING",t[t.INVALID_TABLEGROUP_CONTEXT=3013]="INVALID_TABLEGROUP_CONTEXT",t[t.INVALID_TABLEGROUP_ELEMENT_NAME=3014]="INVALID_TABLEGROUP_ELEMENT_NAME",t[t.DUPLICATE_TABLEGROUP_ELEMENT_NAME=3015]="DUPLICATE_TABLEGROUP_ELEMENT_NAME",t[t.DUPLICATE_TABLEGROUP_FIELD_NAME=3016]="DUPLICATE_TABLEGROUP_FIELD_NAME",t[t.INVALID_TABLEGROUP_FIELD=3017]="INVALID_TABLEGROUP_FIELD",t[t.EMPTY_TABLE=3018]="EMPTY_TABLE",t[t.INVALID_COLUMN=3019]="INVALID_COLUMN",t[t.INVALID_COLUMN_NAME=3020]="INVALID_COLUMN_NAME",t[t.UNKNOWN_COLUMN_SETTING=3021]="UNKNOWN_COLUMN_SETTING",t[t.INVALID_COLUMN_TYPE=3022]="INVALID_COLUMN_TYPE",t[t.DUPLICATE_COLUMN_NAME=3023]="DUPLICATE_COLUMN_NAME",t[t.DUPLICATE_COLUMN_SETTING=3024]="DUPLICATE_COLUMN_SETTING",t[t.INVALID_COLUMN_SETTING_VALUE=3025]="INVALID_COLUMN_SETTING_VALUE",t[t.INVALID_ENUM_CONTEXT=3026]="INVALID_ENUM_CONTEXT",t[t.INVALID_ENUM_ELEMENT_NAME=3027]="INVALID_ENUM_ELEMENT_NAME",t[t.INVALID_ENUM_ELEMENT=3028]="INVALID_ENUM_ELEMENT",t[t.DUPLICATE_ENUM_ELEMENT_NAME=3029]="DUPLICATE_ENUM_ELEMENT_NAME",t[t.UNKNOWN_ENUM_ELEMENT_SETTING=3030]="UNKNOWN_ENUM_ELEMENT_SETTING",t[t.DUPLICATE_ENUM_ELEMENT_SETTING=3031]="DUPLICATE_ENUM_ELEMENT_SETTING",t[t.INVALID_ENUM_ELEMENT_SETTING=3032]="INVALID_ENUM_ELEMENT_SETTING",t[t.EMPTY_ENUM=3033]="EMPTY_ENUM",t[t.INVALID_REF_CONTEXT=3034]="INVALID_REF_CONTEXT",t[t.UNKNOWN_REF_SETTING=3035]="UNKNOWN_REF_SETTING",t[t.DUPLICATE_REF_SETTING=3036]="DUPLICATE_REF_SETTING",t[t.INVALID_REF_SETTING_VALUE=3037]="INVALID_REF_SETTING_VALUE",t[t.INVALID_REF_RELATIONSHIP=3038]="INVALID_REF_RELATIONSHIP",t[t.INVALID_REF_FIELD=3039]="INVALID_REF_FIELD",t[t.EMPTY_REF=3040]="EMPTY_REF",t[t.REF_REDEFINED=3041]="REF_REDEFINED",t[t.INVALID_NOTE_CONTEXT=3042]="INVALID_NOTE_CONTEXT",t[t.INVALID_NOTE=3043]="INVALID_NOTE",t[t.NOTE_REDEFINED=3044]="NOTE_REDEFINED",t[t.NOTE_CONTENT_REDEFINED=3045]="NOTE_CONTENT_REDEFINED",t[t.EMPTY_NOTE=3046]="EMPTY_NOTE",t[t.INVALID_INDEXES_CONTEXT=3047]="INVALID_INDEXES_CONTEXT",t[t.INVALID_INDEXES_FIELD=3048]="INVALID_INDEXES_FIELD",t[t.INVALID_INDEX=3049]="INVALID_INDEX",t[t.UNKNOWN_INDEX_SETTING=3050]="UNKNOWN_INDEX_SETTING",t[t.DUPLICATE_INDEX_SETTING=3051]="DUPLICATE_INDEX_SETTING",t[t.UNEXPECTED_INDEX_SETTING_VALUE=3052]="UNEXPECTED_INDEX_SETTING_VALUE",t[t.INVALID_INDEX_SETTING_VALUE=3053]="INVALID_INDEX_SETTING_VALUE",t[t.INVALID_PROJECT_CONTEXT=3054]="INVALID_PROJECT_CONTEXT",t[t.PROJECT_REDEFINED=3055]="PROJECT_REDEFINED",t[t.INVALID_PROJECT_FIELD=3056]="INVALID_PROJECT_FIELD",t[t.INVALID_CUSTOM_CONTEXT=3057]="INVALID_CUSTOM_CONTEXT",t[t.INVALID_CUSTOM_ELEMENT_VALUE=3058]="INVALID_CUSTOM_ELEMENT_VALUE",t[t.INVALID_ELEMENT_IN_SIMPLE_BODY=3059]="INVALID_ELEMENT_IN_SIMPLE_BODY",t[t.BINDING_ERROR=4e3]="BINDING_ERROR",t[t.UNSUPPORTED=5e3]="UNSUPPORTED",t[t.CIRCULAR_REF=5001]="CIRCULAR_REF",t[t.SAME_ENDPOINT=5002]="SAME_ENDPOINT",t[t.UNEQUAL_FIELDS_BINARY_REF=5003]="UNEQUAL_FIELDS_BINARY_REF",t[t.CONFLICTING_SETTING=5004]="CONFLICTING_SETTING",t[t.TABLE_REAPPEAR_IN_TABLEGROUP=5005]="TABLE_REAPPEAR_IN_TABLEGROUP",t))(o||{});class c extends Error{constructor(e,n,s){super(n),this.code=e,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 X{constructor(e,n){this.value=e,this.errors=n===void 0?[]:n}getValue(){return this.value}getErrors(){return this.errors}chain(e){const n=e(this.value),s=[...this.errors,...n.errors];return new X(n.value,s)}map(e){return new X(e(this.value),this.errors)}}function on(t,e,n){if(!t||!me(t)||e.length===0)return new y;const s=[...e],i=Xe(t).unwrap(),r=s.pop();if(!(r instanceof K))return new y;const a=b.last(s)instanceof R?s.pop():void 0;return s.length===3&&Xe(s[1]).unwrap().value==="as"?new x(n.create(A,{type:i,name:s[0],as:Xe(s[1]).unwrap(),alias:s[2],attributeList:a,body:r})):s.length===1?new x(n.create(A,{type:i,name:s[0],attributeList:a,body:r})):s.length===0?new x(n.create(A,{type:i,attributeList:a,body:r})):new y}function ht(t){return t.kind===u.IDENTIFIER&&t.value==="as"}function N(t){t&&(t instanceof G?ln(t):cn(t))}function ln(t){t.kind!==u.EOF&&(t.isInvalid=!0)}function cn(t){if(t instanceof A)N(t.type),N(t.name),N(t.as),N(t.alias),N(t.bodyColon),N(t.attributeList),N(t.body);else if(t instanceof q)t.identifiers.forEach(N);else if(t instanceof ie)N(t.name),N(t.colon),N(t.value);else if(t instanceof H)N(t.op),N(t.expression);else if(t instanceof J)N(t.leftExpression),N(t.op),N(t.rightExpression);else if(t instanceof Me)N(t.op),N(t.expression);else if(t instanceof K)N(t.blockOpenBrace),t.body.forEach(N),N(t.blockCloseBrace);else if(t instanceof R)N(t.listOpenBracket),t.commaList.forEach(N),t.elementList.forEach(N),N(t.listCloseBracket);else if(t instanceof ee)N(t.tupleOpenParen),t.commaList.forEach(N),t.elementList.forEach(N),N(t.tupleCloseParen);else if(t instanceof Z)N(t.callee),N(t.argumentList);else if(t instanceof v)N(t.callee),t.args.forEach(N);else if(t instanceof M)N(t.expression);else if(t instanceof se)N(t.value);else if(t instanceof te)N(t.variable);else if(t instanceof be)N(t.literal);else throw t instanceof Ye?new Error("This case is handled by the TupleExpressionNode case"):new Error("Unreachable case in markInvalidNode")}function yt(t){return!!(t!=null&&t.isInvalid)}function U(...t){return t.filter(e=>e!==void 0)}function un(t){if(t instanceof j)return U(...t.body,t.eof);if(t instanceof A)return U(t.type,t.name,t.as,t.alias,t.attributeList,t.bodyColon,t.body);if(t instanceof ie)return U(t.name,t.colon,t.value);if(t instanceof q)return t.identifiers;if(t instanceof be)return t.literal?[t.literal]:[];if(t instanceof te)return U(t.variable);if(t instanceof H)return U(t.op,t.expression);if(t instanceof J)return U(t.leftExpression,t.op,t.rightExpression);if(t instanceof Me)return U(t.expression,t.op);if(t instanceof se)return U(t.value);if(t instanceof v)return U(t.callee,...t.args);if(t instanceof K)return U(t.blockOpenBrace,...t.body,t.blockCloseBrace);if(t instanceof R)return U(t.listOpenBracket,...ut(t.elementList,t.commaList),t.listCloseBracket);if(t instanceof ee)return U(t.tupleOpenParen,...ut(t.elementList,t.commaList),t.tupleCloseParen);if(t instanceof Z)return U(t.callee,t.argumentList);if(t instanceof M)return U(t.expression);if(t instanceof he)return U(t.array,t.indexer);throw t instanceof Ye?new Error("This case is already handled by TupleExpressionNode"):new Error("Unreachable - no other possible cases")}function Xe(t){return V(t)?new x(t.expression.variable):new y}function Y(t){var e;return t instanceof M&&(t.expression instanceof te&&t.expression.variable instanceof G&&t.expression.variable.kind===u.QUOTED_STRING||t.expression instanceof be&&((e=t.expression.literal)==null?void 0:e.kind)===u.STRING_LITERAL)}function V(t){return t instanceof M&&t.expression instanceof te&&t.expression.variable instanceof G}function me(t){var e;return t instanceof M&&t.expression instanceof te&&((e=t.expression.variable)==null?void 0:e.kind)===u.IDENTIFIER}function Ke(t){var e;return t instanceof J&&t.leftExpression instanceof k&&t.rightExpression instanceof k&&((e=t.op)==null?void 0:e.value)==="."}function Te(t){if(t===void 0)return new y;const e=t.identifiers.map(n=>n.value).join(" ");return e===""?new y:new x(e)}class hn{constructor(e){this.start={offset:0,line:0,column:0},this.current={offset:0,line:0,column:0},this.tokens=[],this.errors=[],this.text=e}isAtEnd(){return this.current.offset>=this.text.length}advance(){const e=this.peek();return this.current={...this.current},e===`
2
- `?(this.current.line+=1,this.current.column=0):this.current.column+=1,this.current.offset+=1,e}peek(e=0){if(!(this.current.offset+e>=this.text.length))return this.text[this.current.offset+e]}check(e){for(let n=0;n<e.length;n+=1)if(e[n]!==this.peek(n))return!1;return!0}match(e){return this.check(e)?(e.split("").forEach(()=>this.advance()),!0):!1}addToken(e,n=!1){this.tokens.push(this.createToken(e,n))}createToken(e,n=!1){return G.create(e,this.start,this.current,this.text.substring(this.start.offset,this.current.offset),n)}lex(){return this.scanTokens(),this.tokens.push(G.create(u.EOF,this.start,this.current,"",!1)),this.gatherTrivia(),this.gatherInvalid(),new X(this.tokens,this.errors)}scanTokens(){for(;!this.isAtEnd();){const e=this.advance();switch(e){case" ":this.addToken(u.SPACE);break;case"\r":break;case`
3
- `:this.addToken(u.NEWLINE);break;case" ":this.addToken(u.TAB);break;case",":this.addToken(u.COMMA);break;case"(":this.addToken(u.LPAREN);break;case")":this.addToken(u.RPAREN);break;case"[":this.addToken(u.LBRACKET);break;case"]":this.addToken(u.RBRACKET);break;case"{":this.addToken(u.LBRACE);break;case"}":this.addToken(u.RBRACE);break;case";":this.addToken(u.SEMICOLON);break;case":":this.addToken(u.COLON);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();break;default:if(ot(e)){this.operator();break}if(Fe(e)){this.identifier();break}if(Re(e)){this.numericLiteralOrIdentifier();break}this.addToken(u.OP,!0),this.errors.push(new c(o.UNKNOWN_SYMBOL,`Unexpected token '${e}'`,this.createToken(u.OP,!0)));break}this.start={...this.current}}}gatherTrivia(){let e=!0,n=[],s;const i=[];for(const r of this.tokens)Yt(r)?(n.push(r),r.kind===u.NEWLINE&&s&&(s.trailingTrivia=n,e=!0,s=void 0,n=[])):(e?r.leadingTrivia=n:s.trailingTrivia=n,i.push(r),n=[],s=r,e=!1);this.tokens=i}gatherInvalid(){let e;const n=[],s=[];for(e=0;e<this.tokens.length&&yt(this.tokens[e]);e+=1)s.push(this.tokens[e]);let i=this.tokens[e];for(i.leadingInvalid=[...s,...i.leadingInvalid];e<this.tokens.length;e+=1){const r=this.tokens[e];r.isInvalid?i.trailingInvalid.push(r):(i=r,n.push(r))}this.tokens=n}consumeUntil(e,n,{allowNewline:s,allowEof:i,raw:r,consumeStopSequence:a=!0}){let l="";for(;!this.isAtEnd()&&(s||!this.check(`
4
- `))&&!this.check(n);)this.peek()==="\\"&&!r?(this.advance(),l+=this.escapedString()):l+=this.advance();if(this.isAtEnd()&&!i){const p=this.createToken(e,!0);this.tokens.push(p),this.errors.push(new c(o.UNEXPECTED_EOF,"EOF reached while parsing",p));return}if(this.check(`
5
- `)&&!s){const p=this.createToken(e,!0);this.tokens.push(p),this.errors.push(new c(o.UNEXPECTED_NEWLINE,"Invalid newline encountered while parsing",p));return}a&&this.match(n),this.tokens.push(G.create(e,this.start,this.current,l,!1))}singleLineStringLiteral(){this.consumeUntil(u.STRING_LITERAL,"'",{allowNewline:!1,allowEof:!1,raw:!1})}multilineStringLiteral(){this.consumeUntil(u.STRING_LITERAL,"'''",{allowNewline:!0,allowEof:!1,raw:!1})}functionExpression(){this.consumeUntil(u.FUNCTION_EXPRESSION,"`",{allowNewline:!1,allowEof:!1,raw:!0})}quotedVariable(){this.consumeUntil(u.QUOTED_STRING,'"',{allowNewline:!1,allowEof:!1,raw:!1})}singleLineComment(){this.consumeUntil(u.SINGLE_LINE_COMMENT,`
6
- `,{allowNewline:!0,allowEof:!0,raw:!0,consumeStopSequence:!1})}multilineComment(){this.consumeUntil(u.MULTILINE_COMMENT,"*/",{allowNewline:!0,allowEof:!1,raw:!0})}identifier(){for(;!this.isAtEnd()&&Ee(this.peek());)this.advance();this.addToken(u.IDENTIFIER)}operator(){for(;ot(this.peek());)this.advance();this.addToken(u.OP)}numericLiteralOrIdentifier(){let e=0;if(this.isAtEnd())return this.addToken(u.NUMERIC_LITERAL);for(;!this.isAtEnd();){const n=this.check(".");if(e+=n?1:0,e>1)break;if(!n&&this.current.offset===this.text.length-1)return this.advance(),this.addToken(u.NUMERIC_LITERAL);if(!n&&!Ee(this.peek()))return this.addToken(u.NUMERIC_LITERAL);if(!n&&!Re(this.peek()))break;this.advance()}if(e>0){for(;!this.isAtEnd()&&(this.check(".")||Ee(this.peek()));)this.advance();const n=this.createToken(u.NUMERIC_LITERAL,!0);this.tokens.push(n),this.errors.push(new c(o.UNKNOWN_TOKEN,"Invalid number",n))}else{for(;!this.isAtEnd()&&Ee(this.peek());)this.advance();const n=this.createToken(u.IDENTIFIER,!1);this.tokens.push(n)}}colorLiteral(){for(;!this.isAtEnd()&&Ee(this.peek());)this.advance();this.addToken(u.COLOR_LITERAL)}escapedString(){const e={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(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("lodash");var h=(t=>(t.SPACE="<space>",t.TAB="<tab>",t.NEWLINE="<newline>",t.COMMA="<comma>",t.LPAREN="<lparen>",t.RPAREN="<rparen>",t.LBRACE="<lbrace>",t.RBRACE="<rbrace>",t.LBRACKET="<lbracket>",t.RBRACKET="<rbracket>",t.LANGLE="<langle>",t.RANGLE="<rangle>",t.OP="<op>",t.EOF="<eof>",t.NUMERIC_LITERAL="<number>",t.STRING_LITERAL="<string>",t.COLOR_LITERAL="<color>",t.FUNCTION_EXPRESSION="<function-expression>",t.QUOTED_STRING="<variable>",t.IDENTIFIER="<identifier>",t.SEMICOLON="<semicolon>",t.COLON="<colon>",t.TILDE="<tilde>",t.SINGLE_LINE_COMMENT="<single-line-comment>",t.MULTILINE_COMMENT="<multiline-comment>",t))(h||{});function en(t){switch(t.kind){case"<newline>":case"<space>":case"<tab>":case"<single-line-comment>":case"<multiline-comment>":return!0;default:return!1}}function ht(t){if(!t)return!1;switch(t){case"+":case"-":case"*":case"/":case"%":case"<":case">":case"=":case"!":case".":case"&":case"|":case"~":return!0;default:return!1}}function ft(t){return t!==void 0&&t.kind==="<op>"}class J{constructor(e,n,s,i,a){this.kind=e,this.startPos=n,this.endPos=s,this.value=i,this.leadingTrivia=[],this.trailingTrivia=[],this.leadingInvalid=[],this.trailingInvalid=[],this.isInvalid=a,this.start=n.offset,this.end=s.offset}static create(e,n,s,i,a){return new J(e,n,s,i,a)}}function yt(t){return t.trailingTrivia.find(({kind:e})=>e===h.NEWLINE)!==void 0}function pt(t,e){return e.leadingTrivia.find(({kind:s})=>s===h.NEWLINE)!==void 0||yt(t)}function Ze(t){return t.trailingTrivia.find(({kind:e})=>[h.SPACE,h.TAB].includes(e))!==void 0}function kt(t){return t.trailingTrivia.length===0?t.end:kt(I.last(t.trailingTrivia))}function St(t){return t.leadingTrivia.length===0?t.start:St(t.leadingTrivia[0])}function tn(t){return[h.SINGLE_LINE_COMMENT,h.MULTILINE_COMMENT].includes(t.kind)}class nn{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class D{constructor(e,n,s){this.id=e,this.kind=n;const i=s.find(r=>r!==void 0&&!Number.isNaN(r.start));i?(this.startPos=i.startPos,this.fullStart=i instanceof J?St(i):i.fullStart):(this.startPos={offset:NaN,column:NaN,line:NaN},this.fullStart=NaN);const a=[...s].reverse().find(r=>r!==void 0&&!Number.isNaN(r.end));a?(this.endPos=a.endPos,this.fullEnd=a instanceof J?kt(a):a.fullEnd):(this.endPos={offset:NaN,column:NaN,line:NaN},this.fullEnd=NaN),this.start=this.startPos.offset,this.end=this.endPos.offset}}var Ie=(t=>(t.PROGRAM="<program>",t.ELEMENT_DECLARATION="<element-declaration>",t.ATTRIBUTE="<attribute>",t.IDENTIFIER_STREAM="<identifer-stream>",t.LITERAL="<literal>",t.VARIABLE="<variable>",t.PREFIX_EXPRESSION="<prefix-expression>",t.INFIX_EXPRESSION="<infix-expression>",t.POSTFIX_EXPRESSION="<postfix-expression>",t.FUNCTION_EXPRESSION="<function-expression>",t.FUNCTION_APPLICATION="<function-application>",t.BLOCK_EXPRESSION="<block-expression>",t.LIST_EXPRESSION="<list-expression>",t.TUPLE_EXPRESSION="<tuple-expression>",t.CALL_EXPRESSION="<call-expression>",t.PRIMARY_EXPRESSION="<primary-expression>",t.GROUP_EXPRESSION="<group-expression>",t.DUMMY="<dummy>",t.ARRAY="<array>",t.PARTIAL_INJECTION="<partial-injection>",t))(Ie||{});class Z extends D{constructor({body:e=[],eof:n},s){super(s,"<program>",[...e,n]),this.body=e,this.eof=n}}class y extends D{constructor({type:e,name:n,as:s,alias:i,attributeList:a,bodyColon:r,body:c},f){if(super(f,"<element-declaration>",[e,n,s,i,a,r,c]),c&&r&&!(c instanceof v||c instanceof y))throw new Error("If an element has a simple body, it must be a function application node");this.type=e,this.name=n,this.as=s,this.alias=i,this.attributeList=a,this.bodyColon=r,this.body=c}}class ne extends D{constructor({identifiers:e=[]},n){super(n,"<identifer-stream>",e||[]),this.identifiers=e}}class se extends D{constructor({name:e,colon:n,value:s},i){super(i,"<attribute>",[e,n,s]),this.name=e,this.value=s,this.colon=n}}class K extends D{constructor({op:e,expression:n},s){super(s,"<prefix-expression>",[e,n]),this.op=e,this.expression=n}}class le extends D{constructor({op:e,leftExpression:n,rightExpression:s},i){super(i,"<infix-expression>",[n,e,s]),this.op=e,this.leftExpression=n,this.rightExpression=s}}class je extends D{constructor({op:e,expression:n},s){super(s,"<postfix-expression>",[n,e]),this.op=e,this.expression=n}}class ce extends D{constructor({value:e},n){super(n,"<function-expression>",[e]),this.value=e}}class v extends D{constructor({callee:e,args:n=[]},s){super(s,"<function-application>",[e,...n]),this.callee=e,this.args=n}}class re extends D{constructor({blockOpenBrace:e,body:n=[],blockCloseBrace:s},i){super(i,"<block-expression>",[e,...n,s]),this.blockOpenBrace=e,this.body=n,this.blockCloseBrace=s}}class Le extends D{constructor({op:e,partial:n},s){super(s,"<partial-injection>",[e,n]),this.partial=n}}class R extends D{constructor({listOpenBracket:e,elementList:n=[],commaList:s=[],listCloseBracket:i},a){super(a,"<list-expression>",[e,...Pt(n,s),i]),this.listOpenBracket=e,this.elementList=n,this.commaList=s,this.listCloseBracket=i}}class fe extends D{constructor({tupleOpenParen:e,elementList:n=[],commaList:s=[],tupleCloseParen:i},a){super(a,"<tuple-expression>",[e,...Pt(n,s),i]),this.tupleOpenParen=e,this.elementList=n,this.commaList=s,this.tupleCloseParen=i}}class et extends fe{constructor({groupOpenParen:e,expression:n,groupCloseParen:s},i){super({tupleOpenParen:e,elementList:n&&[n],commaList:[],tupleCloseParen:s},i),this.kind="<group-expression>"}}class q extends D{constructor({callee:e,argumentList:n},s){super(s,"<call-expression>",[e,n]),this.callee=e,this.argumentList=n}}class ve extends D{constructor({literal:e},n){super(n,"<literal>",[e]),this.literal=e}}class ae extends D{constructor({variable:e},n){super(n,"<variable>",[e]),this.variable=e}}class G extends D{constructor({expression:e},n){super(n,"<primary-expression>",[e]),this.expression=e}}class Ue extends D{constructor({pre:e},n){const s=J.create(h.SPACE,e.endPos,e.endPos," ",!1);super(n,"<dummy>",[s])}}class ue extends D{constructor({expression:e,indexer:n},s){super(s,"<array>",[e,n]),this.array=e,this.indexer=n}}function Pt(t,e){if(!t||t.length===0)return e||[];if(!e||e.length===0)return t||[];const[n]=t,[s]=e;return(n.start<s.start?I.flatten(I.zip(t,e)):I.flatten(I.zip(e,t))).filter(i=>i!==null)}function sn(t,e=!1){return JSON.stringify(t,function(n,s){var i;return!(this instanceof Z)&&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(a=>a.id),declaration:(i=s==null?void 0:s.declaration)==null?void 0:i.id}:n==="referee"||n==="parent"||n==="declaration"?s==null?void 0:s.id:n==="symbolTable"?Object.fromEntries(s.table):s},e?2:0)}class O{constructor(e){this.value=e}unwrap(){return this.value}unwrap_or(e){return this.value}and_then(e){return e(this.value)}map(e){return new O(e(this.value))}isOk(){return!0}}class x{unwrap(){throw new Error("Trying to unwrap a None value")}unwrap_or(e){return e}and_then(e){return new x}map(e){return new x}isOk(){return!1}}var m=(t=>(t.Schema="Schema",t.Table="Table",t.Column="Column",t.TableGroup="TableGroup",t.TableGroupField="TableGroup field",t.Enum="Enum",t.EnumField="Enum field",t.Note="Note",t.TablePartial="TablePartial",t.TablePartialInjection="TablePartialInjection",t))(m||{});function tt(t){return`Schema:${t}`}function Be(t){return`Table:${t}`}function We(t){return`Column:${t}`}function nt(t){return`Enum:${t}`}function st(t){return`Enum field:${t}`}function it(t){return`TableGroup:${t}`}function at(t){return`TableGroup field:${t}`}function an(t){return`Note:${t}`}function xt(t){return`TablePartial:${t}`}function rn(t){return`TablePartialInjection:${t}`}function Me(t,e){switch(e){case"Column":return We(t);case"Enum":return nt(t);case"Enum field":return st(t);case"Schema":return tt(t);case"Table":return Be(t);case"TableGroup":return it(t);case"TableGroup field":return at(t);case"TablePartial":return xt(t);default:throw new Error("Unreachable")}}function oe(t){const[e,n]=t.split(":");return Object.values(m).includes(e)?new O({name:n,kind:e}):new x}function on(t){const e=oe(t).unwrap_or(void 0);if(!e)return!1;const{kind:n,name:s}=e;return n==="Schema"&&s==="public"}function ln(t){const e=oe(t).unwrap_or(void 0);if(!e)return!1;const{kind:n}=e;return n==="TablePartialInjection"}function cn(t){const e=oe(t).unwrap_or(void 0);if(!e)return null;const{kind:n,name:s}=e;return n==="TablePartialInjection"?Me(s,"TablePartial"):null}function un(t){return[tt,Be,nt,it,We,st,at].map(e=>e(t))}function qe(t){return!!t.match(/(\p{L}|_|\p{M})/gu)}function Ve(t){const[e]=t;return e>="0"&&e<="9"}function hn(t){const[e]=t;return Ve(e)||qe(e)&&e.toLowerCase()>="a"&&e.toLowerCase()<="f"}function Ae(t){return qe(t)||Ve(t)}function dt(t,e){const n=[],s=Math.min(t.length,e.length);for(let i=0;i<s;i+=1)n.push(t[i],e[i]);return n.push(...t.slice(s),...e.slice(s)),n}function ke(t,e){return t>=e.start&&t<e.end}class fn{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class Dt{constructor({symbolTable:e},n){this.references=[],this.id=n,this.symbolTable=e}}class pn{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class dn{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class Ot{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class Rt{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class En{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class Nn{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class mn{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class Tn{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class bn{constructor({injectorId:e},n){this.references=[],this.id=n,this.injectorId=e}}var o=(t=>(t[t.UNKNOWN_SYMBOL=1e3]="UNKNOWN_SYMBOL",t[t.UNEXPECTED_SYMBOL=1001]="UNEXPECTED_SYMBOL",t[t.UNEXPECTED_EOF=1002]="UNEXPECTED_EOF",t[t.UNEXPECTED_NEWLINE=1003]="UNEXPECTED_NEWLINE",t[t.UNKNOWN_TOKEN=1004]="UNKNOWN_TOKEN",t[t.UNEXPECTED_TOKEN=1005]="UNEXPECTED_TOKEN",t[t.UNEXPECTED_ELEMENT_DECLARATION=1006]="UNEXPECTED_ELEMENT_DECLARATION",t[t.MISSING_SPACES=1007]="MISSING_SPACES",t[t.UNKNOWN_PREFIX_OP=1008]="UNKNOWN_PREFIX_OP",t[t.INVALID_OPERAND=1009]="INVALID_OPERAND",t[t.EMPTY_ATTRIBUTE_NAME=1010]="EMPTY_ATTRIBUTE_NAME",t[t.INVALID_ESCAPE_SEQUENCE=1011]="INVALID_ESCAPE_SEQUENCE",t[t.INVALID_NAME=3e3]="INVALID_NAME",t[t.UNEXPECTED_NAME=3001]="UNEXPECTED_NAME",t[t.NAME_NOT_FOUND=3002]="NAME_NOT_FOUND",t[t.DUPLICATE_NAME=3003]="DUPLICATE_NAME",t[t.INVALID_ALIAS=3004]="INVALID_ALIAS",t[t.UNEXPECTED_ALIAS=3005]="UNEXPECTED_ALIAS",t[t.UNEXPECTED_SETTINGS=3006]="UNEXPECTED_SETTINGS",t[t.INVALID_SETTINGS=3007]="INVALID_SETTINGS",t[t.UNEXPECTED_SIMPLE_BODY=3008]="UNEXPECTED_SIMPLE_BODY",t[t.UNEXPECTED_COMPLEX_BODY=3009]="UNEXPECTED_COMPLEX_BODY",t[t.INVALID_TABLE_CONTEXT=3010]="INVALID_TABLE_CONTEXT",t[t.INVALID_TABLE_SETTING=3011]="INVALID_TABLE_SETTING",t[t.DUPLICATE_TABLE_SETTING=3012]="DUPLICATE_TABLE_SETTING",t[t.INVALID_TABLE_FIELD=3013]="INVALID_TABLE_FIELD",t[t.INVALID_TABLEGROUP_CONTEXT=3014]="INVALID_TABLEGROUP_CONTEXT",t[t.INVALID_TABLEGROUP_ELEMENT_NAME=3015]="INVALID_TABLEGROUP_ELEMENT_NAME",t[t.DUPLICATE_TABLEGROUP_ELEMENT_NAME=3016]="DUPLICATE_TABLEGROUP_ELEMENT_NAME",t[t.DUPLICATE_TABLEGROUP_FIELD_NAME=3017]="DUPLICATE_TABLEGROUP_FIELD_NAME",t[t.INVALID_TABLEGROUP_FIELD=3018]="INVALID_TABLEGROUP_FIELD",t[t.INVALID_TABLE_PARTIAL_CONTEXT=3019]="INVALID_TABLE_PARTIAL_CONTEXT",t[t.INVALID_TABLE_PARTIAL_ELEMENT_NAME=3020]="INVALID_TABLE_PARTIAL_ELEMENT_NAME",t[t.INVALID_TABLE_PARTIAL_SETTING=3021]="INVALID_TABLE_PARTIAL_SETTING",t[t.DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME=3022]="DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME",t[t.DUPLICATE_TABLE_PARTIAL_SETTING=3023]="DUPLICATE_TABLE_PARTIAL_SETTING",t[t.INVALID_TABLE_PARTIAL_INJECTION=3024]="INVALID_TABLE_PARTIAL_INJECTION",t[t.INVALID_TABLE_PARTIAL_INJECTION_OP=3025]="INVALID_TABLE_PARTIAL_INJECTION_OP",t[t.INVALID_TABLE_PARTIAL_INJECTION_NAME=3026]="INVALID_TABLE_PARTIAL_INJECTION_NAME",t[t.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME=3027]="DUPLICATE_TABLE_PARTIAL_INJECTION_NAME",t[t.EMPTY_TABLE=3028]="EMPTY_TABLE",t[t.INVALID_COLUMN=3029]="INVALID_COLUMN",t[t.INVALID_COLUMN_NAME=3030]="INVALID_COLUMN_NAME",t[t.UNKNOWN_COLUMN_SETTING=3031]="UNKNOWN_COLUMN_SETTING",t[t.INVALID_COLUMN_TYPE=3032]="INVALID_COLUMN_TYPE",t[t.DUPLICATE_COLUMN_NAME=3033]="DUPLICATE_COLUMN_NAME",t[t.DUPLICATE_COLUMN_SETTING=3034]="DUPLICATE_COLUMN_SETTING",t[t.INVALID_COLUMN_SETTING_VALUE=3035]="INVALID_COLUMN_SETTING_VALUE",t[t.INVALID_ENUM_CONTEXT=3036]="INVALID_ENUM_CONTEXT",t[t.INVALID_ENUM_ELEMENT_NAME=3037]="INVALID_ENUM_ELEMENT_NAME",t[t.INVALID_ENUM_ELEMENT=3038]="INVALID_ENUM_ELEMENT",t[t.DUPLICATE_ENUM_ELEMENT_NAME=3039]="DUPLICATE_ENUM_ELEMENT_NAME",t[t.UNKNOWN_ENUM_ELEMENT_SETTING=3040]="UNKNOWN_ENUM_ELEMENT_SETTING",t[t.DUPLICATE_ENUM_ELEMENT_SETTING=3041]="DUPLICATE_ENUM_ELEMENT_SETTING",t[t.INVALID_ENUM_ELEMENT_SETTING=3042]="INVALID_ENUM_ELEMENT_SETTING",t[t.EMPTY_ENUM=3043]="EMPTY_ENUM",t[t.INVALID_REF_CONTEXT=3044]="INVALID_REF_CONTEXT",t[t.UNKNOWN_REF_SETTING=3045]="UNKNOWN_REF_SETTING",t[t.DUPLICATE_REF_SETTING=3046]="DUPLICATE_REF_SETTING",t[t.INVALID_REF_SETTING_VALUE=3047]="INVALID_REF_SETTING_VALUE",t[t.INVALID_REF_RELATIONSHIP=3048]="INVALID_REF_RELATIONSHIP",t[t.INVALID_REF_FIELD=3049]="INVALID_REF_FIELD",t[t.EMPTY_REF=3050]="EMPTY_REF",t[t.REF_REDEFINED=3051]="REF_REDEFINED",t[t.INVALID_NOTE_CONTEXT=3052]="INVALID_NOTE_CONTEXT",t[t.INVALID_NOTE=3053]="INVALID_NOTE",t[t.NOTE_REDEFINED=3054]="NOTE_REDEFINED",t[t.NOTE_CONTENT_REDEFINED=3055]="NOTE_CONTENT_REDEFINED",t[t.EMPTY_NOTE=3056]="EMPTY_NOTE",t[t.INVALID_INDEXES_CONTEXT=3057]="INVALID_INDEXES_CONTEXT",t[t.INVALID_INDEXES_FIELD=3058]="INVALID_INDEXES_FIELD",t[t.INVALID_INDEX=3059]="INVALID_INDEX",t[t.UNKNOWN_INDEX_SETTING=3060]="UNKNOWN_INDEX_SETTING",t[t.DUPLICATE_INDEX_SETTING=3061]="DUPLICATE_INDEX_SETTING",t[t.UNEXPECTED_INDEX_SETTING_VALUE=3062]="UNEXPECTED_INDEX_SETTING_VALUE",t[t.INVALID_INDEX_SETTING_VALUE=3063]="INVALID_INDEX_SETTING_VALUE",t[t.INVALID_PROJECT_CONTEXT=3064]="INVALID_PROJECT_CONTEXT",t[t.PROJECT_REDEFINED=3065]="PROJECT_REDEFINED",t[t.INVALID_PROJECT_FIELD=3066]="INVALID_PROJECT_FIELD",t[t.INVALID_CUSTOM_CONTEXT=3067]="INVALID_CUSTOM_CONTEXT",t[t.INVALID_CUSTOM_ELEMENT_VALUE=3068]="INVALID_CUSTOM_ELEMENT_VALUE",t[t.INVALID_ELEMENT_IN_SIMPLE_BODY=3069]="INVALID_ELEMENT_IN_SIMPLE_BODY",t[t.BINDING_ERROR=4e3]="BINDING_ERROR",t[t.UNSUPPORTED=5e3]="UNSUPPORTED",t[t.CIRCULAR_REF=5001]="CIRCULAR_REF",t[t.SAME_ENDPOINT=5002]="SAME_ENDPOINT",t[t.UNEQUAL_FIELDS_BINARY_REF=5003]="UNEQUAL_FIELDS_BINARY_REF",t[t.CONFLICTING_SETTING=5004]="CONFLICTING_SETTING",t[t.TABLE_REAPPEAR_IN_TABLEGROUP=5005]="TABLE_REAPPEAR_IN_TABLEGROUP",t))(o||{});class l extends Error{constructor(e,n,s){super(n),this.code=e,this.diagnostic=n,this.nodeOrToken=s,this.start=s.start,this.end=s.end,this.name=this.constructor.name,Object.setPrototypeOf(this,l.prototype)}}class Y{constructor(e,n){this.value=e,this.errors=n===void 0?[]:n}getValue(){return this.value}getErrors(){return this.errors}chain(e){const n=e(this.value),s=[...this.errors,...n.errors];return new Y(n.value,s)}map(e){return new Y(e(this.value),this.errors)}}function In(t,e,n){if(!t||!he(t)||e.length===0)return new x;const s=[...e],i=Je(t).unwrap(),a=s.pop();if(!(a instanceof re))return new x;const r=I.last(s)instanceof R?s.pop():void 0;return s.length===3&&Je(s[1]).unwrap().value==="as"?new O(n.create(y,{type:i,name:s[0],as:Je(s[1]).unwrap(),alias:s[2],attributeList:r,body:a})):s.length===1?new O(n.create(y,{type:i,name:s[0],attributeList:r,body:a})):s.length===0?new O(n.create(y,{type:i,attributeList:r,body:a})):new x}function Et(t){return t.kind===h.IDENTIFIER&&t.value==="as"}function T(t){t&&(t instanceof J?Ln(t):_n(t))}function Ln(t){t.kind!==h.EOF&&(t.isInvalid=!0)}function _n(t){if(t instanceof y)T(t.type),T(t.name),T(t.as),T(t.alias),T(t.bodyColon),T(t.attributeList),T(t.body);else if(t instanceof ne)t.identifiers.forEach(T);else if(t instanceof se)T(t.name),T(t.colon),T(t.value);else if(t instanceof K)T(t.op),T(t.expression);else if(t instanceof le)T(t.leftExpression),T(t.op),T(t.rightExpression);else if(t instanceof je)T(t.op),T(t.expression);else if(t instanceof re)T(t.blockOpenBrace),t.body.forEach(T),T(t.blockCloseBrace);else if(t instanceof R)T(t.listOpenBracket),t.commaList.forEach(T),t.elementList.forEach(T),T(t.listCloseBracket);else if(t instanceof fe)T(t.tupleOpenParen),t.commaList.forEach(T),t.elementList.forEach(T),T(t.tupleCloseParen);else if(t instanceof q)T(t.callee),T(t.argumentList);else if(t instanceof v)T(t.callee),t.args.forEach(T);else if(t instanceof G)T(t.expression);else if(t instanceof ce)T(t.value);else if(t instanceof ae)T(t.variable);else if(t instanceof ve)T(t.literal);else throw t instanceof et?new Error("This case is handled by the TupleExpressionNode case"):new Error("Unreachable case in markInvalidNode")}function Ut(t){return!!(t!=null&&t.isInvalid)}function X(...t){return t.filter(e=>e!==void 0)}function An(t){if(t instanceof Z)return X(...t.body,t.eof);if(t instanceof y)return X(t.type,t.name,t.as,t.alias,t.attributeList,t.bodyColon,t.body);if(t instanceof se)return X(t.name,t.colon,t.value);if(t instanceof ne)return t.identifiers;if(t instanceof ve)return t.literal?[t.literal]:[];if(t instanceof ae)return X(t.variable);if(t instanceof K)return X(t.op,t.expression);if(t instanceof le)return X(t.leftExpression,t.op,t.rightExpression);if(t instanceof je)return X(t.expression,t.op);if(t instanceof ce)return X(t.value);if(t instanceof v)return X(t.callee,...t.args);if(t instanceof re)return X(t.blockOpenBrace,...t.body,t.blockCloseBrace);if(t instanceof R)return X(t.listOpenBracket,...dt(t.elementList,t.commaList),t.listCloseBracket);if(t instanceof fe)return X(t.tupleOpenParen,...dt(t.elementList,t.commaList),t.tupleCloseParen);if(t instanceof q)return X(t.callee,t.argumentList);if(t instanceof G)return X(t.expression);if(t instanceof ue)return X(t.array,t.indexer);if(t instanceof Le)return X(t.partial);throw t instanceof et?new Error("This case is already handled by TupleExpressionNode"):new Error("Unreachable - no other possible cases")}function Je(t){return j(t)?new O(t.expression.variable):new x}function C(t){var e;return t instanceof G&&(t.expression instanceof ae&&t.expression.variable instanceof J&&t.expression.variable.kind===h.QUOTED_STRING||t.expression instanceof ve&&((e=t.expression.literal)==null?void 0:e.kind)===h.STRING_LITERAL)}function j(t){return t instanceof G&&t.expression instanceof ae&&t.expression.variable instanceof J}function he(t){var e;return t instanceof G&&t.expression instanceof ae&&((e=t.expression.variable)==null?void 0:e.kind)===h.IDENTIFIER}function Ye(t){var e;return t instanceof le&&t.leftExpression instanceof D&&t.rightExpression instanceof D&&((e=t.op)==null?void 0:e.value)==="."}function ge(t){if(t===void 0)return new x;const e=t.identifiers.map(n=>n.value).join(" ");return e===""?new x:new O(e)}class gn{constructor(e){this.start={offset:0,line:0,column:0},this.current={offset:0,line:0,column:0},this.tokens=[],this.errors=[],this.text=e}isAtEnd(){return this.current.offset>=this.text.length}advance(){const e=this.peek();return this.current={...this.current},e===`
2
+ `?(this.current.line+=1,this.current.column=0):this.current.column+=1,this.current.offset+=1,e}peek(e=0){if(!(this.current.offset+e>=this.text.length))return this.text[this.current.offset+e]}check(e){for(let n=0;n<e.length;n+=1)if(e[n]!==this.peek(n))return!1;return!0}match(e){return this.check(e)?(e.split("").forEach(()=>this.advance()),!0):!1}addToken(e,n=!1){this.tokens.push(this.createToken(e,n))}createToken(e,n=!1){return J.create(e,this.start,this.current,this.text.substring(this.start.offset,this.current.offset),n)}lex(){return this.scanTokens(),this.tokens.push(J.create(h.EOF,this.start,this.current,"",!1)),this.gatherTrivia(),this.gatherInvalid(),new Y(this.tokens,this.errors)}scanTokens(){for(;!this.isAtEnd();){const e=this.advance();switch(e){case" ":this.addToken(h.SPACE);break;case"\r":break;case`
3
+ `:this.addToken(h.NEWLINE);break;case" ":this.addToken(h.TAB);break;case",":this.addToken(h.COMMA);break;case"(":this.addToken(h.LPAREN);break;case")":this.addToken(h.RPAREN);break;case"[":this.addToken(h.LBRACKET);break;case"]":this.addToken(h.RBRACKET);break;case"{":this.addToken(h.LBRACE);break;case"}":this.addToken(h.RBRACE);break;case";":this.addToken(h.SEMICOLON);break;case":":this.addToken(h.COLON);break;case"~":this.addToken(h.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();break;default:if(ht(e)){this.operator();break}if(qe(e)){this.identifier();break}if(Ve(e)){this.numericLiteralOrIdentifier();break}this.addToken(h.OP,!0),this.errors.push(new l(o.UNKNOWN_SYMBOL,`Unexpected token '${e}'`,this.createToken(h.OP,!0)));break}this.start={...this.current}}}gatherTrivia(){let e=!0,n=[],s;const i=[];for(const a of this.tokens)en(a)?(n.push(a),a.kind===h.NEWLINE&&s&&(s.trailingTrivia=n,e=!0,s=void 0,n=[])):(e?a.leadingTrivia=n:s.trailingTrivia=n,i.push(a),n=[],s=a,e=!1);this.tokens=i}gatherInvalid(){let e;const n=[],s=[];for(e=0;e<this.tokens.length&&Ut(this.tokens[e]);e+=1)s.push(this.tokens[e]);let i=this.tokens[e];for(i.leadingInvalid=[...s,...i.leadingInvalid];e<this.tokens.length;e+=1){const a=this.tokens[e];a.isInvalid?i.trailingInvalid.push(a):(i=a,n.push(a))}this.tokens=n}consumeUntil(e,n,{allowNewline:s,allowEof:i,raw:a,consumeStopSequence:r=!0}){let c="";for(;!this.isAtEnd()&&(s||!this.check(`
4
+ `))&&!this.check(n);)this.peek()==="\\"&&!a?(this.advance(),c+=this.escapedString()):c+=this.advance();if(this.isAtEnd()&&!i){const f=this.createToken(e,!0);this.tokens.push(f),this.errors.push(new l(o.UNEXPECTED_EOF,"EOF reached while parsing",f));return}if(this.check(`
5
+ `)&&!s){const f=this.createToken(e,!0);this.tokens.push(f),this.errors.push(new l(o.UNEXPECTED_NEWLINE,"Invalid newline encountered while parsing",f));return}r&&this.match(n),this.tokens.push(J.create(e,this.start,this.current,c,!1))}singleLineStringLiteral(){this.consumeUntil(h.STRING_LITERAL,"'",{allowNewline:!1,allowEof:!1,raw:!1})}multilineStringLiteral(){this.consumeUntil(h.STRING_LITERAL,"'''",{allowNewline:!0,allowEof:!1,raw:!1})}functionExpression(){this.consumeUntil(h.FUNCTION_EXPRESSION,"`",{allowNewline:!1,allowEof:!1,raw:!0})}quotedVariable(){this.consumeUntil(h.QUOTED_STRING,'"',{allowNewline:!1,allowEof:!1,raw:!1})}singleLineComment(){this.consumeUntil(h.SINGLE_LINE_COMMENT,`
6
+ `,{allowNewline:!0,allowEof:!0,raw:!0,consumeStopSequence:!1})}multilineComment(){this.consumeUntil(h.MULTILINE_COMMENT,"*/",{allowNewline:!0,allowEof:!1,raw:!0})}identifier(){for(;!this.isAtEnd()&&Ae(this.peek());)this.advance();this.addToken(h.IDENTIFIER)}operator(){for(;ht(this.peek());)this.advance();this.addToken(h.OP)}numericLiteralOrIdentifier(){let e=0;if(this.isAtEnd())return this.addToken(h.NUMERIC_LITERAL);for(;!this.isAtEnd();){const n=this.check(".");if(e+=n?1:0,e>1)break;if(!n&&this.current.offset===this.text.length-1)return this.advance(),this.addToken(h.NUMERIC_LITERAL);if(!n&&!Ae(this.peek()))return this.addToken(h.NUMERIC_LITERAL);if(!n&&!Ve(this.peek()))break;this.advance()}if(e>0){for(;!this.isAtEnd()&&(this.check(".")||Ae(this.peek()));)this.advance();const n=this.createToken(h.NUMERIC_LITERAL,!0);this.tokens.push(n),this.errors.push(new l(o.UNKNOWN_TOKEN,"Invalid number",n))}else{for(;!this.isAtEnd()&&Ae(this.peek());)this.advance();const n=this.createToken(h.IDENTIFIER,!1);this.tokens.push(n)}}colorLiteral(){for(;!this.isAtEnd()&&Ae(this.peek());)this.advance();this.addToken(h.COLOR_LITERAL)}escapedString(){const e={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"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()||!Ee(this.peek()))return this.errors.push(new c(o.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`,G.create(u.STRING_LITERAL,e,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 Oe=(t=>(t[t.ListExpression=0]="ListExpression",t[t.GroupExpression=1]="GroupExpression",t[t.BlockExpression=2]="BlockExpression",t))(Oe||{});class fn{constructor(){this.stack=[],this.numberOfNestedLParens=0,this.numberOfNestedLBrackets=0,this.numberOfNestedLBraces=0}push(e){this.stack.push(e),e===0&&(this.numberOfNestedLBrackets+=1),e===1&&(this.numberOfNestedLParens+=1),e===2&&(this.numberOfNestedLBraces+=1)}pop(){const e=this.stack.pop();return e===0&&(this.numberOfNestedLBrackets-=1),e===1&&(this.numberOfNestedLParens-=1),e===2&&(this.numberOfNestedLBraces-=1),e}top(){return b.last(this.stack)}isWithinGroupExpressionContext(){return this.numberOfNestedLParens>0}isWithinListExpressionContext(){return this.numberOfNestedLBrackets>0}isWithinBlockExpressionContext(){return this.numberOfNestedLBraces>0}withContextDo(e,n){return()=>{this.push(e);try{return n()}finally{this.pop()}}}findHandlerContext(e,n){if(!(this.numberOfNestedLBraces<=0&&this.numberOfNestedLBrackets<=0&&this.numberOfNestedLParens<=0))for(let s=n;s<e.length-1;s+=1)switch(e[s].kind){case u.COMMA:if(this.isWithinGroupExpressionContext()||this.isWithinListExpressionContext())return[...this.stack].reverse().find(r=>[1,0].includes(r));break;case u.RPAREN:if(this.isWithinGroupExpressionContext())return 1;break;case u.RBRACE:if(this.isWithinBlockExpressionContext())return 2;break;case u.RBRACKET:if(this.isWithinListExpressionContext())return 0;break}}}class pn{constructor(e){this.generator=e}create(e,n){return new e(n,this.generator.nextId())}}class d{constructor(e,n,s){this.token=e,this.partialNode=n,this.handlerContext=s}}class dn{constructor(e,n){this.current=0,this.errors=[],this.contextStack=new fn,this.synchronizeProgram=()=>{const s=this.peek();s.kind!==u.EOF?N(this.advance()):(N(this.peek()),this.logError(s,o.UNEXPECTED_EOF,"Unexpected EOF"))},this.synchronizeElementDeclarationName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(ht(s)||this.check(u.COLON,u.LBRACE,u.LBRACKET))break;N(s),this.advance()}},this.synchronizeElementDeclarationAlias=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COLON,u.LBRACE,u.LBRACKET))break;N(s),this.advance()}},this.blockExpression=this.contextStack.withContextDo(Oe.BlockExpression,()=>{const s={body:[]},i=()=>this.nodeFactory.create(K,s);try{this.consume("Expect an opening brace '{'",u.LBRACE),s.blockOpenBrace=this.previous()}catch(r){if(!(r instanceof d))throw r;if(s.blockOpenBrace=r.partialNode,!this.canHandle(r))throw new d(r.token,i(),r.handlerContext);this.synchronizeBlock()}for(;!this.isAtEnd()&&!this.check(u.RBRACE);)try{s.body.push(this.canBeField()?this.fieldDeclaration():this.expression())}catch(r){if(!(r instanceof d))throw r;if(s.body.push(r.partialNode),!this.canHandle(r))throw new d(r.token,i(),r.handlerContext);this.synchronizeBlock()}try{this.consume("Expect a closing brace '}'",u.RBRACE),s.blockCloseBrace=this.previous()}catch(r){if(!(r instanceof d))throw r;if(s.blockCloseBrace=r.partialNode,!this.canHandle(r))throw new d(r.token,i(),r.handlerContext);this.synchronizeBlock()}return i()}),this.synchronizeBlock=()=>{if(!this.check(u.RBRACE))for(N(this.advance());!this.isAtEnd();){const s=this.peek();if(this.check(u.RBRACE)||ct(this.previous(),s))break;N(s),this.advance()}},this.tupleExpression=this.contextStack.withContextDo(Oe.GroupExpression,()=>{const s={elementList:[],commaList:[]},i=()=>this.nodeFactory.create(Ye,{groupOpenParen:s.tupleOpenParen,groupCloseParen:s.tupleCloseParen,expression:s.elementList[0]}),r=()=>this.nodeFactory.create(ee,s);try{this.consume("Expect an opening parenthesis '('",u.LPAREN),s.tupleOpenParen=this.previous()}catch(a){if(!(a instanceof d))throw a;if(s.tupleOpenParen=a.partialNode,!this.canHandle(a))throw new d(a.token,r(),a.handlerContext);this.synchronizeTuple()}if(!this.isAtEnd()&&!this.check(u.RPAREN))try{s.elementList.push(this.normalExpression())}catch(a){if(!(a instanceof d))throw a;if(s.elementList.push(a.partialNode),!this.canHandle(a))throw new d(a.token,i(),a.handlerContext);this.synchronizeTuple()}for(;!this.isAtEnd()&&!this.check(u.RPAREN);)try{this.consume("Expect a comma ','",u.COMMA),s.commaList.push(this.previous()),s.elementList.push(this.normalExpression())}catch(a){if(!(a instanceof d))throw a;if(a.partialNode instanceof k&&s.elementList.push(a.partialNode),!this.canHandle(a))throw new d(a.token,r(),a.handlerContext);this.synchronizeTuple()}try{this.consume("Expect a closing parenthesis ')'",u.RPAREN),s.tupleCloseParen=this.previous()}catch(a){if(!(a instanceof d))throw a;if(s.tupleCloseParen=a.partialNode,!this.canHandle(a))throw new d(a.token,r(),a.handlerContext);this.synchronizeTuple()}return s.elementList.length===1?i():r()}),this.synchronizeTuple=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.RPAREN,u.COMMA))break;N(s),this.advance()}},this.listExpression=this.contextStack.withContextDo(Oe.ListExpression,()=>{const s={elementList:[],commaList:[]},i=()=>this.nodeFactory.create(R,s);try{this.consume("Expect an opening bracket '['",u.LBRACKET),s.listOpenBracket=this.previous()}catch(r){if(!(r instanceof d))throw r;if(s.listOpenBracket=r.partialNode,!this.canHandle(r))throw new d(r.token,i(),r.handlerContext);this.synchronizeList()}if(!this.isAtEnd()&&!this.check(u.RBRACKET))try{s.elementList.push(this.attribute())}catch(r){if(!(r instanceof d))throw r;if(s.elementList.push(r.partialNode),!this.canHandle(r))throw new d(r.token,i(),r.handlerContext);this.synchronizeList()}for(;!this.isAtEnd()&&!this.check(u.RBRACKET);)try{this.consume("Expect a comma ','",u.COMMA),s.commaList.push(this.previous()),s.elementList.push(this.attribute())}catch(r){if(!(r instanceof d))throw r;if(r.partialNode instanceof k&&s.elementList.push(r.partialNode),!this.canHandle(r))throw new d(r.token,i(),r.handlerContext);this.synchronizeList()}try{this.consume("Expect a closing bracket ']'",u.RBRACKET),s.listCloseBracket=this.previous()}catch(r){if(!(r instanceof d))throw r;if(s.listCloseBracket=r.partialNode,!this.canHandle(r))throw new d(r.token,i(),r.handlerContext);this.synchronizeList()}return i()}),this.synchronizeList=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET))break;N(s),this.advance()}},this.synchronizeAttributeName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET,u.COLON))break;N(s),this.advance()}},this.synchronizeAttributeValue=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET))break;N(s),this.advance()}},this.tokens=e,this.nodeFactory=new pn(n)}isAtEnd(){return this.current>=this.tokens.length||this.tokens[this.current].kind===u.EOF}advance(){return this.isAtEnd()?b.last(this.tokens):this.tokens[this.current++]}peek(e=0){return e+this.current>=this.tokens.length?b.last(this.tokens):this.tokens[this.current+e]}match(...e){const n=this.check(...e);return n&&this.advance(),n}check(...e){const n=this.peek();return e.includes(n.kind)}previous(){return this.tokens[this.current-1]}canHandle(e){return e.handlerContext===void 0||e.handlerContext===this.contextStack.top()}consume(e,...n){if(!this.match(...n))throw this.logError(this.peek(),o.UNEXPECTED_TOKEN,e),new d(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}discardUntil(e,...n){if(this.isAtEnd()||!this.check(...n)){for(N(this.peek()),this.logError(this.advance(),o.UNEXPECTED_TOKEN,e);!this.isAtEnd()&&!this.check(...n);)N(this.advance());return!this.isAtEnd()}return!0}gatherInvalid(){const e=[],n=[];let s,i=0;for(;i<this.tokens.length&&this.tokens[i].isInvalid;i+=1)n.push(this.tokens[i]);for(s=this.tokens[i],s.leadingInvalid=n,e.push(s),i+=1;i<this.tokens.length;i+=1){const r=this.tokens[i];r.isInvalid?s.trailingInvalid.push(r):(s=r,e.push(s))}this.tokens=e}parse(){const e=this.program(),n=this.advance(),s=this.nodeFactory.create(j,{body:e,eof:n});return this.gatherInvalid(),new X({ast:s,tokens:this.tokens},this.errors)}program(){const e=[];for(;!this.isAtEnd();)try{const n=this.elementDeclaration();e.push(n)}catch(n){if(!(n instanceof d))throw n;e.push(n.partialNode),this.synchronizeProgram()}return e}elementDeclaration(){const e={},n=()=>this.nodeFactory.create(A,e);try{this.consume("Expect an identifier",u.IDENTIFIER),e.type=this.previous()}catch(s){throw s instanceof d?(e.type=s.partialNode,new d(s.token,n(),s.handlerContext)):s}if(!this.check(u.COLON,u.LBRACE,u.LBRACKET))try{e.name=this.normalExpression()}catch(s){if(!(s instanceof d))throw s;if(e.name=s.partialNode,!this.canHandle(s))throw new d(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationName()}if(ht(this.peek()))if(e.as=this.advance(),this.check(u.COLON,u.LBRACE,u.LBRACKET))this.logError(this.peek(),o.UNEXPECTED_TOKEN,"Expect an alias");else try{e.alias=this.normalExpression()}catch(s){if(!(s instanceof d))throw s;if(e.alias=s.partialNode,!this.canHandle(s))throw new d(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationAlias()}try{e.attributeList=this.check(u.LBRACKET)?this.listExpression():void 0}catch(s){throw s instanceof d?(e.attributeList=s.partialNode,new d(s.token,n(),s.handlerContext)):s}if(!this.discardUntil("Expect an opening brace '{' or a colon ':'",u.LBRACE,u.COLON))return n();try{if(this.match(u.COLON)){e.bodyColon=this.previous();const s=this.expression();s instanceof A?(N(s),this.logError(s,o.UNEXPECTED_ELEMENT_DECLARATION,"An element's simple body must not be an element declaration")):e.body=s}else e.body=this.blockExpression()}catch(s){throw s instanceof d?(e.body=s.partialNode,new d(s.token,n(),s.handlerContext)):s}return this.nodeFactory.create(A,e)}fieldDeclaration(){const e={},n=()=>this.nodeFactory.create(A,e);try{this.consume("Expect an identifier",u.IDENTIFIER),e.type=this.previous()}catch(s){throw s instanceof d?(e.type=s.partialNode,new d(s.token,n(),s.handlerContext)):s}try{this.consume("Expect a colon ':'",u.COLON),e.bodyColon=this.previous()}catch(s){throw s instanceof d?(e.bodyColon=s.partialNode,new d(s.token,n(),s.handlerContext)):s}try{const s=this.expression();s instanceof A?this.errors.push(new c(o.INVALID_ELEMENT_IN_SIMPLE_BODY,"Simple body cannot be an element declaration",s)):e.body=s}catch(s){throw s instanceof d?(e.body=s.partialNode,new d(s.token,n(),s.handlerContext)):s}return this.nodeFactory.create(A,e)}expression(){const e={args:[]},n=()=>on(e.callee,e.args,this.nodeFactory).unwrap_or(this.nodeFactory.create(v,e));try{e.callee=this.normalExpression()}catch(i){throw i instanceof d?(e.callee=i.partialNode,new d(i.token,n(),i.handlerContext)):i}if(this.shouldStopExpression())return n();let s=e.callee;for(;!this.shouldStopExpression();){$e(this.previous())||this.logError(s,o.MISSING_SPACES,"Expect a following space");try{s=this.normalExpression(),e.args.push(s)}catch(i){throw i instanceof d?(s=i.partialNode,e.args.push(s),new d(i.token,n(),i.handlerContext)):i}}return n()}shouldStopExpression(){if(this.isAtEnd()||Lt(this.previous()))return!0;const e=this.peek().kind;return e===u.RBRACE||e===u.RBRACKET||e===u.RPAREN||e===u.COMMA||e===u.COLON}normalExpression(){return this.expression_bp(0)}expression_bp(e){let n=this.leftExpression_bp();for(;!this.isAtEnd();){const s=this.peek();if(s.kind===u.LPAREN){const{left:i}=ft(s);if(i<e||ct(this.previous(),s)&&!this.contextStack.isWithinGroupExpressionContext()&&!this.contextStack.isWithinListExpressionContext())break;try{n=this.nodeFactory.create(Z,{callee:n,argumentList:this.tupleExpression()})}catch(r){throw r instanceof d?(n=this.nodeFactory.create(Z,{callee:n,argumentList:r.partialNode}),new d(r.token,n,r.handlerContext)):r}}else if(s.kind===u.LBRACKET){if($e(this.previous()))break;try{n=this.nodeFactory.create(he,{expression:n,indexer:this.listExpression()})}catch(i){throw i instanceof d?(n=this.nodeFactory.create(he,{expression:n,indexer:i.partialNode}),new d(i.token,n,i.handlerContext)):i}}else if(lt(s)){const i=s,r=ft(i);if(r.left!==null){if(r.left<=e)break;this.advance(),n=this.nodeFactory.create(Me,{expression:n,op:i})}else{const a=Nn(i);if(a.left===null||a.left<=e)break;this.advance();try{n=this.nodeFactory.create(J,{leftExpression:n,op:i,rightExpression:i.value==="."?this.extractOperand():this.expression_bp(a.right)})}catch(l){throw l instanceof d?(n=this.nodeFactory.create(J,{leftExpression:n,op:i,rightExpression:l.partialNode}),new d(l.token,n,l.handlerContext)):l}}}else break}return n}leftExpression_bp(){let e;if(lt(this.peek())){const n={};n.op=this.peek();const s=Tn(n.op);if(s.right===null)throw this.logError(n.op,o.UNKNOWN_PREFIX_OP,`Unexpected '${n.op.value}' in an expression`),new d(n.op,this.nodeFactory.create(Se,{pre:n.op}),this.contextStack.findHandlerContext(this.tokens,this.current));this.advance();try{n.expression=this.expression_bp(s.right)}catch(i){throw i instanceof d?(n.expression=i.partialNode,new d(i.token,this.nodeFactory.create(H,n),i.handlerContext)):i}e=this.nodeFactory.create(H,n)}else if(e=this.extractOperand(),e instanceof Se)throw new d(this.peek(),this.nodeFactory.create(Se,{pre:this.peek()}),this.contextStack.findHandlerContext(this.tokens,this.current));return e}extractOperand(){return this.check(u.NUMERIC_LITERAL,u.STRING_LITERAL,u.COLOR_LITERAL,u.QUOTED_STRING,u.IDENTIFIER)?this.primaryExpression():this.check(u.FUNCTION_EXPRESSION)?this.functionExpression():this.check(u.LBRACKET)?this.listExpression():this.check(u.LBRACE)?this.blockExpression():this.check(u.LPAREN)?this.tupleExpression():(this.peek().kind===u.EOF?this.logError(this.peek(),o.UNEXPECTED_EOF,"Unexpected EOF"):this.logError(this.peek(),o.INVALID_OPERAND,`Invalid start of operand "${this.peek().value}"`),this.nodeFactory.create(Se,{pre:this.previous()}))}functionExpression(){const e={};try{this.consume("Expect a function expression",u.FUNCTION_EXPRESSION),e.value=this.previous()}catch(n){throw n instanceof d?(e.value=n.partialNode,new d(n.token,this.nodeFactory.create(se,e),n.handlerContext)):n}return this.nodeFactory.create(se,e)}canBeField(){return this.peek().kind===u.IDENTIFIER&&this.peek(1).kind===u.COLON}primaryExpression(){if(this.match(u.COLOR_LITERAL,u.STRING_LITERAL,u.NUMERIC_LITERAL))return this.nodeFactory.create(M,{expression:this.nodeFactory.create(be,{literal:this.previous()})});if(this.match(u.QUOTED_STRING,u.IDENTIFIER))return this.nodeFactory.create(M,{expression:this.nodeFactory.create(te,{variable:this.previous()})});throw this.logError(this.peek(),o.UNEXPECTED_TOKEN,"Expect a variable or literal"),new d(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}attribute(){const e={};if(this.check(u.COLON,u.RBRACKET,u.COMMA)){const n=this.peek();this.logError(n,o.EMPTY_ATTRIBUTE_NAME,"Expect a non-empty attribute name"),e.name=this.nodeFactory.create(q,{identifiers:[]})}else try{e.name=this.attributeName()}catch(n){if(!(n instanceof d))throw n;if(e.name=n.partialNode,!this.canHandle(n))throw new d(n.token,this.nodeFactory.create(ie,e),n.handlerContext);this.synchronizeAttributeName()}return this.match(u.COLON)&&(e.colon=this.previous(),e.value=this.attributeValue()),this.nodeFactory.create(ie,e)}attributeValue(){let e;try{e=this.peek().kind===u.IDENTIFIER&&this.peek(1).kind===u.IDENTIFIER?this.attributeName():this.normalExpression()}catch(n){if(!(n instanceof d)||!this.canHandle(n))throw n;e=n.partialNode,this.synchronizeAttributeValue()}return e}attributeName(){const e=[];if(this.peek().kind!==u.IDENTIFIER)return this.primaryExpression();for(;!this.isAtEnd()&&!this.check(u.COLON,u.COMMA,u.RBRACKET);)try{this.consume("Expect an identifier",u.IDENTIFIER),e.push(this.previous())}catch(n){throw n instanceof d?new d(n.token,this.nodeFactory.create(q,{identifiers:e}),n.handlerContext):n}return this.nodeFactory.create(q,{identifiers:e})}logError(e,n,s){this.errors.push(new c(n,s,e))}}const En={"+":{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 Nn(t){return En[t.value]||{left:null,right:null}}const mn={"+":{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 Tn(t){return mn[t.value]||{left:null,right:null}}const bn={"(":{left:14,right:null}};function ft(t){return bn[t.value]||{left:null,right:null}}var I=(t=>(t.Table="table",t.Enum="enum",t.Ref="ref",t.Note="note",t.Project="project",t.Indexes="indexes",t.TableGroup="tablegroup",t))(I||{});function we(t){var n;const e=(n=t==null?void 0:t.type)==null?void 0:n.value.toLowerCase();switch(e){case I.Enum:case I.Table:case I.Indexes:case I.Note:case I.Project:case I.Ref:case I.TableGroup:return new x(e);default:return new y}}function pe(t){if(!Ke(t))return new x([t]);const e=pe(t.leftExpression).unwrap_or(void 0);return e?(e.push(t.rightExpression),new x(e)):new y}function z(t){if(t===void 0)return new y;const e=pe(t).unwrap_or(void 0);if(!e)return new y;const n=[];for(const s of e){const i=Q(s).unwrap_or(void 0);if(!i)return new y;n.push(i)}return new x(n)}function Ae(t){if(t===void 0)return new y;const e=pe(t).unwrap_or(void 0);if(!e||e.length===0)return new y;const n=[];let s;if(!V(b.last(e))){const i=e.pop();if(Ot(i))s=i.elementList.map(r=>W(r).unwrap());else return new y}for(const i of e){const r=Q(i).unwrap_or(void 0);if(!r)return new y;n.push(r)}return new x({variables:n,tupleElements:s})}function Q(t){return V(t)?new x(t.expression.variable.value):new y}function We(t){if(pt(t))return t instanceof se?new x({functional:[t],nonFunctional:[]}):new x({functional:[],nonFunctional:[t]});if(t instanceof ee&&t.elementList.every(pt)){const e=t.elementList.filter(s=>s instanceof se),n=t.elementList.filter(V);return new x({functional:e,nonFunctional:n})}return new y}function W(t){var n;const e=(n=t==null?void 0:t.expression.variable)==null?void 0:n.value;return e===void 0?new y:new x(e)}function $(t){return Y(t)?t.expression instanceof te?new x(t.expression.variable.value):new x(t.expression.literal.value):new y}function In(t){var e;return!(t instanceof J)||!St((e=t.op)==null?void 0:e.value)?!1:Ae(t.leftExpression).and_then(()=>Ae(t.rightExpression)).unwrap_or(void 0)!==void 0}function Ln(t){const e=Ae(t.leftExpression),n=Ae(t.rightExpression);if(!e.isOk()||!n.isOk())return!1;const{tupleElements:s}=e.unwrap(),{tupleElements:i}=n.unwrap();return(s==null?void 0:s.length)===(i==null?void 0:i.length)}function pt(t){return t instanceof M&&t.expression instanceof te||t instanceof se}function gn(t,e){var i,r,a,l;let n=e;const s=Jt(t);for(;n;){if((r=(i=n.symbol)==null?void 0:i.symbolTable)!=null&&r.has(t))return(a=n.symbol.symbolTable)==null?void 0:a.get(t);if(((l=n.symbol)==null?void 0:l.declaration)instanceof j&&s)return n.symbol;if(n instanceof j)return;n=n.parent}}class _n{constructor(e,n,s){this.declarationNode=e,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||we(this.declarationNode.parent).unwrap_or(void 0)!==I.Project?[new c(o.INVALID_CUSTOM_CONTEXT,"A custom element can only appear in a Project",this.declarationNode)]:[]}validateName(e){return e?[new c(o.UNEXPECTED_NAME,"A Custom element shouldn't have a name",e)]:[]}validateAlias(e){return e?[new c(o.UNEXPECTED_NAME,"A Custom element shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new c(o.UNEXPECTED_SETTINGS,"A Custom element shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof K)return[new c(o.UNEXPECTED_COMPLEX_BODY,"A Custom element can only have an inline field",e)];const n=[];return Y(e.callee)||n.push(new c(o.INVALID_CUSTOM_ELEMENT_VALUE,"A Custom element value can only be a string",e)),e.args.length>0&&n.push(...e.args.map(s=>new c(o.INVALID_CUSTOM_ELEMENT_VALUE,"A Custom element value can only be a string",s))),n}}class ye{constructor(){this.table=new Map}has(e){return this.table.has(e)}set(e,n){this.table.set(e,n)}get(e,n){return this.table.get(e)||n!==void 0&&this.set(e,n)||n}entries(){return this.table.entries()}}class An{constructor(e,n,s){this.declarationNode=e,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 A?[new c(o.INVALID_PROJECT_CONTEXT,"An Enum can only appear top-level",this.declarationNode)]:[]}validateName(e){return e?xt(e)?[]:[new c(o.INVALID_NAME,"An Enum name must be of the form <enum> or <schema>.<enum>",e)]:[new c(o.NAME_NOT_FOUND,"An Enum must have a name",this.declarationNode)]}validateAlias(e){return e?[new c(o.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",e)]:[]}registerElement(){const e=[];this.declarationNode.symbol=this.symbolFactory.create(tn,{declaration:this.declarationNode,symbolTable:new ye});const{name:n}=this.declarationNode,s=z(n);if(s.isOk()){const i=s.unwrap(),r=i.pop(),a=et(i,this.publicSymbolTable,this.symbolFactory),l=qe(r);a.has(l)&&e.push(new c(o.DUPLICATE_NAME,`Enum name ${r} already exists in schema '${i.join(".")||"public"}'`,n)),a.set(l,this.declarationNode.symbol)}return e}validateSettingList(e){return e?[new c(o.UNEXPECTED_SETTINGS,"An Enum shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return this.validateFields([e]);const[n,s]=b.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.length===0?[new c(o.EMPTY_ENUM,"An Enum must have at least one element",this.declarationNode)]:e.flatMap(n=>{const s=[];n.callee&&!V(n.callee)&&s.push(new c(o.INVALID_ENUM_ELEMENT_NAME,"An enum field must be an identifier or a quoted identifier",n.callee));const i=[...n.args];return b.last(i)instanceof R?(s.push(...this.validateFieldSettings(b.last(i))),i.pop()):i[0]instanceof R&&(s.push(...this.validateFieldSettings(i[0])),i.shift()),i.length>0&&s.push(...i.map(r=>new c(o.INVALID_ENUM_ELEMENT,"An Enum must have only a field and optionally a setting list",r))),s.push(...this.registerField(n)),s})}validateFieldSettings(e){const n=C(e),s=n.getErrors(),i=n.getValue();for(const r in i){const a=i[r];switch(r){case"note":a.length>1&&a.forEach(l=>s.push(new c(o.DUPLICATE_ENUM_ELEMENT_SETTING,"'note' can only appear once",l))),a.forEach(l=>{Y(l.value)||s.push(new c(o.INVALID_ENUM_ELEMENT_SETTING,"'note' must be a string",l))});break;default:a.forEach(l=>s.push(new c(o.UNKNOWN_ENUM_ELEMENT_SETTING,`Unknown enum field setting '${r}'`,l)))}}return s}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=oe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}registerField(e){if(e.callee&&V(e.callee)){const n=W(e.callee).unwrap(),s=He(n),i=this.symbolFactory.create(nn,{declaration:e});e.symbol=i;const r=this.declarationNode.symbol.symbolTable;if(r.has(s)){const a=r.get(s);return[new c(o.DUPLICATE_COLUMN_NAME,`Duplicate enum field ${n}`,e),new c(o.DUPLICATE_COLUMN_NAME,`Duplicate enum field ${n}`,a.declaration)]}r.set(s,i)}return[]}}class vn{constructor(e,n,s){this.declarationNode=e,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||we(this.declarationNode.parent).unwrap_or(void 0)!==I.Table?[new c(o.INVALID_NOTE_CONTEXT,"An Indexes can only appear inside a Table",this.declarationNode)]:[]}validateName(e){return e?[new c(o.UNEXPECTED_NAME,"An Indexes shouldn't have a name",e)]:[]}validateAlias(e){return e?[new c(o.UNEXPECTED_ALIAS,"An Indexes shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new c(o.UNEXPECTED_SETTINGS,"An Indexes shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return[new c(o.UNEXPECTED_SIMPLE_BODY,"An Indexes must have a complex body",e)];const[n,s]=b.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.flatMap(n=>{if(!n.callee)return[];const s=[],i=[n.callee,...n.args];return b.last(i)instanceof R&&s.push(...this.validateFieldSetting(i.pop())),i.forEach(r=>{for(;r instanceof Z;)r.argumentList&&!We(r.argumentList).isOk()&&s.push(new c(o.INVALID_INDEXES_FIELD,"An index field must be an identifier, a quoted identifier, a functional expression or a tuple of such",r.argumentList)),r=r.callee;We(r).isOk()||s.push(new c(o.INVALID_INDEXES_FIELD,"An index field must be an identifier, a quoted identifier, a functional expression or a tuple of such",r))}),s})}validateFieldSetting(e){const n=C(e),s=n.getErrors(),i=n.getValue();for(const r in i){const a=i[r];switch(r){case"note":case"name":a.length>1&&a.forEach(l=>s.push(new c(o.DUPLICATE_INDEX_SETTING,`'${r}' can only appear once`,l))),a.forEach(l=>{Y(l.value)||s.push(new c(o.INVALID_INDEX_SETTING_VALUE,`'${r}' must be a string`,l))});break;case"unique":case"pk":a.length>1&&a.forEach(l=>s.push(new c(o.DUPLICATE_INDEX_SETTING,`'${r}' can only appear once`,l))),a.forEach(l=>{ue(l.value)||s.push(new c(o.INVALID_INDEX_SETTING_VALUE,`'${r}' must not have a value`,l))});break;case"type":a.length>1&&a.forEach(l=>s.push(new c(o.DUPLICATE_INDEX_SETTING,"'type' can only appear once",l))),a.forEach(l=>{V(l.value)||s.push(new c(o.INVALID_INDEX_SETTING_VALUE,`'type' must be "btree" or "hash"`,l))});break;default:a.forEach(l=>s.push(new c(o.UNKNOWN_INDEX_SETTING,`Unknown index setting '${r}'`,l)))}}return s}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=oe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class wn{constructor(e,n,s){this.declarationNode=e,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)&&![I.Table,I.TableGroup,I.Project].includes(we(this.declarationNode.parent).unwrap_or(void 0))?[new c(o.INVALID_NOTE_CONTEXT,"A Note can only appear inside a Table, a Table Group or a Project. Sticky note can only appear at the global scope.",this.declarationNode)]:[]}validateName(e){if(!(this.declarationNode.parent instanceof j))return e?[new c(o.UNEXPECTED_NAME,"A Note shouldn't have a name",e)]:[];if(!e)return[new c(o.INVALID_NAME,"Sticky note must have a name",this.declarationNode)];const n=z(e);if(!n.isOk())return[new c(o.INVALID_NAME,"Invalid name for sticky note ",this.declarationNode)];const i=n.unwrap().join("."),r=Ht(i);return this.publicSymbolTable.has(r)?[new c(o.DUPLICATE_NAME,`Sticky note "${i}" has already been defined`,e)]:(this.publicSymbolTable.set(r,this.declarationNode.symbol),[])}validateAlias(e){return e?[new c(o.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new c(o.UNEXPECTED_SETTINGS,"A Note shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return this.validateFields([e]);const[n,s]=b.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){const n=[];return e.length===0?[new c(o.EMPTY_NOTE,"A Note must have a content",this.declarationNode)]:(e.length>1&&e.slice(1).forEach(s=>n.push(new c(o.NOTE_CONTENT_REDEFINED,"A Note can only contain one string",s))),Y(e[0].callee)||n.push(new c(o.INVALID_NOTE,"A Note content must be a quoted string",e[0])),e[0].args.length>0&&n.push(...e[0].args.map(s=>new c(o.INVALID_NOTE,"A Note can only contain one quoted string",s))),n)}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=oe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class yn{constructor(e,n,s){this.declarationNode=e,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 A?[new c(o.INVALID_PROJECT_CONTEXT,"A Project can only appear top-level",this.declarationNode)]:[]}validateName(e){return e?ke(e)?[]:[new c(o.INVALID_NAME,"A Project's name is optional or must be an identifier or a quoted identifer",e)]:[]}validateAlias(e){return e?[new c(o.UNEXPECTED_ALIAS,"A Project shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new c(o.UNEXPECTED_SETTINGS,"A Project shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return[new c(o.UNEXPECTED_SIMPLE_BODY,"A Project's body must be a block",e)];const[n,s]=b.partition(e.body,i=>i instanceof v);return[...n.map(i=>new c(o.INVALID_PROJECT_FIELD,"A Project can not have inline fields",i)),...this.validateSubElements(s)]}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=oe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class kn{constructor(e,n,s){this.declarationNode=e,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(o.INVALID_REF_CONTEXT,"A Ref must appear top-level",this.declarationNode)]}validateName(e){return e?ke(e)?[]:[new c(o.INVALID_NAME,"A Ref's name is optional or must be an identifier or a quoted identifer",e)]:[]}validateAlias(e){return e?[new c(o.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new c(o.UNEXPECTED_SETTINGS,"A Ref shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return this.validateFields([e]);const[n,s]=b.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){if(e.length===0)return[new c(o.EMPTY_REF,"A Ref must have at least one field",this.declarationNode)];const n=[];return e.length>1&&n.push(...e.slice(1).map(s=>new c(o.REF_REDEFINED,"A Ref can only contain one binary relationship",s))),e.forEach(s=>{s.callee&&!In(s.callee)&&n.push(new c(o.INVALID_REF_FIELD,"A Ref field must be a binary relationship",s.callee)),s.callee&&!Ln(s.callee)&&n.push(new c(o.UNEQUAL_FIELDS_BINARY_REF,"Unequal fields in ref endpoints",s.callee));const i=[...s.args];if(b.last(i)instanceof R){const r=this.validateFieldSettings(b.last(i));n.push(...r),i.pop()}else i[0]instanceof R&&(n.push(...this.validateFieldSettings(i[0])),i.shift());i.length>0&&n.push(...i.map(r=>new c(o.INVALID_REF_FIELD,"A Ref field should only have a single binary relationship",r)))}),n}validateFieldSettings(e){const n=C(e),s=n.getErrors(),i=n.getValue();for(const r in i){const a=i[r];switch(r){case"delete":case"update":a.length>1&&a.forEach(l=>s.push(new c(o.DUPLICATE_REF_SETTING,`'${r}' can only appear once`,l))),a.forEach(l=>{xn(l.value)||s.push(new c(o.INVALID_REF_SETTING_VALUE,`'${r}' can only have values "cascade", "no action", "set null", "set default" or "restrict"`,l))});break;case"color":a.length>1&&s.push(...a.map(l=>new c(o.DUPLICATE_REF_SETTING,"'color' can only appear once",l))),a.forEach(l=>{tt(l.value)||s.push(new c(o.INVALID_REF_SETTING_VALUE,"'color' must be a color literal",l))});break;default:a.forEach(l=>s.push(new c(o.UNKNOWN_REF_SETTING,`Unknown ref setting '${r}'`,l)))}}return s}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=oe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}function xn(t){if(!(V(t)&&t.expression.variable.kind!==u.QUOTED_STRING)&&!(t instanceof q))return!1;let e;if(t instanceof q?e=Te(t).unwrap_or(""):e=t.expression.variable.value,e)switch(e.toLowerCase()){case"cascade":case"no action":case"set null":case"set default":case"restrict":return!0;default:return!1}return!1}class Sn{constructor(e,n,s){this.declarationNode=e,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 A?[new c(o.INVALID_TABLE_CONTEXT,"Table must appear top-level",this.declarationNode)]:[]}validateName(e){return e?e instanceof he?[new c(o.INVALID_NAME,"Invalid array as Table name, maybe you forget to add a space between the name and the setting list?",e)]:xt(e)?[]:[new c(o.INVALID_NAME,"A Table name must be of the form <table> or <schema>.<table>",e)]:[new c(o.NAME_NOT_FOUND,"A Table must have a name",this.declarationNode)]}validateAlias(e){return e?Pn(e)?[]:[new c(o.INVALID_ALIAS,"Table aliases can only contains alphanumeric and underscore unless surrounded by double quotes",e)]:[]}validateSettingList(e){const n=C(e),s=n.getErrors(),i=n.getValue();for(const r in i){const a=i[r];switch(r){case"headercolor":a.length>1&&s.push(...a.map(l=>new c(o.DUPLICATE_TABLE_SETTING,"'headercolor' can only appear once",l))),a.forEach(l=>{tt(l.value)||s.push(new c(o.INVALID_TABLE_SETTING,"'headercolor' must be a color literal",l.value||l.name))});break;case"note":a.length>1&&s.push(...a.map(l=>new c(o.DUPLICATE_TABLE_SETTING,"'note' can only appear once",l))),a.forEach(l=>{Y(l.value)||s.push(new c(o.INVALID_TABLE_SETTING,"'note' must be a string literal",l.value||l.name))});break;default:s.push(...a.map(l=>new c(o.INVALID_TABLE_SETTING,`Unknown '${r}' setting`,l)))}}return s}registerElement(){const e=[];this.declarationNode.symbol=this.symbolFactory.create(wt,{declaration:this.declarationNode,symbolTable:new ye});const{name:n,alias:s}=this.declarationNode,i=z(n);if(i.isOk()){const r=[...i.unwrap()],a=r.pop(),l=et(r,this.publicSymbolTable,this.symbolFactory),p=De(a);l.has(p)&&e.push(new c(o.DUPLICATE_NAME,`Table name '${a}' already exists in schema '${r.join(".")||"public"}'`,n)),l.set(p,this.declarationNode.symbol)}if(s&&ke(s)&&!Dn(s.expression.variable.value,i.unwrap_or([]))){const r=W(s).unwrap(),a=De(r);this.publicSymbolTable.has(a)&&e.push(new c(o.DUPLICATE_NAME,`Table name '${r}' already exists`,n)),this.publicSymbolTable.set(a,this.declarationNode.symbol)}return e}validateBody(e){if(!e)return[];if(e instanceof v)return[new c(o.UNEXPECTED_SIMPLE_BODY,"A Table's body must be a block",e)];const[n,s]=b.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.length===0?[new c(o.EMPTY_TABLE,"A Table must have at least one column",this.declarationNode)]:e.flatMap(n=>{if(!n.callee)return[];const s=[];n.args.length===0&&s.push(new c(o.INVALID_COLUMN,"A column must have a type",n.callee)),V(n.callee)||s.push(new c(o.INVALID_COLUMN_NAME,"A column name must be an identifier or a quoted identifier",n.callee)),n.args[0]&&!On(n.args[0])&&s.push(new c(o.INVALID_COLUMN_TYPE,"Invalid column type",n.args[0]));const i=n.args.slice(1);return s.push(...this.validateFieldSetting(i)),s.push(...this.registerField(n)),s})}registerField(e){if(e.callee&&V(e.callee)){const n=W(e.callee).unwrap(),s=Qe(n),i=this.symbolFactory.create(sn,{declaration:e});e.symbol=i;const r=this.declarationNode.symbol.symbolTable;if(r.has(s)){const a=r.get(s);return[new c(o.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,e),new c(o.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,a.declaration)]}r.set(s,i)}return[]}validateFieldSetting(e){if(!e.slice(0,-1).every(me)||!e.slice(-1).every(p=>me(p)||p instanceof R))return[...e.map(p=>new c(o.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",p))];if(e.length===0)return[];let n;b.last(e)instanceof R&&(n=e.pop());const s=C(n),i=s.getErrors(),r=s.getValue();for(const p of e){const f=W(p).unwrap_or("").toLowerCase();if(f!=="pk"&&f!=="unique"){i.push(new c(o.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",p));continue}r[f]===void 0?r[f]=[p]:r[f].push(p)}const a=r.pk||[],l=r["primary key"]||[];a.length>=1&&l.length>=1&&i.push(...[...a,...l].map(p=>new c(o.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",p)));for(const p in r){const f=r[p];switch(p){case"note":f.length>1&&i.push(...f.map(h=>new c(o.DUPLICATE_COLUMN_SETTING,"note can only appear once",h))),f.forEach(h=>{Y(h.value)||i.push(new c(o.INVALID_COLUMN_SETTING_VALUE,"'note' must be a quoted string",h.value||h.name))});break;case"ref":f.forEach(h=>{Mn(h.value)||i.push(new c(o.INVALID_COLUMN_SETTING_VALUE,"'ref' must be a valid unary relationship",h.value||h.name))});break;case"primary key":f.length>1&&i.push(...f.map(h=>new c(o.DUPLICATE_COLUMN_SETTING,"primary key can only appear once",h))),f.forEach(h=>{ue(h.value)||i.push(new c(o.INVALID_COLUMN_SETTING_VALUE,"'primary key' must not have a value",h.value||h.name))});break;case"pk":f.length>1&&i.push(...f.map(h=>new c(o.DUPLICATE_COLUMN_SETTING,"'pk' can only appear once",h))),f.forEach(h=>{h instanceof ie&&!ue(h.value)&&i.push(new c(o.INVALID_COLUMN_SETTING_VALUE,"'pk' must not have a value",h.value||h.name))});break;case"not null":f.length>1&&i.push(...f.map(h=>new c(o.DUPLICATE_COLUMN_SETTING,"'not null' can only appear once",h)));const E=r.null||[];f.length>=1&&E.length>=1&&i.push(...[...f,...E].map(h=>new c(o.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",h))),f.forEach(h=>{ue(h.value)||i.push(new c(o.INVALID_COLUMN_SETTING_VALUE,"'not null' must not have a value",h.value||h.name))});break;case"null":f.length>1&&i.push(...f.map(h=>new c(o.DUPLICATE_COLUMN_SETTING,"'null' can only appear once",h))),f.forEach(h=>{ue(h.value)||i.push(new c(o.INVALID_COLUMN_SETTING_VALUE,"'null' must not have a value",h.value||h.name))});break;case"unique":f.length>1&&i.push(...f.map(h=>new c(o.DUPLICATE_COLUMN_SETTING,"'unique' can only appear once",h))),f.forEach(h=>{h instanceof ie&&!ue(h.value)&&i.push(new c(o.INVALID_COLUMN_SETTING_VALUE,"'unique' must not have a value",h.value||h.name))});break;case"increment":f.length>1&&i.push(...f.map(h=>new c(o.DUPLICATE_COLUMN_SETTING,"'increment' can only appear once",h))),f.forEach(h=>{h instanceof ie&&!ue(h.value)&&i.push(new c(o.INVALID_COLUMN_SETTING_VALUE,"'increment' must not have a value",h.value||h.name))});break;case"default":f.length>1&&i.push(...f.map(h=>new c(o.DUPLICATE_TABLE_SETTING,"'default' can only appear once",h))),f.forEach(h=>{Un(h.value)||i.push(new c(o.INVALID_TABLE_SETTING,"'default' must be a string literal, number literal, function expression, true, false or null",h.value||h.name))});break;default:f.forEach(h=>i.push(new c(o.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${p}'`,h)))}}return i}validateSubElements(e){const n=e.flatMap(i=>{if(i.parent=this.declarationNode,!i.type)return[];const r=oe(i);return new r(i,this.publicSymbolTable,this.symbolFactory).validate()}),s=e.filter(i=>{var r;return((r=i.type)==null?void 0:r.value.toLowerCase())==="note"});return s.length>1&&n.push(...s.map(i=>new c(o.NOTE_REDEFINED,"Duplicate notes are defined",i))),n}}function On(t){if(!(t instanceof Z||Ke(t)||t instanceof M||t instanceof he))return!1;if(t instanceof Z){if(t.callee===void 0||t.argumentList===void 0||!t.argumentList.elementList.every(n=>fe(n)||Y(n)||me(n)))return!1;t=t.callee}for(;t instanceof he;){if(t.array===void 0||t.indexer===void 0||!t.indexer.elementList.every(n=>!n.colon&&!n.value&&fe(n.name)))return!1;t=t.array}const e=z(t).unwrap_or(void 0);return e!==void 0&&e.length>0}function Dn(t,e){return e.length===1&&t===e[0]}class Rn{constructor(e,n,s){this.declarationNode=e,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 A?[new c(o.INVALID_TABLEGROUP_CONTEXT,"TableGroup must appear top-level",this.declarationNode)]:[]}validateName(e){return e?ke(e)?[]:[new c(o.INVALID_NAME,"A TableGroup name must be a single identifier",e)]:[new c(o.NAME_NOT_FOUND,"A TableGroup must have a name",this.declarationNode)]}validateAlias(e){return e?[new c(o.UNEXPECTED_ALIAS,"A TableGroup shouldn't have an alias",e)]:[]}registerElement(){const{name:e}=this.declarationNode;this.declarationNode.symbol=this.symbolFactory.create(rn,{declaration:this.declarationNode,symbolTable:new ye});const n=z(e);if(n.isOk()){const s=n.unwrap(),i=s.pop(),r=et(s,this.publicSymbolTable,this.symbolFactory),a=Je(i);if(r.has(a))return[new c(o.DUPLICATE_NAME,`TableGroup name '${i}' already exists`,e)];r.set(a,this.declarationNode.symbol)}return[]}validateSettingList(e){const n=C(e),s=n.getErrors(),i=n.getValue();return b.forIn(i,(r,a)=>{switch(a){case"color":r.length>1&&s.push(...r.map(l=>new c(o.DUPLICATE_TABLE_SETTING,"'color' can only appear once",l))),r.forEach(l=>{tt(l.value)||s.push(new c(o.INVALID_TABLE_SETTING,"'color' must be a color literal",l.value||l.name))});break;case"note":r.length>1&&s.push(...r.map(l=>new c(o.DUPLICATE_TABLE_SETTING,"'note' can only appear once",l))),r.filter(l=>!Y(l.value)).forEach(l=>{s.push(new c(o.INVALID_TABLE_SETTING,"'note' must be a string literal",l.value||l.name))});break;default:s.push(...r.map(l=>new c(o.INVALID_TABLE_SETTING,`Unknown '${a}' setting`,l)));break}}),s}validateBody(e){if(!e)return[];if(e instanceof v)return[new c(o.UNEXPECTED_SIMPLE_BODY,"A TableGroup's body must be a block",e)];const[n,s]=b.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.flatMap(n=>{const s=[];return n.callee&&!z(n.callee).isOk()&&s.push(new c(o.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(i=>new c(o.INVALID_TABLEGROUP_FIELD,"A TableGroup field should only have a single Table name",i))),s})}validateSubElements(e){const n=e.flatMap(i=>{if(i.parent=this.declarationNode,!i.type)return[];const r=oe(i);return new r(i,this.publicSymbolTable,this.symbolFactory).validate()}),s=e.filter(i=>{var r;return((r=i.type)==null?void 0:r.value.toLowerCase())==="note"});return s.length>1&&n.push(...s.map(i=>new c(o.NOTE_REDEFINED,"Duplicate notes are defined",i))),n}registerField(e){if(e.callee&&V(e.callee)){const n=W(e.callee).unwrap(),s=Ze(n),i=this.symbolFactory.create(an,{declaration:e});e.symbol=i;const r=this.declarationNode.symbol.symbolTable;if(r.has(s)){const a=r.get(s);return[new c(o.DUPLICATE_TABLEGROUP_FIELD_NAME,`${n} already exists in the group`,e),new c(o.DUPLICATE_TABLEGROUP_FIELD_NAME,`${n} already exists in the group`,a.declaration)]}r.set(s,i)}return[]}}const kt=["-","+"];function oe(t){switch(t.type.value.toLowerCase()){case I.Enum:return An;case I.Table:return Sn;case I.TableGroup:return Rn;case I.Project:return yn;case I.Ref:return kn;case I.Note:return wn;case I.Indexes:return vn;default:return _n}}function xt(t){return!!z(t).unwrap_or(!1)}function Pn(t){return ke(t)}function ke(t){return t instanceof M&&t.expression instanceof te}function et(t,e,n){var i;t[0]==="public"&&(t=t.slice(1));let s=e;for(const r of t){let a;const l=ze(r);if(s.has(l)){if(a=(i=s.get(l))==null?void 0:i.symbolTable,!a)throw new Error("Expect a symbol table in a schema symbol")}else{a=new ye;const p=n.create(vt,{symbolTable:a});s.set(l,p)}s=a}return s}function St(t){return t==="-"||t==="<>"||t===">"||t==="<"}function tt(t){var n;if(!(t instanceof M)||!(t.expression instanceof be)||((n=t.expression.literal)==null?void 0:n.kind)!==u.COLOR_LITERAL)return!1;const e=t.expression.literal.value;if(e.length!==4&&e.length!==7||e[0]!=="#")return!1;for(let s=1;s<e.length;s+=1)if(!Kt(e[s]))return!1;return!0}function ue(t){return t===void 0}function Un(t){var e;return!!(Y(t)||fe(t)||me(t)&&["true","false","null"].includes(t.expression.variable.value.toLowerCase())||t instanceof H&&kt.includes((e=t.op)==null?void 0:e.value)&&fe(t.expression)||t instanceof se)}function fe(t){var e;return t instanceof M&&t.expression instanceof be&&((e=t.expression.literal)==null?void 0:e.kind)===u.NUMERIC_LITERAL}function Mn(t){var n;if(!(t instanceof H)||!St((n=t.op)==null?void 0:n.value))return!1;const e=z(t.expression).unwrap_or(void 0);return e!==void 0&&e.length>0}function Ot(t){return t instanceof ee&&t.elementList.every(V)}function C(t){var s;const e={},n=[];if(!t)return new X({});for(const i of t.elementList){if(!i.name)continue;if(i.name instanceof M){n.push(new c(o.INVALID_SETTINGS,"A setting name must be a stream of identifiers",i.name));continue}const r=(s=Te(i.name).unwrap_or(void 0))==null?void 0:s.toLowerCase();r&&(e[r]===void 0?e[r]=[i]:e[r].push(i))}return new X(e,n)}class dt{constructor(e,n){this.ast=e,this.symbolFactory=n,this.publicSchemaSymbol=this.symbolFactory.create(vt,{symbolTable:new ye}),this.ast.symbol=this.publicSchemaSymbol,this.ast.symbol.declaration=this.ast}validate(){const e=[];this.ast.body.forEach(s=>{if(s.parent=this.ast,s.type===void 0)return;const i=oe(s),r=new i(s,this.publicSchemaSymbol.symbolTable,this.symbolFactory);e.push(...r.validate())});const n=this.ast.body.filter(s=>we(s).unwrap_or(void 0)===I.Project);return n.length>1&&n.forEach(s=>e.push(new c(o.PROJECT_REDEFINED,"Only one project can exist",s))),new X(this.ast,e)}}class le{constructor(e,n){this.declarationNode=e,this.errors=n}bind(){this.bindSettingList(this.declarationNode.attributeList,this.settingList),this.bindBody()}bindSettingList(e,n){if(e)for(const s of e.elementList){if(s.name instanceof M)continue;const i=Te(s.name).unwrap_or(void 0);if(!i)continue;const r=n[i.toLowerCase()];r!=null&&r.shouldBind&&this.scanAndBind(s.value,r)}}bindBody(){const e=this.declarationNode;if(!e.body)return;const{body:n}=e;if(n instanceof K)for(const s of n.body)if(s instanceof A){if(!s.type)continue;const i=Dt(s);new i(s,this.errors).bind()}else this.bindSubfield(s);else this.bindSubfield(n)}bindSubfield(e){const n=[e.callee,...e.args],s=b.last(n);s instanceof R&&(n.pop(),this.bindSettingList(s,this.subfield.settingList));const{argBinderRules:i}=this.subfield.arg;for(let r=0;r<Math.min(n.length,i.length);r+=1)i[r].shouldBind&&this.scanAndBind(n[r],i[r])}scanAndBind(e,n){var s,i;if(e)if(e instanceof M){if(e.expression instanceof te&&((i=n.keywords)!=null&&i.includes((s=e.expression.variable)==null?void 0:s.value.toLowerCase())))return;this.bindFragments([e],n)}else e instanceof J?Ke(e)?this.bindFragments(pe(e).unwrap_or([]),n):(this.scanAndBind(e.leftExpression,n),this.scanAndBind(e.rightExpression,n)):e instanceof H?this.scanAndBind(e.expression,n):e instanceof Me?this.scanAndBind(e.expression,n):e instanceof ee&&e.elementList.forEach(r=>this.scanAndBind(r,n))}bindFragments(e,n){if(e.length===0)return;const s=[...n.topSubnamesSymbolKind],{remainingSubnamesSymbolKind:i}=n,r=e.findIndex(h=>!V(h)),l=r!==-1&&Ot(e[r])?e[r]:void 0,p=r>=0?s.pop():void 0,f=e.slice(0,r===-1?void 0:r);if(f.length===0)return;const E=[];for(;s.length&&f.length;){const h=s.pop(),m=f.pop(),g=W(m).unwrap();E.unshift({index:Ce(g,h),referrer:m})}for(;f.length;){const h=f.pop(),m=W(h).unwrap();E.unshift({index:Ce(m,i),referrer:h})}return l?l.elementList.forEach(h=>this.resolveIndexStack([...E,{index:Ce(W(h).unwrap(),p),referrer:h}],n.ignoreNameNotFound)):this.resolveIndexStack(E,n.ignoreNameNotFound)}resolveIndexStack(e,n){if(e.length===0)throw new Error("Unreachable - An unresolved name must have at least one name component");const[s,...i]=e,r=gn(s.index,this.declarationNode);if(r===void 0){const{kind:f,name:E}=re(s.index).unwrap();this.logError(s.referrer,`Can not find ${f} '${E}'`,n);return}r.references.push(s.referrer),s.referrer.referee=r;let a=r.symbolTable,{kind:l,name:p}=re(s.index).unwrap();for(const f of i){const{kind:E,name:h}=re(f.index).unwrap(),m=a.get(f.index);if(!m){this.logError(f.referrer,`${l} '${p}' does not have ${E} '${h}'`,n);return}if(l=E,p=h,f.referrer.referee=m,m.references.push(f.referrer),!m.symbolTable)break;a=m.symbolTable}}logError(e,n,s){s||this.errors.push(new c(o.BINDING_ERROR,n,e))}}class Fn extends le{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class Bn extends le{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Vn extends le{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[T.Table,T.Column],remainingSubnamesSymbolKind:T.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[T.Table,T.Column],remainingSubnamesSymbolKind:T.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[T.Table,T.Column],remainingSubnamesSymbolKind:T.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[T.Table,T.Column],remainingSubnamesSymbolKind:T.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class Gn extends le{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Cn extends le{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class Xn extends le{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[T.Table,T.Column],remainingSubnamesSymbolKind:T.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class $n extends le{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1},{shouldBind:!0,topSubnamesSymbolKind:[T.Enum],remainingSubnamesSymbolKind:T.Schema,ignoreNameNotFound:!0}]},settingList:{ref:{shouldBind:!0,topSubnamesSymbolKind:[T.Table,T.Column],remainingSubnamesSymbolKind:T.Schema,ignoreNameNotFound:!1},default:{shouldBind:!1}}},this.settingList={}}}class Wn extends le{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[T.Table],remainingSubnamesSymbolKind:T.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}function Dt(t){switch(t.type.value.toLowerCase()){case I.Enum:return Bn;case I.Table:return $n;case I.TableGroup:return Wn;case I.Project:return Cn;case I.Ref:return Xn;case I.Note:return Gn;case I.Indexes:return Vn;default:return Fn}}class jn{constructor(e){this.ast=e,this.errors=[]}resolve(){for(const e of this.ast.body)if(e.type){const n=Dt(e);new n(e,this.errors).bind()}return new X(this.ast,this.errors)}}class Yn{constructor(e){this.generator=e}create(e,n){return new e(n,this.generator.nextId())}}class zn{constructor(e,n){this.ast=e,this.symbolFactory=new Yn(n)}analyze(){return new dt(this.ast,this.symbolFactory).validate().chain(n=>new jn(n).resolve())}validate(){return new dt(this.ast,this.symbolFactory).validate().chain(n=>new X(n,[]))}}function Et(t,e){const{variables:n,tupleElements:s}=Ae(t).unwrap();return s?n.length===0?{schemaName:e.schemaName,tableName:e.name,fieldNames:s}:{tableName:n.pop(),schemaName:n.pop()||null,fieldNames:s}:n.length===1?{schemaName:e.schemaName,tableName:e.name,fieldNames:[n[0]]}:{fieldNames:[n.pop()],tableName:n.pop(),schemaName:n.pop()||null}}function Rt(t){switch(t){case"<":return["1","*"];case"<>":return["*","*"];case">":return["*","1"];case"-":return["1","1"]}throw new Error("Invalid relation op")}function _(t){return{start:{offset:t.startPos.offset,line:t.startPos.line+1,column:t.startPos.column+1},end:{offset:t.endPos.offset,line:t.endPos.line+1,column:t.endPos.column+1}}}function je(t){var n;const e=(n=pe(t).unwrap_or(void 0))==null?void 0:n.pop();return e instanceof ee?e.elementList.map(s=>s.referee):[e.referee]}function Ie(t){const e=z(t).unwrap();return{name:e.pop(),schemaName:e}}function Be(t){return t.expression.literal.value}function Pt(t,e){if(Array.isArray(t)){const i=t.map(({id:a})=>a).sort().join(","),r=e.map(({id:a})=>a).sort().join(",");return i<r?`${i}-${r}`:`${r}-${i}`}const n=t.id.toString(),s=e.id.toString();return n<s?`${n}-${s}`:`${s}-${n}`}function Ut(t,e){if(Array.isArray(t)){const i=t.map(({id:a})=>a).sort(),r=e.map(({id:a})=>a).sort();return b.zip(i,r).every(([a,l])=>a===l)}const n=t.id,s=e.id;return n===s}function ae(t){const e=t.split(`
10
- `),n=e.slice(e.findIndex(r=>r.trimStart()!=="")),s=n.filter(r=>r.trimStart()),i=Math.min(...s.map(r=>r.length-r.trimStart().length));return n.map(r=>r.slice(i)).join(`
11
- `)}class Mt{constructor(e,n){this.declarationNode=e,this.env=n,this.table={name:void 0,schemaName:void 0,alias:null,fields:[],token:void 0,indexes:[]},this.pkColumns=[]}interpret(){this.table.token=_(this.declarationNode),this.env.tables.set(this.declarationNode,this.table);const e=[...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)),e}interpretName(e){const{name:n,schemaName:s}=Ie(e);return s.length>1?(this.table.name=n,this.table.schemaName=s.join("."),[new c(o.UNSUPPORTED,"Nested schema is not supported",e)]):(this.table.name=n,this.table.schemaName=s.length?s[0]:null,[])}interpretAlias(e){if(!e)return[];const n=W(e).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(e){var i,r,a;const n=C(e).getValue();this.table.headerColor=(i=n.headercolor)!=null&&i.length?Be((a=(r=n.headercolor)==null?void 0:r.at(0))==null?void 0:a.value):void 0;const[s]=n.note||[];return this.table.note=s&&{value:$(s==null?void 0:s.value).map(ae).unwrap(),token:_(s)},[]}interpretBody(e){const[n,s]=b.partition(e.body,i=>i instanceof v);return[...this.interpretFields(n),...this.interpretSubElements(s)]}interpretSubElements(e){return e.flatMap(n=>{var s;switch((s=n.type)==null?void 0:s.value.toLowerCase()){case"note":return this.table.note={value:$(n.body instanceof K?n.body.body[0].callee:n.body.callee).map(ae).unwrap(),token:_(n)},[];case"indexes":return this.interpretIndexes(n)}return[]})}interpretFields(e){return e.flatMap(n=>this.interpretColumn(n))}interpretColumn(e){var a,l,p,f,E,h,m,g,P;const n=[],s={};s.name=W(e.callee).unwrap();const i=Qn(e.args[0]);s.type=i.getValue(),n.push(...i.getErrors()),s.token=_(e),s.inline_refs=[];const r=e.args.slice(1);if(b.last(r)instanceof R){const S=C(r.pop()).getValue();s.pk=!!((a=S.pk)!=null&&a.length)||!!((l=S["primary key"])!=null&&l.length),s.increment=!!((p=S.increment)!=null&&p.length),s.unique=!!((f=S.unique)!=null&&f.length),s.not_null=(E=S["not null"])!=null&&E.length?!0:(h=S.null)!=null&&h.length?!1:void 0,s.dbdefault=qn((g=(m=S.default)==null?void 0:m.at(0))==null?void 0:g.value);const F=(P=S.note)==null?void 0:P.at(0);s.note=F&&{value:$(F.value).map(ae).unwrap(),token:_(F)};const Le=S.ref||[];s.inline_refs=Le.flatMap(B=>{const[it]=je(B.value.expression);if(Ut(it,e.symbol))return n.push(new c(o.SAME_ENDPOINT,"Two endpoints are the same",B)),[];const xe=B.value.op,ne=z(B.value.expression).unwrap();let de;if(ne.length===1){const[ce]=ne;de={schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[ce],relation:xe.value,token:_(B)}}else if(ne.length===2){const[ce,ge]=ne;de={schemaName:null,tableName:ce,fieldNames:[ge],relation:xe.value,token:_(B)}}else if(ne.length===3){const[ce,ge,at]=ne;de={schemaName:ce,tableName:ge,fieldNames:[at],relation:xe.value,token:_(B)}}else{n.push(new c(o.UNSUPPORTED,"Nested schema is not supported",B));const ce=ne.pop(),ge=ne.pop();de={schemaName:ne.join("."),tableName:ge,fieldNames:[ce],relation:xe.value,token:_(B)}}const rt=this.registerInlineRefToEnv(e,it,de,B);return n.push(...rt),rt.length===0?de:[]})}return s.pk||(s.pk=r.some(S=>Q(S).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=r.some(S=>Q(S).unwrap().toLowerCase()==="unique")),this.table.fields.push(s),s.pk&&this.pkColumns.push(s),n}interpretIndexes(e){return this.table.indexes.push(...e.body.body.map(n=>{var a,l,p,f,E,h,m;const s={columns:[]},i=n;s.token=_(i);const r=[i.callee,...i.args];if(b.last(r)instanceof R){const g=C(r.pop()).getValue();s.pk=!!((a=g.pk)!=null&&a.length),s.unique=!!((l=g.unique)!=null&&l.length),s.name=$((f=(p=g.name)==null?void 0:p.at(0))==null?void 0:f.value).unwrap_or(void 0);const P=(E=g.note)==null?void 0:E.at(0);s.note=P&&{value:$(P.value).unwrap(),token:_(P)},s.type=Q((m=(h=g.type)==null?void 0:h.at(0))==null?void 0:m.value).unwrap_or(void 0)}return r.flatMap(g=>{if(!(g instanceof Z))return g;const P=[];for(;g instanceof Z;)P.push(g.argumentList),g=g.callee;return P.push(g),P}).forEach(g=>{const{functional:P,nonFunctional:S}=We(g).unwrap();s.columns.push(...P.map(F=>({value:F.value.value,type:"expression",token:_(F)})),...S.map(F=>({value:W(F).unwrap(),type:"column",token:_(F)})))}),s})),[]}registerInlineRefToEnv(e,n,s,i){const r=Pt(e.symbol,n);if(this.env.refIds[r])return[new c(o.CIRCULAR_REF,"References with same endpoints exist",i),new c(o.CIRCULAR_REF,"References with same endpoints exist",this.env.refIds[r])];const a=Rt(s.relation);return this.env.refIds[r]=i,this.env.ref.set(i,{name:null,schemaName:null,token:s.token,endpoints:[{...s,relation:a[1]},{schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[Q(e.callee).unwrap()],token:_(e),relation:a[0]}]}),[]}}function Qn(t){let e=null;t instanceof Z&&(e=t.argumentList.elementList.map(r=>fe(r)?r.expression.literal.value:Y(r)?$(r).unwrap():Q(r).unwrap()).join(","),t=t.callee);let n="";for(;t instanceof he;)n=`[${t.indexer.elementList.map(r=>r.name.expression.literal.value).join(",")}]${n}`,t=t.array;const{name:s,schemaName:i}=Ie(t);return i.length>1?new X({schemaName:i.length===0?null:i[0],type_name:`${s}${n}${e?`(${e})`:""}`,args:e},[new c(o.UNSUPPORTED,"Nested schema is not supported",t)]):new X({schemaName:i.length===0?null:i[0],type_name:`${s}${n}${e?`(${e})`:""}`,args:e})}function qn(t){var e,n,s;if(t){if(Y(t))return{value:$(t).unwrap(),type:"string"};if(fe(t))return{type:"number",value:Number.parseFloat(t.expression.literal.value)};if(me(t))return{value:t.expression.variable.value.toLowerCase(),type:"boolean"};if(t instanceof H&&kt.includes((e=t.op)==null?void 0:e.value)&&fe(t.expression)){const i=Number.parseFloat(t.expression.expression.literal.value);return{value:((n=t.op)==null?void 0:n.value)==="-"?0-i:i,type:"number"}}if(t instanceof se)return{value:(s=t.value)==null?void 0:s.value,type:"expression"};throw new Error("Unreachable")}}class Hn{constructor(e,n){this.declarationNode=e,this.env=n,this.note={name:void 0,content:void 0,token:void 0}}interpret(){return this.note.token=_(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(e){const{name:n}=Ie(e);return this.note.name=n,[]}interpretSettingList(e){var s,i,r;const n=C(e).getValue();return this.note.headerColor=(s=n.headercolor)!=null&&s.length?Be((r=(i=n.headercolor)==null?void 0:i.at(0))==null?void 0:r.value):void 0,[]}interpretBody(e){const[n,s]=b.partition(e.body,i=>i instanceof v);return n.length!==1||s.length>0?[new c(o.INVALID_NOTE,"Invalid note syntax",e)]:[...this.interpretNote(n[0])]}interpretNote(e){const n=b.get(e,"callee.expression.literal.value","");return this.note.content=ae(n),[]}}class Ft{constructor(e,n){this.declarationNode=e,this.env=n,this.container=this.declarationNode.parent instanceof A?this.env.tables.get(this.declarationNode.parent):void 0,this.ref={}}interpret(){return this.ref.token=_(this.declarationNode),this.env.ref.set(this.declarationNode,this.ref),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(e){const n=[],s=z(this.declarationNode.name).unwrap_or([]);return this.ref.name=s.pop()||null,s.length>1&&n.push(new c(o.UNSUPPORTED,"Nested schema is not supported",this.declarationNode.name)),this.ref.schemaName=s.join(".")||null,n}interpretBody(e){return e instanceof v?this.interpretField(e):this.interpretField(e.body[0])}interpretField(e){var f,E,h,m,g,P,S;const n=e.callee.op.value,{leftExpression:s,rightExpression:i}=e.callee,r=je(s),a=je(i);if(Ut(r,a))return[new c(o.SAME_ENDPOINT,"Two endpoints are the same",e)];const l=Pt(r,a);if(this.env.refIds[l])return[new c(o.CIRCULAR_REF,"References with same endpoints exist",this.declarationNode),new c(o.CIRCULAR_REF,"References with same endpoints exist",this.env.refIds[l])];if(e.args[0]){const F=C(e.args[0]).getValue(),Le=(E=(f=F.delete)==null?void 0:f.at(0))==null?void 0:E.value;this.ref.onDelete=Le instanceof q?Te(Le).unwrap_or(void 0):Q(Le).unwrap_or(void 0);const B=(m=(h=F.update)==null?void 0:h.at(0))==null?void 0:m.value;this.ref.onUpdate=B instanceof q?Te(B).unwrap_or(void 0):Q(B).unwrap_or(void 0),this.ref.color=(g=F.color)!=null&&g.length?Be((S=(P=F.color)==null?void 0:P.at(0))==null?void 0:S.value):void 0}const p=Rt(n);return this.ref.endpoints=[{...Et(s,this.container),relation:p[0],token:_(s)},{...Et(i,this.container),relation:p[1],token:_(i)}],this.env.refIds[l]=this.declarationNode,[]}}class Bt{constructor(e,n){this.declarationNode=e,this.env=n,this.tableGroup={tables:[]}}interpret(){const e=[];return this.tableGroup.token=_(this.declarationNode),this.env.tableGroups.set(this.declarationNode,this.tableGroup),e.push(...this.interpretName(this.declarationNode.name),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)),e}interpretName(e){const n=[],{name:s,schemaName:i}=Ie(e);return i.length>=2&&(this.tableGroup.name=s,this.tableGroup.schemaName=i.join("."),n.push(new c(o.UNSUPPORTED,"Nested schema is not supported",this.declarationNode.name))),this.tableGroup.name=s,this.tableGroup.schemaName=i[0]||null,n}interpretBody(e){const[n,s]=b.partition(e.body,i=>i instanceof v);return[...this.interpretFields(n),...this.interpretSubElements(s)]}interpretSubElements(e){return e.flatMap(n=>{var s;switch((s=n.type)==null?void 0:s.value.toLowerCase()){case"note":this.tableGroup.note={value:$(n.body instanceof K?n.body.body[0].callee:n.body.callee).map(ae).unwrap(),token:_(n)};break}return[]})}interpretFields(e){const n=[];return this.tableGroup.tables=e.map(s=>{const i=z(s.callee).unwrap();i.length>2&&n.push(new c(o.UNSUPPORTED,"Nested schema is not supported",s));const r=pe(s.callee).unwrap().pop().referee.id;if(this.env.groupOfTable[r]){const a=this.env.groupOfTable[r],{schemaName:l,name:p}=this.env.tableGroups.get(a),f=l?`${l}.${p}`:p;n.push(new c(o.TABLE_REAPPEAR_IN_TABLEGROUP,`Table "${i.join(".")}" already appears in group "${f}"`,s))}else this.env.groupOfTable[r]=this.declarationNode;return{name:i.pop(),schemaName:i.join(".")}}),n}interpretSettingList(e){var i,r,a;const n=C(e).getValue();this.tableGroup.color=(i=n.color)!=null&&i.length?Be((a=(r=n.color)==null?void 0:r.at(0))==null?void 0:a.value):void 0;const[s]=n.note||[];return this.tableGroup.note=s&&{value:$(s==null?void 0:s.value).map(ae).unwrap(),token:_(s)},[]}}class Vt{constructor(e,n){this.declarationNode=e,this.env=n,this.enum={values:[]}}interpret(){return this.enum.token=_(this.declarationNode),this.env.enums.set(this.declarationNode,this.enum),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(e){const{name:n,schemaName:s}=Ie(e);return s.length>1?(this.enum.name=n,this.enum.schemaName=s.join("."),[new c(o.UNSUPPORTED,"Nested schema is not supported",e)]):(this.enum.name=n,this.enum.schemaName=s.length?s[0]:null,[])}interpretBody(e){return e.body.flatMap(n=>{var l;const s=n,i={};i.token=_(s),i.name=Q(s.callee).unwrap();const a=(l=C(s.args[0]).getValue().note)==null?void 0:l.at(0);return i.note=a&&{value:$(a.value).map(ae).unwrap(),token:_(a)},this.enum.values.push(i),[]})}}class Jn{constructor(e,n){this.declarationNode=e,this.env=n,this.project={enums:[],refs:[],tableGroups:[],tables:[]}}interpret(){return this.env.project.set(this.declarationNode,this.project),this.project.token=_(this.declarationNode),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(e){if(!e)return this.project.name=null,[];const{name:n}=Ie(e);return this.project.name=n,[]}interpretBody(e){return e.body.flatMap(n=>{var i;const s=n;switch((i=s.type)==null?void 0:i.value.toLowerCase()){case"table":{const r=new Mt(s,this.env).interpret();return this.project.tables.push(this.env.tables.get(s)),r}case"ref":{const r=new Ft(s,this.env).interpret();return this.project.refs.push(this.env.ref.get(s)),r}case"tablegroup":{const r=new Bt(s,this.env).interpret();return this.project.tableGroups.push(this.env.tableGroups.get(s)),r}case"enum":{const r=new Vt(s,this.env).interpret();return this.project.enums.push(this.env.enums.get(s)),r}case"note":return this.project.note={value:$(s.body instanceof K?s.body.body[0].callee:s.body.callee).map(ae).unwrap(),token:_(s)},[];default:return this.project[s.type.value.toLowerCase()]=$(s.body.callee).unwrap(),[]}})}}class Zn{constructor(e){this.ast=e,this.env={schema:[],tables:new Map,notes:new Map,refIds:{},ref:new Map,enums:new Map,tableGroups:new Map,groupOfTable:{},aliases:[],project:new Map}}interpret(){const e=this.ast.body.flatMap(n=>{switch(we(n).unwrap_or(void 0)){case I.Table:return new Mt(n,this.env).interpret();case I.Note:return new Hn(n,this.env).interpret();case I.Ref:return new Ft(n,this.env).interpret();case I.TableGroup:return new Bt(n,this.env).interpret();case I.Enum:return new Vt(n,this.env).interpret();case I.Project:return new Jn(n,this.env).interpret();default:return[]}});return new X(Kn(this.env),e)}}function Kn(t){return{schemas:[],tables:Array.from(t.tables.values()),notes:Array.from(t.notes.values()),refs:Array.from(t.ref.values()),enums:Array.from(t.enums.values()),tableGroups:Array.from(t.tableGroups.values()),aliases:t.aliases,project:Array.from(t.project.values())[0]||{}}}var L=(t=>(t[t.Function=1]="Function",t[t.Constructor=2]="Constructor",t[t.Field=3]="Field",t[t.Variable=4]="Variable",t[t.Class=5]="Class",t[t.Struct=6]="Struct",t[t.Interface=7]="Interface",t[t.Module=8]="Module",t[t.Property=9]="Property",t[t.Event=10]="Event",t[t.Operator=11]="Operator",t[t.Unit=12]="Unit",t[t.Value=13]="Value",t[t.Constant=14]="Constant",t[t.Enum=15]="Enum",t[t.EnumMember=16]="EnumMember",t[t.Keyword=17]="Keyword",t[t.Text=18]="Text",t[t.Color=19]="Color",t[t.File=20]="File",t[t.Reference=21]="Reference",t[t.Customcolor=22]="Customcolor",t[t.Folder=23]="Folder",t[t.TypeParameter=24]="TypeParameter",t[t.User=25]="User",t[t.Issue=26]="Issue",t[t.Snippet=27]="Snippet",t))(L||{}),w=(t=>(t[t.None=0]="None",t[t.KeepWhitespace=1]="KeepWhitespace",t[t.InsertAsSnippet=4]="InsertAsSnippet",t))(w||{});function ve(t){switch(t){case T.Schema:return L.Module;case T.Table:return L.Class;case T.Column:return L.Field;case T.Enum:return L.Enum;case T.EnumField:return L.EnumMember;case T.TableGroup:return L.Struct;case T.TableGroupField:return L.Field;default:return L.Text}}function Pe(t,e){if(!t||$e(t))return!1;for(const n of t.trailingTrivia){if(n.start>e)break;if(n.kind===u.NEWLINE&&n.end<=e)return!1}return!0}function D(){return{suggestions:[]}}function Ue(t){return{...t,suggestions:t.suggestions.map(e=>({...e,insertText:` ${e.insertText}`}))}}function Ve(t){return{...t,suggestions:t.suggestions.map(e=>({...e,insertText:e.insertText.split("").every(Fe)?e.insertText:`"${e.insertText}"`}))}}function nt(t,e){return t.getOffsetAt(e)}class Gt{constructor(e,n=[]){this.compiler=e,this.triggerCharacters=n}provideCompletionItems(e,n){var E,h;const s=nt(e,n),i=this.compiler.token.flatStream(),{token:r,index:a}=this.compiler.container.token(s),l=a===void 0?i[0]:i[a+1];if([...(r==null?void 0:r.trailingTrivia)||[],...(r==null?void 0:r.leadingTrivia)||[],...(l==null?void 0:l.leadingTrivia)||[]].find(m=>zt(m)&&_e(s,m)))return D();if(a===void 0)return It();if([u.STRING_LITERAL,u.QUOTED_STRING].includes(r.kind)&&_e(s,r))return D();const p=this.compiler.container.element(s);if(this.compiler.container.scopeKind(s)===O.TOPLEVEL||p instanceof A&&p.type&&p.type.start<=s&&p.type.end>=s)return It();const f=[...this.compiler.container.stack(s)].reverse();for(const m of f)if(m instanceof H)switch((E=m.op)==null?void 0:E.value){case">":case"<":case"<>":case"-":return Nt(this.compiler,s,m)}else if(m instanceof J)switch((h=m.op)==null?void 0:h.value){case">":case"<":case"<>":case"-":return Nt(this.compiler,s,m);case".":return Ct(this.compiler,s,m)}else{if(m instanceof ie)return mt(this.compiler,s,m);if(m instanceof R)return mt(this.compiler,s,m);if(m instanceof ee)return es(this.compiler,s);if(m instanceof v)return bt(this.compiler,s,m);if(m instanceof A&&(m.bodyColon&&s>=m.bodyColon.end||m.body&&_e(s,m.body)))return bt(this.compiler,s,void 0)}return D()}}function Nt(t,e,n){const s=t.container.scopeKind(e);if([O.REF,O.TABLE].includes(s)){const i=Ge(t,e,t.container.element(e),[T.Table,T.Schema,T.Column]);return Pe(n.op,e)?Ue(i):i}return D()}function Ge(t,e,n,s){var a;if(n===void 0)return D();let i=n;const r={suggestions:[]};for(;i;){if((a=i==null?void 0:i.symbol)!=null&&a.symbolTable){const{symbol:l}=i;r.suggestions.push(...t.symbol.members(l).filter(({kind:p})=>s.includes(p)).map(({name:p,kind:f})=>({label:p,insertText:p,insertTextRules:w.KeepWhitespace,kind:ve(f),sortText:ve(f).toString().padStart(2,"0"),range:void 0})))}i=i instanceof A?i.parent:void 0}return Ve(r)}function es(t,e){var s;switch(t.container.scopeKind(e)){case O.INDEXES:return $t(t,e);case O.REF:{const i=[...t.container.stack(e)];for(;i.length>0;){const r=i.pop();if(r instanceof J&&((s=r.op)==null?void 0:s.value)===".")return Ct(t,e,r)}}return Xt(t,e)}return D()}function mt(t,e,n){const{token:s}=t.container.token(e);if([u.COMMA,u.LBRACKET].includes(s==null?void 0:s.kind)){const i=Tt(t,e);return(s==null?void 0:s.kind)===u.COMMA&&Pe(s,e)?Ue(i):i}if(n.name&&n.name.start<=e&&n.name.end>=e)return Tt(t,e);if(n.name instanceof q){const i=ts(t,e,Te(n.name).unwrap_or(""));return(s==null?void 0:s.kind)===u.COLON&&Pe(s,e)?Ue(i):i}return D()}function Tt(t,e){const n=t.container.element(e),s=t.container.scopeKind(e);if(n instanceof j)return D();if(n.body&&!_e(e,n.body))switch(s){case O.TABLE:return{suggestions:["headercolor","note"].map(i=>({label:i,insertText:`${i}: `,kind:L.Field,insertTextRules:w.KeepWhitespace,range:void 0}))};case O.TABLEGROUP:return{suggestions:["color","note"].map(i=>({label:i,insertText:`${i}: `,kind:L.Field,insertTextRules:w.KeepWhitespace,range:void 0}))};default:return D()}switch(s){case O.TABLE:return{suggestions:[...["primary key","null","not null","increment","pk","unique"].map(i=>({label:i,insertText:i,kind:L.Property,insertTextRules:w.KeepWhitespace,range:void 0})),...["ref","default"].map(i=>({label:i,insertText:`${i}: `,kind:L.Property,insertTextRules:w.KeepWhitespace,range:void 0})),{label:"note",insertText:"note: ",kind:L.Property,insertTextRules:w.KeepWhitespace,range:void 0}]};case O.ENUM:return{suggestions:[{label:"note",insertText:"note: ",kind:L.Property,insertTextRules:w.KeepWhitespace,range:void 0}]};case O.INDEXES:return{suggestions:[...["unique","pk"].map(i=>({label:i,insertText:i,insertTextRules:w.KeepWhitespace,kind:L.Property,range:void 0})),...["note","name","type"].map(i=>({label:i,insertText:`${i}: `,kind:L.Property,insertTextRules:w.KeepWhitespace,range:void 0}))]};case O.REF:return{suggestions:["update","delete"].map(i=>({label:i,insertText:`${i}: `,kind:L.Property,insertTextRules:w.KeepWhitespace,range:void 0}))}}return D()}function ts(t,e,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:L.Value,insertTextRules:w.KeepWhitespace,range:void 0}))};case"type":return{suggestions:["btree","hash"].map(s=>({label:s,insertText:`${s}`,kind:L.Value,insertTextRules:w.KeepWhitespace,range:void 0}))}}return D()}function Ct(t,e,n){const s=pe(n).unwrap_or([]);if(s.pop(),s.some(r=>!V(r)))return D();const i=s.map(r=>Q(r).unwrap());return Ve({suggestions:t.symbol.ofName({nameStack:i,owner:t.container.element(e)}).flatMap(({symbol:r})=>t.symbol.members(r)).map(({kind:r,name:a})=>({label:a,insertText:a,kind:ve(r),range:void 0}))})}function bt(t,e,n){var i;switch(t.container.scopeKind(e)){case O.TABLE:return ss(t,e,n);case O.PROJECT:return is(t,e,n);case O.INDEXES:return as(t,e);case O.ENUM:return ns(t,e,n);case O.REF:{const r=Xt(t,e);return((i=t.container.token(e).token)==null?void 0:i.kind)===u.COLON&&Pe(t.container.token(e).token,e)?Ue(r):r}case O.TABLEGROUP:return rs(t);default:return D()}}function It(){return{suggestions:["Table","TableGroup","Enum","Project","Ref"].map(t=>({label:t,insertText:t,insertTextRules:w.KeepWhitespace,kind:L.Keyword,range:void 0}))}}function ns(t,e,n){return n!=null&&n.callee&&st(e,n)===1?Ge(t,e,t.container.element(e),[T.Schema,T.Table,T.Column]):D()}function ss(t,e,n){if(!(n!=null&&n.callee))return{suggestions:["Note","indexes"].map(i=>({label:i,insertText:i,insertTextRules:w.KeepWhitespace,kind:L.Keyword,range:void 0}))};const s=st(e,n);return s===0?{suggestions:["Note","indexes"].map(i=>({label:i,insertText:i,insertTextRules:w.KeepWhitespace,kind:L.Keyword,range:void 0}))}:s===1?os(t,e):D()}function is(t,e,n){return n!=null&&n.callee?st(e,n)===0?{suggestions:["Table","TableGroup","Enum","Note","Ref"].map(i=>({label:i,insertText:i,insertTextRules:w.KeepWhitespace,kind:L.Keyword,range:void 0}))}:D():{suggestions:["Table","TableGroup","Enum","Note","Ref"].map(i=>({label:i,insertText:i,insertTextRules:w.KeepWhitespace,kind:L.Keyword,range:void 0}))}}function Xt(t,e){return Ge(t,e,t.container.element(e),[T.Schema,T.Table,T.Column])}function rs(t){return{suggestions:[...Ve({suggestions:[...t.parse.publicSymbolTable().entries()].flatMap(([e])=>{const n=re(e).unwrap_or(void 0);if(n===void 0)return[];const{kind:s,name:i}=n;return s!==T.Table&&s!==T.Schema?[]:{label:i,insertText:i,insertTextRules:w.KeepWhitespace,kind:ve(s),range:void 0}})}).suggestions,...["Note"].map(e=>({label:e,insertText:e,insertTextRules:w.KeepWhitespace,kind:L.Keyword,range:void 0}))]}}function as(t,e){return $t(t,e)}function os(t,e){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:w.KeepWhitespace,kind:L.TypeParameter,sortText:L.TypeParameter.toString().padStart(2,"0"),range:void 0})),...Ge(t,e,t.container.element(e),[T.Enum,T.Schema]).suggestions]}}function $t(t,e){const n=t.container.element(e),s=n==null?void 0:n.parent;if(!((s==null?void 0:s.symbol)instanceof wt))return D();const{symbolTable:i}=s.symbol;return Ve({suggestions:[...i.entries()].flatMap(([r])=>{const a=re(r).unwrap_or(void 0);if(a===void 0)return[];const{name:l}=a;return{label:l,insertText:l,insertTextRules:w.KeepWhitespace,kind:ve(T.Column),range:void 0}})})}function st(t,e){if(!e.callee)return-1;const n=[e.callee,...e.args],s=n.findIndex(i=>t<=i.end);return s===-1?n.length:s}class Wt{constructor(e){this.compiler=e}provideDefinition(e,n){var a;const{uri:s}=e,i=nt(e,n),r=[...this.compiler.container.stack(i)];for(;r.length!==0;){const l=r.pop();if((a=l==null?void 0:l.referee)!=null&&a.declaration&&[Ne.PRIMARY_EXPRESSION,Ne.VARIABLE].includes(l==null?void 0:l.kind)){const{startPos:p,endPos:f}=l.referee.declaration;return[{range:{startColumn:p.column+1,startLineNumber:p.line+1,endColumn:f.column+1,endLineNumber:f.line+1},uri:s}]}}return[]}}class jt{constructor(e){this.compiler=e}provideReferences(e,n){const{uri:s}=e,i=nt(e,n),r=[...this.compiler.container.stack(i)];for(;r.length!==0;){const a=r.pop();if(a&&[Ne.ELEMENT_DECLARATION,Ne.FUNCTION_APPLICATION,Ne.PRIMARY_EXPRESSION].includes(a==null?void 0:a.kind)){const{symbol:l}=a;if(l!=null&&l.references.length)return l.references.map(({startPos:p,endPos:f})=>({range:{startColumn:p.column+1,startLineNumber:p.line+1,endColumn:f.column+1,endLineNumber:f.line+1},uri:s}))}}return[]}}const ls=Object.freeze(Object.defineProperty({__proto__:null,CompletionItemInsertTextRule:w,CompletionItemKind:L,DBMLCompletionItemProvider:Gt,DBMLDefinitionProvider:Wt,DBMLReferencesProvider:jt},Symbol.toStringTag,{value:"Module"}));var O=(t=>(t[t.TABLE=0]="TABLE",t[t.ENUM=1]="ENUM",t[t.TABLEGROUP=2]="TABLEGROUP",t[t.INDEXES=3]="INDEXES",t[t.NOTE=4]="NOTE",t[t.REF=5]="REF",t[t.PROJECT=6]="PROJECT",t[t.CUSTOM=7]="CUSTOM",t[t.TOPLEVEL=8]="TOPLEVEL",t))(O||{});class cs{constructor(){this.source="",this.cache=new Array(16).fill(null),this.nodeIdGenerator=new Qt,this.symbolIdGenerator=new en,this.token={invalidStream:this.createQuery(6,()=>this.parse.tokens().filter(yt)),flatStream:this.createQuery(7,()=>this.parse.tokens().flatMap(e=>[...e.leadingInvalid,e,...e.trailingInvalid]))},this.parse={source:()=>this.source,_:this.createQuery(0,()=>{const e=new hn(this.source).lex().chain(n=>new dn(n,this.nodeIdGenerator).parse()).chain(({ast:n,tokens:s})=>new zn(n,this.symbolIdGenerator).analyze().map(()=>({ast:n,tokens:s})));return e.getErrors().length>0?e:e.chain(({ast:n,tokens:s})=>new Zn(n).interpret().map(r=>({ast:n,tokens:s,rawDb:r})))}),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,e=>{const n=this.token.flatStream(),{index:s,token:i}=this.container.token(e),r=s===void 0?-1:b.findLastIndex(n,f=>!f.isInvalid,s);if(r===-1)return[this.parse.ast()];const a=n[r].start;let l=this.parse.ast();const p=[l];for(;;){const E=un(l).find(h=>_e(a,h));if(E===void 0||E instanceof G)break;p.push(E),l=E}if((i==null?void 0:i.kind)===u.COLON)return p;for(;p.length>0;){let f=!1;const E=b.last(p);if(E instanceof v){const h=this.parse.source();for(let m=E.end;m<e;m+=1)h[m]===`
12
- `&&(p.pop(),f=!0)}else E instanceof H||E instanceof J?this.container.token(e).token!==E.op&&(p.pop(),f=!0):E instanceof R?E.listCloseBracket&&E.end<=e&&(p.pop(),f=!0):E instanceof ee?E.tupleCloseParen&&E.end<=e&&(p.pop(),f=!0):E instanceof K?E.blockCloseBrace&&E.end<=e&&(p.pop(),f=!0):E instanceof q||E.end<e&&(p.pop(),f=!0);if(f){const h=b.last(p);h instanceof A&&h.end<=e&&p.pop()}if(!f)break}return p}),token:this.createQuery(11,e=>{const n=this.token.flatStream().findIndex(s=>s.start>=e);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,e=>{const n=this.container.stack(e);for(let s=n.length-1;s>=0;s-=1)if(n[s]instanceof A)return n[s];return this.parse.ast()}),scope:this.createQuery(14,e=>{var n,s;return(s=(n=this.container.element(e))==null?void 0:n.symbol)==null?void 0:s.symbolTable}),scopeKind:this.createQuery(15,e=>{var s;if(this.container.element(e)instanceof j)return 8;switch((s=this.container.element(e).type)==null?void 0:s.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;default:return 7}})},this.symbol={ofName:this.createQuery(8,({nameStack:e,owner:n=this.parse.ast()})=>{var i;if(e.length===0)return[];const s=[];for(let r=n;r;r=r instanceof A?r.parent:void 0){if(!((i=r.symbol)!=null&&i.symbolTable))continue;const{symbolTable:a}=r.symbol;let l=[a],p=[];for(const f of e)p=l.flatMap(E=>Zt(f).flatMap(h=>{const m=E.get(h),g=re(h).unwrap_or(void 0);return!m||!g?[]:{...g,symbol:m}})),l=p.flatMap(E=>E.symbol.symbolTable?E.symbol.symbolTable:[]);s.push(...p)}return s},({nameStack:e,owner:n})=>`${e.join(".")}@${n.id}`),members:this.createQuery(9,e=>e.symbolTable?[...e.symbolTable.entries()].map(([n,s])=>({...re(n).unwrap(),symbol:s})):[])}}createQuery(e,n,s){return i=>{const r=this.cache[e],a=i&&s?s(i):i;if(r!==null){if(!(r instanceof Map))return r;if(r.has(a))return r.get(a)}const l=n(i);return i!==void 0?r instanceof Map?r.set(a,l):(this.cache[e]=new Map,this.cache[e].set(a,l)):this.cache[e]=l,l}}setSource(e){this.source=e,this.cache=new Array(16).fill(null),this.nodeIdGenerator.reset(),this.symbolIdGenerator.reset()}initMonacoServices(){return{definitionProvider:new Wt(this),referenceProvider:new jt(this),autocompletionProvider:new Gt(this)}}}exports.Compiler=cs;exports.serialize=qt;exports.services=ls;
9
+ `;case"\\":return"\\";case"r":return"\r";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()||!Ae(this.peek()))return this.errors.push(new l(o.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`,J.create(h.STRING_LITERAL,e,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 Fe=(t=>(t[t.ListExpression=0]="ListExpression",t[t.GroupExpression=1]="GroupExpression",t[t.BlockExpression=2]="BlockExpression",t))(Fe||{});class vn{constructor(){this.stack=[],this.numberOfNestedLParens=0,this.numberOfNestedLBrackets=0,this.numberOfNestedLBraces=0}push(e){this.stack.push(e),e===0&&(this.numberOfNestedLBrackets+=1),e===1&&(this.numberOfNestedLParens+=1),e===2&&(this.numberOfNestedLBraces+=1)}pop(){const e=this.stack.pop();return e===0&&(this.numberOfNestedLBrackets-=1),e===1&&(this.numberOfNestedLParens-=1),e===2&&(this.numberOfNestedLBraces-=1),e}top(){return I.last(this.stack)}isWithinGroupExpressionContext(){return this.numberOfNestedLParens>0}isWithinListExpressionContext(){return this.numberOfNestedLBrackets>0}isWithinBlockExpressionContext(){return this.numberOfNestedLBraces>0}withContextDo(e,n){return()=>{this.push(e);try{return n()}finally{this.pop()}}}findHandlerContext(e,n){if(!(this.numberOfNestedLBraces<=0&&this.numberOfNestedLBrackets<=0&&this.numberOfNestedLParens<=0))for(let s=n;s<e.length-1;s+=1)switch(e[s].kind){case h.COMMA:if(this.isWithinGroupExpressionContext()||this.isWithinListExpressionContext())return[...this.stack].reverse().find(a=>[1,0].includes(a));break;case h.RPAREN:if(this.isWithinGroupExpressionContext())return 1;break;case h.RBRACE:if(this.isWithinBlockExpressionContext())return 2;break;case h.RBRACKET:if(this.isWithinListExpressionContext())return 0;break}}}class wn{constructor(e){this.generator=e}create(e,n){return new e(n,this.generator.nextId())}}class N{constructor(e,n,s){this.token=e,this.partialNode=n,this.handlerContext=s}}class yn{constructor(e,n){this.current=0,this.errors=[],this.contextStack=new vn,this.synchronizeProgram=()=>{const s=this.peek();s.kind!==h.EOF?T(this.advance()):(T(this.peek()),this.logError(s,o.UNEXPECTED_EOF,"Unexpected EOF"))},this.synchronizeElementDeclarationName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(Et(s)||this.check(h.COLON,h.LBRACE,h.LBRACKET))break;T(s),this.advance()}},this.synchronizeElementDeclarationAlias=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(h.COLON,h.LBRACE,h.LBRACKET))break;T(s),this.advance()}},this.blockExpression=this.contextStack.withContextDo(Fe.BlockExpression,()=>{const s={body:[]},i=()=>this.nodeFactory.create(re,s);try{this.consume("Expect an opening brace '{'",h.LBRACE),s.blockOpenBrace=this.previous()}catch(a){if(!(a instanceof N))throw a;if(s.blockOpenBrace=a.partialNode,!this.canHandle(a))throw new N(a.token,i(),a.handlerContext);this.synchronizeBlock()}for(;!this.isAtEnd()&&!this.check(h.RBRACE);)try{if(this.match(h.TILDE)){const a=this.previous(),r=this.variable(),c=this.nodeFactory.create(Le,{op:a,partial:r});s.body.push(c)}else s.body.push(this.canBeField()?this.fieldDeclaration():this.expression())}catch(a){if(!(a instanceof N))throw a;if(s.body.push(a.partialNode),!this.canHandle(a))throw new N(a.token,i(),a.handlerContext);this.synchronizeBlock()}try{this.consume("Expect a closing brace '}'",h.RBRACE),s.blockCloseBrace=this.previous()}catch(a){if(!(a instanceof N))throw a;if(s.blockCloseBrace=a.partialNode,!this.canHandle(a))throw new N(a.token,i(),a.handlerContext);this.synchronizeBlock()}return i()}),this.synchronizeBlock=()=>{if(!this.check(h.RBRACE))for(T(this.advance());!this.isAtEnd();){const s=this.peek();if(this.check(h.RBRACE)||pt(this.previous(),s))break;T(s),this.advance()}},this.tupleExpression=this.contextStack.withContextDo(Fe.GroupExpression,()=>{const s={elementList:[],commaList:[]},i=()=>this.nodeFactory.create(et,{groupOpenParen:s.tupleOpenParen,groupCloseParen:s.tupleCloseParen,expression:s.elementList[0]}),a=()=>this.nodeFactory.create(fe,s);try{this.consume("Expect an opening parenthesis '('",h.LPAREN),s.tupleOpenParen=this.previous()}catch(r){if(!(r instanceof N))throw r;if(s.tupleOpenParen=r.partialNode,!this.canHandle(r))throw new N(r.token,a(),r.handlerContext);this.synchronizeTuple()}if(!this.isAtEnd()&&!this.check(h.RPAREN))try{s.elementList.push(this.normalExpression())}catch(r){if(!(r instanceof N))throw r;if(s.elementList.push(r.partialNode),!this.canHandle(r))throw new N(r.token,i(),r.handlerContext);this.synchronizeTuple()}for(;!this.isAtEnd()&&!this.check(h.RPAREN);)try{this.consume("Expect a comma ','",h.COMMA),s.commaList.push(this.previous()),s.elementList.push(this.normalExpression())}catch(r){if(!(r instanceof N))throw r;if(r.partialNode instanceof D&&s.elementList.push(r.partialNode),!this.canHandle(r))throw new N(r.token,a(),r.handlerContext);this.synchronizeTuple()}try{this.consume("Expect a closing parenthesis ')'",h.RPAREN),s.tupleCloseParen=this.previous()}catch(r){if(!(r instanceof N))throw r;if(s.tupleCloseParen=r.partialNode,!this.canHandle(r))throw new N(r.token,a(),r.handlerContext);this.synchronizeTuple()}return s.elementList.length===1?i():a()}),this.synchronizeTuple=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(h.RPAREN,h.COMMA))break;T(s),this.advance()}},this.listExpression=this.contextStack.withContextDo(Fe.ListExpression,()=>{const s={elementList:[],commaList:[]},i=()=>this.nodeFactory.create(R,s);try{this.consume("Expect an opening bracket '['",h.LBRACKET),s.listOpenBracket=this.previous()}catch(a){if(!(a instanceof N))throw a;if(s.listOpenBracket=a.partialNode,!this.canHandle(a))throw new N(a.token,i(),a.handlerContext);this.synchronizeList()}if(!this.isAtEnd()&&!this.check(h.RBRACKET))try{s.elementList.push(this.attribute())}catch(a){if(!(a instanceof N))throw a;if(s.elementList.push(a.partialNode),!this.canHandle(a))throw new N(a.token,i(),a.handlerContext);this.synchronizeList()}for(;!this.isAtEnd()&&!this.check(h.RBRACKET);)try{this.consume("Expect a comma ','",h.COMMA),s.commaList.push(this.previous()),s.elementList.push(this.attribute())}catch(a){if(!(a instanceof N))throw a;if(a.partialNode instanceof D&&s.elementList.push(a.partialNode),!this.canHandle(a))throw new N(a.token,i(),a.handlerContext);this.synchronizeList()}try{this.consume("Expect a closing bracket ']'",h.RBRACKET),s.listCloseBracket=this.previous()}catch(a){if(!(a instanceof N))throw a;if(s.listCloseBracket=a.partialNode,!this.canHandle(a))throw new N(a.token,i(),a.handlerContext);this.synchronizeList()}return i()}),this.synchronizeList=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(h.COMMA,h.RBRACKET))break;T(s),this.advance()}},this.synchronizeAttributeName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(h.COMMA,h.RBRACKET,h.COLON))break;T(s),this.advance()}},this.synchronizeAttributeValue=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(h.COMMA,h.RBRACKET))break;T(s),this.advance()}},this.tokens=e,this.nodeFactory=new wn(n)}isAtEnd(){return this.current>=this.tokens.length||this.tokens[this.current].kind===h.EOF}advance(){return this.isAtEnd()?I.last(this.tokens):this.tokens[this.current++]}peek(e=0){return e+this.current>=this.tokens.length?I.last(this.tokens):this.tokens[this.current+e]}match(...e){const n=this.check(...e);return n&&this.advance(),n}check(...e){const n=this.peek();return e.includes(n.kind)}previous(){return this.tokens[this.current-1]}canHandle(e){return e.handlerContext===void 0||e.handlerContext===this.contextStack.top()}consume(e,...n){if(!this.match(...n))throw this.logError(this.peek(),o.UNEXPECTED_TOKEN,e),new N(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}discardUntil(e,...n){if(this.isAtEnd()||!this.check(...n)){for(T(this.peek()),this.logError(this.advance(),o.UNEXPECTED_TOKEN,e);!this.isAtEnd()&&!this.check(...n);)T(this.advance());return!this.isAtEnd()}return!0}gatherInvalid(){const e=[],n=[];let s,i=0;for(;i<this.tokens.length&&this.tokens[i].isInvalid;i+=1)n.push(this.tokens[i]);for(s=this.tokens[i],s.leadingInvalid=n,e.push(s),i+=1;i<this.tokens.length;i+=1){const a=this.tokens[i];a.isInvalid?s.trailingInvalid.push(a):(s=a,e.push(s))}this.tokens=e}parse(){const e=this.program(),n=this.advance(),s=this.nodeFactory.create(Z,{body:e,eof:n});return this.gatherInvalid(),new Y({ast:s,tokens:this.tokens},this.errors)}program(){const e=[];for(;!this.isAtEnd();)try{const n=this.elementDeclaration();e.push(n)}catch(n){if(!(n instanceof N))throw n;e.push(n.partialNode),this.synchronizeProgram()}return e}elementDeclaration(){const e={},n=()=>this.nodeFactory.create(y,e);try{this.consume("Expect an identifier",h.IDENTIFIER),e.type=this.previous()}catch(s){throw s instanceof N?(e.type=s.partialNode,new N(s.token,n(),s.handlerContext)):s}if(!this.check(h.COLON,h.LBRACE,h.LBRACKET))try{e.name=this.normalExpression()}catch(s){if(!(s instanceof N))throw s;if(e.name=s.partialNode,!this.canHandle(s))throw new N(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationName()}if(Et(this.peek()))if(e.as=this.advance(),this.check(h.COLON,h.LBRACE,h.LBRACKET))this.logError(this.peek(),o.UNEXPECTED_TOKEN,"Expect an alias");else try{e.alias=this.normalExpression()}catch(s){if(!(s instanceof N))throw s;if(e.alias=s.partialNode,!this.canHandle(s))throw new N(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationAlias()}try{e.attributeList=this.check(h.LBRACKET)?this.listExpression():void 0}catch(s){throw s instanceof N?(e.attributeList=s.partialNode,new N(s.token,n(),s.handlerContext)):s}if(!this.discardUntil("Expect an opening brace '{' or a colon ':'",h.LBRACE,h.COLON))return n();try{if(this.match(h.COLON)){e.bodyColon=this.previous();const s=this.expression();s instanceof y?(T(s),this.logError(s,o.UNEXPECTED_ELEMENT_DECLARATION,"An element's simple body must not be an element declaration")):e.body=s}else e.body=this.blockExpression()}catch(s){throw s instanceof N?(e.body=s.partialNode,new N(s.token,n(),s.handlerContext)):s}return this.nodeFactory.create(y,e)}fieldDeclaration(){const e={},n=()=>this.nodeFactory.create(y,e);try{this.consume("Expect an identifier",h.IDENTIFIER),e.type=this.previous()}catch(s){throw s instanceof N?(e.type=s.partialNode,new N(s.token,n(),s.handlerContext)):s}try{this.consume("Expect a colon ':'",h.COLON),e.bodyColon=this.previous()}catch(s){throw s instanceof N?(e.bodyColon=s.partialNode,new N(s.token,n(),s.handlerContext)):s}try{const s=this.expression();s instanceof y?this.errors.push(new l(o.INVALID_ELEMENT_IN_SIMPLE_BODY,"Simple body cannot be an element declaration",s)):e.body=s}catch(s){throw s instanceof N?(e.body=s.partialNode,new N(s.token,n(),s.handlerContext)):s}return this.nodeFactory.create(y,e)}expression(){const e={args:[]},n=()=>In(e.callee,e.args,this.nodeFactory).unwrap_or(this.nodeFactory.create(v,e));try{e.callee=this.normalExpression()}catch(i){throw i instanceof N?(e.callee=i.partialNode,new N(i.token,n(),i.handlerContext)):i}if(this.shouldStopExpression())return n();let s=e.callee;for(;!this.shouldStopExpression();){Ze(this.previous())||this.logError(s,o.MISSING_SPACES,"Expect a following space");try{s=this.normalExpression(),e.args.push(s)}catch(i){throw i instanceof N?(s=i.partialNode,e.args.push(s),new N(i.token,n(),i.handlerContext)):i}}return n()}shouldStopExpression(){if(this.isAtEnd()||yt(this.previous()))return!0;const e=this.peek().kind;return e===h.RBRACE||e===h.RBRACKET||e===h.RPAREN||e===h.COMMA||e===h.COLON}normalExpression(){return this.expression_bp(0)}expression_bp(e){let n=this.leftExpression_bp();for(;!this.isAtEnd();){const s=this.peek();if(s.kind===h.LPAREN){const{left:i}=Nt(s);if(i<e||pt(this.previous(),s)&&!this.contextStack.isWithinGroupExpressionContext()&&!this.contextStack.isWithinListExpressionContext())break;try{n=this.nodeFactory.create(q,{callee:n,argumentList:this.tupleExpression()})}catch(a){throw a instanceof N?(n=this.nodeFactory.create(q,{callee:n,argumentList:a.partialNode}),new N(a.token,n,a.handlerContext)):a}}else if(s.kind===h.LBRACKET){if(Ze(this.previous()))break;try{n=this.nodeFactory.create(ue,{expression:n,indexer:this.listExpression()})}catch(i){throw i instanceof N?(n=this.nodeFactory.create(ue,{expression:n,indexer:i.partialNode}),new N(i.token,n,i.handlerContext)):i}}else if(ft(s)){const i=s,a=Nt(i);if(a.left!==null){if(a.left<=e)break;this.advance(),n=this.nodeFactory.create(je,{expression:n,op:i})}else{const r=Sn(i);if(r.left===null||r.left<=e)break;this.advance();try{n=this.nodeFactory.create(le,{leftExpression:n,op:i,rightExpression:i.value==="."?this.extractOperand():this.expression_bp(r.right)})}catch(c){throw c instanceof N?(n=this.nodeFactory.create(le,{leftExpression:n,op:i,rightExpression:c.partialNode}),new N(c.token,n,c.handlerContext)):c}}}else break}return n}leftExpression_bp(){let e;if(ft(this.peek())){const n={};n.op=this.peek();const s=xn(n.op);if(s.right===null)throw this.logError(n.op,o.UNKNOWN_PREFIX_OP,`Unexpected '${n.op.value}' in an expression`),new N(n.op,this.nodeFactory.create(Ue,{pre:n.op}),this.contextStack.findHandlerContext(this.tokens,this.current));this.advance();try{n.expression=this.expression_bp(s.right)}catch(i){throw i instanceof N?(n.expression=i.partialNode,new N(i.token,this.nodeFactory.create(K,n),i.handlerContext)):i}e=this.nodeFactory.create(K,n)}else if(e=this.extractOperand(),e instanceof Ue)throw new N(this.peek(),this.nodeFactory.create(Ue,{pre:this.peek()}),this.contextStack.findHandlerContext(this.tokens,this.current));return e}extractOperand(){return this.check(h.NUMERIC_LITERAL,h.STRING_LITERAL,h.COLOR_LITERAL,h.QUOTED_STRING,h.IDENTIFIER)?this.primaryExpression():this.check(h.FUNCTION_EXPRESSION)?this.functionExpression():this.check(h.LBRACKET)?this.listExpression():this.check(h.LBRACE)?this.blockExpression():this.check(h.LPAREN)?this.tupleExpression():(this.peek().kind===h.EOF?this.logError(this.peek(),o.UNEXPECTED_EOF,"Unexpected EOF"):this.logError(this.peek(),o.INVALID_OPERAND,`Invalid start of operand "${this.peek().value}"`),this.nodeFactory.create(Ue,{pre:this.previous()}))}functionExpression(){const e={};try{this.consume("Expect a function expression",h.FUNCTION_EXPRESSION),e.value=this.previous()}catch(n){throw n instanceof N?(e.value=n.partialNode,new N(n.token,this.nodeFactory.create(ce,e),n.handlerContext)):n}return this.nodeFactory.create(ce,e)}variable(){this.consume("Expect a variable",h.IDENTIFIER);const e=this.previous();return this.nodeFactory.create(ae,{variable:e})}canBeField(){return this.peek().kind===h.IDENTIFIER&&this.peek(1).kind===h.COLON}primaryExpression(){if(this.match(h.COLOR_LITERAL,h.STRING_LITERAL,h.NUMERIC_LITERAL))return this.nodeFactory.create(G,{expression:this.nodeFactory.create(ve,{literal:this.previous()})});if(this.match(h.QUOTED_STRING,h.IDENTIFIER))return this.nodeFactory.create(G,{expression:this.nodeFactory.create(ae,{variable:this.previous()})});throw this.logError(this.peek(),o.UNEXPECTED_TOKEN,"Expect a variable or literal"),new N(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}attribute(){const e={};if(this.check(h.COLON,h.RBRACKET,h.COMMA)){const n=this.peek();this.logError(n,o.EMPTY_ATTRIBUTE_NAME,"Expect a non-empty attribute name"),e.name=this.nodeFactory.create(ne,{identifiers:[]})}else try{e.name=this.attributeName()}catch(n){if(!(n instanceof N))throw n;if(e.name=n.partialNode,!this.canHandle(n))throw new N(n.token,this.nodeFactory.create(se,e),n.handlerContext);this.synchronizeAttributeName()}return this.match(h.COLON)&&(e.colon=this.previous(),e.value=this.attributeValue()),this.nodeFactory.create(se,e)}attributeValue(){let e;try{e=this.peek().kind===h.IDENTIFIER&&this.peek(1).kind===h.IDENTIFIER?this.attributeName():this.normalExpression()}catch(n){if(!(n instanceof N)||!this.canHandle(n))throw n;e=n.partialNode,this.synchronizeAttributeValue()}return e}attributeName(){const e=[];if(this.peek().kind!==h.IDENTIFIER)return this.primaryExpression();for(;!this.isAtEnd()&&!this.check(h.COLON,h.COMMA,h.RBRACKET);)try{this.consume("Expect an identifier",h.IDENTIFIER),e.push(this.previous())}catch(n){throw n instanceof N?new N(n.token,this.nodeFactory.create(ne,{identifiers:e}),n.handlerContext):n}return this.nodeFactory.create(ne,{identifiers:e})}logError(e,n,s){this.errors.push(new l(n,s,e))}}const kn={"+":{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 Sn(t){return kn[t.value]||{left:null,right:null}}const Pn={"+":{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 xn(t){return Pn[t.value]||{left:null,right:null}}const Dn={"(":{left:14,right:null}};function Nt(t){return Dn[t.value]||{left:null,right:null}}var L=(t=>(t.Table="table",t.Enum="enum",t.Ref="ref",t.Note="note",t.Project="project",t.Indexes="indexes",t.TableGroup="tablegroup",t.TablePartial="tablepartial",t))(L||{});function xe(t){var n;const e=(n=t==null?void 0:t.type)==null?void 0:n.value.toLowerCase();switch(e){case L.Enum:case L.Table:case L.Indexes:case L.Note:case L.Project:case L.Ref:case L.TableGroup:case L.TablePartial:return new O(e);default:return new x}}function _e(t){if(!Ye(t))return new O([t]);const e=_e(t.leftExpression).unwrap_or(void 0);return e?(e.push(t.rightExpression),new O(e)):new x}function z(t){if(t===void 0)return new x;const e=_e(t).unwrap_or(void 0);if(!e)return new x;const n=[];for(const s of e){const i=W(s).unwrap_or(void 0);if(!i)return new x;n.push(i)}return new O(n)}function Se(t){if(t===void 0)return new x;const e=_e(t).unwrap_or(void 0);if(!e||e.length===0)return new x;const n=[];let s;if(!j(I.last(e))){const i=e.pop();if(Gt(i))s=i.elementList.map(a=>$(a).unwrap());else return new x}for(const i of e){const a=W(i).unwrap_or(void 0);if(!a)return new x;n.push(a)}return new O({variables:n,tupleElements:s})}function W(t){return j(t)?new O(t.expression.variable.value):new x}function Ge(t){if(mt(t))return t instanceof ce?new O({functional:[t],nonFunctional:[]}):new O({functional:[],nonFunctional:[t]});if(t instanceof fe&&t.elementList.every(mt)){const e=t.elementList.filter(s=>s instanceof ce),n=t.elementList.filter(j);return new O({functional:e,nonFunctional:n})}return new x}function $(t){var n;const e=(n=t==null?void 0:t.expression.variable)==null?void 0:n.value;return e===void 0?new x:new O(e)}function M(t){return C(t)?t.expression instanceof ae?new O(t.expression.variable.value):new O(t.expression.literal.value):new x}function On(t){var e;return!(t instanceof le)||!Ft((e=t.op)==null?void 0:e.value)?!1:Se(t.leftExpression).and_then(()=>Se(t.rightExpression)).unwrap_or(void 0)!==void 0}function Rn(t){const e=Se(t.leftExpression),n=Se(t.rightExpression);if(!e.isOk()||!n.isOk())return!1;const{tupleElements:s}=e.unwrap(),{tupleElements:i}=n.unwrap();return(s==null?void 0:s.length)===(i==null?void 0:i.length)}function mt(t){return t instanceof G&&t.expression instanceof ae||t instanceof ce}function Tt(t,e){var i,a,r,c;let n=e;const s=on(t);for(;n;){if((a=(i=n.symbol)==null?void 0:i.symbolTable)!=null&&a.has(t))return(r=n.symbol.symbolTable)==null?void 0:r.get(t);if(((c=n.symbol)==null?void 0:c.declaration)instanceof Z&&s)return n.symbol;if(n instanceof Z)return;n=n.parent}}class Un{constructor(e,n,s){this.declarationNode=e,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 Z||xe(this.declarationNode.parent).unwrap_or(void 0)!==L.Project?[new l(o.INVALID_CUSTOM_CONTEXT,"A custom element can only appear in a Project",this.declarationNode)]:[]}validateName(e){return e?[new l(o.UNEXPECTED_NAME,"A Custom element shouldn't have a name",e)]:[]}validateAlias(e){return e?[new l(o.UNEXPECTED_NAME,"A Custom element shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new l(o.UNEXPECTED_SETTINGS,"A Custom element shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof re)return[new l(o.UNEXPECTED_COMPLEX_BODY,"A Custom element can only have an inline field",e)];const n=[];return C(e.callee)||n.push(new l(o.INVALID_CUSTOM_ELEMENT_VALUE,"A Custom element value can only be a string",e)),e.args.length>0&&n.push(...e.args.map(s=>new l(o.INVALID_CUSTOM_ELEMENT_VALUE,"A Custom element value can only be a string",s))),n}}class we{constructor(){this.table=new Map}has(e){return this.table.has(e)}set(e,n){this.table.set(e,n)}get(e,n){return this.table.get(e)||n!==void 0&&this.set(e,n)||n}entries(){return this.table.entries()}forEach(e){return this.table.forEach(e)}}class Mn{constructor(e,n,s){this.declarationNode=e,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 y?[new l(o.INVALID_PROJECT_CONTEXT,"An Enum can only appear top-level",this.declarationNode)]:[]}validateName(e){return e?Mt(e)?[]:[new l(o.INVALID_NAME,"An Enum name must be of the form <enum> or <schema>.<enum>",e)]:[new l(o.NAME_NOT_FOUND,"An Enum must have a name",this.declarationNode)]}validateAlias(e){return e?[new l(o.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",e)]:[]}registerElement(){const e=[];this.declarationNode.symbol=this.symbolFactory.create(pn,{declaration:this.declarationNode,symbolTable:new we});const{name:n}=this.declarationNode,s=z(n);if(s.isOk()){const i=s.unwrap(),a=i.pop(),r=ze(i,this.publicSymbolTable,this.symbolFactory),c=nt(a);r.has(c)&&e.push(new l(o.DUPLICATE_NAME,`Enum name ${a} already exists in schema '${i.join(".")||"public"}'`,n)),r.set(c,this.declarationNode.symbol)}return e}validateSettingList(e){return e?[new l(o.UNEXPECTED_SETTINGS,"An Enum shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return this.validateFields([e]);const[n,s]=I.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.length===0?[new l(o.EMPTY_ENUM,"An Enum must have at least one element",this.declarationNode)]:e.flatMap(n=>{const s=[];n.callee&&!j(n.callee)&&s.push(new l(o.INVALID_ENUM_ELEMENT_NAME,"An enum field must be an identifier or a quoted identifier",n.callee));const i=[...n.args];return I.last(i)instanceof R?(s.push(...this.validateFieldSettings(I.last(i))),i.pop()):i[0]instanceof R&&(s.push(...this.validateFieldSettings(i[0])),i.shift()),i.length>0&&s.push(...i.map(a=>new l(o.INVALID_ENUM_ELEMENT,"An Enum must have only a field and optionally a setting list",a))),s.push(...this.registerField(n)),s})}validateFieldSettings(e){const n=F(e),s=n.getErrors(),i=n.getValue();for(const a in i){const r=i[a];switch(a){case"note":r.length>1&&r.forEach(c=>s.push(new l(o.DUPLICATE_ENUM_ELEMENT_SETTING,"'note' can only appear once",c))),r.forEach(c=>{C(c.value)||s.push(new l(o.INVALID_ENUM_ELEMENT_SETTING,"'note' must be a string",c))});break;default:r.forEach(c=>s.push(new l(o.UNKNOWN_ENUM_ELEMENT_SETTING,`Unknown enum field setting '${a}'`,c)))}}return s}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=pe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}registerField(e){if(e.callee&&j(e.callee)){const n=$(e.callee).unwrap(),s=st(n),i=this.symbolFactory.create(dn,{declaration:e});e.symbol=i;const a=this.declarationNode.symbol.symbolTable;if(a.has(s)){const r=a.get(s);return[new l(o.DUPLICATE_COLUMN_NAME,`Duplicate enum field ${n}`,e),new l(o.DUPLICATE_COLUMN_NAME,`Duplicate enum field ${n}`,r.declaration)]}a.set(s,i)}return[]}}class Fn{constructor(e,n,s){this.declarationNode=e,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(){if(this.declarationNode.parent instanceof Z)return[new l(o.INVALID_NOTE_CONTEXT,"An Indexes can only appear inside a Table or a TablePartial",this.declarationNode)];const e=xe(this.declarationNode.parent).unwrap_or(void 0);return e&&[L.Table,L.TablePartial].includes(e)?[]:[new l(o.INVALID_NOTE_CONTEXT,"An Indexes can only appear inside a Table or a TablePartial",this.declarationNode)]}validateName(e){return e?[new l(o.UNEXPECTED_NAME,"An Indexes shouldn't have a name",e)]:[]}validateAlias(e){return e?[new l(o.UNEXPECTED_ALIAS,"An Indexes shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new l(o.UNEXPECTED_SETTINGS,"An Indexes shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return[new l(o.UNEXPECTED_SIMPLE_BODY,"An Indexes must have a complex body",e)];const[n,s]=I.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.flatMap(n=>{if(!n.callee)return[];const s=[],i=[n.callee,...n.args];return I.last(i)instanceof R&&s.push(...this.validateFieldSetting(i.pop())),i.forEach(a=>{for(;a instanceof q;)a.argumentList&&!Ge(a.argumentList).isOk()&&s.push(new l(o.INVALID_INDEXES_FIELD,"An index field must be an identifier, a quoted identifier, a functional expression or a tuple of such",a.argumentList)),a=a.callee;Ge(a).isOk()||s.push(new l(o.INVALID_INDEXES_FIELD,"An index field must be an identifier, a quoted identifier, a functional expression or a tuple of such",a))}),s})}validateFieldSetting(e){const n=F(e),s=n.getErrors(),i=n.getValue();for(const a in i){const r=i[a];switch(a){case"note":case"name":r.length>1&&r.forEach(c=>s.push(new l(o.DUPLICATE_INDEX_SETTING,`'${a}' can only appear once`,c))),r.forEach(c=>{C(c.value)||s.push(new l(o.INVALID_INDEX_SETTING_VALUE,`'${a}' must be a string`,c))});break;case"unique":case"pk":r.length>1&&r.forEach(c=>s.push(new l(o.DUPLICATE_INDEX_SETTING,`'${a}' can only appear once`,c))),r.forEach(c=>{H(c.value)||s.push(new l(o.INVALID_INDEX_SETTING_VALUE,`'${a}' must not have a value`,c))});break;case"type":r.length>1&&r.forEach(c=>s.push(new l(o.DUPLICATE_INDEX_SETTING,"'type' can only appear once",c))),r.forEach(c=>{j(c.value)||s.push(new l(o.INVALID_INDEX_SETTING_VALUE,`'type' must be "btree" or "hash"`,c))});break;default:r.forEach(c=>s.push(new l(o.UNKNOWN_INDEX_SETTING,`Unknown index setting '${a}'`,c)))}}return s}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=pe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class Bn{constructor(e,n,s){this.declarationNode=e,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 Z)&&![L.Table,L.TableGroup,L.TablePartial,L.Project].includes(xe(this.declarationNode.parent).unwrap_or(void 0))?[new l(o.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(e){if(!(this.declarationNode.parent instanceof Z))return e?[new l(o.UNEXPECTED_NAME,"A Note shouldn't have a name",e)]:[];if(!e)return[new l(o.INVALID_NAME,"Sticky note must have a name",this.declarationNode)];const n=z(e);if(!n.isOk())return[new l(o.INVALID_NAME,"Invalid name for sticky note ",this.declarationNode)];const i=n.unwrap().join("."),a=an(i);return this.publicSymbolTable.has(a)?[new l(o.DUPLICATE_NAME,`Sticky note "${i}" has already been defined`,e)]:(this.publicSymbolTable.set(a,this.declarationNode.symbol),[])}validateAlias(e){return e?[new l(o.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new l(o.UNEXPECTED_SETTINGS,"A Note shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return this.validateFields([e]);const[n,s]=I.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){const n=[];return e.length===0?[new l(o.EMPTY_NOTE,"A Note must have a content",this.declarationNode)]:(e.length>1&&e.slice(1).forEach(s=>n.push(new l(o.NOTE_CONTENT_REDEFINED,"A Note can only contain one string",s))),C(e[0].callee)||n.push(new l(o.INVALID_NOTE,"A Note content must be a quoted string",e[0])),e[0].args.length>0&&n.push(...e[0].args.map(s=>new l(o.INVALID_NOTE,"A Note can only contain one quoted string",s))),n)}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=pe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class Vn{constructor(e,n,s){this.declarationNode=e,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 y?[new l(o.INVALID_PROJECT_CONTEXT,"A Project can only appear top-level",this.declarationNode)]:[]}validateName(e){return e?ye(e)?[]:[new l(o.INVALID_NAME,"A Project's name is optional or must be an identifier or a quoted identifer",e)]:[]}validateAlias(e){return e?[new l(o.UNEXPECTED_ALIAS,"A Project shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new l(o.UNEXPECTED_SETTINGS,"A Project shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A Project's body must be a block",e)];const[n,s]=I.partition(e.body,i=>i instanceof v);return[...n.map(i=>new l(o.INVALID_PROJECT_FIELD,"A Project can not have inline fields",i)),...this.validateSubElements(s)]}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=pe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class Gn{constructor(e,n,s){this.declarationNode=e,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 Z?[]:[new l(o.INVALID_REF_CONTEXT,"A Ref must appear top-level",this.declarationNode)]}validateName(e){return e?ye(e)?[]:[new l(o.INVALID_NAME,"A Ref's name is optional or must be an identifier or a quoted identifer",e)]:[]}validateAlias(e){return e?[new l(o.UNEXPECTED_ALIAS,"A Ref shouldn't have an alias",e)]:[]}validateSettingList(e){return e?[new l(o.UNEXPECTED_SETTINGS,"A Ref shouldn't have a setting list",e)]:[]}validateBody(e){if(!e)return[];if(e instanceof v)return this.validateFields([e]);const[n,s]=I.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){if(e.length===0)return[new l(o.EMPTY_REF,"A Ref must have at least one field",this.declarationNode)];const n=[];return e.length>1&&n.push(...e.slice(1).map(s=>new l(o.REF_REDEFINED,"A Ref can only contain one binary relationship",s))),e.forEach(s=>{s.callee&&!On(s.callee)&&n.push(new l(o.INVALID_REF_FIELD,"A Ref field must be a binary relationship",s.callee)),s.callee&&!Rn(s.callee)&&n.push(new l(o.UNEQUAL_FIELDS_BINARY_REF,"Unequal fields in ref endpoints",s.callee));const i=[...s.args];if(I.last(i)instanceof R){const a=this.validateFieldSettings(I.last(i));n.push(...a),i.pop()}else i[0]instanceof R&&(n.push(...this.validateFieldSettings(i[0])),i.shift());i.length>0&&n.push(...i.map(a=>new l(o.INVALID_REF_FIELD,"A Ref field should only have a single binary relationship",a)))}),n}validateFieldSettings(e){const n=F(e),s=n.getErrors(),i=n.getValue();for(const a in i){const r=i[a];switch(a){case"delete":case"update":r.length>1&&r.forEach(c=>s.push(new l(o.DUPLICATE_REF_SETTING,`'${a}' can only appear once`,c))),r.forEach(c=>{Cn(c.value)||s.push(new l(o.INVALID_REF_SETTING_VALUE,`'${a}' can only have values "cascade", "no action", "set null", "set default" or "restrict"`,c))});break;case"color":r.length>1&&s.push(...r.map(c=>new l(o.DUPLICATE_REF_SETTING,"'color' can only appear once",c))),r.forEach(c=>{Qe(c.value)||s.push(new l(o.INVALID_REF_SETTING_VALUE,"'color' must be a color literal",c))});break;default:r.forEach(c=>s.push(new l(o.UNKNOWN_REF_SETTING,`Unknown ref setting '${a}'`,c)))}}return s}validateSubElements(e){return e.flatMap(n=>{if(n.parent=this.declarationNode,!n.type)return[];const s=pe(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}function Cn(t){if(!(j(t)&&t.expression.variable.kind!==h.QUOTED_STRING)&&!(t instanceof ne))return!1;let e;if(t instanceof ne?e=ge(t).unwrap_or(""):e=t.expression.variable.value,e)switch(e.toLowerCase()){case"cascade":case"no action":case"set null":case"set default":case"restrict":return!0;default:return!1}return!1}class Xn{constructor(e,n,s){this.declarationNode=e,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 y?[new l(o.INVALID_TABLE_CONTEXT,"Table must appear top-level",this.declarationNode)]:[]}validateName(e){return e?e instanceof ue?[new l(o.INVALID_NAME,"Invalid array as Table name, maybe you forget to add a space between the name and the setting list?",e)]:Mt(e)?[]:[new l(o.INVALID_NAME,"A Table name must be of the form <table> or <schema>.<table>",e)]:[new l(o.NAME_NOT_FOUND,"A Table must have a name",this.declarationNode)]}validateAlias(e){return e?zn(e)?[]:[new l(o.INVALID_ALIAS,"Table aliases can only contains alphanumeric and underscore unless surrounded by double quotes",e)]:[]}validateSettingList(e){const n=F(e),s=n.getErrors(),i=n.getValue();for(const a in i){const r=i[a];switch(a){case"headercolor":r.length>1&&s.push(...r.map(c=>new l(o.DUPLICATE_TABLE_SETTING,"'headercolor' can only appear once",c))),r.forEach(c=>{Qe(c.value)||s.push(new l(o.INVALID_TABLE_SETTING,"'headercolor' must be a color literal",c.value||c.name))});break;case"note":r.length>1&&s.push(...r.map(c=>new l(o.DUPLICATE_TABLE_SETTING,"'note' can only appear once",c))),r.forEach(c=>{C(c.value)||s.push(new l(o.INVALID_TABLE_SETTING,"'note' must be a string literal",c.value||c.name))});break;default:s.push(...r.map(c=>new l(o.INVALID_TABLE_SETTING,`Unknown '${a}' setting`,c)))}}return s}registerElement(){const e=[];this.declarationNode.symbol=this.symbolFactory.create(Ot,{declaration:this.declarationNode,symbolTable:new we});const{name:n,alias:s}=this.declarationNode,i=z(n);if(i.isOk()){const a=[...i.unwrap()],r=a.pop(),c=ze(a,this.publicSymbolTable,this.symbolFactory),f=Be(r);c.has(f)&&e.push(new l(o.DUPLICATE_NAME,`Table name '${r}' already exists in schema '${a.join(".")||"public"}'`,n)),c.set(f,this.declarationNode.symbol)}if(s&&ye(s)&&!jn(s.expression.variable.value,i.unwrap_or([]))){const a=$(s).unwrap(),r=Be(a);this.publicSymbolTable.has(r)&&e.push(new l(o.DUPLICATE_NAME,`Table name '${a}' already exists`,n)),this.publicSymbolTable.set(r,this.declarationNode.symbol)}return e}validateBody(e){if(!e)return[];if(e instanceof v)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A Table's body must be a block",e)];const[n,s]=I.partition(e.body,r=>r instanceof v),[i,a]=I.partition(s,r=>r instanceof Le);return[...this.validateFields(n),...this.validateInjections(i),...this.validateSubElements(a)]}validateFields(e){const[n,s,i]=e.reduce((a,r)=>(r.callee instanceof G?a[0].push(r):r.callee instanceof K?a[1].push(r):a[2].push(new l(o.INVALID_TABLE_FIELD,"A Table field must be a column or a TablePartial injection",r)),a),[[],[],[]]);return[...i,...this.validateColumns(n),...this.validateInjections(s)]}validateInjections(e){return e.flatMap(n=>this.registerInjection(n))}registerInjection(e){var n,s;if(e.partial&&((n=e.partial.variable)!=null&&n.value)){const i=(s=e.partial.variable)==null?void 0:s.value,a=rn(i),r=this.symbolFactory.create(Tn,{declaration:e});e.symbol=r;const c=this.declarationNode.symbol.symbolTable,f=c.get(a);if(f)return[new l(o.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${i}`,e),new l(o.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${i}`,f.declaration)];c.set(a,r)}return[]}validateColumns(e){return e.length===0?[new l(o.EMPTY_TABLE,"A Table must have at least one column",this.declarationNode)]:e.flatMap(n=>{const s=[];n.args.length===0&&s.push(new l(o.INVALID_COLUMN,"A column must have a type",n.callee)),j(n.callee)||s.push(new l(o.INVALID_COLUMN_NAME,"A column name must be an identifier or a quoted identifier",n.callee)),n.args[0]&&!$n(n.args[0])&&s.push(new l(o.INVALID_COLUMN_TYPE,"Invalid column type",n.args[0]));const i=n.args.slice(1);return s.push(...this.validateColumnSetting(i)),s.push(...this.registerColumn(n)),s})}registerColumn(e){if(e.callee&&j(e.callee)){const n=$(e.callee).unwrap(),s=We(n),i=this.symbolFactory.create(Rt,{declaration:e});e.symbol=i;const a=this.declarationNode.symbol.symbolTable;if(a.has(s)){const r=a.get(s);return[new l(o.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,e),new l(o.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,r.declaration)]}a.set(s,i)}return[]}validateColumnSetting(e){if(!e.slice(0,-1).every(he)||!e.slice(-1).every(f=>he(f)||f instanceof R))return[...e.map(f=>new l(o.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",f))];if(e.length===0)return[];let n;I.last(e)instanceof R&&(n=e.pop());const s=F(n),i=s.getErrors(),a=s.getValue();for(const f of e){const p=$(f).unwrap_or("").toLowerCase();if(p!=="pk"&&p!=="unique"){i.push(new l(o.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",f));continue}a[p]===void 0?a[p]=[f]:a[p].push(f)}const r=a.pk||[],c=a["primary key"]||[];r.length>=1&&c.length>=1&&i.push(...[...r,...c].map(f=>new l(o.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",f)));for(const f in a){const p=a[f];switch(f){case"note":p.length>1&&i.push(...p.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"note can only appear once",u))),p.forEach(u=>{C(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'note' must be a quoted string",u.value||u.name))});break;case"ref":p.forEach(u=>{Vt(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'ref' must be a valid unary relationship",u.value||u.name))});break;case"primary key":p.length>1&&i.push(...p.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"primary key can only appear once",u))),p.forEach(u=>{H(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'primary key' must not have a value",u.value||u.name))});break;case"pk":p.length>1&&i.push(...p.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'pk' can only appear once",u))),p.forEach(u=>{u instanceof se&&!H(u.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'pk' must not have a value",u.value||u.name))});break;case"not null":p.length>1&&i.push(...p.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'not null' can only appear once",u)));const d=a.null||[];p.length>=1&&d.length>=1&&i.push(...[...p,...d].map(u=>new l(o.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",u))),p.forEach(u=>{H(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'not null' must not have a value",u.value||u.name))});break;case"null":p.length>1&&i.push(...p.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'null' can only appear once",u))),p.forEach(u=>{H(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'null' must not have a value",u.value||u.name))});break;case"unique":p.length>1&&i.push(...p.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'unique' can only appear once",u))),p.forEach(u=>{u instanceof se&&!H(u.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'unique' must not have a value",u.value||u.name))});break;case"increment":p.length>1&&i.push(...p.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'increment' can only appear once",u))),p.forEach(u=>{u instanceof se&&!H(u.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'increment' must not have a value",u.value||u.name))});break;case"default":p.length>1&&i.push(...p.map(u=>new l(o.DUPLICATE_TABLE_SETTING,"'default' can only appear once",u))),p.forEach(u=>{Bt(u.value)||i.push(new l(o.INVALID_TABLE_SETTING,"'default' must be a string literal, number literal, function expression, true, false or null",u.value||u.name))});break;default:p.forEach(u=>i.push(new l(o.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${f}'`,u)))}}return i}validateSubElements(e){const n=e.flatMap(i=>{if(!i)return[];if(i.parent=this.declarationNode,!i.type)return[];const a=pe(i);return new a(i,this.publicSymbolTable,this.symbolFactory).validate()}),s=e.filter(i=>{var a;return((a=i==null?void 0:i.type)==null?void 0:a.value.toLowerCase())==="note"});return s.length>1&&n.push(...s.map(i=>new l(o.NOTE_REDEFINED,"Duplicate notes are defined",i))),n}}function $n(t){if(!(t instanceof q||Ye(t)||t instanceof G||t instanceof ue))return!1;if(t instanceof q){if(t.callee===void 0||t.argumentList===void 0||!t.argumentList.elementList.every(n=>ee(n)||C(n)||he(n)))return!1;t=t.callee}for(;t instanceof ue;){if(t.array===void 0||t.indexer===void 0||!t.indexer.elementList.every(n=>!n.colon&&!n.value&&ee(n.name)))return!1;t=t.array}const e=z(t).unwrap_or(void 0);return e!==void 0&&e.length>0}function jn(t,e){return e.length===1&&t===e[0]}class Wn{constructor(e,n,s){this.declarationNode=e,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 y?[new l(o.INVALID_TABLEGROUP_CONTEXT,"TableGroup must appear top-level",this.declarationNode)]:[]}validateName(e){return e?ye(e)?[]:[new l(o.INVALID_NAME,"A TableGroup name must be a single identifier",e)]:[new l(o.NAME_NOT_FOUND,"A TableGroup must have a name",this.declarationNode)]}validateAlias(e){return e?[new l(o.UNEXPECTED_ALIAS,"A TableGroup shouldn't have an alias",e)]:[]}registerElement(){const{name:e}=this.declarationNode;this.declarationNode.symbol=this.symbolFactory.create(En,{declaration:this.declarationNode,symbolTable:new we});const n=z(e);if(n.isOk()){const s=n.unwrap(),i=s.pop(),a=ze(s,this.publicSymbolTable,this.symbolFactory),r=it(i);if(a.has(r))return[new l(o.DUPLICATE_NAME,`TableGroup name '${i}' already exists`,e)];a.set(r,this.declarationNode.symbol)}return[]}validateSettingList(e){const n=F(e),s=n.getErrors(),i=n.getValue();return I.forIn(i,(a,r)=>{switch(r){case"color":a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_SETTING,"'color' can only appear once",c))),a.forEach(c=>{Qe(c.value)||s.push(new l(o.INVALID_TABLE_SETTING,"'color' must be a color literal",c.value||c.name))});break;case"note":a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_SETTING,"'note' can only appear once",c))),a.filter(c=>!C(c.value)).forEach(c=>{s.push(new l(o.INVALID_TABLE_SETTING,"'note' must be a string literal",c.value||c.name))});break;default:s.push(...a.map(c=>new l(o.INVALID_TABLE_SETTING,`Unknown '${r}' setting`,c)));break}}),s}validateBody(e){if(!e)return[];if(e instanceof v)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A TableGroup's body must be a block",e)];const[n,s]=I.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.flatMap(n=>{const s=[];return n.callee&&!z(n.callee).isOk()&&s.push(new l(o.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(i=>new l(o.INVALID_TABLEGROUP_FIELD,"A TableGroup field should only have a single Table name",i))),s})}validateSubElements(e){const n=e.flatMap(i=>{if(i.parent=this.declarationNode,!i.type)return[];const a=pe(i);return new a(i,this.publicSymbolTable,this.symbolFactory).validate()}),s=e.filter(i=>{var a;return((a=i.type)==null?void 0:a.value.toLowerCase())==="note"});return s.length>1&&n.push(...s.map(i=>new l(o.NOTE_REDEFINED,"Duplicate notes are defined",i))),n}registerField(e){if(e.callee&&j(e.callee)){const n=$(e.callee).unwrap(),s=at(n),i=this.symbolFactory.create(Nn,{declaration:e});e.symbol=i;const a=this.declarationNode.symbol.symbolTable;if(a.has(s)){const r=a.get(s);return[new l(o.DUPLICATE_TABLEGROUP_FIELD_NAME,`${n} already exists in the group`,e),new l(o.DUPLICATE_TABLEGROUP_FIELD_NAME,`${n} already exists in the group`,r.declaration)]}a.set(s,i)}return[]}}const rt=["-","+"];function qn(t){if(!(t instanceof q||Ye(t)||t instanceof G||t instanceof ue))return!1;if(t instanceof q){if(t.callee===void 0||t.argumentList===void 0||!t.argumentList.elementList.every(n=>ee(n)||C(n)||he(n)))return!1;t=t.callee}for(;t instanceof ue;){if(t.array===void 0||t.indexer===void 0||!t.indexer.elementList.every(n=>!n.colon&&!n.value&&ee(n.name)))return!1;t=t.array}const e=z(t).unwrap_or(void 0);return e!==void 0&&e.length>0}class Yn{constructor(e,n,s){this.declarationNode=e,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 y?[new l(o.INVALID_TABLE_PARTIAL_CONTEXT,"TablePartial must appear top-level",this.declarationNode)]:[]}validateName(e){return e?ye(e)?[]:[new l(o.INVALID_NAME,"A TablePartial name must be an identifier or a quoted identifer",e)]:[new l(o.NAME_NOT_FOUND,"A TablePartial must have a name",this.declarationNode)]}validateAlias(e){return e?[new l(o.UNEXPECTED_ALIAS,"A TablePartial shouldn't have an alias",e)]:[]}validateSettingList(e){const n=F(e),s=n.getErrors(),i=n.getValue();return I.forIn(i,(a,r)=>{switch(r){case"headercolor":a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_PARTIAL_SETTING,"'headercolor' can only appear once",c))),a.forEach(c=>{Qe(c.value)||s.push(new l(o.INVALID_TABLE_PARTIAL_SETTING,"'headercolor' must be a color literal",c.value||c.name))});break;case"note":a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_PARTIAL_SETTING,"'note' can only appear once",c))),a.forEach(c=>{C(c.value)||s.push(new l(o.INVALID_TABLE_PARTIAL_SETTING,"'note' must be a string literal",c.value||c.name))});break;default:s.push(...a.map(c=>new l(o.INVALID_TABLE_SETTING,`Unknown '${r}' setting`,c)))}}),s}registerElement(){const{name:e}=this.declarationNode;this.declarationNode.symbol=this.symbolFactory.create(mn,{declaration:this.declarationNode,symbolTable:new we});const n=z(e);if(n.isOk()){const s=n.unwrap(),i=s.pop(),a=ze(s,this.publicSymbolTable,this.symbolFactory),r=xt(i);if(a.has(r))return[new l(o.DUPLICATE_NAME,`TablePartial name '${i}' already exists`,e)];a.set(r,this.declarationNode.symbol)}return[]}validateBody(e){if(!e)return[];if(e instanceof v)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A TablePartial's body must be a block",e)];const[n,s]=I.partition(e.body,i=>i instanceof v);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.flatMap(n=>{if(!n.callee)return[];const s=[];n.args.length===0&&s.push(new l(o.INVALID_COLUMN,"A column must have a type",n.callee)),j(n.callee)||s.push(new l(o.INVALID_COLUMN_NAME,"A column name must be an identifier or a quoted identifier",n.callee)),n.args[0]&&!qn(n.args[0])&&s.push(new l(o.INVALID_COLUMN_TYPE,"Invalid column type",n.args[0]));const i=n.args.slice(1);return s.push(...this.validateFieldSetting(i)),s.push(...this.registerField(n)),s})}registerField(e){if(e.callee&&j(e.callee)){const n=$(e.callee).unwrap(),s=We(n),i=this.symbolFactory.create(Rt,{declaration:e});e.symbol=i;const a=this.declarationNode.symbol.symbolTable;if(a.has(s)){const r=a.get(s);return[new l(o.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,e),new l(o.DUPLICATE_COLUMN_NAME,`Duplicate column ${n}`,r.declaration)]}a.set(s,i)}return[]}validateFieldSetting(e){if(!e.slice(0,-1).every(he)||!e.slice(-1).every(f=>he(f)||f instanceof R))return[...e.map(f=>new l(o.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",f))];if(e.length===0)return[];let n;I.last(e)instanceof R&&(n=e.pop());const s=F(n),i=s.getErrors(),a=s.getValue();e.forEach(f=>{const p=$(f).unwrap_or("").toLowerCase();if(p!=="pk"&&p!=="unique"){i.push(new l(o.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",f));return}a[p]===void 0?a[p]=[f]:a[p].push(f)});const r=a.pk||[],c=a["primary key"]||[];return r.length>=1&&c.length>=1&&i.push(...[...r,...c].map(f=>new l(o.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",f))),I.forIn(a,(f,p)=>{switch(p){case"note":f.length>1&&i.push(...f.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"note can only appear once",u))),f.forEach(u=>{C(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'note' must be a quoted string",u.value||u.name))});break;case"ref":f.forEach(u=>{Vt(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'ref' must be a valid unary relationship",u.value||u.name))});break;case"primary key":f.length>1&&i.push(...f.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"primary key can only appear once",u))),f.forEach(u=>{H(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'primary key' must not have a value",u.value||u.name))});break;case"pk":f.length>1&&i.push(...f.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'pk' can only appear once",u))),f.forEach(u=>{u instanceof se&&!H(u.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'pk' must not have a value",u.value||u.name))});break;case"not null":f.length>1&&i.push(...f.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'not null' can only appear once",u)));const d=a.null||[];f.length>=1&&d.length>=1&&i.push(...[...f,...d].map(u=>new l(o.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",u))),f.forEach(u=>{H(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'not null' must not have a value",u.value||u.name))});break;case"null":f.length>1&&i.push(...f.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'null' can only appear once",u))),f.forEach(u=>{H(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'null' must not have a value",u.value||u.name))});break;case"unique":f.length>1&&i.push(...f.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'unique' can only appear once",u))),f.forEach(u=>{u instanceof se&&!H(u.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'unique' must not have a value",u.value||u.name))});break;case"increment":f.length>1&&i.push(...f.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'increment' can only appear once",u))),f.forEach(u=>{u instanceof se&&!H(u.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'increment' must not have a value",u.value||u.name))});break;case"default":f.length>1&&i.push(...f.map(u=>new l(o.DUPLICATE_COLUMN_SETTING,"'default' can only appear once",u))),f.forEach(u=>{Bt(u.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'default' must be a string literal, number literal, function expression, true, false or null",u.value||u.name))});break;default:f.forEach(u=>i.push(new l(o.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${p}'`,u)))}}),i}validateSubElements(e){const n=e.flatMap(i=>{if(i.parent=this.declarationNode,!i.type)return[];const a=pe(i);return new a(i,this.publicSymbolTable,this.symbolFactory).validate()}),s=e.filter(i=>{var a;return((a=i.type)==null?void 0:a.value.toLowerCase())==="note"});return s.length>1&&n.push(...s.map(i=>new l(o.NOTE_REDEFINED,"Duplicate notes are defined",i))),n}}function pe(t){switch(t.type.value.toLowerCase()){case L.Enum:return Mn;case L.Table:return Xn;case L.TableGroup:return Wn;case L.Project:return Vn;case L.Ref:return Gn;case L.Note:return Bn;case L.Indexes:return Fn;case L.TablePartial:return Yn;default:return Un}}function Mt(t){return!!z(t).unwrap_or(!1)}function zn(t){return ye(t)}function ye(t){return t instanceof G&&t.expression instanceof ae}function ze(t,e,n){var i;t[0]==="public"&&(t=t.slice(1));let s=e;for(const a of t){let r;const c=tt(a);if(s.has(c)){if(r=(i=s.get(c))==null?void 0:i.symbolTable,!r)throw new Error("Expect a symbol table in a schema symbol")}else{r=new we;const f=n.create(Dt,{symbolTable:r});s.set(c,f)}s=r}return s}function Ft(t){return t==="-"||t==="<>"||t===">"||t==="<"}function Qe(t){var n;if(!(t instanceof G)||!(t.expression instanceof ve)||((n=t.expression.literal)==null?void 0:n.kind)!==h.COLOR_LITERAL)return!1;const e=t.expression.literal.value;if(e.length!==4&&e.length!==7||e[0]!=="#")return!1;for(let s=1;s<e.length;s+=1)if(!hn(e[s]))return!1;return!0}function H(t){return t===void 0}function Bt(t){var e;return!!(C(t)||ee(t)||he(t)&&["true","false","null"].includes(t.expression.variable.value.toLowerCase())||t instanceof K&&rt.includes((e=t.op)==null?void 0:e.value)&&ee(t.expression)||t instanceof ce)}function ee(t){var e;return t instanceof G&&t.expression instanceof ve&&((e=t.expression.literal)==null?void 0:e.kind)===h.NUMERIC_LITERAL}function Vt(t){var n;if(!(t instanceof K)||!Ft((n=t.op)==null?void 0:n.value))return!1;const e=z(t.expression).unwrap_or(void 0);return e!==void 0&&e.length>0}function Gt(t){return t instanceof fe&&t.elementList.every(j)}function F(t){var s;const e={},n=[];if(!t)return new Y({});for(const i of t.elementList){if(!i.name)continue;if(i.name instanceof G){n.push(new l(o.INVALID_SETTINGS,"A setting name must be a stream of identifiers",i.name));continue}const a=(s=ge(i.name).unwrap_or(void 0))==null?void 0:s.toLowerCase();a&&(e[a]===void 0?e[a]=[i]:e[a].push(i))}return new Y(e,n)}class bt{constructor(e,n){this.ast=e,this.symbolFactory=n,this.publicSchemaSymbol=this.symbolFactory.create(Dt,{symbolTable:new we}),this.ast.symbol=this.publicSchemaSymbol,this.ast.symbol.declaration=this.ast}validate(){const e=[];this.ast.body.forEach(s=>{if(s.parent=this.ast,s.type===void 0)return;const i=pe(s),a=new i(s,this.publicSchemaSymbol.symbolTable,this.symbolFactory);e.push(...a.validate())});const n=this.ast.body.filter(s=>xe(s).unwrap_or(void 0)===L.Project);return n.length>1&&n.forEach(s=>e.push(new l(o.PROJECT_REDEFINED,"Only one project can exist",s))),new Y(this.ast,e)}}class de{constructor(e,n){this.declarationNode=e,this.errors=n}bind(){this.bindSettingList(this.declarationNode.attributeList,this.settingList),this.bindBody()}bindSettingList(e,n){if(e)for(const s of e.elementList){if(s.name instanceof G)continue;const i=ge(s.name).unwrap_or(void 0);if(!i)continue;const a=n[i.toLowerCase()];a!=null&&a.shouldBind&&this.scanAndBind(s.value,a)}}bindBody(){var s,i;const e=this.declarationNode;if(!e.body)return;const{body:n}=e;if(n instanceof re)for(const a of n.body)if(a instanceof y){if(((s=this.declarationNode.type)==null?void 0:s.value.toLowerCase())===L.TablePartial&&((i=a.type)==null?void 0:i.value.toLowerCase())===L.Indexes||!a.type)continue;const r=Ke(a);new r(a,this.errors).bind()}else a instanceof v?this.bindSubfield(a):this.bindPartialInjection(a);else this.bindSubfield(n)}bindSubfield(e){const n=[e.callee,...e.args],s=I.last(n);s instanceof R&&(n.pop(),this.bindSettingList(s,this.subfield.settingList));const{argBinderRules:i}=this.subfield.arg;for(let a=0;a<Math.min(n.length,i.length);a+=1)i[a].shouldBind&&this.scanAndBind(n[a],i[a])}bindPartialInjection(e){var n;(n=this.subfield.injection)!=null&&n.injectionBinderRule.shouldBind&&this.scanAndBind(e,this.subfield.injection.injectionBinderRule)}scanAndBind(e,n){var s,i;if(e)if(e instanceof G){if(e.expression instanceof ae&&((i=n.keywords)!=null&&i.includes((s=e.expression.variable)==null?void 0:s.value.toLowerCase())))return;this.bindFragments([e],n)}else e instanceof le?Ye(e)?this.bindFragments(_e(e).unwrap_or([]),n):(this.scanAndBind(e.leftExpression,n),this.scanAndBind(e.rightExpression,n)):e instanceof K?this.scanAndBind(e.expression,n):e instanceof je?this.scanAndBind(e.expression,n):e instanceof fe?e.elementList.forEach(a=>this.scanAndBind(a,n)):e instanceof Le&&this.bindFragments([e],n)}bindFragments(e,n){if(e.length===0)return;const s=e[0]instanceof Le,i=[...n.topSubnamesSymbolKind],{remainingSubnamesSymbolKind:a}=n,r=s?-1:e.findIndex(E=>!j(E)),f=r!==-1&&Gt(e[r])?e[r]:void 0,p=r>=0?i.pop():void 0,d=e.slice(0,r===-1?void 0:r);if(d.length===0)return;const u=[];for(;i.length&&d.length;){const E=i.pop(),b=d.pop(),g=$(b).unwrap();u.unshift({index:Me(g,E),referrer:b})}for(;d.length;){const E=d.pop(),b=s?E.partial.variable.value:$(E).unwrap();u.unshift({index:Me(b,a),referrer:E})}return f?f.elementList.forEach(E=>this.resolveIndexStack([...u,{index:Me($(E).unwrap(),p),referrer:E}],n.ignoreNameNotFound)):this.resolveIndexStack(u,n.ignoreNameNotFound)}resolveIndexStack(e,n){if(e.length===0)throw new Error("Unreachable - An unresolved name must have at least one name component");const[s,...i]=e,a=Tt(s.index,this.declarationNode);if(a===void 0){const{kind:p,name:d}=oe(s.index).unwrap();this.logError(s.referrer,`Can not find ${p} '${d}'`,n);return}a.references.push(s.referrer),s.referrer.referee=a;let r=a.symbolTable,{kind:c,name:f}=oe(s.index).unwrap();for(const p of i){const{kind:d,name:u}=oe(p.index).unwrap(),E=r.get(p.index);if(!E){this.logError(p.referrer,`${c} '${f}' does not have ${d} '${u}'`,n);return}if(c=d,f=u,p.referrer.referee=E,E.references.push(p.referrer),!E.symbolTable)break;r=E.symbolTable}}logError(e,n,s){s||this.errors.push(new l(o.BINDING_ERROR,n,e))}resolveInjections(e){var i;const n=(i=this.declarationNode.symbol)==null?void 0:i.symbolTable;if(!n)return;const s=new Map;n.forEach((a,r)=>{var c,f,p;if(ln(r)){const d=Tt(cn(r),this.declarationNode);(p=(f=(c=d==null?void 0:d.declaration)==null?void 0:c.symbol)==null?void 0:f.symbolTable)==null||p.forEach((u,E)=>{n.has(E)||s.set(E,u)})}}),s.forEach((a,r)=>{const c=e.create(bn,{injectorId:a.id});n.set(r,c)})}}class Qn extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class Hn extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Jn extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class Zn extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class Kn extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class es extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class ts extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Enum],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!0}]},injection:{injectionBinderRule:{shouldBind:!0,topSubnamesSymbolKind:[],remainingSubnamesSymbolKind:m.TablePartial,ignoreNameNotFound:!1}},settingList:{ref:{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1},default:{shouldBind:!1}}},this.settingList={}}}class ns extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class ss extends de{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1},{shouldBind:!0,topSubnamesSymbolKind:[m.Enum],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!0}]},settingList:{ref:{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1},default:{shouldBind:!1}}},this.settingList={}}}function Ke(t){switch(t.type.value.toLowerCase()){case L.Enum:return Hn;case L.Table:return ts;case L.TableGroup:return ns;case L.Project:return Kn;case L.Ref:return es;case L.Note:return Zn;case L.Indexes:return Jn;case L.TablePartial:return ss;default:return Qn}}class is{constructor(e){this.ast=e,this.errors=[]}resolve(e){this.ast.body.forEach(n=>{if(n.type){const s=Ke(n);new s(n,this.errors).resolveInjections(e)}});for(const n of this.ast.body)if(n.type){const s=Ke(n);new s(n,this.errors).bind()}return new Y(this.ast,this.errors)}}class as{constructor(e){this.generator=e}create(e,n){return new e(n,this.generator.nextId())}}class rs{constructor(e,n){this.ast=e,this.symbolFactory=new as(n)}analyze(){return new bt(this.ast,this.symbolFactory).validate().chain(n=>new is(n).resolve(this.symbolFactory))}validate(){return new bt(this.ast,this.symbolFactory).validate().chain(n=>new Y(n,[]))}}function It(t,e){const{variables:n,tupleElements:s}=Se(t).unwrap();return s?n.length===0?{schemaName:e.schemaName,tableName:e.name,fieldNames:s}:{tableName:n.pop(),schemaName:n.pop()||null,fieldNames:s}:n.length===1?{schemaName:e.schemaName,tableName:e.name,fieldNames:[n[0]]}:{fieldNames:[n.pop()],tableName:n.pop(),schemaName:n.pop()||null}}function Ct(t){switch(t){case"<":return["1","*"];case"<>":return["*","*"];case">":return["*","1"];case"-":return["1","1"]}throw new Error("Invalid relation op")}function _(t){return{start:{offset:t.startPos.offset,line:t.startPos.line+1,column:t.startPos.column+1},end:{offset:t.endPos.offset,line:t.endPos.line+1,column:t.endPos.column+1}}}function Ce(t){var n;const e=(n=_e(t).unwrap_or(void 0))==null?void 0:n.pop();return e instanceof fe?e.elementList.map(s=>s.referee):[e.referee]}function Te(t){const e=z(t).unwrap();return{name:e.pop(),schemaName:e}}function De(t){return t.expression.literal.value}function Xt(t,e){if(Array.isArray(t)){const i=t.map(({id:r})=>r).sort().join(","),a=e.map(({id:r})=>r).sort().join(",");return i<a?`${i}-${a}`:`${a}-${i}`}const n=t.id.toString(),s=e.id.toString();return n<s?`${n}-${s}`:`${s}-${n}`}function ot(t,e){if(Array.isArray(t)){const i=t.map(({id:r})=>r).sort(),a=e.map(({id:r})=>r).sort();return I.zip(i,a).every(([r,c])=>r===c)}const n=t.id,s=e.id;return n===s}function ie(t){const e=t.split(`
10
+ `),n=e.slice(e.findIndex(a=>a.trimStart()!=="")),s=n.filter(a=>a.trimStart()),i=Math.min(...s.map(a=>a.length-a.trimStart().length));return n.map(a=>a.slice(i)).join(`
11
+ `)}class $t{constructor(e,n){this.declarationNode=e,this.env=n,this.table={name:void 0,schemaName:void 0,alias:null,fields:[],token:void 0,indexes:[],partials:[]},this.pkColumns=[]}interpret(){this.table.token=_(this.declarationNode),this.env.tables.set(this.declarationNode,this.table);const e=[...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)),e}interpretName(e){const{name:n,schemaName:s}=Te(e);return s.length>1?(this.table.name=n,this.table.schemaName=s.join("."),[new l(o.UNSUPPORTED,"Nested schema is not supported",e)]):(this.table.name=n,this.table.schemaName=s.length?s[0]:null,[])}interpretAlias(e){if(!e)return[];const n=$(e).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(e){var i,a,r;const n=F(e).getValue();this.table.headerColor=(i=n.headercolor)!=null&&i.length?De((r=(a=n.headercolor)==null?void 0:a.at(0))==null?void 0:r.value):void 0;const[s]=n.note||[];return this.table.note=s&&{value:M(s==null?void 0:s.value).map(ie).unwrap(),token:_(s)},[]}interpretBody(e){const[n,s]=I.partition(e.body,i=>i instanceof v||i instanceof Le);return[...this.interpretFields(n),...this.interpretSubElements(s)]}interpretSubElements(e){return e.flatMap(n=>{var s;switch((s=n.type)==null?void 0:s.value.toLowerCase()){case"note":return this.table.note={value:M(n.body instanceof re?n.body.body[0].callee:n.body.callee).map(ie).unwrap(),token:_(n)},[];case"indexes":return this.interpretIndexes(n)}return[]})}interpretInjection(e,n){const s={order:n,token:_(e)};return s.name=e.partial.variable.value,this.table.partials.push(s),[]}interpretFields(e){return e.flatMap((n,s)=>n instanceof v?this.interpretColumn(n):this.interpretInjection(n,s))}interpretColumn(e){var r,c,f,p,d,u,E,b,g;const n=[],s={};s.name=$(e.callee).unwrap();const i=os(e.args[0]);s.type=i.getValue(),n.push(...i.getErrors()),s.token=_(e),s.inline_refs=[];const a=e.args.slice(1);if(I.last(a)instanceof R){const A=F(a.pop()).getValue();s.pk=!!((r=A.pk)!=null&&r.length)||!!((c=A["primary key"])!=null&&c.length),s.increment=!!((f=A.increment)!=null&&f.length),s.unique=!!((p=A.unique)!=null&&p.length),s.not_null=(d=A["not null"])!=null&&d.length?!0:(u=A.null)!=null&&u.length?!1:void 0,s.dbdefault=ls((b=(E=A.default)==null?void 0:E.at(0))==null?void 0:b.value);const k=(g=A.note)==null?void 0:g.at(0);s.note=k&&{value:M(k.value).map(ie).unwrap(),token:_(k)};const be=A.ref||[];s.inline_refs=be.flatMap(S=>{const[Re]=Ce(S.value.expression);if(ot(Re,e.symbol))return n.push(new l(o.SAME_ENDPOINT,"Two endpoints are the same",S)),[];const Ee=S.value.op,V=z(S.value.expression).unwrap();let te;if(V.length===1){const[Q]=V;te={schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[Q],relation:Ee.value,token:_(S)}}else if(V.length===2){const[Q,me]=V;te={schemaName:null,tableName:Q,fieldNames:[me],relation:Ee.value,token:_(S)}}else if(V.length===3){const[Q,me,ut]=V;te={schemaName:Q,tableName:me,fieldNames:[ut],relation:Ee.value,token:_(S)}}else{n.push(new l(o.UNSUPPORTED,"Nested schema is not supported",S));const Q=V.pop(),me=V.pop();te={schemaName:V.join("."),tableName:me,fieldNames:[Q],relation:Ee.value,token:_(S)}}const Ne=this.registerInlineRefToEnv(e,Re,te,S);return n.push(...Ne),Ne.length===0?te:[]})}return s.pk||(s.pk=a.some(A=>W(A).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=a.some(A=>W(A).unwrap().toLowerCase()==="unique")),this.table.fields.push(s),s.pk&&this.pkColumns.push(s),n}interpretIndexes(e){return this.table.indexes.push(...e.body.body.map(n=>{var r,c,f,p,d,u,E;const s={columns:[]},i=n;s.token=_(i);const a=[i.callee,...i.args];if(I.last(a)instanceof R){const b=F(a.pop()).getValue();s.pk=!!((r=b.pk)!=null&&r.length),s.unique=!!((c=b.unique)!=null&&c.length),s.name=M((p=(f=b.name)==null?void 0:f.at(0))==null?void 0:p.value).unwrap_or(void 0);const g=(d=b.note)==null?void 0:d.at(0);s.note=g&&{value:M(g.value).unwrap(),token:_(g)},s.type=W((E=(u=b.type)==null?void 0:u.at(0))==null?void 0:E.value).unwrap_or(void 0)}return a.flatMap(b=>{if(!(b instanceof q))return b;const g=[];for(;b instanceof q;)g.push(b.argumentList),b=b.callee;return g.push(b),g}).forEach(b=>{const{functional:g,nonFunctional:A}=Ge(b).unwrap();s.columns.push(...g.map(k=>({value:k.value.value,type:"expression",token:_(k)})),...A.map(k=>({value:$(k).unwrap(),type:"column",token:_(k)})))}),s})),[]}registerInlineRefToEnv(e,n,s,i){const a=Xt(e.symbol,n);if(this.env.refIds[a])return[new l(o.CIRCULAR_REF,"References with same endpoints exist",i),new l(o.CIRCULAR_REF,"References with same endpoints exist",this.env.refIds[a])];const r=Ct(s.relation);return this.env.refIds[a]=i,this.env.ref.set(i,{name:null,schemaName:null,token:s.token,endpoints:[{...s,relation:r[1]},{schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[W(e.callee).unwrap()],token:_(e),relation:r[0]}]}),[]}}function os(t){let e=null;t instanceof q&&(e=t.argumentList.elementList.map(a=>ee(a)?a.expression.literal.value:C(a)?M(a).unwrap():W(a).unwrap()).join(","),t=t.callee);let n="";for(;t instanceof ue;)n=`[${t.indexer.elementList.map(a=>a.name.expression.literal.value).join(",")}]${n}`,t=t.array;const{name:s,schemaName:i}=Te(t);return i.length>1?new Y({schemaName:i.length===0?null:i[0],type_name:`${s}${n}${e?`(${e})`:""}`,args:e},[new l(o.UNSUPPORTED,"Nested schema is not supported",t)]):new Y({schemaName:i.length===0?null:i[0],type_name:`${s}${n}${e?`(${e})`:""}`,args:e})}function ls(t){var e,n,s;if(t){if(C(t))return{value:M(t).unwrap(),type:"string"};if(ee(t))return{type:"number",value:Number.parseFloat(t.expression.literal.value)};if(he(t))return{value:t.expression.variable.value.toLowerCase(),type:"boolean"};if(t instanceof K&&rt.includes((e=t.op)==null?void 0:e.value)&&ee(t.expression)){const i=Number.parseFloat(t.expression.expression.literal.value);return{value:((n=t.op)==null?void 0:n.value)==="-"?0-i:i,type:"number"}}if(t instanceof ce)return{value:(s=t.value)==null?void 0:s.value,type:"expression"};throw new Error("Unreachable")}}class cs{constructor(e,n){this.declarationNode=e,this.env=n,this.note={name:void 0,content:void 0,token:void 0}}interpret(){return this.note.token=_(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(e){const{name:n}=Te(e);return this.note.name=n,[]}interpretSettingList(e){var s,i,a;const n=F(e).getValue();return this.note.headerColor=(s=n.headercolor)!=null&&s.length?De((a=(i=n.headercolor)==null?void 0:i.at(0))==null?void 0:a.value):void 0,[]}interpretBody(e){const[n,s]=I.partition(e.body,i=>i instanceof v);return n.length!==1||s.length>0?[new l(o.INVALID_NOTE,"Invalid note syntax",e)]:[...this.interpretNote(n[0])]}interpretNote(e){const n=I.get(e,"callee.expression.literal.value","");return this.note.content=ie(n),[]}}class jt{constructor(e,n){this.declarationNode=e,this.env=n,this.container=this.declarationNode.parent instanceof y?this.env.tables.get(this.declarationNode.parent):void 0,this.ref={}}interpret(){return this.ref.token=_(this.declarationNode),this.env.ref.set(this.declarationNode,this.ref),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(e){const n=[],s=z(this.declarationNode.name).unwrap_or([]);return this.ref.name=s.pop()||null,s.length>1&&n.push(new l(o.UNSUPPORTED,"Nested schema is not supported",this.declarationNode.name)),this.ref.schemaName=s.join(".")||null,n}interpretBody(e){return e instanceof v?this.interpretField(e):this.interpretField(e.body[0])}interpretField(e){var p,d,u,E,b,g,A;const n=e.callee.op.value,{leftExpression:s,rightExpression:i}=e.callee,a=Ce(s),r=Ce(i);if(ot(a,r))return[new l(o.SAME_ENDPOINT,"Two endpoints are the same",e)];const c=Xt(a,r);if(this.env.refIds[c])return[new l(o.CIRCULAR_REF,"References with same endpoints exist",this.declarationNode),new l(o.CIRCULAR_REF,"References with same endpoints exist",this.env.refIds[c])];if(e.args[0]){const k=F(e.args[0]).getValue(),be=(d=(p=k.delete)==null?void 0:p.at(0))==null?void 0:d.value;this.ref.onDelete=be instanceof ne?ge(be).unwrap_or(void 0):W(be).unwrap_or(void 0);const S=(E=(u=k.update)==null?void 0:u.at(0))==null?void 0:E.value;this.ref.onUpdate=S instanceof ne?ge(S).unwrap_or(void 0):W(S).unwrap_or(void 0),this.ref.color=(b=k.color)!=null&&b.length?De((A=(g=k.color)==null?void 0:g.at(0))==null?void 0:A.value):void 0}const f=Ct(n);return this.ref.endpoints=[{...It(s,this.container),relation:f[0],token:_(s)},{...It(i,this.container),relation:f[1],token:_(i)}],this.env.refIds[c]=this.declarationNode,[]}}class Wt{constructor(e,n){this.declarationNode=e,this.env=n,this.tableGroup={tables:[]}}interpret(){const e=[];return this.tableGroup.token=_(this.declarationNode),this.env.tableGroups.set(this.declarationNode,this.tableGroup),e.push(...this.interpretName(this.declarationNode.name),...this.interpretSettingList(this.declarationNode.attributeList),...this.interpretBody(this.declarationNode.body)),e}interpretName(e){const n=[],{name:s,schemaName:i}=Te(e);return i.length>=2&&(this.tableGroup.name=s,this.tableGroup.schemaName=i.join("."),n.push(new l(o.UNSUPPORTED,"Nested schema is not supported",this.declarationNode.name))),this.tableGroup.name=s,this.tableGroup.schemaName=i[0]||null,n}interpretBody(e){const[n,s]=I.partition(e.body,i=>i instanceof v);return[...this.interpretFields(n),...this.interpretSubElements(s)]}interpretSubElements(e){return e.flatMap(n=>{var s;switch((s=n.type)==null?void 0:s.value.toLowerCase()){case"note":this.tableGroup.note={value:M(n.body instanceof re?n.body.body[0].callee:n.body.callee).map(ie).unwrap(),token:_(n)};break}return[]})}interpretFields(e){const n=[];return this.tableGroup.tables=e.map(s=>{const i=z(s.callee).unwrap();i.length>2&&n.push(new l(o.UNSUPPORTED,"Nested schema is not supported",s));const a=_e(s.callee).unwrap().pop().referee.id;if(this.env.groupOfTable[a]){const r=this.env.groupOfTable[a],{schemaName:c,name:f}=this.env.tableGroups.get(r),p=c?`${c}.${f}`:f;n.push(new l(o.TABLE_REAPPEAR_IN_TABLEGROUP,`Table "${i.join(".")}" already appears in group "${p}"`,s))}else this.env.groupOfTable[a]=this.declarationNode;return{name:i.pop(),schemaName:i.join(".")}}),n}interpretSettingList(e){var i,a,r;const n=F(e).getValue();this.tableGroup.color=(i=n.color)!=null&&i.length?De((r=(a=n.color)==null?void 0:a.at(0))==null?void 0:r.value):void 0;const[s]=n.note||[];return this.tableGroup.note=s&&{value:M(s==null?void 0:s.value).map(ie).unwrap(),token:_(s)},[]}}class qt{constructor(e,n){this.declarationNode=e,this.env=n,this.enum={values:[]}}interpret(){return this.enum.token=_(this.declarationNode),this.env.enums.set(this.declarationNode,this.enum),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(e){const{name:n,schemaName:s}=Te(e);return s.length>1?(this.enum.name=n,this.enum.schemaName=s.join("."),[new l(o.UNSUPPORTED,"Nested schema is not supported",e)]):(this.enum.name=n,this.enum.schemaName=s.length?s[0]:null,[])}interpretBody(e){return e.body.flatMap(n=>{var c;const s=n,i={};i.token=_(s),i.name=W(s.callee).unwrap();const r=(c=F(s.args[0]).getValue().note)==null?void 0:c.at(0);return i.note=r&&{value:M(r.value).map(ie).unwrap(),token:_(r)},this.enum.values.push(i),[]})}}class Yt{constructor(e,n){this.declarationNode=e,this.env=n,this.tablePartial={name:void 0,fields:[],token:void 0,indexes:[]},this.pkColumns=[]}interpret(){this.tablePartial.token=_(this.declarationNode),this.env.tablePartials.set(this.declarationNode,this.tablePartial);const e=[...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)),e}interpretName(e){const{name:n}=Te(e);return this.tablePartial.name=n,[]}interpretSettingList(e){var i,a,r;const n=F(e).getValue();this.tablePartial.headerColor=(i=n.headercolor)!=null&&i.length?De((r=(a=n.headercolor)==null?void 0:a.at(0))==null?void 0:r.value):void 0;const[s]=n.note||[];return this.tablePartial.note=s&&{value:M(s==null?void 0:s.value).map(ie).unwrap(),token:_(s)},[]}interpretBody(e){const[n,s]=I.partition(e.body,i=>i instanceof v);return[...this.interpretFields(n),...this.interpretSubElements(s)]}interpretSubElements(e){return e.flatMap(n=>{var s;switch((s=n.type)==null?void 0:s.value.toLowerCase()){case"note":return this.tablePartial.note={value:M(n.body instanceof re?n.body.body[0].callee:n.body.callee).map(ie).unwrap(),token:_(n)},[];case"indexes":return this.interpretIndexes(n)}return[]})}interpretFields(e){return e.flatMap(n=>this.interpretColumn(n))}interpretColumn(e){var r,c,f,p,d,u,E,b,g;const n=[],s={};s.name=$(e.callee).unwrap();const i=us(e.args[0]);s.type=i.getValue(),n.push(...i.getErrors()),s.token=_(e),s.inline_refs=[];const a=e.args.slice(1);if(I.last(a)instanceof R){const A=F(a.pop()).getValue();s.pk=!!((r=A.pk)!=null&&r.length)||!!((c=A["primary key"])!=null&&c.length),s.increment=!!((f=A.increment)!=null&&f.length),s.unique=!!((p=A.unique)!=null&&p.length),s.not_null=(d=A["not null"])!=null&&d.length?!0:(u=A.null)!=null&&u.length?!1:void 0,s.dbdefault=hs((b=(E=A.default)==null?void 0:E.at(0))==null?void 0:b.value);const k=(g=A.note)==null?void 0:g.at(0);s.note=k&&{value:M(k.value).map(ie).unwrap(),token:_(k)};const be=A.ref||[];s.inline_refs=be.flatMap(S=>{const[Re]=Ce(S.value.expression);if(ot(Re,e.symbol))return n.push(new l(o.SAME_ENDPOINT,"Two endpoints are the same",S)),[];const Ee=S.value.op,V=z(S.value.expression).unwrap();let te;if(V.length===2){const[Ne,Q]=V;te={schemaName:null,tableName:Ne,fieldNames:[Q],relation:Ee.value,token:_(S)}}else if(V.length===3){const[Ne,Q,me]=V;te={schemaName:Ne,tableName:Q,fieldNames:[me],relation:Ee.value,token:_(S)}}else{n.push(new l(o.UNSUPPORTED,"Unsupported",S));const Ne=V.pop(),Q=V.pop();te={schemaName:V.join("."),tableName:Q,fieldNames:[Ne],relation:Ee.value,token:_(S)}}return te})}return s.pk||(s.pk=a.some(A=>W(A).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=a.some(A=>W(A).unwrap().toLowerCase()==="unique")),this.tablePartial.fields.push(s),s.pk&&this.pkColumns.push(s),n}interpretIndexes(e){return this.tablePartial.indexes.push(...e.body.body.map(n=>{var r,c,f,p,d,u,E;const s={columns:[]},i=n;s.token=_(i);const a=[i.callee,...i.args];if(I.last(a)instanceof R){const b=F(a.pop()).getValue();s.pk=!!((r=b.pk)!=null&&r.length),s.unique=!!((c=b.unique)!=null&&c.length),s.name=M((p=(f=b.name)==null?void 0:f.at(0))==null?void 0:p.value).unwrap_or(void 0);const g=(d=b.note)==null?void 0:d.at(0);s.note=g&&{value:M(g.value).unwrap(),token:_(g)},s.type=W((E=(u=b.type)==null?void 0:u.at(0))==null?void 0:E.value).unwrap_or(void 0)}return a.flatMap(b=>{if(!(b instanceof q))return b;const g=[];for(;b instanceof q;)g.push(b.argumentList),b=b.callee;return g.push(b),g}).forEach(b=>{const{functional:g,nonFunctional:A}=Ge(b).unwrap();s.columns.push(...g.map(k=>({value:k.value.value,type:"expression",token:_(k)})),...A.map(k=>({value:$(k).unwrap(),type:"column",token:_(k)})))}),s})),[]}}function us(t){let e=null;t instanceof q&&(e=t.argumentList.elementList.map(a=>ee(a)?a.expression.literal.value:C(a)?M(a).unwrap():W(a).unwrap()).join(","),t=t.callee);let n="";for(;t instanceof ue;)n=`[${t.indexer.elementList.map(a=>a.name.expression.literal.value).join(",")}]${n}`,t=t.array;const{name:s,schemaName:i}=Te(t);return i.length>1?new Y({schemaName:i.length===0?null:i[0],type_name:`${s}${n}${e?`(${e})`:""}`,args:e},[new l(o.UNSUPPORTED,"Nested schema is not supported",t)]):new Y({schemaName:i.length===0?null:i[0],type_name:`${s}${n}${e?`(${e})`:""}`,args:e})}function hs(t){var e,n,s;if(t){if(C(t))return{value:M(t).unwrap(),type:"string"};if(ee(t))return{type:"number",value:Number.parseFloat(t.expression.literal.value)};if(he(t))return{value:t.expression.variable.value.toLowerCase(),type:"boolean"};if(t instanceof K&&rt.includes((e=t.op)==null?void 0:e.value)&&ee(t.expression)){const i=Number.parseFloat(t.expression.expression.literal.value);return{value:((n=t.op)==null?void 0:n.value)==="-"?0-i:i,type:"number"}}if(t instanceof ce)return{value:(s=t.value)==null?void 0:s.value,type:"expression"};throw new Error("Unreachable")}}class fs{constructor(e,n){this.declarationNode=e,this.env=n,this.project={enums:[],refs:[],tableGroups:[],tables:[],tablePartials:[]}}interpret(){return this.env.project.set(this.declarationNode,this.project),this.project.token=_(this.declarationNode),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(e){if(!e)return this.project.name=null,[];const{name:n}=Te(e);return this.project.name=n,[]}interpretBody(e){return e.body.flatMap(n=>{var i;const s=n;switch((i=s.type)==null?void 0:i.value.toLowerCase()){case"table":{const a=new $t(s,this.env).interpret();return this.project.tables.push(this.env.tables.get(s)),a}case"ref":{const a=new jt(s,this.env).interpret();return this.project.refs.push(this.env.ref.get(s)),a}case"tablegroup":{const a=new Wt(s,this.env).interpret();return this.project.tableGroups.push(this.env.tableGroups.get(s)),a}case"enum":{const a=new qt(s,this.env).interpret();return this.project.enums.push(this.env.enums.get(s)),a}case"note":return this.project.note={value:M(s.body instanceof re?s.body.body[0].callee:s.body.callee).map(ie).unwrap(),token:_(s)},[];case"tablepartial":{const a=new Yt(s,this.env).interpret();return this.project.tablePartials.push(this.env.tablePartials.get(s)),a}default:return this.project[s.type.value.toLowerCase()]=M(s.body.callee).unwrap(),[]}})}}class ps{constructor(e){this.ast=e,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 e=this.ast.body.flatMap(n=>{switch(xe(n).unwrap_or(void 0)){case L.Table:return new $t(n,this.env).interpret();case L.Note:return new cs(n,this.env).interpret();case L.Ref:return new jt(n,this.env).interpret();case L.TableGroup:return new Wt(n,this.env).interpret();case L.TablePartial:return new Yt(n,this.env).interpret();case L.Enum:return new qt(n,this.env).interpret();case L.Project:return new fs(n,this.env).interpret();default:return[]}});return new Y(ds(this.env),e)}}function ds(t){return{schemas:[],tables:Array.from(t.tables.values()),notes:Array.from(t.notes.values()),refs:Array.from(t.ref.values()),enums:Array.from(t.enums.values()),tableGroups:Array.from(t.tableGroups.values()),aliases:t.aliases,project:Array.from(t.project.values())[0]||{},tablePartials:Array.from(t.tablePartials.values())}}var w=(t=>(t[t.Function=1]="Function",t[t.Constructor=2]="Constructor",t[t.Field=3]="Field",t[t.Variable=4]="Variable",t[t.Class=5]="Class",t[t.Struct=6]="Struct",t[t.Interface=7]="Interface",t[t.Module=8]="Module",t[t.Property=9]="Property",t[t.Event=10]="Event",t[t.Operator=11]="Operator",t[t.Unit=12]="Unit",t[t.Value=13]="Value",t[t.Constant=14]="Constant",t[t.Enum=15]="Enum",t[t.EnumMember=16]="EnumMember",t[t.Keyword=17]="Keyword",t[t.Text=18]="Text",t[t.Color=19]="Color",t[t.File=20]="File",t[t.Reference=21]="Reference",t[t.Customcolor=22]="Customcolor",t[t.Folder=23]="Folder",t[t.TypeParameter=24]="TypeParameter",t[t.User=25]="User",t[t.Issue=26]="Issue",t[t.Snippet=27]="Snippet",t))(w||{}),P=(t=>(t[t.None=0]="None",t[t.KeepWhitespace=1]="KeepWhitespace",t[t.InsertAsSnippet=4]="InsertAsSnippet",t))(P||{});function Pe(t){switch(t){case m.Schema:return w.Module;case m.Table:case m.TablePartial:return w.Class;case m.Column:case m.TableGroupField:return w.Field;case m.Enum:return w.Enum;case m.EnumField:return w.EnumMember;case m.TableGroup:return w.Struct;default:return w.Text}}function Xe(t,e){if(!t||Ze(t))return!1;for(const n of t.trailingTrivia){if(n.start>e)break;if(n.kind===h.NEWLINE&&n.end<=e)return!1}return!0}function B(){return{suggestions:[]}}function $e(t){return{...t,suggestions:t.suggestions.map(e=>({...e,insertText:` ${e.insertText}`}))}}function He(t){return{...t,suggestions:t.suggestions.map(e=>({...e,insertText:e.insertText.split("").every(qe)?e.insertText:`"${e.insertText}"`}))}}function lt(t,e){return t.getOffsetAt(e)}class zt{constructor(e,n=[]){this.compiler=e,this.triggerCharacters=n}provideCompletionItems(e,n){var d,u;const s=lt(e,n),i=this.compiler.token.flatStream(),{token:a,index:r}=this.compiler.container.token(s),c=r===void 0?i[0]:i[r+1];if([...(a==null?void 0:a.trailingTrivia)||[],...(a==null?void 0:a.leadingTrivia)||[],...(c==null?void 0:c.leadingTrivia)||[]].find(E=>tn(E)&&ke(s,E)))return B();if(r===void 0)return vt();if([h.STRING_LITERAL,h.QUOTED_STRING].includes(a.kind)&&ke(s,a))return B();const f=this.compiler.container.element(s);if(this.compiler.container.scopeKind(s)===U.TOPLEVEL||f instanceof y&&f.type&&f.type.start<=s&&f.type.end>=s)return vt();const p=[...this.compiler.container.stack(s)].reverse();for(const E of p)if(E instanceof K)switch((d=E.op)==null?void 0:d.value){case">":case"<":case"<>":case"-":return Lt(this.compiler,s,E)}else if(E instanceof le)switch((u=E.op)==null?void 0:u.value){case">":case"<":case"<>":case"-":return Lt(this.compiler,s,E);case".":return Qt(this.compiler,s,E)}else{if(E instanceof se)return _t(this.compiler,s,E);if(E instanceof R)return _t(this.compiler,s,E);if(E instanceof fe)return Ns(this.compiler,s);if(E instanceof Le)return Es(this.compiler,s);if(E instanceof v)return gt(this.compiler,s,E);if(E instanceof y&&(E.bodyColon&&s>=E.bodyColon.end||E.body&&ke(s,E.body)))return gt(this.compiler,s,void 0)}return B()}}function Es(t,e,n){const s=t.container.element(e);return Oe(t,e,s,[m.TablePartial])}function Lt(t,e,n){const s=t.container.scopeKind(e);if([U.REF,U.TABLE].includes(s)){const i=Oe(t,e,t.container.element(e),[m.Table,m.Schema,m.Column]);return Xe(n.op,e)?$e(i):i}return B()}function Oe(t,e,n,s){var r;if(n===void 0)return B();let i=n;const a={suggestions:[]};for(;i;){if((r=i==null?void 0:i.symbol)!=null&&r.symbolTable){const{symbol:c}=i;a.suggestions.push(...t.symbol.members(c).filter(({kind:f})=>s.includes(f)).map(({name:f,kind:p})=>({label:f,insertText:f,insertTextRules:P.KeepWhitespace,kind:Pe(p),sortText:Pe(p).toString().padStart(2,"0"),range:void 0})))}i=i instanceof y?i.parent:void 0}return He(a)}function Ns(t,e){var s;switch(t.container.scopeKind(e)){case U.INDEXES:return Jt(t,e);case U.REF:{const i=[...t.container.stack(e)];for(;i.length>0;){const a=i.pop();if(a instanceof le&&((s=a.op)==null?void 0:s.value)===".")return Qt(t,e,a)}}return Ht(t,e)}return B()}function _t(t,e,n){const{token:s}=t.container.token(e);if([h.COMMA,h.LBRACKET].includes(s==null?void 0:s.kind)){const i=At(t,e);return(s==null?void 0:s.kind)===h.COMMA&&Xe(s,e)?$e(i):i}if(n.name&&n.name.start<=e&&n.name.end>=e)return At(t,e);if(n.name instanceof ne){const i=ms(t,e,ge(n.name).unwrap_or(""));return(s==null?void 0:s.kind)===h.COLON&&Xe(s,e)?$e(i):i}return B()}function At(t,e){const n=t.container.element(e),s=t.container.scopeKind(e);if(n instanceof Z)return B();if(n.body&&!ke(e,n.body))switch(s){case U.TABLE:return{suggestions:["headercolor","note"].map(i=>({label:i,insertText:`${i}: `,kind:w.Field,insertTextRules:P.KeepWhitespace,range:void 0}))};case U.TABLEGROUP:return{suggestions:["color","note"].map(i=>({label:i,insertText:`${i}: `,kind:w.Field,insertTextRules:P.KeepWhitespace,range:void 0}))};default:return B()}switch(s){case U.TABLE:return{suggestions:[...["primary key","null","not null","increment","pk","unique"].map(i=>({label:i,insertText:i,kind:w.Property,insertTextRules:P.KeepWhitespace,range:void 0})),...["ref","default"].map(i=>({label:i,insertText:`${i}: `,kind:w.Property,insertTextRules:P.KeepWhitespace,range:void 0})),{label:"note",insertText:"note: ",kind:w.Property,insertTextRules:P.KeepWhitespace,range:void 0}]};case U.ENUM:return{suggestions:[{label:"note",insertText:"note: ",kind:w.Property,insertTextRules:P.KeepWhitespace,range:void 0}]};case U.INDEXES:return{suggestions:[...["unique","pk"].map(i=>({label:i,insertText:i,insertTextRules:P.KeepWhitespace,kind:w.Property,range:void 0})),...["note","name","type"].map(i=>({label:i,insertText:`${i}: `,kind:w.Property,insertTextRules:P.KeepWhitespace,range:void 0}))]};case U.REF:return{suggestions:["update","delete"].map(i=>({label:i,insertText:`${i}: `,kind:w.Property,insertTextRules:P.KeepWhitespace,range:void 0}))}}return B()}function ms(t,e,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:w.Value,insertTextRules:P.KeepWhitespace,range:void 0}))};case"type":return{suggestions:["btree","hash"].map(s=>({label:s,insertText:`${s}`,kind:w.Value,insertTextRules:P.KeepWhitespace,range:void 0}))}}return B()}function Qt(t,e,n){const s=_e(n).unwrap_or([]);if(s.pop(),s.some(a=>!j(a)))return B();const i=s.map(a=>W(a).unwrap());return He({suggestions:t.symbol.ofName({nameStack:i,owner:t.container.element(e)}).flatMap(({symbol:a})=>t.symbol.members(a)).map(({kind:a,name:r})=>({label:r,insertText:r,kind:Pe(a),range:void 0}))})}function gt(t,e,n){var i;switch(t.container.scopeKind(e)){case U.TABLE:return wt(t,e,n);case U.TABLEPARTIAL:return wt(t,e,n);case U.PROJECT:return bs(t,e,n);case U.INDEXES:return Ls(t,e);case U.ENUM:return Ts(t,e,n);case U.REF:{const a=Ht(t,e);return((i=t.container.token(e).token)==null?void 0:i.kind)===h.COLON&&Xe(t.container.token(e).token,e)?$e(a):a}case U.TABLEGROUP:return Is(t);default:return B()}}function vt(){return{suggestions:["Table","TableGroup","Enum","Project","Ref","TablePartial"].map(t=>({label:t,insertText:t,insertTextRules:P.KeepWhitespace,kind:w.Keyword,range:void 0}))}}function Ts(t,e,n){return n!=null&&n.callee&&ct(e,n)===1?Oe(t,e,t.container.element(e),[m.Schema,m.Table,m.Column]):B()}function wt(t,e,n){if(!(n!=null&&n.callee))return{suggestions:["Note","indexes"].map(i=>({label:i,insertText:i,insertTextRules:P.KeepWhitespace,kind:w.Keyword,range:void 0}))};const s=ct(e,n);return s===0?{suggestions:["Note","indexes"].map(i=>({label:i,insertText:i,insertTextRules:P.KeepWhitespace,kind:w.Keyword,range:void 0}))}:s===1?_s(t,e):B()}function bs(t,e,n){return n!=null&&n.callee?ct(e,n)===0?{suggestions:["Table","TableGroup","Enum","Note","Ref"].map(i=>({label:i,insertText:i,insertTextRules:P.KeepWhitespace,kind:w.Keyword,range:void 0}))}:B():{suggestions:["Table","TableGroup","Enum","Note","Ref"].map(i=>({label:i,insertText:i,insertTextRules:P.KeepWhitespace,kind:w.Keyword,range:void 0}))}}function Ht(t,e){return Oe(t,e,t.container.element(e),[m.Schema,m.Table,m.Column])}function Is(t){return{suggestions:[...He({suggestions:[...t.parse.publicSymbolTable().entries()].flatMap(([e])=>{const n=oe(e).unwrap_or(void 0);if(n===void 0)return[];const{kind:s,name:i}=n;return s!==m.Table&&s!==m.Schema?[]:{label:i,insertText:i,insertTextRules:P.KeepWhitespace,kind:Pe(s),range:void 0}})}).suggestions,...["Note"].map(e=>({label:e,insertText:e,insertTextRules:P.KeepWhitespace,kind:w.Keyword,range:void 0}))]}}function Ls(t,e){return Jt(t,e)}function _s(t,e){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:P.KeepWhitespace,kind:w.TypeParameter,sortText:w.TypeParameter.toString().padStart(2,"0"),range:void 0})),...Oe(t,e,t.container.element(e),[m.Enum,m.Schema]).suggestions]}}function Jt(t,e){const n=t.container.element(e),s=n==null?void 0:n.parent;if(!((s==null?void 0:s.symbol)instanceof Ot))return B();const{symbolTable:i}=s.symbol;return He({suggestions:[...i.entries()].flatMap(([a])=>{const r=oe(a).unwrap_or(void 0);if(r===void 0)return[];const{name:c}=r;return{label:c,insertText:c,insertTextRules:P.KeepWhitespace,kind:Pe(m.Column),range:void 0}})})}function ct(t,e){if(!e.callee)return-1;const n=[e.callee,...e.args],s=n.findIndex(i=>t<=i.end);return s===-1?n.length:s}class Zt{constructor(e){this.compiler=e}provideDefinition(e,n){var r;const{uri:s}=e,i=lt(e,n),a=[...this.compiler.container.stack(i)];for(;a.length!==0;){const c=a.pop();if((r=c==null?void 0:c.referee)!=null&&r.declaration&&[Ie.PRIMARY_EXPRESSION,Ie.VARIABLE,Ie.PARTIAL_INJECTION].includes(c==null?void 0:c.kind)){const{startPos:f,endPos:p}=c.referee.declaration;return[{range:{startColumn:f.column+1,startLineNumber:f.line+1,endColumn:p.column+1,endLineNumber:p.line+1},uri:s}]}}return[]}}class Kt{constructor(e){this.compiler=e}provideReferences(e,n){const{uri:s}=e,i=lt(e,n),a=[...this.compiler.container.stack(i)];for(;a.length!==0;){const r=a.pop();if(r&&[Ie.ELEMENT_DECLARATION,Ie.FUNCTION_APPLICATION,Ie.PRIMARY_EXPRESSION].includes(r==null?void 0:r.kind)){const{symbol:c}=r;if(c!=null&&c.references.length)return c.references.map(({startPos:f,endPos:p})=>({range:{startColumn:f.column+1,startLineNumber:f.line+1,endColumn:p.column+1,endLineNumber:p.line+1},uri:s}))}}return[]}}const As=Object.freeze(Object.defineProperty({__proto__:null,CompletionItemInsertTextRule:P,CompletionItemKind:w,DBMLCompletionItemProvider:zt,DBMLDefinitionProvider:Zt,DBMLReferencesProvider:Kt},Symbol.toStringTag,{value:"Module"}));var U=(t=>(t[t.TABLE=0]="TABLE",t[t.ENUM=1]="ENUM",t[t.TABLEGROUP=2]="TABLEGROUP",t[t.INDEXES=3]="INDEXES",t[t.NOTE=4]="NOTE",t[t.REF=5]="REF",t[t.PROJECT=6]="PROJECT",t[t.CUSTOM=7]="CUSTOM",t[t.TOPLEVEL=8]="TOPLEVEL",t[t.TABLEPARTIAL=9]="TABLEPARTIAL",t))(U||{});class gs{constructor(){this.source="",this.cache=new Array(16).fill(null),this.nodeIdGenerator=new nn,this.symbolIdGenerator=new fn,this.token={invalidStream:this.createQuery(6,()=>this.parse.tokens().filter(Ut)),flatStream:this.createQuery(7,()=>this.parse.tokens().flatMap(e=>[...e.leadingInvalid,e,...e.trailingInvalid]))},this.parse={source:()=>this.source,_:this.createQuery(0,()=>{const e=new gn(this.source).lex().chain(n=>new yn(n,this.nodeIdGenerator).parse()).chain(({ast:n,tokens:s})=>new rs(n,this.symbolIdGenerator).analyze().map(()=>({ast:n,tokens:s})));return e.getErrors().length>0?e:e.chain(({ast:n,tokens:s})=>new ps(n).interpret().map(a=>({ast:n,tokens:s,rawDb:a})))}),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,e=>{const n=this.token.flatStream(),{index:s,token:i}=this.container.token(e),a=s===void 0?-1:I.findLastIndex(n,p=>!p.isInvalid,s);if(a===-1)return[this.parse.ast()];const r=n[a].start;let c=this.parse.ast();const f=[c];for(;;){const d=An(c).find(u=>ke(r,u));if(d===void 0||d instanceof J)break;f.push(d),c=d}if((i==null?void 0:i.kind)===h.COLON)return f;for(;f.length>0;){let p=!1;const d=I.last(f);if(d instanceof v){const u=this.parse.source();for(let E=d.end;E<e;E+=1)u[E]===`
12
+ `&&(f.pop(),p=!0)}else d instanceof K||d instanceof le?this.container.token(e).token!==d.op&&(f.pop(),p=!0):d instanceof R?d.listCloseBracket&&d.end<=e&&(f.pop(),p=!0):d instanceof fe?d.tupleCloseParen&&d.end<=e&&(f.pop(),p=!0):d instanceof re?d.blockCloseBrace&&d.end<=e&&(f.pop(),p=!0):d instanceof ne||d.end<e&&(f.pop(),p=!0);if(p){const u=I.last(f);u instanceof y&&u.end<=e&&f.pop()}if(!p)break}return f}),token:this.createQuery(11,e=>{const n=this.token.flatStream().findIndex(s=>s.start>=e);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,e=>{const n=this.container.stack(e);for(let s=n.length-1;s>=0;s-=1)if(n[s]instanceof y)return n[s];return this.parse.ast()}),scope:this.createQuery(14,e=>{var n,s;return(s=(n=this.container.element(e))==null?void 0:n.symbol)==null?void 0:s.symbolTable}),scopeKind:this.createQuery(15,e=>{var s;if(this.container.element(e)instanceof Z)return 8;switch((s=this.container.element(e).type)==null?void 0:s.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;default:return 7}})},this.symbol={ofName:this.createQuery(8,({nameStack:e,owner:n=this.parse.ast()})=>{var i;if(e.length===0)return[];const s=[];for(let a=n;a;a=a instanceof y?a.parent:void 0){if(!((i=a.symbol)!=null&&i.symbolTable))continue;const{symbolTable:r}=a.symbol;let c=[r],f=[];for(const p of e)f=c.flatMap(d=>un(p).flatMap(u=>{const E=d.get(u),b=oe(u).unwrap_or(void 0);return!E||!b?[]:{...b,symbol:E}})),c=f.flatMap(d=>d.symbol.symbolTable?d.symbol.symbolTable:[]);s.push(...f)}return s},({nameStack:e,owner:n})=>`${e.join(".")}@${n.id}`),members:this.createQuery(9,e=>e.symbolTable?[...e.symbolTable.entries()].map(([n,s])=>({...oe(n).unwrap(),symbol:s})):[])}}createQuery(e,n,s){return i=>{const a=this.cache[e],r=i&&s?s(i):i;if(a!==null){if(!(a instanceof Map))return a;if(a.has(r))return a.get(r)}const c=n(i);return i!==void 0?a instanceof Map?a.set(r,c):(this.cache[e]=new Map,this.cache[e].set(r,c)):this.cache[e]=c,c}}setSource(e){this.source=e,this.cache=new Array(16).fill(null),this.nodeIdGenerator.reset(),this.symbolIdGenerator.reset()}initMonacoServices(){return{definitionProvider:new Zt(this),referenceProvider:new Kt(this),autocompletionProvider:new zt(this)}}}exports.Compiler=gs;exports.serialize=sn;exports.services=As;