@dbml/parse 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=Symbo
8
8
  `)}}function DS(e,t,n){return`use {${n}${e.map(e=>` ${e}`).join(n)}${n}} from '${t}'${n}${n}`}function OS(e,t,n){let r=e.lastIndexOf(`
9
9
  `,t-1)+1,i=n;for(;i<e.length&&(e[i]===` `||e[i]===` `);)i++;return i<e.length&&e[i]===`\r`&&i++,i<e.length&&e[i]===`
10
10
  `&&i++,{startOffset:r,endOffset:i}}function kS(e){switch(e){case j.Schema:return Y.Module;case j.Table:case j.TablePartial:return Y.Class;case j.Column:case j.TableGroupField:return Y.Field;case j.Enum:return Y.Enum;case j.EnumField:return Y.EnumMember;case j.TableGroup:return Y.Struct;default:return Y.Text}}function AS(e,t){if(!e||nl(e))return!1;for(let n of e.trailingTrivia){if(n.start>t)break;if(n.kind===v.NEWLINE&&n.end<=t)return!1}return!0}function Z(){return{suggestions:[]}}function jS(e){return{...e,suggestions:e.suggestions.map(e=>({...e,insertText:` ${e.insertText}`}))}}function MS(e){return{...e,suggestions:e.suggestions.map(e=>({...e,insertText:e.quoted?e.insertText:gy(e.insertText??``),quoted:!0}))}}function NS(e,t=`, `){let n=e.suggestions.map(e=>typeof e.label==`string`?e.label:e.label.label).join(t);return n?{...e,suggestions:[{label:`* (all)`,insertText:n,insertTextRules:X.KeepWhitespace,kind:Y.Snippet,sortText:`00`,range:void 0},...e.suggestions]}:e}function PS(e,n,r){let i=[],a=new Set,o=e.layout.getSource(r)??``;for(let s of e.layout.getEntrypoints()){if(s.equals(r))continue;let c=e.usableMembers(s).getFiltered(t);if(c)for(let t of[...c.nonSchemaMembers,...c.schemaMembers]){if(!n.includes(t.kind))continue;let c=t.name;!c||a.has(c)||(a.add(c),i.push(FS(e,c,t.kind,s,r,o)))}}return i}function FS(e,t,n,r,i,a){let o=ES(e,t,n,r,i,a),s=[];if(o.topInsert&&s.push({range:{startLineNumber:1,startColumn:1,endLineNumber:1,endColumn:1},text:o.topInsert}),o.removeRange){let e=IS(a,o.removeRange.startOffset),t=IS(a,o.removeRange.endOffset);s.push({range:{startLineNumber:e.line,startColumn:e.column,endLineNumber:t.line,endColumn:t.column},text:``})}return{label:t,insertText:t,insertTextRules:X.KeepWhitespace,kind:kS(n),detail:`from ${r.basename}`,sortText:`zzz_${kS(n).toString().padStart(2,`0`)}_${t}`,range:void 0,additionalTextEdits:s}}function IS(e,t){let n=1,r=1;for(let i=0;i<t&&i<e.length;i++)e[i]===`
11
- `?(n++,r=1):r++;return{line:n,column:r}}function LS(e,t,n,i,a){let o=e.container.element(i,a);return!(o instanceof P)||!o.isKind(r.Records)||!(o.body instanceof R)||!o.body||!CS(a,o.body)||t.getLineContent(n.lineNumber).trim()!==``?null:o.parent instanceof nd?RS(e,o):zS(e,o)}function RS(e,n){if(!(n.name instanceof B))return Z();let r=n.name.argumentList?.elementList||[],i=r.map(n=>e.nodeReferee(n).getFiltered(t));if(!i||i.length===0)return Z();let a=r.flatMap((t,n)=>{let r=i[n];if(!(r instanceof zu||r instanceof ed))return[];let{name:a}=r.canonicalName(e,t.filepath),{name:o}=r.type(e);return{name:a,type:o}});return a.length===0?Z():{suggestions:[{label:`Record row snippet`,insertText:a.map((e,t)=>`\${${t+1}:${e.name} (${e.type})}`).join(`, `),insertTextRules:X.InsertAsSnippet,kind:Y.Snippet,range:void 0}]}}function zS(e,n){let r=n.parent;if(!(r instanceof P))return Z();let i=e.nodeSymbol(r).getFiltered(t);if(!(i instanceof Ru))return Z();let a;if(n.name instanceof ud){let r=n.name.elementList,i=r.map(n=>e.nodeReferee(n).getFiltered(t)).filter(e=>e!==void 0);a=r.flatMap((t,n)=>{let r=i[n];if(!(r instanceof zu||r instanceof ed))return[];let{name:a}=r.canonicalName(e,t.filepath),{name:o}=r.type(e);return{name:a,type:o}})}else{let t=i.mergedColumns(e).flatMap(t=>{let{name:n}=t.canonicalName(e,t.filepath),{name:r}=t.type(e);return{name:n,type:r}});if(!t)return Z();a=t}return a.length===0?Z():{suggestions:[{label:`Record row snippet`,insertText:a.map((e,t)=>`\${${t+1}:${e.name} (${e.type})}`).join(`, `),insertTextRules:X.InsertAsSnippet,kind:Y.Snippet,range:void 0}]}}function BS(e,t,n,r,i){let a=e.parse.ast(t);for(let o of a.body)if(o instanceof rd&&n>=o.start&&n<=o.fullEnd)return VS(e,t,n,o,i,r);return null}function VS(e,t,n,r,i,a){if(r.importPath&&CS(n,r.importPath))return KS(e,t,r.importPath,i,r);if(r.importPath&&n>=r.importPath.end)return Z();if(r.fromKeyword&&n>r.fromKeyword.end)return KS(e,t,void 0,i,r);if(r.specifiers instanceof ad){if(!r.specifiers.openBrace){let e=GS();return AS(r.useKeyword,n)?jS(e):e}return HS(e,t,n,r.specifiers,r.importPath,a)}if(r.specifiers instanceof md)return Z();let o=GS();return AS(r.useKeyword,n)?jS(o):o}function HS(e,t,n,r,i,a){for(let o of r.specifiers){let r=!Number.isNaN(o.start)&&n>=o.start&&n<=o.end,s=a===o.importKind||a===o.asKeyword;if(r||s){if(o.importKind&&n>o.importKind.end){let n=o.getSymbolKind();if(n!==void 0&&n!==j.Schema)return WS(e,t,i,n)}return US()}}return US()}function US(){return{suggestions:Object.keys(Mu).map(e=>({label:e.toLowerCase(),insertText:`${e.toLowerCase()} `,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}}function WS(e,n,r,i){if(!r)return Z();let a=jl(n,r.value);if(!a)return Z();let o=e.usableMembers(a).getFiltered(t);if(!o)return Z();let s=new Set;for(let n of o.schemaMembers){let r=e.symbolMembers(n).getFiltered(t)??[];for(let e of r){if(e.kind!==i||e instanceof $u&&!e.canBeImported)continue;let t=e.name;t&&(n.isPublicSchema()?s.add(t):s.add(`${n.name}.${t}`))}}return{suggestions:[...s].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:kS(i),range:void 0}))}}function GS(){return{suggestions:[{label:`* from`,detail:`import all`,insertText:"* from '${1:./path}'",insertTextRules:X.InsertAsSnippet,kind:Y.Snippet,range:void 0},{label:`{ } from`,detail:`import named`,insertText:"{ ${1:type} ${2:name} } from '${3:./path}'",insertTextRules:X.InsertAsSnippet,kind:Y.Snippet,range:void 0}]}}function KS(e,t,n,r,i){let a=t.dirname,o=n?n.value:`./`,s=n===void 0,c;if(n){let e=yS(r,n);c={startLineNumber:e.startLineNumber,startColumn:e.startColumn+1,endLineNumber:e.endLineNumber,endColumn:e.endColumn-1}}let l=new Map,u=new Map,d=Wc(e.layout.getEntrypoints().flatMap(t=>[...e.reachableFiles(t)]),e=>e.intern());for(let n of d){if(n.equals(t))continue;let r=n.relativeTo(a);if(r.endsWith(`.dbml`)&&(r=r.slice(0,-5)),r.startsWith(`.`)||(r=`./${r}`),o&&!r.startsWith(o))continue;let d=`${o}${r.slice(o.length).split(`/`)[0]}`,f=Al.resolve(a,d),p=e.layout.isDirectory(f);if(JS(e,n,qS(i))&&u.set(d,!0),l.has(d))continue;let m=s?`'${d}'`:d;l.set(d,{label:d,insertText:m,insertTextRules:X.KeepWhitespace,kind:p?Y.Folder:Y.File,sortText:`${p?`2`:`3`}${d}`,range:c})}for(let[e,t]of l)u.get(e)&&(t.sortText=`${t.kind===Y.File?`0`:`1`}${e}`,t.detail=`best match`);return{suggestions:[...l.values()]}}function qS(e){let t=e.specifiers;return t instanceof ad?t.specifiers.flatMap(e=>{let t=k(e.name),n=e.importKind?.value.toLowerCase();return!t||!n?[]:[{name:t,kind:n}]}):[]}function JS(e,n,r){if(r.length===0)return!1;let i=e.usableMembers(n).getFiltered(t);return i?r.every(({name:e,kind:t})=>i.nonSchemaMembers.some(n=>n.kind===t&&n.name===e)):!1}var YS=class{constructor(e,t={}){this.compiler=e,this.triggerCharacters=t.triggerCharacters??[]}provideCompletionItems(e,t){let n=Al.fromUri(String(e.uri)),r=vS(e,t),i=LS(this.compiler,e,t,n,r);if(i!==null)return i;let a=this.compiler.token.flatStream(n),{token:o,index:s}=this.compiler.container.token(n,r),c=s===void 0?a[0]:a[s+1];if([...o?.trailingTrivia||[],...o?.leadingTrivia||[],...c?.leadingTrivia||[]].find(e=>al(e)&&CS(r,e)))return Z();if(s===void 0)return cC();let l=BS(this.compiler,n,r,o,e);if(l!==null)return l;if([v.STRING_LITERAL,v.QUOTED_STRING].includes(o.kind)&&CS(r,o))return Z();let u=this.compiler.container.element(n,r);if(this.compiler.container.scopeKind(n,r)===Q.TOPLEVEL||u instanceof P&&u.type&&u.type.start<=r&&u.type.end>=r)return cC();let d=[...this.compiler.container.stack(n,r)].reverse();for(let e of d)if(e instanceof I)switch(e.op?.value){case`>`:case`<`:case`<>`:case`-`:return ZS(this.compiler,n,r,e);case`~`:return XS(this.compiler,n,r);default:}else if(e instanceof sd)switch(e.op?.value){case`>`:case`<`:case`<>`:case`-`:return ZS(this.compiler,n,r,e);case`.`:return oC(this.compiler,n,r,e);default:}else if(e instanceof F)return nC(this.compiler,n,r,e);else if(e instanceof z)return nC(this.compiler,n,r,e);else if(e instanceof ud)return eC(this.compiler,n,r,e);else if(e instanceof dd)return tC(this.compiler,n,r);else if(e instanceof B)return mC(this.compiler,n,r,e);else if(e instanceof L)return sC(this.compiler,n,r,e);else if(e instanceof P){if(wS(r,e))return pC(this.compiler,n,r,e);if(e.bodyColon&&r>=e.bodyColon.end||e.body&&CS(r,e.body))return sC(this.compiler,n,r,void 0)}return Z()}};function XS(e,t,n){return $S(e,t,n,e.parse.ast(t),[j.TablePartial])}function ZS(e,t,n,r){let i=e.container.scopeKind(t,n);if([Q.REF,Q.TABLE,Q.TABLEPARTIAL].includes(i)){let i=$S(e,t,n,e.container.element(t,n),[j.Table,j.Schema,j.Column]);return AS(r.op,n)?jS(i):i}return Z()}function QS(e,n,r){let i=e.symbolMembers(n).getFiltered(t);return i?MS({suggestions:i.filter(e=>r.includes(e.kind)).filter(e=>!(e instanceof Fu&&e.isPublicSchema())).flatMap(e=>{let t=e.name;if(t===void 0)return[];let r=e.originalFilepath,i=r&&!r.equals(n.filepath)?`from ${r.basename}`:`this file`;return{label:t,insertText:t,insertTextRules:X.KeepWhitespace,kind:kS(e.kind),sortText:kS(e.kind).toString().padStart(2,`0`),detail:i,range:void 0}}).filter(e=>e.label!==``)}):Z()}function $S(e,n,r,i,a){if(i===void 0)return Z();let o=i,s={suggestions:[]},c;for(;o;){o instanceof nd&&(c=o);let n=e.nodeSymbol(o).getFiltered(t);if(n){let t=QS(e,n,a).suggestions,r=e=>{switch(e){case Y.Field:return 0;case Y.Module:return 1;case Y.Class:return 2;default:return 3}};t.sort((e,t)=>r(e.kind)-r(t.kind)),s.suggestions.push(...t)}o=o instanceof P?o.parent:void 0}if(c?.filepath){let t=c.filepath,n=new Set(s.suggestions.map(e=>typeof e.label==`string`?e.label:e.label.label));for(let r of PS(e,a,t)){let e=typeof r.label==`string`?r.label:r.label.label;n.has(e)||(n.add(e),s.suggestions.push(r))}}return MS(s)}function eC(e,n,i,a){let o=e.container.scopeKind(n,i),s=e.container.element(n,i),c=[...e.container.stack(n,i)];for(let t of c)if(t instanceof B&&t.argumentList===a)return mC(e,n,i,t);if(s instanceof P&&s.isKind(r.Records)&&!(s.name instanceof B)&&wS(i,s)){let n=s.parent?e.nodeSymbol(s.parent).getFiltered(t):void 0,r=s.name?e.nodeReferee(s.name).getFiltered(t):void 0,i=n||r;if(i){let t=QS(e,i,[j.Column]);return _u(a)?NS(t):t}}switch(o){case Q.INDEXES:return vC(e,n,i);case Q.REF:for(;c.length>0;){let t=c.pop();if(t instanceof sd&&t.op?.value===`.`)return oC(e,n,i,t)}return fC(e,n,i);default:break}return Z()}function tC(e,t,n){return e.container.scopeKind(t,n)===Q.RECORDS?$S(e,t,n,e.container.element(t,n),[j.Schema,j.Enum,j.EnumField]):Z()}function nC(e,t,n,r){let{token:i}=e.container.token(t,n);if([v.COMMA,v.LBRACKET].includes(i?.kind)){let r=rC(e,t,n);return i?.kind===v.COMMA&&AS(i,n)?jS(r):r}if(r.name&&r.name.start<=n&&r.name.end>=n)return rC(e,t,n);if(r.name instanceof od){let a=iC(e,t,n,hu(r.name)??``);return i?.kind===v.COLON&&AS(i,n)?jS(a):a}return Z()}function rC(e,t,n){let r=e.container.element(t,n);if(r instanceof nd)return Z();let a=e.container.scopeKind(t,n);if(r.body&&!CS(n,r.body)){let e;switch(a){case Q.TABLE:case Q.TABLEPARTIAL:e=[i.HeaderColor,i.Note];break;case Q.TABLEGROUP:e=[i.Color,i.Note];break;default:e=[]}return{suggestions:e.map(e=>({label:e,insertText:`${e}: `,kind:Y.Field,insertTextRules:X.KeepWhitespace,range:void 0}))}}switch(a){case Q.TABLE:case Q.TABLEPARTIAL:return{suggestions:[...[i.PK,i.PrimaryKey,i.Null,i.NotNull,i.Increment,i.Unique].map(e=>({label:e,insertText:e,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0})),...[i.Ref,i.Default,i.Note,i.Check].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))]};case Q.ENUM:return{suggestions:[...[i.Note].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))]};case Q.INDEXES:return{suggestions:[...[i.Unique,i.PK].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Property,range:void 0})),...[i.Note,i.Name,i.Type].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))]};case Q.REF:return{suggestions:[i.Update,i.Delete,i.Color].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))};case Q.CHECKS:return{suggestions:[i.Name].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))};default:break}return Z()}function iC(e,t,n,r){switch(r?.toLowerCase()){case`update`:case`delete`:return{suggestions:[`cascade`,`set default`,`set null`,`restrict`].map(e=>({label:e,insertText:e,kind:Y.Value,insertTextRules:X.KeepWhitespace,range:void 0}))};case`type`:return{suggestions:[`btree`,`hash`].map(e=>({label:e,insertText:`${e}`,kind:Y.Value,insertTextRules:X.KeepWhitespace,range:void 0}))};case`default`:return $S(e,t,n,e.container.element(t,n),[j.Schema,j.Enum]);default:break}return Z()}function aC(e,n,r){if(!r)return[];let i=[],a=r;for(;a;){let n=e.nodeSymbol(a).getFiltered(t);if(n){let r=e.symbolMembers(n).getFiltered(t);i.push(...r||[])}a=a instanceof P?a.parent:void 0}for(let e of n){let t=i.filter(t=>t.name===e);if(t.length===0)return[];i=t}return i}function oC(e,n,r,i){let a=yu(i)??[];return a.pop(),a.some(e=>!C(e))?Z():MS({suggestions:aC(e,a.map(e=>k(e)),e.container.element(n,r)).flatMap(n=>e.symbolMembers(n).getFiltered(t)||[]).flatMap(e=>{let t=e.name;return t===void 0?[]:{label:t,insertText:t,kind:kS(e.kind),range:void 0}})})}function sC(e,t,n,i){switch(e.container.scopeKind(t,n)){case Q.TABLE:case Q.TABLEPARTIAL:return uC(e,t,n,i);case Q.PROJECT:return dC(e,t,n,i);case Q.INDEXES:return gC(e,t,n);case Q.ENUM:return lC(e,t,n,i);case Q.REF:{let r=fC(e,t,n);return e.container.token(t,n).token?.kind===v.COLON&&AS(e.container.token(t,n).token,n)?jS(r):r}case Q.TABLEGROUP:return hC(e,t);case Q.DIAGRAMVIEW:return xC();case Q.CUSTOM:{let i=e.container.element(t,n);if(i instanceof P){let a=i.parentNode,o=a instanceof R?a.parentNode:void 0;if(o instanceof P&&o.isKind(r.DiagramView))return SC(e,t,n,i)}return Z()}default:return Z()}}function cC(){return{suggestions:[`Table`,`TableGroup`,`Enum`,`Project`,`Ref`,`TablePartial`,`Records`,`DiagramView`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}}function lC(e,t,n,r){return r?.callee&&yC(n,r)===1?$S(e,t,n,e.container.element(t,n),[j.Schema,j.Table,j.Column]):Z()}function uC(e,t,n,r){let i=[`Note`,`indexes`,`checks`,`Records`];if(!r?.callee)return{suggestions:i.map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))};let a=yC(n,r);return a===0?{suggestions:i.map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}:a===1?_C(e,t,n):Z()}function dC(e,t,n,r){return!r?.callee||yC(n,r)===0?{suggestions:[`Table`,`TableGroup`,`Enum`,`Note`,`Ref`,`TablePartial`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}:Z()}function fC(e,t,n){return $S(e,t,n,e.container.element(t,n),[j.Schema,j.Table,j.Column])}function pC(e,t,n,i){return i.isKind(r.Records)?$S(e,t,n,i.parent,[j.Schema,j.Table]):Z()}function mC(e,n,i,a){let o=e.container.element(n,i),s=a.callee&&CS(i,a.callee),c=a.argumentList&&CS(i,a.argumentList);if(o instanceof P&&o.isKind(r.Records)&&wS(i,o)){if(s)return $S(e,n,i,o.parent,[j.Schema,j.Table]);if(!c)return Z();let r=a.callee;if(!r)return Z();let l=yu(r)??[r],u=l[l.length-1],d=u?e.nodeReferee(u).getFiltered(t):void 0;if(!d)return Z();let f=QS(e,d,[j.Column]),{argumentList:p}=a;return!p||!_u(p)?f:NS(f)}let l=[...e.container.stack(n,i)];for(let o of l){if(!c||!(o instanceof L)||o.callee!==a||(k(a.callee)??``).toLowerCase()!==r.Records)continue;let s=e.nodeSymbol(e.container.element(n,i)).getFiltered(t);if(!s)return Z();let l=QS(e,s,[j.Column]),{argumentList:u}=a;return!u||!_u(u)?l:NS(l)}return Z()}function hC(e,t){return{suggestions:[...MS({suggestions:(e.parse.publicSymbolTable(t)??[]).flatMap(e=>{if(e.kind!==j.Table&&e.kind!==j.Schema)return[];let t=e.name;return t===void 0||e instanceof Fu&&e.isPublicSchema()?[]:{label:t,insertText:t,insertTextRules:X.KeepWhitespace,kind:kS(e.kind),range:void 0}})}).suggestions,...[`Note`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))]}}function gC(e,t,n){return vC(e,t,n)}function _C(e,t,n){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`.split(`.`).map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.TypeParameter,sortText:Y.TypeParameter.toString().padStart(2,`0`),range:void 0})),...$S(e,t,n,e.container.element(t,n),[j.Enum,j.Schema]).suggestions]}}function vC(e,n,r){let i=e.container.element(n,r)?.parent,a=i?e.nodeSymbol(i).getFiltered(t):void 0;if(!a||!a?.isKind(j.Table))return Z();let o=e.symbolMembers(a).getFiltered(t);return o?MS({suggestions:o.flatMap(n=>{let r=n.declaration?e.nodeFullname(n.declaration):void 0,i=r&&!r.hasValue(t)?r.getValue()?.at(-1):void 0;return i?{label:i,insertText:i,insertTextRules:X.KeepWhitespace,kind:kS(j.Column),range:void 0}:[]})}):Z()}function yC(e,t){if(!t.callee)return-1;let n=[t.callee,...t.args],r=n.findIndex(t=>e<=t.end);return r===-1?n.length:r}var bC={label:`*`,insertText:`*`,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0};function xC(){return{suggestions:[...[`Tables`,`TableGroups`,`Notes`,`Schemas`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0})),bC]}}function SC(e,t,n,i){switch(i.getElementKind()){case r.DiagramViewTables:return{suggestions:[bC,...$S(e,t,n,e.parse.ast(t),[j.Table,j.Schema]).suggestions]};case r.DiagramViewTableGroups:return{suggestions:[bC,...$S(e,t,n,e.parse.ast(t),[j.TableGroup]).suggestions]};case r.DiagramViewSchemas:return{suggestions:[bC,{label:y,insertText:y,insertTextRules:X.KeepWhitespace,kind:Y.Module,range:void 0},...$S(e,t,n,e.parse.ast(t),[j.Schema]).suggestions]};case r.DiagramViewNotes:return{suggestions:[bC,...$S(e,t,n,e.parse.ast(t),[j.StickyNote]).suggestions]};default:return Z()}}const CC={comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`},{open:"`",close:"`"}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`},{open:"`",close:"`"}],indentationRules:{increaseIndentPattern:/^(.*\{[^}]*|\s*[{[].*)$/,decreaseIndentPattern:/^(.*\}.*|\s*[}\]].*)$/}};var wC={tokenPostfix:`.dbml`,brackets:[{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`{`,close:`}`,token:`delimiter.curly`}],decls:[`project`,`tablegroup`,`table`,`enum`,`ref`,`note`,`tablepartial`,`records`,`checks`,`diagramview`,`use`,`reuse`,`from`],dataTypes:`TINYINT.SMALLINT.MEDIUMINT.INT.INTEGER.BIGINT.FLOAT.DOUBLE.DECIMAL.DEC.BIT.BOOL.REAL.MONEY.BINARY_FLOAT.BINARY_DOUBLE.smallmoney.ENUM.CHAR.BINARY.VARCHAR.VARBINARY.TINYBLOB.TINYTEXT.BLOB.TEXT.MEDIUMBLOB.MEDIUMTEXT.LONGBLOB.LONGTEXT.SET.INET6.UUID.NVARCHAR.NCHAR.NTEXT.IMAGE.VARCHAR2.NVARCHAR2.DATE.TIME.DATETIME.DATETIME2.TIMESTAMP.YEAR.smalldatetime.datetimeoffset.XML.sql_variant.uniqueidentifier.CURSOR.BFILE.CLOB.NCLOB.RAW`.split(`.`),settings:[`indexes`,`ref`,`note`,`headercolor`,`pk`,`null`,`increment`,`unique`,`default`,`note`,`primary`,`key`,`name`,`as`,`color`,`check`,`tables`,`tablegroups`,`notes`,`schemas`],symbols:/[=><!~?:&|+\-/^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,newline:/[\r\n]/,digits:/\d+(_+\d+)*/,idtf:/[\p{L}0-9_]+/u,ignoreCase:!0,unicode:!0,tokenizer:{root:[[/[{}[\]()]/,`@bracket`],[/[,.:]/,`delimiter`],{include:`@numbers`},{include:`common`}],common:[{include:`@whitespace`},[/[<>-]/,`operators`],[/\*/,`keyword.wildcard`],[/("[^"\\]*(?:\\.[^"\\]*)*")(\s+)(@idtf(?:\.@idtf*)*)/,[`string`,``,`keyword`]],[/"([^"\\]|\\.)*$/,``],[/'([^'\\]|\\.)*$/,``],[/"/,`string`,`@string_double`],[/'/,`string`,`@string_single`],[/`/,`string`,`@string_backtick`],[/(@idtf)(\s+)(@idtf(?:\.@idtf)*)/,{cases:{"$1@decls":[`keyword`,``,`identifier`],"$1==not":{cases:{"$3==null":[`keyword`,``,`keyword`],"@default":[`identifier`,``,`identifier`]}},"@default":[`identifier`,``,`keyword`]}}],[/@idtf/,{cases:{"@dataTypes":`keyword`,"@decls":`keyword`,"@settings":`keyword`,"@default":`identifier`}}]],numbers:[[/0[xX][0-9a-fA-F]*/,`number`],[/[$][+-]*\d*(\.\d*)?/,`number`],[/((\d+(\.\d*)?)|(\.\d+))([eE][-+]?\d+)?/,`number`],[/#([0-9A-F]{3}){1,2}/,`number.hex`]],string_double:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`]],string_single:[[/[^\\']+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/'/,`string`,`@pop`]],string_backtick:[[/[^\\`$]+/,`string`],[/@escapes/,`string.escape`],[/`/,`string`,`@pop`]],endTripleQuotesString:[[/\\'/,`string`],[/(.*[^\\])?(\\\\)*'''/,`string`,`@popall`],[/.*$/,`string`]],whitespace:[[/[ \t\r\n]+/,``],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`],[/'''(.*[^\\])?(\\\\)*'''/,`string`],[/'''.*$/,`string`,`@endTripleQuotesString`]],comment:[[/[^/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[/*]/,`comment`]]}};function TC(e,t){let n=this.token.flatStream(e),{index:r,token:i}=this.container.token(e,t),a=r===void 0?-1:mc(n,e=>!e.isInvalid,r);if(a===-1)return[this.parse.ast(e)];let o=n[a].start,s=this.parse.ast(e),c=[s];for(;;){let e=Ld(s).find(e=>CS(o,e));if(e===void 0||e instanceof $c)break;c.push(e),s=e}if(i?.kind===v.COLON)return c;for(;c.length>0;){let n=!1,r=g(c);if(r instanceof L){let i=this.getSource(e)||``;for(let e=r.end;e<t;e+=1)i[e]===`
11
+ `?(n++,r=1):r++;return{line:n,column:r}}function LS(e,t,n,i,a){let o=e.container.element(i,a);return!(o instanceof P)||!o.isKind(r.Records)||!(o.body instanceof R)||!o.body||!CS(a,o.body)||t.getLineContent(n.lineNumber).trim()!==``?null:o.parent instanceof nd?RS(e,o):zS(e,o)}function RS(e,n){if(!(n.name instanceof B))return Z();let r=n.name.argumentList?.elementList||[],i=r.map(n=>e.nodeReferee(n).getFiltered(t));if(!i||i.length===0)return Z();let a=r.flatMap((t,n)=>{let r=i[n];if(!(r instanceof zu||r instanceof ed))return[];let{name:a}=r.canonicalName(e,t.filepath),{name:o}=r.type(e);return{name:a,type:o}});return a.length===0?Z():{suggestions:[{label:`Record row snippet`,insertText:a.map((e,t)=>`\${${t+1}:${e.name} (${e.type})}`).join(`, `),insertTextRules:X.InsertAsSnippet,kind:Y.Snippet,range:void 0}]}}function zS(e,n){let r=n.parent;if(!(r instanceof P))return Z();let i=e.nodeSymbol(r).getFiltered(t);if(!(i instanceof Ru))return Z();let a;if(n.name instanceof ud){let r=n.name.elementList,i=r.map(n=>e.nodeReferee(n).getFiltered(t)).filter(e=>e!==void 0);a=r.flatMap((t,n)=>{let r=i[n];if(!(r instanceof zu||r instanceof ed))return[];let{name:a}=r.canonicalName(e,t.filepath),{name:o}=r.type(e);return{name:a,type:o}})}else{let t=i.mergedColumns(e).flatMap(t=>{let{name:n}=t.canonicalName(e,t.filepath),{name:r}=t.type(e);return{name:n,type:r}});if(!t)return Z();a=t}return a.length===0?Z():{suggestions:[{label:`Record row snippet`,insertText:a.map((e,t)=>`\${${t+1}:${e.name} (${e.type})}`).join(`, `),insertTextRules:X.InsertAsSnippet,kind:Y.Snippet,range:void 0}]}}function BS(e,t,n,r,i){let a=e.parse.ast(t);for(let o of a.body)if(o instanceof rd&&n>=o.start&&n<=o.fullEnd)return VS(e,t,n,o,i,r);return null}function VS(e,t,n,r,i,a){if(r.importPath&&CS(n,r.importPath))return KS(e,t,r.importPath,i,r);if(r.importPath&&n>=r.importPath.end)return Z();if(r.fromKeyword&&n>r.fromKeyword.end)return KS(e,t,void 0,i,r);if(r.specifiers instanceof ad){if(!r.specifiers.openBrace){let e=GS();return AS(r.useKeyword,n)?jS(e):e}return HS(e,t,n,r.specifiers,r.importPath,a)}if(r.specifiers instanceof md)return Z();let o=GS();return AS(r.useKeyword,n)?jS(o):o}function HS(e,t,n,r,i,a){for(let o of r.specifiers){let r=!Number.isNaN(o.start)&&n>=o.start&&n<=o.end,s=a===o.importKind||a===o.asKeyword;if(r||s){if(o.importKind&&n>o.importKind.end){let n=o.getSymbolKind();if(n!==void 0&&n!==j.Schema)return WS(e,t,i,n)}return US()}}return US()}function US(){return{suggestions:Object.keys(Mu).map(e=>({label:e.toLowerCase(),insertText:`${e.toLowerCase()} `,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}}function WS(e,n,r,i){if(!r)return Z();let a=jl(n,r.value);if(!a)return Z();let o=e.usableMembers(a).getFiltered(t);if(!o)return Z();let s=new Set;for(let n of o.schemaMembers){let r=e.symbolMembers(n).getFiltered(t)??[];for(let e of r){if(e.kind!==i||e instanceof $u&&!e.canBeImported)continue;let t=e.name;t&&(n.isPublicSchema()?s.add(t):s.add(`${n.name}.${t}`))}}return{suggestions:[...s].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:kS(i),range:void 0}))}}function GS(){return{suggestions:[{label:`* from`,detail:`import all`,insertText:"* from '${1:./path}'",insertTextRules:X.InsertAsSnippet,kind:Y.Snippet,range:void 0},{label:`{ } from`,detail:`import named`,insertText:"{ ${1:type} ${2:name} } from '${3:./path}'",insertTextRules:X.InsertAsSnippet,kind:Y.Snippet,range:void 0}]}}function KS(e,t,n,r,i){let a=t.dirname,o=n?n.value:`./`,s=n===void 0,c;if(n){let e=yS(r,n);c={startLineNumber:e.startLineNumber,startColumn:e.startColumn+1,endLineNumber:e.endLineNumber,endColumn:e.endColumn-1}}let l=new Map,u=new Map,d=Wc(e.layout.getEntrypoints().flatMap(t=>[...e.reachableFiles(t)]),e=>e.intern());for(let n of d){if(n.equals(t))continue;let r=n.relativeTo(a);if(r.endsWith(`.dbml`)&&(r=r.slice(0,-5)),r.startsWith(`.`)||(r=`./${r}`),o&&!r.startsWith(o))continue;let d=`${o}${r.slice(o.length).split(`/`)[0]}`,f=Al.resolve(a,d),p=e.layout.isDirectory(f);if(JS(e,n,qS(i))&&u.set(d,!0),l.has(d))continue;let m=s?`'${d}'`:d;l.set(d,{label:d,insertText:m,insertTextRules:X.KeepWhitespace,kind:p?Y.Folder:Y.File,sortText:`${p?`2`:`3`}${d}`,range:c})}for(let[e,t]of l)u.get(e)&&(t.sortText=`${t.kind===Y.File?`0`:`1`}${e}`,t.detail=`best match`);return{suggestions:[...l.values()]}}function qS(e){let t=e.specifiers;return t instanceof ad?t.specifiers.flatMap(e=>{let t=k(e.name),n=e.importKind?.value.toLowerCase();return!t||!n?[]:[{name:t,kind:n}]}):[]}function JS(e,n,r){if(r.length===0)return!1;let i=e.usableMembers(n).getFiltered(t);return i?r.every(({name:e,kind:t})=>i.nonSchemaMembers.some(n=>n.kind===t&&n.name===e)):!1}var YS=class{constructor(e,t={}){this.compiler=e,this.triggerCharacters=t.triggerCharacters??[]}provideCompletionItems(e,t){let n=Al.fromUri(String(e.uri)),r=vS(e,t),i=LS(this.compiler,e,t,n,r);if(i!==null)return i;let a=this.compiler.token.flatStream(n),{token:o,index:s}=this.compiler.container.token(n,r),c=s===void 0?a[0]:a[s+1];if([...o?.trailingTrivia||[],...o?.leadingTrivia||[],...c?.leadingTrivia||[]].find(e=>al(e)&&CS(r,e)))return Z();if(s===void 0)return cC();let l=BS(this.compiler,n,r,o,e);if(l!==null)return l;if([v.STRING_LITERAL,v.QUOTED_STRING].includes(o.kind)&&CS(r,o))return Z();let u=this.compiler.container.element(n,r);if(this.compiler.container.scopeKind(n,r)===Q.TOPLEVEL||u instanceof P&&u.type&&u.type.start<=r&&u.type.end>=r)return cC();let d=[...this.compiler.container.stack(n,r)].reverse();for(let e of d)if(e instanceof I)switch(e.op?.value){case`>`:case`<`:case`<>`:case`-`:return ZS(this.compiler,n,r,e);case`~`:return XS(this.compiler,n,r);default:}else if(e instanceof sd)switch(e.op?.value){case`>`:case`<`:case`<>`:case`-`:return ZS(this.compiler,n,r,e);case`.`:return oC(this.compiler,n,r,e);default:}else if(e instanceof F)return nC(this.compiler,n,r,e);else if(e instanceof z)return nC(this.compiler,n,r,e);else if(e instanceof ud)return eC(this.compiler,n,r,e);else if(e instanceof dd)return tC(this.compiler,n,r);else if(e instanceof B)return mC(this.compiler,n,r,e);else if(e instanceof L)return sC(this.compiler,n,r,e);else if(e instanceof P){if(wS(r,e))return pC(this.compiler,n,r,e);if(e.bodyColon&&r>=e.bodyColon.end||e.body&&CS(r,e.body))return sC(this.compiler,n,r,void 0)}return Z()}};function XS(e,t,n){return $S(e,t,n,e.parse.ast(t),[j.TablePartial])}function ZS(e,t,n,r){let i=e.container.scopeKind(t,n);if([Q.REF,Q.TABLE,Q.TABLEPARTIAL].includes(i)){let i=$S(e,t,n,e.container.element(t,n),[j.Table,j.Schema,j.Column]);return AS(r.op,n)?jS(i):i}return Z()}function QS(e,n,r){let i=e.symbolMembers(n).getFiltered(t);return i?MS({suggestions:i.filter(e=>r.includes(e.kind)).filter(e=>!(e instanceof Fu&&e.isPublicSchema())).flatMap(e=>{let t=e.name;if(t===void 0)return[];let r=e.originalFilepath,i=r&&!r.equals(n.filepath)?`from ${r.basename}`:`this file`;return{label:t,insertText:t,insertTextRules:X.KeepWhitespace,kind:kS(e.kind),sortText:kS(e.kind).toString().padStart(2,`0`),detail:i,range:void 0}}).filter(e=>e.label!==``)}):Z()}function $S(e,n,r,i,a){if(i===void 0)return Z();let o=i,s={suggestions:[]},c;for(;o;){o instanceof nd&&(c=o);let n=e.nodeSymbol(o).getFiltered(t);if(n){let t=QS(e,n,a).suggestions,r=e=>{switch(e){case Y.Field:return 0;case Y.Module:return 1;case Y.Class:return 2;default:return 3}};t.sort((e,t)=>r(e.kind)-r(t.kind)),s.suggestions.push(...t)}o=o instanceof P?o.parent:void 0}if(c?.filepath){let t=c.filepath,n=new Set(s.suggestions.map(e=>typeof e.label==`string`?e.label:e.label.label));for(let r of PS(e,a,t)){let e=typeof r.label==`string`?r.label:r.label.label;n.has(e)||(n.add(e),s.suggestions.push(r))}}return MS(s)}function eC(e,n,i,a){let o=e.container.scopeKind(n,i),s=e.container.element(n,i),c=[...e.container.stack(n,i)];for(let t of c)if(t instanceof B&&t.argumentList===a)return mC(e,n,i,t);if(s instanceof P&&s.isKind(r.Records)&&!(s.name instanceof B)&&wS(i,s)){let n=s.parent?e.nodeSymbol(s.parent).getFiltered(t):void 0,r=s.name?e.nodeReferee(s.name).getFiltered(t):void 0,i=n||r;if(i){let t=QS(e,i,[j.Column]);return _u(a)?NS(t):t}}switch(o){case Q.INDEXES:return vC(e,n,i);case Q.REF:for(;c.length>0;){let t=c.pop();if(t instanceof sd&&t.op?.value===`.`)return oC(e,n,i,t)}return fC(e,n,i);default:break}return Z()}function tC(e,t,n){return e.container.scopeKind(t,n)===Q.RECORDS?$S(e,t,n,e.container.element(t,n),[j.Schema,j.Enum,j.EnumField]):Z()}function nC(e,t,n,r){let{token:i}=e.container.token(t,n);if([v.COMMA,v.LBRACKET].includes(i?.kind)){let r=rC(e,t,n);return i?.kind===v.COMMA&&AS(i,n)?jS(r):r}if(r.name&&r.name.start<=n&&r.name.end>=n)return rC(e,t,n);if(r.name instanceof od){let a=iC(e,t,n,hu(r.name)??``);return i?.kind===v.COLON&&AS(i,n)?jS(a):a}return Z()}function rC(e,t,n){let r=e.container.element(t,n);if(r instanceof nd)return Z();let a=e.container.scopeKind(t,n);if(r.body&&!CS(n,r.body)){let e;switch(a){case Q.TABLE:case Q.TABLEPARTIAL:e=[i.HeaderColor,i.Note];break;case Q.TABLEGROUP:e=[i.Color,i.Note];break;default:e=[]}return{suggestions:e.map(e=>({label:e,insertText:`${e}: `,kind:Y.Field,insertTextRules:X.KeepWhitespace,range:void 0}))}}switch(a){case Q.TABLE:case Q.TABLEPARTIAL:return{suggestions:[...[i.PK,i.PrimaryKey,i.Null,i.NotNull,i.Increment,i.Unique].map(e=>({label:e,insertText:e,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0})),...[i.Ref,i.Default,i.Note,i.Check].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))]};case Q.ENUM:return{suggestions:[...[i.Note].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))]};case Q.INDEXES:return{suggestions:[...[i.Unique,i.PK].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Property,range:void 0})),...[i.Note,i.Name,i.Type].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))]};case Q.REF:return{suggestions:[i.Update,i.Delete,i.Color].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))};case Q.CHECKS:return{suggestions:[i.Name].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))};default:break}return Z()}function iC(e,t,n,r){switch(r?.toLowerCase()){case`update`:case`delete`:return{suggestions:[`cascade`,`set default`,`set null`,`restrict`].map(e=>({label:e,insertText:e,kind:Y.Value,insertTextRules:X.KeepWhitespace,range:void 0}))};case`type`:return{suggestions:[`btree`,`hash`].map(e=>({label:e,insertText:`${e}`,kind:Y.Value,insertTextRules:X.KeepWhitespace,range:void 0}))};case`default`:return $S(e,t,n,e.container.element(t,n),[j.Schema,j.Enum]);default:break}return Z()}function aC(e,n,r){if(!r)return[];let i=[],a=r;for(;a;){let n=e.nodeSymbol(a).getFiltered(t);if(n){let r=e.symbolMembers(n).getFiltered(t);i.push(...r||[])}a=a instanceof P?a.parent:void 0}for(let e of n){let t=i.filter(t=>t.name===e);if(t.length===0)return[];i=t}return i}function oC(e,n,r,i){let a=yu(i)??[];return a.pop(),a.some(e=>!C(e))?Z():MS({suggestions:aC(e,a.map(e=>k(e)),e.container.element(n,r)).flatMap(n=>e.symbolMembers(n).getFiltered(t)||[]).flatMap(e=>{let t=e.name;return t===void 0?[]:{label:t,insertText:t,kind:kS(e.kind),range:void 0}})})}function sC(e,t,n,i){switch(e.container.scopeKind(t,n)){case Q.TABLE:case Q.TABLEPARTIAL:return uC(e,t,n,i);case Q.PROJECT:return dC(e,t,n,i);case Q.INDEXES:return gC(e,t,n);case Q.ENUM:return lC(e,t,n,i);case Q.REF:{let r=fC(e,t,n);return e.container.token(t,n).token?.kind===v.COLON&&AS(e.container.token(t,n).token,n)?jS(r):r}case Q.TABLEGROUP:return hC(e,t);case Q.DIAGRAMVIEW:return xC();case Q.CUSTOM:{let i=e.container.element(t,n);if(i instanceof P){let a=i.parentNode,o=a instanceof R?a.parentNode:void 0;if(o instanceof P&&o.isKind(r.DiagramView))return SC(e,t,n,i)}return Z()}default:return Z()}}function cC(){return{suggestions:[`Table`,`TableGroup`,`Enum`,`Project`,`Ref`,`TablePartial`,`Records`,`DiagramView`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}}function lC(e,t,n,r){return r?.callee&&yC(n,r)===1?$S(e,t,n,e.container.element(t,n),[j.Schema,j.Table,j.Column]):Z()}function uC(e,t,n,r){let i=[`Note`,`indexes`,`checks`,`Records`];if(!r?.callee)return{suggestions:i.map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))};let a=yC(n,r);return a===0?{suggestions:i.map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}:a===1?_C(e,t,n):Z()}function dC(e,t,n,r){return!r?.callee||yC(n,r)===0?{suggestions:[`Table`,`TableGroup`,`Enum`,`Note`,`Ref`,`TablePartial`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}:Z()}function fC(e,t,n){return $S(e,t,n,e.container.element(t,n),[j.Schema,j.Table,j.Column])}function pC(e,t,n,i){return i.isKind(r.Records)?$S(e,t,n,i.parent,[j.Schema,j.Table]):Z()}function mC(e,n,i,a){let o=e.container.element(n,i),s=a.callee&&CS(i,a.callee),c=a.argumentList&&CS(i,a.argumentList);if(o instanceof P&&o.isKind(r.Records)&&wS(i,o)){if(s)return $S(e,n,i,o.parent,[j.Schema,j.Table]);if(!c)return Z();let r=a.callee;if(!r)return Z();let l=yu(r)??[r],u=l[l.length-1],d=u?e.nodeReferee(u).getFiltered(t):void 0;if(!d)return Z();let f=QS(e,d,[j.Column]),{argumentList:p}=a;return!p||!_u(p)?f:NS(f)}let l=[...e.container.stack(n,i)];for(let o of l){if(!c||!(o instanceof L)||o.callee!==a||(k(a.callee)??``).toLowerCase()!==r.Records)continue;let s=e.nodeSymbol(e.container.element(n,i)).getFiltered(t);if(!s)return Z();let l=QS(e,s,[j.Column]),{argumentList:u}=a;return!u||!_u(u)?l:NS(l)}return Z()}function hC(e,t){return{suggestions:[...MS({suggestions:(e.parse.publicSymbolTable(t)??[]).flatMap(e=>{if(e.kind!==j.Table&&e.kind!==j.Schema)return[];let t=e.name;return t===void 0||e instanceof Fu&&e.isPublicSchema()?[]:{label:t,insertText:t,insertTextRules:X.KeepWhitespace,kind:kS(e.kind),range:void 0}})}).suggestions,...[`Note`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))]}}function gC(e,t,n){return vC(e,t,n)}function _C(e,t,n){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`.split(`.`).map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.TypeParameter,sortText:Y.TypeParameter.toString().padStart(2,`0`),range:void 0})),...$S(e,t,n,e.container.element(t,n),[j.Enum,j.Schema]).suggestions]}}function vC(e,n,r){let i=e.container.element(n,r)?.parent,a=i?e.nodeSymbol(i).getFiltered(t):void 0;if(!a||!a?.isKind(j.Table))return Z();let o=e.symbolMembers(a).getFiltered(t);return o?MS({suggestions:o.flatMap(n=>{let r=n.declaration?e.nodeFullname(n.declaration):void 0,i=r&&!r.hasValue(t)?r.getValue()?.at(-1):void 0;return i?{label:i,insertText:i,insertTextRules:X.KeepWhitespace,kind:kS(j.Column),range:void 0}:[]})}):Z()}function yC(e,t){if(!t.callee)return-1;let n=[t.callee,...t.args],r=n.findIndex(t=>e<=t.end);return r===-1?n.length:r}var bC={label:`*`,insertText:`*`,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0};function xC(){return{suggestions:[...[`Tables`,`TableGroups`,`Notes`,`Schemas`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0})),bC]}}function SC(e,t,n,i){switch(i.getElementKind()){case r.DiagramViewTables:return{suggestions:[bC,...$S(e,t,n,e.parse.ast(t),[j.Table,j.Schema]).suggestions]};case r.DiagramViewTableGroups:return{suggestions:[bC,...$S(e,t,n,e.parse.ast(t),[j.TableGroup]).suggestions]};case r.DiagramViewSchemas:return{suggestions:[bC,{label:y,insertText:y,insertTextRules:X.KeepWhitespace,kind:Y.Module,range:void 0},...$S(e,t,n,e.parse.ast(t),[j.Schema]).suggestions]};case r.DiagramViewNotes:return{suggestions:[bC,...$S(e,t,n,e.parse.ast(t),[j.StickyNote]).suggestions]};default:return Z()}}const CC={comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`},{open:"`",close:"`"}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`},{open:"`",close:"`"}],indentationRules:{increaseIndentPattern:/^(.*\{[^}]*|\s*[{[].*)$/,decreaseIndentPattern:/^(.*\}.*|\s*[}\]].*)$/}};var wC={tokenPostfix:`.dbml`,brackets:[{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`{`,close:`}`,token:`delimiter.curly`}],decls:[`project`,`tablegroup`,`table`,`enum`,`ref`,`note`,`tablepartial`,`records`,`checks`,`diagramview`,`use`,`reuse`,`from`],dataTypes:`TINYINT.SMALLINT.MEDIUMINT.INT.INTEGER.BIGINT.FLOAT.DOUBLE.DECIMAL.DEC.BIT.BOOL.REAL.MONEY.BINARY_FLOAT.BINARY_DOUBLE.smallmoney.ENUM.CHAR.BINARY.VARCHAR.VARBINARY.TINYBLOB.TINYTEXT.BLOB.TEXT.MEDIUMBLOB.MEDIUMTEXT.LONGBLOB.LONGTEXT.SET.INET6.UUID.NVARCHAR.NCHAR.NTEXT.IMAGE.VARCHAR2.NVARCHAR2.DATE.TIME.DATETIME.DATETIME2.TIMESTAMP.YEAR.smalldatetime.datetimeoffset.XML.sql_variant.uniqueidentifier.CURSOR.BFILE.CLOB.NCLOB.RAW`.split(`.`),settings:[`indexes`,`ref`,`note`,`headercolor`,`pk`,`null`,`increment`,`unique`,`default`,`note`,`primary`,`key`,`name`,`as`,`color`,`check`,`tables`,`tablegroups`,`notes`,`schemas`],symbols:/[=><!~?:&|+\-/^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,newline:/[\r\n]/,digits:/\d+(_+\d+)*/,idtf:/[\p{L}0-9_]+/u,ignoreCase:!0,unicode:!0,tokenizer:{root:[[/[{}[\]()]/,`@bracket`],[/[,.:]/,`delimiter`],{include:`@numbers`},{include:`common`}],common:[{include:`@whitespace`},[/[<>~-]/,`operators`],[/\*/,`keyword.wildcard`],[/("[^"\\]*(?:\\.[^"\\]*)*")(\s+)(@idtf(?:\.@idtf*)*)/,[`string`,``,`keyword`]],[/"([^"\\]|\\.)*$/,``],[/'([^'\\]|\\.)*$/,``],[/"/,`string`,`@string_double`],[/'/,`string`,`@string_single`],[/`/,`string`,`@string_backtick`],[/(@idtf)(\s+)(@idtf(?:\.@idtf)*)/,{cases:{"$1@decls":[`keyword`,``,`identifier`],"$1==not":{cases:{"$3==null":[`keyword`,``,`keyword`],"@default":[`identifier`,``,`identifier`]}},"@default":[`identifier`,``,`keyword`]}}],[/@idtf/,{cases:{"@dataTypes":`keyword`,"@decls":`keyword`,"@settings":`keyword`,"@default":`identifier`}}]],numbers:[[/0[xX][0-9a-fA-F]*/,`number`],[/[$][+-]*\d*(\.\d*)?/,`number`],[/((\d+(\.\d*)?)|(\.\d+))([eE][-+]?\d+)?/,`number`],[/#([0-9A-F]{3}){1,2}/,`number.hex`]],string_double:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`]],string_single:[[/[^\\']+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/'/,`string`,`@pop`]],string_backtick:[[/[^\\`$]+/,`string`],[/@escapes/,`string.escape`],[/`/,`string`,`@pop`]],endTripleQuotesString:[[/\\'/,`string`],[/(.*[^\\])?(\\\\)*'''/,`string`,`@popall`],[/.*$/,`string`]],whitespace:[[/[ \t\r\n]+/,``],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`],[/'''(.*[^\\])?(\\\\)*'''/,`string`],[/'''.*$/,`string`,`@endTripleQuotesString`]],comment:[[/[^/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[/*]/,`comment`]]}};function TC(e,t){let n=this.token.flatStream(e),{index:r,token:i}=this.container.token(e,t),a=r===void 0?-1:mc(n,e=>!e.isInvalid,r);if(a===-1)return[this.parse.ast(e)];let o=n[a].start,s=this.parse.ast(e),c=[s];for(;;){let e=Ld(s).find(e=>CS(o,e));if(e===void 0||e instanceof $c)break;c.push(e),s=e}if(i?.kind===v.COLON)return c;for(;c.length>0;){let n=!1,r=g(c);if(r instanceof L){let i=this.getSource(e)||``;for(let e=r.end;e<t;e+=1)i[e]===`
12
12
  `&&(c.pop(),n=!0)}else r instanceof I||r instanceof sd?this.container.token(e,t).token!==r.op&&(c.pop(),n=!0):r instanceof z?r.listCloseBracket&&r.end<=t&&(c.pop(),n=!0):r instanceof ud?r.tupleCloseParen&&r.end<=t&&(c.pop(),n=!0):r instanceof dd?r.end<=t&&(c.pop(),n=!0):r instanceof R?r.blockCloseBrace&&r.end<=t&&(c.pop(),n=!0):r instanceof od||r.end<t&&(c.pop(),n=!0);if(n){let e=g(c);e instanceof P&&e.end<=t&&c.pop()}if(!n)break}return c}function EC(e,t){let n=this.token.flatStream(e).findIndex(e=>e.start>=t);return n===void 0||n<=0?{token:void 0,index:void 0}:{token:this.token.flatStream(e)[n-1],index:n-1}}function DC(e,t){let n=this.container.stack(e,t);for(let e=n.length-1;e>=0;--e)if(n[e]instanceof P)return n[e];return this.parse.ast(e)}function OC(e,n){let r=this.container.element(e,n);if(!r)return;let i=this.nodeSymbol(r);if(i.hasValue(t))return;let a=this.symbolMembers(i.getValue());if(!a.hasValue(t))return a.getValue()}let Q=function(e){return e[e.TABLE=0]=`TABLE`,e[e.ENUM=1]=`ENUM`,e[e.TABLEGROUP=2]=`TABLEGROUP`,e[e.INDEXES=3]=`INDEXES`,e[e.NOTE=4]=`NOTE`,e[e.REF=5]=`REF`,e[e.PROJECT=6]=`PROJECT`,e[e.CUSTOM=7]=`CUSTOM`,e[e.TOPLEVEL=8]=`TOPLEVEL`,e[e.TABLEPARTIAL=9]=`TABLEPARTIAL`,e[e.CHECKS=10]=`CHECKS`,e[e.RECORDS=11]=`RECORDS`,e[e.DIAGRAMVIEW=12]=`DIAGRAMVIEW`,e}({});function kC(e,t){let n=this.container.element(e,t);if(n instanceof nd)return Q.TOPLEVEL;switch(n.type?.value.toLowerCase()){case`table`:return Q.TABLE;case`enum`:return Q.ENUM;case`ref`:return Q.REF;case`tablegroup`:return Q.TABLEGROUP;case`indexes`:return Q.INDEXES;case`note`:return Q.NOTE;case`project`:return Q.PROJECT;case`tablepartial`:return Q.TABLEPARTIAL;case`checks`:return Q.CHECKS;case`records`:return Q.RECORDS;case`diagramview`:return Q.DIAGRAMVIEW;default:return Q.CUSTOM}}function AC(e,t){let r=t.originalSymbol;if(r.filepath.equals(e))return n.create(MC(this,r));let i=[...this.symbolUses(r).getValue(),...this.symbolAliases(r).getValue()].filter(t=>t.filepath.equals(e));for(let e of i){let t=e.name;if(!t)continue;if(t!==r.name)return n.create({schema:``,name:t});let i=jC(this,e);if(i.length>0)return n.create({schema:i.join(`.`),name:t});let a=MC(this,r);return a?n.create({...a,name:t}):n.create({schema:y,name:t})}return n.create(MC(this,r))}function jC(e,t){let n=[],r=t;for(;r;){let t=e.symbolParent(r).find(e=>e instanceof Fu&&e.isKind(j.Schema));if(!t||t.isPublicSchema())break;n.unshift(t.name??``),r=t}return n}function MC(e,n){if(!n.declaration)return n.name?{schema:y,name:n.name}:void 0;let r=e.nodeFullname(n.declaration).getFiltered(t);if(!r||r.length===0)return n.name?{schema:y,name:n.name}:void 0;let i=r[r.length-1];return{schema:r.length>1?r.slice(0,-1).join(`.`):y,name:i}}function NC(e){let{ast:t}=this.parseFile(e).getValue(),n=[],r=new Set;for(let i of t.body){if(!(i instanceof rd)||!i.importPath)continue;let t=jl(e,i.importPath.value);!t||r.has(t.absolute)||(r.add(t.absolute),n.push(t))}return n}function PC(e,t){let n=new Set,r=[],i=[...t],a=0;for(;a<i.length;){let t=i[a++],o=t.intern();if(!n.has(o)){n.add(o),r.push(t);for(let n of e.fileDependencies(t))i.push(n)}}return r}function FC(e){return PC(this,e?[e]:this.layout.getEntrypoints())}function IC(e){return this.bindFile(e),this.parseFile(e).getValue().ast}function LC(e){return this.interpretFile(e).getErrors()}function RC(e){return this.interpretFile(e).getWarnings()}function zC(e){return this.parseFile(e).getValue().tokens}function BC(e){let n=this.parseFile(e).getValue().ast,r=this.nodeSymbol(n).getFiltered(t);if(r)return this.interpretSymbol(r,e).getFiltered(t)}function VC(e){let n=this.parseFile(e).getValue().ast,r=this.nodeSymbol(n).getFiltered(t);if(r)return this.symbolMembers(r).getFiltered(t)}function HC(e){return this.parseFile(e).getValue().tokens.flatMap(e=>[...e.leadingInvalid,e,...e.trailingInvalid])}function UC(e){return this.parseFile(e).getValue().tokens.filter(ul)}function WC(e,t){let n=this.parse.ast(e);for(;;){let e=Ld(n).find(e=>CS(t,e));if(e===void 0)return n;if(e instanceof $c)return e;n=e}}function GC(e){let t=this.validateFile(e),r=this.parseFile(e).getValue().ast,i=this.bindNode(r).map(()=>void 0);return new n(void 0,[...t.getErrors(),...i.getErrors()],[...t.getWarnings(),...i.getWarnings()])}function KC(){let e=xy(this,this.layout.getEntrypoints()),t=new Map;for(let n of e){let e=this.bindFile(n);t.set(n.absolute,e)}return t}function qC(e){let{ast:r}=this.parseFile(e).getValue(),i=this.nodeSymbol(r).getFiltered(t);return i?this.interpretSymbol(i,e).map(e=>e===t||!e?void 0:e):n.create(void 0)}function JC(){let e=[],r=[],i=new Set,a=[];for(let e of this.layout.getEntrypoints())for(let t of this.reachableFiles(e)){let e=t.intern();i.has(e)||(i.add(e),a.push(t))}let o=new Map;for(let i of a){let a=this.parseFile(i);e.push(...a.getErrors()),r.push(...a.getWarnings());let s=this.bindFile(i);e.push(...s.getErrors()),r.push(...s.getWarnings());let{ast:c}=a.getValue(),l=this.nodeSymbol(c).getFiltered(t),u=l?this.interpretSymbol(l,i):n.create(t),d=u.getFiltered(t);d&&o.set(i.absolute,d),e.push(...u.getErrors()),r.push(...u.getWarnings())}let s={};for(let[e,t]of o)s[e]=t;return new n({files:s},e,r)}function YC(e){return this.parseFile(e).chain(({ast:e})=>this.validateNode(e).map(()=>void 0))}var XC=class{constructor(e,t){this.start={offset:0,line:0,column:0},this.current={offset:0,line:0,column:0},this.tokens=[],this.errors=[],this.text=e,this.filepath=t}isAtEnd(){return this.current.offset>=this.text.length}advance(){let e=this.peek();return this.current={...this.current},e===`
13
13
  `?(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 t=0;t<e.length;t+=1)if(e[t]!==this.peek(t))return!1;return!0}match(e){return this.check(e)?(e.split(``).forEach(()=>this.advance()),!0):!1}addToken(e,t=!1){this.tokens.push(this.createToken(e,t))}createToken(e,t=!1){return $c.create(e,this.filepath,this.start,this.current,this.text.substring(this.start.offset,this.current.offset),t)}lex(){return this.scanTokens(),this.tokens.push($c.create(v.EOF,this.filepath,this.start,this.current,``,!1)),this.gatherTrivia(),this.gatherInvalid(),new n(this.tokens,this.errors)}scanTokens(){for(;!this.isAtEnd();){let e=this.advance();switch(e){case` `:this.addToken(v.SPACE);break;case`\r`:break;case`
14
14
  `:this.addToken(v.NEWLINE);break;case` `:this.addToken(v.TAB);break;case`,`:this.addToken(v.COMMA);break;case`(`:this.addToken(v.LPAREN);break;case`)`:this.addToken(v.RPAREN);break;case`[`:this.addToken(v.LBRACKET);break;case`]`:this.addToken(v.RBRACKET);break;case`{`:this.addToken(v.LBRACE);break;case`}`:this.addToken(v.RBRACE);break;case`;`:this.addToken(v.SEMICOLON);break;case`:`:this.addToken(v.COLON);break;case`'`:this.match(`''`)?this.multilineStringLiteral():this.singleLineStringLiteral();break;case`"`:this.quotedVariable();break;case"`":this.functionExpression();break;case`#`:this.colorLiteral();break;case`/`:this.match(`/`)?this.singleLineComment():this.match(`*`)?this.multilineComment():this.operator(e);break;case`*`:this.addToken(v.WILDCARD);break;default:if(Zc(e)){this.operator(e);break}if(Ll(e)){this.identifier();break}if(Rl(e)){this.numericLiteralOrIdentifier();break}this.addToken(v.OP,!0),this.errors.push(new x(b.UNKNOWN_SYMBOL,`Unexpected token '${e}'`,this.createToken(v.OP,!0)));break}this.start={...this.current}}}gatherTrivia(){let e=!0,t=[],n,r=[];for(let i of this.tokens)Xc(i)?(t.push(i),i.kind===v.NEWLINE&&n&&(n.trailingTrivia=t,e=!0,n=void 0,t=[])):(e?i.leadingTrivia=t:n.trailingTrivia=t,r.push(i),t=[],n=i,e=!1);this.tokens=r}gatherInvalid(){let e,t=[],n=[];for(e=0;e<this.tokens.length&&ul(this.tokens[e]);e+=1)n.push(this.tokens[e]);let r=this.tokens[e];for(r.leadingInvalid=[...n,...r.leadingInvalid];e<this.tokens.length;e+=1){let n=this.tokens[e];ul(n)?r.trailingInvalid.push(n):(r=n,t.push(n))}this.tokens=t}consumeUntil(e,t,{allowNewline:n,allowEof:r,raw:i,consumeStopSequence:a=!0}){let o=``;for(;!this.isAtEnd()&&(n||!this.check(`
@@ -28,4 +28,4 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=Symbo
28
28
  `;){i--,i>0&&e[i-1]===`\r`&&i--;let t=e.lastIndexOf(`
29
29
  `,i-1)+1;if(e.substring(t,i).trim()!==``){i=r.startIndex,i>0&&e[i-1]===`
30
30
  `&&(i--,i>0&&e[i-1]===`\r`&&i--);break}}return a<e.length&&e[a]===`\r`&&a++,a<e.length&&e[a]===`
31
- `&&a++,[{start:i,end:a,newText:``}]}var Vw=Symbol(`COMPUTING`),Hw=class{constructor(e){this.layout=e,this.nodeIdGenerator=new td,this.symbolIdGenerator=new Nu,this.symbolFactory=new dl(this.symbolIdGenerator),this.sourceSnapshot=new Map,this.globalCache=new Map,this.localCache=new Map,this.parseFile=this.localQuery(sw),this.parseProject=this.globalQuery(cw),this.validateNode=this.localQuery(Bb),this.validateFile=this.localQuery(YC),this.nodeFullname=this.localQuery(Hb),this.nodeAlias=this.localQuery(Ub),this.nodeSettings=this.localQuery(Vb),this.canonicalName=this.globalQuery(AC),this.bindNode=this.globalQuery(Qy),this.bindFile=this.globalQuery(GC),this.bindProject=this.globalQuery(KC),this.interpretSymbol=this.globalQuery(eb),this.interpretMetadata=tb.bind(this),this.interpretFile=this.globalQuery(qC),this.interpretProject=this.globalQuery(JC),this.nodeSymbol=this.globalQuery(Yy),this.nodeMetadata=this.globalQuery($y),this.symbolMembers=this.globalQuery(Xy),this.lookupMembers=this.globalQuery(lw),this.nodeReferee=this.globalQuery(Zy),this.resolutionIndex=this.globalQuery(fw),this.symbolReferences=this.globalQuery(mw),this.symbolParent=this.globalQuery(pw),this.symbolMetadata=this.globalQuery(hw),this.symbolAliases=this.globalQuery(uw),this.symbolUses=this.globalQuery(gw),this.fileDependencies=this.localQuery(NC),this.reachableFiles=this.globalQuery(FC),this.usableMembers=this.globalQuery(Qv),this.nodeAtPosition=this.localQuery(WC),this.renameTable=Dw.bind(this),this.syncDiagramView=Iw.bind(this),this.token={invalidStream:this.localQuery(UC),flatStream:this.localQuery(HC)},this.parse={source:e=>this.getSource(e)||``,ast:(e=Fl)=>IC.call(this,e),errors:(e=Fl)=>LC.call(this,e),warnings:(e=Fl)=>RC.call(this,e),tokens:(e=Fl)=>zC.call(this,e),rawDb:(e=Fl)=>BC.call(this,e),publicSymbolTable:(e=Fl)=>VC.call(this,e)},this.container={stack:this.localQuery(TC),token:this.localQuery(EC),element:this.localQuery(DC),scope:this.localQuery(OC),scopeKind:this.localQuery(kC)}}getSource(e){return this.layout.getSource(e)}cleanStaleLocalCache(e){let t=this.layout.getSource(e),n=e.absolute;this.sourceSnapshot.has(n)&&this.sourceSnapshot.get(n)!==t&&(this.localCache.delete(e.intern()),this.globalCache.clear()),this.sourceSnapshot.set(n,t)}cleanStaleGlobalCache(){let e=this.layout.getEntrypoints(),t=!1;this.entrypointsSnapshot!==void 0&&(this.entrypointsSnapshot.length!==e.length||this.entrypointsSnapshot.some((t,n)=>t.absolute!==e[n].absolute))&&(t=!0),this.entrypointsSnapshot=e;for(let t of PC(this,e))this.cleanStaleLocalCache(t);t&&this.globalCache.clear()}globalQuery(e){let t=Symbol();return((...n)=>{this.cleanStaleGlobalCache(),this.globalCache.has(t)||this.globalCache.set(t,new Map);let r=n.map(e=>Gd(e)).join(`\0`),i=this.globalCache.get(t);if(i.has(r)){let t=i.get(r);if(t===Vw)throw Error(`Cycle detected in query: ${e.name}(${r})`);return t}i.set(r,Vw);try{let t=e.apply(this,n);return i.set(r,t),t}catch(e){throw i.delete(r),e}})}localQuery(e){let t=Symbol();return((...n)=>{let[r]=n,i=r instanceof M?r.filepath:r;this.cleanStaleLocalCache(i);let a=i.intern(),o=n.map(e=>Gd(e)).join(`\0`),s=this.localCache.get(a);s||(s=new Map,this.localCache.set(a,s));let c=s.get(t);if(c||(c=new Map,s.set(t,c)),c.has(o)){let t=c.get(o);if(t===Vw)throw Error(`Cycle detected in query: ${e.name}(${a}, ${o})`);return t}c.set(o,Vw);try{let t=e.apply(this,n);return c.set(o,t),t}catch(e){throw c.delete(o),e}})}findDiagramViewBlocks(e){return Aw(this.getSource(e)??``)}initMonacoServices(e){let t=e?.autocompletion?.triggerCharacters??[`.`,`,`,`[`,`(`,`:`,`>`,`<`,`-`,`~`,`'`,`"`,`/`,` `];return{definitionProvider:new bS(this),referenceProvider:new SS(this),autocompletionProvider:new YS(this,{triggerCharacters:t}),diagnosticsProvider:new xS(this)}}},Uw=class e{constructor(e={}){this.files=e instanceof Map?new Map(e):new Map(Object.entries(e))}setSource(e,t){this.files.set(e.absolute,t)}getSource(e){return this.files.get(e.absolute)??void 0}deleteSource(e){this.files.delete(e.absolute)}clearSource(){this.files.clear()}exists(e){return this.isFile(e)||this.isDirectory(e)}isFile(e){return this.files.has(e.absolute)}isDirectory(e){let t=e.absolute.endsWith(`/`)?e.absolute:`${e.absolute}/`;for(let e of this.files.keys())if(e.startsWith(t))return!0;return!1}listDirectory(e){let t=e?.absolute??`/`,n=t.endsWith(`/`)?t:t+`/`,r=new Set;for(let e of this.files.keys()){if(!e.startsWith(n))continue;let t=e.slice(n.length),i=t.indexOf(`/`);r.add(n+(i===-1?t:t.slice(0,i)))}return[...r].sort().map(Al.from)}getEntrypoints(){return[...this.files.keys()].map(Al.from).sort((e,t)=>e.absolute.localeCompare(t.absolute))}clone(){return new e(this.files)}};exports.ArrayNode=vd,exports.AttributeNode=F,exports.BlockExpressionNode=R,exports.CallExpressionNode=B,exports.CommaExpressionNode=dd,exports.CompileError=x,exports.CompileErrorCode=b,exports.Compiler=Hw,exports.CompletionItemInsertTextRule=X,exports.CompletionItemKind=Y,exports.DBMLCompletionItemProvider=YS,exports.DBMLDefinitionProvider=bS,exports.DBMLDiagnosticsProvider=xS,exports.DBMLReferencesProvider=SS,exports.DEFAULT_ENTRY=Fl,exports.ElementDeclarationNode=P,exports.ElementKind=r,exports.EmptyNode=_d,exports.FALSY_VALUES=q_,exports.Filepath=Al,exports.FunctionApplicationNode=L,exports.FunctionExpressionNode=ld,exports.GroupExpressionNode=fd,exports.IdentifierStreamNode=od,exports.InfixExpressionNode=sd,exports.ListExpressionNode=z,exports.LiteralNode=pd,exports.MarkerSeverity=_S,exports.MemoryProjectLayout=Uw,exports.PostfixExpressionNode=cd,exports.PrefixExpressionNode=I,exports.PrimaryExpressionNode=gd,exports.ProgramNode=nd,exports.ScopeKind=Q,exports.SymbolKind=j,exports.SyntaxNode=M,exports.SyntaxNodeIdGenerator=td,exports.SyntaxNodeKind=N,exports.SyntaxToken=$c,exports.SyntaxTokenKind=v,exports.TRUTHY_VALUES=K_,exports.TupleExpressionNode=ud,exports.UNHANDLED=t,exports.Uri=oS,exports.UseDeclarationNode=rd,exports.UseSpecifierListNode=ad,exports.UseSpecifierNode=id,exports.VariableNode=hd,exports.WildcardNode=md,exports.addDoubleQuoteIfNeeded=gy,exports.dbmlLanguageConfig=CC,exports.dbmlMonarchTokensProvider=wC,exports.escapeString=vy,exports.extractNumericLiteral=Su,exports.extractSignedNumber=U_,exports.formatRecordValue=yy,exports.getRecordValueType=Of,exports.isBinaryType=Tf,exports.isBooleanType=Cf,exports.isDateTimeType=Ef,exports.isEmptyStringLiteral=V_,exports.isFloatType=xf,exports.isFunctionExpression=H_,exports.isIntegerType=bf,exports.isNullish=B_,exports.isNumericType=Sf,exports.isOp=Zc,exports.isOpToken=Qc,exports.isSerialType=Df,exports.isStringType=wf,exports.isTriviaToken=Xc,exports.isValidIdentifier=hy,exports.normalizeTypeName=yf,exports.splitQualifiedIdentifier=by,exports.tryExtractBoolean=J_,exports.tryExtractDateTime=ev,exports.tryExtractEnum=Y_,exports.tryExtractInteger=G_,exports.tryExtractNumeric=W_,exports.tryExtractString=X_,exports.unescapeString=_y,exports.validateForeignKeys=xv,exports.validatePrimaryKey=dv,exports.validateUnique=vv;
31
+ `&&a++,[{start:i,end:a,newText:``}]}var Vw=Symbol(`COMPUTING`),Hw=class{constructor(e){this.layout=e,this.nodeIdGenerator=new td,this.symbolIdGenerator=new Nu,this.symbolFactory=new dl(this.symbolIdGenerator),this.sourceSnapshot=new Map,this.globalCache=new Map,this.localCache=new Map,this.parseFile=this.localQuery(sw),this.parseProject=this.globalQuery(cw),this.validateNode=this.localQuery(Bb),this.validateFile=this.localQuery(YC),this.nodeFullname=this.localQuery(Hb),this.nodeAlias=this.localQuery(Ub),this.nodeSettings=this.localQuery(Vb),this.canonicalName=this.globalQuery(AC),this.bindNode=this.globalQuery(Qy),this.bindFile=this.globalQuery(GC),this.bindProject=this.globalQuery(KC),this.interpretSymbol=this.globalQuery(eb),this.interpretMetadata=this.globalQuery(tb),this.interpretFile=this.globalQuery(qC),this.interpretProject=this.globalQuery(JC),this.nodeSymbol=this.globalQuery(Yy),this.nodeMetadata=this.globalQuery($y),this.symbolMembers=this.globalQuery(Xy),this.lookupMembers=this.globalQuery(lw),this.nodeReferee=this.globalQuery(Zy),this.resolutionIndex=this.globalQuery(fw),this.symbolReferences=this.globalQuery(mw),this.symbolParent=this.globalQuery(pw),this.symbolMetadata=this.globalQuery(hw),this.symbolAliases=this.globalQuery(uw),this.symbolUses=this.globalQuery(gw),this.fileDependencies=this.localQuery(NC),this.reachableFiles=this.globalQuery(FC),this.usableMembers=this.globalQuery(Qv),this.nodeAtPosition=this.localQuery(WC),this.renameTable=Dw.bind(this),this.syncDiagramView=Iw.bind(this),this.token={invalidStream:this.localQuery(UC),flatStream:this.localQuery(HC)},this.parse={source:e=>this.getSource(e)||``,ast:(e=Fl)=>IC.call(this,e),errors:(e=Fl)=>LC.call(this,e),warnings:(e=Fl)=>RC.call(this,e),tokens:(e=Fl)=>zC.call(this,e),rawDb:(e=Fl)=>BC.call(this,e),publicSymbolTable:(e=Fl)=>VC.call(this,e)},this.container={stack:this.localQuery(TC),token:this.localQuery(EC),element:this.localQuery(DC),scope:this.localQuery(OC),scopeKind:this.localQuery(kC)}}getSource(e){return this.layout.getSource(e)}cleanStaleLocalCache(e){let t=this.layout.getSource(e),n=e.absolute;this.sourceSnapshot.has(n)&&this.sourceSnapshot.get(n)!==t&&(this.localCache.delete(e.intern()),this.globalCache.clear()),this.sourceSnapshot.set(n,t)}cleanStaleGlobalCache(){let e=this.layout.getEntrypoints(),t=!1;this.entrypointsSnapshot!==void 0&&(this.entrypointsSnapshot.length!==e.length||this.entrypointsSnapshot.some((t,n)=>t.absolute!==e[n].absolute))&&(t=!0),this.entrypointsSnapshot=e;for(let t of PC(this,e))this.cleanStaleLocalCache(t);t&&this.globalCache.clear()}globalQuery(e){let t=Symbol();return((...n)=>{this.cleanStaleGlobalCache(),this.globalCache.has(t)||this.globalCache.set(t,new Map);let r=n.map(e=>Gd(e)).join(`\0`),i=this.globalCache.get(t);if(i.has(r)){let t=i.get(r);if(t===Vw)throw Error(`Cycle detected in query: ${e.name}(${r})`);return t}i.set(r,Vw);try{let t=e.apply(this,n);return i.set(r,t),t}catch(e){throw i.delete(r),e}})}localQuery(e){let t=Symbol();return((...n)=>{let[r]=n,i=r instanceof M?r.filepath:r;this.cleanStaleLocalCache(i);let a=i.intern(),o=n.map(e=>Gd(e)).join(`\0`),s=this.localCache.get(a);s||(s=new Map,this.localCache.set(a,s));let c=s.get(t);if(c||(c=new Map,s.set(t,c)),c.has(o)){let t=c.get(o);if(t===Vw)throw Error(`Cycle detected in query: ${e.name}(${a}, ${o})`);return t}c.set(o,Vw);try{let t=e.apply(this,n);return c.set(o,t),t}catch(e){throw c.delete(o),e}})}findDiagramViewBlocks(e){return Aw(this.getSource(e)??``)}initMonacoServices(e){let t=e?.autocompletion?.triggerCharacters??[`.`,`,`,`[`,`(`,`:`,`>`,`<`,`-`,`~`,`'`,`"`,`/`,` `];return{definitionProvider:new bS(this),referenceProvider:new SS(this),autocompletionProvider:new YS(this,{triggerCharacters:t}),diagnosticsProvider:new xS(this)}}},Uw=class e{constructor(e={}){this.files=e instanceof Map?new Map(e):new Map(Object.entries(e))}setSource(e,t){this.files.set(e.absolute,t)}getSource(e){return this.files.get(e.absolute)??void 0}deleteSource(e){this.files.delete(e.absolute)}clearSource(){this.files.clear()}exists(e){return this.isFile(e)||this.isDirectory(e)}isFile(e){return this.files.has(e.absolute)}isDirectory(e){let t=e.absolute.endsWith(`/`)?e.absolute:`${e.absolute}/`;for(let e of this.files.keys())if(e.startsWith(t))return!0;return!1}listDirectory(e){let t=e?.absolute??`/`,n=t.endsWith(`/`)?t:t+`/`,r=new Set;for(let e of this.files.keys()){if(!e.startsWith(n))continue;let t=e.slice(n.length),i=t.indexOf(`/`);r.add(n+(i===-1?t:t.slice(0,i)))}return[...r].sort().map(Al.from)}getEntrypoints(){return[...this.files.keys()].map(Al.from).sort((e,t)=>e.absolute.localeCompare(t.absolute))}clone(){return new e(this.files)}};exports.ArrayNode=vd,exports.AttributeNode=F,exports.BlockExpressionNode=R,exports.CallExpressionNode=B,exports.CommaExpressionNode=dd,exports.CompileError=x,exports.CompileErrorCode=b,exports.Compiler=Hw,exports.CompletionItemInsertTextRule=X,exports.CompletionItemKind=Y,exports.DBMLCompletionItemProvider=YS,exports.DBMLDefinitionProvider=bS,exports.DBMLDiagnosticsProvider=xS,exports.DBMLReferencesProvider=SS,exports.DEFAULT_ENTRY=Fl,exports.ElementDeclarationNode=P,exports.ElementKind=r,exports.EmptyNode=_d,exports.FALSY_VALUES=q_,exports.Filepath=Al,exports.FunctionApplicationNode=L,exports.FunctionExpressionNode=ld,exports.GroupExpressionNode=fd,exports.IdentifierStreamNode=od,exports.InfixExpressionNode=sd,exports.ListExpressionNode=z,exports.LiteralNode=pd,exports.MarkerSeverity=_S,exports.MemoryProjectLayout=Uw,exports.PostfixExpressionNode=cd,exports.PrefixExpressionNode=I,exports.PrimaryExpressionNode=gd,exports.ProgramNode=nd,exports.ScopeKind=Q,exports.SymbolKind=j,exports.SyntaxNode=M,exports.SyntaxNodeIdGenerator=td,exports.SyntaxNodeKind=N,exports.SyntaxToken=$c,exports.SyntaxTokenKind=v,exports.TRUTHY_VALUES=K_,exports.TupleExpressionNode=ud,exports.UNHANDLED=t,exports.Uri=oS,exports.UseDeclarationNode=rd,exports.UseSpecifierListNode=ad,exports.UseSpecifierNode=id,exports.VariableNode=hd,exports.WildcardNode=md,exports.addDoubleQuoteIfNeeded=gy,exports.dbmlLanguageConfig=CC,exports.dbmlMonarchTokensProvider=wC,exports.escapeString=vy,exports.extractNumericLiteral=Su,exports.extractSignedNumber=U_,exports.formatRecordValue=yy,exports.getRecordValueType=Of,exports.isBinaryType=Tf,exports.isBooleanType=Cf,exports.isDateTimeType=Ef,exports.isEmptyStringLiteral=V_,exports.isFloatType=xf,exports.isFunctionExpression=H_,exports.isIntegerType=bf,exports.isNullish=B_,exports.isNumericType=Sf,exports.isOp=Zc,exports.isOpToken=Qc,exports.isSerialType=Df,exports.isStringType=wf,exports.isTriviaToken=Xc,exports.isValidIdentifier=hy,exports.normalizeTypeName=yf,exports.splitQualifiedIdentifier=by,exports.tryExtractBoolean=J_,exports.tryExtractDateTime=ev,exports.tryExtractEnum=Y_,exports.tryExtractInteger=G_,exports.tryExtractNumeric=W_,exports.tryExtractString=X_,exports.unescapeString=_y,exports.validateForeignKeys=xv,exports.validatePrimaryKey=dv,exports.validateUnique=vv;
@@ -13050,7 +13050,7 @@ var dbmlMonarchTokensProvider = {
13050
13050
  ],
13051
13051
  common: [
13052
13052
  { include: "@whitespace" },
13053
- [/[<>-]/, "operators"],
13053
+ [/[<>~-]/, "operators"],
13054
13054
  [/\*/, "keyword.wildcard"],
13055
13055
  [/("[^"\\]*(?:\\.[^"\\]*)*")(\s+)(@idtf(?:\.@idtf*)*)/, [
13056
13056
  "string",
@@ -14802,7 +14802,7 @@ function computeDeleteEdit(r, j, M) {
14802
14802
  }
14803
14803
  var COMPUTING = Symbol("COMPUTING"), Compiler = class {
14804
14804
  constructor(r) {
14805
- this.layout = r, this.nodeIdGenerator = new SyntaxNodeIdGenerator(), this.symbolIdGenerator = new NodeSymbolIdGenerator(), this.symbolFactory = new SymbolFactory(this.symbolIdGenerator), this.sourceSnapshot = /* @__PURE__ */ new Map(), this.globalCache = /* @__PURE__ */ new Map(), this.localCache = /* @__PURE__ */ new Map(), this.parseFile = this.localQuery(parseFile), this.parseProject = this.globalQuery(parseProject), this.validateNode = this.localQuery(validateNode), this.validateFile = this.localQuery(validateFile), this.nodeFullname = this.localQuery(nodeFullname), this.nodeAlias = this.localQuery(nodeAlias), this.nodeSettings = this.localQuery(nodeSettings), this.canonicalName = this.globalQuery(canonicalName), this.bindNode = this.globalQuery(bindNode), this.bindFile = this.globalQuery(bindFile), this.bindProject = this.globalQuery(bindProject), this.interpretSymbol = this.globalQuery(interpretSymbol), this.interpretMetadata = interpretMetadata.bind(this), this.interpretFile = this.globalQuery(interpretFile), this.interpretProject = this.globalQuery(interpretProject), this.nodeSymbol = this.globalQuery(nodeSymbol), this.nodeMetadata = this.globalQuery(nodeMetadata), this.symbolMembers = this.globalQuery(symbolMembers), this.lookupMembers = this.globalQuery(lookupMembers), this.nodeReferee = this.globalQuery(nodeReferee), this.resolutionIndex = this.globalQuery(resolutionIndex), this.symbolReferences = this.globalQuery(symbolReferences), this.symbolParent = this.globalQuery(symbolParent), this.symbolMetadata = this.globalQuery(symbolMetadata), this.symbolAliases = this.globalQuery(symbolAliases), this.symbolUses = this.globalQuery(symbolUses), this.fileDependencies = this.localQuery(fileDependencies), this.reachableFiles = this.globalQuery(reachableFiles), this.usableMembers = this.globalQuery(usableMembers), this.nodeAtPosition = this.localQuery(nodeAtPosition), this.renameTable = renameTable.bind(this), this.syncDiagramView = syncDiagramView.bind(this), this.token = {
14805
+ this.layout = r, this.nodeIdGenerator = new SyntaxNodeIdGenerator(), this.symbolIdGenerator = new NodeSymbolIdGenerator(), this.symbolFactory = new SymbolFactory(this.symbolIdGenerator), this.sourceSnapshot = /* @__PURE__ */ new Map(), this.globalCache = /* @__PURE__ */ new Map(), this.localCache = /* @__PURE__ */ new Map(), this.parseFile = this.localQuery(parseFile), this.parseProject = this.globalQuery(parseProject), this.validateNode = this.localQuery(validateNode), this.validateFile = this.localQuery(validateFile), this.nodeFullname = this.localQuery(nodeFullname), this.nodeAlias = this.localQuery(nodeAlias), this.nodeSettings = this.localQuery(nodeSettings), this.canonicalName = this.globalQuery(canonicalName), this.bindNode = this.globalQuery(bindNode), this.bindFile = this.globalQuery(bindFile), this.bindProject = this.globalQuery(bindProject), this.interpretSymbol = this.globalQuery(interpretSymbol), this.interpretMetadata = this.globalQuery(interpretMetadata), this.interpretFile = this.globalQuery(interpretFile), this.interpretProject = this.globalQuery(interpretProject), this.nodeSymbol = this.globalQuery(nodeSymbol), this.nodeMetadata = this.globalQuery(nodeMetadata), this.symbolMembers = this.globalQuery(symbolMembers), this.lookupMembers = this.globalQuery(lookupMembers), this.nodeReferee = this.globalQuery(nodeReferee), this.resolutionIndex = this.globalQuery(resolutionIndex), this.symbolReferences = this.globalQuery(symbolReferences), this.symbolParent = this.globalQuery(symbolParent), this.symbolMetadata = this.globalQuery(symbolMetadata), this.symbolAliases = this.globalQuery(symbolAliases), this.symbolUses = this.globalQuery(symbolUses), this.fileDependencies = this.localQuery(fileDependencies), this.reachableFiles = this.globalQuery(reachableFiles), this.usableMembers = this.globalQuery(usableMembers), this.nodeAtPosition = this.localQuery(nodeAtPosition), this.renameTable = renameTable.bind(this), this.syncDiagramView = syncDiagramView.bind(this), this.token = {
14806
14806
  invalidStream: this.localQuery(invalidStream),
14807
14807
  flatStream: this.localQuery(flatStream)
14808
14808
  }, this.parse = {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@dbml/parse",
4
- "version": "8.0.0",
4
+ "version": "8.1.0",
5
5
  "description": "DBML parser v2",
6
6
  "author": "Holistics <dev@holistics.io>",
7
7
  "license": "Apache-2.0",
@@ -46,5 +46,5 @@
46
46
  "engines": {
47
47
  "node": ">=18"
48
48
  },
49
- "gitHead": "1bf5ecab800fe685eec13a347fbd47ac06cbffdc"
49
+ "gitHead": "deb659b7650a4204ad0a82e9d4e5e94f1d565465"
50
50
  }