@dbml/parse 3.13.4 → 3.13.5-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 (78) hide show
  1. package/LICENSE +0 -0
  2. package/dist/dbml-parse.js +3 -3
  3. package/dist/dbml-parse.mjs +83 -75
  4. package/dist/src/compiler.d.ts +0 -0
  5. package/dist/src/constants.d.ts +0 -0
  6. package/dist/src/index.d.ts +0 -0
  7. package/dist/src/lib/analyzer/analyzer.d.ts +0 -0
  8. package/dist/src/lib/analyzer/binder/binder.d.ts +0 -0
  9. package/dist/src/lib/analyzer/binder/elementBinder/custom.d.ts +0 -0
  10. package/dist/src/lib/analyzer/binder/elementBinder/elementBinder.d.ts +0 -0
  11. package/dist/src/lib/analyzer/binder/elementBinder/enum.d.ts +0 -0
  12. package/dist/src/lib/analyzer/binder/elementBinder/indexes.d.ts +0 -0
  13. package/dist/src/lib/analyzer/binder/elementBinder/note.d.ts +0 -0
  14. package/dist/src/lib/analyzer/binder/elementBinder/project.d.ts +0 -0
  15. package/dist/src/lib/analyzer/binder/elementBinder/ref.d.ts +0 -0
  16. package/dist/src/lib/analyzer/binder/elementBinder/table.d.ts +0 -0
  17. package/dist/src/lib/analyzer/binder/elementBinder/tableGroup.d.ts +0 -0
  18. package/dist/src/lib/analyzer/binder/elementBinder/tablePartial.d.ts +0 -0
  19. package/dist/src/lib/analyzer/binder/types.d.ts +0 -0
  20. package/dist/src/lib/analyzer/binder/utils.d.ts +0 -0
  21. package/dist/src/lib/analyzer/symbol/factory.d.ts +0 -0
  22. package/dist/src/lib/analyzer/symbol/symbolIndex.d.ts +0 -0
  23. package/dist/src/lib/analyzer/symbol/symbolTable.d.ts +0 -0
  24. package/dist/src/lib/analyzer/symbol/symbols.d.ts +0 -0
  25. package/dist/src/lib/analyzer/symbol/utils.d.ts +0 -0
  26. package/dist/src/lib/analyzer/types.d.ts +0 -0
  27. package/dist/src/lib/analyzer/utils.d.ts +0 -0
  28. package/dist/src/lib/analyzer/validator/elementValidators/custom.d.ts +0 -0
  29. package/dist/src/lib/analyzer/validator/elementValidators/enum.d.ts +0 -0
  30. package/dist/src/lib/analyzer/validator/elementValidators/indexes.d.ts +0 -0
  31. package/dist/src/lib/analyzer/validator/elementValidators/note.d.ts +0 -0
  32. package/dist/src/lib/analyzer/validator/elementValidators/project.d.ts +0 -0
  33. package/dist/src/lib/analyzer/validator/elementValidators/ref.d.ts +0 -0
  34. package/dist/src/lib/analyzer/validator/elementValidators/table.d.ts +0 -0
  35. package/dist/src/lib/analyzer/validator/elementValidators/tableGroup.d.ts +0 -0
  36. package/dist/src/lib/analyzer/validator/elementValidators/tablePartial.d.ts +0 -0
  37. package/dist/src/lib/analyzer/validator/types.d.ts +0 -0
  38. package/dist/src/lib/analyzer/validator/utils.d.ts +0 -0
  39. package/dist/src/lib/analyzer/validator/validator.d.ts +0 -0
  40. package/dist/src/lib/errors.d.ts +0 -0
  41. package/dist/src/lib/interpreter/elementInterpreter/enum.d.ts +0 -0
  42. package/dist/src/lib/interpreter/elementInterpreter/project.d.ts +0 -0
  43. package/dist/src/lib/interpreter/elementInterpreter/ref.d.ts +0 -0
  44. package/dist/src/lib/interpreter/elementInterpreter/sticky_note.d.ts +0 -0
  45. package/dist/src/lib/interpreter/elementInterpreter/table.d.ts +0 -0
  46. package/dist/src/lib/interpreter/elementInterpreter/tableGroup.d.ts +0 -0
  47. package/dist/src/lib/interpreter/elementInterpreter/tablePartial.d.ts +0 -0
  48. package/dist/src/lib/interpreter/interpreter.d.ts +0 -0
  49. package/dist/src/lib/interpreter/types.d.ts +0 -0
  50. package/dist/src/lib/interpreter/utils.d.ts +0 -0
  51. package/dist/src/lib/lexer/lexer.d.ts +0 -0
  52. package/dist/src/lib/lexer/tokens.d.ts +0 -0
  53. package/dist/src/lib/lexer/utils.d.ts +0 -0
  54. package/dist/src/lib/option.d.ts +1 -0
  55. package/dist/src/lib/parser/contextStack.d.ts +0 -0
  56. package/dist/src/lib/parser/factory.d.ts +0 -0
  57. package/dist/src/lib/parser/nodes.d.ts +0 -0
  58. package/dist/src/lib/parser/parser.d.ts +0 -0
  59. package/dist/src/lib/parser/utils.d.ts +0 -0
  60. package/dist/src/lib/report.d.ts +0 -0
  61. package/dist/src/lib/serialization/serialize.d.ts +0 -0
  62. package/dist/src/lib/types.d.ts +0 -0
  63. package/dist/src/lib/utils.d.ts +0 -0
  64. package/dist/src/services/definition/provider.d.ts +0 -0
  65. package/dist/src/services/index.d.ts +0 -0
  66. package/dist/src/services/references/provider.d.ts +0 -0
  67. package/dist/src/services/suggestions/provider.d.ts +0 -0
  68. package/dist/src/services/suggestions/utils.d.ts +0 -0
  69. package/dist/src/services/types.d.ts +0 -0
  70. package/dist/src/services/utils.d.ts +0 -0
  71. package/dist/tests/NaN_errors/interpreter_NaN.test.d.ts +0 -0
  72. package/dist/tests/binder/binder.test.d.ts +0 -0
  73. package/dist/tests/interpreter/interpreter.test.d.ts +0 -0
  74. package/dist/tests/jestHelpers.d.ts +0 -0
  75. package/dist/tests/lexer/lexer.test.d.ts +0 -0
  76. package/dist/tests/parser/parser.test.d.ts +0 -0
  77. package/dist/tests/validator/validator.test.d.ts +0 -0
  78. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=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.TILDE="<tilde>",t.SINGLE_LINE_COMMENT="<single-line-comment>",t.MULTILINE_COMMENT="<multiline-comment>",t))(u||{});function an(t){switch(t.kind){case"<newline>":case"<space>":case"<tab>":case"<single-line-comment>":case"<multiline-comment>":return!0;default:return!1}}function rn(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 pt(t){return t!==void 0&&t.kind==="<op>"}class Q{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 Q(e,n,s,i,a)}}function yt(t){return t.trailingTrivia.find(({kind:e})=>e===u.NEWLINE)!==void 0}function dt(t,e){return e.leadingTrivia.find(({kind:s})=>s===u.NEWLINE)!==void 0||yt(t)}function Ke(t){return t.trailingTrivia.find(({kind:e})=>[u.SPACE,u.TAB].includes(e))!==void 0}function Pt(t){return t.trailingTrivia.length===0?t.end:Pt(L.last(t.trailingTrivia))}function kt(t){return t.leadingTrivia.length===0?t.start:kt(t.leadingTrivia[0])}function on(t){return[u.SINGLE_LINE_COMMENT,u.MULTILINE_COMMENT].includes(t.kind)}class ln{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class O{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 Q?kt(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 Q?Pt(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 me=(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))(me||{});class K extends O{constructor({body:e=[],eof:n},s){super(s,"<program>",[...e,n]),this.body=e,this.eof=n}}class y extends O{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 w||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 O{constructor({identifiers:e=[]},n){super(n,"<identifer-stream>",e||[]),this.identifiers=e}}class se extends O{constructor({name:e,colon:n,value:s},i){super(i,"<attribute>",[e,n,s]),this.name=e,this.value=s,this.colon=n}}class Z extends O{constructor({op:e,expression:n},s){super(s,"<prefix-expression>",[e,n]),this.op=e,this.expression=n}}class le extends O{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 We extends O{constructor({op:e,expression:n},s){super(s,"<postfix-expression>",[n,e]),this.op=e,this.expression=n}}class ue extends O{constructor({value:e},n){super(n,"<function-expression>",[e]),this.value=e}}class w extends O{constructor({callee:e,args:n=[]},s){super(s,"<function-application>",[e,...n]),this.callee=e,this.args=n}}class oe extends O{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 be extends O{constructor({op:e,partial:n},s){super(s,"<partial-injection>",[e,n]),this.partial=n}}class M extends O{constructor({listOpenBracket:e,elementList:n=[],commaList:s=[],listCloseBracket:i},a){super(a,"<list-expression>",[e,...St(n,s),i]),this.listOpenBracket=e,this.elementList=n,this.commaList=s,this.listCloseBracket=i}}class ce extends O{constructor({tupleOpenParen:e,elementList:n=[],commaList:s=[],tupleCloseParen:i},a){super(a,"<tuple-expression>",[e,...St(n,s),i]),this.tupleOpenParen=e,this.elementList=n,this.commaList=s,this.tupleCloseParen=i}}class et extends ce{constructor({groupOpenParen:e,expression:n,groupCloseParen:s},i){super({tupleOpenParen:e,elementList:n&&[n],commaList:[],tupleCloseParen:s},i),this.kind="<group-expression>"}}class ee extends O{constructor({callee:e,argumentList:n},s){super(s,"<call-expression>",[e,n]),this.callee=e,this.argumentList=n}}class ye extends O{constructor({literal:e},n){super(n,"<literal>",[e]),this.literal=e}}class re extends O{constructor({variable:e},n){super(n,"<variable>",[e]),this.variable=e}}class j extends O{constructor({expression:e},n){super(n,"<primary-expression>",[e]),this.expression=e}}class Me extends O{constructor({pre:e},n){const s=Q.create(u.SPACE,e.endPos,e.endPos," ",!1);super(n,"<dummy>",[s])}}class Ie extends O{constructor({expression:e,indexer:n},s){super(s,"<array>",[e,n]),this.array=e,this.indexer=n}}function St(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?L.flatten(L.zip(t,e)):L.flatten(L.zip(e,t))).filter(i=>i!==null)}function cn(t,e=!1){return JSON.stringify(t,function(n,s){var i;return!(this instanceof K)&&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 U{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 U(e(this.value))}isOk(){return!0}}class S{unwrap(){throw new Error("Trying to unwrap a None value")}unwrap_or(e){return e}and_then(e){return new S}map(e){return new S}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 Ve(t){return`Table:${t}`}function qe(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 un(t){return`Note:${t}`}function rt(t){return`TablePartial:${t}`}function Dt(t){return`TablePartialInjection:${t}`}function Fe(t,e){switch(e){case"Column":return qe(t);case"Enum":return nt(t);case"Enum field":return st(t);case"Schema":return tt(t);case"Table":return Ve(t);case"TableGroup":return it(t);case"TableGroup field":return at(t);case"TablePartial":return rt(t);default:throw new Error("Unreachable")}}function ie(t){const[e,n]=t.split(":");return Object.values(m).includes(e)?new U({name:n,kind:e}):new S}function hn(t){const e=ie(t).unwrap_or(void 0);if(!e)return!1;const{kind:n,name:s}=e;return n==="Schema"&&s==="public"}function fn(t){const e=ie(t).unwrap_or(void 0);if(!e)return!1;const{kind:n}=e;return n==="TablePartialInjection"}function pn(t){const e=ie(t).unwrap_or(void 0);if(!e)return null;const{kind:n,name:s}=e;return n==="TablePartialInjection"?Fe(s,"TablePartial"):null}class dn{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class Ot{constructor({symbolTable:e},n){this.references=[],this.id=n,this.symbolTable=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 xt{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class ot{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class Tn{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class mn{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class bn{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class In{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class Ln{constructor({injectorFieldSymbol:e,injectorDeclaration:n},s){this.references=[],this.id=s,this.injectorDeclaration=n,this.injectorFieldSymbol=e}}function An(t){return[tt,Ve,nt,it,qe,st,at,rt,Dt].map(e=>e(t))}function _n(t){return t instanceof ot?Ln:null}function Ye(t){return!!t.match(/(\p{L}|_|\p{M})/gu)}function Ge(t){const[e]=t;return e>="0"&&e<="9"}function gn(t){const[e]=t;return Ge(e)||Ye(e)&&e.toLowerCase()>="a"&&e.toLowerCase()<="f"}function ve(t){return Ye(t)||Ge(t)}function Et(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 Se(t,e){return t>=e.start&&t<e.end}function Rt(t){var e;return t instanceof Z?`${(e=t.op)==null?void 0:e.value}${Rt(t.expression)}`:t.expression.literal.value}function Ze(t){var e;return t instanceof Z?((e=t.op)==null?void 0:e.value)==="-"?-Ze(t.expression):Ze(t.expression):Number.parseFloat(t.expression.literal.value)}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.INVALID_TABLE_PARTIAL_CONTEXT=3060]="INVALID_TABLE_PARTIAL_CONTEXT",t[t.INVALID_TABLE_PARTIAL_ELEMENT_NAME=3061]="INVALID_TABLE_PARTIAL_ELEMENT_NAME",t[t.INVALID_TABLE_PARTIAL_SETTING=3062]="INVALID_TABLE_PARTIAL_SETTING",t[t.DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME=3063]="DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME",t[t.DUPLICATE_TABLE_PARTIAL_SETTING=3064]="DUPLICATE_TABLE_PARTIAL_SETTING",t[t.INVALID_TABLE_PARTIAL_INJECTION=3065]="INVALID_TABLE_PARTIAL_INJECTION",t[t.INVALID_TABLE_PARTIAL_INJECTION_OP=3066]="INVALID_TABLE_PARTIAL_INJECTION_OP",t[t.INVALID_TABLE_PARTIAL_INJECTION_NAME=3067]="INVALID_TABLE_PARTIAL_INJECTION_NAME",t[t.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME=3068]="DUPLICATE_TABLE_PARTIAL_INJECTION_NAME",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 J{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 J(n.value,s)}map(e){return new J(e(this.value),this.errors)}}function vn(t,e,n){if(!t||!Ne(t)||e.length===0)return new S;const s=[...e],i=Je(t).unwrap(),a=s.pop();if(!(a instanceof oe))return new S;const r=L.last(s)instanceof M?s.pop():void 0;return s.length===3&&Je(s[1]).unwrap().value==="as"?new U(n.create(y,{type:i,name:s[0],as:Je(s[1]).unwrap(),alias:s[2],attributeList:r,body:a})):s.length===1?new U(n.create(y,{type:i,name:s[0],attributeList:r,body:a})):s.length===0?new U(n.create(y,{type:i,attributeList:r,body:a})):new S}function Nt(t){return t.kind===u.IDENTIFIER&&t.value==="as"}function b(t){t&&(t instanceof Q?wn(t):yn(t))}function wn(t){t.kind!==u.EOF&&(t.isInvalid=!0)}function yn(t){if(t instanceof y)b(t.type),b(t.name),b(t.as),b(t.alias),b(t.bodyColon),b(t.attributeList),b(t.body);else if(t instanceof ne)t.identifiers.forEach(b);else if(t instanceof se)b(t.name),b(t.colon),b(t.value);else if(t instanceof Z)b(t.op),b(t.expression);else if(t instanceof le)b(t.leftExpression),b(t.op),b(t.rightExpression);else if(t instanceof We)b(t.op),b(t.expression);else if(t instanceof oe)b(t.blockOpenBrace),t.body.forEach(b),b(t.blockCloseBrace);else if(t instanceof M)b(t.listOpenBracket),t.commaList.forEach(b),t.elementList.forEach(b),b(t.listCloseBracket);else if(t instanceof ce)b(t.tupleOpenParen),t.commaList.forEach(b),t.elementList.forEach(b),b(t.tupleCloseParen);else if(t instanceof ee)b(t.callee),b(t.argumentList);else if(t instanceof w)b(t.callee),t.args.forEach(b);else if(t instanceof j)b(t.expression);else if(t instanceof ue)b(t.value);else if(t instanceof re)b(t.variable);else if(t instanceof ye)b(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 C(...t){return t.filter(e=>e!==void 0)}function Pn(t){if(t instanceof K)return C(...t.body,t.eof);if(t instanceof y)return C(t.type,t.name,t.as,t.alias,t.attributeList,t.bodyColon,t.body);if(t instanceof se)return C(t.name,t.colon,t.value);if(t instanceof ne)return t.identifiers;if(t instanceof ye)return t.literal?[t.literal]:[];if(t instanceof re)return C(t.variable);if(t instanceof Z)return C(t.op,t.expression);if(t instanceof le)return C(t.leftExpression,t.op,t.rightExpression);if(t instanceof We)return C(t.expression,t.op);if(t instanceof ue)return C(t.value);if(t instanceof w)return C(t.callee,...t.args);if(t instanceof oe)return C(t.blockOpenBrace,...t.body,t.blockCloseBrace);if(t instanceof M)return C(t.listOpenBracket,...Et(t.elementList,t.commaList),t.listCloseBracket);if(t instanceof ce)return C(t.tupleOpenParen,...Et(t.elementList,t.commaList),t.tupleCloseParen);if(t instanceof ee)return C(t.callee,t.argumentList);if(t instanceof j)return C(t.expression);if(t instanceof Ie)return C(t.array,t.indexer);if(t instanceof be)return C(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 $(t)?new U(t.expression.variable):new S}function q(t){var e;return t instanceof j&&(t.expression instanceof re&&t.expression.variable instanceof Q&&t.expression.variable.kind===u.QUOTED_STRING||t.expression instanceof ye&&((e=t.expression.literal)==null?void 0:e.kind)===u.STRING_LITERAL)}function $(t){return t instanceof j&&t.expression instanceof re&&t.expression.variable instanceof Q}function Ne(t){var e;return t instanceof j&&t.expression instanceof re&&((e=t.expression.variable)==null?void 0:e.kind)===u.IDENTIFIER}function lt(t){var e;return t instanceof le&&t.leftExpression instanceof O&&t.rightExpression instanceof O&&((e=t.op)==null?void 0:e.value)==="."}function we(t){if(t===void 0)return new S;const e=t.identifiers.map(n=>n.value).join(" ");return e===""?new S:new U(e)}class kn{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===`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=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.TILDE="<tilde>",t.SINGLE_LINE_COMMENT="<single-line-comment>",t.MULTILINE_COMMENT="<multiline-comment>",t))(u||{});function an(t){switch(t.kind){case"<newline>":case"<space>":case"<tab>":case"<single-line-comment>":case"<multiline-comment>":return!0;default:return!1}}function rn(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 pt(t){return t!==void 0&&t.kind==="<op>"}class Q{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 Q(e,n,s,i,a)}}function yt(t){return t.trailingTrivia.find(({kind:e})=>e===u.NEWLINE)!==void 0}function dt(t,e){return e.leadingTrivia.find(({kind:s})=>s===u.NEWLINE)!==void 0||yt(t)}function Je(t){return t.trailingTrivia.find(({kind:e})=>[u.SPACE,u.TAB].includes(e))!==void 0}function Pt(t){return t.trailingTrivia.length===0?t.end:Pt(L.last(t.trailingTrivia))}function kt(t){return t.leadingTrivia.length===0?t.start:kt(t.leadingTrivia[0])}function on(t){return[u.SINGLE_LINE_COMMENT,u.MULTILINE_COMMENT].includes(t.kind)}class ln{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class O{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 Q?kt(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 Q?Pt(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 me=(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))(me||{});class K extends O{constructor({body:e=[],eof:n},s){super(s,"<program>",[...e,n]),this.body=e,this.eof=n}}class y extends O{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 w||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 O{constructor({identifiers:e=[]},n){super(n,"<identifer-stream>",e||[]),this.identifiers=e}}class se extends O{constructor({name:e,colon:n,value:s},i){super(i,"<attribute>",[e,n,s]),this.name=e,this.value=s,this.colon=n}}class Z extends O{constructor({op:e,expression:n},s){super(s,"<prefix-expression>",[e,n]),this.op=e,this.expression=n}}class le extends O{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 We extends O{constructor({op:e,expression:n},s){super(s,"<postfix-expression>",[n,e]),this.op=e,this.expression=n}}class ue extends O{constructor({value:e},n){super(n,"<function-expression>",[e]),this.value=e}}class w extends O{constructor({callee:e,args:n=[]},s){super(s,"<function-application>",[e,...n]),this.callee=e,this.args=n}}class oe extends O{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 be extends O{constructor({op:e,partial:n},s){super(s,"<partial-injection>",[e,n]),this.partial=n}}class M extends O{constructor({listOpenBracket:e,elementList:n=[],commaList:s=[],listCloseBracket:i},a){super(a,"<list-expression>",[e,...St(n,s),i]),this.listOpenBracket=e,this.elementList=n,this.commaList=s,this.listCloseBracket=i}}class ce extends O{constructor({tupleOpenParen:e,elementList:n=[],commaList:s=[],tupleCloseParen:i},a){super(a,"<tuple-expression>",[e,...St(n,s),i]),this.tupleOpenParen=e,this.elementList=n,this.commaList=s,this.tupleCloseParen=i}}class et extends ce{constructor({groupOpenParen:e,expression:n,groupCloseParen:s},i){super({tupleOpenParen:e,elementList:n&&[n],commaList:[],tupleCloseParen:s},i),this.kind="<group-expression>"}}class ee extends O{constructor({callee:e,argumentList:n},s){super(s,"<call-expression>",[e,n]),this.callee=e,this.argumentList=n}}class ye extends O{constructor({literal:e},n){super(n,"<literal>",[e]),this.literal=e}}class re extends O{constructor({variable:e},n){super(n,"<variable>",[e]),this.variable=e}}class j extends O{constructor({expression:e},n){super(n,"<primary-expression>",[e]),this.expression=e}}class Me extends O{constructor({pre:e},n){const s=Q.create(u.SPACE,e.endPos,e.endPos," ",!1);super(n,"<dummy>",[s])}}class Ie extends O{constructor({expression:e,indexer:n},s){super(s,"<array>",[e,n]),this.array=e,this.indexer=n}}function St(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?L.flatten(L.zip(t,e)):L.flatten(L.zip(e,t))).filter(i=>i!==null)}function cn(t,e=!1){return JSON.stringify(t,function(n,s){var i;return!(this instanceof K)&&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 U{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 U(e(this.value))}isOk(){return!0}}class k{constructor(){this.value=void 0}unwrap(){throw new Error("Trying to unwrap a None value")}unwrap_or(e){return e}and_then(e){return new k}map(e){return new k}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 Ve(t){return`Table:${t}`}function qe(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 un(t){return`Note:${t}`}function rt(t){return`TablePartial:${t}`}function Dt(t){return`TablePartialInjection:${t}`}function Fe(t,e){switch(e){case"Column":return qe(t);case"Enum":return nt(t);case"Enum field":return st(t);case"Schema":return tt(t);case"Table":return Ve(t);case"TableGroup":return it(t);case"TableGroup field":return at(t);case"TablePartial":return rt(t);default:throw new Error("Unreachable")}}function ie(t){const[e,n]=t.split(":");return Object.values(m).includes(e)?new U({name:n,kind:e}):new k}function hn(t){const e=ie(t).unwrap_or(void 0);if(!e)return!1;const{kind:n,name:s}=e;return n==="Schema"&&s==="public"}function fn(t){const e=ie(t).unwrap_or(void 0);if(!e)return!1;const{kind:n}=e;return n==="TablePartialInjection"}function pn(t){const e=ie(t).unwrap_or(void 0);if(!e)return null;const{kind:n,name:s}=e;return n==="TablePartialInjection"?Fe(s,"TablePartial"):null}class dn{constructor(){this.id=0}reset(){this.id=0}nextId(){return this.id++}}class Ot{constructor({symbolTable:e},n){this.references=[],this.id=n,this.symbolTable=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 xt{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class ot{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class Tn{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class mn{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class bn{constructor({symbolTable:e,declaration:n},s){this.references=[],this.id=s,this.symbolTable=e,this.declaration=n}}class In{constructor({declaration:e},n){this.references=[],this.id=n,this.declaration=e}}class Ln{constructor({injectorFieldSymbol:e,injectorDeclaration:n},s){this.references=[],this.id=s,this.injectorDeclaration=n,this.injectorFieldSymbol=e}}function An(t){return[tt,Ve,nt,it,qe,st,at,rt,Dt].map(e=>e(t))}function _n(t){return t instanceof ot?Ln:null}function Ye(t){return!!t.match(/(\p{L}|_|\p{M})/gu)}function Ge(t){const[e]=t;return e>="0"&&e<="9"}function gn(t){const[e]=t;return Ge(e)||Ye(e)&&e.toLowerCase()>="a"&&e.toLowerCase()<="f"}function ve(t){return Ye(t)||Ge(t)}function Et(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 Se(t,e){return t>=e.start&&t<e.end}function Rt(t){var e;return t instanceof Z?`${(e=t.op)==null?void 0:e.value}${Rt(t.expression)}`:t.expression.literal.value}function Ke(t){var e;return t instanceof Z?((e=t.op)==null?void 0:e.value)==="-"?-Ke(t.expression):Ke(t.expression):Number.parseFloat(t.expression.literal.value)}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.INVALID_TABLE_PARTIAL_CONTEXT=3060]="INVALID_TABLE_PARTIAL_CONTEXT",t[t.INVALID_TABLE_PARTIAL_ELEMENT_NAME=3061]="INVALID_TABLE_PARTIAL_ELEMENT_NAME",t[t.INVALID_TABLE_PARTIAL_SETTING=3062]="INVALID_TABLE_PARTIAL_SETTING",t[t.DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME=3063]="DUPLICATE_TABLE_PARTIAL_ELEMENT_NAME",t[t.DUPLICATE_TABLE_PARTIAL_SETTING=3064]="DUPLICATE_TABLE_PARTIAL_SETTING",t[t.INVALID_TABLE_PARTIAL_INJECTION=3065]="INVALID_TABLE_PARTIAL_INJECTION",t[t.INVALID_TABLE_PARTIAL_INJECTION_OP=3066]="INVALID_TABLE_PARTIAL_INJECTION_OP",t[t.INVALID_TABLE_PARTIAL_INJECTION_NAME=3067]="INVALID_TABLE_PARTIAL_INJECTION_NAME",t[t.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME=3068]="DUPLICATE_TABLE_PARTIAL_INJECTION_NAME",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 J{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 J(n.value,s)}map(e){return new J(e(this.value),this.errors)}}function vn(t,e,n){if(!t||!Ne(t)||e.length===0)return new k;const s=[...e],i=Nt(t).unwrap(),a=s.pop();if(!(a instanceof oe))return new k;const r=L.last(s)instanceof M?s.pop():void 0;if(s.length===3){const c=Nt(s[1]).value;return!c||!Ze(c)?new k:new U(n.create(y,{type:i,name:s[0],as:c,alias:s[2],attributeList:r,body:a}))}return s.length===1?new U(n.create(y,{type:i,name:s[0],attributeList:r,body:a})):s.length===0?new U(n.create(y,{type:i,attributeList:r,body:a})):new k}function Ze(t){return t.kind===u.IDENTIFIER&&t.value==="as"}function b(t){t&&(t instanceof Q?wn(t):yn(t))}function wn(t){t.kind!==u.EOF&&(t.isInvalid=!0)}function yn(t){if(t instanceof y)b(t.type),b(t.name),b(t.as),b(t.alias),b(t.bodyColon),b(t.attributeList),b(t.body);else if(t instanceof ne)t.identifiers.forEach(b);else if(t instanceof se)b(t.name),b(t.colon),b(t.value);else if(t instanceof Z)b(t.op),b(t.expression);else if(t instanceof le)b(t.leftExpression),b(t.op),b(t.rightExpression);else if(t instanceof We)b(t.op),b(t.expression);else if(t instanceof oe)b(t.blockOpenBrace),t.body.forEach(b),b(t.blockCloseBrace);else if(t instanceof M)b(t.listOpenBracket),t.commaList.forEach(b),t.elementList.forEach(b),b(t.listCloseBracket);else if(t instanceof ce)b(t.tupleOpenParen),t.commaList.forEach(b),t.elementList.forEach(b),b(t.tupleCloseParen);else if(t instanceof ee)b(t.callee),b(t.argumentList);else if(t instanceof w)b(t.callee),t.args.forEach(b);else if(t instanceof j)b(t.expression);else if(t instanceof ue)b(t.value);else if(t instanceof re)b(t.variable);else if(t instanceof ye)b(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 C(...t){return t.filter(e=>e!==void 0)}function Pn(t){if(t instanceof K)return C(...t.body,t.eof);if(t instanceof y)return C(t.type,t.name,t.as,t.alias,t.attributeList,t.bodyColon,t.body);if(t instanceof se)return C(t.name,t.colon,t.value);if(t instanceof ne)return t.identifiers;if(t instanceof ye)return t.literal?[t.literal]:[];if(t instanceof re)return C(t.variable);if(t instanceof Z)return C(t.op,t.expression);if(t instanceof le)return C(t.leftExpression,t.op,t.rightExpression);if(t instanceof We)return C(t.expression,t.op);if(t instanceof ue)return C(t.value);if(t instanceof w)return C(t.callee,...t.args);if(t instanceof oe)return C(t.blockOpenBrace,...t.body,t.blockCloseBrace);if(t instanceof M)return C(t.listOpenBracket,...Et(t.elementList,t.commaList),t.listCloseBracket);if(t instanceof ce)return C(t.tupleOpenParen,...Et(t.elementList,t.commaList),t.tupleCloseParen);if(t instanceof ee)return C(t.callee,t.argumentList);if(t instanceof j)return C(t.expression);if(t instanceof Ie)return C(t.array,t.indexer);if(t instanceof be)return C(t.partial);throw t instanceof et?new Error("This case is already handled by TupleExpressionNode"):new Error("Unreachable - no other possible cases")}function Nt(t){return $(t)?new U(t.expression.variable):new k}function q(t){var e;return t instanceof j&&(t.expression instanceof re&&t.expression.variable instanceof Q&&t.expression.variable.kind===u.QUOTED_STRING||t.expression instanceof ye&&((e=t.expression.literal)==null?void 0:e.kind)===u.STRING_LITERAL)}function $(t){return t instanceof j&&t.expression instanceof re&&t.expression.variable instanceof Q}function Ne(t){var e;return t instanceof j&&t.expression instanceof re&&((e=t.expression.variable)==null?void 0:e.kind)===u.IDENTIFIER}function lt(t){var e;return t instanceof le&&t.leftExpression instanceof O&&t.rightExpression instanceof O&&((e=t.op)==null?void 0:e.value)==="."}function we(t){if(t===void 0)return new k;const e=t.identifiers.map(n=>n.value).join(" ");return e===""?new k:new U(e)}class kn{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
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 Q.create(e,this.start,this.current,this.text.substring(this.start.offset,this.current.offset),n)}lex(){return this.scanTokens(),this.tokens.push(Q.create(u.EOF,this.start,this.current,"",!1)),this.gatherTrivia(),this.gatherInvalid(),new J(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
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.addToken(u.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(e);break;default:if(rn(e)){this.operator(e);break}if(Ye(e)){this.identifier();break}if(Ge(e)){this.numericLiteralOrIdentifier();break}this.addToken(u.OP,!0),this.errors.push(new l(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 a of this.tokens)an(a)?(n.push(a),a.kind===u.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
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(`
@@ -6,7 +6,7 @@
6
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()&&ve(this.peek());)this.advance();this.addToken(u.IDENTIFIER)}operator(e){switch(e){case"<":[">","="].includes(this.peek())&&this.advance();break;case">":this.peek()==="="&&this.advance();break;case"=":this.peek()==="="&&this.advance();break;case"!":this.peek()==="="&&this.advance();break}this.addToken(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&&!ve(this.peek()))return this.addToken(u.NUMERIC_LITERAL);if(!n&&!Ge(this.peek()))break;this.advance()}if(e>0){for(;!this.isAtEnd()&&(this.check(".")||ve(this.peek()));)this.advance();const n=this.createToken(u.NUMERIC_LITERAL,!0);this.tokens.push(n),this.errors.push(new l(o.UNKNOWN_TOKEN,"Invalid number",n))}else{for(;!this.isAtEnd()&&ve(this.peek());)this.advance();const n=this.createToken(u.IDENTIFIER,!1);this.tokens.push(n)}}colorLiteral(){for(;!this.isAtEnd()&&ve(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(`
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()||!ve(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`,Q.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 Be=(t=>(t[t.ListExpression=0]="ListExpression",t[t.GroupExpression=1]="GroupExpression",t[t.BlockExpression=2]="BlockExpression",t))(Be||{});class Sn{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 L.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(a=>[1,0].includes(a));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 Dn{constructor(e){this.generator=e}create(e,n){return new e(n,this.generator.nextId())}}class T{constructor(e,n,s){this.token=e,this.partialNode=n,this.handlerContext=s}}class On{constructor(e,n){this.current=0,this.errors=[],this.contextStack=new Sn,this.synchronizeProgram=()=>{const s=this.peek();s.kind!==u.EOF?b(this.advance()):(b(this.peek()),this.logError(s,o.UNEXPECTED_EOF,"Unexpected EOF"))},this.synchronizeElementDeclarationName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(Nt(s)||this.check(u.COLON,u.LBRACE,u.LBRACKET))break;b(s),this.advance()}},this.synchronizeElementDeclarationAlias=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COLON,u.LBRACE,u.LBRACKET))break;b(s),this.advance()}},this.blockExpression=this.contextStack.withContextDo(Be.BlockExpression,()=>{const s={body:[]},i=()=>this.nodeFactory.create(oe,s);try{this.consume("Expect an opening brace '{'",u.LBRACE),s.blockOpenBrace=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.blockOpenBrace=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeBlock()}for(;!this.isAtEnd()&&!this.check(u.RBRACE);)try{if(this.match(u.TILDE)){const a=this.previous(),r=this.variable(),c=this.nodeFactory.create(be,{op:a,partial:r});s.body.push(c)}else s.body.push(this.canBeField()?this.fieldDeclaration():this.expression())}catch(a){if(!(a instanceof T))throw a;if(s.body.push(a.partialNode),!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeBlock()}try{this.consume("Expect a closing brace '}'",u.RBRACE),s.blockCloseBrace=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.blockCloseBrace=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeBlock()}return i()}),this.synchronizeBlock=()=>{if(!this.check(u.RBRACE))for(b(this.advance());!this.isAtEnd();){const s=this.peek();if(this.check(u.RBRACE)||dt(this.previous(),s))break;b(s),this.advance()}},this.tupleExpression=this.contextStack.withContextDo(Be.GroupExpression,()=>{const s={elementList:[],commaList:[]},i=()=>this.nodeFactory.create(et,{groupOpenParen:s.tupleOpenParen,groupCloseParen:s.tupleCloseParen,expression:s.elementList[0]}),a=()=>this.nodeFactory.create(ce,s);try{this.consume("Expect an opening parenthesis '('",u.LPAREN),s.tupleOpenParen=this.previous()}catch(r){if(!(r instanceof T))throw r;if(s.tupleOpenParen=r.partialNode,!this.canHandle(r))throw new T(r.token,a(),r.handlerContext);this.synchronizeTuple()}if(!this.isAtEnd()&&!this.check(u.RPAREN))try{s.elementList.push(this.normalExpression())}catch(r){if(!(r instanceof T))throw r;if(s.elementList.push(r.partialNode),!this.canHandle(r))throw new T(r.token,i(),r.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(r){if(!(r instanceof T))throw r;if(r.partialNode instanceof O&&s.elementList.push(r.partialNode),!this.canHandle(r))throw new T(r.token,a(),r.handlerContext);this.synchronizeTuple()}try{this.consume("Expect a closing parenthesis ')'",u.RPAREN),s.tupleCloseParen=this.previous()}catch(r){if(!(r instanceof T))throw r;if(s.tupleCloseParen=r.partialNode,!this.canHandle(r))throw new T(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(u.RPAREN,u.COMMA))break;b(s),this.advance()}},this.listExpression=this.contextStack.withContextDo(Be.ListExpression,()=>{const s={elementList:[],commaList:[]},i=()=>this.nodeFactory.create(M,s);try{this.consume("Expect an opening bracket '['",u.LBRACKET),s.listOpenBracket=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.listOpenBracket=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeList()}if(!this.isAtEnd()&&!this.check(u.RBRACKET))try{s.elementList.push(this.attribute())}catch(a){if(!(a instanceof T))throw a;if(s.elementList.push(a.partialNode),!this.canHandle(a))throw new T(a.token,i(),a.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(a){if(!(a instanceof T))throw a;if(a.partialNode instanceof O&&s.elementList.push(a.partialNode),!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeList()}try{this.consume("Expect a closing bracket ']'",u.RBRACKET),s.listCloseBracket=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.listCloseBracket=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeList()}return i()}),this.synchronizeList=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET))break;b(s),this.advance()}},this.synchronizeAttributeName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET,u.COLON))break;b(s),this.advance()}},this.synchronizeAttributeValue=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET))break;b(s),this.advance()}},this.tokens=e,this.nodeFactory=new Dn(n)}isAtEnd(){return this.current>=this.tokens.length||this.tokens[this.current].kind===u.EOF}advance(){return this.isAtEnd()?L.last(this.tokens):this.tokens[this.current++]}peek(e=0){return e+this.current>=this.tokens.length?L.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 T(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}discardUntil(e,...n){if(this.isAtEnd()||!this.check(...n)){for(b(this.peek()),this.logError(this.advance(),o.UNEXPECTED_TOKEN,e);!this.isAtEnd()&&!this.check(...n);)b(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(K,{body:e,eof:n});return this.gatherInvalid(),new J({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 T))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",u.IDENTIFIER),e.type=this.previous()}catch(s){throw s instanceof T?(e.type=s.partialNode,new T(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 T))throw s;if(e.name=s.partialNode,!this.canHandle(s))throw new T(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationName()}if(Nt(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 T))throw s;if(e.alias=s.partialNode,!this.canHandle(s))throw new T(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationAlias()}try{e.attributeList=this.check(u.LBRACKET)?this.listExpression():void 0}catch(s){throw s instanceof T?(e.attributeList=s.partialNode,new T(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 y?(b(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 T?(e.body=s.partialNode,new T(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",u.IDENTIFIER),e.type=this.previous()}catch(s){throw s instanceof T?(e.type=s.partialNode,new T(s.token,n(),s.handlerContext)):s}try{this.consume("Expect a colon ':'",u.COLON),e.bodyColon=this.previous()}catch(s){throw s instanceof T?(e.bodyColon=s.partialNode,new T(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 T?(e.body=s.partialNode,new T(s.token,n(),s.handlerContext)):s}return this.nodeFactory.create(y,e)}expression(){const e={args:[]},n=()=>vn(e.callee,e.args,this.nodeFactory).unwrap_or(this.nodeFactory.create(w,e));try{e.callee=this.normalExpression()}catch(i){throw i instanceof T?(e.callee=i.partialNode,new T(i.token,n(),i.handlerContext)):i}if(this.shouldStopExpression())return n();let s=e.callee;for(;!this.shouldStopExpression();){Ke(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 T?(s=i.partialNode,e.args.push(s),new T(i.token,n(),i.handlerContext)):i}}return n()}shouldStopExpression(){if(this.isAtEnd()||yt(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}=Tt(s);if(i<e||dt(this.previous(),s)&&!this.contextStack.isWithinGroupExpressionContext()&&!this.contextStack.isWithinListExpressionContext())break;try{n=this.nodeFactory.create(ee,{callee:n,argumentList:this.tupleExpression()})}catch(a){throw a instanceof T?(n=this.nodeFactory.create(ee,{callee:n,argumentList:a.partialNode}),new T(a.token,n,a.handlerContext)):a}}else if(s.kind===u.LBRACKET){if(Ke(this.previous()))break;try{n=this.nodeFactory.create(Ie,{expression:n,indexer:this.listExpression()})}catch(i){throw i instanceof T?(n=this.nodeFactory.create(Ie,{expression:n,indexer:i.partialNode}),new T(i.token,n,i.handlerContext)):i}}else if(pt(s)){const i=s,a=Tt(i);if(a.left!==null){if(a.left<=e)break;this.advance(),n=this.nodeFactory.create(We,{expression:n,op:i})}else{const r=Rn(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 T?(n=this.nodeFactory.create(le,{leftExpression:n,op:i,rightExpression:c.partialNode}),new T(c.token,n,c.handlerContext)):c}}}else break}return n}leftExpression_bp(){let e;if(pt(this.peek())){const n={};n.op=this.peek();const s=Mn(n.op);if(s.right===null)throw this.logError(n.op,o.UNKNOWN_PREFIX_OP,`Unexpected '${n.op.value}' in an expression`),new T(n.op,this.nodeFactory.create(Me,{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 T?(n.expression=i.partialNode,new T(i.token,this.nodeFactory.create(Z,n),i.handlerContext)):i}e=this.nodeFactory.create(Z,n)}else if(e=this.extractOperand(),e instanceof Me)throw new T(this.peek(),this.nodeFactory.create(Me,{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(Me,{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 T?(e.value=n.partialNode,new T(n.token,this.nodeFactory.create(ue,e),n.handlerContext)):n}return this.nodeFactory.create(ue,e)}variable(){this.consume("Expect a variable",u.IDENTIFIER);const e=this.previous();return this.nodeFactory.create(re,{variable: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(j,{expression:this.nodeFactory.create(ye,{literal:this.previous()})});if(this.match(u.QUOTED_STRING,u.IDENTIFIER))return this.nodeFactory.create(j,{expression:this.nodeFactory.create(re,{variable:this.previous()})});throw this.logError(this.peek(),o.UNEXPECTED_TOKEN,"Expect a variable or literal"),new T(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(ne,{identifiers:[]})}else try{e.name=this.attributeName()}catch(n){if(!(n instanceof T))throw n;if(e.name=n.partialNode,!this.canHandle(n))throw new T(n.token,this.nodeFactory.create(se,e),n.handlerContext);this.synchronizeAttributeName()}return this.match(u.COLON)&&(e.colon=this.previous(),e.value=this.attributeValue()),this.nodeFactory.create(se,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 T)||!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 T?new T(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 xn={"+":{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 Rn(t){return xn[t.value]||{left:null,right:null}}const Un={"+":{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 Mn(t){return Un[t.value]||{left:null,right:null}}const Fn={"(":{left:14,right:null}};function Tt(t){return Fn[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.TablePartial="tablepartial",t))(I||{}),E=(t=>(t.Color="color",t.HeaderColor="headercolor",t.Note="note",t.PK="pk",t.PKey="primary key",t.Unique="unique",t.Ref="ref",t.NotNull="not null",t.Null="null",t.Increment="increment",t.Default="default",t.Name="name",t.Type="type",t.Update="update",t.Delete="delete",t))(E||{});function Le(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:case I.TablePartial:return new U(e);default:return new S}}function _e(t){if(!lt(t))return new U([t]);const e=_e(t.leftExpression).unwrap_or(void 0);return e?(e.push(t.rightExpression),new U(e)):new S}function Y(t){if(t===void 0)return new S;const e=_e(t).unwrap_or(void 0);if(!e)return new S;const n=[];for(const s of e){const i=W(s).unwrap_or(void 0);if(!i)return new S;n.push(i)}return new U(n)}function De(t){if(t===void 0)return new S;const e=_e(t).unwrap_or(void 0);if(!e||e.length===0)return new S;const n=[];let s;if(!$(L.last(e))){const i=e.pop();if(Gt(i))s=i.elementList.map(a=>X(a).unwrap());else return new S}for(const i of e){const a=W(i).unwrap_or(void 0);if(!a)return new S;n.push(a)}return new U({variables:n,tupleElements:s})}function W(t){return $(t)?new U(t.expression.variable.value):new S}function Ce(t){if(mt(t))return t instanceof ue?new U({functional:[t],nonFunctional:[]}):new U({functional:[],nonFunctional:[t]});if(t instanceof ce&&t.elementList.every(mt)){const e=t.elementList.filter(s=>s instanceof ue),n=t.elementList.filter($);return new U({functional:e,nonFunctional:n})}return new S}function X(t){var n;const e=(n=t==null?void 0:t.expression.variable)==null?void 0:n.value;return e===void 0?new S:new U(e)}function Bn(t){var n,s;const e=(s=(n=t==null?void 0:t.partial)==null?void 0:n.variable)==null?void 0:s.value;return e===void 0?new S:new U(e)}function V(t){return q(t)?t.expression instanceof re?new U(t.expression.variable.value):new U(t.expression.literal.value):new S}function Vn(t){var e;return!(t instanceof le)||!Ft((e=t.op)==null?void 0:e.value)?!1:De(t.leftExpression).and_then(()=>De(t.rightExpression)).unwrap_or(void 0)!==void 0}function Gn(t){const e=De(t.leftExpression),n=De(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 j&&t.expression instanceof re||t instanceof ue}function bt(t,e){var i,a,r,c;let n=e;const s=hn(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 K&&s)return n.symbol;if(n instanceof K)return;n=n.parent}}class Cn{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 K||Le(this.declarationNode.parent).unwrap_or(void 0)!==I.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 oe)return[new l(o.UNEXPECTED_COMPLEX_BODY,"A Custom element can only have an inline field",e)];const n=[];return q(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 Pe{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 Xn{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(En,{declaration:this.declarationNode,symbolTable:new Pe});const{name:n}=this.declarationNode,s=Y(n);if(s.isOk()){const i=s.unwrap(),a=i.pop(),r=He(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 w)return this.validateFields([e]);const[n,s]=L.partition(e.body,i=>i instanceof w);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&&!$(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 L.last(i)instanceof M?(s.push(...this.validateFieldSettings(L.last(i))),i.pop()):i[0]instanceof M&&(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=>{q(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=he(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}registerField(e){if(e.callee&&$(e.callee)){const n=X(e.callee).unwrap(),s=st(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_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 $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(){const e=new l(o.INVALID_INDEXES_CONTEXT,"An Indexes can only appear inside a Table or a TablePartial",this.declarationNode);if(this.declarationNode.parent instanceof K)return[e];const n=Le(this.declarationNode.parent).unwrap_or(void 0);return n&&[I.Table,I.TablePartial].includes(n)?[]:[e]}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 w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"An Indexes must have a complex body",e)];const[n,s]=L.partition(e.body,i=>i instanceof w);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 L.last(i)instanceof M&&s.push(...this.validateFieldSetting(i.pop())),i.forEach(a=>{for(;a instanceof ee;)a.argumentList&&!Ce(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;Ce(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=>{q(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=>{z(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=>{$(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=he(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class jn{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 K)&&![I.Table,I.TableGroup,I.TablePartial,I.Project].includes(Le(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 K))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=Y(e);if(!n.isOk())return[new l(o.INVALID_NAME,"Invalid name for sticky note ",this.declarationNode)];const i=n.unwrap().join("."),a=un(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 w)return this.validateFields([e]);const[n,s]=L.partition(e.body,i=>i instanceof w);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))),q(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=he(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 y?[new l(o.INVALID_PROJECT_CONTEXT,"A Project can only appear top-level",this.declarationNode)]:[]}validateName(e){return e?ke(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 w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A Project's body must be a block",e)];const[n,s]=L.partition(e.body,i=>i instanceof w);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=he(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class qn{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 K?[]:[new l(o.INVALID_REF_CONTEXT,"A Ref must appear top-level",this.declarationNode)]}validateName(e){return e?ke(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 w)return this.validateFields([e]);const[n,s]=L.partition(e.body,i=>i instanceof w);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&&!Vn(s.callee)&&n.push(new l(o.INVALID_REF_FIELD,"A Ref field must be a binary relationship",s.callee)),s.callee&&!Gn(s.callee)&&n.push(new l(o.UNEQUAL_FIELDS_BINARY_REF,"Unequal fields in ref endpoints",s.callee));const i=[...s.args];if(L.last(i)instanceof M){const a=this.validateFieldSettings(L.last(i));n.push(...a),i.pop()}else i[0]instanceof M&&(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=>{Yn(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=>{ze(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=he(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}function Yn(t){if(!($(t)&&t.expression.variable.kind!==u.QUOTED_STRING)&&!(t instanceof ne))return!1;let e;if(t instanceof ne?e=we(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 Hn{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 Ie?[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();return L.forIn(i,(a,r)=>{switch(r){case E.HeaderColor:a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_SETTING,"'headercolor' can only appear once",c))),a.forEach(c=>{ze(c.value)||s.push(new l(o.INVALID_TABLE_SETTING,"'headercolor' must be a color literal",c.value||c.name))});break;case E.Note:a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_SETTING,"'note' can only appear once",c))),a.forEach(c=>{q(c.value)||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)))}}),s}registerElement(){const e=[];this.declarationNode.symbol=this.symbolFactory.create(xt,{declaration:this.declarationNode,symbolTable:new Pe});const{name:n,alias:s}=this.declarationNode,i=Y(n);if(i.isOk()){const a=[...i.unwrap()],r=a.pop(),c=He(a,this.publicSymbolTable,this.symbolFactory),f=Ve(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&&ke(s)&&!zn(s.expression.variable.value,i.unwrap_or([]))){const a=X(s).unwrap(),r=Ve(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 w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A Table's body must be a block",e)];const[n,s,i]=e.body.reduce((a,r)=>(r instanceof w?a[0].push(r):r instanceof be?a[1].push(r):r instanceof y&&a[2].push(r),a),[[],[],[]]);return[...this.validateFields(n),...this.validateInjections(s),...this.validateSubElements(i)]}validateInjections(e){return e.flatMap(n=>this.registerInjection(n))}registerInjection(e){var c,f,p;if(!((f=(c=e.partial)==null?void 0:c.variable)!=null&&f.value))return[];const n=(p=e.partial.variable)==null?void 0:p.value,s=Dt(n),i=this.symbolFactory.create(In,{declaration:e});e.symbol=i;const a=this.declarationNode.symbol.symbolTable,r=a.get(s);return r?[new l(o.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${n}`,e),new l(o.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${n}`,r.declaration)]:(a.set(s,i),[])}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)),$(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]&&!Ct(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&&$(e.callee)){const n=X(e.callee).unwrap(),s=qe(n),i=this.symbolFactory.create(ot,{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(Ne)||!e.slice(-1).every(f=>Ne(f)||f instanceof M))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;L.last(e)instanceof M&&(n=e.pop());const s=F(n),i=s.getErrors(),a=s.getValue();e.forEach(f=>{const p=X(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[E.PK]||[],c=a[E.PKey]||[];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))),L.forIn(a,(f,p)=>{switch(p){case E.Note:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"note can only appear once",h))),f.forEach(h=>{q(h.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'note' must be a quoted string",h.value||h.name))});break;case E.Ref:f.forEach(h=>{Vt(h.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'ref' must be a valid unary relationship",h.value||h.name))});break;case E.PKey:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"primary key can only appear once",h))),f.forEach(h=>{z(h.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'primary key' must not have a value",h.value||h.name))});break;case E.PK:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"'pk' can only appear once",h))),f.forEach(h=>{h instanceof se&&!z(h.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'pk' must not have a value",h.value||h.name))});break;case E.NotNull:{f.length>1&&i.push(...f.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,"'not null' can only appear once",d)));const h=a[E.Null]||[];f.length>=1&&h.length>=1&&i.push(...[...f,...h].map(d=>new l(o.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",d))),f.forEach(d=>{z(d.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'not null' must not have a value",d.value||d.name))});break}case E.Null:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"'null' can only appear once",h))),f.forEach(h=>{z(h.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'null' must not have a value",h.value||h.name))});break;case E.Unique:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"'unique' can only appear once",h))),f.forEach(h=>{h instanceof se&&!z(h.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'unique' must not have a value",h.value||h.name))});break;case E.Increment:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"'increment' can only appear once",h))),f.forEach(h=>{h instanceof se&&!z(h.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'increment' must not have a value",h.value||h.name))});break;case E.Default:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_TABLE_SETTING,"'default' can only appear once",h))),f.forEach(h=>{Bt(h.value)||i.push(new l(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 l(o.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${p}'`,h)))}}),i}validateSubElements(e){const n=e.flatMap(i=>{if(i.parent=this.declarationNode,!i.type)return[];const a=he(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 zn(t,e){return e.length===1&&t===e[0]}class Qn{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?ke(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(Tn,{declaration:this.declarationNode,symbolTable:new Pe});const n=Y(e);if(n.isOk()){const s=n.unwrap(),i=s.pop(),a=He(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 L.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=>{ze(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=>!q(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 w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A TableGroup's body must be a block",e)];const[n,s]=L.partition(e.body,i=>i instanceof w);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.flatMap(n=>{const s=[];return n.callee&&!Y(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=he(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&&$(e.callee)){const n=X(e.callee).unwrap(),s=at(n),i=this.symbolFactory.create(mn,{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 Jn=["-","+"];class Kn{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?ke(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 L.forIn(i,(a,r)=>{switch(r){case E.HeaderColor:a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_PARTIAL_SETTING,`'${r}' can only appear once`,c))),a.forEach(c=>{ze(c.value)||s.push(new l(o.INVALID_TABLE_PARTIAL_SETTING,`'${r}' must be a color literal`,c.value||c.name))});break;case E.Note:a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_PARTIAL_SETTING,`'${r}' can only appear once`,c))),a.forEach(c=>{q(c.value)||s.push(new l(o.INVALID_TABLE_PARTIAL_SETTING,`'${r}' 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(bn,{declaration:this.declarationNode,symbolTable:new Pe});const n=Y(e);if(!n.isOk())return[];const s=n.unwrap(),i=s.pop(),a=He(s,this.publicSymbolTable,this.symbolFactory),r=rt(i);return a.has(r)?[new l(o.DUPLICATE_NAME,`TablePartial name '${i}' already exists`,e)]:(a.set(r,this.declarationNode.symbol),[])}validateBody(e){if(!e)return[];if(e instanceof w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A TablePartial's body must be a block",e)];const[n,s]=L.partition(e.body,i=>i instanceof w);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)),$(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]&&!Ct(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),...this.registerField(n)),s})}registerField(e){if(!e.callee||!$(e.callee))return[];const n=X(e.callee).unwrap(),s=qe(n),i=this.symbolFactory.create(ot,{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)]}return a.set(s,i),[]}validateFieldSetting(e){const n=L.last(e);if(!e.slice(0,-1).every(Ne)||!(Ne(n)||n instanceof M))return[...e.map(p=>new l(o.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",p))];if(e.length===0)return[];let s;L.last(e)instanceof M&&(s=e.pop());const i=F(s),a=i.getErrors(),r=i.getValue();e.forEach(p=>{const h=X(p).unwrap_or("").toLowerCase();if(h!==E.PK&&h!==E.Unique){a.push(new l(o.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",p));return}r[h]===void 0?r[h]=[p]:r[h].push(p)});const c=r[E.PK]||[],f=r[E.PKey]||[];return c.length>=1&&f.length>=1&&a.push(...[...c,...f].map(p=>new l(o.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",p))),L.forIn(r,(p,h)=>{switch(h){case E.Note:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{q(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a quoted string`,d.value||d.name))});break;case E.Ref:p.forEach(d=>{Vt(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a valid unary relationship`,d.value||d.name))});break;case E.PKey:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{z(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.PK:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof se&&!z(d.value)&&a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.NotNull:{p.length>1&&a.push(...p.map(N=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,N)));const d=r[E.Null]||[];p.length>=1&&d.length>=1&&a.push(...[...p,...d].map(N=>new l(o.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",N))),p.forEach(N=>{z(N.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,N.value||N.name))});break}case E.Null:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{z(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Unique:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof se&&!z(d.value)&&a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Increment:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof se&&!z(d.value)&&a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Default:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{Bt(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a string literal, number literal, function expression, true, false or null`,d.value||d.name))});break;default:p.forEach(d=>a.push(new l(o.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${h}'`,d)))}}),a}validateSubElements(e){const n=e.flatMap(i=>{if(i.parent=this.declarationNode,!i.type)return[];const a=he(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())===I.Note});return s.length>1&&n.push(...s.map(i=>new l(o.NOTE_REDEFINED,"Duplicate notes are defined",i))),n}}function he(t){switch(t.type.value.toLowerCase()){case I.Enum:return Xn;case I.Table:return Hn;case I.TableGroup:return Qn;case I.Project:return Wn;case I.Ref:return qn;case I.Note:return jn;case I.Indexes:return $n;case I.TablePartial:return Kn;default:return Cn}}function Mt(t){return!!Y(t).unwrap_or(!1)}function Zn(t){return ke(t)}function ke(t){return t instanceof j&&t.expression instanceof re}function He(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 Pe;const f=n.create(Ot,{symbolTable:r});s.set(c,f)}s=r}return s}function Ft(t){return t==="-"||t==="<>"||t===">"||t==="<"}function ze(t){var n;if(!(t instanceof j)||!(t.expression instanceof ye)||((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(!gn(e[s]))return!1;return!0}function z(t){return t===void 0}function Bt(t){var e;return!!(q(t)||Ae(t)||Ne(t)&&["true","false","null"].includes(t.expression.variable.value.toLowerCase())||t instanceof Z&&Jn.includes((e=t.op)==null?void 0:e.value)&&Ae(t.expression)||t instanceof ue)}function Ae(t){var e,n,s;return t instanceof Z?((e=t.op)==null?void 0:e.value)!=="-"&&((n=t.op)==null?void 0:n.value)!=="+"?!1:Ae(t.expression):t instanceof j&&t.expression instanceof ye&&((s=t.expression.literal)==null?void 0:s.kind)===u.NUMERIC_LITERAL}function Vt(t){var n;if(!(t instanceof Z)||!Ft((n=t.op)==null?void 0:n.value))return!1;const e=Y(t.expression).unwrap_or(void 0);return e!==void 0&&e.length>0}function Gt(t){return t instanceof ce&&t.elementList.every($)}function Ct(t){if(!(t instanceof ee||lt(t)||t instanceof j||t instanceof Ie))return!1;if(t instanceof ee){if(t.callee===void 0||t.argumentList===void 0||!t.argumentList.elementList.every(n=>Ae(n)||q(n)||Ne(n)))return!1;t=t.callee}for(;t instanceof Ie;){if(t.array===void 0||t.indexer===void 0||!t.indexer.elementList.every(n=>!n.colon&&!n.value&&Ae(n.name)))return!1;t=t.array}const e=Y(t).unwrap_or(void 0);return e!==void 0&&e.length>0}function F(t){var s;const e={},n=[];if(!t)return new J({});for(const i of t.elementList){if(!i.name)continue;if(i.name instanceof j){n.push(new l(o.INVALID_SETTINGS,"A setting name must be a stream of identifiers",i.name));continue}const a=(s=we(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 J(e,n)}class It{constructor(e,n){this.ast=e,this.symbolFactory=n,this.publicSchemaSymbol=this.symbolFactory.create(Ot,{symbolTable:new Pe}),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=he(s),a=new i(s,this.publicSchemaSymbol.symbolTable,this.symbolFactory);e.push(...a.validate())});const n=this.ast.body.filter(s=>Le(s).unwrap_or(void 0)===I.Project);return n.length>1&&n.forEach(s=>e.push(new l(o.PROJECT_REDEFINED,"Only one project can exist",s))),new J(this.ast,e)}}class fe{constructor(e,n){this.declarationNode=e,this.errors=n}bind(){this.bindSettingList(this.declarationNode.attributeList,this.settingList),this.bindBody()}bindSettingList(e,n){e&&e.elementList.forEach(s=>{if(s.name instanceof j)return;const i=we(s.name).unwrap_or(void 0);if(!i)return;const a=n[i.toLowerCase()];a!=null&&a.shouldBind&&this.scanAndBind(s.value,a)})}bindBody(){const e=this.declarationNode;if(!e.body)return;const{body:n}=e;n instanceof oe?n.body.forEach(s=>{if(s instanceof y){if(!s.type||Le(this.declarationNode).unwrap_or(null)===I.TablePartial&&Le(s).unwrap_or(null)===I.Indexes)return;const i=Xt(s);new i(s,this.errors).bind()}else s instanceof w?this.bindSubfield(s):this.bindPartialInjection(s)}):this.bindSubfield(n)}bindSubfield(e){const n=[e.callee,...e.args],s=L.last(n);s instanceof M&&(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.injectionBinderRule)!=null&&n.shouldBind&&this.scanAndBind(e,this.injectionBinderRule)}scanAndBind(e,n){var s,i;if(e)if(e instanceof j){if(e.expression instanceof re&&((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?lt(e)?this.bindFragments(_e(e).unwrap_or([]),n):(this.scanAndBind(e.leftExpression,n),this.scanAndBind(e.rightExpression,n)):e instanceof Z?this.scanAndBind(e.expression,n):e instanceof We?this.scanAndBind(e.expression,n):e instanceof ce?e.elementList.forEach(a=>this.scanAndBind(a,n)):e instanceof be&&this.bindFragments([e],n)}bindFragments(e,n){if(e.length===0)return;const s=e.length===1&&e[0]instanceof be,i=[...n.topSubnamesSymbolKind],{remainingSubnamesSymbolKind:a}=n,r=s?-1:e.findIndex(N=>!$(N)),f=r!==-1&&Gt(e[r])?e[r]:void 0,p=r>=0?i.pop():void 0,h=e.slice(0,r===-1?void 0:r);if(h.length===0)return;const d=[];for(;i.length&&h.length;){const N=i.pop(),A=h.pop(),v=X(A).unwrap();d.unshift({index:Fe(v,N),referrer:A})}for(;h.length;){const N=h.pop(),A=s?Bn(N).unwrap():X(N).unwrap();d.unshift({index:Fe(A,a),referrer:N})}return f?f.elementList.forEach(N=>this.resolveIndexStack([...d,{index:Fe(X(N).unwrap(),p),referrer:N}],n.ignoreNameNotFound)):this.resolveIndexStack(d,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=bt(s.index,this.declarationNode);if(a===void 0){const{kind:p,name:h}=ie(s.index).unwrap();this.logError(s.referrer,`Can not find ${p} '${h}'`,n);return}a.references.push(s.referrer),s.referrer.referee=a;let r=a.symbolTable,{kind:c,name:f}=ie(s.index).unwrap();for(const p of i){const{kind:h,name:d}=ie(p.index).unwrap(),N=r.get(p.index);if(!N){this.logError(p.referrer,`${c} '${f}' does not have ${h} '${d}'`,n);return}if(c=h,f=d,p.referrer.referee=N,N.references.push(p.referrer),!N.symbolTable)break;r=N.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 p,h;if(!fn(r))return;const c=bt(pn(r),this.declarationNode),f=(h=(p=c==null?void 0:c.declaration)==null?void 0:p.symbol)==null?void 0:h.symbolTable;f&&f.forEach((d,N)=>{n.has(N)||s.set(N,{injectorFieldSymbol:d,injectorDeclaration:a.declaration})})}),s.forEach((a,r)=>{const c=_n(a.injectorFieldSymbol);if(!c)return;const f=e.create(c,a);n.set(r,f)})}}class es extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class ts extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class ns extends fe{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 ss extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class is extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class as extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class rs extends fe{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={},this.injectionBinderRule={shouldBind:!0,topSubnamesSymbolKind:[],remainingSubnamesSymbolKind:m.TablePartial,ignoreNameNotFound:!1}}}class os extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class ls extends fe{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 Xt(t){switch(t.type.value.toLowerCase()){case I.Enum:return ts;case I.Table:return rs;case I.TableGroup:return os;case I.Project:return is;case I.Ref:return as;case I.Note:return ss;case I.Indexes:return ns;case I.TablePartial:return ls;default:return es}}class cs{constructor(e){this.ast=e,this.errors=[]}resolve(e){return this.ast.body.map(n=>{if(!n.type)return null;const s=Xt(n),i=new s(n,this.errors);return i.resolveInjections(e),i}).forEach(n=>n==null?void 0:n.bind()),new J(this.ast,this.errors)}}class us{constructor(e){this.generator=e}create(e,n){return new e(n,this.generator.nextId())}}class hs{constructor(e,n){this.ast=e,this.symbolFactory=new us(n)}analyze(){return new It(this.ast,this.symbolFactory).validate().chain(n=>new cs(n).resolve(this.symbolFactory))}validate(){return new It(this.ast,this.symbolFactory).validate().chain(n=>new J(n,[]))}}function Lt(t,e){const{variables:n,tupleElements:s}=De(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 $t(t){switch(t){case"<":return["1","*"];case"<>":return["*","*"];case">":return["*","1"];case"-":return["1","1"];default:throw new Error("Invalid relation op")}}function g(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 Xe(t){var n;const e=(n=_e(t).unwrap_or(void 0))==null?void 0:n.pop();return e instanceof ce?e.elementList.map(s=>s.referee):[e.referee]}function ge(t){const e=Y(t).unwrap();return{name:e.pop(),schemaName:e}}function xe(t){return t.expression.literal.value}function jt(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 ct(t,e){if(Array.isArray(t)){const i=t.map(({id:r})=>r).sort(),a=e.map(({id:r})=>r).sort();return L.zip(i,a).every(([r,c])=>r===c)}const n=t.id,s=e.id;return n===s}function ae(t){const e=t.split(`
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()||!ve(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`,Q.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 Be=(t=>(t[t.ListExpression=0]="ListExpression",t[t.GroupExpression=1]="GroupExpression",t[t.BlockExpression=2]="BlockExpression",t))(Be||{});class Sn{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 L.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(a=>[1,0].includes(a));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 Dn{constructor(e){this.generator=e}create(e,n){return new e(n,this.generator.nextId())}}class T{constructor(e,n,s){this.token=e,this.partialNode=n,this.handlerContext=s}}class On{constructor(e,n){this.current=0,this.errors=[],this.contextStack=new Sn,this.synchronizeProgram=()=>{const s=this.peek();s.kind!==u.EOF?b(this.advance()):(b(this.peek()),this.logError(s,o.UNEXPECTED_EOF,"Unexpected EOF"))},this.synchronizeElementDeclarationName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(Ze(s)||this.check(u.COLON,u.LBRACE,u.LBRACKET))break;b(s),this.advance()}},this.synchronizeElementDeclarationAlias=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COLON,u.LBRACE,u.LBRACKET))break;b(s),this.advance()}},this.blockExpression=this.contextStack.withContextDo(Be.BlockExpression,()=>{const s={body:[]},i=()=>this.nodeFactory.create(oe,s);try{this.consume("Expect an opening brace '{'",u.LBRACE),s.blockOpenBrace=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.blockOpenBrace=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeBlock()}for(;!this.isAtEnd()&&!this.check(u.RBRACE);)try{if(this.match(u.TILDE)){const a=this.previous(),r=this.variable(),c=this.nodeFactory.create(be,{op:a,partial:r});s.body.push(c)}else s.body.push(this.canBeField()?this.fieldDeclaration():this.expression())}catch(a){if(!(a instanceof T))throw a;if(s.body.push(a.partialNode),!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeBlock()}try{this.consume("Expect a closing brace '}'",u.RBRACE),s.blockCloseBrace=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.blockCloseBrace=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeBlock()}return i()}),this.synchronizeBlock=()=>{if(!this.check(u.RBRACE))for(b(this.advance());!this.isAtEnd();){const s=this.peek();if(this.check(u.RBRACE)||dt(this.previous(),s))break;b(s),this.advance()}},this.tupleExpression=this.contextStack.withContextDo(Be.GroupExpression,()=>{const s={elementList:[],commaList:[]},i=()=>this.nodeFactory.create(et,{groupOpenParen:s.tupleOpenParen,groupCloseParen:s.tupleCloseParen,expression:s.elementList[0]}),a=()=>this.nodeFactory.create(ce,s);try{this.consume("Expect an opening parenthesis '('",u.LPAREN),s.tupleOpenParen=this.previous()}catch(r){if(!(r instanceof T))throw r;if(s.tupleOpenParen=r.partialNode,!this.canHandle(r))throw new T(r.token,a(),r.handlerContext);this.synchronizeTuple()}if(!this.isAtEnd()&&!this.check(u.RPAREN))try{s.elementList.push(this.normalExpression())}catch(r){if(!(r instanceof T))throw r;if(s.elementList.push(r.partialNode),!this.canHandle(r))throw new T(r.token,i(),r.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(r){if(!(r instanceof T))throw r;if(r.partialNode instanceof O&&s.elementList.push(r.partialNode),!this.canHandle(r))throw new T(r.token,a(),r.handlerContext);this.synchronizeTuple()}try{this.consume("Expect a closing parenthesis ')'",u.RPAREN),s.tupleCloseParen=this.previous()}catch(r){if(!(r instanceof T))throw r;if(s.tupleCloseParen=r.partialNode,!this.canHandle(r))throw new T(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(u.RPAREN,u.COMMA))break;b(s),this.advance()}},this.listExpression=this.contextStack.withContextDo(Be.ListExpression,()=>{const s={elementList:[],commaList:[]},i=()=>this.nodeFactory.create(M,s);try{this.consume("Expect an opening bracket '['",u.LBRACKET),s.listOpenBracket=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.listOpenBracket=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeList()}if(!this.isAtEnd()&&!this.check(u.RBRACKET))try{s.elementList.push(this.attribute())}catch(a){if(!(a instanceof T))throw a;if(s.elementList.push(a.partialNode),!this.canHandle(a))throw new T(a.token,i(),a.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(a){if(!(a instanceof T))throw a;if(a.partialNode instanceof O&&s.elementList.push(a.partialNode),!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeList()}try{this.consume("Expect a closing bracket ']'",u.RBRACKET),s.listCloseBracket=this.previous()}catch(a){if(!(a instanceof T))throw a;if(s.listCloseBracket=a.partialNode,!this.canHandle(a))throw new T(a.token,i(),a.handlerContext);this.synchronizeList()}return i()}),this.synchronizeList=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET))break;b(s),this.advance()}},this.synchronizeAttributeName=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET,u.COLON))break;b(s),this.advance()}},this.synchronizeAttributeValue=()=>{for(;!this.isAtEnd();){const s=this.peek();if(this.check(u.COMMA,u.RBRACKET))break;b(s),this.advance()}},this.tokens=e,this.nodeFactory=new Dn(n)}isAtEnd(){return this.current>=this.tokens.length||this.tokens[this.current].kind===u.EOF}advance(){return this.isAtEnd()?L.last(this.tokens):this.tokens[this.current++]}peek(e=0){return e+this.current>=this.tokens.length?L.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 T(this.peek(),void 0,this.contextStack.findHandlerContext(this.tokens,this.current))}discardUntil(e,...n){if(this.isAtEnd()||!this.check(...n)){for(b(this.peek()),this.logError(this.advance(),o.UNEXPECTED_TOKEN,e);!this.isAtEnd()&&!this.check(...n);)b(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(K,{body:e,eof:n});return this.gatherInvalid(),new J({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 T))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",u.IDENTIFIER),e.type=this.previous()}catch(s){throw s instanceof T?(e.type=s.partialNode,new T(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 T))throw s;if(e.name=s.partialNode,!this.canHandle(s))throw new T(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationName()}if(Ze(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 T))throw s;if(e.alias=s.partialNode,!this.canHandle(s))throw new T(s.token,n(),s.handlerContext);this.synchronizeElementDeclarationAlias()}try{e.attributeList=this.check(u.LBRACKET)?this.listExpression():void 0}catch(s){throw s instanceof T?(e.attributeList=s.partialNode,new T(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 y?(b(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 T?(e.body=s.partialNode,new T(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",u.IDENTIFIER),e.type=this.previous()}catch(s){throw s instanceof T?(e.type=s.partialNode,new T(s.token,n(),s.handlerContext)):s}try{this.consume("Expect a colon ':'",u.COLON),e.bodyColon=this.previous()}catch(s){throw s instanceof T?(e.bodyColon=s.partialNode,new T(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 T?(e.body=s.partialNode,new T(s.token,n(),s.handlerContext)):s}return this.nodeFactory.create(y,e)}expression(){const e={args:[]},n=()=>vn(e.callee,e.args,this.nodeFactory).unwrap_or(this.nodeFactory.create(w,e));try{e.callee=this.normalExpression()}catch(i){throw i instanceof T?(e.callee=i.partialNode,new T(i.token,n(),i.handlerContext)):i}if(this.shouldStopExpression())return n();let s=e.callee;for(;!this.shouldStopExpression();){Je(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 T?(s=i.partialNode,e.args.push(s),new T(i.token,n(),i.handlerContext)):i}}return n()}shouldStopExpression(){if(this.isAtEnd()||yt(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}=Tt(s);if(i<e||dt(this.previous(),s)&&!this.contextStack.isWithinGroupExpressionContext()&&!this.contextStack.isWithinListExpressionContext())break;try{n=this.nodeFactory.create(ee,{callee:n,argumentList:this.tupleExpression()})}catch(a){throw a instanceof T?(n=this.nodeFactory.create(ee,{callee:n,argumentList:a.partialNode}),new T(a.token,n,a.handlerContext)):a}}else if(s.kind===u.LBRACKET){if(Je(this.previous()))break;try{n=this.nodeFactory.create(Ie,{expression:n,indexer:this.listExpression()})}catch(i){throw i instanceof T?(n=this.nodeFactory.create(Ie,{expression:n,indexer:i.partialNode}),new T(i.token,n,i.handlerContext)):i}}else if(pt(s)){const i=s,a=Tt(i);if(a.left!==null){if(a.left<=e)break;this.advance(),n=this.nodeFactory.create(We,{expression:n,op:i})}else{const r=Rn(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 T?(n=this.nodeFactory.create(le,{leftExpression:n,op:i,rightExpression:c.partialNode}),new T(c.token,n,c.handlerContext)):c}}}else break}return n}leftExpression_bp(){let e;if(pt(this.peek())){const n={};n.op=this.peek();const s=Mn(n.op);if(s.right===null)throw this.logError(n.op,o.UNKNOWN_PREFIX_OP,`Unexpected '${n.op.value}' in an expression`),new T(n.op,this.nodeFactory.create(Me,{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 T?(n.expression=i.partialNode,new T(i.token,this.nodeFactory.create(Z,n),i.handlerContext)):i}e=this.nodeFactory.create(Z,n)}else if(e=this.extractOperand(),e instanceof Me)throw new T(this.peek(),this.nodeFactory.create(Me,{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(Me,{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 T?(e.value=n.partialNode,new T(n.token,this.nodeFactory.create(ue,e),n.handlerContext)):n}return this.nodeFactory.create(ue,e)}variable(){this.consume("Expect a variable",u.IDENTIFIER);const e=this.previous();return this.nodeFactory.create(re,{variable: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(j,{expression:this.nodeFactory.create(ye,{literal:this.previous()})});if(this.match(u.QUOTED_STRING,u.IDENTIFIER))return this.nodeFactory.create(j,{expression:this.nodeFactory.create(re,{variable:this.previous()})});throw this.logError(this.peek(),o.UNEXPECTED_TOKEN,"Expect a variable or literal"),new T(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(ne,{identifiers:[]})}else try{e.name=this.attributeName()}catch(n){if(!(n instanceof T))throw n;if(e.name=n.partialNode,!this.canHandle(n))throw new T(n.token,this.nodeFactory.create(se,e),n.handlerContext);this.synchronizeAttributeName()}return this.match(u.COLON)&&(e.colon=this.previous(),e.value=this.attributeValue()),this.nodeFactory.create(se,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 T)||!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 T?new T(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 xn={"+":{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 Rn(t){return xn[t.value]||{left:null,right:null}}const Un={"+":{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 Mn(t){return Un[t.value]||{left:null,right:null}}const Fn={"(":{left:14,right:null}};function Tt(t){return Fn[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.TablePartial="tablepartial",t))(I||{}),E=(t=>(t.Color="color",t.HeaderColor="headercolor",t.Note="note",t.PK="pk",t.PKey="primary key",t.Unique="unique",t.Ref="ref",t.NotNull="not null",t.Null="null",t.Increment="increment",t.Default="default",t.Name="name",t.Type="type",t.Update="update",t.Delete="delete",t))(E||{});function Le(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:case I.TablePartial:return new U(e);default:return new k}}function _e(t){if(!lt(t))return new U([t]);const e=_e(t.leftExpression).unwrap_or(void 0);return e?(e.push(t.rightExpression),new U(e)):new k}function Y(t){if(t===void 0)return new k;const e=_e(t).unwrap_or(void 0);if(!e)return new k;const n=[];for(const s of e){const i=W(s).unwrap_or(void 0);if(!i)return new k;n.push(i)}return new U(n)}function De(t){if(t===void 0)return new k;const e=_e(t).unwrap_or(void 0);if(!e||e.length===0)return new k;const n=[];let s;if(!$(L.last(e))){const i=e.pop();if(Gt(i))s=i.elementList.map(a=>X(a).unwrap());else return new k}for(const i of e){const a=W(i).unwrap_or(void 0);if(!a)return new k;n.push(a)}return new U({variables:n,tupleElements:s})}function W(t){return $(t)?new U(t.expression.variable.value):new k}function Ce(t){if(mt(t))return t instanceof ue?new U({functional:[t],nonFunctional:[]}):new U({functional:[],nonFunctional:[t]});if(t instanceof ce&&t.elementList.every(mt)){const e=t.elementList.filter(s=>s instanceof ue),n=t.elementList.filter($);return new U({functional:e,nonFunctional:n})}return new k}function X(t){var n;const e=(n=t==null?void 0:t.expression.variable)==null?void 0:n.value;return e===void 0?new k:new U(e)}function Bn(t){var n,s;const e=(s=(n=t==null?void 0:t.partial)==null?void 0:n.variable)==null?void 0:s.value;return e===void 0?new k:new U(e)}function V(t){return q(t)?t.expression instanceof re?new U(t.expression.variable.value):new U(t.expression.literal.value):new k}function Vn(t){var e;return!(t instanceof le)||!Ft((e=t.op)==null?void 0:e.value)?!1:De(t.leftExpression).and_then(()=>De(t.rightExpression)).unwrap_or(void 0)!==void 0}function Gn(t){const e=De(t.leftExpression),n=De(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 j&&t.expression instanceof re||t instanceof ue}function bt(t,e){var i,a,r,c;let n=e;const s=hn(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 K&&s)return n.symbol;if(n instanceof K)return;n=n.parent}}class Cn{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 K||Le(this.declarationNode.parent).unwrap_or(void 0)!==I.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 oe)return[new l(o.UNEXPECTED_COMPLEX_BODY,"A Custom element can only have an inline field",e)];const n=[];return q(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 Pe{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 Xn{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(En,{declaration:this.declarationNode,symbolTable:new Pe});const{name:n}=this.declarationNode,s=Y(n);if(s.isOk()){const i=s.unwrap(),a=i.pop(),r=He(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 w)return this.validateFields([e]);const[n,s]=L.partition(e.body,i=>i instanceof w);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&&!$(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 L.last(i)instanceof M?(s.push(...this.validateFieldSettings(L.last(i))),i.pop()):i[0]instanceof M&&(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=>{q(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=he(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}registerField(e){if(e.callee&&$(e.callee)){const n=X(e.callee).unwrap(),s=st(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_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 $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(){const e=new l(o.INVALID_INDEXES_CONTEXT,"An Indexes can only appear inside a Table or a TablePartial",this.declarationNode);if(this.declarationNode.parent instanceof K)return[e];const n=Le(this.declarationNode.parent).unwrap_or(void 0);return n&&[I.Table,I.TablePartial].includes(n)?[]:[e]}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 w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"An Indexes must have a complex body",e)];const[n,s]=L.partition(e.body,i=>i instanceof w);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 L.last(i)instanceof M&&s.push(...this.validateFieldSetting(i.pop())),i.forEach(a=>{for(;a instanceof ee;)a.argumentList&&!Ce(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;Ce(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=>{q(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=>{z(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=>{$(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=he(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class jn{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 K)&&![I.Table,I.TableGroup,I.TablePartial,I.Project].includes(Le(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 K))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=Y(e);if(!n.isOk())return[new l(o.INVALID_NAME,"Invalid name for sticky note ",this.declarationNode)];const i=n.unwrap().join("."),a=un(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 w)return this.validateFields([e]);const[n,s]=L.partition(e.body,i=>i instanceof w);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))),q(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=he(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 y?[new l(o.INVALID_PROJECT_CONTEXT,"A Project can only appear top-level",this.declarationNode)]:[]}validateName(e){return e?ke(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 w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A Project's body must be a block",e)];const[n,s]=L.partition(e.body,i=>i instanceof w);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=he(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}class qn{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 K?[]:[new l(o.INVALID_REF_CONTEXT,"A Ref must appear top-level",this.declarationNode)]}validateName(e){return e?ke(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 w)return this.validateFields([e]);const[n,s]=L.partition(e.body,i=>i instanceof w);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&&!Vn(s.callee)&&n.push(new l(o.INVALID_REF_FIELD,"A Ref field must be a binary relationship",s.callee)),s.callee&&!Gn(s.callee)&&n.push(new l(o.UNEQUAL_FIELDS_BINARY_REF,"Unequal fields in ref endpoints",s.callee));const i=[...s.args];if(L.last(i)instanceof M){const a=this.validateFieldSettings(L.last(i));n.push(...a),i.pop()}else i[0]instanceof M&&(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=>{Yn(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=>{ze(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=he(n);return new s(n,this.publicSymbolTable,this.symbolFactory).validate()})}}function Yn(t){if(!($(t)&&t.expression.variable.kind!==u.QUOTED_STRING)&&!(t instanceof ne))return!1;let e;if(t instanceof ne?e=we(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 Hn{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 Ie?[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();return L.forIn(i,(a,r)=>{switch(r){case E.HeaderColor:a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_SETTING,"'headercolor' can only appear once",c))),a.forEach(c=>{ze(c.value)||s.push(new l(o.INVALID_TABLE_SETTING,"'headercolor' must be a color literal",c.value||c.name))});break;case E.Note:a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_SETTING,"'note' can only appear once",c))),a.forEach(c=>{q(c.value)||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)))}}),s}registerElement(){const e=[];this.declarationNode.symbol=this.symbolFactory.create(xt,{declaration:this.declarationNode,symbolTable:new Pe});const{name:n,alias:s}=this.declarationNode,i=Y(n);if(i.isOk()){const a=[...i.unwrap()],r=a.pop(),c=He(a,this.publicSymbolTable,this.symbolFactory),f=Ve(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&&ke(s)&&!zn(s.expression.variable.value,i.unwrap_or([]))){const a=X(s).unwrap(),r=Ve(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 w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A Table's body must be a block",e)];const[n,s,i]=e.body.reduce((a,r)=>(r instanceof w?a[0].push(r):r instanceof be?a[1].push(r):r instanceof y&&a[2].push(r),a),[[],[],[]]);return[...this.validateFields(n),...this.validateInjections(s),...this.validateSubElements(i)]}validateInjections(e){return e.flatMap(n=>this.registerInjection(n))}registerInjection(e){var c,f,p;if(!((f=(c=e.partial)==null?void 0:c.variable)!=null&&f.value))return[];const n=(p=e.partial.variable)==null?void 0:p.value,s=Dt(n),i=this.symbolFactory.create(In,{declaration:e});e.symbol=i;const a=this.declarationNode.symbol.symbolTable,r=a.get(s);return r?[new l(o.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${n}`,e),new l(o.DUPLICATE_TABLE_PARTIAL_INJECTION_NAME,`Duplicate injection ${n}`,r.declaration)]:(a.set(s,i),[])}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)),$(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]&&!Ct(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&&$(e.callee)){const n=X(e.callee).unwrap(),s=qe(n),i=this.symbolFactory.create(ot,{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(Ne)||!e.slice(-1).every(f=>Ne(f)||f instanceof M))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;L.last(e)instanceof M&&(n=e.pop());const s=F(n),i=s.getErrors(),a=s.getValue();e.forEach(f=>{const p=X(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[E.PK]||[],c=a[E.PKey]||[];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))),L.forIn(a,(f,p)=>{switch(p){case E.Note:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"note can only appear once",h))),f.forEach(h=>{q(h.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'note' must be a quoted string",h.value||h.name))});break;case E.Ref:f.forEach(h=>{Vt(h.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'ref' must be a valid unary relationship",h.value||h.name))});break;case E.PKey:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"primary key can only appear once",h))),f.forEach(h=>{z(h.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'primary key' must not have a value",h.value||h.name))});break;case E.PK:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"'pk' can only appear once",h))),f.forEach(h=>{h instanceof se&&!z(h.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'pk' must not have a value",h.value||h.name))});break;case E.NotNull:{f.length>1&&i.push(...f.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,"'not null' can only appear once",d)));const h=a[E.Null]||[];f.length>=1&&h.length>=1&&i.push(...[...f,...h].map(d=>new l(o.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",d))),f.forEach(d=>{z(d.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'not null' must not have a value",d.value||d.name))});break}case E.Null:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"'null' can only appear once",h))),f.forEach(h=>{z(h.value)||i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'null' must not have a value",h.value||h.name))});break;case E.Unique:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"'unique' can only appear once",h))),f.forEach(h=>{h instanceof se&&!z(h.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'unique' must not have a value",h.value||h.name))});break;case E.Increment:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_COLUMN_SETTING,"'increment' can only appear once",h))),f.forEach(h=>{h instanceof se&&!z(h.value)&&i.push(new l(o.INVALID_COLUMN_SETTING_VALUE,"'increment' must not have a value",h.value||h.name))});break;case E.Default:f.length>1&&i.push(...f.map(h=>new l(o.DUPLICATE_TABLE_SETTING,"'default' can only appear once",h))),f.forEach(h=>{Bt(h.value)||i.push(new l(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 l(o.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${p}'`,h)))}}),i}validateSubElements(e){const n=e.flatMap(i=>{if(i.parent=this.declarationNode,!i.type)return[];const a=he(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 zn(t,e){return e.length===1&&t===e[0]}class Qn{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?ke(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(Tn,{declaration:this.declarationNode,symbolTable:new Pe});const n=Y(e);if(n.isOk()){const s=n.unwrap(),i=s.pop(),a=He(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 L.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=>{ze(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=>!q(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 w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A TableGroup's body must be a block",e)];const[n,s]=L.partition(e.body,i=>i instanceof w);return[...this.validateFields(n),...this.validateSubElements(s)]}validateFields(e){return e.flatMap(n=>{const s=[];return n.callee&&!Y(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=he(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&&$(e.callee)){const n=X(e.callee).unwrap(),s=at(n),i=this.symbolFactory.create(mn,{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 Jn=["-","+"];class Kn{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?ke(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 L.forIn(i,(a,r)=>{switch(r){case E.HeaderColor:a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_PARTIAL_SETTING,`'${r}' can only appear once`,c))),a.forEach(c=>{ze(c.value)||s.push(new l(o.INVALID_TABLE_PARTIAL_SETTING,`'${r}' must be a color literal`,c.value||c.name))});break;case E.Note:a.length>1&&s.push(...a.map(c=>new l(o.DUPLICATE_TABLE_PARTIAL_SETTING,`'${r}' can only appear once`,c))),a.forEach(c=>{q(c.value)||s.push(new l(o.INVALID_TABLE_PARTIAL_SETTING,`'${r}' 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(bn,{declaration:this.declarationNode,symbolTable:new Pe});const n=Y(e);if(!n.isOk())return[];const s=n.unwrap(),i=s.pop(),a=He(s,this.publicSymbolTable,this.symbolFactory),r=rt(i);return a.has(r)?[new l(o.DUPLICATE_NAME,`TablePartial name '${i}' already exists`,e)]:(a.set(r,this.declarationNode.symbol),[])}validateBody(e){if(!e)return[];if(e instanceof w)return[new l(o.UNEXPECTED_SIMPLE_BODY,"A TablePartial's body must be a block",e)];const[n,s]=L.partition(e.body,i=>i instanceof w);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)),$(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]&&!Ct(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),...this.registerField(n)),s})}registerField(e){if(!e.callee||!$(e.callee))return[];const n=X(e.callee).unwrap(),s=qe(n),i=this.symbolFactory.create(ot,{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)]}return a.set(s,i),[]}validateFieldSetting(e){const n=L.last(e);if(!e.slice(0,-1).every(Ne)||!(Ne(n)||n instanceof M))return[...e.map(p=>new l(o.INVALID_COLUMN,"These fields must be some inline settings optionally ended with a setting list",p))];if(e.length===0)return[];let s;L.last(e)instanceof M&&(s=e.pop());const i=F(s),a=i.getErrors(),r=i.getValue();e.forEach(p=>{const h=X(p).unwrap_or("").toLowerCase();if(h!==E.PK&&h!==E.Unique){a.push(new l(o.INVALID_SETTINGS,"Inline column settings can only be `pk` or `unique`",p));return}r[h]===void 0?r[h]=[p]:r[h].push(p)});const c=r[E.PK]||[],f=r[E.PKey]||[];return c.length>=1&&f.length>=1&&a.push(...[...c,...f].map(p=>new l(o.DUPLICATE_COLUMN_SETTING,"Either one of 'primary key' and 'pk' can appear",p))),L.forIn(r,(p,h)=>{switch(h){case E.Note:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{q(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a quoted string`,d.value||d.name))});break;case E.Ref:p.forEach(d=>{Vt(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a valid unary relationship`,d.value||d.name))});break;case E.PKey:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{z(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.PK:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof se&&!z(d.value)&&a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.NotNull:{p.length>1&&a.push(...p.map(N=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,N)));const d=r[E.Null]||[];p.length>=1&&d.length>=1&&a.push(...[...p,...d].map(N=>new l(o.CONFLICTING_SETTING,"'not null' and 'null' can not be set at the same time",N))),p.forEach(N=>{z(N.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,N.value||N.name))});break}case E.Null:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{z(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Unique:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof se&&!z(d.value)&&a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Increment:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{d instanceof se&&!z(d.value)&&a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must not have a value`,d.value||d.name))});break;case E.Default:p.length>1&&a.push(...p.map(d=>new l(o.DUPLICATE_COLUMN_SETTING,`'${h}' can only appear once`,d))),p.forEach(d=>{Bt(d.value)||a.push(new l(o.INVALID_COLUMN_SETTING_VALUE,`'${h}' must be a string literal, number literal, function expression, true, false or null`,d.value||d.name))});break;default:p.forEach(d=>a.push(new l(o.UNKNOWN_COLUMN_SETTING,`Unknown column setting '${h}'`,d)))}}),a}validateSubElements(e){const n=e.flatMap(i=>{if(i.parent=this.declarationNode,!i.type)return[];const a=he(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())===I.Note});return s.length>1&&n.push(...s.map(i=>new l(o.NOTE_REDEFINED,"Duplicate notes are defined",i))),n}}function he(t){switch(t.type.value.toLowerCase()){case I.Enum:return Xn;case I.Table:return Hn;case I.TableGroup:return Qn;case I.Project:return Wn;case I.Ref:return qn;case I.Note:return jn;case I.Indexes:return $n;case I.TablePartial:return Kn;default:return Cn}}function Mt(t){return!!Y(t).unwrap_or(!1)}function Zn(t){return ke(t)}function ke(t){return t instanceof j&&t.expression instanceof re}function He(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 Pe;const f=n.create(Ot,{symbolTable:r});s.set(c,f)}s=r}return s}function Ft(t){return t==="-"||t==="<>"||t===">"||t==="<"}function ze(t){var n;if(!(t instanceof j)||!(t.expression instanceof ye)||((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(!gn(e[s]))return!1;return!0}function z(t){return t===void 0}function Bt(t){var e;return!!(q(t)||Ae(t)||Ne(t)&&["true","false","null"].includes(t.expression.variable.value.toLowerCase())||t instanceof Z&&Jn.includes((e=t.op)==null?void 0:e.value)&&Ae(t.expression)||t instanceof ue)}function Ae(t){var e,n,s;return t instanceof Z?((e=t.op)==null?void 0:e.value)!=="-"&&((n=t.op)==null?void 0:n.value)!=="+"?!1:Ae(t.expression):t instanceof j&&t.expression instanceof ye&&((s=t.expression.literal)==null?void 0:s.kind)===u.NUMERIC_LITERAL}function Vt(t){var n;if(!(t instanceof Z)||!Ft((n=t.op)==null?void 0:n.value))return!1;const e=Y(t.expression).unwrap_or(void 0);return e!==void 0&&e.length>0}function Gt(t){return t instanceof ce&&t.elementList.every($)}function Ct(t){if(!(t instanceof ee||lt(t)||t instanceof j||t instanceof Ie))return!1;if(t instanceof ee){if(t.callee===void 0||t.argumentList===void 0||!t.argumentList.elementList.every(n=>Ae(n)||q(n)||Ne(n)))return!1;t=t.callee}for(;t instanceof Ie;){if(t.array===void 0||t.indexer===void 0||!t.indexer.elementList.every(n=>!n.colon&&!n.value&&Ae(n.name)))return!1;t=t.array}const e=Y(t).unwrap_or(void 0);return e!==void 0&&e.length>0}function F(t){var s;const e={},n=[];if(!t)return new J({});for(const i of t.elementList){if(!i.name)continue;if(i.name instanceof j){n.push(new l(o.INVALID_SETTINGS,"A setting name must be a stream of identifiers",i.name));continue}const a=(s=we(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 J(e,n)}class It{constructor(e,n){this.ast=e,this.symbolFactory=n,this.publicSchemaSymbol=this.symbolFactory.create(Ot,{symbolTable:new Pe}),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=he(s),a=new i(s,this.publicSchemaSymbol.symbolTable,this.symbolFactory);e.push(...a.validate())});const n=this.ast.body.filter(s=>Le(s).unwrap_or(void 0)===I.Project);return n.length>1&&n.forEach(s=>e.push(new l(o.PROJECT_REDEFINED,"Only one project can exist",s))),new J(this.ast,e)}}class fe{constructor(e,n){this.declarationNode=e,this.errors=n}bind(){this.bindSettingList(this.declarationNode.attributeList,this.settingList),this.bindBody()}bindSettingList(e,n){e&&e.elementList.forEach(s=>{if(s.name instanceof j)return;const i=we(s.name).unwrap_or(void 0);if(!i)return;const a=n[i.toLowerCase()];a!=null&&a.shouldBind&&this.scanAndBind(s.value,a)})}bindBody(){const e=this.declarationNode;if(!e.body)return;const{body:n}=e;n instanceof oe?n.body.forEach(s=>{if(s instanceof y){if(!s.type||Le(this.declarationNode).unwrap_or(null)===I.TablePartial&&Le(s).unwrap_or(null)===I.Indexes)return;const i=Xt(s);new i(s,this.errors).bind()}else s instanceof w?this.bindSubfield(s):this.bindPartialInjection(s)}):this.bindSubfield(n)}bindSubfield(e){const n=[e.callee,...e.args],s=L.last(n);s instanceof M&&(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.injectionBinderRule)!=null&&n.shouldBind&&this.scanAndBind(e,this.injectionBinderRule)}scanAndBind(e,n){var s,i;if(e)if(e instanceof j){if(e.expression instanceof re&&((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?lt(e)?this.bindFragments(_e(e).unwrap_or([]),n):(this.scanAndBind(e.leftExpression,n),this.scanAndBind(e.rightExpression,n)):e instanceof Z?this.scanAndBind(e.expression,n):e instanceof We?this.scanAndBind(e.expression,n):e instanceof ce?e.elementList.forEach(a=>this.scanAndBind(a,n)):e instanceof be&&this.bindFragments([e],n)}bindFragments(e,n){if(e.length===0)return;const s=e.length===1&&e[0]instanceof be,i=[...n.topSubnamesSymbolKind],{remainingSubnamesSymbolKind:a}=n,r=s?-1:e.findIndex(N=>!$(N)),f=r!==-1&&Gt(e[r])?e[r]:void 0,p=r>=0?i.pop():void 0,h=e.slice(0,r===-1?void 0:r);if(h.length===0)return;const d=[];for(;i.length&&h.length;){const N=i.pop(),A=h.pop(),v=X(A).unwrap();d.unshift({index:Fe(v,N),referrer:A})}for(;h.length;){const N=h.pop(),A=s?Bn(N).unwrap():X(N).unwrap();d.unshift({index:Fe(A,a),referrer:N})}return f?f.elementList.forEach(N=>this.resolveIndexStack([...d,{index:Fe(X(N).unwrap(),p),referrer:N}],n.ignoreNameNotFound)):this.resolveIndexStack(d,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=bt(s.index,this.declarationNode);if(a===void 0){const{kind:p,name:h}=ie(s.index).unwrap();this.logError(s.referrer,`Can not find ${p} '${h}'`,n);return}a.references.push(s.referrer),s.referrer.referee=a;let r=a.symbolTable,{kind:c,name:f}=ie(s.index).unwrap();for(const p of i){const{kind:h,name:d}=ie(p.index).unwrap(),N=r.get(p.index);if(!N){this.logError(p.referrer,`${c} '${f}' does not have ${h} '${d}'`,n);return}if(c=h,f=d,p.referrer.referee=N,N.references.push(p.referrer),!N.symbolTable)break;r=N.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 p,h;if(!fn(r))return;const c=bt(pn(r),this.declarationNode),f=(h=(p=c==null?void 0:c.declaration)==null?void 0:p.symbol)==null?void 0:h.symbolTable;f&&f.forEach((d,N)=>{n.has(N)||s.set(N,{injectorFieldSymbol:d,injectorDeclaration:a.declaration})})}),s.forEach((a,r)=>{const c=_n(a.injectorFieldSymbol);if(!c)return;const f=e.create(c,a);n.set(r,f)})}}class es extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class ts extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class ns extends fe{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 ss extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!1}]},settingList:{}},this.settingList={}}}class is extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[]},settingList:{}},this.settingList={}}}class as extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table,m.Column],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class rs extends fe{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={},this.injectionBinderRule={shouldBind:!0,topSubnamesSymbolKind:[],remainingSubnamesSymbolKind:m.TablePartial,ignoreNameNotFound:!1}}}class os extends fe{constructor(){super(...arguments),this.subfield={arg:{argBinderRules:[{shouldBind:!0,topSubnamesSymbolKind:[m.Table],remainingSubnamesSymbolKind:m.Schema,ignoreNameNotFound:!1}]},settingList:{}},this.settingList={}}}class ls extends fe{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 Xt(t){switch(t.type.value.toLowerCase()){case I.Enum:return ts;case I.Table:return rs;case I.TableGroup:return os;case I.Project:return is;case I.Ref:return as;case I.Note:return ss;case I.Indexes:return ns;case I.TablePartial:return ls;default:return es}}class cs{constructor(e){this.ast=e,this.errors=[]}resolve(e){return this.ast.body.map(n=>{if(!n.type)return null;const s=Xt(n),i=new s(n,this.errors);return i.resolveInjections(e),i}).forEach(n=>n==null?void 0:n.bind()),new J(this.ast,this.errors)}}class us{constructor(e){this.generator=e}create(e,n){return new e(n,this.generator.nextId())}}class hs{constructor(e,n){this.ast=e,this.symbolFactory=new us(n)}analyze(){return new It(this.ast,this.symbolFactory).validate().chain(n=>new cs(n).resolve(this.symbolFactory))}validate(){return new It(this.ast,this.symbolFactory).validate().chain(n=>new J(n,[]))}}function Lt(t,e){const{variables:n,tupleElements:s}=De(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 $t(t){switch(t){case"<":return["1","*"];case"<>":return["*","*"];case">":return["*","1"];case"-":return["1","1"];default:throw new Error("Invalid relation op")}}function g(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 Xe(t){var n;const e=(n=_e(t).unwrap_or(void 0))==null?void 0:n.pop();return e instanceof ce?e.elementList.map(s=>s.referee):[e.referee]}function ge(t){const e=Y(t).unwrap();return{name:e.pop(),schemaName:e}}function xe(t){return t.expression.literal.value}function jt(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 ct(t,e){if(Array.isArray(t)){const i=t.map(({id:r})=>r).sort(),a=e.map(({id:r})=>r).sort();return L.zip(i,a).every(([r,c])=>r===c)}const n=t.id,s=e.id;return n===s}function ae(t){const e=t.split(`
10
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
- `)}function Wt(t){if(t){if(q(t))return{value:V(t).unwrap(),type:"string"};if(Ae(t))return{type:"number",value:Ze(t)};if(Ne(t))return{value:t.expression.variable.value.toLowerCase(),type:"boolean"};if(t instanceof ue&&t.value)return{value:t.value.value,type:"expression"};throw new Error("Unreachable")}}function qt(t){let e=null;t instanceof ee&&(e=t.argumentList.elementList.map(a=>Ae(a)?Rt(a):q(a)?V(a).unwrap():W(a).unwrap()).join(","),t=t.callee);let n="";for(;t instanceof Ie;)n=`[${t.indexer.elementList.map(a=>a.name.expression.literal.value).join(",")}]${n}`,t=t.array;const{name:s,schemaName:i}=ge(t);return i.length>1?new J({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 J({schemaName:i.length===0?null:i[0],type_name:`${s}${n}${e?`(${e})`:""}`,args:e})}class Yt{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=g(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}=ge(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=X(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[E.HeaderColor])!=null&&i.length?xe((r=(a=n[E.HeaderColor])==null?void 0:a.at(0))==null?void 0:r.value):void 0;const[s]=n[E.Note]||[];return this.table.note=s&&{value:V(s==null?void 0:s.value).map(ae).unwrap(),token:g(s)},[]}interpretBody(e){const[n,s]=L.partition(e.body,i=>i instanceof w||i instanceof be);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 I.Note:return this.table.note={value:V(n.body instanceof oe?n.body.body[0].callee:n.body.callee).map(ae).unwrap(),token:g(n)},[];case I.Indexes:return this.interpretIndexes(n);default:return[]}})}interpretInjection(e,n){const s={order:n,token:g(e)};return s.name=e.partial.variable.value,this.table.partials.push(s),[]}interpretFields(e){var r;const i=((r=this.declarationNode.symbol)!=null&&r.symbolTable?[...this.declarationNode.symbol.symbolTable.entries()]:[]).filter(([c])=>{const f=ie(c).unwrap_or(null);return(f==null?void 0:f.kind)===m.Column}).length?[]:[new l(o.EMPTY_TABLE,"A Table must have at least one column",this.declarationNode)],a=e.flatMap((c,f)=>c instanceof w?this.interpretColumn(c):this.interpretInjection(c,f));return[...i,...a]}interpretColumn(e){var r,c,f,p,h,d,N,A,v;const n=[],s={};s.name=X(e.callee).unwrap();const i=qt(e.args[0]);s.type=i.getValue(),n.push(...i.getErrors()),s.token=g(e),s.inline_refs=[];const a=e.args.slice(1);if(L.last(a)instanceof M){const _=F(a.pop()).getValue();s.pk=!!((r=_[E.PK])!=null&&r.length)||!!((c=_[E.PKey])!=null&&c.length),s.increment=!!((f=_[E.Increment])!=null&&f.length),s.unique=!!((p=_[E.Unique])!=null&&p.length),s.not_null=(h=_[E.NotNull])!=null&&h.length?!0:(d=_[E.Null])!=null&&d.length?!1:void 0,s.dbdefault=Wt((A=(N=_[E.Default])==null?void 0:N.at(0))==null?void 0:A.value);const k=(v=_[E.Note])==null?void 0:v.at(0);s.note=k&&{value:V(k.value).map(ae).unwrap(),token:g(k)};const Te=_[E.Ref]||[];s.inline_refs=Te.flatMap(D=>{const[Ue]=Xe(D.value.expression);if(ct(Ue,e.symbol))return n.push(new l(o.SAME_ENDPOINT,"Two endpoints are the same",D)),[];const pe=D.value.op,B=Y(D.value.expression).unwrap();let te;if(B.length===1){const[H]=B;te={schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[H],relation:pe.value,token:g(D)}}else if(B.length===2){const[H,Ee]=B;te={schemaName:null,tableName:H,fieldNames:[Ee],relation:pe.value,token:g(D)}}else if(B.length===3){const[H,Ee,ft]=B;te={schemaName:H,tableName:Ee,fieldNames:[ft],relation:pe.value,token:g(D)}}else{n.push(new l(o.UNSUPPORTED,"Nested schema is not supported",D));const H=B.pop(),Ee=B.pop();te={schemaName:B.join("."),tableName:Ee,fieldNames:[H],relation:pe.value,token:g(D)}}const de=this.registerInlineRefToEnv(e,Ue,te,D);return n.push(...de),de.length===0?te:[]})}return s.pk||(s.pk=a.some(_=>W(_).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=a.some(_=>W(_).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,h,d,N;const s={columns:[]},i=n;s.token=g(i);const a=[i.callee,...i.args];if(L.last(a)instanceof M){const A=F(a.pop()).getValue();s.pk=!!((r=A[E.PK])!=null&&r.length),s.unique=!!((c=A[E.Unique])!=null&&c.length),s.name=V((p=(f=A[E.Name])==null?void 0:f.at(0))==null?void 0:p.value).unwrap_or(void 0);const v=(h=A[E.Note])==null?void 0:h.at(0);s.note=v&&{value:V(v.value).unwrap(),token:g(v)},s.type=W((N=(d=A[E.Type])==null?void 0:d.at(0))==null?void 0:N.value).unwrap_or(void 0)}return a.flatMap(A=>{if(!(A instanceof ee))return A;const v=[];for(;A instanceof ee;)v.push(A.argumentList),A=A.callee;return v.push(A),v}).forEach(A=>{const{functional:v,nonFunctional:_}=Ce(A).unwrap();s.columns.push(...v.map(k=>({value:k.value.value,type:"expression",token:g(k)})),..._.map(k=>({value:X(k).unwrap(),type:"column",token:g(k)})))}),s})),[]}registerInlineRefToEnv(e,n,s,i){const a=jt(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=$t(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:g(e),relation:r[0]}]}),[]}}class fs{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=g(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}=ge(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?xe((a=(i=n.headercolor)==null?void 0:i.at(0))==null?void 0:a.value):void 0,[]}interpretBody(e){const[n,s]=L.partition(e.body,i=>i instanceof w);return n.length!==1||s.length>0?[new l(o.INVALID_NOTE,"Invalid note syntax",e)]:[...this.interpretNote(n[0])]}interpretNote(e){const n=L.get(e,"callee.expression.literal.value","");return this.note.content=ae(n),[]}}class Ht{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=g(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=Y(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 w?this.interpretField(e):this.interpretField(e.body[0])}interpretField(e){var p,h,d,N,A,v,_;const n=e.callee.op.value,{leftExpression:s,rightExpression:i}=e.callee,a=Xe(s),r=Xe(i);if(ct(a,r))return[new l(o.SAME_ENDPOINT,"Two endpoints are the same",e)];const c=jt(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(),Te=(h=(p=k.delete)==null?void 0:p.at(0))==null?void 0:h.value;this.ref.onDelete=Te instanceof ne?we(Te).unwrap_or(void 0):W(Te).unwrap_or(void 0);const D=(N=(d=k.update)==null?void 0:d.at(0))==null?void 0:N.value;this.ref.onUpdate=D instanceof ne?we(D).unwrap_or(void 0):W(D).unwrap_or(void 0),this.ref.color=(A=k.color)!=null&&A.length?xe((_=(v=k.color)==null?void 0:v.at(0))==null?void 0:_.value):void 0}const f=$t(n);return this.ref.endpoints=[{...Lt(s,this.container),relation:f[0],token:g(s)},{...Lt(i,this.container),relation:f[1],token:g(i)}],this.env.refIds[c]=this.declarationNode,[]}}class zt{constructor(e,n){this.declarationNode=e,this.env=n,this.tableGroup={tables:[]}}interpret(){const e=[];return this.tableGroup.token=g(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}=ge(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]=L.partition(e.body,i=>i instanceof w);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:V(n.body instanceof oe?n.body.body[0].callee:n.body.callee).map(ae).unwrap(),token:g(n)};break}return[]})}interpretFields(e){const n=[];return this.tableGroup.tables=e.map(s=>{const i=Y(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?xe((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:V(s==null?void 0:s.value).map(ae).unwrap(),token:g(s)},[]}}class Qt{constructor(e,n){this.declarationNode=e,this.env=n,this.enum={values:[]}}interpret(){return this.enum.token=g(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}=ge(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=g(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:V(r.value).map(ae).unwrap(),token:g(r)},this.enum.values.push(i),[]})}}class Jt{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=g(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}=ge(e);return this.tablePartial.name=n,[]}interpretSettingList(e){const n=F(e).getValue(),s=L.head(n[E.HeaderColor]);this.tablePartial.headerColor=s?xe(s.value):void 0;const[i]=n[E.Note]||[];return this.tablePartial.note=i&&{value:V(i==null?void 0:i.value).map(ae).unwrap(),token:g(i)},[]}interpretBody(e){const[n,s]=L.partition(e.body,i=>i instanceof w);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 I.Note:return this.tablePartial.note={value:V(n.body instanceof oe?n.body.body[0].callee:n.body.callee).map(ae).unwrap(),token:g(n)},[];case I.Indexes:return this.interpretIndexes(n);default:return[]}})}interpretFields(e){return e.flatMap(n=>this.interpretColumn(n))}interpretColumn(e){var r,c,f,p,h,d,N,A,v;const n=[],s={};s.name=X(e.callee).unwrap();const i=qt(e.args[0]);s.type=i.getValue(),n.push(...i.getErrors()),s.token=g(e),s.inline_refs=[];const a=e.args.slice(1);if(L.last(a)instanceof M){const _=F(a.pop()).getValue();s.pk=!!((r=_[E.PK])!=null&&r.length)||!!((c=_[E.PKey])!=null&&c.length),s.increment=!!((f=_[E.Increment])!=null&&f.length),s.unique=!!((p=_[E.Unique])!=null&&p.length),s.not_null=(h=_[E.NotNull])!=null&&h.length?!0:(d=_[E.Null])!=null&&d.length?!1:void 0,s.dbdefault=Wt((A=(N=_[E.Default])==null?void 0:N.at(0))==null?void 0:A.value);const k=(v=_[E.Note])==null?void 0:v.at(0);s.note=k&&{value:V(k.value).map(ae).unwrap(),token:g(k)};const Te=_[E.Ref]||[];s.inline_refs=Te.flatMap(D=>{const[Ue]=Xe(D.value.expression);if(ct(Ue,e.symbol))return n.push(new l(o.SAME_ENDPOINT,"Two endpoints are the same",D)),[];const pe=D.value.op,B=Y(D.value.expression).unwrap();let te;if(B.length===2){const[de,H]=B;te={schemaName:null,tableName:de,fieldNames:[H],relation:pe.value,token:g(D)}}else if(B.length===3){const[de,H,Ee]=B;te={schemaName:de,tableName:H,fieldNames:[Ee],relation:pe.value,token:g(D)}}else{n.push(new l(o.UNSUPPORTED,"Unsupported",D));const de=B.pop(),H=B.pop();te={schemaName:B.join("."),tableName:H,fieldNames:[de],relation:pe.value,token:g(D)}}return te})}return s.pk||(s.pk=a.some(_=>W(_).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=a.some(_=>W(_).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,h,d,N;const s={columns:[]},i=n;s.token=g(i);const a=[i.callee,...i.args];if(L.last(a)instanceof M){const A=F(a.pop()).getValue();s.pk=!!((r=A[E.PK])!=null&&r.length),s.unique=!!((c=A[E.Unique])!=null&&c.length),s.name=V((p=(f=A[E.Name])==null?void 0:f.at(0))==null?void 0:p.value).unwrap_or(void 0);const v=(h=A[E.Note])==null?void 0:h.at(0);s.note=v&&{value:V(v.value).unwrap(),token:g(v)},s.type=W((N=(d=A[E.Type])==null?void 0:d.at(0))==null?void 0:N.value).unwrap_or(void 0)}return a.flatMap(A=>{if(!(A instanceof ee))return A;const v=[];let _=A;for(;_ instanceof ee;)v.push(_.argumentList),_=_.callee;return v.push(_),v}).forEach(A=>{const{functional:v,nonFunctional:_}=Ce(A).unwrap();s.columns.push(...v.map(k=>({value:k.value.value,type:"expression",token:g(k)})),..._.map(k=>({value:X(k).unwrap(),type:"column",token:g(k)})))}),s})),[]}}class ps{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=g(this.declarationNode),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(e){if(!e)return this.project.name=null,[];const{name:n}=ge(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 Yt(s,this.env).interpret();return this.project.tables.push(this.env.tables.get(s)),a}case"ref":{const a=new Ht(s,this.env).interpret();return this.project.refs.push(this.env.ref.get(s)),a}case"tablegroup":{const a=new zt(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:V(s.body instanceof oe?s.body.body[0].callee:s.body.callee).map(ae).unwrap(),token:g(s)},[];case"tablepartial":{const a=new Jt(s,this.env).interpret();return this.project.tablePartials.push(this.env.tablePartials.get(s)),a}default:return this.project[s.type.value.toLowerCase()]=V(s.body.callee).unwrap(),[]}})}}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())}}class Es{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(Le(n).unwrap_or(void 0)){case I.Table:return new Yt(n,this.env).interpret();case I.Note:return new fs(n,this.env).interpret();case I.Ref:return new Ht(n,this.env).interpret();case I.TableGroup:return new zt(n,this.env).interpret();case I.TablePartial:return new Jt(n,this.env).interpret();case I.Enum:return new Qt(n,this.env).interpret();case I.Project:return new ps(n,this.env).interpret();default:return[]}});return new J(ds(this.env),e)}}var P=(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))(P||{}),R=(t=>(t[t.None=0]="None",t[t.KeepWhitespace=1]="KeepWhitespace",t[t.InsertAsSnippet=4]="InsertAsSnippet",t))(R||{});function Oe(t){switch(t){case m.Schema:return P.Module;case m.Table:case m.TablePartial:return P.Class;case m.Column:case m.TableGroupField:return P.Field;case m.Enum:return P.Enum;case m.EnumField:return P.EnumMember;case m.TableGroup:return P.Struct;default:return P.Text}}function $e(t,e){if(!t||Ke(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 G(){return{suggestions:[]}}function je(t){return{...t,suggestions:t.suggestions.map(e=>({...e,insertText:` ${e.insertText}`}))}}function Qe(t){return{...t,suggestions:t.suggestions.map(e=>({...e,insertText:e.insertText.split("").every(Ye)?e.insertText:`"${e.insertText}"`}))}}function ut(t,e){return t.getOffsetAt(e)}class Kt{constructor(e,n=[]){this.compiler=e,this.triggerCharacters=n}provideCompletionItems(e,n){var h,d;const s=ut(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(N=>on(N)&&Se(s,N)))return G();if(r===void 0)return wt();if([u.STRING_LITERAL,u.QUOTED_STRING].includes(a.kind)&&Se(s,a))return G();const f=this.compiler.container.element(s);if(this.compiler.container.scopeKind(s)===x.TOPLEVEL||f instanceof y&&f.type&&f.type.start<=s&&f.type.end>=s)return wt();const p=[...this.compiler.container.stack(s)].reverse();for(const N of p)if(N instanceof Z)switch((h=N.op)==null?void 0:h.value){case">":case"<":case"<>":case"-":return At(this.compiler,s,N)}else if(N instanceof le)switch((d=N.op)==null?void 0:d.value){case">":case"<":case"<>":case"-":return At(this.compiler,s,N);case".":return Zt(this.compiler,s,N)}else{if(N instanceof se)return _t(this.compiler,s,N);if(N instanceof M)return _t(this.compiler,s,N);if(N instanceof ce)return Ts(this.compiler,s);if(N instanceof be)return Ns(this.compiler,s);if(N instanceof w)return vt(this.compiler,s,N);if(N instanceof y&&(N.bodyColon&&s>=N.bodyColon.end||N.body&&Se(s,N.body)))return vt(this.compiler,s,void 0)}return G()}}function Ns(t,e){const n=t.container.element(e);return Re(t,e,n,[m.TablePartial])}function At(t,e,n){const s=t.container.scopeKind(e);if([x.REF,x.TABLE,x.TABLEPARTIAL].includes(s)){const i=Re(t,e,t.container.element(e),[m.Table,m.Schema,m.Column]);return $e(n.op,e)?je(i):i}return G()}function Re(t,e,n,s){var r;if(n===void 0)return G();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:R.KeepWhitespace,kind:Oe(p),sortText:Oe(p).toString().padStart(2,"0"),range:void 0})))}i=i instanceof y?i.parent:void 0}return Qe(a)}function Ts(t,e){var s;switch(t.container.scopeKind(e)){case x.INDEXES:return tn(t,e);case x.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 Zt(t,e,a)}}return en(t,e)}return G()}function _t(t,e,n){const{token:s}=t.container.token(e);if([u.COMMA,u.LBRACKET].includes(s==null?void 0:s.kind)){const i=gt(t,e);return(s==null?void 0:s.kind)===u.COMMA&&$e(s,e)?je(i):i}if(n.name&&n.name.start<=e&&n.name.end>=e)return gt(t,e);if(n.name instanceof ne){const i=ms(t,e,we(n.name).unwrap_or(""));return(s==null?void 0:s.kind)===u.COLON&&$e(s,e)?je(i):i}return G()}function gt(t,e){const n=t.container.element(e);if(n instanceof K)return G();const s=t.container.scopeKind(e);if(n.body&&!Se(e,n.body)){let i;switch(s){case x.TABLE:case x.TABLEPARTIAL:i=[E.HeaderColor,E.Note];break;case x.TABLEGROUP:i=[E.Color,E.Note];break;default:i=[]}return{suggestions:i.map(a=>({label:a,insertText:`${a}: `,kind:P.Field,insertTextRules:R.KeepWhitespace,range:void 0}))}}switch(s){case x.TABLE:case x.TABLEPARTIAL:return{suggestions:[...[E.PK,E.PKey,E.Null,E.NotNull,E.Increment,E.Unique].map(i=>({label:i,insertText:i,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0})),...[E.Ref,E.Default,E.Note].map(i=>({label:i,insertText:`${i}: `,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0}))]};case x.ENUM:return{suggestions:[...[E.Note].map(i=>({label:i,insertText:`${i}: `,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0}))]};case x.INDEXES:return{suggestions:[...[E.Unique,E.PK].map(i=>({label:i,insertText:i,insertTextRules:R.KeepWhitespace,kind:P.Property,range:void 0})),...[E.Note,E.Name,E.Type].map(i=>({label:i,insertText:`${i}: `,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0}))]};case x.REF:return{suggestions:[E.Update,E.Delete].map(i=>({label:i,insertText:`${i}: `,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0}))}}return G()}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:P.Value,insertTextRules:R.KeepWhitespace,range:void 0}))};case"type":return{suggestions:["btree","hash"].map(s=>({label:s,insertText:`${s}`,kind:P.Value,insertTextRules:R.KeepWhitespace,range:void 0}))}}return G()}function Zt(t,e,n){const s=_e(n).unwrap_or([]);if(s.pop(),s.some(a=>!$(a)))return G();const i=s.map(a=>W(a).unwrap());return Qe({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:Oe(a),range:void 0}))})}function vt(t,e,n){var i;switch(t.container.scopeKind(e)){case x.TABLE:case x.TABLEPARTIAL:return Is(t,e,n);case x.PROJECT:return Ls(t,e,n);case x.INDEXES:return _s(t,e);case x.ENUM:return bs(t,e,n);case x.REF:{const a=en(t,e);return((i=t.container.token(e).token)==null?void 0:i.kind)===u.COLON&&$e(t.container.token(e).token,e)?je(a):a}case x.TABLEGROUP:return As(t);default:return G()}}function wt(){return{suggestions:["Table","TableGroup","Enum","Project","Ref","TablePartial"].map(t=>({label:t,insertText:t,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))}}function bs(t,e,n){return n!=null&&n.callee&&ht(e,n)===1?Re(t,e,t.container.element(e),[m.Schema,m.Table,m.Column]):G()}function Is(t,e,n){const s=["Note","indexes"];if(!(n!=null&&n.callee))return{suggestions:s.map(a=>({label:a,insertText:a,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))};const i=ht(e,n);return i===0?{suggestions:s.map(a=>({label:a,insertText:a,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))}:i===1?gs(t,e):G()}function Ls(t,e,n){const s=["Table","TableGroup","Enum","Note","Ref","TablePartial"];return n!=null&&n.callee?ht(e,n)===0?{suggestions:s.map(a=>({label:a,insertText:a,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))}:G():{suggestions:s.map(a=>({label:a,insertText:a,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))}}function en(t,e){return Re(t,e,t.container.element(e),[m.Schema,m.Table,m.Column])}function As(t){return{suggestions:[...Qe({suggestions:[...t.parse.publicSymbolTable().entries()].flatMap(([e])=>{const n=ie(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:R.KeepWhitespace,kind:Oe(s),range:void 0}})}).suggestions,...["Note"].map(e=>({label:e,insertText:e,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))]}}function _s(t,e){return tn(t,e)}function gs(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:R.KeepWhitespace,kind:P.TypeParameter,sortText:P.TypeParameter.toString().padStart(2,"0"),range:void 0})),...Re(t,e,t.container.element(e),[m.Enum,m.Schema]).suggestions]}}function tn(t,e){const n=t.container.element(e),s=n==null?void 0:n.parent;if(!((s==null?void 0:s.symbol)instanceof xt))return G();const{symbolTable:i}=s.symbol;return Qe({suggestions:[...i.entries()].flatMap(([a])=>{const r=ie(a).unwrap_or(void 0);if(r===void 0)return[];const{name:c}=r;return{label:c,insertText:c,insertTextRules:R.KeepWhitespace,kind:Oe(m.Column),range:void 0}})})}function ht(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 nn{constructor(e){this.compiler=e}provideDefinition(e,n){var r,c;const{uri:s}=e,i=ut(e,n),a=[...this.compiler.container.stack(i)];for(;a.length!==0;){const f=a.pop();if(!(f!=null&&f.referee))continue;let p;if((r=f.referee)!=null&&r.declaration&&[me.PRIMARY_EXPRESSION,me.VARIABLE,me.PARTIAL_INJECTION].includes(f==null?void 0:f.kind)?{declaration:p}=f.referee:(c=f.referee)!=null&&c.injectorDeclaration&&(p=f.referee.injectorDeclaration),p){const{startPos:h,endPos:d}=p;return[{range:{startColumn:h.column+1,startLineNumber:h.line+1,endColumn:d.column+1,endLineNumber:d.line+1},uri:s}]}}return[]}}class sn{constructor(e){this.compiler=e}provideReferences(e,n){const{uri:s}=e,i=ut(e,n),a=[...this.compiler.container.stack(i)];for(;a.length!==0;){const r=a.pop();if(r&&[me.ELEMENT_DECLARATION,me.FUNCTION_APPLICATION,me.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 vs=Object.freeze(Object.defineProperty({__proto__:null,CompletionItemInsertTextRule:R,CompletionItemKind:P,DBMLCompletionItemProvider:Kt,DBMLDefinitionProvider:nn,DBMLReferencesProvider:sn},Symbol.toStringTag,{value:"Module"}));var x=(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))(x||{});class ws{constructor(){this.source="",this.cache=new Array(16).fill(null),this.nodeIdGenerator=new ln,this.symbolIdGenerator=new dn,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 kn(this.source).lex().chain(n=>new On(n,this.nodeIdGenerator).parse()).chain(({ast:n,tokens:s})=>new hs(n,this.symbolIdGenerator).analyze().map(()=>({ast:n,tokens:s})));return e.getErrors().length>0?e:e.chain(({ast:n,tokens:s})=>new Es(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:L.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 h=Pn(c).find(d=>Se(r,d));if(h===void 0||h instanceof Q)break;f.push(h),c=h}if((i==null?void 0:i.kind)===u.COLON)return f;for(;f.length>0;){let p=!1;const h=L.last(f);if(h instanceof w){const d=this.parse.source();for(let N=h.end;N<e;N+=1)d[N]===`
11
+ `)}function Wt(t){if(t){if(q(t))return{value:V(t).unwrap(),type:"string"};if(Ae(t))return{type:"number",value:Ke(t)};if(Ne(t))return{value:t.expression.variable.value.toLowerCase(),type:"boolean"};if(t instanceof ue&&t.value)return{value:t.value.value,type:"expression"};throw new Error("Unreachable")}}function qt(t){let e=null;t instanceof ee&&(e=t.argumentList.elementList.map(a=>Ae(a)?Rt(a):q(a)?V(a).unwrap():W(a).unwrap()).join(","),t=t.callee);let n="";for(;t instanceof Ie;)n=`[${t.indexer.elementList.map(a=>a.name.expression.literal.value).join(",")}]${n}`,t=t.array;const{name:s,schemaName:i}=ge(t);return i.length>1?new J({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 J({schemaName:i.length===0?null:i[0],type_name:`${s}${n}${e?`(${e})`:""}`,args:e})}class Yt{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=g(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}=ge(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=X(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[E.HeaderColor])!=null&&i.length?xe((r=(a=n[E.HeaderColor])==null?void 0:a.at(0))==null?void 0:r.value):void 0;const[s]=n[E.Note]||[];return this.table.note=s&&{value:V(s==null?void 0:s.value).map(ae).unwrap(),token:g(s)},[]}interpretBody(e){const[n,s]=L.partition(e.body,i=>i instanceof w||i instanceof be);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 I.Note:return this.table.note={value:V(n.body instanceof oe?n.body.body[0].callee:n.body.callee).map(ae).unwrap(),token:g(n)},[];case I.Indexes:return this.interpretIndexes(n);default:return[]}})}interpretInjection(e,n){const s={order:n,token:g(e)};return s.name=e.partial.variable.value,this.table.partials.push(s),[]}interpretFields(e){var r;const i=((r=this.declarationNode.symbol)!=null&&r.symbolTable?[...this.declarationNode.symbol.symbolTable.entries()]:[]).filter(([c])=>{const f=ie(c).unwrap_or(null);return(f==null?void 0:f.kind)===m.Column}).length?[]:[new l(o.EMPTY_TABLE,"A Table must have at least one column",this.declarationNode)],a=e.flatMap((c,f)=>c instanceof w?this.interpretColumn(c):this.interpretInjection(c,f));return[...i,...a]}interpretColumn(e){var r,c,f,p,h,d,N,A,v;const n=[],s={};s.name=X(e.callee).unwrap();const i=qt(e.args[0]);s.type=i.getValue(),n.push(...i.getErrors()),s.token=g(e),s.inline_refs=[];const a=e.args.slice(1);if(L.last(a)instanceof M){const _=F(a.pop()).getValue();s.pk=!!((r=_[E.PK])!=null&&r.length)||!!((c=_[E.PKey])!=null&&c.length),s.increment=!!((f=_[E.Increment])!=null&&f.length),s.unique=!!((p=_[E.Unique])!=null&&p.length),s.not_null=(h=_[E.NotNull])!=null&&h.length?!0:(d=_[E.Null])!=null&&d.length?!1:void 0,s.dbdefault=Wt((A=(N=_[E.Default])==null?void 0:N.at(0))==null?void 0:A.value);const S=(v=_[E.Note])==null?void 0:v.at(0);s.note=S&&{value:V(S.value).map(ae).unwrap(),token:g(S)};const Te=_[E.Ref]||[];s.inline_refs=Te.flatMap(D=>{const[Ue]=Xe(D.value.expression);if(ct(Ue,e.symbol))return n.push(new l(o.SAME_ENDPOINT,"Two endpoints are the same",D)),[];const pe=D.value.op,B=Y(D.value.expression).unwrap();let te;if(B.length===1){const[H]=B;te={schemaName:this.table.schemaName,tableName:this.table.name,fieldNames:[H],relation:pe.value,token:g(D)}}else if(B.length===2){const[H,Ee]=B;te={schemaName:null,tableName:H,fieldNames:[Ee],relation:pe.value,token:g(D)}}else if(B.length===3){const[H,Ee,ft]=B;te={schemaName:H,tableName:Ee,fieldNames:[ft],relation:pe.value,token:g(D)}}else{n.push(new l(o.UNSUPPORTED,"Nested schema is not supported",D));const H=B.pop(),Ee=B.pop();te={schemaName:B.join("."),tableName:Ee,fieldNames:[H],relation:pe.value,token:g(D)}}const de=this.registerInlineRefToEnv(e,Ue,te,D);return n.push(...de),de.length===0?te:[]})}return s.pk||(s.pk=a.some(_=>W(_).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=a.some(_=>W(_).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,h,d,N;const s={columns:[]},i=n;s.token=g(i);const a=[i.callee,...i.args];if(L.last(a)instanceof M){const A=F(a.pop()).getValue();s.pk=!!((r=A[E.PK])!=null&&r.length),s.unique=!!((c=A[E.Unique])!=null&&c.length),s.name=V((p=(f=A[E.Name])==null?void 0:f.at(0))==null?void 0:p.value).unwrap_or(void 0);const v=(h=A[E.Note])==null?void 0:h.at(0);s.note=v&&{value:V(v.value).unwrap(),token:g(v)},s.type=W((N=(d=A[E.Type])==null?void 0:d.at(0))==null?void 0:N.value).unwrap_or(void 0)}return a.flatMap(A=>{if(!(A instanceof ee))return A;const v=[];for(;A instanceof ee;)v.push(A.argumentList),A=A.callee;return v.push(A),v}).forEach(A=>{const{functional:v,nonFunctional:_}=Ce(A).unwrap();s.columns.push(...v.map(S=>({value:S.value.value,type:"expression",token:g(S)})),..._.map(S=>({value:X(S).unwrap(),type:"column",token:g(S)})))}),s})),[]}registerInlineRefToEnv(e,n,s,i){const a=jt(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=$t(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:g(e),relation:r[0]}]}),[]}}class fs{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=g(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}=ge(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?xe((a=(i=n.headercolor)==null?void 0:i.at(0))==null?void 0:a.value):void 0,[]}interpretBody(e){const[n,s]=L.partition(e.body,i=>i instanceof w);return n.length!==1||s.length>0?[new l(o.INVALID_NOTE,"Invalid note syntax",e)]:[...this.interpretNote(n[0])]}interpretNote(e){const n=L.get(e,"callee.expression.literal.value","");return this.note.content=ae(n),[]}}class Ht{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=g(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=Y(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 w?this.interpretField(e):this.interpretField(e.body[0])}interpretField(e){var p,h,d,N,A,v,_;const n=e.callee.op.value,{leftExpression:s,rightExpression:i}=e.callee,a=Xe(s),r=Xe(i);if(ct(a,r))return[new l(o.SAME_ENDPOINT,"Two endpoints are the same",e)];const c=jt(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 S=F(e.args[0]).getValue(),Te=(h=(p=S.delete)==null?void 0:p.at(0))==null?void 0:h.value;this.ref.onDelete=Te instanceof ne?we(Te).unwrap_or(void 0):W(Te).unwrap_or(void 0);const D=(N=(d=S.update)==null?void 0:d.at(0))==null?void 0:N.value;this.ref.onUpdate=D instanceof ne?we(D).unwrap_or(void 0):W(D).unwrap_or(void 0),this.ref.color=(A=S.color)!=null&&A.length?xe((_=(v=S.color)==null?void 0:v.at(0))==null?void 0:_.value):void 0}const f=$t(n);return this.ref.endpoints=[{...Lt(s,this.container),relation:f[0],token:g(s)},{...Lt(i,this.container),relation:f[1],token:g(i)}],this.env.refIds[c]=this.declarationNode,[]}}class zt{constructor(e,n){this.declarationNode=e,this.env=n,this.tableGroup={tables:[]}}interpret(){const e=[];return this.tableGroup.token=g(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}=ge(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]=L.partition(e.body,i=>i instanceof w);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:V(n.body instanceof oe?n.body.body[0].callee:n.body.callee).map(ae).unwrap(),token:g(n)};break}return[]})}interpretFields(e){const n=[];return this.tableGroup.tables=e.map(s=>{const i=Y(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?xe((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:V(s==null?void 0:s.value).map(ae).unwrap(),token:g(s)},[]}}class Qt{constructor(e,n){this.declarationNode=e,this.env=n,this.enum={values:[]}}interpret(){return this.enum.token=g(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}=ge(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=g(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:V(r.value).map(ae).unwrap(),token:g(r)},this.enum.values.push(i),[]})}}class Jt{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=g(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}=ge(e);return this.tablePartial.name=n,[]}interpretSettingList(e){const n=F(e).getValue(),s=L.head(n[E.HeaderColor]);this.tablePartial.headerColor=s?xe(s.value):void 0;const[i]=n[E.Note]||[];return this.tablePartial.note=i&&{value:V(i==null?void 0:i.value).map(ae).unwrap(),token:g(i)},[]}interpretBody(e){const[n,s]=L.partition(e.body,i=>i instanceof w);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 I.Note:return this.tablePartial.note={value:V(n.body instanceof oe?n.body.body[0].callee:n.body.callee).map(ae).unwrap(),token:g(n)},[];case I.Indexes:return this.interpretIndexes(n);default:return[]}})}interpretFields(e){return e.flatMap(n=>this.interpretColumn(n))}interpretColumn(e){var r,c,f,p,h,d,N,A,v;const n=[],s={};s.name=X(e.callee).unwrap();const i=qt(e.args[0]);s.type=i.getValue(),n.push(...i.getErrors()),s.token=g(e),s.inline_refs=[];const a=e.args.slice(1);if(L.last(a)instanceof M){const _=F(a.pop()).getValue();s.pk=!!((r=_[E.PK])!=null&&r.length)||!!((c=_[E.PKey])!=null&&c.length),s.increment=!!((f=_[E.Increment])!=null&&f.length),s.unique=!!((p=_[E.Unique])!=null&&p.length),s.not_null=(h=_[E.NotNull])!=null&&h.length?!0:(d=_[E.Null])!=null&&d.length?!1:void 0,s.dbdefault=Wt((A=(N=_[E.Default])==null?void 0:N.at(0))==null?void 0:A.value);const S=(v=_[E.Note])==null?void 0:v.at(0);s.note=S&&{value:V(S.value).map(ae).unwrap(),token:g(S)};const Te=_[E.Ref]||[];s.inline_refs=Te.flatMap(D=>{const[Ue]=Xe(D.value.expression);if(ct(Ue,e.symbol))return n.push(new l(o.SAME_ENDPOINT,"Two endpoints are the same",D)),[];const pe=D.value.op,B=Y(D.value.expression).unwrap();let te;if(B.length===2){const[de,H]=B;te={schemaName:null,tableName:de,fieldNames:[H],relation:pe.value,token:g(D)}}else if(B.length===3){const[de,H,Ee]=B;te={schemaName:de,tableName:H,fieldNames:[Ee],relation:pe.value,token:g(D)}}else{n.push(new l(o.UNSUPPORTED,"Unsupported",D));const de=B.pop(),H=B.pop();te={schemaName:B.join("."),tableName:H,fieldNames:[de],relation:pe.value,token:g(D)}}return te})}return s.pk||(s.pk=a.some(_=>W(_).unwrap().toLowerCase()==="pk")),s.unique||(s.unique=a.some(_=>W(_).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,h,d,N;const s={columns:[]},i=n;s.token=g(i);const a=[i.callee,...i.args];if(L.last(a)instanceof M){const A=F(a.pop()).getValue();s.pk=!!((r=A[E.PK])!=null&&r.length),s.unique=!!((c=A[E.Unique])!=null&&c.length),s.name=V((p=(f=A[E.Name])==null?void 0:f.at(0))==null?void 0:p.value).unwrap_or(void 0);const v=(h=A[E.Note])==null?void 0:h.at(0);s.note=v&&{value:V(v.value).unwrap(),token:g(v)},s.type=W((N=(d=A[E.Type])==null?void 0:d.at(0))==null?void 0:N.value).unwrap_or(void 0)}return a.flatMap(A=>{if(!(A instanceof ee))return A;const v=[];let _=A;for(;_ instanceof ee;)v.push(_.argumentList),_=_.callee;return v.push(_),v}).forEach(A=>{const{functional:v,nonFunctional:_}=Ce(A).unwrap();s.columns.push(...v.map(S=>({value:S.value.value,type:"expression",token:g(S)})),..._.map(S=>({value:X(S).unwrap(),type:"column",token:g(S)})))}),s})),[]}}class ps{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=g(this.declarationNode),[...this.interpretName(this.declarationNode.name),...this.interpretBody(this.declarationNode.body)]}interpretName(e){if(!e)return this.project.name=null,[];const{name:n}=ge(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 Yt(s,this.env).interpret();return this.project.tables.push(this.env.tables.get(s)),a}case"ref":{const a=new Ht(s,this.env).interpret();return this.project.refs.push(this.env.ref.get(s)),a}case"tablegroup":{const a=new zt(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:V(s.body instanceof oe?s.body.body[0].callee:s.body.callee).map(ae).unwrap(),token:g(s)},[];case"tablepartial":{const a=new Jt(s,this.env).interpret();return this.project.tablePartials.push(this.env.tablePartials.get(s)),a}default:return this.project[s.type.value.toLowerCase()]=V(s.body.callee).unwrap(),[]}})}}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())}}class Es{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(Le(n).unwrap_or(void 0)){case I.Table:return new Yt(n,this.env).interpret();case I.Note:return new fs(n,this.env).interpret();case I.Ref:return new Ht(n,this.env).interpret();case I.TableGroup:return new zt(n,this.env).interpret();case I.TablePartial:return new Jt(n,this.env).interpret();case I.Enum:return new Qt(n,this.env).interpret();case I.Project:return new ps(n,this.env).interpret();default:return[]}});return new J(ds(this.env),e)}}var P=(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))(P||{}),R=(t=>(t[t.None=0]="None",t[t.KeepWhitespace=1]="KeepWhitespace",t[t.InsertAsSnippet=4]="InsertAsSnippet",t))(R||{});function Oe(t){switch(t){case m.Schema:return P.Module;case m.Table:case m.TablePartial:return P.Class;case m.Column:case m.TableGroupField:return P.Field;case m.Enum:return P.Enum;case m.EnumField:return P.EnumMember;case m.TableGroup:return P.Struct;default:return P.Text}}function $e(t,e){if(!t||Je(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 G(){return{suggestions:[]}}function je(t){return{...t,suggestions:t.suggestions.map(e=>({...e,insertText:` ${e.insertText}`}))}}function Qe(t){return{...t,suggestions:t.suggestions.map(e=>({...e,insertText:e.insertText.split("").every(Ye)?e.insertText:`"${e.insertText}"`}))}}function ut(t,e){return t.getOffsetAt(e)}class Kt{constructor(e,n=[]){this.compiler=e,this.triggerCharacters=n}provideCompletionItems(e,n){var h,d;const s=ut(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(N=>on(N)&&Se(s,N)))return G();if(r===void 0)return wt();if([u.STRING_LITERAL,u.QUOTED_STRING].includes(a.kind)&&Se(s,a))return G();const f=this.compiler.container.element(s);if(this.compiler.container.scopeKind(s)===x.TOPLEVEL||f instanceof y&&f.type&&f.type.start<=s&&f.type.end>=s)return wt();const p=[...this.compiler.container.stack(s)].reverse();for(const N of p)if(N instanceof Z)switch((h=N.op)==null?void 0:h.value){case">":case"<":case"<>":case"-":return At(this.compiler,s,N)}else if(N instanceof le)switch((d=N.op)==null?void 0:d.value){case">":case"<":case"<>":case"-":return At(this.compiler,s,N);case".":return Zt(this.compiler,s,N)}else{if(N instanceof se)return _t(this.compiler,s,N);if(N instanceof M)return _t(this.compiler,s,N);if(N instanceof ce)return Ts(this.compiler,s);if(N instanceof be)return Ns(this.compiler,s);if(N instanceof w)return vt(this.compiler,s,N);if(N instanceof y&&(N.bodyColon&&s>=N.bodyColon.end||N.body&&Se(s,N.body)))return vt(this.compiler,s,void 0)}return G()}}function Ns(t,e){const n=t.container.element(e);return Re(t,e,n,[m.TablePartial])}function At(t,e,n){const s=t.container.scopeKind(e);if([x.REF,x.TABLE,x.TABLEPARTIAL].includes(s)){const i=Re(t,e,t.container.element(e),[m.Table,m.Schema,m.Column]);return $e(n.op,e)?je(i):i}return G()}function Re(t,e,n,s){var r;if(n===void 0)return G();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:R.KeepWhitespace,kind:Oe(p),sortText:Oe(p).toString().padStart(2,"0"),range:void 0})))}i=i instanceof y?i.parent:void 0}return Qe(a)}function Ts(t,e){var s;switch(t.container.scopeKind(e)){case x.INDEXES:return tn(t,e);case x.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 Zt(t,e,a)}}return en(t,e)}return G()}function _t(t,e,n){const{token:s}=t.container.token(e);if([u.COMMA,u.LBRACKET].includes(s==null?void 0:s.kind)){const i=gt(t,e);return(s==null?void 0:s.kind)===u.COMMA&&$e(s,e)?je(i):i}if(n.name&&n.name.start<=e&&n.name.end>=e)return gt(t,e);if(n.name instanceof ne){const i=ms(t,e,we(n.name).unwrap_or(""));return(s==null?void 0:s.kind)===u.COLON&&$e(s,e)?je(i):i}return G()}function gt(t,e){const n=t.container.element(e);if(n instanceof K)return G();const s=t.container.scopeKind(e);if(n.body&&!Se(e,n.body)){let i;switch(s){case x.TABLE:case x.TABLEPARTIAL:i=[E.HeaderColor,E.Note];break;case x.TABLEGROUP:i=[E.Color,E.Note];break;default:i=[]}return{suggestions:i.map(a=>({label:a,insertText:`${a}: `,kind:P.Field,insertTextRules:R.KeepWhitespace,range:void 0}))}}switch(s){case x.TABLE:case x.TABLEPARTIAL:return{suggestions:[...[E.PK,E.PKey,E.Null,E.NotNull,E.Increment,E.Unique].map(i=>({label:i,insertText:i,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0})),...[E.Ref,E.Default,E.Note].map(i=>({label:i,insertText:`${i}: `,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0}))]};case x.ENUM:return{suggestions:[...[E.Note].map(i=>({label:i,insertText:`${i}: `,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0}))]};case x.INDEXES:return{suggestions:[...[E.Unique,E.PK].map(i=>({label:i,insertText:i,insertTextRules:R.KeepWhitespace,kind:P.Property,range:void 0})),...[E.Note,E.Name,E.Type].map(i=>({label:i,insertText:`${i}: `,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0}))]};case x.REF:return{suggestions:[E.Update,E.Delete,E.Color].map(i=>({label:i,insertText:`${i}: `,kind:P.Property,insertTextRules:R.KeepWhitespace,range:void 0}))}}return G()}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:P.Value,insertTextRules:R.KeepWhitespace,range:void 0}))};case"type":return{suggestions:["btree","hash"].map(s=>({label:s,insertText:`${s}`,kind:P.Value,insertTextRules:R.KeepWhitespace,range:void 0}))}}return G()}function Zt(t,e,n){const s=_e(n).unwrap_or([]);if(s.pop(),s.some(a=>!$(a)))return G();const i=s.map(a=>W(a).unwrap());return Qe({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:Oe(a),range:void 0}))})}function vt(t,e,n){var i;switch(t.container.scopeKind(e)){case x.TABLE:case x.TABLEPARTIAL:return Is(t,e,n);case x.PROJECT:return Ls(t,e,n);case x.INDEXES:return _s(t,e);case x.ENUM:return bs(t,e,n);case x.REF:{const a=en(t,e);return((i=t.container.token(e).token)==null?void 0:i.kind)===u.COLON&&$e(t.container.token(e).token,e)?je(a):a}case x.TABLEGROUP:return As(t);default:return G()}}function wt(){return{suggestions:["Table","TableGroup","Enum","Project","Ref","TablePartial"].map(t=>({label:t,insertText:t,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))}}function bs(t,e,n){return n!=null&&n.callee&&ht(e,n)===1?Re(t,e,t.container.element(e),[m.Schema,m.Table,m.Column]):G()}function Is(t,e,n){const s=["Note","indexes"];if(!(n!=null&&n.callee))return{suggestions:s.map(a=>({label:a,insertText:a,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))};const i=ht(e,n);return i===0?{suggestions:s.map(a=>({label:a,insertText:a,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))}:i===1?gs(t,e):G()}function Ls(t,e,n){const s=["Table","TableGroup","Enum","Note","Ref","TablePartial"];return n!=null&&n.callee?ht(e,n)===0?{suggestions:s.map(a=>({label:a,insertText:a,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))}:G():{suggestions:s.map(a=>({label:a,insertText:a,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))}}function en(t,e){return Re(t,e,t.container.element(e),[m.Schema,m.Table,m.Column])}function As(t){return{suggestions:[...Qe({suggestions:[...t.parse.publicSymbolTable().entries()].flatMap(([e])=>{const n=ie(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:R.KeepWhitespace,kind:Oe(s),range:void 0}})}).suggestions,...["Note"].map(e=>({label:e,insertText:e,insertTextRules:R.KeepWhitespace,kind:P.Keyword,range:void 0}))]}}function _s(t,e){return tn(t,e)}function gs(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:R.KeepWhitespace,kind:P.TypeParameter,sortText:P.TypeParameter.toString().padStart(2,"0"),range:void 0})),...Re(t,e,t.container.element(e),[m.Enum,m.Schema]).suggestions]}}function tn(t,e){const n=t.container.element(e),s=n==null?void 0:n.parent;if(!((s==null?void 0:s.symbol)instanceof xt))return G();const{symbolTable:i}=s.symbol;return Qe({suggestions:[...i.entries()].flatMap(([a])=>{const r=ie(a).unwrap_or(void 0);if(r===void 0)return[];const{name:c}=r;return{label:c,insertText:c,insertTextRules:R.KeepWhitespace,kind:Oe(m.Column),range:void 0}})})}function ht(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 nn{constructor(e){this.compiler=e}provideDefinition(e,n){var r,c;const{uri:s}=e,i=ut(e,n),a=[...this.compiler.container.stack(i)];for(;a.length!==0;){const f=a.pop();if(!(f!=null&&f.referee))continue;let p;if((r=f.referee)!=null&&r.declaration&&[me.PRIMARY_EXPRESSION,me.VARIABLE,me.PARTIAL_INJECTION].includes(f==null?void 0:f.kind)?{declaration:p}=f.referee:(c=f.referee)!=null&&c.injectorDeclaration&&(p=f.referee.injectorDeclaration),p){const{startPos:h,endPos:d}=p;return[{range:{startColumn:h.column+1,startLineNumber:h.line+1,endColumn:d.column+1,endLineNumber:d.line+1},uri:s}]}}return[]}}class sn{constructor(e){this.compiler=e}provideReferences(e,n){const{uri:s}=e,i=ut(e,n),a=[...this.compiler.container.stack(i)];for(;a.length!==0;){const r=a.pop();if(r&&[me.ELEMENT_DECLARATION,me.FUNCTION_APPLICATION,me.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 vs=Object.freeze(Object.defineProperty({__proto__:null,CompletionItemInsertTextRule:R,CompletionItemKind:P,DBMLCompletionItemProvider:Kt,DBMLDefinitionProvider:nn,DBMLReferencesProvider:sn},Symbol.toStringTag,{value:"Module"}));var x=(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))(x||{});class ws{constructor(){this.source="",this.cache=new Array(16).fill(null),this.nodeIdGenerator=new ln,this.symbolIdGenerator=new dn,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 kn(this.source).lex().chain(n=>new On(n,this.nodeIdGenerator).parse()).chain(({ast:n,tokens:s})=>new hs(n,this.symbolIdGenerator).analyze().map(()=>({ast:n,tokens:s})));return e.getErrors().length>0?e:e.chain(({ast:n,tokens:s})=>new Es(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:L.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 h=Pn(c).find(d=>Se(r,d));if(h===void 0||h instanceof Q)break;f.push(h),c=h}if((i==null?void 0:i.kind)===u.COLON)return f;for(;f.length>0;){let p=!1;const h=L.last(f);if(h instanceof w){const d=this.parse.source();for(let N=h.end;N<e;N+=1)d[N]===`
12
12
  `&&(f.pop(),p=!0)}else h instanceof Z||h instanceof le?this.container.token(e).token!==h.op&&(f.pop(),p=!0):h instanceof M?h.listCloseBracket&&h.end<=e&&(f.pop(),p=!0):h instanceof ce?h.tupleCloseParen&&h.end<=e&&(f.pop(),p=!0):h instanceof oe?h.blockCloseBrace&&h.end<=e&&(f.pop(),p=!0):h instanceof ne||h.end<e&&(f.pop(),p=!0);if(p){const d=L.last(f);d instanceof y&&d.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 K)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(h=>An(p).flatMap(d=>{const N=h.get(d),A=ie(d).unwrap_or(void 0);return!N||!A?[]:{...A,symbol:N}})),c=f.flatMap(h=>h.symbol.symbolTable?h.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])=>({...ie(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 nn(this),referenceProvider:new sn(this),autocompletionProvider:new Kt(this)}}}exports.Compiler=ws;exports.serialize=cn;exports.services=vs;