@dbml/parse 9.0.0-alpha.2 → 9.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dbml-parse.js
CHANGED
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Symbol(
|
|
|
8
8
|
`)}}function oy(e,t,n){return`use {${n}${e.map(e=>` ${e}`).join(n)}${n}} from '${t}'${n}${n}`}function sy(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 cy(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 ly(e,t){if(!e||Ga(e))return!1;for(let n of e.trailingTrivia){if(n.start>t)break;if(n.kind===_.NEWLINE&&n.end<=t)return!1}return!0}function Z(){return{suggestions:[]}}function uy(e){return{...e,suggestions:e.suggestions.map(e=>({...e,insertText:` ${e.insertText}`}))}}function dy(e){return{...e,suggestions:e.suggestions.map(e=>({...e,insertText:e.quoted?e.insertText:gg(e.insertText??``),quoted:!0}))}}function fy(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 py(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(my(e,c,t.kind,s,r,o)))}}return i}function my(e,t,n,r,i,a){let o=ay(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=hy(a,o.removeRange.startOffset),t=hy(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:cy(n),detail:`from ${r.basename}`,sortText:`zzz_${cy(n).toString().padStart(2,`0`)}_${t}`,range:void 0,additionalTextEdits:s}}function hy(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 gy(e,t,n,i,a){let o=e.container.element(i,a);return!(o instanceof P)||!o.isKind(r.Records)||!(o.body instanceof z)||!o.body||!ny(a,o.body)||t.getLineContent(n.lineNumber).trim()!==``?null:o.parent instanceof N?_y(e,o):vy(e,o)}function _y(e,n){if(!(n.name instanceof V))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 As||r instanceof Gs))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 vy(e,n){let r=n.parent;if(!(r instanceof P))return Z();let i=e.nodeSymbol(r).getFiltered(t);if(!(i instanceof ks))return Z();let a;if(n.name instanceof ec){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 As||r instanceof Gs))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 yy(e,t,n,r,i){let a=e.parse.ast(t);for(let o of a.body)if(o instanceof Js&&n>=o.start&&n<=o.fullEnd)return by(e,t,n,o,i,r);return null}function by(e,t,n,r,i,a){if(r.importPath&&ny(n,r.importPath))return Ty(e,t,r.importPath,i,r);if(r.importPath&&n>=r.importPath.end)return Z();if(r.fromKeyword&&n>r.fromKeyword.end)return Ty(e,t,void 0,i,r);if(r.specifiers instanceof Xs){if(!r.specifiers.openBrace){let e=wy();return ly(r.useKeyword,n)?uy(e):e}return xy(e,t,n,r.specifiers,r.importPath,a)}if(r.specifiers instanceof ic)return Z();let o=wy();return ly(r.useKeyword,n)?uy(o):o}function xy(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 Cy(e,t,i,n)}return Sy()}}return Sy()}function Sy(){return{suggestions:Object.keys(Cs).map(e=>({label:e.toLowerCase(),insertText:`${e.toLowerCase()} `,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}}function Cy(e,n,r,i){if(!r)return Z();let a=xo(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 Ws&&!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:cy(i),range:void 0}))}}function wy(){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 Ty(e,t,n,r,i){let a=t.dirname,o=n?n.value:`./`,s=n===void 0,c;if(n){let e=Qv(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=Fa(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,-wo.length)),r.startsWith(`.`)||(r=`./${r}`),o&&!r.startsWith(o))continue;let d=`${o}${r.slice(o.length).split(`/`)[0]}`,f=bo.resolve(a,d),p=e.layout.isDirectory(f);if(Dy(e,n,Ey(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 Ey(e){let t=e.specifiers;return t instanceof Xs?t.specifiers.flatMap(e=>{let t=k(e.name),n=e.importKind?.value.toLowerCase();return!t||!n?[]:[{name:t,kind:n}]}):[]}function Dy(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 Oy=class{constructor(e,t={}){this.compiler=e,this.triggerCharacters=t.triggerCharacters??[]}provideCompletionItems(e,t){let n=bo.fromUri(String(e.uri)),r=Zv(e,t),i=gy(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=>Ja(e)&&ny(r,e)))return Z();if(s===void 0)return Vy();let l=yy(this.compiler,n,r,o,e);if(l!==null)return l;if([_.STRING_LITERAL,_.QUOTED_STRING].includes(o.kind)&&ny(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 Vy();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 Ay(this.compiler,n,r,e);case`~`:return ky(this.compiler,n,r);default:}else if(e instanceof L)switch(e.op?.value){case`>`:case`<`:case`<>`:case`-`:return Ay(this.compiler,n,r,e);case`.`:return zy(this.compiler,n,r,e);default:}else if(e instanceof F)return Fy(this.compiler,n,r,e);else if(e instanceof B)return Fy(this.compiler,n,r,e);else if(e instanceof ec)return Ny(this.compiler,n,r,e);else if(e instanceof tc)return Py(this.compiler,n,r);else if(e instanceof V)return qy(this.compiler,n,r,e);else if(e instanceof R)return By(this.compiler,n,r,e);else if(e instanceof P){if(ry(r,e))return Ky(this.compiler,n,r,e);if(e.bodyColon&&r>=e.bodyColon.end||e.body&&ny(r,e.body))return By(this.compiler,n,r,void 0)}return Z()}};function ky(e,t,n){return My(e,t,n,e.parse.ast(t),[j.TablePartial])}function Ay(e,t,n,r){let i=e.container.scopeKind(t,n);if([Q.REF,Q.TABLE,Q.TABLEPARTIAL].includes(i)){let i=My(e,t,n,e.container.element(t,n),[j.Table,j.Schema,j.Column]);return ly(r.op,n)?uy(i):i}return Z()}function jy(e,n,r){let i=e.symbolMembers(n).getFiltered(t);return i?dy({suggestions:i.filter(e=>r.includes(e.kind)).filter(e=>!(e instanceof Es&&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:cy(e.kind),sortText:cy(e.kind).toString().padStart(2,`0`),detail:i,range:void 0}}).filter(e=>e.label!==``)}):Z()}function My(e,n,r,i,a){if(i===void 0)return Z();let o=i,s={suggestions:[]},c;for(;o;){o instanceof N&&(c=o);let n=e.nodeSymbol(o).getFiltered(t);if(n){let t=jy(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 py(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 dy(s)}function Ny(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 V&&t.argumentList===a)return qy(e,n,i,t);if(s instanceof P&&s.isKind(r.Records)&&!(s.name instanceof V)&&ry(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=jy(e,i,[j.Column]);return cs(a)?fy(t):t}}switch(o){case Q.INDEXES:return Zy(e,n,i);case Q.REF:for(;c.length>0;){let t=c.pop();if(t instanceof L&&t.op?.value===`.`)return zy(e,n,i,t)}return Gy(e,n,i);default:break}return Z()}function Py(e,t,n){return e.container.scopeKind(t,n)===Q.RECORDS?My(e,t,n,e.container.element(t,n),[j.Schema,j.Enum,j.EnumField]):Z()}function Fy(e,t,n,r){let{token:i}=e.container.token(t,n);if([_.COMMA,_.LBRACKET].includes(i?.kind)){let r=Iy(e,t,n);return i?.kind===_.COMMA&&ly(i,n)?uy(r):r}if(r.name&&r.name.start<=n&&r.name.end>=n)return Iy(e,t,n);if(r.name instanceof Zs){let a=Ly(e,t,n,os(r.name)??``);return i?.kind===_.COLON&&ly(i,n)?uy(a):a}return Z()}function Iy(e,t,n){let r=e.container.element(t,n);if(r instanceof N)return Z();let a=e.container.scopeKind(t,n);if(r.body&&!ny(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;case Q.NOTE:e=[i.Color];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:[{label:i.Inactive,insertText:i.Inactive,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0},...[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 Ly(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`color`:if(e.container.scopeKind(t,n)===Q.NOTE)return{suggestions:[Co].map(e=>({label:e,insertText:e,kind:Y.Value,insertTextRules:X.KeepWhitespace,range:void 0}))};break;case`default`:return My(e,t,n,e.container.element(t,n),[j.Schema,j.Enum]);default:break}return Z()}function Ry(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 zy(e,n,r,i){let a=us(i)??[];return a.pop(),a.some(e=>!C(e))?Z():dy({suggestions:Ry(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:cy(e.kind),range:void 0}})})}function By(e,t,n,i){switch(e.container.scopeKind(t,n)){case Q.TABLE:case Q.TABLEPARTIAL:return Uy(e,t,n,i);case Q.PROJECT:return Wy(e,t,n,i);case Q.INDEXES:return Yy(e,t,n);case Q.ENUM:return Hy(e,t,n,i);case Q.REF:{let r=Gy(e,t,n);return e.container.token(t,n).token?.kind===_.COLON&&ly(e.container.token(t,n).token,n)?uy(r):r}case Q.TABLEGROUP:return Jy(e,t);case Q.DIAGRAMVIEW:return eb();case Q.CUSTOM:{let i=e.container.element(t,n);if(i instanceof P){let a=i.parentNode,o=a instanceof z?a.parentNode:void 0;if(o instanceof P&&o.isKind(r.DiagramView))return tb(e,t,n,i)}return Z()}default:return Z()}}function Vy(){return{suggestions:[`Table`,`TableGroup`,`Enum`,`Project`,`Ref`,`TablePartial`,`Records`,`DiagramView`,`Note`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}}function Hy(e,t,n,r){return r?.callee&&Qy(n,r)===1?My(e,t,n,e.container.element(t,n),[j.Schema,j.Table,j.Column]):Z()}function Uy(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=Qy(n,r);return a===0?{suggestions:i.map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}:a===1?Xy(e,t,n):Z()}function Wy(e,t,n,r){return!r?.callee||Qy(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 Gy(e,t,n){return My(e,t,n,e.container.element(t,n),[j.Schema,j.Table,j.Column])}function Ky(e,t,n,i){return i.isKind(r.Records)?My(e,t,n,i.parent,[j.Schema,j.Table]):Z()}function qy(e,n,i,a){let o=e.container.element(n,i),s=a.callee&&ny(i,a.callee),c=a.argumentList&&ny(i,a.argumentList);if(o instanceof P&&o.isKind(r.Records)&&ry(i,o)){if(s)return My(e,n,i,o.parent,[j.Schema,j.Table]);if(!c)return Z();let r=a.callee;if(!r)return Z();let l=us(r)??[r],u=l[l.length-1],d=u?e.nodeReferee(u).getFiltered(t):void 0;if(!d)return Z();let f=jy(e,d,[j.Column]),{argumentList:p}=a;return!p||!cs(p)?f:fy(f)}let l=[...e.container.stack(n,i)];for(let o of l){if(!c||!(o instanceof R)||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=jy(e,s,[j.Column]),{argumentList:u}=a;return!u||!cs(u)?l:fy(l)}return Z()}function Jy(e,t){return{suggestions:[...dy({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 Es&&e.isPublicSchema()?[]:{label:t,insertText:t,insertTextRules:X.KeepWhitespace,kind:cy(e.kind),range:void 0}})}).suggestions,...[`Note`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))]}}function Yy(e,t,n){return Zy(e,t,n)}function Xy(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})),...My(e,t,n,e.container.element(t,n),[j.Enum,j.Schema]).suggestions]}}function Zy(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?dy({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:cy(j.Column),range:void 0}:[]})}):Z()}function Qy(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 $y={label:`*`,insertText:`*`,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0};function eb(){return{suggestions:[...[`Tables`,`TableGroups`,`Notes`,`Schemas`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0})),$y]}}function tb(e,t,n,i){switch(i.getElementKind()){case r.DiagramViewTables:return{suggestions:[$y,...My(e,t,n,e.parse.ast(t),[j.Table,j.Schema]).suggestions]};case r.DiagramViewTableGroups:return{suggestions:[$y,...My(e,t,n,e.parse.ast(t),[j.TableGroup]).suggestions]};case r.DiagramViewSchemas:return{suggestions:[$y,{label:v,insertText:v,insertTextRules:X.KeepWhitespace,kind:Y.Module,range:void 0},...My(e,t,n,e.parse.ast(t),[j.Schema]).suggestions]};case r.DiagramViewNotes:return{suggestions:[$y,...My(e,t,n,e.parse.ast(t),[j.StickyNote]).suggestions]};default:return Z()}}var nb={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*[}\]].*)$/}},rb={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`,`none`,`check`,`tables`,`tablegroups`,`notes`,`schemas`,`inactive`],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 ib(e,t){let n=this.token.flatStream(e),{index:r,token:i}=this.container.token(e,t),a=r===void 0?-1:va(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=jc(s).find(e=>ny(o,e));if(e===void 0||e instanceof Ha)break;c.push(e),s=e}if(i?.kind===_.COLON)return c;for(;c.length>0;){let n=!1,r=h(c);if(r instanceof R){let i=this.getSource(e)||``;for(let e=r.end;e<t;e+=1)i[e]===`
|
|
12
|
-
`&&(c.pop(),n=!0)}else r instanceof I||r instanceof L?this.container.token(e,t).token!==r.op&&(c.pop(),n=!0):r instanceof B?r.listCloseBracket&&r.end<=t&&(c.pop(),n=!0):r instanceof ec?r.tupleCloseParen&&r.end<=t&&(c.pop(),n=!0):r instanceof tc?r.end<=t&&(c.pop(),n=!0):r instanceof z?r.blockCloseBrace&&r.end<=t&&(c.pop(),n=!0):r instanceof Zs||r.end<t&&(c.pop(),n=!0);if(n){let e=h(c);e instanceof P&&e.end<=t&&c.pop()}if(!n)break}return c}function ab(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 ob(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 sb(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()}var 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.
|
|
11
|
+
`?(n++,r=1):r++;return{line:n,column:r}}function gy(e,t,n,i,a){let o=e.container.element(i,a);return!(o instanceof P)||!o.isKind(r.Records)||!(o.body instanceof z)||!o.body||!ny(a,o.body)||t.getLineContent(n.lineNumber).trim()!==``?null:o.parent instanceof N?_y(e,o):vy(e,o)}function _y(e,n){if(!(n.name instanceof V))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 As||r instanceof Gs))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 vy(e,n){let r=n.parent;if(!(r instanceof P))return Z();let i=e.nodeSymbol(r).getFiltered(t);if(!(i instanceof ks))return Z();let a;if(n.name instanceof ec){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 As||r instanceof Gs))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 yy(e,t,n,r,i){let a=e.parse.ast(t);for(let o of a.body)if(o instanceof Js&&n>=o.start&&n<=o.fullEnd)return by(e,t,n,o,i,r);return null}function by(e,t,n,r,i,a){if(r.importPath&&ny(n,r.importPath))return Ty(e,t,r.importPath,i,r);if(r.importPath&&n>=r.importPath.end)return Z();if(r.fromKeyword&&n>r.fromKeyword.end)return Ty(e,t,void 0,i,r);if(r.specifiers instanceof Xs){if(!r.specifiers.openBrace){let e=wy();return ly(r.useKeyword,n)?uy(e):e}return xy(e,t,n,r.specifiers,r.importPath,a)}if(r.specifiers instanceof ic)return Z();let o=wy();return ly(r.useKeyword,n)?uy(o):o}function xy(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 Cy(e,t,i,n)}return Sy()}}return Sy()}function Sy(){return{suggestions:Object.keys(Cs).map(e=>({label:e.toLowerCase(),insertText:`${e.toLowerCase()} `,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}}function Cy(e,n,r,i){if(!r)return Z();let a=xo(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 Ws&&!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:cy(i),range:void 0}))}}function wy(){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 Ty(e,t,n,r,i){let a=t.dirname,o=n?n.value:`./`,s=n===void 0,c;if(n){let e=Qv(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=Fa(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,-wo.length)),r.startsWith(`.`)||(r=`./${r}`),o&&!r.startsWith(o))continue;let d=`${o}${r.slice(o.length).split(`/`)[0]}`,f=bo.resolve(a,d),p=e.layout.isDirectory(f);if(Dy(e,n,Ey(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 Ey(e){let t=e.specifiers;return t instanceof Xs?t.specifiers.flatMap(e=>{let t=k(e.name),n=e.importKind?.value.toLowerCase();return!t||!n?[]:[{name:t,kind:n}]}):[]}function Dy(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 Oy=class{constructor(e,t={}){this.compiler=e,this.triggerCharacters=t.triggerCharacters??[]}provideCompletionItems(e,t){let n=bo.fromUri(String(e.uri)),r=Zv(e,t),i=gy(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=>Ja(e)&&ny(r,e)))return Z();if(s===void 0)return Vy();let l=yy(this.compiler,n,r,o,e);if(l!==null)return l;if([_.STRING_LITERAL,_.QUOTED_STRING].includes(o.kind)&&ny(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 Vy();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`-`:case`->`:case`<-`:return Ay(this.compiler,n,r,e);case`~`:return ky(this.compiler,n,r);default:}else if(e instanceof L)switch(e.op?.value){case`>`:case`<`:case`<>`:case`-`:case`->`:case`<-`:return Ay(this.compiler,n,r,e);case`.`:return zy(this.compiler,n,r,e);default:}else if(e instanceof F)return Fy(this.compiler,n,r,e);else if(e instanceof B)return Fy(this.compiler,n,r,e);else if(e instanceof ec)return Ny(this.compiler,n,r,e);else if(e instanceof tc)return Py(this.compiler,n,r);else if(e instanceof V)return qy(this.compiler,n,r,e);else if(e instanceof R)return By(this.compiler,n,r,e);else if(e instanceof P){if(ry(r,e))return Ky(this.compiler,n,r,e);if(e.bodyColon&&r>=e.bodyColon.end||e.body&&ny(r,e.body))return By(this.compiler,n,r,void 0)}return Z()}};function ky(e,t,n){return My(e,t,n,e.parse.ast(t),[j.TablePartial])}function Ay(e,t,n,r){let i=e.container.scopeKind(t,n);if([Q.REF,Q.DEP,Q.TABLE,Q.TABLEPARTIAL].includes(i)){let i=My(e,t,n,e.container.element(t,n),[j.Table,j.Schema,j.Column]);return ly(r.op,n)?uy(i):i}return Z()}function jy(e,n,r){let i=e.symbolMembers(n).getFiltered(t);return i?dy({suggestions:i.filter(e=>r.includes(e.kind)).filter(e=>!(e instanceof Es&&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:cy(e.kind),sortText:cy(e.kind).toString().padStart(2,`0`),detail:i,range:void 0}}).filter(e=>e.label!==``)}):Z()}function My(e,n,r,i,a){if(i===void 0)return Z();let o=i,s={suggestions:[]},c;for(;o;){o instanceof N&&(c=o);let n=e.nodeSymbol(o).getFiltered(t);if(n){let t=jy(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 py(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 dy(s)}function Ny(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 V&&t.argumentList===a)return qy(e,n,i,t);if(s instanceof P&&s.isKind(r.Records)&&!(s.name instanceof V)&&ry(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=jy(e,i,[j.Column]);return cs(a)?fy(t):t}}switch(o){case Q.INDEXES:return Zy(e,n,i);case Q.REF:case Q.DEP:for(;c.length>0;){let t=c.pop();if(t instanceof L&&t.op?.value===`.`)return zy(e,n,i,t)}return Gy(e,n,i);default:break}return Z()}function Py(e,t,n){return e.container.scopeKind(t,n)===Q.RECORDS?My(e,t,n,e.container.element(t,n),[j.Schema,j.Enum,j.EnumField]):Z()}function Fy(e,t,n,r){let{token:i}=e.container.token(t,n);if([_.COMMA,_.LBRACKET].includes(i?.kind)){let r=Iy(e,t,n);return i?.kind===_.COMMA&&ly(i,n)?uy(r):r}if(r.name&&r.name.start<=n&&r.name.end>=n)return Iy(e,t,n);if(r.name instanceof Zs){let a=Ly(e,t,n,os(r.name)??``);return i?.kind===_.COLON&&ly(i,n)?uy(a):a}return Z()}function Iy(e,t,n){let r=e.container.element(t,n);if(r instanceof N)return Z();let a=e.container.scopeKind(t,n);if(r.body&&!ny(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;case Q.NOTE:e=[i.Color];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.Dep,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:[{label:i.Inactive,insertText:i.Inactive,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0},...[i.Update,i.Delete,i.Color].map(e=>({label:e,insertText:`${e}: `,kind:Y.Property,insertTextRules:X.KeepWhitespace,range:void 0}))]};case Q.DEP:return{suggestions:[i.Note,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 Ly(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`color`:if(e.container.scopeKind(t,n)===Q.NOTE)return{suggestions:[Co].map(e=>({label:e,insertText:e,kind:Y.Value,insertTextRules:X.KeepWhitespace,range:void 0}))};break;case`default`:return My(e,t,n,e.container.element(t,n),[j.Schema,j.Enum]);default:break}return Z()}function Ry(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 zy(e,n,r,i){let a=us(i)??[];return a.pop(),a.some(e=>!C(e))?Z():dy({suggestions:Ry(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:cy(e.kind),range:void 0}})})}function By(e,t,n,i){switch(e.container.scopeKind(t,n)){case Q.TABLE:case Q.TABLEPARTIAL:return Uy(e,t,n,i);case Q.PROJECT:return Wy(e,t,n,i);case Q.INDEXES:return Yy(e,t,n);case Q.ENUM:return Hy(e,t,n,i);case Q.REF:case Q.DEP:{let r=Gy(e,t,n);return e.container.token(t,n).token?.kind===_.COLON&&ly(e.container.token(t,n).token,n)?uy(r):r}case Q.TABLEGROUP:return Jy(e,t);case Q.DIAGRAMVIEW:return eb();case Q.CUSTOM:{let i=e.container.element(t,n);if(i instanceof P){let a=i.parentNode,o=a instanceof z?a.parentNode:void 0;if(o instanceof P&&o.isKind(r.DiagramView))return tb(e,t,n,i)}return Z()}default:return Z()}}function Vy(){return{suggestions:[`Table`,`TableGroup`,`Enum`,`Project`,`Ref`,`Dep`,`TablePartial`,`Records`,`DiagramView`,`Note`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}}function Hy(e,t,n,r){return r?.callee&&Qy(n,r)===1?My(e,t,n,e.container.element(t,n),[j.Schema,j.Table,j.Column]):Z()}function Uy(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=Qy(n,r);return a===0?{suggestions:i.map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}:a===1?Xy(e,t,n):Z()}function Wy(e,t,n,r){return!r?.callee||Qy(n,r)===0?{suggestions:[`Table`,`TableGroup`,`Enum`,`Note`,`Ref`,`Dep`,`TablePartial`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))}:Z()}function Gy(e,t,n){return My(e,t,n,e.container.element(t,n),[j.Schema,j.Table,j.Column])}function Ky(e,t,n,i){return i.isKind(r.Records)?My(e,t,n,i.parent,[j.Schema,j.Table]):Z()}function qy(e,n,i,a){let o=e.container.element(n,i),s=a.callee&&ny(i,a.callee),c=a.argumentList&&ny(i,a.argumentList);if(o instanceof P&&o.isKind(r.Records)&&ry(i,o)){if(s)return My(e,n,i,o.parent,[j.Schema,j.Table]);if(!c)return Z();let r=a.callee;if(!r)return Z();let l=us(r)??[r],u=l[l.length-1],d=u?e.nodeReferee(u).getFiltered(t):void 0;if(!d)return Z();let f=jy(e,d,[j.Column]),{argumentList:p}=a;return!p||!cs(p)?f:fy(f)}let l=[...e.container.stack(n,i)];for(let o of l){if(!c||!(o instanceof R)||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=jy(e,s,[j.Column]),{argumentList:u}=a;return!u||!cs(u)?l:fy(l)}return Z()}function Jy(e,t){return{suggestions:[...dy({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 Es&&e.isPublicSchema()?[]:{label:t,insertText:t,insertTextRules:X.KeepWhitespace,kind:cy(e.kind),range:void 0}})}).suggestions,...[`Note`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0}))]}}function Yy(e,t,n){return Zy(e,t,n)}function Xy(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})),...My(e,t,n,e.container.element(t,n),[j.Enum,j.Schema]).suggestions]}}function Zy(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?dy({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:cy(j.Column),range:void 0}:[]})}):Z()}function Qy(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 $y={label:`*`,insertText:`*`,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0};function eb(){return{suggestions:[...[`Tables`,`TableGroups`,`Notes`,`Schemas`].map(e=>({label:e,insertText:e,insertTextRules:X.KeepWhitespace,kind:Y.Keyword,range:void 0})),$y]}}function tb(e,t,n,i){switch(i.getElementKind()){case r.DiagramViewTables:return{suggestions:[$y,...My(e,t,n,e.parse.ast(t),[j.Table,j.Schema]).suggestions]};case r.DiagramViewTableGroups:return{suggestions:[$y,...My(e,t,n,e.parse.ast(t),[j.TableGroup]).suggestions]};case r.DiagramViewSchemas:return{suggestions:[$y,{label:v,insertText:v,insertTextRules:X.KeepWhitespace,kind:Y.Module,range:void 0},...My(e,t,n,e.parse.ast(t),[j.Schema]).suggestions]};case r.DiagramViewNotes:return{suggestions:[$y,...My(e,t,n,e.parse.ast(t),[j.StickyNote]).suggestions]};default:return Z()}}var nb={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*[}\]].*)$/}},rb={tokenPostfix:`.dbml`,brackets:[{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`{`,close:`}`,token:`delimiter.curly`}],decls:[`project`,`tablegroup`,`table`,`enum`,`ref`,`dep`,`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`,`dep`,`note`,`headercolor`,`pk`,`null`,`increment`,`unique`,`default`,`note`,`primary`,`key`,`name`,`as`,`color`,`none`,`check`,`tables`,`tablegroups`,`notes`,`schemas`,`inactive`],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 ib(e,t){let n=this.token.flatStream(e),{index:r,token:i}=this.container.token(e,t),a=r===void 0?-1:va(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=jc(s).find(e=>ny(o,e));if(e===void 0||e instanceof Ha)break;c.push(e),s=e}if(i?.kind===_.COLON)return c;for(;c.length>0;){let n=!1,r=h(c);if(r instanceof R){let i=this.getSource(e)||``;for(let e=r.end;e<t;e+=1)i[e]===`
|
|
12
|
+
`&&(c.pop(),n=!0)}else r instanceof I||r instanceof L?this.container.token(e,t).token!==r.op&&(c.pop(),n=!0):r instanceof B?r.listCloseBracket&&r.end<=t&&(c.pop(),n=!0):r instanceof ec?r.tupleCloseParen&&r.end<=t&&(c.pop(),n=!0):r instanceof tc?r.end<=t&&(c.pop(),n=!0):r instanceof z?r.blockCloseBrace&&r.end<=t&&(c.pop(),n=!0):r instanceof Zs||r.end<t&&(c.pop(),n=!0);if(n){let e=h(c);e instanceof P&&e.end<=t&&c.pop()}if(!n)break}return c}function ab(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 ob(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 sb(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()}var 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.DEP=6]=`DEP`,e[e.PROJECT=7]=`PROJECT`,e[e.CUSTOM=8]=`CUSTOM`,e[e.TOPLEVEL=9]=`TOPLEVEL`,e[e.TABLEPARTIAL=10]=`TABLEPARTIAL`,e[e.CHECKS=11]=`CHECKS`,e[e.RECORDS=12]=`RECORDS`,e[e.DIAGRAMVIEW=13]=`DIAGRAMVIEW`,e}({});function cb(e,t){let n=this.container.element(e,t);if(n instanceof N)return Q.TOPLEVEL;switch(n.type?.value.toLowerCase()){case`table`:return Q.TABLE;case`enum`:return Q.ENUM;case`ref`:return Q.REF;case`dep`:return Q.DEP;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 lb(e,t){let r=t.originalSymbol;if(r.filepath.equals(e))return n.create(db(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=ub(this,e);if(i.length>0)return n.create({schema:i.join(`.`),name:t});let a=db(this,r);return a?n.create({...a,name:t}):n.create({schema:v,name:t})}return n.create(db(this,r))}function ub(e,t){let n=[],r=t;for(;r;){let t=e.symbolParent(r).find(e=>e instanceof Es&&e.isKind(j.Schema));if(!t||t.isPublicSchema())break;n.unshift(t.name??``),r=t}return n}function db(e,n){if(!n.declaration)return n.name?{schema:v,name:n.name}:void 0;let r=e.nodeFullname(n.declaration).getFiltered(t);if(!r||r.length===0)return n.name?{schema:v,name:n.name}:void 0;let i=r[r.length-1];return{schema:r.length>1?r.slice(0,-1).join(`.`):v,name:i}}function fb(e){let{ast:t}=this.parseFile(e).getValue(),n=[],r=new Set;for(let i of t.body){if(!(i instanceof Js)||!i.importPath)continue;let t=xo(e,i.importPath.value);!t||r.has(t.absolute)||(r.add(t.absolute),n.push(t))}return n}function pb(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 mb(e){return pb(this,e?[e]:this.layout.getEntrypoints())}function hb(e){return this.bindFile(e),this.parseFile(e).getValue().ast}function gb(e){return this.interpretFile(e).getErrors()}function _b(e){return this.interpretFile(e).getWarnings()}function vb(e){return this.parseFile(e).getValue().tokens}function yb(e){let n=this.parseFile(e).getValue().ast,r=this.nodeSymbol(n).getFiltered(t);if(r)return this.interpretSymbol(r,e).getFiltered(t)}function bb(e){let n=this.parseFile(e).getValue().ast,r=this.nodeSymbol(n).getFiltered(t);if(r)return this.symbolMembers(r).getFiltered(t)}function xb(e){return this.parseFile(e).getValue().tokens.flatMap(e=>[...e.leadingInvalid,e,...e.trailingInvalid])}function Sb(e){return this.parseFile(e).getValue().tokens.filter($a)}function Cb(e,t){let n=this.parse.ast(e);for(;;){let e=jc(n).find(e=>ny(t,e));if(e===void 0)return n;if(e instanceof Ha)return e;n=e}}function wb(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 Tb(){let e=xg(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 Eb(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 Db(){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 Ob(e){return this.parseFile(e).chain(({ast:e})=>this.validateNode(e).map(()=>void 0))}var kb=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 Ha.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(Ha.create(_.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(_.SPACE);break;case`\r`:break;case`
|
|
14
14
|
`:this.addToken(_.NEWLINE);break;case` `:this.addToken(_.TAB);break;case`,`:this.addToken(_.COMMA);break;case`(`:this.addToken(_.LPAREN);break;case`)`:this.addToken(_.RPAREN);break;case`[`:this.addToken(_.LBRACKET);break;case`]`:this.addToken(_.RBRACKET);break;case`{`:this.addToken(_.LBRACE);break;case`}`:this.addToken(_.RBRACE);break;case`;`:this.addToken(_.SEMICOLON);break;case`:`:this.addToken(_.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(_.WILDCARD);break;default:if(Ba(e)){this.operator(e);break}if(Oo(e)){this.identifier();break}if(ko(e)){this.numericLiteralOrIdentifier();break}this.addToken(_.OP,!0),this.errors.push(new b(y.UNKNOWN_SYMBOL,`Unexpected token '${e}'`,this.createToken(_.OP,!0)));break}this.start={...this.current}}}gatherTrivia(){let e=!0,t=[],n,r=[];for(let i of this.tokens)za(i)?(t.push(i),i.kind===_.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&&$a(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];$a(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(`
|
|
15
15
|
`))&&!this.check(t);)this.peek()===`\\`&&!i?(this.advance(),o+=this.escapedString()):o+=this.advance();if(this.isAtEnd()&&!r){let t=this.createToken(e,!0);this.tokens.push(t),this.errors.push(new b(y.UNEXPECTED_EOF,`EOF reached while parsing`,t));return}if(this.check(`
|
|
@@ -25,7 +25,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Symbol(
|
|
|
25
25
|
`;){i--,i>0&&e[i-1]===`\r`&&i--;let t=e.lastIndexOf(`
|
|
26
26
|
`,i-1)+1;if(e.substring(t,i).trim()!==``){i=r.startIndex,i>0&&e[i-1]===`
|
|
27
27
|
`&&(i--,i>0&&e[i-1]===`\r`&&i--);break}}return a<e.length&&e[a]===`\r`&&a++,a<e.length&&e[a]===`
|
|
28
|
-
`&&a++,[{start:i,end:a,newText:``}]}function yx(e){return e&&e.length>0?e:v}function bx(e,t){if(e.length===0)return;if(!t){let t=e[e.length-1];return{schemaName:e.length>1?e[e.length-2]:null,tableName:t,fieldNames:[]}}let n=[e[e.length-1]],r=e[e.length-2];return{schemaName:e.length>2?e[e.length-3]:null,tableName:r,fieldNames:n}}function xx(e,t){if(yx(e.schemaName)!==yx(t.schemaName)||e.tableName!==t.tableName)return!1;let n=e.fieldNames??[],r=t.fieldNames??[];return n.length===r.length?n.every((e,t)=>e===r[t]):!1}function Sx(e,t){return xx(e.upstream,t.upstream)&&xx(e.downstream,t.downstream)}function Cx(e,t){return e.edges.some(e=>Sx(e,t))}function wx(e){let t=e.op?.value;if(t!==`->`&&t!==`<-`)return;let n=e.leftExpression,r=e.rightExpression;if(!n||!r)return;let i=t===`<-`?r:n,a=t===`<-`?n:r,o=D(i),s=D(a);if(!o||!s)return;let c=o.length>1&&s.length>1,l=bx(o,c),u=bx(s,c);if(!(!l||!u))return{upstream:l,downstream:u}}function Tx(e){if(e.name instanceof Zs)return os(e.name)?.toLowerCase()}function Ex(e){for(let t
|
|
28
|
+
`&&a++,[{start:i,end:a,newText:``}]}function yx(e){return e&&e.length>0?e:v}function bx(e,t){if(e.length===0)return;if(!t){let t=e[e.length-1];return{schemaName:e.length>1?e[e.length-2]:null,tableName:t,fieldNames:[]}}let n=[e[e.length-1]],r=e[e.length-2];return{schemaName:e.length>2?e[e.length-3]:null,tableName:r,fieldNames:n}}function xx(e,t){if(yx(e.schemaName)!==yx(t.schemaName)||e.tableName!==t.tableName)return!1;let n=e.fieldNames??[],r=t.fieldNames??[];return n.length===r.length?n.every((e,t)=>e===r[t]):!1}function Sx(e,t){return xx(e.upstream,t.upstream)&&xx(e.downstream,t.downstream)}function Cx(e,t){return e.edges.some(e=>Sx(e,t))}function wx(e){let t=e.op?.value;if(t!==`->`&&t!==`<-`)return;let n=e.leftExpression,r=e.rightExpression;if(!n||!r)return;let i=t===`<-`?r:n,a=t===`<-`?n:r,o=D(i),s=D(a);if(!o||!s)return;let c=o.length>1&&s.length>1,l=bx(o,c),u=bx(s,c);if(!(!l||!u))return{upstream:l,downstream:u}}function Tx(e){if(e.name instanceof Zs)return os(e.name)?.toLowerCase()}function Ex(e){let t=e.elementList;for(let n=0;n<t.length;n+=1){let r=t[n];if(Tx(r)!==`color`||!r.value)continue;let i=r.start,a=r.end;return t.length===1?(i=e.start,a=e.end):n<t.length-1?a=t[n+1].start:i=t[n-1].end,{kind:`attribute`,start:r.start,end:r.end,stripStart:i,stripEnd:a}}}function Dx(e){let t=[],n=new kb(e,Eo).lex();if(n.getErrors().length>0)return t;let i=new Nb(e,n.getValue(),new Ks,Eo).parse();if(i.getErrors().length>0)return t;let a=i.getValue().ast;for(let e of a.declarations){if(!(e instanceof P)||!e.isKind(r.Dep))continue;let n=[],i,a,o,s,c;e.attributeList&&(i=Ex(e.attributeList),!i&&e.attributeList.listCloseBracket&&(a=e.attributeList.listCloseBracket.start,o=e.attributeList.elementList.length===0));let l=e.body;if(l instanceof R){if(l.callee instanceof L){let e=wx(l.callee);e&&n.push(e)}let t=l.args.find(e=>e instanceof B);t?(i||=Ex(t),!i&&t.listCloseBracket&&(a=t.listCloseBracket.start,o=t.elementList.length===0)):c=e.end}else if(l){s=l.start;for(let e of l.body)if(e instanceof R&&e.callee instanceof L){let t=wx(e.callee);t&&n.push(t);let r=e.args.find(e=>e instanceof B);!i&&r&&(i=Ex(r))}else if(e instanceof P&&e.type?.value?.toLowerCase()===`color`){let t=e.body;t instanceof R&&t.callee&&(i={kind:`subDeclaration`,start:e.start,end:e.end,stripStart:e.start,stripEnd:e.end})}}t.push({startIndex:e.start,endIndex:e.end,attributeListInsertAt:a,attributeListIsEmpty:o,bodyOpenAt:s,shortFormEnd:c,edges:n,color:i})}return t}function Ox(e){let t=[],n=new kb(e,Eo).lex();if(n.getErrors().length>0)return t;let i=new Nb(e,n.getValue(),new Ks,Eo).parse();if(i.getErrors().length>0)return t;let a=i.getValue().ast;for(let e of a.declarations){if(!(e instanceof P)||!e.isKind(r.Table))continue;let n=e.name?D(e.name)??[]:[];if(n.length===0)continue;let i=n[n.length-1],a=n.length>1?n[n.length-2]:null,o=e.body;if(!(!o||o instanceof R))for(let e of o.body){if(!(e instanceof R)||!e.callee)continue;let n=D(e.callee)??[],r=n[n.length-1];if(!r)continue;let o=e.args.find(e=>e instanceof B);if(!o)continue;let s=o.elementList;for(let e=0;e<s.length;e+=1){let n=s[e];if(Tx(n)!==`dep`)continue;let c=n.value;if(!(c instanceof I)||!c.expression)continue;let l=c.op?.value;if(l!==`->`&&l!==`<-`)continue;let u=D(c.expression);if(!u)continue;let d={schemaName:a,tableName:i,fieldNames:[r]},f=bx(u,u.length>1);if(!f)continue;let p=l===`->`?{upstream:d,downstream:f}:{upstream:f,downstream:d},m=n.start,ee=n.end;s.length===1?(m=o.start,ee=o.end):e<s.length-1?ee=s[e+1].start:m=s[e-1].end,t.push({edge:p,stripStart:m,stripEnd:ee})}}}return t}function kx(e){let t=yx(e.schemaName),n=[];t!==`public`&&n.push(gg(t)),n.push(gg(e.tableName));for(let t of e.fieldNames??[])n.push(gg(t));return n.join(`.`)}function Ax(e,t){return`Dep [color: ${t}] {\n ${kx(e.upstream)} -> ${kx(e.downstream)}\n}`}function jx(e,t){return e.find(e=>Cx(e,t))}function Mx(e,t){let n=e.color??``;if(t.color)return[{start:t.color.start,end:t.color.end,newText:`color: ${n}`}];if(t.attributeListInsertAt!==void 0){let e=t.attributeListIsEmpty?``:`, `;return[{start:t.attributeListInsertAt,end:t.attributeListInsertAt,newText:`${e}color: ${n}`}]}return t.bodyOpenAt===void 0?t.shortFormEnd===void 0?[]:[{start:t.shortFormEnd,end:t.shortFormEnd,newText:` [color: ${n}]`}]:[{start:t.bodyOpenAt,end:t.bodyOpenAt,newText:`[color: ${n}] `}]}function Nx(e,t,n,r){let i=jx(n,t.edge);if(i)return Mx(t,i);let a=Ax(t.edge,t.color??``),o={start:e.length,end:e.length,newText:`
|
|
29
29
|
|
|
30
30
|
`+a+`
|
|
31
|
-
`},s=r.find(e=>Sx(e.edge,t.edge));return s?[{start:s.stripStart,end:s.stripEnd,newText:``},o]:[o]}function Px(e,t,n,r){switch(t.operation){case`create`:return Nx(e,t,n,r);case`update`:{let e=jx(n,t.edge);return e?Mx(t,e):[]}default:return[]}}function
|
|
31
|
+
`},s=r.find(e=>Sx(e.edge,t.edge));return s?[{start:s.stripStart,end:s.stripEnd,newText:``},o]:[o]}function Px(e){return e.color?[{start:e.color.stripStart,end:e.color.stripEnd,newText:``}]:[]}function Fx(e,t,n,r){switch(t.operation){case`create`:return Nx(e,t,n,r);case`update`:{let e=jx(n,t.edge);return e?Mx(t,e):[]}case`remove`:{let e=jx(n,t.edge);return e?Px(e):[]}default:return[]}}function Ix(e,t,n){let r=this.getSource(e)??``,i=n??Dx(r),a=Ox(r),o=[];for(let e of t)o.push(...Fx(r,e,i,a));return o.sort((e,t)=>t.start-e.start),{newDbml:Xb(r,o,!0),edits:o}}var Lx=Symbol(`COMPUTING`),Rx=class{constructor(e){this.layout=e,this.nodeIdGenerator=new Ks,this.symbolIdGenerator=new ws,this.symbolFactory=new eo(this.symbolIdGenerator),this.sourceSnapshot=new Map,this.globalCache=new Map,this.globallyQuerying=!1,this.localCache=new Map,this.parseFile=this.localQuery(Bb),this.parseProject=this.globalQuery(Vb),this.validateNode=this.localQuery(V_),this.validateFile=this.localQuery(Ob),this.nodeFullname=this.localQuery(U_),this.nodeAlias=this.localQuery(W_),this.nodeSettings=this.localQuery(H_),this.canonicalName=this.globalQuery(lb),this.bindNode=this.globalQuery(Zg),this.bindFile=this.globalQuery(wb),this.bindProject=this.globalQuery(Tb),this.interpretSymbol=this.globalQuery($g),this.interpretMetadata=this.globalQuery(e_),this.interpretFile=this.globalQuery(Eb),this.interpretProject=this.globalQuery(Db),this.nodeSymbol=this.globalQuery(Jg),this.nodeMetadata=this.globalQuery(Qg),this.symbolMembers=this.globalQuery(Yg),this.symbolMembersLookupMap=this.globalQuery(Hb),this.lookupMembers=this.globalQuery(Ub),this.nodeReferee=this.globalQuery(Xg),this.resolutionIndex=this.globalQuery(Gb),this.symbolReferences=this.globalQuery(qb),this.symbolParent=this.globalQuery(Kb),this.symbolMetadata=this.globalQuery(Jb),this.symbolAliases=this.globalQuery(Wb),this.symbolUses=this.globalQuery(Yb),this.fileDependencies=this.localQuery(fb),this.reachableFiles=this.globalQuery(mb),this.usableMembers=this.globalQuery(Zh),this.nodeAtPosition=this.localQuery(Cb),this.renameTable=ox.bind(this),this.syncDiagramView=mx.bind(this),this.syncDep=Ix.bind(this),this.token={invalidStream:this.localQuery(Sb),flatStream:this.localQuery(xb)},this.parse={source:e=>this.getSource(e)||``,ast:(e=Eo)=>hb.call(this,e),errors:(e=Eo)=>gb.call(this,e),warnings:(e=Eo)=>_b.call(this,e),tokens:(e=Eo)=>vb.call(this,e),rawDb:(e=Eo)=>yb.call(this,e),publicSymbolTable:(e=Eo)=>bb.call(this,e)},this.container={stack:this.localQuery(ib),token:this.localQuery(ab),element:this.localQuery(ob),scope:this.localQuery(sb),scopeKind:this.localQuery(cb)}}getSource(e){return this.layout.getSource(e)}cleanStaleLocalCache(e){let t=this.layout.getSource(e),n=e.absolute,r=this.sourceSnapshot.get(n);r===void 0?this.sourceSnapshot.set(n,t):r!==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 pb(this,e))this.cleanStaleLocalCache(t);t&&this.globalCache.clear()}globalQuery(e){let t=Symbol();return((...n)=>{let r=!this.globallyQuerying;r&&(this.globallyQuerying=!0,this.cleanStaleGlobalCache());try{let r=this.globalCache.get(t);r||(r=new Map,this.globalCache.set(t,r));let i=n.length===0?``:n.length===1?Tc(n[0]):n.map(e=>Tc(e)).join(`\0`),a=r.get(i);if(a){if(a===Lx)throw Error(`Cycle detected in query: ${e.name}(${i})`);return a}r.set(i,Lx);try{let t=e.apply(this,n);return r.set(i,t),t}catch(e){throw r.delete(i),e}}finally{r&&(this.globallyQuerying=!1)}})}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.length===0?``:n.length===1?Tc(n[0]):n.map(e=>Tc(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===Lx)throw Error(`Cycle detected in query: ${e.name}(${a}, ${o})`);return t}c.set(o,Lx);try{let t=e.apply(this,n);return c.set(o,t),t}catch(e){throw c.delete(o),e}})}findDiagramViewBlocks(e){return lx(this.getSource(e)??``)}findDepBlocks(e){return Dx(this.getSource(e)??``)}initMonacoServices(e){let t=e?.autocompletion?.triggerCharacters??[];return{definitionProvider:new $v(this),referenceProvider:new ty(this),autocompletionProvider:new Oy(this,{triggerCharacters:t}),diagnosticsProvider:new ey(this)}}},zx=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(bo.from)}getEntrypoints(){return[...this.files.keys()].map(bo.from).sort((e,t)=>e.absolute.localeCompare(t.absolute))}clone(){return new e(this.files)}};exports.ArrayNode=cc,exports.AttributeNode=F,exports.BlockExpressionNode=z,exports.CallExpressionNode=V,exports.CommaExpressionNode=tc,exports.CompileError=b,exports.CompileErrorCode=y,exports.Compiler=Rx,exports.CompletionItemInsertTextRule=X,exports.CompletionItemKind=Y,exports.DBMLCompletionItemProvider=Oy,exports.DBMLDefinitionProvider=$v,exports.DBMLDiagnosticsProvider=ey,exports.DBMLReferencesProvider=ty,exports.DEFAULT_ENTRY=Eo,exports.ElementDeclarationNode=P,exports.ElementKind=r,exports.EmptyNode=sc,exports.FALSY_VALUES=Zm,exports.Filepath=bo,exports.FunctionApplicationNode=R,exports.FunctionExpressionNode=$s,exports.GroupExpressionNode=nc,exports.IdentifierStreamNode=Zs,exports.InfixExpressionNode=L,exports.ListExpressionNode=B,exports.LiteralNode=rc,exports.MarkerSeverity=Xv,exports.MemoryProjectLayout=zx,exports.PostfixExpressionNode=Qs,exports.PrefixExpressionNode=I,exports.PrimaryExpressionNode=oc,exports.ProgramNode=N,exports.ScopeKind=Q,exports.SymbolKind=j,exports.SyntaxNode=M,exports.SyntaxNodeIdGenerator=Ks,exports.SyntaxNodeKind=qs,exports.SyntaxToken=Ha,exports.SyntaxTokenKind=_,exports.TRUTHY_VALUES=Xm,exports.TupleExpressionNode=ec,exports.UNHANDLED=t,exports.Uri=zv,exports.UseDeclarationNode=Js,exports.UseSpecifierListNode=Xs,exports.UseSpecifierNode=Ys,exports.VariableNode=ac,exports.WildcardNode=ic,exports.addDoubleQuoteIfNeeded=gg,exports.dbmlLanguageConfig=nb,exports.dbmlMonarchTokensProvider=rb,exports.escapeString=vg,exports.extractNumericLiteral=ps,exports.extractSignedNumber=qm,exports.formatRecordValue=yg,exports.getRecordValueType=Al,exports.isBinaryType=Dl,exports.isBooleanType=Tl,exports.isDateTimeType=Ol,exports.isEmptyStringLiteral=Gm,exports.isFloatType=Cl,exports.isFunctionExpression=Km,exports.isIntegerType=Sl,exports.isNullish=Wm,exports.isNumericType=wl,exports.isOp=Ba,exports.isOpToken=Va,exports.isSerialType=kl,exports.isStringType=El,exports.isTriviaToken=za,exports.isValidIdentifier=hg,exports.normalizeTypeName=xl,exports.splitQualifiedIdentifier=bg,exports.tryExtractBoolean=Qm,exports.tryExtractDateTime=ih,exports.tryExtractEnum=$m,exports.tryExtractInteger=Ym,exports.tryExtractNumeric=Jm,exports.tryExtractString=eh,exports.unescapeString=_g,exports.validateForeignKeys=Dh,exports.validatePrimaryKey=gh,exports.validateUnique=Ch;
|
package/dist/dbml-parse.mjs
CHANGED
|
@@ -13190,7 +13190,9 @@ var Oy = class {
|
|
|
13190
13190
|
case ">":
|
|
13191
13191
|
case "<":
|
|
13192
13192
|
case "<>":
|
|
13193
|
-
case "-":
|
|
13193
|
+
case "-":
|
|
13194
|
+
case "->":
|
|
13195
|
+
case "<-": return Ay(this.compiler, n, r, e);
|
|
13194
13196
|
case "~": return ky(this.compiler, n, r);
|
|
13195
13197
|
default:
|
|
13196
13198
|
}
|
|
@@ -13198,7 +13200,9 @@ var Oy = class {
|
|
|
13198
13200
|
case ">":
|
|
13199
13201
|
case "<":
|
|
13200
13202
|
case "<>":
|
|
13201
|
-
case "-":
|
|
13203
|
+
case "-":
|
|
13204
|
+
case "->":
|
|
13205
|
+
case "<-": return Ay(this.compiler, n, r, e);
|
|
13202
13206
|
case ".": return zy(this.compiler, n, r, e);
|
|
13203
13207
|
default:
|
|
13204
13208
|
}
|
|
@@ -13222,6 +13226,7 @@ function Ay(e, t, n, r) {
|
|
|
13222
13226
|
let i = e.container.scopeKind(t, n);
|
|
13223
13227
|
if ([
|
|
13224
13228
|
Q.REF,
|
|
13229
|
+
Q.DEP,
|
|
13225
13230
|
Q.TABLE,
|
|
13226
13231
|
Q.TABLEPARTIAL
|
|
13227
13232
|
].includes(i)) {
|
|
@@ -13292,6 +13297,7 @@ function Ny(e, n, i, a) {
|
|
|
13292
13297
|
switch (o) {
|
|
13293
13298
|
case Q.INDEXES: return Zy(e, n, i);
|
|
13294
13299
|
case Q.REF:
|
|
13300
|
+
case Q.DEP:
|
|
13295
13301
|
for (; c.length > 0;) {
|
|
13296
13302
|
let t = c.pop();
|
|
13297
13303
|
if (t instanceof L && t.op?.value === ".") return zy(e, n, i, t);
|
|
@@ -13365,6 +13371,7 @@ function Iy(e, t, n) {
|
|
|
13365
13371
|
range: void 0
|
|
13366
13372
|
})), ...[
|
|
13367
13373
|
i.Ref,
|
|
13374
|
+
i.Dep,
|
|
13368
13375
|
i.Default,
|
|
13369
13376
|
i.Note,
|
|
13370
13377
|
i.Check
|
|
@@ -13416,6 +13423,13 @@ function Iy(e, t, n) {
|
|
|
13416
13423
|
insertTextRules: X.KeepWhitespace,
|
|
13417
13424
|
range: void 0
|
|
13418
13425
|
}))] };
|
|
13426
|
+
case Q.DEP: return { suggestions: [i.Note, i.Color].map((e) => ({
|
|
13427
|
+
label: e,
|
|
13428
|
+
insertText: `${e}: `,
|
|
13429
|
+
kind: Y.Property,
|
|
13430
|
+
insertTextRules: X.KeepWhitespace,
|
|
13431
|
+
range: void 0
|
|
13432
|
+
})) };
|
|
13419
13433
|
case Q.CHECKS: return { suggestions: [i.Name].map((e) => ({
|
|
13420
13434
|
label: e,
|
|
13421
13435
|
insertText: `${e}: `,
|
|
@@ -13500,7 +13514,8 @@ function By(e, t, n, i) {
|
|
|
13500
13514
|
case Q.PROJECT: return Wy(e, t, n, i);
|
|
13501
13515
|
case Q.INDEXES: return Yy(e, t, n);
|
|
13502
13516
|
case Q.ENUM: return Hy(e, t, n, i);
|
|
13503
|
-
case Q.REF:
|
|
13517
|
+
case Q.REF:
|
|
13518
|
+
case Q.DEP: {
|
|
13504
13519
|
let r = Gy(e, t, n);
|
|
13505
13520
|
return e.container.token(t, n).token?.kind === _.COLON && ly(e.container.token(t, n).token, n) ? uy(r) : r;
|
|
13506
13521
|
}
|
|
@@ -13524,6 +13539,7 @@ function Vy() {
|
|
|
13524
13539
|
"Enum",
|
|
13525
13540
|
"Project",
|
|
13526
13541
|
"Ref",
|
|
13542
|
+
"Dep",
|
|
13527
13543
|
"TablePartial",
|
|
13528
13544
|
"Records",
|
|
13529
13545
|
"DiagramView",
|
|
@@ -13573,6 +13589,7 @@ function Wy(e, t, n, r) {
|
|
|
13573
13589
|
"Enum",
|
|
13574
13590
|
"Note",
|
|
13575
13591
|
"Ref",
|
|
13592
|
+
"Dep",
|
|
13576
13593
|
"TablePartial"
|
|
13577
13594
|
].map((e) => ({
|
|
13578
13595
|
label: e,
|
|
@@ -13799,6 +13816,7 @@ var nb = {
|
|
|
13799
13816
|
"table",
|
|
13800
13817
|
"enum",
|
|
13801
13818
|
"ref",
|
|
13819
|
+
"dep",
|
|
13802
13820
|
"note",
|
|
13803
13821
|
"tablepartial",
|
|
13804
13822
|
"records",
|
|
@@ -13812,6 +13830,7 @@ var nb = {
|
|
|
13812
13830
|
settings: [
|
|
13813
13831
|
"indexes",
|
|
13814
13832
|
"ref",
|
|
13833
|
+
"dep",
|
|
13815
13834
|
"note",
|
|
13816
13835
|
"headercolor",
|
|
13817
13836
|
"pk",
|
|
@@ -14032,7 +14051,7 @@ function sb(e, n) {
|
|
|
14032
14051
|
//#endregion
|
|
14033
14052
|
//#region src/compiler/types.ts
|
|
14034
14053
|
var Q = /* @__PURE__ */ function(e) {
|
|
14035
|
-
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.
|
|
14054
|
+
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.DEP = 6] = "DEP", e[e.PROJECT = 7] = "PROJECT", e[e.CUSTOM = 8] = "CUSTOM", e[e.TOPLEVEL = 9] = "TOPLEVEL", e[e.TABLEPARTIAL = 10] = "TABLEPARTIAL", e[e.CHECKS = 11] = "CHECKS", e[e.RECORDS = 12] = "RECORDS", e[e.DIAGRAMVIEW = 13] = "DIAGRAMVIEW", e;
|
|
14036
14055
|
}({});
|
|
14037
14056
|
//#endregion
|
|
14038
14057
|
//#region src/compiler/queries/container/scopeKind.ts
|
|
@@ -14043,6 +14062,7 @@ function cb(e, t) {
|
|
|
14043
14062
|
case "table": return Q.TABLE;
|
|
14044
14063
|
case "enum": return Q.ENUM;
|
|
14045
14064
|
case "ref": return Q.REF;
|
|
14065
|
+
case "dep": return Q.DEP;
|
|
14046
14066
|
case "tablegroup": return Q.TABLEGROUP;
|
|
14047
14067
|
case "indexes": return Q.INDEXES;
|
|
14048
14068
|
case "note": return Q.NOTE;
|
|
@@ -15694,11 +15714,19 @@ function Tx(e) {
|
|
|
15694
15714
|
if (e.name instanceof Zs) return os(e.name)?.toLowerCase();
|
|
15695
15715
|
}
|
|
15696
15716
|
function Ex(e) {
|
|
15697
|
-
|
|
15698
|
-
|
|
15699
|
-
|
|
15700
|
-
|
|
15701
|
-
|
|
15717
|
+
let t = e.elementList;
|
|
15718
|
+
for (let n = 0; n < t.length; n += 1) {
|
|
15719
|
+
let r = t[n];
|
|
15720
|
+
if (Tx(r) !== "color" || !r.value) continue;
|
|
15721
|
+
let i = r.start, a = r.end;
|
|
15722
|
+
return t.length === 1 ? (i = e.start, a = e.end) : n < t.length - 1 ? a = t[n + 1].start : i = t[n - 1].end, {
|
|
15723
|
+
kind: "attribute",
|
|
15724
|
+
start: r.start,
|
|
15725
|
+
end: r.end,
|
|
15726
|
+
stripStart: i,
|
|
15727
|
+
stripEnd: a
|
|
15728
|
+
};
|
|
15729
|
+
}
|
|
15702
15730
|
}
|
|
15703
15731
|
function Dx(e) {
|
|
15704
15732
|
let t = [], n = new kb(e, Eo).lex();
|
|
@@ -15712,12 +15740,12 @@ function Dx(e) {
|
|
|
15712
15740
|
e.attributeList && (i = Ex(e.attributeList), !i && e.attributeList.listCloseBracket && (a = e.attributeList.listCloseBracket.start, o = e.attributeList.elementList.length === 0));
|
|
15713
15741
|
let l = e.body;
|
|
15714
15742
|
if (l instanceof R) {
|
|
15715
|
-
if (
|
|
15743
|
+
if (l.callee instanceof L) {
|
|
15716
15744
|
let e = wx(l.callee);
|
|
15717
15745
|
e && n.push(e);
|
|
15718
15746
|
}
|
|
15719
15747
|
let t = l.args.find((e) => e instanceof B);
|
|
15720
|
-
!i && t && (
|
|
15748
|
+
t ? (i ||= Ex(t), !i && t.listCloseBracket && (a = t.listCloseBracket.start, o = t.elementList.length === 0)) : c = e.end;
|
|
15721
15749
|
} else if (l) {
|
|
15722
15750
|
s = l.start;
|
|
15723
15751
|
for (let e of l.body) if (e instanceof R && e.callee instanceof L) {
|
|
@@ -15730,7 +15758,9 @@ function Dx(e) {
|
|
|
15730
15758
|
t instanceof R && t.callee && (i = {
|
|
15731
15759
|
kind: "subDeclaration",
|
|
15732
15760
|
start: e.start,
|
|
15733
|
-
end: e.end
|
|
15761
|
+
end: e.end,
|
|
15762
|
+
stripStart: e.start,
|
|
15763
|
+
stripEnd: e.end
|
|
15734
15764
|
});
|
|
15735
15765
|
}
|
|
15736
15766
|
}
|
|
@@ -15848,19 +15878,30 @@ function Nx(e, t, n, r) {
|
|
|
15848
15878
|
newText: ""
|
|
15849
15879
|
}, o] : [o];
|
|
15850
15880
|
}
|
|
15851
|
-
function Px(e
|
|
15881
|
+
function Px(e) {
|
|
15882
|
+
return e.color ? [{
|
|
15883
|
+
start: e.color.stripStart,
|
|
15884
|
+
end: e.color.stripEnd,
|
|
15885
|
+
newText: ""
|
|
15886
|
+
}] : [];
|
|
15887
|
+
}
|
|
15888
|
+
function Fx(e, t, n, r) {
|
|
15852
15889
|
switch (t.operation) {
|
|
15853
15890
|
case "create": return Nx(e, t, n, r);
|
|
15854
15891
|
case "update": {
|
|
15855
15892
|
let e = jx(n, t.edge);
|
|
15856
15893
|
return e ? Mx(t, e) : [];
|
|
15857
15894
|
}
|
|
15895
|
+
case "remove": {
|
|
15896
|
+
let e = jx(n, t.edge);
|
|
15897
|
+
return e ? Px(e) : [];
|
|
15898
|
+
}
|
|
15858
15899
|
default: return [];
|
|
15859
15900
|
}
|
|
15860
15901
|
}
|
|
15861
|
-
function
|
|
15902
|
+
function Ix(e, t, n) {
|
|
15862
15903
|
let r = this.getSource(e) ?? "", i = n ?? Dx(r), a = Ox(r), o = [];
|
|
15863
|
-
for (let e of t) o.push(...
|
|
15904
|
+
for (let e of t) o.push(...Fx(r, e, i, a));
|
|
15864
15905
|
return o.sort((e, t) => t.start - e.start), {
|
|
15865
15906
|
newDbml: Xb(r, o, !0),
|
|
15866
15907
|
edits: o
|
|
@@ -15868,9 +15909,9 @@ function Fx(e, t, n) {
|
|
|
15868
15909
|
}
|
|
15869
15910
|
//#endregion
|
|
15870
15911
|
//#region src/compiler/index.ts
|
|
15871
|
-
var
|
|
15912
|
+
var Lx = Symbol("COMPUTING"), Rx = class {
|
|
15872
15913
|
constructor(e) {
|
|
15873
|
-
this.layout = e, this.nodeIdGenerator = new Ks(), this.symbolIdGenerator = new ws(), this.symbolFactory = new eo(this.symbolIdGenerator), this.sourceSnapshot = /* @__PURE__ */ new Map(), this.globalCache = /* @__PURE__ */ new Map(), this.globallyQuerying = !1, this.localCache = /* @__PURE__ */ new Map(), this.parseFile = this.localQuery(Bb), this.parseProject = this.globalQuery(Vb), this.validateNode = this.localQuery(V_), this.validateFile = this.localQuery(Ob), this.nodeFullname = this.localQuery(U_), this.nodeAlias = this.localQuery(W_), this.nodeSettings = this.localQuery(H_), this.canonicalName = this.globalQuery(lb), this.bindNode = this.globalQuery(Zg), this.bindFile = this.globalQuery(wb), this.bindProject = this.globalQuery(Tb), this.interpretSymbol = this.globalQuery($g), this.interpretMetadata = this.globalQuery(e_), this.interpretFile = this.globalQuery(Eb), this.interpretProject = this.globalQuery(Db), this.nodeSymbol = this.globalQuery(Jg), this.nodeMetadata = this.globalQuery(Qg), this.symbolMembers = this.globalQuery(Yg), this.symbolMembersLookupMap = this.globalQuery(Hb), this.lookupMembers = this.globalQuery(Ub), this.nodeReferee = this.globalQuery(Xg), this.resolutionIndex = this.globalQuery(Gb), this.symbolReferences = this.globalQuery(qb), this.symbolParent = this.globalQuery(Kb), this.symbolMetadata = this.globalQuery(Jb), this.symbolAliases = this.globalQuery(Wb), this.symbolUses = this.globalQuery(Yb), this.fileDependencies = this.localQuery(fb), this.reachableFiles = this.globalQuery(mb), this.usableMembers = this.globalQuery(Zh), this.nodeAtPosition = this.localQuery(Cb), this.renameTable = ox.bind(this), this.syncDiagramView = mx.bind(this), this.syncDep =
|
|
15914
|
+
this.layout = e, this.nodeIdGenerator = new Ks(), this.symbolIdGenerator = new ws(), this.symbolFactory = new eo(this.symbolIdGenerator), this.sourceSnapshot = /* @__PURE__ */ new Map(), this.globalCache = /* @__PURE__ */ new Map(), this.globallyQuerying = !1, this.localCache = /* @__PURE__ */ new Map(), this.parseFile = this.localQuery(Bb), this.parseProject = this.globalQuery(Vb), this.validateNode = this.localQuery(V_), this.validateFile = this.localQuery(Ob), this.nodeFullname = this.localQuery(U_), this.nodeAlias = this.localQuery(W_), this.nodeSettings = this.localQuery(H_), this.canonicalName = this.globalQuery(lb), this.bindNode = this.globalQuery(Zg), this.bindFile = this.globalQuery(wb), this.bindProject = this.globalQuery(Tb), this.interpretSymbol = this.globalQuery($g), this.interpretMetadata = this.globalQuery(e_), this.interpretFile = this.globalQuery(Eb), this.interpretProject = this.globalQuery(Db), this.nodeSymbol = this.globalQuery(Jg), this.nodeMetadata = this.globalQuery(Qg), this.symbolMembers = this.globalQuery(Yg), this.symbolMembersLookupMap = this.globalQuery(Hb), this.lookupMembers = this.globalQuery(Ub), this.nodeReferee = this.globalQuery(Xg), this.resolutionIndex = this.globalQuery(Gb), this.symbolReferences = this.globalQuery(qb), this.symbolParent = this.globalQuery(Kb), this.symbolMetadata = this.globalQuery(Jb), this.symbolAliases = this.globalQuery(Wb), this.symbolUses = this.globalQuery(Yb), this.fileDependencies = this.localQuery(fb), this.reachableFiles = this.globalQuery(mb), this.usableMembers = this.globalQuery(Zh), this.nodeAtPosition = this.localQuery(Cb), this.renameTable = ox.bind(this), this.syncDiagramView = mx.bind(this), this.syncDep = Ix.bind(this), this.token = {
|
|
15874
15915
|
invalidStream: this.localQuery(Sb),
|
|
15875
15916
|
flatStream: this.localQuery(xb)
|
|
15876
15917
|
}, this.parse = {
|
|
@@ -15912,10 +15953,10 @@ var Ix = Symbol("COMPUTING"), Lx = class {
|
|
|
15912
15953
|
r || (r = /* @__PURE__ */ new Map(), this.globalCache.set(t, r));
|
|
15913
15954
|
let i = n.length === 0 ? "" : n.length === 1 ? Tc(n[0]) : n.map((e) => Tc(e)).join("\0"), a = r.get(i);
|
|
15914
15955
|
if (a) {
|
|
15915
|
-
if (a ===
|
|
15956
|
+
if (a === Lx) throw Error(`Cycle detected in query: ${e.name}(${i})`);
|
|
15916
15957
|
return a;
|
|
15917
15958
|
}
|
|
15918
|
-
r.set(i,
|
|
15959
|
+
r.set(i, Lx);
|
|
15919
15960
|
try {
|
|
15920
15961
|
let t = e.apply(this, n);
|
|
15921
15962
|
return r.set(i, t), t;
|
|
@@ -15937,10 +15978,10 @@ var Ix = Symbol("COMPUTING"), Lx = class {
|
|
|
15937
15978
|
let c = s.get(t);
|
|
15938
15979
|
if (c || (c = /* @__PURE__ */ new Map(), s.set(t, c)), c.has(o)) {
|
|
15939
15980
|
let t = c.get(o);
|
|
15940
|
-
if (t ===
|
|
15981
|
+
if (t === Lx) throw Error(`Cycle detected in query: ${e.name}(${a}, ${o})`);
|
|
15941
15982
|
return t;
|
|
15942
15983
|
}
|
|
15943
|
-
c.set(o,
|
|
15984
|
+
c.set(o, Lx);
|
|
15944
15985
|
try {
|
|
15945
15986
|
let t = e.apply(this, n);
|
|
15946
15987
|
return c.set(o, t), t;
|
|
@@ -15964,7 +16005,7 @@ var Ix = Symbol("COMPUTING"), Lx = class {
|
|
|
15964
16005
|
diagnosticsProvider: new ey(this)
|
|
15965
16006
|
};
|
|
15966
16007
|
}
|
|
15967
|
-
},
|
|
16008
|
+
}, zx = class e {
|
|
15968
16009
|
constructor(e = {}) {
|
|
15969
16010
|
this.files = e instanceof Map ? new Map(e) : new Map(Object.entries(e));
|
|
15970
16011
|
}
|
|
@@ -16008,4 +16049,4 @@ var Ix = Symbol("COMPUTING"), Lx = class {
|
|
|
16008
16049
|
}
|
|
16009
16050
|
};
|
|
16010
16051
|
//#endregion
|
|
16011
|
-
export { cc as ArrayNode, F as AttributeNode, z as BlockExpressionNode, V as CallExpressionNode, tc as CommaExpressionNode, b as CompileError, y as CompileErrorCode,
|
|
16052
|
+
export { cc as ArrayNode, F as AttributeNode, z as BlockExpressionNode, V as CallExpressionNode, tc as CommaExpressionNode, b as CompileError, y as CompileErrorCode, Rx as Compiler, X as CompletionItemInsertTextRule, Y as CompletionItemKind, Oy as DBMLCompletionItemProvider, $v as DBMLDefinitionProvider, ey as DBMLDiagnosticsProvider, ty as DBMLReferencesProvider, Eo as DEFAULT_ENTRY, P as ElementDeclarationNode, r as ElementKind, sc as EmptyNode, Zm as FALSY_VALUES, bo as Filepath, R as FunctionApplicationNode, $s as FunctionExpressionNode, nc as GroupExpressionNode, Zs as IdentifierStreamNode, L as InfixExpressionNode, B as ListExpressionNode, rc as LiteralNode, Xv as MarkerSeverity, zx as MemoryProjectLayout, Qs as PostfixExpressionNode, I as PrefixExpressionNode, oc as PrimaryExpressionNode, N as ProgramNode, Q as ScopeKind, j as SymbolKind, M as SyntaxNode, Ks as SyntaxNodeIdGenerator, qs as SyntaxNodeKind, Ha as SyntaxToken, _ as SyntaxTokenKind, Xm as TRUTHY_VALUES, ec as TupleExpressionNode, t as UNHANDLED, zv as Uri, Js as UseDeclarationNode, Xs as UseSpecifierListNode, Ys as UseSpecifierNode, ac as VariableNode, ic as WildcardNode, gg as addDoubleQuoteIfNeeded, nb as dbmlLanguageConfig, rb as dbmlMonarchTokensProvider, vg as escapeString, ps as extractNumericLiteral, qm as extractSignedNumber, yg as formatRecordValue, Al as getRecordValueType, Dl as isBinaryType, Tl as isBooleanType, Ol as isDateTimeType, Gm as isEmptyStringLiteral, Cl as isFloatType, Km as isFunctionExpression, Sl as isIntegerType, Wm as isNullish, wl as isNumericType, Ba as isOp, Va as isOpToken, kl as isSerialType, El as isStringType, za as isTriviaToken, hg as isValidIdentifier, xl as normalizeTypeName, bg as splitQualifiedIdentifier, Qm as tryExtractBoolean, ih as tryExtractDateTime, $m as tryExtractEnum, Ym as tryExtractInteger, Jm as tryExtractNumeric, eh as tryExtractString, _g as unescapeString, Dh as validateForeignKeys, gh as validatePrimaryKey, Ch as validateUnique };
|
|
@@ -12,7 +12,7 @@ export interface DepSyncEdge {
|
|
|
12
12
|
downstream: DepEndpointRef;
|
|
13
13
|
}
|
|
14
14
|
export interface DepSyncOperation {
|
|
15
|
-
operation: 'create' | 'update';
|
|
15
|
+
operation: 'create' | 'update' | 'remove';
|
|
16
16
|
/** The edge that identifies the target block (table-level: empty fieldNames). */
|
|
17
17
|
edge: DepSyncEdge;
|
|
18
18
|
color?: string;
|
|
@@ -30,6 +30,14 @@ interface ColorSetting {
|
|
|
30
30
|
kind: 'attribute' | 'subDeclaration';
|
|
31
31
|
start: number;
|
|
32
32
|
end: number;
|
|
33
|
+
/**
|
|
34
|
+
* Range to delete when removing the color (revert to default). Wider than
|
|
35
|
+
* `start..end`: for an attribute it swallows the whole enclosing `[...]` when
|
|
36
|
+
* color is the sole setting, otherwise one adjacent comma; for a
|
|
37
|
+
* sub-declaration it is the same as `start..end` (the whole body line).
|
|
38
|
+
*/
|
|
39
|
+
stripStart: number;
|
|
40
|
+
stripEnd: number;
|
|
33
41
|
}
|
|
34
42
|
export interface DepBlock {
|
|
35
43
|
startIndex: number;
|
|
@@ -5,11 +5,12 @@ export declare const enum ScopeKind {
|
|
|
5
5
|
INDEXES = 3,
|
|
6
6
|
NOTE = 4,
|
|
7
7
|
REF = 5,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
DEP = 6,
|
|
9
|
+
PROJECT = 7,
|
|
10
|
+
CUSTOM = 8,
|
|
11
|
+
TOPLEVEL = 9,
|
|
12
|
+
TABLEPARTIAL = 10,
|
|
13
|
+
CHECKS = 11,
|
|
14
|
+
RECORDS = 12,
|
|
15
|
+
DIAGRAMVIEW = 13
|
|
15
16
|
}
|
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": "9.0.0-alpha.
|
|
4
|
+
"version": "9.0.0-alpha.3",
|
|
5
5
|
"description": "DBML parser v2",
|
|
6
6
|
"author": "Holistics <dev@holistics.io>",
|
|
7
7
|
"license": "Apache-2.0",
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"engines": {
|
|
51
51
|
"node": ">=18"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "c25a2e99a38fdfabf87161919e6ba50e93a9bcf1"
|
|
54
54
|
}
|