From 51d5a286f7b87fb172ee005a5b37926bc43962eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=AB=8B=E5=B8=AE?= <3294713004@qq.com> Date: Fri, 23 Jan 2026 10:06:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20mix=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?=E4=BD=BF=E7=94=A8diff=E5=8E=BB=E4=BF=AE=E6=94=B9=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=98=B2=E6=AD=A2=E8=A7=A6=E5=8F=91=E6=95=B4=E4=B8=AA?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=BB=A3=E7=A0=81=E9=AB=98=E4=BA=AE=E7=9A=84?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/deps.json | 4 + .../mixly-modules/common/editor-code.js | 99 +- .../mixly-modules/common/editor-mix.js | 13 +- .../mixly-modules/common/editor-monaco.js | 89 +- .../mixly-modules/common/monaco-theme.js | 119 + .../common/monaco-tree-sitter.js | 127 + .../mixly-modules/common/statusbar-serial.js | 1 + .../modules/mixly-modules/common/statusbar.js | 2 +- common/modules/mixly-modules/deps.json | 28 +- .../workers/common/tree-sitter/index.js | 141 + .../common/tree-sitter/tree-sitter-cpp.wasm | Bin 0 -> 1080487 bytes .../tree-sitter/tree-sitter-python.wasm | Bin 0 -> 180336 bytes .../workers/common/tree-sitter/tree-sitter.js | 1 + .../common/tree-sitter/tree-sitter.wasm | Bin 0 -> 175309 bytes .../common/tree-sitter/web-tree-sitter.js | 4010 +++++++++++++++++ .../common/tree-sitter/web-tree-sitter.wasm | Bin 0 -> 195953 bytes common/modules/web-modules/diff.min.js | 1 + .../json/tree-sitter/grammars/c.json | 123 + .../json/tree-sitter/grammars/cpp.json | 156 + .../json/tree-sitter/grammars/go.json | 108 + .../json/tree-sitter/grammars/javascript.json | 136 + .../json/tree-sitter/grammars/lua.json | 87 + .../json/tree-sitter/grammars/php.json | 164 + .../json/tree-sitter/grammars/python.json | 117 + .../json/tree-sitter/grammars/ruby.json | 117 + .../json/tree-sitter/grammars/rust.json | 168 + .../json/tree-sitter/grammars/typescript.json | 156 + .../json/tree-sitter/themes/dark-cpp.json | 124 + .../json/tree-sitter/themes/dark-python.json | 116 + .../json/tree-sitter/themes/light-cpp.json | 113 + .../json/tree-sitter/themes/light-python.json | 104 + 31 files changed, 6378 insertions(+), 46 deletions(-) create mode 100644 common/modules/mixly-modules/common/monaco-theme.js create mode 100644 common/modules/mixly-modules/common/monaco-tree-sitter.js create mode 100644 common/modules/mixly-modules/workers/common/tree-sitter/index.js create mode 100644 common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter-cpp.wasm create mode 100644 common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter-python.wasm create mode 100644 common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter.js create mode 100644 common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter.wasm create mode 100644 common/modules/mixly-modules/workers/common/tree-sitter/web-tree-sitter.js create mode 100644 common/modules/mixly-modules/workers/common/tree-sitter/web-tree-sitter.wasm create mode 100644 common/modules/web-modules/diff.min.js create mode 100644 common/templates/json/tree-sitter/grammars/c.json create mode 100644 common/templates/json/tree-sitter/grammars/cpp.json create mode 100644 common/templates/json/tree-sitter/grammars/go.json create mode 100644 common/templates/json/tree-sitter/grammars/javascript.json create mode 100644 common/templates/json/tree-sitter/grammars/lua.json create mode 100644 common/templates/json/tree-sitter/grammars/php.json create mode 100644 common/templates/json/tree-sitter/grammars/python.json create mode 100644 common/templates/json/tree-sitter/grammars/ruby.json create mode 100644 common/templates/json/tree-sitter/grammars/rust.json create mode 100644 common/templates/json/tree-sitter/grammars/typescript.json create mode 100644 common/templates/json/tree-sitter/themes/dark-cpp.json create mode 100644 common/templates/json/tree-sitter/themes/dark-python.json create mode 100644 common/templates/json/tree-sitter/themes/light-cpp.json create mode 100644 common/templates/json/tree-sitter/themes/light-python.json diff --git a/common/deps.json b/common/deps.json index beb66a2e..80bcfa3e 100644 --- a/common/deps.json +++ b/common/deps.json @@ -103,6 +103,10 @@ "path": "modules/web-modules/sortable.min.js", "provide": ["Sortable"], "require": [] + }, { + "path": "modules/web-modules/diff.min.js", + "provide": ["Diff"], + "require": [] }, { "path": "modules/web-modules/store.modern.min.js", "provide": ["store"], diff --git a/common/modules/mixly-modules/common/editor-code.js b/common/modules/mixly-modules/common/editor-code.js index adbf1437..8386af1a 100644 --- a/common/modules/mixly-modules/common/editor-code.js +++ b/common/modules/mixly-modules/common/editor-code.js @@ -1,7 +1,5 @@ goog.loadJs('common', () => { -goog.require('ace'); -goog.require('ace.ExtLanguageTools'); goog.require('Mixly.Config'); goog.require('Mixly.XML'); goog.require('Mixly.Env'); @@ -11,6 +9,8 @@ goog.require('Mixly.Menu'); goog.require('Mixly.ContextMenu'); goog.require('Mixly.IdGenerator'); goog.require('Mixly.CodeFormatter'); +goog.require('Mixly.MonacoTheme'); +goog.require('Mixly.MonacoTreeSitter'); goog.require('Mixly.EditorMonaco'); goog.provide('Mixly.EditorCode'); @@ -24,12 +24,16 @@ const { ContextMenu, IdGenerator, CodeFormatter, + MonacoTheme, + MonacoTreeSitter, EditorMonaco } = Mixly; const { USER } = Config; + class EditorCode extends EditorMonaco { #contextMenu_ = null; + #monacoTreeSitter_ = null; constructor() { super(); @@ -41,6 +45,7 @@ class EditorCode extends EditorMonaco { this.setTabSize(4); this.#addContextMenu_(); this.setTheme(USER.theme); + this.#monacoTreeSitter_ = new MonacoTreeSitter(this); } onMounted() { @@ -113,40 +118,65 @@ class EditorCode extends EditorMonaco { setValue(data, ext) { this.disableChangeEvent(); - super.setValue(data, ext); + super.setValue(data); const language = this.getLanguageByExt(ext); + if (MonacoTheme.supportThemes.includes(language)) { + this.setTheme(`${USER.theme}-${language}`); + } else { + this.setTheme(USER.theme); + } this.setLanguage(language); this.enableChangeEvent(); - CodeFormatter.activateFormatter(language) - .then((formatter) => { - const menu = this.#contextMenu_.getItem('code'); - if (!formatter) { - menu.remove('sep-format'); - menu.remove('format'); - return; + this.setCodeFormatter(language, ext).catch(Debug.error); + } + + diffEdits(data, ext) { + this.disableChangeEvent(); + super.diffEdits(data); + const language = this.getLanguageByExt(ext); + this.setLanguage(language); + if (MonacoTheme.supportThemes.includes(language)) { + this.setTheme(`${USER.theme}-${language}`); + } else { + this.setTheme(USER.theme); + } + this.#monacoTreeSitter_.setValue(language, USER.theme, data); + this.enableChangeEvent(); + this.setCodeFormatter(language, ext).catch(Debug.error); + } + + async setCodeFormatter(language, ext) { + const formatter = await CodeFormatter.activateFormatter(language); + const menu = this.#contextMenu_.getItem('code'); + if (!formatter) { + menu.remove('sep-format'); + menu.remove('format'); + return; + } + menu.add({ + weight: 6, + id: 'sep-format', + data: '---------' + }); + menu.add({ + weight: 6, + id: 'format', + data: { + isHtmlName: true, + name: Menu.getItem(Msg.Lang['editor.contextMenu.formatDocument'], ''), + callback: () => { + CodeFormatter.format(language, this.getValue()) + .then((data) => { + super.setValue(data, ext); + }) + .catch(Debug.error); } - menu.add({ - weight: 6, - id: 'sep-format', - data: '---------' - }); - menu.add({ - weight: 6, - id: 'format', - data: { - isHtmlName: true, - name: Menu.getItem(Msg.Lang['editor.contextMenu.formatDocument'], ''), - callback: (key, opt) => { - CodeFormatter.format(language, this.getValue()) - .then((data) => { - super.setValue(data, ext); - }) - .catch(Debug.error); - } - } - }); - }) - .catch(Debug.error); + } + }); + } + + getTreeSitter() { + return this.#monacoTreeSitter_; } getLanguageByExt(ext) { @@ -183,7 +213,10 @@ class EditorCode extends EditorMonaco { #addChangeEventListenerExt_() { this.offEvent('change'); - this.bind('change', () => this.addDirty()); + this.bind('change', () => { + this.addDirty(); + this.#monacoTreeSitter_.setValue(this.getLanguage(), USER.theme, this.getValue()); + }); } dispose() { diff --git a/common/modules/mixly-modules/common/editor-mix.js b/common/modules/mixly-modules/common/editor-mix.js index 307c9bd0..686c9f9b 100644 --- a/common/modules/mixly-modules/common/editor-mix.js +++ b/common/modules/mixly-modules/common/editor-mix.js @@ -39,7 +39,7 @@ const { HTMLTemplate, LayerExt } = Mixly; -const { BOARD, SOFTWARE } = Config; +const { BOARD, SOFTWARE, USER } = Config; const { form } = layui; @@ -173,6 +173,7 @@ class EditorMix extends EditorBase { codePage.offEvent('change'); codePage.bind('change', () => { this.addDirty(); + codePage.getTreeSitter().setValue(codePage.getLanguage(), USER.theme, codePage.getValue()); }); } @@ -217,12 +218,12 @@ class EditorMix extends EditorBase { && typeof this.py2BlockEditor.updateBlock === 'function') { this.py2BlockEditor.updateBlock(); } else { - codePage.setValue(blockPage.getValue(), this.#language_); + codePage.diffEdits(blockPage.getValue(), this.#language_); } break; case Drag.Extend.POSITIVE: this.#temp_ = blockPage.getValue(); - codePage.setValue(this.#temp_, this.#language_); + codePage.diffEdits(this.#temp_, this.#language_); break; } blockPage.resize(); @@ -363,7 +364,7 @@ class EditorMix extends EditorBase { return; } this.#temp_ = code; - codePage.setValue(code, this.#language_); + codePage.diffEdits(code, this.#language_); }); this.#addCodeChangeEventListener_(); } @@ -549,7 +550,7 @@ class EditorMix extends EditorBase { return; } this.drag.full(Drag.Extend.NEGATIVE); // 完全显示代码编辑器 - codePage.setValue(code, this.#language_); + codePage.diffEdits(code, this.#language_); endFunc('USE_CODE'); return; } @@ -585,7 +586,7 @@ class EditorMix extends EditorBase { Blockly.hideChaff(); if (!useIncompleteBlocks && codeDom && xmlDom.attr('shown') === 'code') { this.drag.full(Drag.Extend.NEGATIVE); // 完全显示代码编辑器 - codePage.setValue(code, this.#language_); + codePage.diffEdits(code, this.#language_); endFunc(); return; } diff --git a/common/modules/mixly-modules/common/editor-monaco.js b/common/modules/mixly-modules/common/editor-monaco.js index bac9c033..0c3180f4 100644 --- a/common/modules/mixly-modules/common/editor-monaco.js +++ b/common/modules/mixly-modules/common/editor-monaco.js @@ -1,5 +1,6 @@ goog.loadJs('common', () => { +goog.require('Diff'); goog.require('monaco'); goog.require('Mixly.XML'); goog.require('Mixly.Env'); @@ -70,8 +71,8 @@ class EditorMonaco extends EditorBase { } }); - editor.onDidChangeModelContent(() => { - this.events.run('change'); + editor.onDidChangeModelContent((...args) => { + this.events.run('change', ...args); }); } @@ -121,6 +122,7 @@ class EditorMonaco extends EditorBase { #state_ = null; #tabSize_ = null; #language_ = null; + #mode_ = null; constructor() { super(); @@ -132,6 +134,7 @@ class EditorMonaco extends EditorBase { init() { super.init(); this.#editor_ = monaco.editor.createModel(''); + this.#editor_.setEOL(monaco.editor.EndOfLineSequence.LF); } onMounted() { @@ -187,13 +190,21 @@ class EditorMonaco extends EditorBase { } setTheme(mode) { + if (this.#mode_ === mode) { + return; + } const editor = EditorMonaco.getEditor(); editor.updateOptions({ theme: `vs-${mode}` }); + this.#mode_ = mode; } - setValue(data, ext) { + getTheme() { + return this.#mode_; + } + + setValue(data) { if (this.getValue() === data) { return; } @@ -209,6 +220,72 @@ class EditorMonaco extends EditorBase { return this.#editor_.getValue(); } + diffEdits(data) { + const prevData = this.getValue(); + if (prevData === data) { + return; + } + const edits = this.buildDiffEdits(prevData, data); + if (!edits.length) { + return; + } + this.#editor_.pushEditOperations([], edits, () => null); + } + + buildDiffEdits(prevData, nextData) { + if (prevData === nextData) { + return []; + } + const diffs = Diff.diffChars(prevData, nextData); + const edits = []; + const state = { + index: 0, + pendingStart: null, + pendingText: '' + }; + for (const d of diffs) { + if (d.added) { + if (state.pendingStart == null) { + state.pendingStart = state.index; + } + state.pendingText += d.value; + } + else if (d.removed) { + if (state.pendingStart == null) { + state.pendingStart = state.index; + } + state.index += d.value.length; + } + else { + this.flushPendingEdit(state, edits); + state.index += d.value.length; + } + } + this.flushPendingEdit(state, edits); + return edits; + } + + flushPendingEdit(state, edits) { + const { pendingStart, index, pendingText } = state; + if (pendingStart == null) { + return; + } + const startPos = this.#editor_.getPositionAt(pendingStart); + const endPos = this.#editor_.getPositionAt(index); + edits.push({ + range: new monaco.Range( + startPos.lineNumber, + startPos.column, + endPos.lineNumber, + endPos.column + ), + text: pendingText, + forceMoveMarkers: true + }); + state.pendingStart = null; + state.pendingText = ''; + } + clear() { this.setValue('', true); } @@ -242,7 +319,7 @@ class EditorMonaco extends EditorBase { let selection = editor.getSelection(); let selectedText = this.#editor_.getValueInRange(selection); if (selection) { - editor.executeEdits("cut", [{ range: selection, text: '' }]); + editor.executeEdits('cut', [{ range: selection, text: '' }]); navigator.clipboard.writeText(selectedText); } this.focus(); @@ -281,6 +358,10 @@ class EditorMonaco extends EditorBase { monaco.editor.setModelLanguage(this.#editor_, language); } + getLanguage() { + return this.#language_; + } + setTabSize(tabSize) { if (this.#tabSize_ === tabSize) { return; diff --git a/common/modules/mixly-modules/common/monaco-theme.js b/common/modules/mixly-modules/common/monaco-theme.js new file mode 100644 index 00000000..db5de20c --- /dev/null +++ b/common/modules/mixly-modules/common/monaco-theme.js @@ -0,0 +1,119 @@ +goog.loadJs('common', () => { + +goog.require('monaco'); +goog.require('Mixly.Registry'); +goog.provide('Mixly.MonacoTheme'); + +const { Registry } = Mixly; + + +class MonacoTheme { + static { + this.cssClassNamePrefix = 'mts'; + this.themesRegistry = new Registry(); + this.supportThemes = []; + // this.supportThemes = ['cpp', 'python']; + + this.getClassNameOfTerm = function (type, theme, term) { + return `${this.cssClassNamePrefix}-${type}-${theme}-${term}`; + } + + /*this.themesRegistry.register('vs-dark-cpp', new MonacoTheme( + 'vs-dark-cpp', + 'cpp', + 'dark', + goog.readJsonSync('../common/templates/json/tree-sitter/themes/dark-cpp.json') + )); + + this.themesRegistry.register('vs-light-cpp', new MonacoTheme( + 'vs-light-cpp', + 'cpp', + 'light', + goog.readJsonSync('../common/templates/json/tree-sitter/themes/light-cpp.json') + )); + + this.themesRegistry.register('vs-dark-python', new MonacoTheme( + 'vs-dark-python', + 'python', + 'dark', + goog.readJsonSync('../common/templates/json/tree-sitter/themes/dark-python.json') + )); + + this.themesRegistry.register('vs-light-python', new MonacoTheme( + 'vs-light-python', + 'python', + 'light', + goog.readJsonSync('../common/templates/json/tree-sitter/themes/light-python.json') + ));*/ + } + + #id_ = null; + #type_ = null; + #theme_ = null; + #$tag_ = null; + #config_ = null; + + constructor(id, type, theme, config) { + this.#id_ = id; + this.#type_ = type; + this.#theme_ = theme; + this.load(config); + } + + load(config) { + monaco.editor.defineTheme(this.#id_, config.base); + this.#config_ = config; + + if (!this.#$tag_) { + let hasStyleNode = $('head').find(`style[style-id='${this.id_}']`).length; + if (hasStyleNode) { + return; + } + this.#$tag_ = $(''); + this.#$tag_.attr('style-id', this.id); + this.#$tag_.attr('type', 'text/css') + $('head').append(this.#$tag_); + } + + this.#$tag_.html(this.generateCss()); + } + + generateCss() { + return Object.keys(this.#config_.monacoTreeSitter) + .map(term => + `span.${MonacoTheme.getClassNameOfTerm(this.#type_, this.#theme_, term)}{${this.generateStyleOfTerm(term)}}` + ) + .join(''); + } + + generateStyleOfTerm(term) { + const style = this.#config_.monacoTreeSitter[term]; + if (!style) { + return ''; + } + + if (typeof style === 'string') { + return `color:${style}`; + } + + return `color:${style.color};${style.extraCssStyles || ''}`; + } + + getColorOfTerm(term) { + const style = this.#config_.monacoTreeSitter[term]; + if (!style) { + return undefined; + } + return typeof style === 'object' ? style.color : style; + } + + dispose() { + this.#$tag_ && this.#$tag_.remove(); + this.#$tag_ = null; + this.#config_ = null; + } +} + +Mixly.MonacoTheme = MonacoTheme; + +}); \ No newline at end of file diff --git a/common/modules/mixly-modules/common/monaco-tree-sitter.js b/common/modules/mixly-modules/common/monaco-tree-sitter.js new file mode 100644 index 00000000..0aa5f7ae --- /dev/null +++ b/common/modules/mixly-modules/common/monaco-tree-sitter.js @@ -0,0 +1,127 @@ +goog.loadJs('common', () => { + +goog.require('_'); +goog.require('monaco'); +goog.require('Mixly.Registry'); +goog.require('Mixly.MonacoTheme'); +goog.provide('Mixly.MonacoTreeSitter'); + +const { Registry, MonacoTheme } = Mixly; + + +class MonacoTreeSitter { + static { + this.workerPath = '../common/modules/mixly-modules/workers/common/tree-sitter/index.js'; + this.supportTreeSitters_ = new Registry(); + this.activeTreeSitters_ = new Registry(); + + /*this.supportTreeSitters_.register('python', { + workerName: 'pythonTreeSitterService', + wasm: 'tree-sitter-python.wasm' + }); + + this.supportTreeSitters_.register('cpp', { + workerName: 'cppTreeSitterService', + wasm: 'tree-sitter-cpp.wasm' + });*/ + + this.activateTreeSitter = async function (type) { + if (!this.supportTreeSitters_.hasKey(type)) return null; + + const info = this.supportTreeSitters_.getItem(type); + if (this.activeTreeSitters_.hasKey(type)) { + const ts = this.activeTreeSitters_.getItem(type); + if (ts.loading) await ts.loading; + return ts; + } + + const treeSitter = workerpool.pool(this.workerPath, { + workerOpts: { name: info.workerName }, + workerType: 'web' + }); + + const grammar = await goog.readJson( + `../common/templates/json/tree-sitter/grammars/${type}.json` + ); + + treeSitter.loading = treeSitter.exec( + 'init', + [info.wasm, grammar] + ); + + this.activeTreeSitters_.register(type, treeSitter); + await treeSitter.loading; + treeSitter.loading = null; + return treeSitter; + }; + + this.treeSitterPostion = function (pos) { + return { + row: pos.lineNumber - 1, + column: pos.column - 1 + }; + }; + } + + constructor(editor, opts) { + this.editor = editor; + + this.seq = 0; + this.decorations = []; + + this.refresh = _.debounce( + this.refresh.bind(this), + opts?.debounceUpdate ?? 15 + ); + } + + dispose() { + this.pool.terminate(true); + this.decorations = []; + } + + async updateWorker(type, theme, text) { + const treeSitter = await MonacoTreeSitter.activateTreeSitter(type); + if (!treeSitter) { + return; + } + const id = ++this.seq; + const dto = await treeSitter.exec('update', [text]); + if (id !== this.seq) return; + this.applyDecorations(type, theme, dto); + } + + applyDecorations(type, theme, dto) { + const decos = []; + + for (const [term, ranges] of Object.entries(dto)) { + const className = MonacoTheme.getClassNameOfTerm(type, theme, term); + for (const r of ranges) { + decos.push({ + range: new monaco.Range( + r.startLineNumber, + r.startColumn, + r.endLineNumber, + r.endColumn + ), + options: { + inlineClassName: className + } + }); + } + } + this.decorations = this.editor.getEditor().deltaDecorations(this.decorations, decos); + } + + refresh(type, theme, newText) { + this.updateWorker(type, theme, newText); + } + + setValue(type, theme, newText) { + this.refresh(type, theme, newText); + } +} + +Mixly.MonacoTreeSitter = MonacoTreeSitter; + +}); diff --git a/common/modules/mixly-modules/common/statusbar-serial.js b/common/modules/mixly-modules/common/statusbar-serial.js index cae4749e..49f24a3f 100644 --- a/common/modules/mixly-modules/common/statusbar-serial.js +++ b/common/modules/mixly-modules/common/statusbar-serial.js @@ -9,6 +9,7 @@ goog.require('Mixly.Debug'); goog.require('Mixly.Config'); goog.require('Mixly.StatusBar'); goog.require('Mixly.SideBarsManager'); +goog.require('Mixly.RightSideBarsManager'); goog.require('Mixly.HTMLTemplate'); goog.require('Mixly.PageBase'); goog.require('Mixly.Menu'); diff --git a/common/modules/mixly-modules/common/statusbar.js b/common/modules/mixly-modules/common/statusbar.js index 0cc2f19e..19ac0099 100644 --- a/common/modules/mixly-modules/common/statusbar.js +++ b/common/modules/mixly-modules/common/statusbar.js @@ -60,7 +60,7 @@ class StatusBar extends EditorAce { } else { editor.setOption('theme', 'ace/theme/xcode'); } - editor.getSession().setMode("ace/mode/python"); + editor.getSession().setMode('ace/mode/python'); editor.setReadOnly(true); // editor.setScrollSpeed(0.3); editor.setShowPrintMargin(false); diff --git a/common/modules/mixly-modules/deps.json b/common/modules/mixly-modules/deps.json index af213b79..f81b39e5 100644 --- a/common/modules/mixly-modules/deps.json +++ b/common/modules/mixly-modules/deps.json @@ -286,8 +286,6 @@ { "path": "/common/editor-code.js", "require": [ - "ace", - "ace.ExtLanguageTools", "Mixly.Config", "Mixly.XML", "Mixly.Env", @@ -297,6 +295,8 @@ "Mixly.ContextMenu", "Mixly.IdGenerator", "Mixly.CodeFormatter", + "Mixly.MonacoTheme", + "Mixly.MonacoTreeSitter", "Mixly.EditorMonaco" ], "provide": [ @@ -351,6 +351,7 @@ { "path": "/common/editor-monaco.js", "require": [ + "Diff", "monaco", "Mixly.XML", "Mixly.Env", @@ -778,6 +779,28 @@ "Mixly.MJson" ] }, + { + "path": "/common/monaco-theme.js", + "require": [ + "monaco", + "Mixly.Registry" + ], + "provide": [ + "Mixly.MonacoTheme" + ] + }, + { + "path": "/common/monaco-tree-sitter.js", + "require": [ + "_", + "monaco", + "Mixly.Registry", + "Mixly.MonacoTheme" + ], + "provide": [ + "Mixly.MonacoTreeSitter" + ] + }, { "path": "/common/msg.js", "require": [ @@ -1115,6 +1138,7 @@ "Mixly.Config", "Mixly.StatusBar", "Mixly.SideBarsManager", + "Mixly.RightSideBarsManager", "Mixly.HTMLTemplate", "Mixly.PageBase", "Mixly.Menu", diff --git a/common/modules/mixly-modules/workers/common/tree-sitter/index.js b/common/modules/mixly-modules/workers/common/tree-sitter/index.js new file mode 100644 index 00000000..51ac969a --- /dev/null +++ b/common/modules/mixly-modules/workers/common/tree-sitter/index.js @@ -0,0 +1,141 @@ +importScripts('./tree-sitter.js'); +importScripts('../../../../web-modules/workerpool.min.js'); + + +const terms = [ + 'type', + 'scope', + 'function', + 'variable', + 'number', + 'string', + 'comment', + 'constant', + 'directive', + 'control', + 'operator', + 'modifier', + 'punctuation' +]; + +let parser; +let tree = null; +let language = null; + + +class Language { + constructor(grammarJson) { + this.simpleTerms = {}; + this.complexTerms = []; + this.complexScopes = {}; + for (const t in grammarJson.simpleTerms) + this.simpleTerms[t] = grammarJson.simpleTerms[t]; + for (const t in grammarJson.complexTerms) + this.complexTerms[t] = grammarJson.complexTerms[t]; + for (const t in grammarJson.complexScopes) + this.complexScopes[t] = grammarJson.complexScopes[t]; + this.complexDepth = 0; + this.complexOrder = false; + for (const s in this.complexScopes) { + const depth = s.split('>').length; + if (depth > this.complexDepth) + this.complexDepth = depth; + if (s.indexOf('[') >= 0) + this.complexOrder = true; + } + this.complexDepth--; + } +} + +async function init(languageWasmPath, grammarJson) { + await TreeSitter.init(); + + parser = new TreeSitter(); + const lang = await TreeSitter.Language.load(languageWasmPath); + console.log(lang.version) + parser.setLanguage(lang); + language = new Language(grammarJson); + + tree = null; +} + +function buildDecorations(tree) { + const result = []; + const stack = []; + let node = tree.rootNode.firstChild; + while (stack.length > 0 || node) { + if (node) { + stack.push(node); + node = node.firstChild; + } + else { + node = stack.pop(); + let type = node.type; + if (!node.isNamed()) + type = '"' + type + '"'; + let term = null; + if (!language.complexTerms.includes(type)) { + term = language.simpleTerms[type]; + } + else { + let desc = type; + let scopes = [desc]; + let parent = node.parent; + for (let i = 0; i < language.complexDepth && parent; i++) { + let parentType = parent.type; + if (!parent.isNamed()) + parentType = '"' + parentType + '"'; + desc = parentType + ' > ' + desc; + scopes.push(desc); + parent = parent.parent; + } + if (language.complexOrder) { + let index = 0; + let sibling = node.previousSibling; + while (sibling) { + if (sibling.type === node.type) + index++; + sibling = sibling.previousSibling; + } + let rindex = -1; + sibling = node.nextSibling; + while (sibling) { + if (sibling.type === node.type) + rindex--; + sibling = sibling.nextSibling; + } + const orderScopes = []; + for (let i = 0; i < scopes.length; i++) + orderScopes.push(scopes[i], scopes[i] + '[' + index + ']', scopes[i] + '[' + rindex + ']'); + scopes = orderScopes; + } + for (const d of scopes) + if (d in language.complexScopes) + term = language.complexScopes[d]; + } + if (terms.includes(term)) { + if (!result[term]) { + result[term] = []; + } + result[term].push({ + startLineNumber: node.startPosition.row + 1, + startColumn: node.startPosition.column + 1, + endLineNumber: node.endPosition.row + 1, + endColumn: node.endPosition.column + 1 + }); + } + node = node.nextSibling; + } + } + return result; +} + +function update(text) { + const tree = parser.parse(text); + return buildDecorations(tree); +} + +workerpool.worker({ + init, + update +}); diff --git a/common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter-cpp.wasm b/common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter-cpp.wasm new file mode 100644 index 0000000000000000000000000000000000000000..6ada0a40208edb3bbc89d2c3f01c06c363a7a111 GIT binary patch literal 1080487 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

0>@s8m{=F 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 Cb1eG5@F(iORPp2o&5aIh>w?6 z)6cI#)bP^v5;@wZGhGMjM%}Tiy&1cN=F}f6#(`Kb4x(#~Mwpd- zh_H>Ye&~cfa7C*&-c|FgT3Jh52xizlyeZqZN-!E1s~l;(lqx(W3uoX-oVp;M|Jys@RH#4lA6>_RCYyU#$>QUEADk znOi^q6E%P4Z>#xpe_PF8_)|3JObN#vwT4e+t*)ZYOQP+|IA+kRIM$}uaXiM1Ibn>@ zTN2{TZ(a{#&}Ei&nl;{BQbm7HGh3kc;in-kKSuA+F6;toBXZ{<+INu1ts-ERF-WJV$v~5b8RXUG6NR7isEx^{NzC846NC<2QaVRM4RYlM5W^$ELOejP0i?h zzY98ZE}EmeS^=xIuU@(CLncT?$Yk;HOQW?JAFCQ24|YG_Rl_#he?XgkU2U6XIP{s` zedxZk?>hDy88XvZ=eFwW5pdAMx>t(d8EM`2BUhJ)eHG8Jc0H@FllCWT-m$W)@`F9k z)^f08GTYhhwI91lwj{4u*qYV1Uma5y>%Le;g~YwE+65=m^n1e#-4grwTYRH&Y{y%< z_0(jsEq)RTFXpAS{E*U)pR+G|v9WbjTyuX^!1 z06#Io8u2mu0#6JNw9EMlZ)fl>r|NqgZDF71z|uS(H!Q5QYp+D>Y>HV4Yr`e}j3ifH@f_-#K&1jquHg@^Kxp0 ztBhPnXq-WvaU5gj<%U)wvv85aJ~@@Kt}|kl)!CX+Ja8`2IX+c2hp7FldkX&5)dl~m zs*O~?_LP3@ZRywZD$%c(Rk2^SjrylxqrNWKNXt7c1$hHqls6;=d4pY$S3Ms%LVRGT z#RtY$!Ury_rVkvIf{li`V591-8;*u`4(>Wf`|Rix>@(_5x6jx=%|6GbV4v|W*hlxr z2`R`s&P91Aryy^Vi}I$VAaAmZ@}{LAZ>kIO^!TsrK5#lbTkivBIqm~bt=f)X z(*^rfbq-PMs}fi#o#x@F-vB%jwn}_%>%7*wpqg_?c?vcvb-_kD1}siN-a;4UosojP z(_ECdECqRIxhOBS+*9>)9lHNkq|m;zU2NaV6y%-fqP$fp$h*)5c~y-W$@XUjm53Ry zR54~G-;XcGPW()I&9)!EBn!noKqdNWRTcY6 z+h{`yHd^n3jr1C!YPrzsV4Xi_k8ooO_SxuyeRO}^l7hTVF3P(j1$no*AWz4JyU>$O z=pQ(?qRlwArs)zJ&Xd^ivze>o*ie9MU1F}zt=O<3}nRChl64zg`k*7s?PZ97BT zi&FH2*Z&l4pFPOh);FKYS2k0i-X+`!dnP_Be!fO>1X|O|#_b)jXqFkbPotBaHSDq16)OyRJ?ZJpz z^~^X>+0mum3XC6DvGMedhd&{hfe~o^%)*9)?61nE@4=>e&+_-P=@`6)rYsq=uGOZm z{wX&7;BRfyiGMMhs<`?QZ2EVIt7=s3KFA(W)j3Pe0{?=xe}{d+9_X1tpW~?4E)%iV zdMU-VYgOZ`Ub$2)C*(XA)a;vam7TBD2-^$0{vAdb_kTKlDZZerd-6f>g6fU1ebDyr zFv3(k`1)_6t%|k#q3yw3!Bo`~)F}HF+Ws9znX>Ko7Ed@BtHbKq_J_ZfZGZfm*j9PM z&(QYoFv^s+zy7VX{rw<&f_+~*7rASv@6ocp4fQ_7=M)+N_QPuLK@t?L1;?p9@KTY$Z!%jYxPg?8Mdu7+eDvqf2<-wTww7Zx{$%Igotvt;e_)^)^B;`97Xt7p)a(x1H6a$ZNcwbpWH?#ro>xzF9$ zRq->{Ppjx}T1R*6m{%iqtm>Gs&gbQo7`r!A(UwkQVvl7^tcuP9&SS#ed4R`Z@^3u0 z?$n&;%C;5Gm7ln1BkTU-BC!##d7N!j-8GM1kG6w9v?Bdh9Gh@H=RDSBlTi?r^YSDmx?n&hW6L<8r8%f9u8RlkJW17A}9^Ht!T$9dNIx zB^?Dx&MVKOU6Q1&UbUI_TJekc{D-^WBBC{{n&h`Frn$LbCqbm7ZSJsT{pA&7rItUtCecjnF-12oDVXU)v z>hm_w?JH88z29({c`7q|S53ns|MD8nJ%}1sZA|_O4QqORq5ZIGb8$D(Ftxe(0|!4$ z2fL-RM$x)eZRL>KuInKO-BRgO9UZ18jpEb1IR~8G4xB&I zHmJ$|IoZJmsq~Mw!OWyKIMr1f)TAF==U{_W{NP~p&wm|st4#ltB<-KsuJ%t&`slx^ zXan6pRhzj|%jCc3pj#?yW<7pNllIR%SNccGS(sE#xhrzCt!vT`-g2;YWyS)>D(BVQ z-zQdWbFe`wu}b>^&sokkaCgqC$$0%_6>Xq>v?k-h^A5UICLSzK+CQhcI! z1KmG08ABotx}_3Bv~D%&*XKCsmde;Z7`om27uN0Vzp!pq{gmgy=+p9Q+N~zX=_wAn zr7}+SJjZd=Im6~o9My7o{pLKMy0d;e7=Dmm&HO=4#>71ieo&d1Sd%__l7nuk_^9sF zn$+!tD(a^Fn)i*)e(mnQu_k?|%)thg@tvB~?bpAsZXZ=sx0>|ps($WDkGYy$_rBv` zw^Y{tTDO|C+aw3wDif<}ax9cO==N6`r=Gv?+_ z{kA6^4{FkG*?(cXHT?_gwxo(+3fibgRtzx+Zmdt(v;k2G&A==N9fw=W%Z`>Xg{u$uEiO~$t!4tD#i#NKDB zsGI)0uKG@=$K=z&XC&PdpHw;H@4($0o7=cg3QT#}~R_N+)-k+f~+xg>3~ zhku)73#6S*7bb1nN|&UmwmmLwTa~nJmsC@l&X%lBDq)Q`+4l-rKQCJG+w5A(l}W9( z)gmq8rs{gS)pE`f+_s$ah;`F)Dn{HC9ktF9-5Rw@+W8{w zx}^TM!Nqap+#WZ^k@h_miB_OZXVZ;I+qAKoZPL<|r*Df|(Af{GYe6kd{aX7g(Y85D zbGL09q-~p$#*JHCvZV6GCqx?0#m=7M?p%C%v~AAP+-=(K z*x5_mnv0h}&QvPG$OF#6oc#V0iU_@3bm3Q{9{DouUHt2woy z4)|V;PSlyYP*>_sJ*X%3qTbYp`qKa!NQcrO8jNq-7=!P6J&ttCZu44YeQ1;QzDu(7 zta5kKe!4U1C)o5iL>%b51g$chd#Cy`w9QoiEHV3Mm(6Bxx@@z1liKW_YTHcz!so5< zw>;u+h4Iq;IQr=^9NW+nICi9GaO_FX;n<5_z_B;IjN@Q>701zZ99F5X(}P|Qe6$-q zgmVxc_Y}_Tg)iaEUi%(wwT8CQUDe;+fYPLGkIBN3$m@U)6ofws7v- z>f1ugcr&TJU$16V))IClZN=LzNq9eL8{TzE!pBJ^eCU#dPm@ac#3czex2MuQ{eMZ@ z@R>_(_$sM{FIc^GRv(ODSnXS{B4ZeMlREdhu2sa<^4TG^z+RywsY=%9f$ zn@}}98dso)lNQ?2yasi)bamID`dg))JW0<$&YsiKY>Pdg7t7^Ul*iNGi)57=lV;5v zer;qs%Bf7&P+PH6(h=XGnj_x*S^s;7(fVx_W_{j)IeSiZcVM*~Mu;92I+GUb)5JB* z*G6;4o>d<7*Yh6Uk2_n^t^Ihnr2g5Zn*OOrK(C|{dQ?+FMI(BjE!X^|izAvdNzQ%Z zRwk)mQj7Jerp0uh9GXy;iM9dbVTRVr zjU3#My{%NWca?Ns|7zR){A}c*O;+wzeHTje_j#=O5|77i{wr<#&-1wRCYRQJt&RH{ zm$^5zaj)+(_x?8SeO=~$n2q~Dm$^5yac|->_d9IdZ*!UZDjW9;UFJT-#(l8M+)uD^ zKh9$eU@F6LG@UB%u%F~p@35bOGrz+=1807R zeJ;-Y4*Ovq^$vTXPrt){Ep|H@R7;-t^V{kXpZ%S7{dobkH(CH$dDtQO6 zeq*~M{;WglpX1Qn)i0+09Q`zcm46H2&pN7S%T?w6i^+YjMf=Z<>T_QNn@lCm{X+}) z_p8BOzi}`ZpKBORWjKx_^_h)xaqTDdJIbGV4Z4ypK+E_yX3sz`^KZpv6m2uGRd8PP|>PbWJIuecN0n2z)yj)UnfNXVlul8L+DTsho~{F?PUB6j*3Q3P2B z^%)z^xDBB&9f2InP|BxaG@On?rsZfFNuy{ovMXL>T27(V#@TxbKKPE!TI*f!pN|sy z=L4I>b5iIZ-Nw{B;$I08ciSYM>$=3x6D01jNj$F-5>p#zUz!qQbNgPK#Cnw&*{NCe z>x4G$vq?O^5^YRP;mumPt99AX)5a*^A<|8W_>-C@Rrmh`V%DjY!bbdkeHgc)HWr?=79{G#O0Onmekr< zC!vi&n?#@MZLFWr#*j_oGS}OfmC(k9Hi>moXrtci`8=^qy2o?y_IhsQ&~+OQv$SEL zr|M6JG{5c^eqCMQ*WbdguM7M(Sop1Xf!{O>zo{f!`Sxey6#> zZ>xpheJ=33#lmls3;gU)%c?&5$#zfu?Y-Du&r(FJ}dTlh_Kf!|^azlARFyTiioHW&Ccv+!%;0>4!jeiypHZ-|B8 zU>EqEVBvS13;co>ezjfTx5C2jY!~>=w(y(j0>4%kel1+!ca(+SFcMc@gX3VDD7lwbSl99{tVx1iEEVdmI~4M;wv$!Lc(6+HS++7}s zhi+vekM5%5bkV3M>=!}ysZCm4`5a7gt#oe9+N$1Z4J~`!ireH=zi%b#C$~xelx^ZM zdud==mQC*i<>r#hJ}hO~$$1P;nTOtOs6H5yX3aF@9U#A`+dia{ZP&kEm-_db9U=ZT z6vyUt5uTL4n)Lg2^|yq?zTd2l*+Z#I)89N2|6RVr;Mp0_AW??)#G^#dA{hr0jnqb_ zu6wklZr4hV>SHW*k4Ns9$KOQbK;uvQ&luFsqH#Fp(L{6fPDsnFAfD*hq~0x6Z;}>E z^wjT)#=i-=6FDvY_7aZ`&0!LxcBCmd4kpFn6f^#Q8~1MM@p183+s&$d#aioJ@eJhO z+E5{68dQX%pJw1#n`Ysdg>P&&=zQ9N<4P)qF8q$-1&H4l(JK53iH|Oz3+YaJFq&OY z#%+#pQ+(bKp4H(t*TQXgwYkj~ZaiD1(o+2fn`)`DSQ$7Nv;fC+T7+Y5@*tDBl9rej zGfa#1vsg^OJ!R!{y6`zuI4s98ii)EA>pBkG@4Tk7b~W#*aR=j~((YdbDI zU^|j?U@NARvPVUhNX|jky{t+)So@PXRNS9B0wr2*a1||gd9}4>4pr6quq0YL`BUGd z{^Zm%R=cv7SFGWIIIw?J%t5aURL=}ai(jYm+CX`~lPs$*Us3HIVGb2*t4H-f%v$zu zAheEZy?(XEAFHMnjTWc6);_5yYUwxS621H?v@C@PQM+V(w;Z!7?cHvk#PB#muTP>W12&XTElb%%*b+WeT zcGOO%JB5>KS0B`Viyo~6kGrMzJvfdrZPQcq*j@=9_X>|K79LZD$6J-)aX)IO(}TiE zwdHu!ev9^1g2zL`;}HvwQ&IcnO4;Kv;qkbI$FZWvyOq%63E}aSg~xKyqcS|65gyN3 zcq|bfm9fVQQu`$wb>EHvk2mQ{X^Var+UilSg0>O8oW|cd%8}>_j~AomVcLoJBN9i+ z>uKp`WZ=&jF@0)O$tAxTm3&ntC2O88-S0ndMdB7@c=CcI6%u@+88 z>*L$z6ny zG=|@9I~~~*+mI%;(s9h9S~!lO)8LJ7V80LmHje7ycnUSZv5>NGoJMv09-2VM(v7gs zKj~diDw-xj-$E!`31zc5Nx z2=1bPar9G19Bb1Lu+=*H1IH4&1?%WJG#CA;##Lher!(qgP<=>$mb#*4y#Lhw(;fG` zbUQe`M!o!LxTki4lPmC^K7OC+J$X^7{lLed0mAK29MdQb@}8!yI2OzA?aYM6$#oor zIvJD$>gVWiQ%8IM90`g-%ExgUh0XrC#q3Gln&G(XrAMSSBW$g)^EyU&jS*fWOq8_h75WfpRH3hPV&dc zy#raOwpi#CM++4|LLn96IE^A^s~(JNmDNv+K$$@^aMXU<9o%=(vpC-4I68`jcl_wE z+g6RES&o#+cNBBrQyCI5$5-HabEBR&KI%(}{WM?N)m$vq2D{C4^nu+&l)snRJVf`& zf`mTN{cE+|B9XBKM{T#uxb2H-KkVVBw3RG}>YpLxPufnq$fb-{qO3R@8@k zA!0{Bq2q?O;}Ar9t&=sUlxP#{3Pr6=^c=hcQnM(r#*45;25hI>YPH3s(3ki2>hpM6 z75IsDb*0u-nqOiJy$p7VKxQm*UM_Zd$&8#ayXd`{(rE~0T5W~Suu-x|aV5BAQFFv{ zZkLV%i7i*_$#tMkC$*l`Iw#V0mGuhG@|q^mPJ^R%(lm*D)}!sL)%d9XiF~euMzv@I ze6?bEhehSt{Y%-g4C7n-m%e`^ICqGyX*NQardaW`kG3hXuWpX^Rq{673L3Qn(*8Oy z&R>)Fl^VmhOIyc8Ba780eJ$fr^ReDnK6S`VKGAR7E71(A(@HtUk6jc_=*3m#5OX$@Dw)pipT@tl@^MDk);wavh_Pi_YxnA1C z>ke*@?$-}dgZuUUgnmuzHMY35*R0mMTDV_fa@T#5XoruZJd|I30^P>Z9vsKh=Qt*M z-dCoEUqm(3qm|dHe68jpEi+N?e@A7i$omcCWYB+btVK=GJI~N}CWRhb|HZv@`k&DK zgku){f@2;{0rg8!U-(U^{tzl7ovFMyVvGuv)+eza+nN#HKKjy77b_YZC(_5}=+iu` z{kTRf{Yadp6Q$G=jkK)-={_@Nc8Er+Oi*Od@0h*br1h|XbxD!MWjB34v3`A_()Yg;yEYWc5*hgx(SWa_5x9d5aIMBKfha<2ts?Vw?CZA!HJQK05uc~Rq8jpUZ3&mtUJS2cNQ=`){0S=$C~zI75%MwignO^PIN4m zpl$|bqU>3k7uOzZJT1jNj`7;Qc`7b zmPhBrSt5k^Jf6-KP76W5E6V9-xpThUQBhn=XKV~zV7a4X)XxTwlIB=@=@JieqpC#L z{uZ^<=_08;5)$8vO1xOgF2ym6@^Ruo8-%d^A$KoXq1irSd^vHRXAqQBHVc&(_paH67#CIwF2Vs^{1DiF7q0HK)WGP~WjW zqf$?&^qu9%Q)kgu2W}t9h@xWbD$3Dj1ma_M7 z)YjBCQ!8`!46Ds{gVT8Wz`{w7l||9@mX=yaXg?BKdo*|oKAcXw<&HgyPlSE5=wG-q zo_>d|9*=^Gp)X3X}Od4T`GdgIXMiP83^3192e7tQyigsAi#IA+ifIF2W~ zrE^f0PCv?hd#oM?KWa|D$eqP#(W_C(&q(k5E_dv`Lm4c`gJZl`hEWHf)Wn_msKm2- zI{Brh8W+0XYN4z-1v2bUO%nIE+IlMLXQEaXeGZLdQQ!JhNIehIb)J*9)D`LWwpgF- z4*|C~qwTLJ)D3WqZ)IX`S<7hzYCko`5&2rIjAFXI06S-pdcLck?CLsAL5**H#4(#% z;+PX%v8dhI(eP;N`b_OH`bod2-G%0q{7!4|#j_tAo0Gklt)dX(*UtAQTb&;y9*vJ$O3A*?M$;uu z|88-3k2t)SiEFva1J4D|by3~=#L@Iao3m&DjxqfY1&y^mgW}{I9*67Ls^x}-=aDv^ zqmk2Sg{+yjeLi@wPiTC29MAW}K3UQG`ki!5KP-+P_a*bwI*bq6Kpbd23YerE>6b8IG)GH;W}fd>z@ej&7&Hr6_>tu zlI`9pqK&>60hS)ES74(owB1v4mabQXdt;*YW&n%z$vub&v3te1$NM|A=biYAr| zGfHEZgED3%^-M_Ly8`zpYR{`|Jg){8v)MJkVs^O}Sd8cOz+#rT!FKN^+r68C#q4sc zjq-M2F-zQOyLYz@yT^vz3oNGD7Tdl1f#pTp_n__GLpJOYU@^--X2Tx0VNckwr+~#Q z@r(_7&PMry?cPhkVy%4{Sj>X2+U~t>!`=iIYwa%Ey|;lyqOE-wSWL6`ZPqeqi03Cfq z=K($kgwu#N0n+_M(*REZTBQ@64)_4jJcDR4U>BfaEuuw$2LPekL^A<*0Ps^sG!(EB z@CKlB5V8PI0%~UxjRI@{d;n-vhiEL|V!*S2R&}8x;2!{gh-fh2O28`se?6k30h<87 z1Nzn{S`By}Kn;lc1J(du1mrd(ngqBH@FgI(5pcj7z>9!fm}(MWD_|d>O=F^y0c!y} z0KO(fhXKj~uK?;dg>1kkzz2Zd&4^|LHUT~WWH%=|0k9dc7tpx{(K&$k06kj57J!cd zy;~7o0Qd;dr!~s2BVL@D!k7Z=xc=1Az2C=mWsTfR6y(`ohNmj{trE4DUy@4)8LdRe$IW zcnlC2Ky)JDR>1p!4g-l!0o)1r3DD(G_%q-Iz;A#ahY>9WYylX9pg-Uo!0Ujt!9)`P zHvql?3_2XP0=x@oH-u;b;C8@=fKFkeC4lDujgBB10k{hA8KBpZM9TrM0$L7*{Q(aF z((_?gzy*M}0d0rDu7D>1b%#T5z@31f0K<=*jsPqG+y(d)&}=NxIKWE4 zUZ zD&T6si-2DMosWYJ0G9wB2kZyr98WYJa1LNA;5R_m6Nn;!)qp1e-vaVZBsvywF5m&c z{{aq}1fK@11H2Cio&>uB&H~&6_z}?IWcVlGTEHuSKLFiNf!zS>051T326UQ?m;tyL z@K3-ufb0nD1UMV81+WLuXbRCVz#_nHfOi443()U?*??;SuK@l4be~F809XTf3h+Ik zZ6RVJ;C#SCfG+?|rx6_mSOmBQunXWTg8czg0ha-`1HJ*YnvOmIoB_BK@E)Mn48#_| z48WCuX8_*=@=k?q0m}iK0UrbE6vK}IvjNutUIa9ni5L$k1KbFB9gsN-J`Xq(a68~L zK+bIRAK)s$tAM~9v>R|HU<=?=K5Iy ze8dL80>D22{|Cq}#kdEo0lWn8l|gU7Lck4xoq)`8^aWrkU>o2+fQ}2`$AArhR{Zz#o8iixFo5iva(xy(@u}qp13|JG+~N2qAz(vHDLBcqh?cEHSompmPb8#dbavDJpLI}uB0+CC>03t#FITSD=9|%Yk z)O>u%Dd7x z17`u(0uKX!0UAz4n*c`x=K>3WM}R*8b+d2`1oj1v1I_?$29^RJ0-Mf8+X2S|Cj#dH z*8od^SAmAp&?dlWAPvk0<^i_@OM!QRUZ)$g4R9cE9555O4EP!F3ef8ej5S~!&<0!p z+yOiTtN;d_iDMIRIFJRV0&{??fyKb%z>B~eK;ySDCV&yZzQA~(6_^cN0^AHN27V3v z8TbU)@GP_+usd)l5CAiQ^MR{@dw|~n%YgTRzGp)p*aJ8e$N&}KeBcV;CSVEhBJehV zSNY5az+hlkU@UMjFbS9noCEv-xE*)^cnWw0_z+mp5e(;wIz7!HgDjsPYB zMPMdyK5zwa8?Xd;2KW=O0%-gW`YNy)upO`$Fb?=8Fax0zU(u0GW0s343KLVQo+W@-(`v8Xl#{mIQ0%if<0pG z0G;{Yi_5%(9#sd?9 z0B8fI0keR!feV1Sz*WEk;11v(;6dPVU@7oB;19rZ;7wo!@ClH*1ik?J1785P0EPlP z0J{Qv0s8<40*3=f1IGgakO#`ZOyD%&9N+@rQs7G9dSDUoBj6t30pL;KDd1V)CE!)y ze}H#@4}pIGO_$=h2W$jv0t^C%0XqS^1EYccfP;Y}fn$LTFc~NUQ-M=}GlBDgi-38+ z)xZMaR^Tq+KHwqX31BJkJg^M-3-AW;9`G?xKNo!gSRWVwYz_1_3^zNO5%`wVF8GGiZsyBat3#|5GtEplGt5kLk~!I&Voo))%xpXZc)B^moQZdZ&cYk!=h%1V>HYaR=DX$syg&34 z+!?qSZxCIAZywCW_2qfyax>ptVXibkFjtwY%{BPD&RlP9FgKb7W}&&s+-w$^ADUat zt$1(Xc5{dM5uTmA)7%A1i_P8ky|15|`|wqv`*E-A0rQ|)g8PdPbzirLbJ&=2Zc(mB^Q)TuC2XTs^IHa zEu~_cNvB&nDjlUDownZC-ek&fNqZ?*sF=~C!O8)Y_Z($P0n`enImnw*CRYwjJ7i{3 zDacGQ*&>V=Is%hxF?*UIk4=z=N~S!ckToquWLhxOCg<{jsg!1zV0t!aub7rxA(PL~ zFw=6C$*|jEb{GvmZ@aB&%@-$S@}^KM+ zC_;H8QVtzujvr-C9%W|af_yVR4>b{W$>-Y3Fme+5K~T zRc^~v(&hFbYa2aXDNYFrBTQumlA^Vy2BmVYSU|H>f>!vXC11=`&^BnomJGEV>W=1{ zmdRDnxNU84o;Tp zP^b2&?cN@jj_yU}T0BBsKaHN+0T@a?&drRwGE-{ppza%Xqvjx6ETKc&B1&~R5);ED z%o|h8)J!RtnUoL8m_S@_vAwXlSfRAkUyRpZ($t)}LYlmV4g1kkFlltqHmY%CktU>c zu{}U>DCc4^A7lz%1pEhmr_d3n7~Jqlt_;UH6?DN|Yr&4yOh+qiQC2T9UCOmiuB0bp z7EG5hv71Zn)`WVUGYd?Zr?B|8t6m$&$qvCUUR(<_M_N7}zjwnBdTm0Fd+nR} zLQ5F7$9vTit=A@|!Y!`rfD@ZgPygj_dz*mtWe<0k*otgIU6IeP&(?L9*L2QOg88f;k$9~Jz1Ey~Z4G*@r_TIK-R8CAI%M}^`qu`zi8T<}r5vB-RbsMk z<%%7#25HyE+K#qiNMH7_2Dda8Z^M-{gp(LGnRbk0(c&+^I@!CL6GR;&)3hjWWS zNt|rgc*3Uyuomp8SPl40tO9%b zJMk9}nqwXIxI&EGi}ir9(lk~Aj>0d%e_{U~_tw$+6)UVwGh|o2_B6N6Z?IZ2*2Ok2 zTK=;6Bgcnc`%{m5t<`=XiVBg;kgKj)H;%pYXmf z%f|TsUbC_=Ce)9lud#(U5Jmf)|LuYJ*ZGh3Uc;Rl;j3=Lvi!4^1}O~%S+mZPRsIdJ ztJp34C+okhl4Laz3+vm=!g~52ZX@+@CBZh1pslPf7;Zy3)+9t)S!wX!D_K|9tc%Ll z`ChovAjx`ieaLr^U*xqyUDwVbJFh`JHav%n$92y+WIT_qvD)_9-%!cOYZoM5LwopZ zv97KU{Qr!#6)~?}R@b#(*{iDy$-`gSam{3`QG5L7Pax3B1kqTlBwj;%eEP@QM=`Gj ziPvhvYahqF_JhQ0HQ}|DF|WN*KhmD(k4%MIe8m!+*aS$TKO|ah2({yC$#IR^<3B&H z{R38_pZO6oGHQ}{X%xkZ7@%|dBw%U-K`G-x^9pBDqjCt+; zWUQg7Km9Xgub9^+Ctj-wul0#}?cFZk%UJ& zUZeFSqPwDZC1b57yf!4}wbsOIHQ}|bV_rKqnIUV!YqWMtG(&Egc&#S9wq49?Cnqyx zO?YjGnAgrp##&8yZFtOU4pE6H?DYpe z?QcTumw2rPy|#biwHox=fr-~@&}-uouhpQ}!UJ*iD|_uZhYV|OJ8ig&|0zQ&LWCjQ z5gypcIwRuqVp_%wwrAeP$rtgujFSE?rN5Kn$FpIv|A>;;EBOK?zeeRhU-3DLe_h!- zTglgz@^e0iDE+@H{q>amLnZ$}@%I%!U)5)Y$l2}{!dY*$txBKzH}!7OzeC9-Ubai1Uk`n*h7o=q$LRRMsW3*zFRJHwF5eQi zdsh`ZJ5`B4zOHlok5tjGucE)8ivBfK%0ItK{G2NBU$2ty*;Vw{mG&X$AxQfiQpL{S ztJqnuivEXH^gpN)|9+MD^Q*Mm3ei{oy+Y!{YPouimU1fnK~>seN|pFIQXXYzUX}Q^ zD)BQUUX|17tN1;tl>g^d%6Wk3D?7(lX`g;o?2M~o=c6ii)~%x7)X@1j`k3v=`0vf_ z${RBu<*$QK9K9#kWy>u;QC4{w38PY26zNQlC53@vuS3 zn-srZ^g}adF19$kboLx)`5^AVY{u%-@m2CCeV>;*;nqIe`%smq!trA7YQ>*Z<)!=F z6r?==5YF3y!b3H4v~b>jUe%{fILj~PbW)yKDt$rZymfNsyDI(Ll>OI~{28eq$M2)` z9~U{>e^#ZZ_NO4_y$Acfj)H$|tTC^MK65S4tNcjbgp)o=?>I+TevpzA_vDSZLF%Ws zoFjfM^td>fH7-%0VU6(6d& z%b)G9@ zJ$_n`h4GHF-91(L-c|WMk7Rbf2$SO*B7DBidcx(rMDl%FmGgQ|FY^18UB}rjeOIO) zlP6RAof*qH;s=nYuporU9p{Lp%D&^C+@I%2?$4{#j()uz=k#CWt<>jE)sCd^+t+*x zm7e_WkEX|yH84uaz> zpN+T%R7&#Gyg~iWTnT*&qW?LObHp;$fBwwz(%uV^w&^QTevY%=lPW#cpMs=cjD6of zj&u5-D7oV-zXS3HuRR=R`4W}?*HnAcd92@_j&u4OAg3VZy$Jh$e{`Jn-{P(4({-KH zMp64X&U$nm$?so|vz+SV=jXU5_sdUm%UMq4^W~b;`$`m~ywhl({y3ie*|2R?e#cop zO10;ss=cW_{qj4`>F*}{-uQBy<f`(0aZm2|FOvK73)QDl^&DHGfme$N8db+rS(1hR8XB`lFwp=Ja$C1*yOFhw5*Q#98mrP~GvrsPykE{yW8A zR-BGk6vTc9?R)+ICUD#TINe`K8A0?(?(4s2rIDQaGX>GVKctSop~~}1$m<73^?g&x zzpv8&RmqnrewosrrN-+ykk{eIzm$*q0|nt7N`H67_f`Dsitn%Zk%}Ls_`PBFF8_m- zoca$1Dc?a#eiCF2SQ3Jp0pHGx^L?a!$Or<-o6rfxp5s<(%(q0Jx9x~;z{Ok9xBPPv ze;jguz7o#GG{RRxi-Oppd>eO+m)mmAm-?AMPOUyJy0F;Rqmj5*&J=#s#yIs<&mN6) zU9OGzI+EDkO0_SQgM!G%D*0DJv6FAZijwaxqR)B-;jDM1q-XwtN?#N?Z=IZZ_*_TS zuD6JNmbYT-k7vy<5jpE?PWrwd9QX9eD^g!dZ#m0J-_EaGFU^l;JxTuNf%5C-8~ zEhBs%b^TA`zoq$eNOrfn@9GA%l*jbA*byM|{_BgJ%ln$D&l%Jn10z3Zej((Icx6c1SMzT}-h>~w;z!3hpV=h${NXsu zPsi3DSB|rs{ND7{$iCw&xB1~<8OxtI%c(w1dq;A|efd}=C(d$voW)IFvG2GqAF1TT zS#I0w%aPo1mQ(o~aZyq1JI-<{ZzEo`6S?Cor}k*X>yska+#Y{-fSmO;xAySTtfY6G z^{KoKgCe=(p1ocNM{=@nIm^jjuR|lb<1DB8_Bt$*JI-=Dj~x-o9cMX}rwNbSN%809cTGMC3l?VH!Hd0Ebp!Icbw&mRC>o*ew&gz&hp!p+;NsSsr(&h z`Twf)jQpl)-0k{}ub^0sS?;AGj>hCz0i_JT^ z<19Z-mEUoW=f^2rddFElTcvlLwnf?keq5O@Dp1BmSO?a?nvpct({M zKdo#KIZhE`96zmM{82F5pE-U~D0cSgzP6uV1w6HWls{d+toN={Tto7Hk^DiDd*%Hp zxc~c<^c!%ILCSk2rKkH*TpsQoj??@OspC(B`}V&DPC@)3^&2DojO}JaHD?D^vO)5t z^EC>>>31Fl;WyAe{v;pi=Nne>`@L2CUQNHR_}%7eOh0wJ{}IP?vCT7zudnn6srr2^ z`W%l-=r&0Gb`s8dAEd=`p1ZzBWT{KM`1+1Z71@S zCm*WhIQ6wb>Jz@h5cv;3MPhQBU+<`2Sxz4I%Hy9`kUZt-zZ{x#`uJ%Pv;TxD-zQ2w zM%s(xsXtMW{NGXf%R;e})AI=wME}dm-V34F$^W4E9!mcqCI4@g|9mBXO!32&y>=yk zN!k0glK)A`OG9B@_+XXaJS8W6f1dd*a~c1_2lG6m3R2GJuutU>`@&yEtgmOES2-%O(`u!Woj&S5v3q`*%cq}T zrsu)^`aiGwvwOar)9dHO>ArxUp32ui&&#m>6jeUk4&x$uPRSov{1=KZWX|2t{0^M* z-%b3(a*4lI&9~G$C`dc6qQ~Wyc&4x)8Ww)78V8zxCscRsuvqc?6yH_ZyH)XRlwU4a z{BO!0jY~RyOFd~EQaioG{Z;%U@xtl8C%nV0WXwaV9F3AM=l7IwZkRFBPQ0b@ZTko7 z->B?qzLAo@r0mmuGrxR4QTm$ymnzSLTn?%4awY$}viGLqIaQu(Vb4F$xqvtxQe?Ac zu}ZJ`F3R48s(hnW`sY-6cU9?sjP$8t$e;D7ANu3-X=R_<)0b0y{PR4j4+XLJKPrE^ zE=@t?M@V_YXmg!#PN(^~tS9LwDf=14&x3yB0a5)d$4P*se^IpuE~(ofa+*&%8y7FC zaq(f8EV8TY(0Q5PZgf4Pt}!adaZ3Lw)|c@pT%OOD^3n0mw@dBgpO^ne$#JR721$QZ zNL{&cDKaMCU&*cgp(r=U>nxT2jCPWo}1V4ch&KW?EBYeHK+D%*fgroYvM01|Ery} zPo393bpDIfu05uy^j}czflK{1Nc-9JAi}4r^cyIB+~Nz z!5g-Uj&m|D|AJPgAbMYve0V#`N+bDts$E`Ce2nPxHb=I-cG`;dWqdyZdHu$9=2SJW zNW7E_m&$Dren?1Nxv74B|DyT0k&Z8%ZV}11j`(n8?+9gYx#D!5kn*0Bcu2MPbj8~h z|8r;d){XpO=i5!{%vYtqbNM7*>d{x7w|)?ClYJXdOD8#<8^E(cJ_8*F75Xa z>!(%wNj#f34?vIR7fDBcqkMj=(n-AN$#Lrlo@XSUeos*P-Q+xlGb$sVg4BonOF{VU zA$9y%=3-aonKPALT>7vbuA>0hhrqwo8_uH>&O z`+rpY_lm!+`1e))-&5szSn>B%`ok0ti-#V~@n2K+Pk@5o-~XuU^Hs&^yp)32J20e< zQ~#nM@{2?2_z1-pDSnLN-%xzK;y4wzLGn9N$?=GGOn$hM@22=H)jk6h-(2xa6yIIh z`?})$DEp(V_H5 zv;FEDHc(xmTP5drtM$bA>RRBERTOlL=9HkbIBjTkI;(nK_e9Ng4n4tFt;MP_U1^Wb zQgx;LT}js!ov!4yW_14j(yW@YD=~hlSJn5Wo$dEbAN$wK)md5NR^lwuuNEI^bhg)7 zs?Op%OZ%_IiPcO#mnoY}z7muQnM!VIU^1oFj<%psaXV!*sn|TjWHTM*z+{Wf^smsI ztK^CW+A9Yqb_9iNV48!LTp^5Z=_q8ad`d9GWcOwHswP_}%&m?ia*M~&WdPiDb3 z<=o65T^U#yHgN00)&qm-*&t{x4{Xa!&$V^54TPQcVyO}|4bpwR#T literal 0 HcmV?d00001 diff --git a/common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter.js b/common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter.js new file mode 100644 index 00000000..f6ee3112 --- /dev/null +++ b/common/modules/mixly-modules/workers/common/tree-sitter/tree-sitter.js @@ -0,0 +1 @@ +var Module=void 0!==Module?Module:{};!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():self.TreeSitter=t()}(0,function(){var e,t={};for(e in Module)Module.hasOwnProperty(e)&&(t[e]=Module[e]);var r,n,o=[],s=function(e,t){throw t},_=!1,a=!1;_="object"==typeof window,a="function"==typeof importScripts,r="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,n=!_&&!r&&!a;var u,i,l,d,c="";r?(c=a?require("path").dirname(c)+"/":__dirname+"/",u=function(e,t){return l||(l=require("fs")),d||(d=require("path")),e=d.normalize(e),l.readFileSync(e,t?null:"utf8")},i=function(e){var t=u(e,!0);return t.buffer||(t=new Uint8Array(t)),q(t.buffer),t},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),o=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",function(e){if(!(e instanceof Ze))throw e}),process.on("unhandledRejection",de),s=function(e){process.exit(e)},Module.inspect=function(){return"[Emscripten Module object]"}):n?("undefined"!=typeof read&&(u=function(e){return read(e)}),i=function(e){var t;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(q("object"==typeof(t=read(e,"binary"))),t)},"undefined"!=typeof scriptArgs?o=scriptArgs:void 0!==arguments&&(o=arguments),"function"==typeof quit&&(s=function(e){quit(e)}),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(_||a)&&(a?c=self.location.href:document.currentScript&&(c=document.currentScript.src),c=0!==c.indexOf("blob:")?c.substr(0,c.lastIndexOf("/")+1):"",u=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},a&&(i=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(e,t,r){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=function(){200==n.status||0==n.status&&n.response?t(n.response):r()},n.onerror=r,n.send(null)});var m=Module.print||console.log.bind(console),f=Module.printErr||console.warn.bind(console);for(e in t)t.hasOwnProperty(e)&&(Module[e]=t[e]);t=null,Module.arguments&&(o=Module.arguments),Module.thisProgram&&Module.thisProgram,Module.quit&&(s=Module.quit);var p=16;function h(e){var t=D[K>>2],r=t+e+15&-16;return r>Ee()&&de(),D[K>>2]=r,t}function w(e,t){return t||(t=p),Math.ceil(e/t)*t}function g(e){switch(e){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===e[e.length-1])return 4;if("i"===e[0]){var t=parseInt(e.substr(1));return q(t%8==0,"getNativeTypeSize invalid bits "+t+", type "+e),t/8}return 0}}var M={nextHandle:1,loadedLibs:{"-1":{refcount:1/0,name:"__self__",module:Module,global:!0}},loadedLibNames:{__self__:-1}};function y(e,t){t=t||{global:!0,nodelete:!0};var r,n=M.loadedLibNames[e];if(n)return r=M.loadedLibs[n],t.global&&!r.global&&(r.global=!0,"loading"!==r.module&&a(r.module)),t.nodelete&&r.refcount!==1/0&&(r.refcount=1/0),r.refcount++,t.loadAsync?Promise.resolve(n):n;function o(){if(t.fs){var r=t.fs.readFile(e,{encoding:"binary"});return r instanceof Uint8Array||(r=new Uint8Array(lib_data)),t.loadAsync?Promise.resolve(r):r}return t.loadAsync?(n=e,fetch(n,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load binary file at '"+n+"'";return e.arrayBuffer()}).then(function(e){return new Uint8Array(e)})):i(e);var n}function s(e){return E(e,t)}function _(){if(void 0!==Module.preloadedWasm&&void 0!==Module.preloadedWasm[e]){var r=Module.preloadedWasm[e];return t.loadAsync?Promise.resolve(r):r}return t.loadAsync?o().then(function(e){return s(e)}):s(o())}function a(e){for(var t in e)if(e.hasOwnProperty(t)){var r;r="_"+t,Module.hasOwnProperty(r)||(Module[r]=e[t])}}function u(e){r.global&&a(e),r.module=e}return n=M.nextHandle++,r={refcount:t.nodelete?1/0:1,name:e,module:"loading",global:t.global},M.loadedLibNames[e]=n,M.loadedLibs[n]=r,t.loadAsync?_().then(function(e){return u(e),n}):(u(_()),n)}function b(e,t,r,n){var o={};for(var s in e){var _=e[s];"object"==typeof _&&(_=_.value),"number"==typeof _&&(_+=t),o[s]=_,n&&(n["_"+s]=_)}return o}function E(e,t){q(1836278016==new Uint32Array(new Uint8Array(e.subarray(0,24)).buffer)[0],"need to see wasm magic number"),q(0===e[8],"need the dylink section to be first");var r=9;function n(){for(var t=0,n=1;;){var o=e[r++];if(t+=(127&o)*n,n*=128,!(128&o))break}return t}n();q(6===e[r]),q(e[++r]==="d".charCodeAt(0)),q(e[++r]==="y".charCodeAt(0)),q(e[++r]==="l".charCodeAt(0)),q(e[++r]==="i".charCodeAt(0)),q(e[++r]==="n".charCodeAt(0)),q(e[++r]==="k".charCodeAt(0)),r++;for(var o=n(),s=n(),_=n(),a=n(),u=n(),i=[],l=0;l=0,a=0;return e[t]=function(){if(!a){var e=m(n,0,_);a=I(e,s)}return a}}return t.startsWith("invoke_")?e[t]=We:e[t]=function(){return m(t).apply(null,arguments)}}}),g={global:{NaN:NaN,Infinity:1/0},"global.Math":Math,env:h,wasi_snapshot_preview1:h};function M(e,t){var n=b(e.exports,r,0,t),o=n.__post_instantiate;return o&&(ee?o():Q.push(o)),n}return t.loadAsync?WebAssembly.instantiate(e,g).then(function(e){return M(e.instance,c)}):M(new WebAssembly.Instance(new WebAssembly.Module(e),g),c)}return t.loadAsync?Promise.all(i.map(function(e){return y(e,t)})).then(function(){return f()}):(i.forEach(function(e){y(e,t)}),f())}function v(e,t){var r=R,n=r.length;try{r.grow(1)}catch(e){if(!(e instanceof RangeError))throw e;throw"Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH."}try{r.set(n,e)}catch(s){if(!(s instanceof TypeError))throw s;q(void 0!==t,"Missing signature argument to addFunction");var o=function(e,t){if("function"==typeof WebAssembly.Function){for(var r={i:"i32",j:"i64",f:"f32",d:"f64"},n={parameters:[],results:"v"==t[0]?[]:[r[t[0]]]},o=1;o>0]=t;break;case"i16":j[e>>1]=t;break;case"i32":D[e>>2]=t;break;case"i64":he=[t>>>0,(pe=t,+re(pe)>=1?pe>0?(0|se(+oe(pe/4294967296),4294967295))>>>0:~~+ne((pe-+(~~pe>>>0))/4294967296)>>>0:0)],D[e>>2]=he[0],D[e+4>>2]=he[1];break;case"float":B[e>>2]=t;break;case"double":H[e>>3]=t;break;default:de("invalid type for setValue: "+r)}}function P(e,t,r){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return O[e>>0];case"i16":return j[e>>1];case"i32":case"i64":return D[e>>2];case"float":return B[e>>2];case"double":return H[e>>3];default:de("invalid type for getValue: "+t)}return null}A=w(A,1),Module.wasmBinary&&(S=Module.wasmBinary),Module.noExitRuntime&&(N=Module.noExitRuntime),"object"!=typeof WebAssembly&&f("no native wasm support detected");var R=new WebAssembly.Table({initial:12,element:"anyfunc"}),C=!1;function q(e,t){e||de("Assertion failed: "+t)}var T=3;function F(e){return ee?Pe(e):h(e)}var L="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function $(e,t,r){for(var n=t+r,o=t;e[o]&&!(o>=n);)++o;if(o-t>16&&e.subarray&&L)return L.decode(e.subarray(t,o));for(var s="";t>10,56320|1023&i)}}else s+=String.fromCharCode((31&_)<<6|a)}else s+=String.fromCharCode(_)}return s}function W(e,t){return e?$(U,e,t):""}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var Z,O,U,j,D,B,H;function z(e){Z=e,Module.HEAP8=O=new Int8Array(e),Module.HEAP16=j=new Int16Array(e),Module.HEAP32=D=new Int32Array(e),Module.HEAPU8=U=new Uint8Array(e),Module.HEAPU16=new Uint16Array(e),Module.HEAPU32=new Uint32Array(e),Module.HEAPF32=B=new Float32Array(e),Module.HEAPF64=H=new Float64Array(e)}var K=7984,G=Module.TOTAL_MEMORY||33554432;function V(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var r=t.func;"number"==typeof r?void 0===t.arg?Module.dynCall_v(r):Module.dynCall_vi(r,t.arg):r(void 0===t.arg?null:t.arg)}else t()}}(x=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:G/65536}))&&(Z=x.buffer),G=Z.byteLength,z(Z),D[K>>2]=5251024;var X=[],Q=[],Y=[],J=[],ee=!1;function te(e){X.unshift(e)}var re=Math.abs,ne=Math.ceil,oe=Math.floor,se=Math.min,_e=0,ae=null,ue=null;function ie(e){_e++,Module.monitorRunDependencies&&Module.monitorRunDependencies(_e)}function le(e){if(_e--,Module.monitorRunDependencies&&Module.monitorRunDependencies(_e),0==_e&&(null!==ae&&(clearInterval(ae),ae=null),ue)){var t=ue;ue=null,t()}}function de(e){throw Module.onAbort&&Module.onAbort(e),m(e+=""),f(e),C=!0,1,e="abort("+e+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(e)}Module.preloadedImages={},Module.preloadedAudios={},Module.preloadedWasm={},te(function(){if(Module.dynamicLibraries&&Module.dynamicLibraries.length>0&&!i)return ie(),void Promise.all(Module.dynamicLibraries.map(function(e){return y(e,{loadAsync:!0,global:!0,nodelete:!0})})).then(function(){le()});var e;(e=Module.dynamicLibraries)&&e.forEach(function(e){y(e,{global:!0,nodelete:!0})})});var ce="data:application/octet-stream;base64,";function me(e){return String.prototype.startsWith?e.startsWith(ce):0===e.indexOf(ce)}var fe,pe,he,we="tree-sitter.wasm";function ge(){try{if(S)return new Uint8Array(S);if(i)return i(we);throw"both async and sync fetching of the wasm failed"}catch(e){de(e)}}function Me(){de()}function ye(){de()}me(we)||(fe=we,we=Module.locateFile?Module.locateFile(fe,c):c+fe),Q.push({func:function(){Fe()}},{func:function(){ke()}}),Module._abort=Me;var be=r||"undefined"!=typeof dateNow||1;function Ee(){return U.length}function ve(e){try{return x.grow(e-Z.byteLength+65535>>16),z(x.buffer),1}catch(e){}}function Ie(e,t,r){if(ot){const e=W(r);ot(e,0!==t)}}ye=r?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:"undefined"!=typeof dateNow?dateNow:function(){return performance.now()};var Se=A,Ne={__memory_base:1024,__stack_pointer:5251024,__table_base:1,abort:Me,clock_gettime:function(e,t){var r,n;if(0===e)r=Date.now();else{if(1!==e&&4!==e||!be)return n=28,Module.___errno_location&&(D[Module.___errno_location()>>2]=n),-1;r=ye()}return D[t>>2]=r/1e3|0,D[t+4>>2]=r%1e3*1e3*1e3|0,0},emscripten_memcpy_big:function(e,t,r){U.set(U.subarray(t,t+r),e)},emscripten_resize_heap:function(e){var t=Ee();if(e>2147418112)return!1;for(var r,n,o=1;o<=4;o*=2){var s=t*(1+.2/o);if(s=Math.min(s,e+100663296),ve(Math.min(2147418112,((r=Math.max(16777216,e,s))%(n=65536)>0&&(r+=n-r%n),r))))return!0}return!1},exit:function(e){Ue(e)},fp$tree_sitter_log_callback$viii:function(){return Module._fp$tree_sitter_log_callback$viii.apply(null,arguments)},g$TRANSFER_BUFFER:function(){return Module._TRANSFER_BUFFER},g$__THREW__:function(){return Module.___THREW__},g$__cxa_new_handler:function(){return Module.___cxa_new_handler},g$__threwValue:function(){return Module.___threwValue},memory:x,table:R,tree_sitter_parse_callback:function(e,t,r,n,o){var s=nt(t,{row:r,column:n});"string"==typeof s?(k(o,s.length,"i32"),function(e,t,r){if(void 0===r&&(r=2147483647),r<2)return 0;for(var n=(r-=2)<2*e.length?r/2:e.length,o=0;o>1]=s,t+=2}j[t>>1]=0}(s,e,10240)):k(o,0,"i32")}},xe=function(){var e={env:Ne,wasi_snapshot_preview1:Ne};function t(e,t){var r=e.exports;r=b(r,A),Module.asm=r,le()}function r(e){t(e.instance)}function n(t){return(S||!_&&!a||"function"!=typeof fetch?new Promise(function(e,t){e(ge())}):fetch(we,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+we+"'";return e.arrayBuffer()}).catch(function(){return ge()})).then(function(t){return WebAssembly.instantiate(t,e)}).then(t,function(e){f("failed to asynchronously prepare wasm: "+e),de(e)})}if(ie(),Module.instantiateWasm)try{return Module.instantiateWasm(e,t)}catch(e){return f("Module.instantiateWasm callback failed with error: "+e),!1}return function(){if(S||"function"!=typeof WebAssembly.instantiateStreaming||me(we)||"function"!=typeof fetch)return n(r);fetch(we,{credentials:"same-origin"}).then(function(t){return WebAssembly.instantiateStreaming(t,e).then(r,function(e){f("wasm streaming compile failed: "+e),f("falling back to ArrayBuffer instantiation"),n(r)})})}(),{}}();Module.asm=xe;var Ae,ke=Module.___wasm_call_ctors=function(){return(ke=Module.___wasm_call_ctors=Module.asm.__wasm_call_ctors).apply(null,arguments)},Pe=(Module._calloc=function(){return(Module._calloc=Module.asm.calloc).apply(null,arguments)},Module._ts_language_symbol_count=function(){return(Module._ts_language_symbol_count=Module.asm.ts_language_symbol_count).apply(null,arguments)},Module._ts_language_version=function(){return(Module._ts_language_version=Module.asm.ts_language_version).apply(null,arguments)},Module._ts_language_field_count=function(){return(Module._ts_language_field_count=Module.asm.ts_language_field_count).apply(null,arguments)},Module._ts_language_symbol_name=function(){return(Module._ts_language_symbol_name=Module.asm.ts_language_symbol_name).apply(null,arguments)},Module._ts_language_symbol_type=function(){return(Module._ts_language_symbol_type=Module.asm.ts_language_symbol_type).apply(null,arguments)},Module._ts_language_field_name_for_id=function(){return(Module._ts_language_field_name_for_id=Module.asm.ts_language_field_name_for_id).apply(null,arguments)},Module._memcpy=function(){return(Module._memcpy=Module.asm.memcpy).apply(null,arguments)},Module._free=function(){return(Module._free=Module.asm.free).apply(null,arguments)},Module._malloc=function(){return(Pe=Module._malloc=Module.asm.malloc).apply(null,arguments)}),Re=(Module._ts_parser_delete=function(){return(Module._ts_parser_delete=Module.asm.ts_parser_delete).apply(null,arguments)},Module._ts_parser_set_language=function(){return(Module._ts_parser_set_language=Module.asm.ts_parser_set_language).apply(null,arguments)},Module._memcmp=function(){return(Module._memcmp=Module.asm.memcmp).apply(null,arguments)},Module._ts_query_new=function(){return(Module._ts_query_new=Module.asm.ts_query_new).apply(null,arguments)},Module._iswspace=function(){return(Module._iswspace=Module.asm.iswspace).apply(null,arguments)},Module._ts_query_delete=function(){return(Module._ts_query_delete=Module.asm.ts_query_delete).apply(null,arguments)},Module._iswalnum=function(){return(Module._iswalnum=Module.asm.iswalnum).apply(null,arguments)},Module._ts_query_pattern_count=function(){return(Module._ts_query_pattern_count=Module.asm.ts_query_pattern_count).apply(null,arguments)},Module._ts_query_capture_count=function(){return(Module._ts_query_capture_count=Module.asm.ts_query_capture_count).apply(null,arguments)},Module._ts_query_string_count=function(){return(Module._ts_query_string_count=Module.asm.ts_query_string_count).apply(null,arguments)},Module._ts_query_capture_name_for_id=function(){return(Module._ts_query_capture_name_for_id=Module.asm.ts_query_capture_name_for_id).apply(null,arguments)},Module._ts_query_string_value_for_id=function(){return(Module._ts_query_string_value_for_id=Module.asm.ts_query_string_value_for_id).apply(null,arguments)},Module._ts_query_predicates_for_pattern=function(){return(Module._ts_query_predicates_for_pattern=Module.asm.ts_query_predicates_for_pattern).apply(null,arguments)},Module._ts_tree_delete=function(){return(Module._ts_tree_delete=Module.asm.ts_tree_delete).apply(null,arguments)},Module._ts_init=function(){return(Module._ts_init=Module.asm.ts_init).apply(null,arguments)},Module._ts_parser_new_wasm=function(){return(Module._ts_parser_new_wasm=Module.asm.ts_parser_new_wasm).apply(null,arguments)},Module._ts_parser_enable_logger_wasm=function(){return(Module._ts_parser_enable_logger_wasm=Module.asm.ts_parser_enable_logger_wasm).apply(null,arguments)},Module._ts_parser_parse_wasm=function(){return(Module._ts_parser_parse_wasm=Module.asm.ts_parser_parse_wasm).apply(null,arguments)},Module._ts_tree_root_node_wasm=function(){return(Module._ts_tree_root_node_wasm=Module.asm.ts_tree_root_node_wasm).apply(null,arguments)},Module._ts_tree_edit_wasm=function(){return(Module._ts_tree_edit_wasm=Module.asm.ts_tree_edit_wasm).apply(null,arguments)},Module._ts_tree_get_changed_ranges_wasm=function(){return(Module._ts_tree_get_changed_ranges_wasm=Module.asm.ts_tree_get_changed_ranges_wasm).apply(null,arguments)},Module._ts_tree_cursor_new_wasm=function(){return(Module._ts_tree_cursor_new_wasm=Module.asm.ts_tree_cursor_new_wasm).apply(null,arguments)},Module._ts_tree_cursor_delete_wasm=function(){return(Module._ts_tree_cursor_delete_wasm=Module.asm.ts_tree_cursor_delete_wasm).apply(null,arguments)},Module._ts_tree_cursor_reset_wasm=function(){return(Module._ts_tree_cursor_reset_wasm=Module.asm.ts_tree_cursor_reset_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_first_child_wasm=function(){return(Module._ts_tree_cursor_goto_first_child_wasm=Module.asm.ts_tree_cursor_goto_first_child_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_next_sibling_wasm=function(){return(Module._ts_tree_cursor_goto_next_sibling_wasm=Module.asm.ts_tree_cursor_goto_next_sibling_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_parent_wasm=function(){return(Module._ts_tree_cursor_goto_parent_wasm=Module.asm.ts_tree_cursor_goto_parent_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_type_id_wasm=function(){return(Module._ts_tree_cursor_current_node_type_id_wasm=Module.asm.ts_tree_cursor_current_node_type_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_is_named_wasm=function(){return(Module._ts_tree_cursor_current_node_is_named_wasm=Module.asm.ts_tree_cursor_current_node_is_named_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_is_missing_wasm=function(){return(Module._ts_tree_cursor_current_node_is_missing_wasm=Module.asm.ts_tree_cursor_current_node_is_missing_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_id_wasm=function(){return(Module._ts_tree_cursor_current_node_id_wasm=Module.asm.ts_tree_cursor_current_node_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_start_position_wasm=function(){return(Module._ts_tree_cursor_start_position_wasm=Module.asm.ts_tree_cursor_start_position_wasm).apply(null,arguments)},Module._ts_tree_cursor_end_position_wasm=function(){return(Module._ts_tree_cursor_end_position_wasm=Module.asm.ts_tree_cursor_end_position_wasm).apply(null,arguments)},Module._ts_tree_cursor_start_index_wasm=function(){return(Module._ts_tree_cursor_start_index_wasm=Module.asm.ts_tree_cursor_start_index_wasm).apply(null,arguments)},Module._ts_tree_cursor_end_index_wasm=function(){return(Module._ts_tree_cursor_end_index_wasm=Module.asm.ts_tree_cursor_end_index_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_field_id_wasm=function(){return(Module._ts_tree_cursor_current_field_id_wasm=Module.asm.ts_tree_cursor_current_field_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_wasm=function(){return(Module._ts_tree_cursor_current_node_wasm=Module.asm.ts_tree_cursor_current_node_wasm).apply(null,arguments)},Module._ts_node_symbol_wasm=function(){return(Module._ts_node_symbol_wasm=Module.asm.ts_node_symbol_wasm).apply(null,arguments)},Module._ts_node_child_count_wasm=function(){return(Module._ts_node_child_count_wasm=Module.asm.ts_node_child_count_wasm).apply(null,arguments)},Module._ts_node_named_child_count_wasm=function(){return(Module._ts_node_named_child_count_wasm=Module.asm.ts_node_named_child_count_wasm).apply(null,arguments)},Module._ts_node_child_wasm=function(){return(Module._ts_node_child_wasm=Module.asm.ts_node_child_wasm).apply(null,arguments)},Module._ts_node_named_child_wasm=function(){return(Module._ts_node_named_child_wasm=Module.asm.ts_node_named_child_wasm).apply(null,arguments)},Module._ts_node_child_by_field_id_wasm=function(){return(Module._ts_node_child_by_field_id_wasm=Module.asm.ts_node_child_by_field_id_wasm).apply(null,arguments)},Module._ts_node_next_sibling_wasm=function(){return(Module._ts_node_next_sibling_wasm=Module.asm.ts_node_next_sibling_wasm).apply(null,arguments)},Module._ts_node_prev_sibling_wasm=function(){return(Module._ts_node_prev_sibling_wasm=Module.asm.ts_node_prev_sibling_wasm).apply(null,arguments)},Module._ts_node_next_named_sibling_wasm=function(){return(Module._ts_node_next_named_sibling_wasm=Module.asm.ts_node_next_named_sibling_wasm).apply(null,arguments)},Module._ts_node_prev_named_sibling_wasm=function(){return(Module._ts_node_prev_named_sibling_wasm=Module.asm.ts_node_prev_named_sibling_wasm).apply(null,arguments)},Module._ts_node_parent_wasm=function(){return(Module._ts_node_parent_wasm=Module.asm.ts_node_parent_wasm).apply(null,arguments)},Module._ts_node_descendant_for_index_wasm=function(){return(Module._ts_node_descendant_for_index_wasm=Module.asm.ts_node_descendant_for_index_wasm).apply(null,arguments)},Module._ts_node_named_descendant_for_index_wasm=function(){return(Module._ts_node_named_descendant_for_index_wasm=Module.asm.ts_node_named_descendant_for_index_wasm).apply(null,arguments)},Module._ts_node_descendant_for_position_wasm=function(){return(Module._ts_node_descendant_for_position_wasm=Module.asm.ts_node_descendant_for_position_wasm).apply(null,arguments)},Module._ts_node_named_descendant_for_position_wasm=function(){return(Module._ts_node_named_descendant_for_position_wasm=Module.asm.ts_node_named_descendant_for_position_wasm).apply(null,arguments)},Module._ts_node_start_point_wasm=function(){return(Module._ts_node_start_point_wasm=Module.asm.ts_node_start_point_wasm).apply(null,arguments)},Module._ts_node_end_point_wasm=function(){return(Module._ts_node_end_point_wasm=Module.asm.ts_node_end_point_wasm).apply(null,arguments)},Module._ts_node_start_index_wasm=function(){return(Module._ts_node_start_index_wasm=Module.asm.ts_node_start_index_wasm).apply(null,arguments)},Module._ts_node_end_index_wasm=function(){return(Module._ts_node_end_index_wasm=Module.asm.ts_node_end_index_wasm).apply(null,arguments)},Module._ts_node_to_string_wasm=function(){return(Module._ts_node_to_string_wasm=Module.asm.ts_node_to_string_wasm).apply(null,arguments)},Module._ts_node_children_wasm=function(){return(Module._ts_node_children_wasm=Module.asm.ts_node_children_wasm).apply(null,arguments)},Module._ts_node_named_children_wasm=function(){return(Module._ts_node_named_children_wasm=Module.asm.ts_node_named_children_wasm).apply(null,arguments)},Module._ts_node_descendants_of_type_wasm=function(){return(Module._ts_node_descendants_of_type_wasm=Module.asm.ts_node_descendants_of_type_wasm).apply(null,arguments)},Module._ts_node_is_named_wasm=function(){return(Module._ts_node_is_named_wasm=Module.asm.ts_node_is_named_wasm).apply(null,arguments)},Module._ts_node_has_changes_wasm=function(){return(Module._ts_node_has_changes_wasm=Module.asm.ts_node_has_changes_wasm).apply(null,arguments)},Module._ts_node_has_error_wasm=function(){return(Module._ts_node_has_error_wasm=Module.asm.ts_node_has_error_wasm).apply(null,arguments)},Module._ts_node_is_missing_wasm=function(){return(Module._ts_node_is_missing_wasm=Module.asm.ts_node_is_missing_wasm).apply(null,arguments)},Module._ts_query_matches_wasm=function(){return(Module._ts_query_matches_wasm=Module.asm.ts_query_matches_wasm).apply(null,arguments)},Module._ts_query_captures_wasm=function(){return(Module._ts_query_captures_wasm=Module.asm.ts_query_captures_wasm).apply(null,arguments)},Module._iswdigit=function(){return(Module._iswdigit=Module.asm.iswdigit).apply(null,arguments)},Module._iswalpha=function(){return(Module._iswalpha=Module.asm.iswalpha).apply(null,arguments)},Module._iswlower=function(){return(Module._iswlower=Module.asm.iswlower).apply(null,arguments)},Module._towupper=function(){return(Module._towupper=Module.asm.towupper).apply(null,arguments)},Module._memchr=function(){return(Module._memchr=Module.asm.memchr).apply(null,arguments)},Module._strlen=function(){return(Module._strlen=Module.asm.strlen).apply(null,arguments)},Module._setThrew=function(){return(Re=Module._setThrew=Module.asm.setThrew).apply(null,arguments)}),Ce=(Module.__Znwm=function(){return(Module.__Znwm=Module.asm._Znwm).apply(null,arguments)},Module.__ZdlPv=function(){return(Module.__ZdlPv=Module.asm._ZdlPv).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc).apply(null,arguments)},Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=function(){return(Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.asm._ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=function(){return(Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev).apply(null,arguments)},Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=function(){return(Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_).apply(null,arguments)},Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv=function(){return(Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv=Module.asm._ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv).apply(null,arguments)},Module.stackSave=function(){return(Ce=Module.stackSave=Module.asm.stackSave).apply(null,arguments)}),qe=Module.stackAlloc=function(){return(qe=Module.stackAlloc=Module.asm.stackAlloc).apply(null,arguments)},Te=Module.stackRestore=function(){return(Te=Module.stackRestore=Module.asm.stackRestore).apply(null,arguments)},Fe=Module.___assign_got_enties=function(){return(Fe=Module.___assign_got_enties=Module.asm.__assign_got_enties).apply(null,arguments)},Le=(Module.dynCall_vi=function(){return(Module.dynCall_vi=Module.asm.dynCall_vi).apply(null,arguments)},{__cxa_new_handler:6112,__data_end:6960,__THREW__:6952,TRANSFER_BUFFER:1472,__threwValue:6956});for(var $e in Le)Module["_"+$e]=Se+Le[$e];for(var $e in Module.NAMED_GLOBALS=Le,Le)!function(e){var t=Module["_"+e];Module["g$_"+e]=function(){return t}}($e);function We(){var e=Ce();try{var t=Array.prototype.slice.call(arguments);return R.get(t[0]).apply(null,t.slice(1))}catch(t){if(Te(e),t!==t+0&&"longjmp"!==t)throw t;Re(1,0)}}function Ze(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}Module._fp$tree_sitter_log_callback$viii=function(){q(Module._tree_sitter_log_callback||!0,"external function `tree_sitter_log_callback` is missing.perhaps a side module was not linked in? if this symbol was expected to arrive from a system library, try to build the MAIN_MODULE with EMCC_FORCE_STDLIBS=XX in the environment");var e=Module.asm.tree_sitter_log_callback;e||(e=Module._tree_sitter_log_callback),e||(e=Module._tree_sitter_log_callback),e||(e=Ie);var t=I(e,"viii");return Module._fp$tree_sitter_log_callback$viii=function(){return t},t},Module.asm=xe,Module.allocate=function(e,t,r,n){var o,s;"number"==typeof e?(o=!0,s=e):(o=!1,s=e.length);var _,a="string"==typeof t?t:null;if(_=r==T?n:[Pe,qe,h][r](Math.max(s,a?1:t.length)),o){var u;for(n=_,q(0==(3&_)),u=_+(-4&s);n>2]=0;for(u=_+s;n>0]=0;return _}if("i8"===a)return e.subarray||e.slice?U.set(e,_):U.set(new Uint8Array(e),_),_;for(var i,l,d,c=0;c0||(!function(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)te(Module.preRun.shift());V(X)}(),_e>0||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),t()},1)):t()))}function Ue(e,t){t&&N&&0===e||(N||(C=!0,e,!0,Module.onExit&&Module.onExit(e)),s(e,new Ze(e)))}if(ue=function e(){Ae||Oe(),Ae||(ue=e)},Module.run=Oe,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var je=!0;Module.noInitialRun&&(je=!1),N=!0,Oe();const De=Module,Be={},He=4,ze=5*He,Ke=2*He,Ge=2*He+2*Ke,Ve={row:0,column:0},Xe=/[\w-.]*/g,Qe=1,Ye=2,Je=/^_?tree_sitter_\w+/;var et,tt,rt,nt,ot,st=new Promise(e=>{Module.onRuntimeInitialized=e}).then(()=>{rt=De._ts_init(),et=P(rt,"i32"),tt=P(rt+He,"i32")});class Parser{static init(){return st}constructor(){if(null==rt)throw new Error("You must first call Parser.init() and wait for it to resolve.");De._ts_parser_new_wasm(),this[0]=P(rt,"i32"),this[1]=P(rt+He,"i32")}delete(){De._ts_parser_delete(this[0]),De._free(this[1])}setLanguage(e){let t;if(e){if(e.constructor!==Language)throw new Error("Argument must be a Language");{t=e[0];const r=De._ts_language_version(t);if(re.slice(t,n));else{if("function"!=typeof e)throw new Error("Argument must be a string or a function");nt=e}this.logCallback?(ot=this.logCallback,De._ts_parser_enable_logger_wasm(this[0],1)):(ot=null,De._ts_parser_enable_logger_wasm(this[0],0));let n=0,o=0;if(r&&r.includedRanges){n=r.includedRanges.length;let e=o=De._calloc(n,Ge);for(let t=0;t0){let e=r;for(let r=0;r0){let r=t;for(let t=0;t0){let r=t;for(let t=0;t0){let e=a;for(let t=0;t<_;t++)u[t]=dt(this.tree,e),e+=ze}return De._free(a),De._free(s),u}get nextSibling(){return lt(this),De._ts_node_next_sibling_wasm(this.tree[0]),dt(this.tree)}get previousSibling(){return lt(this),De._ts_node_prev_sibling_wasm(this.tree[0]),dt(this.tree)}get nextNamedSibling(){return lt(this),De._ts_node_next_named_sibling_wasm(this.tree[0]),dt(this.tree)}get previousNamedSibling(){return lt(this),De._ts_node_prev_named_sibling_wasm(this.tree[0]),dt(this.tree)}get parent(){return lt(this),De._ts_node_parent_wasm(this.tree[0]),dt(this.tree)}descendantForIndex(e,t=e){if("number"!=typeof e||"number"!=typeof t)throw new Error("Arguments must be numbers");lt(this);let r=rt+ze;return k(r,e,"i32"),k(r+He,t,"i32"),De._ts_node_descendant_for_index_wasm(this.tree[0]),dt(this.tree)}namedDescendantForIndex(e,t=e){if("number"!=typeof e||"number"!=typeof t)throw new Error("Arguments must be numbers");lt(this);let r=rt+ze;return k(r,e,"i32"),k(r+He,t,"i32"),De._ts_node_named_descendant_for_index_wasm(this.tree[0]),dt(this.tree)}descendantForPosition(e,t=e){if(!it(e)||!it(t))throw new Error("Arguments must be {row, column} objects");lt(this);let r=rt+ze;return ft(r,e),ft(r+Ke,t),De._ts_node_descendant_for_position_wasm(this.tree[0]),dt(this.tree)}namedDescendantForPosition(e,t=e){if(!it(e)||!it(t))throw new Error("Arguments must be {row, column} objects");lt(this);let r=rt+ze;return ft(r,e),ft(r+Ke,t),De._ts_node_named_descendant_for_position_wasm(this.tree[0]),dt(this.tree)}walk(){return lt(this),De._ts_tree_cursor_new_wasm(this.tree[0]),new TreeCursor(Be,this.tree)}toString(){lt(this);const e=De._ts_node_to_string_wasm(this.tree[0]),t=function(e){for(var t="";;){var r=U[e++>>0];if(!r)return t;t+=String.fromCharCode(r)}}(e);return De._free(e),t}}class TreeCursor{constructor(e,t){ut(e),this.tree=t,mt(this)}delete(){ct(this),De._ts_tree_cursor_delete_wasm(this.tree[0])}reset(e){lt(e),ct(this,rt+ze),De._ts_tree_cursor_reset_wasm(this.tree[0]),mt(this)}get nodeType(){return this.tree.language.types[this.nodeTypeId]||"ERROR"}get nodeTypeId(){return ct(this),De._ts_tree_cursor_current_node_type_id_wasm(this.tree[0])}get nodeId(){return ct(this),De._ts_tree_cursor_current_node_id_wasm(this.tree[0])}get nodeIsNamed(){return ct(this),1===De._ts_tree_cursor_current_node_is_named_wasm(this.tree[0])}get nodeIsMissing(){return ct(this),1===De._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0])}get nodeText(){ct(this);const e=De._ts_tree_cursor_start_index_wasm(this.tree[0]),t=De._ts_tree_cursor_end_index_wasm(this.tree[0]);return _t(this.tree,e,t)}get startPosition(){return ct(this),De._ts_tree_cursor_start_position_wasm(this.tree[0]),pt(rt)}get endPosition(){return ct(this),De._ts_tree_cursor_end_position_wasm(this.tree[0]),pt(rt)}get startIndex(){return ct(this),De._ts_tree_cursor_start_index_wasm(this.tree[0])}get endIndex(){return ct(this),De._ts_tree_cursor_end_index_wasm(this.tree[0])}currentNode(){return ct(this),De._ts_tree_cursor_current_node_wasm(this.tree[0]),dt(this.tree)}currentFieldId(){return ct(this),De._ts_tree_cursor_current_field_id_wasm(this.tree[0])}currentFieldName(){return this.tree.language.fields[this.currentFieldId()]}gotoFirstChild(){ct(this);const e=De._ts_tree_cursor_goto_first_child_wasm(this.tree[0]);return mt(this),1===e}gotoNextSibling(){ct(this);const e=De._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]);return mt(this),1===e}gotoParent(){ct(this);const e=De._ts_tree_cursor_goto_parent_wasm(this.tree[0]);return mt(this),1===e}}class Language{constructor(e,t){ut(e),this[0]=t,this.types=new Array(De._ts_language_symbol_count(this[0]));for(let e=0,t=this.types.length;e=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&e.charCodeAt(++r)),n<=127?++t:t+=n<=2047?2:n<=65535?3:4}return t}(e),r=De._malloc(t+1);(function(e,t,r,n){if(!(n>0))return 0;for(var o=r,s=r+n-1,_=0;_=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&e.charCodeAt(++_)),a<=127){if(r>=s)break;t[r++]=a}else if(a<=2047){if(r+1>=s)break;t[r++]=192|a>>6,t[r++]=128|63&a}else if(a<=65535){if(r+2>=s)break;t[r++]=224|a>>12,t[r++]=128|a>>6&63,t[r++]=128|63&a}else{if(r+3>=s)break;t[r++]=240|a>>18,t[r++]=128|a>>12&63,t[r++]=128|a>>6&63,t[r++]=128|63&a}}t[r]=0})(e,U,r,t+1);const n=De._ts_query_new(this[0],r,t,rt,rt+He);if(!n){const t=P(rt+He,"i32"),n=W(r,P(rt,"i32")).length,o=e.substr(n,100),s=o.match(Xe)[0];let _;switch(t){case 2:_=new RangeError(`Bad node name '${s}'`);break;case 3:_=new RangeError(`Bad field name '${s}'`);break;case 4:_=new RangeError(`Bad capture name @${s}`);break;default:_=new SyntaxError(`Bad syntax at offset ${n}: '${o}'...`)}throw _.index=n,_.length=s.length,De._free(r),_}const o=De._ts_query_string_count(n),s=De._ts_query_capture_count(n),_=De._ts_query_pattern_count(n),a=new Array(s),u=new Array(o);for(let e=0;e0){if("string"!==o[0].type)throw new Error("Predicates must begin with a literal value");const t=o[0].value;let r=!0;switch(t){case"not-eq?":r=!1;case"eq?":if(3!==o.length)throw new Error(`Wrong number of arguments to \`eq?\` predicate. Expected 2, got ${o.length-1}`);if("capture"!==o[1].type)throw new Error(`First argument of \`eq?\` predicate must be a capture. Got "${o[1].value}"`);if("capture"===o[2].type){const t=o[1].name,n=o[2].name;c[e].push(function(e){let o,s;for(const r of e)r.name===t&&(o=r.node),r.name===n&&(s=r.node);return o.text===s.text===r})}else{const t=o[1].name,n=o[2].value;c[e].push(function(e){for(const o of e)if(o.name===t)return o.node.text===n===r;return!1})}break;case"match?":if(3!==o.length)throw new Error(`Wrong number of arguments to \`match?\` predicate. Expected 2, got ${o.length-1}.`);if("capture"!==o[1].type)throw new Error(`First argument of \`match?\` predicate must be a capture. Got "${o[1].value}".`);if("string"!==o[2].type)throw new Error(`Second argument of \`match?\` predicate must be a string. Got @${o[2].value}.`);const n=o[1].name,s=new RegExp(o[2].value);c[e].push(function(e){for(const t of e)if(t.name===n)return s.test(t.node.text);return!1});break;case"set!":if(o.length<2||o.length>3)throw new Error(`Wrong number of arguments to \`set!\` predicate. Expected 1 or 2. Got ${o.length-1}.`);if(o.some(e=>"string"!==e.type))throw new Error('Arguments to `set!` predicate must be a strings.".');i[e]||(i[e]={}),i[e][o[1].value]=o[2]?o[2].value:null;break;case"is?":case"is-not?":if(o.length<2||o.length>3)throw new Error(`Wrong number of arguments to \`${t}\` predicate. Expected 1 or 2. Got ${o.length-1}.`);if(o.some(e=>"string"!==e.type))throw new Error(`Arguments to \`${t}\` predicate must be a strings.".`);const _="is?"===t?l:d;_[e]||(_[e]={}),_[e][o[1].value]=o[2]?o[2].value:null;break;default:throw new Error(`Unknown query predicate \`${o[0].value}\``)}o.length=0}}Object.freeze(i[e]),Object.freeze(l[e]),Object.freeze(d[e])}return De._free(r),new Query(Be,n,a,c,Object.freeze(i),Object.freeze(l),Object.freeze(d))}static load(e){let t;if("undefined"!=typeof process&&process.versions&&process.versions.node){const r=require("fs");t=Promise.resolve(r.readFileSync(e))}else t=fetch(e).then(e=>e.arrayBuffer().then(t=>{if(e.ok)return new Uint8Array(t);{const r=new TextDecoder("utf-8").decode(t);throw new Error(`Language.load failed with status ${e.status}.\n\n${r}`)}}));return t.then(e=>E(e,{loadAsync:!0})).then(e=>{const t=e[Object.keys(e).find(e=>Je.test(e)&&!e.includes("external_scanner_"))]();return new Language(Be,t)})}}class Query{constructor(e,t,r,n,o,s,_){ut(e),this[0]=t,this.captureNames=r,this.predicates=n,this.setProperties=o,this.assertedProperties=s,this.refutedProperties=_}delete(){De._ts_query_delete(this[0])}matches(e,t,r){t||(t=Ve),r||(r=Ve),lt(e),De._ts_query_matches_wasm(this[0],e.tree[0],t.row,t.column,r.row,r.column);const n=P(rt,"i32"),o=P(rt+He,"i32"),s=new Array(n);let _=o;for(let t=0;te(o))){s[t]={pattern:r,captures:o};const e=this.setProperties[r];e&&(s[t].setProperties=e);const n=this.assertedProperties[r];n&&(s[t].assertedProperties=n);const _=this.refutedProperties[r];_&&(s[t].refutedProperties=_)}}return De._free(o),s}captures(e,t,r){t||(t=Ve),r||(r=Ve),lt(e),De._ts_query_captures_wasm(this[0],e.tree[0],t.row,t.column,r.row,r.column);const n=P(rt,"i32"),o=P(rt+He,"i32"),s=[],_=[];let a=o;for(let t=0;te(_))){const e=_[n],r=this.setProperties[t];r&&(e.setProperties=r);const o=this.assertedProperties[t];o&&(e.assertedProperties=o);const a=this.refutedProperties[t];a&&(e.refutedProperties=a),s.push(e)}}return De._free(o),s}}function _t(e,t,r){const n=r-t;let o=e.textCallback(t,null,r);for(t+=o.length;t0))break;t+=n.length,o+=n}return t>r&&(o=o.slice(0,n)),o}function at(e,t,r,n){for(let o=0,s=n.length;o5K#8?goAu)-O9)(% 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 literal 0 HcmV?d00001 diff --git a/common/modules/mixly-modules/workers/common/tree-sitter/web-tree-sitter.js b/common/modules/mixly-modules/workers/common/tree-sitter/web-tree-sitter.js new file mode 100644 index 00000000..69f28eff --- /dev/null +++ b/common/modules/mixly-modules/workers/common/tree-sitter/web-tree-sitter.js @@ -0,0 +1,4010 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); + +// src/edit.ts +var Edit = class { + static { + __name(this, "Edit"); + } + /** The start position of the change. */ + startPosition; + /** The end position of the change before the edit. */ + oldEndPosition; + /** The end position of the change after the edit. */ + newEndPosition; + /** The start index of the change. */ + startIndex; + /** The end index of the change before the edit. */ + oldEndIndex; + /** The end index of the change after the edit. */ + newEndIndex; + constructor({ + startIndex, + oldEndIndex, + newEndIndex, + startPosition, + oldEndPosition, + newEndPosition + }) { + this.startIndex = startIndex >>> 0; + this.oldEndIndex = oldEndIndex >>> 0; + this.newEndIndex = newEndIndex >>> 0; + this.startPosition = startPosition; + this.oldEndPosition = oldEndPosition; + this.newEndPosition = newEndPosition; + } + /** + * Edit a point and index to keep it in-sync with source code that has been edited. + * + * This function updates a single point's byte offset and row/column position + * based on an edit operation. This is useful for editing points without + * requiring a tree or node instance. + */ + editPoint(point, index) { + let newIndex = index; + const newPoint = { ...point }; + if (index >= this.oldEndIndex) { + newIndex = this.newEndIndex + (index - this.oldEndIndex); + const originalRow = point.row; + newPoint.row = this.newEndPosition.row + (point.row - this.oldEndPosition.row); + newPoint.column = originalRow === this.oldEndPosition.row ? this.newEndPosition.column + (point.column - this.oldEndPosition.column) : point.column; + } else if (index > this.startIndex) { + newIndex = this.newEndIndex; + newPoint.row = this.newEndPosition.row; + newPoint.column = this.newEndPosition.column; + } + return { point: newPoint, index: newIndex }; + } + /** + * Edit a range to keep it in-sync with source code that has been edited. + * + * This function updates a range's start and end positions based on an edit + * operation. This is useful for editing ranges without requiring a tree + * or node instance. + */ + editRange(range) { + const newRange = { + startIndex: range.startIndex, + startPosition: { ...range.startPosition }, + endIndex: range.endIndex, + endPosition: { ...range.endPosition } + }; + if (range.endIndex >= this.oldEndIndex) { + if (range.endIndex !== Number.MAX_SAFE_INTEGER) { + newRange.endIndex = this.newEndIndex + (range.endIndex - this.oldEndIndex); + newRange.endPosition = { + row: this.newEndPosition.row + (range.endPosition.row - this.oldEndPosition.row), + column: range.endPosition.row === this.oldEndPosition.row ? this.newEndPosition.column + (range.endPosition.column - this.oldEndPosition.column) : range.endPosition.column + }; + if (newRange.endIndex < this.newEndIndex) { + newRange.endIndex = Number.MAX_SAFE_INTEGER; + newRange.endPosition = { row: Number.MAX_SAFE_INTEGER, column: Number.MAX_SAFE_INTEGER }; + } + } + } else if (range.endIndex > this.startIndex) { + newRange.endIndex = this.startIndex; + newRange.endPosition = { ...this.startPosition }; + } + if (range.startIndex >= this.oldEndIndex) { + newRange.startIndex = this.newEndIndex + (range.startIndex - this.oldEndIndex); + newRange.startPosition = { + row: this.newEndPosition.row + (range.startPosition.row - this.oldEndPosition.row), + column: range.startPosition.row === this.oldEndPosition.row ? this.newEndPosition.column + (range.startPosition.column - this.oldEndPosition.column) : range.startPosition.column + }; + if (newRange.startIndex < this.newEndIndex) { + newRange.startIndex = Number.MAX_SAFE_INTEGER; + newRange.startPosition = { row: Number.MAX_SAFE_INTEGER, column: Number.MAX_SAFE_INTEGER }; + } + } else if (range.startIndex > this.startIndex) { + newRange.startIndex = this.startIndex; + newRange.startPosition = { ...this.startPosition }; + } + return newRange; + } +}; + +// src/constants.ts +var SIZE_OF_SHORT = 2; +var SIZE_OF_INT = 4; +var SIZE_OF_CURSOR = 4 * SIZE_OF_INT; +var SIZE_OF_NODE = 5 * SIZE_OF_INT; +var SIZE_OF_POINT = 2 * SIZE_OF_INT; +var SIZE_OF_RANGE = 2 * SIZE_OF_INT + 2 * SIZE_OF_POINT; +var ZERO_POINT = { row: 0, column: 0 }; +var INTERNAL = /* @__PURE__ */ Symbol("INTERNAL"); +function assertInternal(x) { + if (x !== INTERNAL) throw new Error("Illegal constructor"); +} +__name(assertInternal, "assertInternal"); +function isPoint(point) { + return !!point && typeof point.row === "number" && typeof point.column === "number"; +} +__name(isPoint, "isPoint"); +function setModule(module2) { + C = module2; +} +__name(setModule, "setModule"); +var C; + +// src/lookahead_iterator.ts +var LookaheadIterator = class { + static { + __name(this, "LookaheadIterator"); + } + /** @internal */ + [0] = 0; + // Internal handle for Wasm + /** @internal */ + language; + /** @internal */ + constructor(internal, address, language) { + assertInternal(internal); + this[0] = address; + this.language = language; + } + /** Get the current symbol of the lookahead iterator. */ + get currentTypeId() { + return C._ts_lookahead_iterator_current_symbol(this[0]); + } + /** Get the current symbol name of the lookahead iterator. */ + get currentType() { + return this.language.types[this.currentTypeId] || "ERROR"; + } + /** Delete the lookahead iterator, freeing its resources. */ + delete() { + C._ts_lookahead_iterator_delete(this[0]); + this[0] = 0; + } + /** + * Reset the lookahead iterator. + * + * This returns `true` if the language was set successfully and `false` + * otherwise. + */ + reset(language, stateId) { + if (C._ts_lookahead_iterator_reset(this[0], language[0], stateId)) { + this.language = language; + return true; + } + return false; + } + /** + * Reset the lookahead iterator to another state. + * + * This returns `true` if the iterator was reset to the given state and + * `false` otherwise. + */ + resetState(stateId) { + return Boolean(C._ts_lookahead_iterator_reset_state(this[0], stateId)); + } + /** + * Returns an iterator that iterates over the symbols of the lookahead iterator. + * + * The iterator will yield the current symbol name as a string for each step + * until there are no more symbols to iterate over. + */ + [Symbol.iterator]() { + return { + next: /* @__PURE__ */ __name(() => { + if (C._ts_lookahead_iterator_next(this[0])) { + return { done: false, value: this.currentType }; + } + return { done: true, value: "" }; + }, "next") + }; + } +}; + +// src/tree.ts +function getText(tree, startIndex, endIndex, startPosition) { + const length = endIndex - startIndex; + let result = tree.textCallback(startIndex, startPosition); + if (result) { + startIndex += result.length; + while (startIndex < endIndex) { + const string = tree.textCallback(startIndex, startPosition); + if (string && string.length > 0) { + startIndex += string.length; + result += string; + } else { + break; + } + } + if (startIndex > endIndex) { + result = result.slice(0, length); + } + } + return result ?? ""; +} +__name(getText, "getText"); +var Tree = class _Tree { + static { + __name(this, "Tree"); + } + /** @internal */ + [0] = 0; + // Internal handle for Wasm + /** @internal */ + textCallback; + /** The language that was used to parse the syntax tree. */ + language; + /** @internal */ + constructor(internal, address, language, textCallback) { + assertInternal(internal); + this[0] = address; + this.language = language; + this.textCallback = textCallback; + } + /** Create a shallow copy of the syntax tree. This is very fast. */ + copy() { + const address = C._ts_tree_copy(this[0]); + return new _Tree(INTERNAL, address, this.language, this.textCallback); + } + /** Delete the syntax tree, freeing its resources. */ + delete() { + C._ts_tree_delete(this[0]); + this[0] = 0; + } + /** Get the root node of the syntax tree. */ + get rootNode() { + C._ts_tree_root_node_wasm(this[0]); + return unmarshalNode(this); + } + /** + * Get the root node of the syntax tree, but with its position shifted + * forward by the given offset. + */ + rootNodeWithOffset(offsetBytes, offsetExtent) { + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + C.setValue(address, offsetBytes, "i32"); + marshalPoint(address + SIZE_OF_INT, offsetExtent); + C._ts_tree_root_node_with_offset_wasm(this[0]); + return unmarshalNode(this); + } + /** + * Edit the syntax tree to keep it in sync with source code that has been + * edited. + * + * You must describe the edit both in terms of byte offsets and in terms of + * row/column coordinates. + */ + edit(edit) { + marshalEdit(edit); + C._ts_tree_edit_wasm(this[0]); + } + /** Create a new {@link TreeCursor} starting from the root of the tree. */ + walk() { + return this.rootNode.walk(); + } + /** + * Compare this old edited syntax tree to a new syntax tree representing + * the same document, returning a sequence of ranges whose syntactic + * structure has changed. + * + * For this to work correctly, this syntax tree must have been edited such + * that its ranges match up to the new tree. Generally, you'll want to + * call this method right after calling one of the [`Parser::parse`] + * functions. Call it on the old tree that was passed to parse, and + * pass the new tree that was returned from `parse`. + */ + getChangedRanges(other) { + if (!(other instanceof _Tree)) { + throw new TypeError("Argument must be a Tree"); + } + C._ts_tree_get_changed_ranges_wasm(this[0], other[0]); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i2 = 0; i2 < count; i2++) { + result[i2] = unmarshalRange(address); + address += SIZE_OF_RANGE; + } + C._free(buffer); + } + return result; + } + /** Get the included ranges that were used to parse the syntax tree. */ + getIncludedRanges() { + C._ts_tree_included_ranges_wasm(this[0]); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i2 = 0; i2 < count; i2++) { + result[i2] = unmarshalRange(address); + address += SIZE_OF_RANGE; + } + C._free(buffer); + } + return result; + } +}; + +// src/tree_cursor.ts +var TreeCursor = class _TreeCursor { + static { + __name(this, "TreeCursor"); + } + /** @internal */ + // @ts-expect-error: never read + [0] = 0; + // Internal handle for Wasm + /** @internal */ + // @ts-expect-error: never read + [1] = 0; + // Internal handle for Wasm + /** @internal */ + // @ts-expect-error: never read + [2] = 0; + // Internal handle for Wasm + /** @internal */ + // @ts-expect-error: never read + [3] = 0; + // Internal handle for Wasm + /** @internal */ + tree; + /** @internal */ + constructor(internal, tree) { + assertInternal(internal); + this.tree = tree; + unmarshalTreeCursor(this); + } + /** Creates a deep copy of the tree cursor. This allocates new memory. */ + copy() { + const copy = new _TreeCursor(INTERNAL, this.tree); + C._ts_tree_cursor_copy_wasm(this.tree[0]); + unmarshalTreeCursor(copy); + return copy; + } + /** Delete the tree cursor, freeing its resources. */ + delete() { + marshalTreeCursor(this); + C._ts_tree_cursor_delete_wasm(this.tree[0]); + this[0] = this[1] = this[2] = 0; + } + /** Get the tree cursor's current {@link Node}. */ + get currentNode() { + marshalTreeCursor(this); + C._ts_tree_cursor_current_node_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** + * Get the numerical field id of this tree cursor's current node. + * + * See also {@link TreeCursor#currentFieldName}. + */ + get currentFieldId() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_field_id_wasm(this.tree[0]); + } + /** Get the field name of this tree cursor's current node. */ + get currentFieldName() { + return this.tree.language.fields[this.currentFieldId]; + } + /** + * Get the depth of the cursor's current node relative to the original + * node that the cursor was constructed with. + */ + get currentDepth() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_depth_wasm(this.tree[0]); + } + /** + * Get the index of the cursor's current node out of all of the + * descendants of the original node that the cursor was constructed with. + */ + get currentDescendantIndex() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_descendant_index_wasm(this.tree[0]); + } + /** Get the type of the cursor's current node. */ + get nodeType() { + return this.tree.language.types[this.nodeTypeId] || "ERROR"; + } + /** Get the type id of the cursor's current node. */ + get nodeTypeId() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_type_id_wasm(this.tree[0]); + } + /** Get the state id of the cursor's current node. */ + get nodeStateId() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_state_id_wasm(this.tree[0]); + } + /** Get the id of the cursor's current node. */ + get nodeId() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_id_wasm(this.tree[0]); + } + /** + * Check if the cursor's current node is *named*. + * + * Named nodes correspond to named rules in the grammar, whereas + * *anonymous* nodes correspond to string literals in the grammar. + */ + get nodeIsNamed() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_is_named_wasm(this.tree[0]) === 1; + } + /** + * Check if the cursor's current node is *missing*. + * + * Missing nodes are inserted by the parser in order to recover from + * certain kinds of syntax errors. + */ + get nodeIsMissing() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0]) === 1; + } + /** Get the string content of the cursor's current node. */ + get nodeText() { + marshalTreeCursor(this); + const startIndex = C._ts_tree_cursor_start_index_wasm(this.tree[0]); + const endIndex = C._ts_tree_cursor_end_index_wasm(this.tree[0]); + C._ts_tree_cursor_start_position_wasm(this.tree[0]); + const startPosition = unmarshalPoint(TRANSFER_BUFFER); + return getText(this.tree, startIndex, endIndex, startPosition); + } + /** Get the start position of the cursor's current node. */ + get startPosition() { + marshalTreeCursor(this); + C._ts_tree_cursor_start_position_wasm(this.tree[0]); + return unmarshalPoint(TRANSFER_BUFFER); + } + /** Get the end position of the cursor's current node. */ + get endPosition() { + marshalTreeCursor(this); + C._ts_tree_cursor_end_position_wasm(this.tree[0]); + return unmarshalPoint(TRANSFER_BUFFER); + } + /** Get the start index of the cursor's current node. */ + get startIndex() { + marshalTreeCursor(this); + return C._ts_tree_cursor_start_index_wasm(this.tree[0]); + } + /** Get the end index of the cursor's current node. */ + get endIndex() { + marshalTreeCursor(this); + return C._ts_tree_cursor_end_index_wasm(this.tree[0]); + } + /** + * Move this cursor to the first child of its current node. + * + * This returns `true` if the cursor successfully moved, and returns + * `false` if there were no children. + */ + gotoFirstChild() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_first_child_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + /** + * Move this cursor to the last child of its current node. + * + * This returns `true` if the cursor successfully moved, and returns + * `false` if there were no children. + * + * Note that this function may be slower than + * {@link TreeCursor#gotoFirstChild} because it needs to + * iterate through all the children to compute the child's position. + */ + gotoLastChild() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_last_child_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + /** + * Move this cursor to the parent of its current node. + * + * This returns `true` if the cursor successfully moved, and returns + * `false` if there was no parent node (the cursor was already on the + * root node). + * + * Note that the node the cursor was constructed with is considered the root + * of the cursor, and the cursor cannot walk outside this node. + */ + gotoParent() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_parent_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + /** + * Move this cursor to the next sibling of its current node. + * + * This returns `true` if the cursor successfully moved, and returns + * `false` if there was no next sibling node. + * + * Note that the node the cursor was constructed with is considered the root + * of the cursor, and the cursor cannot walk outside this node. + */ + gotoNextSibling() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + /** + * Move this cursor to the previous sibling of its current node. + * + * This returns `true` if the cursor successfully moved, and returns + * `false` if there was no previous sibling node. + * + * Note that this function may be slower than + * {@link TreeCursor#gotoNextSibling} due to how node + * positions are stored. In the worst case, this will need to iterate + * through all the children up to the previous sibling node to recalculate + * its position. Also note that the node the cursor was constructed with is + * considered the root of the cursor, and the cursor cannot walk outside this node. + */ + gotoPreviousSibling() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_previous_sibling_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + /** + * Move the cursor to the node that is the nth descendant of + * the original node that the cursor was constructed with, where + * zero represents the original node itself. + */ + gotoDescendant(goalDescendantIndex) { + marshalTreeCursor(this); + C._ts_tree_cursor_goto_descendant_wasm(this.tree[0], goalDescendantIndex); + unmarshalTreeCursor(this); + } + /** + * Move this cursor to the first child of its current node that contains or + * starts after the given byte offset. + * + * This returns `true` if the cursor successfully moved to a child node, and returns + * `false` if no such child was found. + */ + gotoFirstChildForIndex(goalIndex) { + marshalTreeCursor(this); + C.setValue(TRANSFER_BUFFER + SIZE_OF_CURSOR, goalIndex, "i32"); + const result = C._ts_tree_cursor_goto_first_child_for_index_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + /** + * Move this cursor to the first child of its current node that contains or + * starts after the given byte offset. + * + * This returns the index of the child node if one was found, and returns + * `null` if no such child was found. + */ + gotoFirstChildForPosition(goalPosition) { + marshalTreeCursor(this); + marshalPoint(TRANSFER_BUFFER + SIZE_OF_CURSOR, goalPosition); + const result = C._ts_tree_cursor_goto_first_child_for_position_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + /** + * Re-initialize this tree cursor to start at the original node that the + * cursor was constructed with. + */ + reset(node) { + marshalNode(node); + marshalTreeCursor(this, TRANSFER_BUFFER + SIZE_OF_NODE); + C._ts_tree_cursor_reset_wasm(this.tree[0]); + unmarshalTreeCursor(this); + } + /** + * Re-initialize a tree cursor to the same position as another cursor. + * + * Unlike {@link TreeCursor#reset}, this will not lose parent + * information and allows reusing already created cursors. + */ + resetTo(cursor) { + marshalTreeCursor(this, TRANSFER_BUFFER); + marshalTreeCursor(cursor, TRANSFER_BUFFER + SIZE_OF_CURSOR); + C._ts_tree_cursor_reset_to_wasm(this.tree[0], cursor.tree[0]); + unmarshalTreeCursor(this); + } +}; + +// src/node.ts +var Node = class { + static { + __name(this, "Node"); + } + /** @internal */ + // @ts-expect-error: never read + [0] = 0; + // Internal handle for Wasm + /** @internal */ + _children; + /** @internal */ + _namedChildren; + /** @internal */ + constructor(internal, { + id, + tree, + startIndex, + startPosition, + other + }) { + assertInternal(internal); + this[0] = other; + this.id = id; + this.tree = tree; + this.startIndex = startIndex; + this.startPosition = startPosition; + } + /** + * The numeric id for this node that is unique. + * + * Within a given syntax tree, no two nodes have the same id. However: + * + * * If a new tree is created based on an older tree, and a node from the old tree is reused in + * the process, then that node will have the same id in both trees. + * + * * A node not marked as having changes does not guarantee it was reused. + * + * * If a node is marked as having changed in the old tree, it will not be reused. + */ + id; + /** The byte index where this node starts. */ + startIndex; + /** The position where this node starts. */ + startPosition; + /** The tree that this node belongs to. */ + tree; + /** Get this node's type as a numerical id. */ + get typeId() { + marshalNode(this); + return C._ts_node_symbol_wasm(this.tree[0]); + } + /** + * Get the node's type as a numerical id as it appears in the grammar, + * ignoring aliases. + */ + get grammarId() { + marshalNode(this); + return C._ts_node_grammar_symbol_wasm(this.tree[0]); + } + /** Get this node's type as a string. */ + get type() { + return this.tree.language.types[this.typeId] || "ERROR"; + } + /** + * Get this node's symbol name as it appears in the grammar, ignoring + * aliases as a string. + */ + get grammarType() { + return this.tree.language.types[this.grammarId] || "ERROR"; + } + /** + * Check if this node is *named*. + * + * Named nodes correspond to named rules in the grammar, whereas + * *anonymous* nodes correspond to string literals in the grammar. + */ + get isNamed() { + marshalNode(this); + return C._ts_node_is_named_wasm(this.tree[0]) === 1; + } + /** + * Check if this node is *extra*. + * + * Extra nodes represent things like comments, which are not required + * by the grammar, but can appear anywhere. + */ + get isExtra() { + marshalNode(this); + return C._ts_node_is_extra_wasm(this.tree[0]) === 1; + } + /** + * Check if this node represents a syntax error. + * + * Syntax errors represent parts of the code that could not be incorporated + * into a valid syntax tree. + */ + get isError() { + marshalNode(this); + return C._ts_node_is_error_wasm(this.tree[0]) === 1; + } + /** + * Check if this node is *missing*. + * + * Missing nodes are inserted by the parser in order to recover from + * certain kinds of syntax errors. + */ + get isMissing() { + marshalNode(this); + return C._ts_node_is_missing_wasm(this.tree[0]) === 1; + } + /** Check if this node has been edited. */ + get hasChanges() { + marshalNode(this); + return C._ts_node_has_changes_wasm(this.tree[0]) === 1; + } + /** + * Check if this node represents a syntax error or contains any syntax + * errors anywhere within it. + */ + get hasError() { + marshalNode(this); + return C._ts_node_has_error_wasm(this.tree[0]) === 1; + } + /** Get the byte index where this node ends. */ + get endIndex() { + marshalNode(this); + return C._ts_node_end_index_wasm(this.tree[0]); + } + /** Get the position where this node ends. */ + get endPosition() { + marshalNode(this); + C._ts_node_end_point_wasm(this.tree[0]); + return unmarshalPoint(TRANSFER_BUFFER); + } + /** Get the string content of this node. */ + get text() { + return getText(this.tree, this.startIndex, this.endIndex, this.startPosition); + } + /** Get this node's parse state. */ + get parseState() { + marshalNode(this); + return C._ts_node_parse_state_wasm(this.tree[0]); + } + /** Get the parse state after this node. */ + get nextParseState() { + marshalNode(this); + return C._ts_node_next_parse_state_wasm(this.tree[0]); + } + /** Check if this node is equal to another node. */ + equals(other) { + return this.tree === other.tree && this.id === other.id; + } + /** + * Get the node's child at the given index, where zero represents the first child. + * + * This method is fairly fast, but its cost is technically log(n), so if + * you might be iterating over a long list of children, you should use + * {@link Node#children} instead. + */ + child(index) { + marshalNode(this); + C._ts_node_child_wasm(this.tree[0], index); + return unmarshalNode(this.tree); + } + /** + * Get this node's *named* child at the given index. + * + * See also {@link Node#isNamed}. + * This method is fairly fast, but its cost is technically log(n), so if + * you might be iterating over a long list of children, you should use + * {@link Node#namedChildren} instead. + */ + namedChild(index) { + marshalNode(this); + C._ts_node_named_child_wasm(this.tree[0], index); + return unmarshalNode(this.tree); + } + /** + * Get this node's child with the given numerical field id. + * + * See also {@link Node#childForFieldName}. You can + * convert a field name to an id using {@link Language#fieldIdForName}. + */ + childForFieldId(fieldId) { + marshalNode(this); + C._ts_node_child_by_field_id_wasm(this.tree[0], fieldId); + return unmarshalNode(this.tree); + } + /** + * Get the first child with the given field name. + * + * If multiple children may have the same field name, access them using + * {@link Node#childrenForFieldName}. + */ + childForFieldName(fieldName) { + const fieldId = this.tree.language.fields.indexOf(fieldName); + if (fieldId !== -1) return this.childForFieldId(fieldId); + return null; + } + /** Get the field name of this node's child at the given index. */ + fieldNameForChild(index) { + marshalNode(this); + const address = C._ts_node_field_name_for_child_wasm(this.tree[0], index); + if (!address) return null; + return C.AsciiToString(address); + } + /** Get the field name of this node's named child at the given index. */ + fieldNameForNamedChild(index) { + marshalNode(this); + const address = C._ts_node_field_name_for_named_child_wasm(this.tree[0], index); + if (!address) return null; + return C.AsciiToString(address); + } + /** + * Get an array of this node's children with a given field name. + * + * See also {@link Node#children}. + */ + childrenForFieldName(fieldName) { + const fieldId = this.tree.language.fields.indexOf(fieldName); + if (fieldId !== -1 && fieldId !== 0) return this.childrenForFieldId(fieldId); + return []; + } + /** + * Get an array of this node's children with a given field id. + * + * See also {@link Node#childrenForFieldName}. + */ + childrenForFieldId(fieldId) { + marshalNode(this); + C._ts_node_children_by_field_id_wasm(this.tree[0], fieldId); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i2 = 0; i2 < count; i2++) { + result[i2] = unmarshalNode(this.tree, address); + address += SIZE_OF_NODE; + } + C._free(buffer); + } + return result; + } + /** Get the node's first child that contains or starts after the given byte offset. */ + firstChildForIndex(index) { + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + C.setValue(address, index, "i32"); + C._ts_node_first_child_for_byte_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** Get the node's first named child that contains or starts after the given byte offset. */ + firstNamedChildForIndex(index) { + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + C.setValue(address, index, "i32"); + C._ts_node_first_named_child_for_byte_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** Get this node's number of children. */ + get childCount() { + marshalNode(this); + return C._ts_node_child_count_wasm(this.tree[0]); + } + /** + * Get this node's number of *named* children. + * + * See also {@link Node#isNamed}. + */ + get namedChildCount() { + marshalNode(this); + return C._ts_node_named_child_count_wasm(this.tree[0]); + } + /** Get this node's first child. */ + get firstChild() { + return this.child(0); + } + /** + * Get this node's first named child. + * + * See also {@link Node#isNamed}. + */ + get firstNamedChild() { + return this.namedChild(0); + } + /** Get this node's last child. */ + get lastChild() { + return this.child(this.childCount - 1); + } + /** + * Get this node's last named child. + * + * See also {@link Node#isNamed}. + */ + get lastNamedChild() { + return this.namedChild(this.namedChildCount - 1); + } + /** + * Iterate over this node's children. + * + * If you're walking the tree recursively, you may want to use the + * {@link TreeCursor} APIs directly instead. + */ + get children() { + if (!this._children) { + marshalNode(this); + C._ts_node_children_wasm(this.tree[0]); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + this._children = new Array(count); + if (count > 0) { + let address = buffer; + for (let i2 = 0; i2 < count; i2++) { + this._children[i2] = unmarshalNode(this.tree, address); + address += SIZE_OF_NODE; + } + C._free(buffer); + } + } + return this._children; + } + /** + * Iterate over this node's named children. + * + * See also {@link Node#children}. + */ + get namedChildren() { + if (!this._namedChildren) { + marshalNode(this); + C._ts_node_named_children_wasm(this.tree[0]); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + this._namedChildren = new Array(count); + if (count > 0) { + let address = buffer; + for (let i2 = 0; i2 < count; i2++) { + this._namedChildren[i2] = unmarshalNode(this.tree, address); + address += SIZE_OF_NODE; + } + C._free(buffer); + } + } + return this._namedChildren; + } + /** + * Get the descendants of this node that are the given type, or in the given types array. + * + * The types array should contain node type strings, which can be retrieved from {@link Language#types}. + * + * Additionally, a `startPosition` and `endPosition` can be passed in to restrict the search to a byte range. + */ + descendantsOfType(types, startPosition = ZERO_POINT, endPosition = ZERO_POINT) { + if (!Array.isArray(types)) types = [types]; + const symbols = []; + const typesBySymbol = this.tree.language.types; + for (const node_type of types) { + if (node_type == "ERROR") { + symbols.push(65535); + } + } + for (let i2 = 0, n = typesBySymbol.length; i2 < n; i2++) { + if (types.includes(typesBySymbol[i2])) { + symbols.push(i2); + } + } + const symbolsAddress = C._malloc(SIZE_OF_INT * symbols.length); + for (let i2 = 0, n = symbols.length; i2 < n; i2++) { + C.setValue(symbolsAddress + i2 * SIZE_OF_INT, symbols[i2], "i32"); + } + marshalNode(this); + C._ts_node_descendants_of_type_wasm( + this.tree[0], + symbolsAddress, + symbols.length, + startPosition.row, + startPosition.column, + endPosition.row, + endPosition.column + ); + const descendantCount = C.getValue(TRANSFER_BUFFER, "i32"); + const descendantAddress = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(descendantCount); + if (descendantCount > 0) { + let address = descendantAddress; + for (let i2 = 0; i2 < descendantCount; i2++) { + result[i2] = unmarshalNode(this.tree, address); + address += SIZE_OF_NODE; + } + } + C._free(descendantAddress); + C._free(symbolsAddress); + return result; + } + /** Get this node's next sibling. */ + get nextSibling() { + marshalNode(this); + C._ts_node_next_sibling_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** Get this node's previous sibling. */ + get previousSibling() { + marshalNode(this); + C._ts_node_prev_sibling_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** + * Get this node's next *named* sibling. + * + * See also {@link Node#isNamed}. + */ + get nextNamedSibling() { + marshalNode(this); + C._ts_node_next_named_sibling_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** + * Get this node's previous *named* sibling. + * + * See also {@link Node#isNamed}. + */ + get previousNamedSibling() { + marshalNode(this); + C._ts_node_prev_named_sibling_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** Get the node's number of descendants, including one for the node itself. */ + get descendantCount() { + marshalNode(this); + return C._ts_node_descendant_count_wasm(this.tree[0]); + } + /** + * Get this node's immediate parent. + * Prefer {@link Node#childWithDescendant} for iterating over this node's ancestors. + */ + get parent() { + marshalNode(this); + C._ts_node_parent_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** + * Get the node that contains `descendant`. + * + * Note that this can return `descendant` itself. + */ + childWithDescendant(descendant) { + marshalNode(this); + marshalNode(descendant, 1); + C._ts_node_child_with_descendant_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** Get the smallest node within this node that spans the given byte range. */ + descendantForIndex(start2, end = start2) { + if (typeof start2 !== "number" || typeof end !== "number") { + throw new Error("Arguments must be numbers"); + } + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + C.setValue(address, start2, "i32"); + C.setValue(address + SIZE_OF_INT, end, "i32"); + C._ts_node_descendant_for_index_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** Get the smallest named node within this node that spans the given byte range. */ + namedDescendantForIndex(start2, end = start2) { + if (typeof start2 !== "number" || typeof end !== "number") { + throw new Error("Arguments must be numbers"); + } + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + C.setValue(address, start2, "i32"); + C.setValue(address + SIZE_OF_INT, end, "i32"); + C._ts_node_named_descendant_for_index_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** Get the smallest node within this node that spans the given point range. */ + descendantForPosition(start2, end = start2) { + if (!isPoint(start2) || !isPoint(end)) { + throw new Error("Arguments must be {row, column} objects"); + } + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + marshalPoint(address, start2); + marshalPoint(address + SIZE_OF_POINT, end); + C._ts_node_descendant_for_position_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** Get the smallest named node within this node that spans the given point range. */ + namedDescendantForPosition(start2, end = start2) { + if (!isPoint(start2) || !isPoint(end)) { + throw new Error("Arguments must be {row, column} objects"); + } + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + marshalPoint(address, start2); + marshalPoint(address + SIZE_OF_POINT, end); + C._ts_node_named_descendant_for_position_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + /** + * Create a new {@link TreeCursor} starting from this node. + * + * Note that the given node is considered the root of the cursor, + * and the cursor cannot walk outside this node. + */ + walk() { + marshalNode(this); + C._ts_tree_cursor_new_wasm(this.tree[0]); + return new TreeCursor(INTERNAL, this.tree); + } + /** + * Edit this node to keep it in-sync with source code that has been edited. + * + * This function is only rarely needed. When you edit a syntax tree with + * the {@link Tree#edit} method, all of the nodes that you retrieve from + * the tree afterward will already reflect the edit. You only need to + * use {@link Node#edit} when you have a specific {@link Node} instance that + * you want to keep and continue to use after an edit. + */ + edit(edit) { + if (this.startIndex >= edit.oldEndIndex) { + this.startIndex = edit.newEndIndex + (this.startIndex - edit.oldEndIndex); + let subbedPointRow; + let subbedPointColumn; + if (this.startPosition.row > edit.oldEndPosition.row) { + subbedPointRow = this.startPosition.row - edit.oldEndPosition.row; + subbedPointColumn = this.startPosition.column; + } else { + subbedPointRow = 0; + subbedPointColumn = this.startPosition.column; + if (this.startPosition.column >= edit.oldEndPosition.column) { + subbedPointColumn = this.startPosition.column - edit.oldEndPosition.column; + } + } + if (subbedPointRow > 0) { + this.startPosition.row += subbedPointRow; + this.startPosition.column = subbedPointColumn; + } else { + this.startPosition.column += subbedPointColumn; + } + } else if (this.startIndex > edit.startIndex) { + this.startIndex = edit.newEndIndex; + this.startPosition.row = edit.newEndPosition.row; + this.startPosition.column = edit.newEndPosition.column; + } + } + /** Get the S-expression representation of this node. */ + toString() { + marshalNode(this); + const address = C._ts_node_to_string_wasm(this.tree[0]); + const result = C.AsciiToString(address); + C._free(address); + return result; + } +}; + +// src/marshal.ts +function unmarshalCaptures(query, tree, address, patternIndex, result) { + for (let i2 = 0, n = result.length; i2 < n; i2++) { + const captureIndex = C.getValue(address, "i32"); + address += SIZE_OF_INT; + const node = unmarshalNode(tree, address); + address += SIZE_OF_NODE; + result[i2] = { patternIndex, name: query.captureNames[captureIndex], node }; + } + return address; +} +__name(unmarshalCaptures, "unmarshalCaptures"); +function marshalNode(node, index = 0) { + let address = TRANSFER_BUFFER + index * SIZE_OF_NODE; + C.setValue(address, node.id, "i32"); + address += SIZE_OF_INT; + C.setValue(address, node.startIndex, "i32"); + address += SIZE_OF_INT; + C.setValue(address, node.startPosition.row, "i32"); + address += SIZE_OF_INT; + C.setValue(address, node.startPosition.column, "i32"); + address += SIZE_OF_INT; + C.setValue(address, node[0], "i32"); +} +__name(marshalNode, "marshalNode"); +function unmarshalNode(tree, address = TRANSFER_BUFFER) { + const id = C.getValue(address, "i32"); + address += SIZE_OF_INT; + if (id === 0) return null; + const index = C.getValue(address, "i32"); + address += SIZE_OF_INT; + const row = C.getValue(address, "i32"); + address += SIZE_OF_INT; + const column = C.getValue(address, "i32"); + address += SIZE_OF_INT; + const other = C.getValue(address, "i32"); + const result = new Node(INTERNAL, { + id, + tree, + startIndex: index, + startPosition: { row, column }, + other + }); + return result; +} +__name(unmarshalNode, "unmarshalNode"); +function marshalTreeCursor(cursor, address = TRANSFER_BUFFER) { + C.setValue(address + 0 * SIZE_OF_INT, cursor[0], "i32"); + C.setValue(address + 1 * SIZE_OF_INT, cursor[1], "i32"); + C.setValue(address + 2 * SIZE_OF_INT, cursor[2], "i32"); + C.setValue(address + 3 * SIZE_OF_INT, cursor[3], "i32"); +} +__name(marshalTreeCursor, "marshalTreeCursor"); +function unmarshalTreeCursor(cursor) { + cursor[0] = C.getValue(TRANSFER_BUFFER + 0 * SIZE_OF_INT, "i32"); + cursor[1] = C.getValue(TRANSFER_BUFFER + 1 * SIZE_OF_INT, "i32"); + cursor[2] = C.getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"); + cursor[3] = C.getValue(TRANSFER_BUFFER + 3 * SIZE_OF_INT, "i32"); +} +__name(unmarshalTreeCursor, "unmarshalTreeCursor"); +function marshalPoint(address, point) { + C.setValue(address, point.row, "i32"); + C.setValue(address + SIZE_OF_INT, point.column, "i32"); +} +__name(marshalPoint, "marshalPoint"); +function unmarshalPoint(address) { + const result = { + row: C.getValue(address, "i32") >>> 0, + column: C.getValue(address + SIZE_OF_INT, "i32") >>> 0 + }; + return result; +} +__name(unmarshalPoint, "unmarshalPoint"); +function marshalRange(address, range) { + marshalPoint(address, range.startPosition); + address += SIZE_OF_POINT; + marshalPoint(address, range.endPosition); + address += SIZE_OF_POINT; + C.setValue(address, range.startIndex, "i32"); + address += SIZE_OF_INT; + C.setValue(address, range.endIndex, "i32"); + address += SIZE_OF_INT; +} +__name(marshalRange, "marshalRange"); +function unmarshalRange(address) { + const result = {}; + result.startPosition = unmarshalPoint(address); + address += SIZE_OF_POINT; + result.endPosition = unmarshalPoint(address); + address += SIZE_OF_POINT; + result.startIndex = C.getValue(address, "i32") >>> 0; + address += SIZE_OF_INT; + result.endIndex = C.getValue(address, "i32") >>> 0; + return result; +} +__name(unmarshalRange, "unmarshalRange"); +function marshalEdit(edit, address = TRANSFER_BUFFER) { + marshalPoint(address, edit.startPosition); + address += SIZE_OF_POINT; + marshalPoint(address, edit.oldEndPosition); + address += SIZE_OF_POINT; + marshalPoint(address, edit.newEndPosition); + address += SIZE_OF_POINT; + C.setValue(address, edit.startIndex, "i32"); + address += SIZE_OF_INT; + C.setValue(address, edit.oldEndIndex, "i32"); + address += SIZE_OF_INT; + C.setValue(address, edit.newEndIndex, "i32"); + address += SIZE_OF_INT; +} +__name(marshalEdit, "marshalEdit"); +function unmarshalLanguageMetadata(address) { + const major_version = C.getValue(address, "i32"); + const minor_version = C.getValue(address += SIZE_OF_INT, "i32"); + const patch_version = C.getValue(address += SIZE_OF_INT, "i32"); + return { major_version, minor_version, patch_version }; +} +__name(unmarshalLanguageMetadata, "unmarshalLanguageMetadata"); + +// src/language.ts +var LANGUAGE_FUNCTION_REGEX = /^tree_sitter_\w+$/; +var Language = class _Language { + static { + __name(this, "Language"); + } + /** @internal */ + [0] = 0; + // Internal handle for Wasm + /** + * A list of all node types in the language. The index of each type in this + * array is its node type id. + */ + types; + /** + * A list of all field names in the language. The index of each field name in + * this array is its field id. + */ + fields; + /** @internal */ + constructor(internal, address) { + assertInternal(internal); + this[0] = address; + this.types = new Array(C._ts_language_symbol_count(this[0])); + for (let i2 = 0, n = this.types.length; i2 < n; i2++) { + if (C._ts_language_symbol_type(this[0], i2) < 2) { + this.types[i2] = C.UTF8ToString(C._ts_language_symbol_name(this[0], i2)); + } + } + this.fields = new Array(C._ts_language_field_count(this[0]) + 1); + for (let i2 = 0, n = this.fields.length; i2 < n; i2++) { + const fieldName = C._ts_language_field_name_for_id(this[0], i2); + if (fieldName !== 0) { + this.fields[i2] = C.UTF8ToString(fieldName); + } else { + this.fields[i2] = null; + } + } + } + /** + * Gets the name of the language. + */ + get name() { + const ptr = C._ts_language_name(this[0]); + if (ptr === 0) return null; + return C.UTF8ToString(ptr); + } + /** + * Gets the ABI version of the language. + */ + get abiVersion() { + return C._ts_language_abi_version(this[0]); + } + /** + * Get the metadata for this language. This information is generated by the + * CLI, and relies on the language author providing the correct metadata in + * the language's `tree-sitter.json` file. + */ + get metadata() { + C._ts_language_metadata_wasm(this[0]); + const length = C.getValue(TRANSFER_BUFFER, "i32"); + if (length === 0) return null; + return unmarshalLanguageMetadata(TRANSFER_BUFFER + SIZE_OF_INT); + } + /** + * Gets the number of fields in the language. + */ + get fieldCount() { + return this.fields.length - 1; + } + /** + * Gets the number of states in the language. + */ + get stateCount() { + return C._ts_language_state_count(this[0]); + } + /** + * Get the field id for a field name. + */ + fieldIdForName(fieldName) { + const result = this.fields.indexOf(fieldName); + return result !== -1 ? result : null; + } + /** + * Get the field name for a field id. + */ + fieldNameForId(fieldId) { + return this.fields[fieldId] ?? null; + } + /** + * Get the node type id for a node type name. + */ + idForNodeType(type, named) { + const typeLength = C.lengthBytesUTF8(type); + const typeAddress = C._malloc(typeLength + 1); + C.stringToUTF8(type, typeAddress, typeLength + 1); + const result = C._ts_language_symbol_for_name(this[0], typeAddress, typeLength, named ? 1 : 0); + C._free(typeAddress); + return result || null; + } + /** + * Gets the number of node types in the language. + */ + get nodeTypeCount() { + return C._ts_language_symbol_count(this[0]); + } + /** + * Get the node type name for a node type id. + */ + nodeTypeForId(typeId) { + const name2 = C._ts_language_symbol_name(this[0], typeId); + return name2 ? C.UTF8ToString(name2) : null; + } + /** + * Check if a node type is named. + * + * @see {@link https://tree-sitter.github.io/tree-sitter/using-parsers/2-basic-parsing.html#named-vs-anonymous-nodes} + */ + nodeTypeIsNamed(typeId) { + return C._ts_language_type_is_named_wasm(this[0], typeId) ? true : false; + } + /** + * Check if a node type is visible. + */ + nodeTypeIsVisible(typeId) { + return C._ts_language_type_is_visible_wasm(this[0], typeId) ? true : false; + } + /** + * Get the supertypes ids of this language. + * + * @see {@link https://tree-sitter.github.io/tree-sitter/using-parsers/6-static-node-types.html?highlight=supertype#supertype-nodes} + */ + get supertypes() { + C._ts_language_supertypes_wasm(this[0]); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i2 = 0; i2 < count; i2++) { + result[i2] = C.getValue(address, "i16"); + address += SIZE_OF_SHORT; + } + } + return result; + } + /** + * Get the subtype ids for a given supertype node id. + */ + subtypes(supertype) { + C._ts_language_subtypes_wasm(this[0], supertype); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i2 = 0; i2 < count; i2++) { + result[i2] = C.getValue(address, "i16"); + address += SIZE_OF_SHORT; + } + } + return result; + } + /** + * Get the next state id for a given state id and node type id. + */ + nextState(stateId, typeId) { + return C._ts_language_next_state(this[0], stateId, typeId); + } + /** + * Create a new lookahead iterator for this language and parse state. + * + * This returns `null` if state is invalid for this language. + * + * Iterating {@link LookaheadIterator} will yield valid symbols in the given + * parse state. Newly created lookahead iterators will return the `ERROR` + * symbol from {@link LookaheadIterator#currentType}. + * + * Lookahead iterators can be useful for generating suggestions and improving + * syntax error diagnostics. To get symbols valid in an `ERROR` node, use the + * lookahead iterator on its first leaf node state. For `MISSING` nodes, a + * lookahead iterator created on the previous non-extra leaf node may be + * appropriate. + */ + lookaheadIterator(stateId) { + const address = C._ts_lookahead_iterator_new(this[0], stateId); + if (address) return new LookaheadIterator(INTERNAL, address, this); + return null; + } + /** + * Load a language from a WebAssembly module. + * The module can be provided as a path to a file or as a buffer. + */ + static async load(input) { + let binary2; + if (input instanceof Uint8Array) { + binary2 = input; + } else if (globalThis.process?.versions.node) { + const fs2 = await import("fs/promises"); + binary2 = await fs2.readFile(input); + } else { + const response = await fetch(input); + if (!response.ok) { + const body2 = await response.text(); + throw new Error(`Language.load failed with status ${response.status}. + +${body2}`); + } + const retryResp = response.clone(); + try { + binary2 = await WebAssembly.compileStreaming(response); + } catch (reason) { + console.error("wasm streaming compile failed:", reason); + console.error("falling back to ArrayBuffer instantiation"); + binary2 = new Uint8Array(await retryResp.arrayBuffer()); + } + } + const mod = await C.loadWebAssemblyModule(binary2, { loadAsync: true }); + const symbolNames = Object.keys(mod); + const functionName = symbolNames.find((key) => LANGUAGE_FUNCTION_REGEX.test(key) && !key.includes("external_scanner_")); + if (!functionName) { + console.log(`Couldn't find language function in Wasm file. Symbols: +${JSON.stringify(symbolNames, null, 2)}`); + throw new Error("Language.load failed: no language function found in Wasm file"); + } + const languageAddress = mod[functionName](); + return new _Language(INTERNAL, languageAddress); + } +}; + +// lib/web-tree-sitter.mjs +async function Module2(moduleArg = {}) { + var moduleRtn; + var Module = moduleArg; + // var ENVIRONMENT_IS_WEB = typeof window == "object"; + // var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != "undefined"; + // var ENVIRONMENT_IS_NODE = typeof process == "object" && process.versions?.node && process.type != "renderer"; + var ENVIRONMENT_IS_WEB = false; + var ENVIRONMENT_IS_WORKER = true; + var ENVIRONMENT_IS_NODE = false; + // if (ENVIRONMENT_IS_NODE) { + // const { createRequire } = await import("module"); + // var require = createRequire(import.meta.url); + // } + Module.currentQueryProgressCallback = null; + Module.currentProgressCallback = null; + Module.currentLogCallback = null; + Module.currentParseCallback = null; + var arguments_ = []; + var thisProgram = "./this.program"; + var quit_ = /* @__PURE__ */ __name((status, toThrow) => { + throw toThrow; + }, "quit_"); + var _scriptName = self.location.origin + self.location.pathname; + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + __name(locateFile, "locateFile"); + var readAsync, readBinary; + if (ENVIRONMENT_IS_NODE) { + var fs = require("fs"); + if (_scriptName.startsWith("file:")) { + scriptDirectory = require("path").dirname(require("url").fileURLToPath(_scriptName)) + "/"; + } + readBinary = /* @__PURE__ */ __name((filename) => { + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + return ret; + }, "readBinary"); + readAsync = /* @__PURE__ */ __name(async (filename, binary2 = true) => { + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary2 ? void 0 : "utf8"); + return ret; + }, "readAsync"); + if (process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, "/"); + } + arguments_ = process.argv.slice(2); + quit_ = /* @__PURE__ */ __name((status, toThrow) => { + process.exitCode = status; + throw toThrow; + }, "quit_"); + } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + try { + scriptDirectory = new URL(".", _scriptName).href; + } catch { + } + { + if (ENVIRONMENT_IS_WORKER) { + readBinary = /* @__PURE__ */ __name((url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array( + /** @type{!ArrayBuffer} */ + xhr.response + ); + }, "readBinary"); + } + readAsync = /* @__PURE__ */ __name(async (url) => { + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = () => { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { + credentials: "same-origin" + }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + " : " + response.url); + }, "readAsync"); + } + } else { + } + var out = console.log.bind(console); + var err = console.error.bind(console); + var dynamicLibraries = []; + var wasmBinary; + var ABORT = false; + var EXITSTATUS; + var isFileURI = /* @__PURE__ */ __name((filename) => filename.startsWith("file://"), "isFileURI"); + var readyPromiseResolve, readyPromiseReject; + var wasmMemory; + var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + var HEAP64, HEAPU64; + var HEAP_DATA_VIEW; + var runtimeInitialized = false; + function updateMemoryViews() { + var b = wasmMemory.buffer; + Module["HEAP8"] = HEAP8 = new Int8Array(b); + Module["HEAP16"] = HEAP16 = new Int16Array(b); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(b); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(b); + Module["HEAP32"] = HEAP32 = new Int32Array(b); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(b); + Module["HEAPF32"] = HEAPF32 = new Float32Array(b); + Module["HEAPF64"] = HEAPF64 = new Float64Array(b); + Module["HEAP64"] = HEAP64 = new BigInt64Array(b); + Module["HEAPU64"] = HEAPU64 = new BigUint64Array(b); + Module["HEAP_DATA_VIEW"] = HEAP_DATA_VIEW = new DataView(b); + LE_HEAP_UPDATE(); + } + __name(updateMemoryViews, "updateMemoryViews"); + function initMemory() { + if (Module["wasmMemory"]) { + wasmMemory = Module["wasmMemory"]; + } else { + var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 33554432; + wasmMemory = new WebAssembly.Memory({ + "initial": INITIAL_MEMORY / 65536, + // In theory we should not need to emit the maximum if we want "unlimited" + // or 4GB of memory, but VMs error on that atm, see + // https://github.com/emscripten-core/emscripten/issues/14130 + // And in the pthreads case we definitely need to emit a maximum. So + // always emit one. + "maximum": 32768 + }); + } + updateMemoryViews(); + } + __name(initMemory, "initMemory"); + var __RELOC_FUNCS__ = []; + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(onPreRuns); + } + __name(preRun, "preRun"); + function initRuntime() { + runtimeInitialized = true; + callRuntimeCallbacks(__RELOC_FUNCS__); + wasmExports["__wasm_call_ctors"](); + callRuntimeCallbacks(onPostCtors); + } + __name(initRuntime, "initRuntime"); + function preMain() { + } + __name(preMain, "preMain"); + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(onPostRuns); + } + __name(postRun, "postRun"); + function abort(what) { + Module["onAbort"]?.(what); + what = "Aborted(" + what + ")"; + err(what); + ABORT = true; + what += ". Build with -sASSERTIONS for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject?.(e); + throw e; + } + __name(abort, "abort"); + var wasmBinaryFile; + function findWasmBinary() { + if (Module["locateFile"]) { + return locateFile("web-tree-sitter.wasm"); + } + return new URL("web-tree-sitter.wasm", self.location.origin + self.location.pathname).href; + } + __name(findWasmBinary, "findWasmBinary"); + function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw "both async and sync fetching of the wasm failed"; + } + __name(getBinarySync, "getBinarySync"); + async function getWasmBinary(binaryFile) { + if (!wasmBinary) { + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + } + } + return getBinarySync(binaryFile); + } + __name(getWasmBinary, "getWasmBinary"); + async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary2 = await getWasmBinary(binaryFile); + var instance2 = await WebAssembly.instantiate(binary2, imports); + return instance2; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + abort(reason); + } + } + __name(instantiateArrayBuffer, "instantiateArrayBuffer"); + async function instantiateAsync(binary2, binaryFile, imports) { + if (!binary2 && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) { + try { + var response = fetch(binaryFile, { + credentials: "same-origin" + }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + err(`wasm streaming compile failed: ${reason}`); + err("falling back to ArrayBuffer instantiation"); + } + } + return instantiateArrayBuffer(binaryFile, imports); + } + __name(instantiateAsync, "instantiateAsync"); + function getWasmImports() { + return { + "env": wasmImports, + "wasi_snapshot_preview1": wasmImports, + "GOT.mem": new Proxy(wasmImports, GOTHandler), + "GOT.func": new Proxy(wasmImports, GOTHandler) + }; + } + __name(getWasmImports, "getWasmImports"); + async function createWasm() { + function receiveInstance(instance2, module2) { + wasmExports = instance2.exports; + wasmExports = relocateExports(wasmExports, 1024); + var metadata2 = getDylinkMetadata(module2); + if (metadata2.neededDynlibs) { + dynamicLibraries = metadata2.neededDynlibs.concat(dynamicLibraries); + } + mergeLibSymbols(wasmExports, "main"); + LDSO.init(); + loadDylibs(); + __RELOC_FUNCS__.push(wasmExports["__wasm_apply_data_relocs"]); + assignWasmExports(wasmExports); + return wasmExports; + } + __name(receiveInstance, "receiveInstance"); + function receiveInstantiationResult(result2) { + return receiveInstance(result2["instance"], result2["module"]); + } + __name(receiveInstantiationResult, "receiveInstantiationResult"); + var info2 = getWasmImports(); + if (Module["instantiateWasm"]) { + return new Promise((resolve, reject) => { + Module["instantiateWasm"](info2, (mod, inst) => { + resolve(receiveInstance(mod, inst)); + }); + }); + } + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info2); + var exports = receiveInstantiationResult(result); + return exports; + } + __name(createWasm, "createWasm"); + class ExitStatus { + static { + __name(this, "ExitStatus"); + } + name = "ExitStatus"; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + var GOT = {}; + var currentModuleWeakSymbols = /* @__PURE__ */ new Set([]); + var GOTHandler = { + get(obj, symName) { + var rtn = GOT[symName]; + if (!rtn) { + rtn = GOT[symName] = new WebAssembly.Global({ + "value": "i32", + "mutable": true + }); + } + if (!currentModuleWeakSymbols.has(symName)) { + rtn.required = true; + } + return rtn; + } + }; + var LE_ATOMICS_NATIVE_BYTE_ORDER = []; + var LE_HEAP_LOAD_F32 = /* @__PURE__ */ __name((byteOffset) => HEAP_DATA_VIEW.getFloat32(byteOffset, true), "LE_HEAP_LOAD_F32"); + var LE_HEAP_LOAD_F64 = /* @__PURE__ */ __name((byteOffset) => HEAP_DATA_VIEW.getFloat64(byteOffset, true), "LE_HEAP_LOAD_F64"); + var LE_HEAP_LOAD_I16 = /* @__PURE__ */ __name((byteOffset) => HEAP_DATA_VIEW.getInt16(byteOffset, true), "LE_HEAP_LOAD_I16"); + var LE_HEAP_LOAD_I32 = /* @__PURE__ */ __name((byteOffset) => HEAP_DATA_VIEW.getInt32(byteOffset, true), "LE_HEAP_LOAD_I32"); + var LE_HEAP_LOAD_I64 = /* @__PURE__ */ __name((byteOffset) => HEAP_DATA_VIEW.getBigInt64(byteOffset, true), "LE_HEAP_LOAD_I64"); + var LE_HEAP_LOAD_U32 = /* @__PURE__ */ __name((byteOffset) => HEAP_DATA_VIEW.getUint32(byteOffset, true), "LE_HEAP_LOAD_U32"); + var LE_HEAP_STORE_F32 = /* @__PURE__ */ __name((byteOffset, value) => HEAP_DATA_VIEW.setFloat32(byteOffset, value, true), "LE_HEAP_STORE_F32"); + var LE_HEAP_STORE_F64 = /* @__PURE__ */ __name((byteOffset, value) => HEAP_DATA_VIEW.setFloat64(byteOffset, value, true), "LE_HEAP_STORE_F64"); + var LE_HEAP_STORE_I16 = /* @__PURE__ */ __name((byteOffset, value) => HEAP_DATA_VIEW.setInt16(byteOffset, value, true), "LE_HEAP_STORE_I16"); + var LE_HEAP_STORE_I32 = /* @__PURE__ */ __name((byteOffset, value) => HEAP_DATA_VIEW.setInt32(byteOffset, value, true), "LE_HEAP_STORE_I32"); + var LE_HEAP_STORE_I64 = /* @__PURE__ */ __name((byteOffset, value) => HEAP_DATA_VIEW.setBigInt64(byteOffset, value, true), "LE_HEAP_STORE_I64"); + var LE_HEAP_STORE_U32 = /* @__PURE__ */ __name((byteOffset, value) => HEAP_DATA_VIEW.setUint32(byteOffset, value, true), "LE_HEAP_STORE_U32"); + var callRuntimeCallbacks = /* @__PURE__ */ __name((callbacks) => { + while (callbacks.length > 0) { + callbacks.shift()(Module); + } + }, "callRuntimeCallbacks"); + var onPostRuns = []; + var addOnPostRun = /* @__PURE__ */ __name((cb) => onPostRuns.push(cb), "addOnPostRun"); + var onPreRuns = []; + var addOnPreRun = /* @__PURE__ */ __name((cb) => onPreRuns.push(cb), "addOnPreRun"); + var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder() : void 0; + var findStringEnd = /* @__PURE__ */ __name((heapOrArray, idx, maxBytesToRead, ignoreNul) => { + var maxIdx = idx + maxBytesToRead; + if (ignoreNul) return maxIdx; + while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx; + return idx; + }, "findStringEnd"); + var UTF8ArrayToString = /* @__PURE__ */ __name((heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => { + var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul); + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ""; + while (idx < endPtr) { + var u0 = heapOrArray[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue; + } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2; + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63; + } + if (u0 < 65536) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + } + return str; + }, "UTF8ArrayToString"); + var getDylinkMetadata = /* @__PURE__ */ __name((binary2) => { + var offset = 0; + var end = 0; + function getU8() { + return binary2[offset++]; + } + __name(getU8, "getU8"); + function getLEB() { + var ret = 0; + var mul = 1; + while (1) { + var byte = binary2[offset++]; + ret += (byte & 127) * mul; + mul *= 128; + if (!(byte & 128)) break; + } + return ret; + } + __name(getLEB, "getLEB"); + function getString() { + var len = getLEB(); + offset += len; + return UTF8ArrayToString(binary2, offset - len, len); + } + __name(getString, "getString"); + function getStringList() { + var count2 = getLEB(); + var rtn = []; + while (count2--) rtn.push(getString()); + return rtn; + } + __name(getStringList, "getStringList"); + function failIf(condition, message) { + if (condition) throw new Error(message); + } + __name(failIf, "failIf"); + if (binary2 instanceof WebAssembly.Module) { + var dylinkSection = WebAssembly.Module.customSections(binary2, "dylink.0"); + failIf(dylinkSection.length === 0, "need dylink section"); + binary2 = new Uint8Array(dylinkSection[0]); + end = binary2.length; + } else { + var int32View = new Uint32Array(new Uint8Array(binary2.subarray(0, 24)).buffer); + var magicNumberFound = int32View[0] == 1836278016 || int32View[0] == 6386541; + failIf(!magicNumberFound, "need to see wasm magic number"); + failIf(binary2[8] !== 0, "need the dylink section to be first"); + offset = 9; + var section_size = getLEB(); + end = offset + section_size; + var name2 = getString(); + failIf(name2 !== "dylink.0"); + } + var customSection = { + neededDynlibs: [], + tlsExports: /* @__PURE__ */ new Set(), + weakImports: /* @__PURE__ */ new Set(), + runtimePaths: [] + }; + var WASM_DYLINK_MEM_INFO = 1; + var WASM_DYLINK_NEEDED = 2; + var WASM_DYLINK_EXPORT_INFO = 3; + var WASM_DYLINK_IMPORT_INFO = 4; + var WASM_DYLINK_RUNTIME_PATH = 5; + var WASM_SYMBOL_TLS = 256; + var WASM_SYMBOL_BINDING_MASK = 3; + var WASM_SYMBOL_BINDING_WEAK = 1; + while (offset < end) { + var subsectionType = getU8(); + var subsectionSize = getLEB(); + if (subsectionType === WASM_DYLINK_MEM_INFO) { + customSection.memorySize = getLEB(); + customSection.memoryAlign = getLEB(); + customSection.tableSize = getLEB(); + customSection.tableAlign = getLEB(); + } else if (subsectionType === WASM_DYLINK_NEEDED) { + customSection.neededDynlibs = getStringList(); + } else if (subsectionType === WASM_DYLINK_EXPORT_INFO) { + var count = getLEB(); + while (count--) { + var symname = getString(); + var flags2 = getLEB(); + if (flags2 & WASM_SYMBOL_TLS) { + customSection.tlsExports.add(symname); + } + } + } else if (subsectionType === WASM_DYLINK_IMPORT_INFO) { + var count = getLEB(); + while (count--) { + var modname = getString(); + var symname = getString(); + var flags2 = getLEB(); + if ((flags2 & WASM_SYMBOL_BINDING_MASK) == WASM_SYMBOL_BINDING_WEAK) { + customSection.weakImports.add(symname); + } + } + } else if (subsectionType === WASM_DYLINK_RUNTIME_PATH) { + customSection.runtimePaths = getStringList(); + } else { + offset += subsectionSize; + } + } + return customSection; + }, "getDylinkMetadata"); + function getValue(ptr, type = "i8") { + if (type.endsWith("*")) type = "*"; + switch (type) { + case "i1": + return HEAP8[ptr]; + case "i8": + return HEAP8[ptr]; + case "i16": + return LE_HEAP_LOAD_I16((ptr >> 1) * 2); + case "i32": + return LE_HEAP_LOAD_I32((ptr >> 2) * 4); + case "i64": + return LE_HEAP_LOAD_I64((ptr >> 3) * 8); + case "float": + return LE_HEAP_LOAD_F32((ptr >> 2) * 4); + case "double": + return LE_HEAP_LOAD_F64((ptr >> 3) * 8); + case "*": + return LE_HEAP_LOAD_U32((ptr >> 2) * 4); + default: + abort(`invalid type for getValue: ${type}`); + } + } + __name(getValue, "getValue"); + var newDSO = /* @__PURE__ */ __name((name2, handle2, syms) => { + var dso = { + refcount: Infinity, + name: name2, + exports: syms, + global: true + }; + LDSO.loadedLibsByName[name2] = dso; + if (handle2 != void 0) { + LDSO.loadedLibsByHandle[handle2] = dso; + } + return dso; + }, "newDSO"); + var LDSO = { + loadedLibsByName: {}, + loadedLibsByHandle: {}, + init() { + newDSO("__main__", 0, wasmImports); + } + }; + var ___heap_base = 78240; + var alignMemory = /* @__PURE__ */ __name((size, alignment) => Math.ceil(size / alignment) * alignment, "alignMemory"); + var getMemory = /* @__PURE__ */ __name((size) => { + if (runtimeInitialized) { + return _calloc(size, 1); + } + var ret = ___heap_base; + var end = ret + alignMemory(size, 16); + ___heap_base = end; + GOT["__heap_base"].value = end; + return ret; + }, "getMemory"); + var isInternalSym = /* @__PURE__ */ __name((symName) => ["__cpp_exception", "__c_longjmp", "__wasm_apply_data_relocs", "__dso_handle", "__tls_size", "__tls_align", "__set_stack_limits", "_emscripten_tls_init", "__wasm_init_tls", "__wasm_call_ctors", "__start_em_asm", "__stop_em_asm", "__start_em_js", "__stop_em_js"].includes(symName) || symName.startsWith("__em_js__"), "isInternalSym"); + var uleb128EncodeWithLen = /* @__PURE__ */ __name((arr) => { + const n = arr.length; + return [n % 128 | 128, n >> 7, ...arr]; + }, "uleb128EncodeWithLen"); + var wasmTypeCodes = { + "i": 127, + // i32 + "p": 127, + // i32 + "j": 126, + // i64 + "f": 125, + // f32 + "d": 124, + // f64 + "e": 111 + }; + var generateTypePack = /* @__PURE__ */ __name((types) => uleb128EncodeWithLen(Array.from(types, (type) => { + var code = wasmTypeCodes[type]; + return code; + })), "generateTypePack"); + var convertJsFunctionToWasm = /* @__PURE__ */ __name((func2, sig) => { + var bytes = Uint8Array.of( + 0, + 97, + 115, + 109, + // magic ("\0asm") + 1, + 0, + 0, + 0, + // version: 1 + 1, + ...uleb128EncodeWithLen([ + 1, + // count: 1 + 96, + // param types + ...generateTypePack(sig.slice(1)), + // return types (for now only supporting [] if `void` and single [T] otherwise) + ...generateTypePack(sig[0] === "v" ? "" : sig[0]) + ]), + // The rest of the module is static + 2, + 7, + // import section + // (import "e" "f" (func 0 (type 0))) + 1, + 1, + 101, + 1, + 102, + 0, + 0, + 7, + 5, + // export section + // (export "f" (func 0 (type 0))) + 1, + 1, + 102, + 0, + 0 + ); + var module2 = new WebAssembly.Module(bytes); + var instance2 = new WebAssembly.Instance(module2, { + "e": { + "f": func2 + } + }); + var wrappedFunc = instance2.exports["f"]; + return wrappedFunc; + }, "convertJsFunctionToWasm"); + var wasmTableMirror = []; + var wasmTable = new WebAssembly.Table({ + "initial": 31, + "element": "anyfunc" + }); + var getWasmTableEntry = /* @__PURE__ */ __name((funcPtr) => { + var func2 = wasmTableMirror[funcPtr]; + if (!func2) { + wasmTableMirror[funcPtr] = func2 = wasmTable.get(funcPtr); + } + return func2; + }, "getWasmTableEntry"); + var updateTableMap = /* @__PURE__ */ __name((offset, count) => { + if (functionsInTableMap) { + for (var i2 = offset; i2 < offset + count; i2++) { + var item = getWasmTableEntry(i2); + if (item) { + functionsInTableMap.set(item, i2); + } + } + } + }, "updateTableMap"); + var functionsInTableMap; + var getFunctionAddress = /* @__PURE__ */ __name((func2) => { + if (!functionsInTableMap) { + functionsInTableMap = /* @__PURE__ */ new WeakMap(); + updateTableMap(0, wasmTable.length); + } + return functionsInTableMap.get(func2) || 0; + }, "getFunctionAddress"); + var freeTableIndexes = []; + var getEmptyTableSlot = /* @__PURE__ */ __name(() => { + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + return wasmTable["grow"](1); + }, "getEmptyTableSlot"); + var setWasmTableEntry = /* @__PURE__ */ __name((idx, func2) => { + wasmTable.set(idx, func2); + wasmTableMirror[idx] = wasmTable.get(idx); + }, "setWasmTableEntry"); + var addFunction = /* @__PURE__ */ __name((func2, sig) => { + var rtn = getFunctionAddress(func2); + if (rtn) { + return rtn; + } + var ret = getEmptyTableSlot(); + try { + setWasmTableEntry(ret, func2); + } catch (err2) { + if (!(err2 instanceof TypeError)) { + throw err2; + } + var wrapped = convertJsFunctionToWasm(func2, sig); + setWasmTableEntry(ret, wrapped); + } + functionsInTableMap.set(func2, ret); + return ret; + }, "addFunction"); + var updateGOT = /* @__PURE__ */ __name((exports, replace) => { + for (var symName in exports) { + if (isInternalSym(symName)) { + continue; + } + var value = exports[symName]; + GOT[symName] ||= new WebAssembly.Global({ + "value": "i32", + "mutable": true + }); + if (replace || GOT[symName].value == 0) { + if (typeof value == "function") { + GOT[symName].value = addFunction(value); + } else if (typeof value == "number") { + GOT[symName].value = value; + } else { + err(`unhandled export type for '${symName}': ${typeof value}`); + } + } + } + }, "updateGOT"); + var relocateExports = /* @__PURE__ */ __name((exports, memoryBase2, replace) => { + var relocated = {}; + for (var e in exports) { + var value = exports[e]; + if (typeof value == "object") { + value = value.value; + } + if (typeof value == "number") { + value += memoryBase2; + } + relocated[e] = value; + } + updateGOT(relocated, replace); + return relocated; + }, "relocateExports"); + var isSymbolDefined = /* @__PURE__ */ __name((symName) => { + var existing = wasmImports[symName]; + if (!existing || existing.stub) { + return false; + } + return true; + }, "isSymbolDefined"); + var dynCall = /* @__PURE__ */ __name((sig, ptr, args2 = [], promising = false) => { + var func2 = getWasmTableEntry(ptr); + var rtn = func2(...args2); + function convert(rtn2) { + return rtn2; + } + __name(convert, "convert"); + return convert(rtn); + }, "dynCall"); + var stackSave = /* @__PURE__ */ __name(() => _emscripten_stack_get_current(), "stackSave"); + var stackRestore = /* @__PURE__ */ __name((val) => __emscripten_stack_restore(val), "stackRestore"); + var createInvokeFunction = /* @__PURE__ */ __name((sig) => (ptr, ...args2) => { + var sp = stackSave(); + try { + return dynCall(sig, ptr, args2); + } catch (e) { + stackRestore(sp); + if (e !== e + 0) throw e; + _setThrew(1, 0); + if (sig[0] == "j") return 0n; + } + }, "createInvokeFunction"); + var resolveGlobalSymbol = /* @__PURE__ */ __name((symName, direct = false) => { + var sym; + if (isSymbolDefined(symName)) { + sym = wasmImports[symName]; + } else if (symName.startsWith("invoke_")) { + sym = wasmImports[symName] = createInvokeFunction(symName.split("_")[1]); + } + return { + sym, + name: symName + }; + }, "resolveGlobalSymbol"); + var onPostCtors = []; + var addOnPostCtor = /* @__PURE__ */ __name((cb) => onPostCtors.push(cb), "addOnPostCtor"); + var UTF8ToString = /* @__PURE__ */ __name((ptr, maxBytesToRead, ignoreNul) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul) : "", "UTF8ToString"); + var loadWebAssemblyModule = /* @__PURE__ */ __name((binary, flags, libName, localScope, handle) => { + var metadata = getDylinkMetadata(binary); + function loadModule() { + var memAlign = Math.pow(2, metadata.memoryAlign); + var memoryBase = metadata.memorySize ? alignMemory(getMemory(metadata.memorySize + memAlign), memAlign) : 0; + var tableBase = metadata.tableSize ? wasmTable.length : 0; + if (handle) { + HEAP8[handle + 8] = 1; + LE_HEAP_STORE_U32((handle + 12 >> 2) * 4, memoryBase); + LE_HEAP_STORE_I32((handle + 16 >> 2) * 4, metadata.memorySize); + LE_HEAP_STORE_U32((handle + 20 >> 2) * 4, tableBase); + LE_HEAP_STORE_I32((handle + 24 >> 2) * 4, metadata.tableSize); + } + if (metadata.tableSize) { + wasmTable.grow(metadata.tableSize); + } + var moduleExports; + function resolveSymbol(sym) { + var resolved = resolveGlobalSymbol(sym).sym; + if (!resolved && localScope) { + resolved = localScope[sym]; + } + if (!resolved) { + resolved = moduleExports[sym]; + } + return resolved; + } + __name(resolveSymbol, "resolveSymbol"); + var proxyHandler = { + get(stubs, prop) { + switch (prop) { + case "__memory_base": + return memoryBase; + case "__table_base": + return tableBase; + } + if (prop in wasmImports && !wasmImports[prop].stub) { + var res = wasmImports[prop]; + return res; + } + if (!(prop in stubs)) { + var resolved; + stubs[prop] = (...args2) => { + resolved ||= resolveSymbol(prop); + return resolved(...args2); + }; + } + return stubs[prop]; + } + }; + var proxy = new Proxy({}, proxyHandler); + currentModuleWeakSymbols = metadata.weakImports; + var info = { + "GOT.mem": new Proxy({}, GOTHandler), + "GOT.func": new Proxy({}, GOTHandler), + "env": proxy, + "wasi_snapshot_preview1": proxy + }; + function postInstantiation(module, instance) { + updateTableMap(tableBase, metadata.tableSize); + moduleExports = relocateExports(instance.exports, memoryBase); + if (!flags.allowUndefined) { + reportUndefinedSymbols(); + } + function addEmAsm(addr, body) { + var args = []; + var arity = 0; + for (; arity < 16; arity++) { + if (body.indexOf("$" + arity) != -1) { + args.push("$" + arity); + } else { + break; + } + } + args = args.join(","); + var func = `(${args}) => { ${body} };`; + ASM_CONSTS[start] = eval(func); + } + __name(addEmAsm, "addEmAsm"); + if ("__start_em_asm" in moduleExports) { + var start = moduleExports["__start_em_asm"]; + var stop = moduleExports["__stop_em_asm"]; + while (start < stop) { + var jsString = UTF8ToString(start); + addEmAsm(start, jsString); + start = HEAPU8.indexOf(0, start) + 1; + } + } + function addEmJs(name, cSig, body) { + var jsArgs = []; + cSig = cSig.slice(1, -1); + if (cSig != "void") { + cSig = cSig.split(","); + for (var i in cSig) { + var jsArg = cSig[i].split(" ").pop(); + jsArgs.push(jsArg.replace("*", "")); + } + } + var func = `(${jsArgs}) => ${body};`; + moduleExports[name] = eval(func); + } + __name(addEmJs, "addEmJs"); + for (var name in moduleExports) { + if (name.startsWith("__em_js__")) { + var start = moduleExports[name]; + var jsString = UTF8ToString(start); + var parts = jsString.split("<::>"); + addEmJs(name.replace("__em_js__", ""), parts[0], parts[1]); + delete moduleExports[name]; + } + } + var applyRelocs = moduleExports["__wasm_apply_data_relocs"]; + if (applyRelocs) { + if (runtimeInitialized) { + applyRelocs(); + } else { + __RELOC_FUNCS__.push(applyRelocs); + } + } + var init = moduleExports["__wasm_call_ctors"]; + if (init) { + if (runtimeInitialized) { + init(); + } else { + addOnPostCtor(init); + } + } + return moduleExports; + } + __name(postInstantiation, "postInstantiation"); + if (flags.loadAsync) { + return (async () => { + var instance2; + if (binary instanceof WebAssembly.Module) { + instance2 = new WebAssembly.Instance(binary, info); + } else { + ({ module: binary, instance: instance2 } = await WebAssembly.instantiate(binary, info)); + } + return postInstantiation(binary, instance2); + })(); + } + var module = binary instanceof WebAssembly.Module ? binary : new WebAssembly.Module(binary); + var instance = new WebAssembly.Instance(module, info); + return postInstantiation(module, instance); + } + __name(loadModule, "loadModule"); + flags = { + ...flags, + rpath: { + parentLibPath: libName, + paths: metadata.runtimePaths + } + }; + if (flags.loadAsync) { + return metadata.neededDynlibs.reduce((chain, dynNeeded) => chain.then(() => loadDynamicLibrary(dynNeeded, flags, localScope)), Promise.resolve()).then(loadModule); + } + metadata.neededDynlibs.forEach((needed) => loadDynamicLibrary(needed, flags, localScope)); + return loadModule(); + }, "loadWebAssemblyModule"); + var mergeLibSymbols = /* @__PURE__ */ __name((exports, libName2) => { + for (var [sym, exp] of Object.entries(exports)) { + const setImport = /* @__PURE__ */ __name((target) => { + if (!isSymbolDefined(target)) { + wasmImports[target] = exp; + } + }, "setImport"); + setImport(sym); + const main_alias = "__main_argc_argv"; + if (sym == "main") { + setImport(main_alias); + } + if (sym == main_alias) { + setImport("main"); + } + } + }, "mergeLibSymbols"); + var asyncLoad = /* @__PURE__ */ __name(async (url) => { + var arrayBuffer = await readAsync(url); + return new Uint8Array(arrayBuffer); + }, "asyncLoad"); + function loadDynamicLibrary(libName2, flags2 = { + global: true, + nodelete: true + }, localScope2, handle2) { + var dso = LDSO.loadedLibsByName[libName2]; + if (dso) { + if (!flags2.global) { + if (localScope2) { + Object.assign(localScope2, dso.exports); + } + } else if (!dso.global) { + dso.global = true; + mergeLibSymbols(dso.exports, libName2); + } + if (flags2.nodelete && dso.refcount !== Infinity) { + dso.refcount = Infinity; + } + dso.refcount++; + if (handle2) { + LDSO.loadedLibsByHandle[handle2] = dso; + } + return flags2.loadAsync ? Promise.resolve(true) : true; + } + dso = newDSO(libName2, handle2, "loading"); + dso.refcount = flags2.nodelete ? Infinity : 1; + dso.global = flags2.global; + function loadLibData() { + if (handle2) { + var data = LE_HEAP_LOAD_U32((handle2 + 28 >> 2) * 4); + var dataSize = LE_HEAP_LOAD_U32((handle2 + 32 >> 2) * 4); + if (data && dataSize) { + var libData = HEAP8.slice(data, data + dataSize); + return flags2.loadAsync ? Promise.resolve(libData) : libData; + } + } + var libFile = locateFile(libName2); + if (flags2.loadAsync) { + return asyncLoad(libFile); + } + if (!readBinary) { + throw new Error(`${libFile}: file not found, and synchronous loading of external files is not available`); + } + return readBinary(libFile); + } + __name(loadLibData, "loadLibData"); + function getExports() { + if (flags2.loadAsync) { + return loadLibData().then((libData) => loadWebAssemblyModule(libData, flags2, libName2, localScope2, handle2)); + } + return loadWebAssemblyModule(loadLibData(), flags2, libName2, localScope2, handle2); + } + __name(getExports, "getExports"); + function moduleLoaded(exports) { + if (dso.global) { + mergeLibSymbols(exports, libName2); + } else if (localScope2) { + Object.assign(localScope2, exports); + } + dso.exports = exports; + } + __name(moduleLoaded, "moduleLoaded"); + if (flags2.loadAsync) { + return getExports().then((exports) => { + moduleLoaded(exports); + return true; + }); + } + moduleLoaded(getExports()); + return true; + } + __name(loadDynamicLibrary, "loadDynamicLibrary"); + var reportUndefinedSymbols = /* @__PURE__ */ __name(() => { + for (var [symName, entry] of Object.entries(GOT)) { + if (entry.value == 0) { + var value = resolveGlobalSymbol(symName, true).sym; + if (!value && !entry.required) { + continue; + } + if (typeof value == "function") { + entry.value = addFunction(value, value.sig); + } else if (typeof value == "number") { + entry.value = value; + } else { + throw new Error(`bad export type for '${symName}': ${typeof value}`); + } + } + } + }, "reportUndefinedSymbols"); + var runDependencies = 0; + var dependenciesFulfilled = null; + var removeRunDependency = /* @__PURE__ */ __name((id) => { + runDependencies--; + Module["monitorRunDependencies"]?.(runDependencies); + if (runDependencies == 0) { + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + }, "removeRunDependency"); + var addRunDependency = /* @__PURE__ */ __name((id) => { + runDependencies++; + Module["monitorRunDependencies"]?.(runDependencies); + }, "addRunDependency"); + var loadDylibs = /* @__PURE__ */ __name(async () => { + if (!dynamicLibraries.length) { + reportUndefinedSymbols(); + return; + } + addRunDependency("loadDylibs"); + for (var lib of dynamicLibraries) { + await loadDynamicLibrary(lib, { + loadAsync: true, + global: true, + nodelete: true, + allowUndefined: true + }); + } + reportUndefinedSymbols(); + removeRunDependency("loadDylibs"); + }, "loadDylibs"); + var noExitRuntime = true; + function setValue(ptr, value, type = "i8") { + if (type.endsWith("*")) type = "*"; + switch (type) { + case "i1": + HEAP8[ptr] = value; + break; + case "i8": + HEAP8[ptr] = value; + break; + case "i16": + LE_HEAP_STORE_I16((ptr >> 1) * 2, value); + break; + case "i32": + LE_HEAP_STORE_I32((ptr >> 2) * 4, value); + break; + case "i64": + LE_HEAP_STORE_I64((ptr >> 3) * 8, BigInt(value)); + break; + case "float": + LE_HEAP_STORE_F32((ptr >> 2) * 4, value); + break; + case "double": + LE_HEAP_STORE_F64((ptr >> 3) * 8, value); + break; + case "*": + LE_HEAP_STORE_U32((ptr >> 2) * 4, value); + break; + default: + abort(`invalid type for setValue: ${type}`); + } + } + __name(setValue, "setValue"); + var ___memory_base = new WebAssembly.Global({ + "value": "i32", + "mutable": false + }, 1024); + var ___stack_high = 78240; + var ___stack_low = 12704; + var ___stack_pointer = new WebAssembly.Global({ + "value": "i32", + "mutable": true + }, 78240); + var ___table_base = new WebAssembly.Global({ + "value": "i32", + "mutable": false + }, 1); + var __abort_js = /* @__PURE__ */ __name(() => abort(""), "__abort_js"); + __abort_js.sig = "v"; + var getHeapMax = /* @__PURE__ */ __name(() => ( + // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate + // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side + // for any code that deals with heap sizes, which would require special + // casing all heap size related code to treat 0 specially. + 2147483648 + ), "getHeapMax"); + var growMemory = /* @__PURE__ */ __name((size) => { + var oldHeapSize = wasmMemory.buffer.byteLength; + var pages = (size - oldHeapSize + 65535) / 65536 | 0; + try { + wasmMemory.grow(pages); + updateMemoryViews(); + return 1; + } catch (e) { + } + }, "growMemory"); + var _emscripten_resize_heap = /* @__PURE__ */ __name((requestedSize) => { + var oldSize = HEAPU8.length; + requestedSize >>>= 0; + var maxHeapSize = getHeapMax(); + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = growMemory(newSize); + if (replacement) { + return true; + } + } + return false; + }, "_emscripten_resize_heap"); + _emscripten_resize_heap.sig = "ip"; + var _fd_close = /* @__PURE__ */ __name((fd) => 52, "_fd_close"); + _fd_close.sig = "ii"; + var INT53_MAX = 9007199254740992; + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = /* @__PURE__ */ __name((num) => num < INT53_MIN || num > INT53_MAX ? NaN : Number(num), "bigintToI53Checked"); + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + return 70; + } + __name(_fd_seek, "_fd_seek"); + _fd_seek.sig = "iijip"; + var printCharBuffers = [null, [], []]; + var printChar = /* @__PURE__ */ __name((stream, curr) => { + var buffer = printCharBuffers[stream]; + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer)); + buffer.length = 0; + } else { + buffer.push(curr); + } + }, "printChar"); + var _fd_write = /* @__PURE__ */ __name((fd, iov, iovcnt, pnum) => { + var num = 0; + for (var i2 = 0; i2 < iovcnt; i2++) { + var ptr = LE_HEAP_LOAD_U32((iov >> 2) * 4); + var len = LE_HEAP_LOAD_U32((iov + 4 >> 2) * 4); + iov += 8; + for (var j = 0; j < len; j++) { + printChar(fd, HEAPU8[ptr + j]); + } + num += len; + } + LE_HEAP_STORE_U32((pnum >> 2) * 4, num); + return 0; + }, "_fd_write"); + _fd_write.sig = "iippp"; + function _tree_sitter_log_callback(isLexMessage, messageAddress) { + if (Module.currentLogCallback) { + const message = UTF8ToString(messageAddress); + Module.currentLogCallback(message, isLexMessage !== 0); + } + } + __name(_tree_sitter_log_callback, "_tree_sitter_log_callback"); + function _tree_sitter_parse_callback(inputBufferAddress, index, row, column, lengthAddress) { + const INPUT_BUFFER_SIZE = 10 * 1024; + const string = Module.currentParseCallback(index, { + row, + column + }); + if (typeof string === "string") { + setValue(lengthAddress, string.length, "i32"); + stringToUTF16(string, inputBufferAddress, INPUT_BUFFER_SIZE); + } else { + setValue(lengthAddress, 0, "i32"); + } + } + __name(_tree_sitter_parse_callback, "_tree_sitter_parse_callback"); + function _tree_sitter_progress_callback(currentOffset, hasError) { + if (Module.currentProgressCallback) { + return Module.currentProgressCallback({ + currentOffset, + hasError + }); + } + return false; + } + __name(_tree_sitter_progress_callback, "_tree_sitter_progress_callback"); + function _tree_sitter_query_progress_callback(currentOffset) { + if (Module.currentQueryProgressCallback) { + return Module.currentQueryProgressCallback({ + currentOffset + }); + } + return false; + } + __name(_tree_sitter_query_progress_callback, "_tree_sitter_query_progress_callback"); + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = /* @__PURE__ */ __name(() => noExitRuntime || runtimeKeepaliveCounter > 0, "keepRuntimeAlive"); + var _proc_exit = /* @__PURE__ */ __name((code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module["onExit"]?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }, "_proc_exit"); + _proc_exit.sig = "vi"; + var exitJS = /* @__PURE__ */ __name((status, implicit) => { + EXITSTATUS = status; + _proc_exit(status); + }, "exitJS"); + var handleException = /* @__PURE__ */ __name((e) => { + if (e instanceof ExitStatus || e == "unwind") { + return EXITSTATUS; + } + quit_(1, e); + }, "handleException"); + var lengthBytesUTF8 = /* @__PURE__ */ __name((str) => { + var len = 0; + for (var i2 = 0; i2 < str.length; ++i2) { + var c = str.charCodeAt(i2); + if (c <= 127) { + len++; + } else if (c <= 2047) { + len += 2; + } else if (c >= 55296 && c <= 57343) { + len += 4; + ++i2; + } else { + len += 3; + } + } + return len; + }, "lengthBytesUTF8"); + var stringToUTF8Array = /* @__PURE__ */ __name((str, heap, outIdx, maxBytesToWrite) => { + if (!(maxBytesToWrite > 0)) return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i2 = 0; i2 < str.length; ++i2) { + var u = str.codePointAt(i2); + if (u <= 127) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + i2++; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + }, "stringToUTF8Array"); + var stringToUTF8 = /* @__PURE__ */ __name((str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite), "stringToUTF8"); + var stackAlloc = /* @__PURE__ */ __name((sz) => __emscripten_stack_alloc(sz), "stackAlloc"); + var stringToUTF8OnStack = /* @__PURE__ */ __name((str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }, "stringToUTF8OnStack"); + var AsciiToString = /* @__PURE__ */ __name((ptr) => { + var str = ""; + while (1) { + var ch = HEAPU8[ptr++]; + if (!ch) return str; + str += String.fromCharCode(ch); + } + }, "AsciiToString"); + var stringToUTF16 = /* @__PURE__ */ __name((str, outPtr, maxBytesToWrite) => { + maxBytesToWrite ??= 2147483647; + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; + var startPtr = outPtr; + var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length; + for (var i2 = 0; i2 < numCharsToWrite; ++i2) { + var codeUnit = str.charCodeAt(i2); + LE_HEAP_STORE_I16((outPtr >> 1) * 2, codeUnit); + outPtr += 2; + } + LE_HEAP_STORE_I16((outPtr >> 1) * 2, 0); + return outPtr - startPtr; + }, "stringToUTF16"); + LE_ATOMICS_NATIVE_BYTE_ORDER = new Int8Array(new Int16Array([1]).buffer)[0] === 1 ? [ + /* little endian */ + ((x) => x), + ((x) => x), + void 0, + ((x) => x) + ] : [ + /* big endian */ + ((x) => x), + ((x) => ((x & 65280) << 8 | (x & 255) << 24) >> 16), + void 0, + ((x) => x >> 24 & 255 | x >> 8 & 65280 | (x & 65280) << 8 | (x & 255) << 24) + ]; + function LE_HEAP_UPDATE() { + HEAPU16.unsigned = ((x) => x & 65535); + HEAPU32.unsigned = ((x) => x >>> 0); + } + __name(LE_HEAP_UPDATE, "LE_HEAP_UPDATE"); + { + initMemory(); + if (Module["noExitRuntime"]) noExitRuntime = Module["noExitRuntime"]; + if (Module["print"]) out = Module["print"]; + if (Module["printErr"]) err = Module["printErr"]; + if (Module["dynamicLibraries"]) dynamicLibraries = Module["dynamicLibraries"]; + if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; + if (Module["arguments"]) arguments_ = Module["arguments"]; + if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].shift()(); + } + } + } + Module["setValue"] = setValue; + Module["getValue"] = getValue; + Module["UTF8ToString"] = UTF8ToString; + Module["stringToUTF8"] = stringToUTF8; + Module["lengthBytesUTF8"] = lengthBytesUTF8; + Module["AsciiToString"] = AsciiToString; + Module["stringToUTF16"] = stringToUTF16; + Module["loadWebAssemblyModule"] = loadWebAssemblyModule; + Module["LE_HEAP_STORE_I64"] = LE_HEAP_STORE_I64; + var ASM_CONSTS = {}; + var _malloc, _calloc, _realloc, _free, _ts_range_edit, _memcmp, _ts_language_symbol_count, _ts_language_state_count, _ts_language_abi_version, _ts_language_name, _ts_language_field_count, _ts_language_next_state, _ts_language_symbol_name, _ts_language_symbol_for_name, _strncmp, _ts_language_symbol_type, _ts_language_field_name_for_id, _ts_lookahead_iterator_new, _ts_lookahead_iterator_delete, _ts_lookahead_iterator_reset_state, _ts_lookahead_iterator_reset, _ts_lookahead_iterator_next, _ts_lookahead_iterator_current_symbol, _ts_point_edit, _ts_parser_delete, _ts_parser_reset, _ts_parser_set_language, _ts_parser_set_included_ranges, _ts_query_new, _ts_query_delete, _iswspace, _iswalnum, _ts_query_pattern_count, _ts_query_capture_count, _ts_query_string_count, _ts_query_capture_name_for_id, _ts_query_capture_quantifier_for_id, _ts_query_string_value_for_id, _ts_query_predicates_for_pattern, _ts_query_start_byte_for_pattern, _ts_query_end_byte_for_pattern, _ts_query_is_pattern_rooted, _ts_query_is_pattern_non_local, _ts_query_is_pattern_guaranteed_at_step, _ts_query_disable_capture, _ts_query_disable_pattern, _ts_tree_copy, _ts_tree_delete, _ts_init, _ts_parser_new_wasm, _ts_parser_enable_logger_wasm, _ts_parser_parse_wasm, _ts_parser_included_ranges_wasm, _ts_language_type_is_named_wasm, _ts_language_type_is_visible_wasm, _ts_language_metadata_wasm, _ts_language_supertypes_wasm, _ts_language_subtypes_wasm, _ts_tree_root_node_wasm, _ts_tree_root_node_with_offset_wasm, _ts_tree_edit_wasm, _ts_tree_included_ranges_wasm, _ts_tree_get_changed_ranges_wasm, _ts_tree_cursor_new_wasm, _ts_tree_cursor_copy_wasm, _ts_tree_cursor_delete_wasm, _ts_tree_cursor_reset_wasm, _ts_tree_cursor_reset_to_wasm, _ts_tree_cursor_goto_first_child_wasm, _ts_tree_cursor_goto_last_child_wasm, _ts_tree_cursor_goto_first_child_for_index_wasm, _ts_tree_cursor_goto_first_child_for_position_wasm, _ts_tree_cursor_goto_next_sibling_wasm, _ts_tree_cursor_goto_previous_sibling_wasm, _ts_tree_cursor_goto_descendant_wasm, _ts_tree_cursor_goto_parent_wasm, _ts_tree_cursor_current_node_type_id_wasm, _ts_tree_cursor_current_node_state_id_wasm, _ts_tree_cursor_current_node_is_named_wasm, _ts_tree_cursor_current_node_is_missing_wasm, _ts_tree_cursor_current_node_id_wasm, _ts_tree_cursor_start_position_wasm, _ts_tree_cursor_end_position_wasm, _ts_tree_cursor_start_index_wasm, _ts_tree_cursor_end_index_wasm, _ts_tree_cursor_current_field_id_wasm, _ts_tree_cursor_current_depth_wasm, _ts_tree_cursor_current_descendant_index_wasm, _ts_tree_cursor_current_node_wasm, _ts_node_symbol_wasm, _ts_node_field_name_for_child_wasm, _ts_node_field_name_for_named_child_wasm, _ts_node_children_by_field_id_wasm, _ts_node_first_child_for_byte_wasm, _ts_node_first_named_child_for_byte_wasm, _ts_node_grammar_symbol_wasm, _ts_node_child_count_wasm, _ts_node_named_child_count_wasm, _ts_node_child_wasm, _ts_node_named_child_wasm, _ts_node_child_by_field_id_wasm, _ts_node_next_sibling_wasm, _ts_node_prev_sibling_wasm, _ts_node_next_named_sibling_wasm, _ts_node_prev_named_sibling_wasm, _ts_node_descendant_count_wasm, _ts_node_parent_wasm, _ts_node_child_with_descendant_wasm, _ts_node_descendant_for_index_wasm, _ts_node_named_descendant_for_index_wasm, _ts_node_descendant_for_position_wasm, _ts_node_named_descendant_for_position_wasm, _ts_node_start_point_wasm, _ts_node_end_point_wasm, _ts_node_start_index_wasm, _ts_node_end_index_wasm, _ts_node_to_string_wasm, _ts_node_children_wasm, _ts_node_named_children_wasm, _ts_node_descendants_of_type_wasm, _ts_node_is_named_wasm, _ts_node_has_changes_wasm, _ts_node_has_error_wasm, _ts_node_is_error_wasm, _ts_node_is_missing_wasm, _ts_node_is_extra_wasm, _ts_node_parse_state_wasm, _ts_node_next_parse_state_wasm, _ts_query_matches_wasm, _ts_query_captures_wasm, _memset, _memcpy, _memmove, _iswalpha, _iswblank, _iswdigit, _iswlower, _iswupper, _iswxdigit, _memchr, _strlen, _strcmp, _strncat, _strncpy, _towlower, _towupper, _setThrew, __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current, ___wasm_apply_data_relocs; + function assignWasmExports(wasmExports2) { + Module["_malloc"] = _malloc = wasmExports2["malloc"]; + Module["_calloc"] = _calloc = wasmExports2["calloc"]; + Module["_realloc"] = _realloc = wasmExports2["realloc"]; + Module["_free"] = _free = wasmExports2["free"]; + Module["_ts_range_edit"] = _ts_range_edit = wasmExports2["ts_range_edit"]; + Module["_memcmp"] = _memcmp = wasmExports2["memcmp"]; + Module["_ts_language_symbol_count"] = _ts_language_symbol_count = wasmExports2["ts_language_symbol_count"]; + Module["_ts_language_state_count"] = _ts_language_state_count = wasmExports2["ts_language_state_count"]; + Module["_ts_language_abi_version"] = _ts_language_abi_version = wasmExports2["ts_language_abi_version"]; + Module["_ts_language_name"] = _ts_language_name = wasmExports2["ts_language_name"]; + Module["_ts_language_field_count"] = _ts_language_field_count = wasmExports2["ts_language_field_count"]; + Module["_ts_language_next_state"] = _ts_language_next_state = wasmExports2["ts_language_next_state"]; + Module["_ts_language_symbol_name"] = _ts_language_symbol_name = wasmExports2["ts_language_symbol_name"]; + Module["_ts_language_symbol_for_name"] = _ts_language_symbol_for_name = wasmExports2["ts_language_symbol_for_name"]; + Module["_strncmp"] = _strncmp = wasmExports2["strncmp"]; + Module["_ts_language_symbol_type"] = _ts_language_symbol_type = wasmExports2["ts_language_symbol_type"]; + Module["_ts_language_field_name_for_id"] = _ts_language_field_name_for_id = wasmExports2["ts_language_field_name_for_id"]; + Module["_ts_lookahead_iterator_new"] = _ts_lookahead_iterator_new = wasmExports2["ts_lookahead_iterator_new"]; + Module["_ts_lookahead_iterator_delete"] = _ts_lookahead_iterator_delete = wasmExports2["ts_lookahead_iterator_delete"]; + Module["_ts_lookahead_iterator_reset_state"] = _ts_lookahead_iterator_reset_state = wasmExports2["ts_lookahead_iterator_reset_state"]; + Module["_ts_lookahead_iterator_reset"] = _ts_lookahead_iterator_reset = wasmExports2["ts_lookahead_iterator_reset"]; + Module["_ts_lookahead_iterator_next"] = _ts_lookahead_iterator_next = wasmExports2["ts_lookahead_iterator_next"]; + Module["_ts_lookahead_iterator_current_symbol"] = _ts_lookahead_iterator_current_symbol = wasmExports2["ts_lookahead_iterator_current_symbol"]; + Module["_ts_point_edit"] = _ts_point_edit = wasmExports2["ts_point_edit"]; + Module["_ts_parser_delete"] = _ts_parser_delete = wasmExports2["ts_parser_delete"]; + Module["_ts_parser_reset"] = _ts_parser_reset = wasmExports2["ts_parser_reset"]; + Module["_ts_parser_set_language"] = _ts_parser_set_language = wasmExports2["ts_parser_set_language"]; + Module["_ts_parser_set_included_ranges"] = _ts_parser_set_included_ranges = wasmExports2["ts_parser_set_included_ranges"]; + Module["_ts_query_new"] = _ts_query_new = wasmExports2["ts_query_new"]; + Module["_ts_query_delete"] = _ts_query_delete = wasmExports2["ts_query_delete"]; + Module["_iswspace"] = _iswspace = wasmExports2["iswspace"]; + Module["_iswalnum"] = _iswalnum = wasmExports2["iswalnum"]; + Module["_ts_query_pattern_count"] = _ts_query_pattern_count = wasmExports2["ts_query_pattern_count"]; + Module["_ts_query_capture_count"] = _ts_query_capture_count = wasmExports2["ts_query_capture_count"]; + Module["_ts_query_string_count"] = _ts_query_string_count = wasmExports2["ts_query_string_count"]; + Module["_ts_query_capture_name_for_id"] = _ts_query_capture_name_for_id = wasmExports2["ts_query_capture_name_for_id"]; + Module["_ts_query_capture_quantifier_for_id"] = _ts_query_capture_quantifier_for_id = wasmExports2["ts_query_capture_quantifier_for_id"]; + Module["_ts_query_string_value_for_id"] = _ts_query_string_value_for_id = wasmExports2["ts_query_string_value_for_id"]; + Module["_ts_query_predicates_for_pattern"] = _ts_query_predicates_for_pattern = wasmExports2["ts_query_predicates_for_pattern"]; + Module["_ts_query_start_byte_for_pattern"] = _ts_query_start_byte_for_pattern = wasmExports2["ts_query_start_byte_for_pattern"]; + Module["_ts_query_end_byte_for_pattern"] = _ts_query_end_byte_for_pattern = wasmExports2["ts_query_end_byte_for_pattern"]; + Module["_ts_query_is_pattern_rooted"] = _ts_query_is_pattern_rooted = wasmExports2["ts_query_is_pattern_rooted"]; + Module["_ts_query_is_pattern_non_local"] = _ts_query_is_pattern_non_local = wasmExports2["ts_query_is_pattern_non_local"]; + Module["_ts_query_is_pattern_guaranteed_at_step"] = _ts_query_is_pattern_guaranteed_at_step = wasmExports2["ts_query_is_pattern_guaranteed_at_step"]; + Module["_ts_query_disable_capture"] = _ts_query_disable_capture = wasmExports2["ts_query_disable_capture"]; + Module["_ts_query_disable_pattern"] = _ts_query_disable_pattern = wasmExports2["ts_query_disable_pattern"]; + Module["_ts_tree_copy"] = _ts_tree_copy = wasmExports2["ts_tree_copy"]; + Module["_ts_tree_delete"] = _ts_tree_delete = wasmExports2["ts_tree_delete"]; + Module["_ts_init"] = _ts_init = wasmExports2["ts_init"]; + Module["_ts_parser_new_wasm"] = _ts_parser_new_wasm = wasmExports2["ts_parser_new_wasm"]; + Module["_ts_parser_enable_logger_wasm"] = _ts_parser_enable_logger_wasm = wasmExports2["ts_parser_enable_logger_wasm"]; + Module["_ts_parser_parse_wasm"] = _ts_parser_parse_wasm = wasmExports2["ts_parser_parse_wasm"]; + Module["_ts_parser_included_ranges_wasm"] = _ts_parser_included_ranges_wasm = wasmExports2["ts_parser_included_ranges_wasm"]; + Module["_ts_language_type_is_named_wasm"] = _ts_language_type_is_named_wasm = wasmExports2["ts_language_type_is_named_wasm"]; + Module["_ts_language_type_is_visible_wasm"] = _ts_language_type_is_visible_wasm = wasmExports2["ts_language_type_is_visible_wasm"]; + Module["_ts_language_metadata_wasm"] = _ts_language_metadata_wasm = wasmExports2["ts_language_metadata_wasm"]; + Module["_ts_language_supertypes_wasm"] = _ts_language_supertypes_wasm = wasmExports2["ts_language_supertypes_wasm"]; + Module["_ts_language_subtypes_wasm"] = _ts_language_subtypes_wasm = wasmExports2["ts_language_subtypes_wasm"]; + Module["_ts_tree_root_node_wasm"] = _ts_tree_root_node_wasm = wasmExports2["ts_tree_root_node_wasm"]; + Module["_ts_tree_root_node_with_offset_wasm"] = _ts_tree_root_node_with_offset_wasm = wasmExports2["ts_tree_root_node_with_offset_wasm"]; + Module["_ts_tree_edit_wasm"] = _ts_tree_edit_wasm = wasmExports2["ts_tree_edit_wasm"]; + Module["_ts_tree_included_ranges_wasm"] = _ts_tree_included_ranges_wasm = wasmExports2["ts_tree_included_ranges_wasm"]; + Module["_ts_tree_get_changed_ranges_wasm"] = _ts_tree_get_changed_ranges_wasm = wasmExports2["ts_tree_get_changed_ranges_wasm"]; + Module["_ts_tree_cursor_new_wasm"] = _ts_tree_cursor_new_wasm = wasmExports2["ts_tree_cursor_new_wasm"]; + Module["_ts_tree_cursor_copy_wasm"] = _ts_tree_cursor_copy_wasm = wasmExports2["ts_tree_cursor_copy_wasm"]; + Module["_ts_tree_cursor_delete_wasm"] = _ts_tree_cursor_delete_wasm = wasmExports2["ts_tree_cursor_delete_wasm"]; + Module["_ts_tree_cursor_reset_wasm"] = _ts_tree_cursor_reset_wasm = wasmExports2["ts_tree_cursor_reset_wasm"]; + Module["_ts_tree_cursor_reset_to_wasm"] = _ts_tree_cursor_reset_to_wasm = wasmExports2["ts_tree_cursor_reset_to_wasm"]; + Module["_ts_tree_cursor_goto_first_child_wasm"] = _ts_tree_cursor_goto_first_child_wasm = wasmExports2["ts_tree_cursor_goto_first_child_wasm"]; + Module["_ts_tree_cursor_goto_last_child_wasm"] = _ts_tree_cursor_goto_last_child_wasm = wasmExports2["ts_tree_cursor_goto_last_child_wasm"]; + Module["_ts_tree_cursor_goto_first_child_for_index_wasm"] = _ts_tree_cursor_goto_first_child_for_index_wasm = wasmExports2["ts_tree_cursor_goto_first_child_for_index_wasm"]; + Module["_ts_tree_cursor_goto_first_child_for_position_wasm"] = _ts_tree_cursor_goto_first_child_for_position_wasm = wasmExports2["ts_tree_cursor_goto_first_child_for_position_wasm"]; + Module["_ts_tree_cursor_goto_next_sibling_wasm"] = _ts_tree_cursor_goto_next_sibling_wasm = wasmExports2["ts_tree_cursor_goto_next_sibling_wasm"]; + Module["_ts_tree_cursor_goto_previous_sibling_wasm"] = _ts_tree_cursor_goto_previous_sibling_wasm = wasmExports2["ts_tree_cursor_goto_previous_sibling_wasm"]; + Module["_ts_tree_cursor_goto_descendant_wasm"] = _ts_tree_cursor_goto_descendant_wasm = wasmExports2["ts_tree_cursor_goto_descendant_wasm"]; + Module["_ts_tree_cursor_goto_parent_wasm"] = _ts_tree_cursor_goto_parent_wasm = wasmExports2["ts_tree_cursor_goto_parent_wasm"]; + Module["_ts_tree_cursor_current_node_type_id_wasm"] = _ts_tree_cursor_current_node_type_id_wasm = wasmExports2["ts_tree_cursor_current_node_type_id_wasm"]; + Module["_ts_tree_cursor_current_node_state_id_wasm"] = _ts_tree_cursor_current_node_state_id_wasm = wasmExports2["ts_tree_cursor_current_node_state_id_wasm"]; + Module["_ts_tree_cursor_current_node_is_named_wasm"] = _ts_tree_cursor_current_node_is_named_wasm = wasmExports2["ts_tree_cursor_current_node_is_named_wasm"]; + Module["_ts_tree_cursor_current_node_is_missing_wasm"] = _ts_tree_cursor_current_node_is_missing_wasm = wasmExports2["ts_tree_cursor_current_node_is_missing_wasm"]; + Module["_ts_tree_cursor_current_node_id_wasm"] = _ts_tree_cursor_current_node_id_wasm = wasmExports2["ts_tree_cursor_current_node_id_wasm"]; + Module["_ts_tree_cursor_start_position_wasm"] = _ts_tree_cursor_start_position_wasm = wasmExports2["ts_tree_cursor_start_position_wasm"]; + Module["_ts_tree_cursor_end_position_wasm"] = _ts_tree_cursor_end_position_wasm = wasmExports2["ts_tree_cursor_end_position_wasm"]; + Module["_ts_tree_cursor_start_index_wasm"] = _ts_tree_cursor_start_index_wasm = wasmExports2["ts_tree_cursor_start_index_wasm"]; + Module["_ts_tree_cursor_end_index_wasm"] = _ts_tree_cursor_end_index_wasm = wasmExports2["ts_tree_cursor_end_index_wasm"]; + Module["_ts_tree_cursor_current_field_id_wasm"] = _ts_tree_cursor_current_field_id_wasm = wasmExports2["ts_tree_cursor_current_field_id_wasm"]; + Module["_ts_tree_cursor_current_depth_wasm"] = _ts_tree_cursor_current_depth_wasm = wasmExports2["ts_tree_cursor_current_depth_wasm"]; + Module["_ts_tree_cursor_current_descendant_index_wasm"] = _ts_tree_cursor_current_descendant_index_wasm = wasmExports2["ts_tree_cursor_current_descendant_index_wasm"]; + Module["_ts_tree_cursor_current_node_wasm"] = _ts_tree_cursor_current_node_wasm = wasmExports2["ts_tree_cursor_current_node_wasm"]; + Module["_ts_node_symbol_wasm"] = _ts_node_symbol_wasm = wasmExports2["ts_node_symbol_wasm"]; + Module["_ts_node_field_name_for_child_wasm"] = _ts_node_field_name_for_child_wasm = wasmExports2["ts_node_field_name_for_child_wasm"]; + Module["_ts_node_field_name_for_named_child_wasm"] = _ts_node_field_name_for_named_child_wasm = wasmExports2["ts_node_field_name_for_named_child_wasm"]; + Module["_ts_node_children_by_field_id_wasm"] = _ts_node_children_by_field_id_wasm = wasmExports2["ts_node_children_by_field_id_wasm"]; + Module["_ts_node_first_child_for_byte_wasm"] = _ts_node_first_child_for_byte_wasm = wasmExports2["ts_node_first_child_for_byte_wasm"]; + Module["_ts_node_first_named_child_for_byte_wasm"] = _ts_node_first_named_child_for_byte_wasm = wasmExports2["ts_node_first_named_child_for_byte_wasm"]; + Module["_ts_node_grammar_symbol_wasm"] = _ts_node_grammar_symbol_wasm = wasmExports2["ts_node_grammar_symbol_wasm"]; + Module["_ts_node_child_count_wasm"] = _ts_node_child_count_wasm = wasmExports2["ts_node_child_count_wasm"]; + Module["_ts_node_named_child_count_wasm"] = _ts_node_named_child_count_wasm = wasmExports2["ts_node_named_child_count_wasm"]; + Module["_ts_node_child_wasm"] = _ts_node_child_wasm = wasmExports2["ts_node_child_wasm"]; + Module["_ts_node_named_child_wasm"] = _ts_node_named_child_wasm = wasmExports2["ts_node_named_child_wasm"]; + Module["_ts_node_child_by_field_id_wasm"] = _ts_node_child_by_field_id_wasm = wasmExports2["ts_node_child_by_field_id_wasm"]; + Module["_ts_node_next_sibling_wasm"] = _ts_node_next_sibling_wasm = wasmExports2["ts_node_next_sibling_wasm"]; + Module["_ts_node_prev_sibling_wasm"] = _ts_node_prev_sibling_wasm = wasmExports2["ts_node_prev_sibling_wasm"]; + Module["_ts_node_next_named_sibling_wasm"] = _ts_node_next_named_sibling_wasm = wasmExports2["ts_node_next_named_sibling_wasm"]; + Module["_ts_node_prev_named_sibling_wasm"] = _ts_node_prev_named_sibling_wasm = wasmExports2["ts_node_prev_named_sibling_wasm"]; + Module["_ts_node_descendant_count_wasm"] = _ts_node_descendant_count_wasm = wasmExports2["ts_node_descendant_count_wasm"]; + Module["_ts_node_parent_wasm"] = _ts_node_parent_wasm = wasmExports2["ts_node_parent_wasm"]; + Module["_ts_node_child_with_descendant_wasm"] = _ts_node_child_with_descendant_wasm = wasmExports2["ts_node_child_with_descendant_wasm"]; + Module["_ts_node_descendant_for_index_wasm"] = _ts_node_descendant_for_index_wasm = wasmExports2["ts_node_descendant_for_index_wasm"]; + Module["_ts_node_named_descendant_for_index_wasm"] = _ts_node_named_descendant_for_index_wasm = wasmExports2["ts_node_named_descendant_for_index_wasm"]; + Module["_ts_node_descendant_for_position_wasm"] = _ts_node_descendant_for_position_wasm = wasmExports2["ts_node_descendant_for_position_wasm"]; + Module["_ts_node_named_descendant_for_position_wasm"] = _ts_node_named_descendant_for_position_wasm = wasmExports2["ts_node_named_descendant_for_position_wasm"]; + Module["_ts_node_start_point_wasm"] = _ts_node_start_point_wasm = wasmExports2["ts_node_start_point_wasm"]; + Module["_ts_node_end_point_wasm"] = _ts_node_end_point_wasm = wasmExports2["ts_node_end_point_wasm"]; + Module["_ts_node_start_index_wasm"] = _ts_node_start_index_wasm = wasmExports2["ts_node_start_index_wasm"]; + Module["_ts_node_end_index_wasm"] = _ts_node_end_index_wasm = wasmExports2["ts_node_end_index_wasm"]; + Module["_ts_node_to_string_wasm"] = _ts_node_to_string_wasm = wasmExports2["ts_node_to_string_wasm"]; + Module["_ts_node_children_wasm"] = _ts_node_children_wasm = wasmExports2["ts_node_children_wasm"]; + Module["_ts_node_named_children_wasm"] = _ts_node_named_children_wasm = wasmExports2["ts_node_named_children_wasm"]; + Module["_ts_node_descendants_of_type_wasm"] = _ts_node_descendants_of_type_wasm = wasmExports2["ts_node_descendants_of_type_wasm"]; + Module["_ts_node_is_named_wasm"] = _ts_node_is_named_wasm = wasmExports2["ts_node_is_named_wasm"]; + Module["_ts_node_has_changes_wasm"] = _ts_node_has_changes_wasm = wasmExports2["ts_node_has_changes_wasm"]; + Module["_ts_node_has_error_wasm"] = _ts_node_has_error_wasm = wasmExports2["ts_node_has_error_wasm"]; + Module["_ts_node_is_error_wasm"] = _ts_node_is_error_wasm = wasmExports2["ts_node_is_error_wasm"]; + Module["_ts_node_is_missing_wasm"] = _ts_node_is_missing_wasm = wasmExports2["ts_node_is_missing_wasm"]; + Module["_ts_node_is_extra_wasm"] = _ts_node_is_extra_wasm = wasmExports2["ts_node_is_extra_wasm"]; + Module["_ts_node_parse_state_wasm"] = _ts_node_parse_state_wasm = wasmExports2["ts_node_parse_state_wasm"]; + Module["_ts_node_next_parse_state_wasm"] = _ts_node_next_parse_state_wasm = wasmExports2["ts_node_next_parse_state_wasm"]; + Module["_ts_query_matches_wasm"] = _ts_query_matches_wasm = wasmExports2["ts_query_matches_wasm"]; + Module["_ts_query_captures_wasm"] = _ts_query_captures_wasm = wasmExports2["ts_query_captures_wasm"]; + Module["_memset"] = _memset = wasmExports2["memset"]; + Module["_memcpy"] = _memcpy = wasmExports2["memcpy"]; + Module["_memmove"] = _memmove = wasmExports2["memmove"]; + Module["_iswalpha"] = _iswalpha = wasmExports2["iswalpha"]; + Module["_iswblank"] = _iswblank = wasmExports2["iswblank"]; + Module["_iswdigit"] = _iswdigit = wasmExports2["iswdigit"]; + Module["_iswlower"] = _iswlower = wasmExports2["iswlower"]; + Module["_iswupper"] = _iswupper = wasmExports2["iswupper"]; + Module["_iswxdigit"] = _iswxdigit = wasmExports2["iswxdigit"]; + Module["_memchr"] = _memchr = wasmExports2["memchr"]; + Module["_strlen"] = _strlen = wasmExports2["strlen"]; + Module["_strcmp"] = _strcmp = wasmExports2["strcmp"]; + Module["_strncat"] = _strncat = wasmExports2["strncat"]; + Module["_strncpy"] = _strncpy = wasmExports2["strncpy"]; + Module["_towlower"] = _towlower = wasmExports2["towlower"]; + Module["_towupper"] = _towupper = wasmExports2["towupper"]; + _setThrew = wasmExports2["setThrew"]; + __emscripten_stack_restore = wasmExports2["_emscripten_stack_restore"]; + __emscripten_stack_alloc = wasmExports2["_emscripten_stack_alloc"]; + _emscripten_stack_get_current = wasmExports2["emscripten_stack_get_current"]; + ___wasm_apply_data_relocs = wasmExports2["__wasm_apply_data_relocs"]; + } + __name(assignWasmExports, "assignWasmExports"); + var wasmImports = { + /** @export */ + __heap_base: ___heap_base, + /** @export */ + __indirect_function_table: wasmTable, + /** @export */ + __memory_base: ___memory_base, + /** @export */ + __stack_high: ___stack_high, + /** @export */ + __stack_low: ___stack_low, + /** @export */ + __stack_pointer: ___stack_pointer, + /** @export */ + __table_base: ___table_base, + /** @export */ + _abort_js: __abort_js, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write, + /** @export */ + memory: wasmMemory, + /** @export */ + tree_sitter_log_callback: _tree_sitter_log_callback, + /** @export */ + tree_sitter_parse_callback: _tree_sitter_parse_callback, + /** @export */ + tree_sitter_progress_callback: _tree_sitter_progress_callback, + /** @export */ + tree_sitter_query_progress_callback: _tree_sitter_query_progress_callback + }; + function callMain(args2 = []) { + var entryFunction = resolveGlobalSymbol("main").sym; + if (!entryFunction) return; + args2.unshift(thisProgram); + var argc = args2.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args2.forEach((arg) => { + LE_HEAP_STORE_U32((argv_ptr >> 2) * 4, stringToUTF8OnStack(arg)); + argv_ptr += 4; + }); + LE_HEAP_STORE_U32((argv_ptr >> 2) * 4, 0); + try { + var ret = entryFunction(argc, argv); + exitJS( + ret, + /* implicit = */ + true + ); + return ret; + } catch (e) { + return handleException(e); + } + } + __name(callMain, "callMain"); + function run(args2 = arguments_) { + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + preRun(); + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + function doRun() { + Module["calledRun"] = true; + if (ABORT) return; + initRuntime(); + preMain(); + readyPromiseResolve?.(Module); + Module["onRuntimeInitialized"]?.(); + var noInitialRun = Module["noInitialRun"] || false; + if (!noInitialRun) callMain(args2); + postRun(); + } + __name(doRun, "doRun"); + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(() => { + setTimeout(() => Module["setStatus"](""), 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + __name(run, "run"); + var wasmExports; + wasmExports = await createWasm(); + run(); + if (runtimeInitialized) { + moduleRtn = Module; + } else { + moduleRtn = new Promise((resolve, reject) => { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + } + return moduleRtn; +} +__name(Module2, "Module"); +var web_tree_sitter_default = Module2; + +// src/bindings.ts +var Module3 = null; +async function initializeBinding(moduleOptions) { + return Module3 ??= await web_tree_sitter_default(moduleOptions); +} +__name(initializeBinding, "initializeBinding"); +function checkModule() { + return !!Module3; +} +__name(checkModule, "checkModule"); + +// src/parser.ts +var TRANSFER_BUFFER; +var LANGUAGE_VERSION; +var MIN_COMPATIBLE_VERSION; +var Parser = class { + static { + __name(this, "Parser"); + } + /** @internal */ + [0] = 0; + // Internal handle for Wasm + /** @internal */ + [1] = 0; + // Internal handle for Wasm + /** @internal */ + logCallback = null; + /** The parser's current language. */ + language = null; + /** + * This must always be called before creating a Parser. + * + * You can optionally pass in options to configure the Wasm module, the most common + * one being `locateFile` to help the module find the `.wasm` file. + */ + static async init(moduleOptions) { + setModule(await initializeBinding(moduleOptions)); + TRANSFER_BUFFER = C._ts_init(); + LANGUAGE_VERSION = C.getValue(TRANSFER_BUFFER, "i32"); + MIN_COMPATIBLE_VERSION = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + } + /** + * Create a new parser. + */ + constructor() { + this.initialize(); + } + /** @internal */ + initialize() { + if (!checkModule()) { + throw new Error("cannot construct a Parser before calling `init()`"); + } + C._ts_parser_new_wasm(); + this[0] = C.getValue(TRANSFER_BUFFER, "i32"); + this[1] = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + } + /** Delete the parser, freeing its resources. */ + delete() { + C._ts_parser_delete(this[0]); + C._free(this[1]); + this[0] = 0; + this[1] = 0; + } + /** + * Set the language that the parser should use for parsing. + * + * If the language was not successfully assigned, an error will be thrown. + * This happens if the language was generated with an incompatible + * version of the Tree-sitter CLI. Check the language's version using + * {@link Language#version} and compare it to this library's + * {@link LANGUAGE_VERSION} and {@link MIN_COMPATIBLE_VERSION} constants. + */ + setLanguage(language) { + let address; + if (!language) { + address = 0; + this.language = null; + } else if (language.constructor === Language) { + address = language[0]; + const version = C._ts_language_abi_version(address); + if (version < MIN_COMPATIBLE_VERSION || LANGUAGE_VERSION < version) { + throw new Error( + `Incompatible language version ${version}. Compatibility range ${MIN_COMPATIBLE_VERSION} through ${LANGUAGE_VERSION}.` + ); + } + this.language = language; + } else { + throw new Error("Argument must be a Language"); + } + C._ts_parser_set_language(this[0], address); + return this; + } + /** + * Parse a slice of UTF8 text. + * + * @param {string | ParseCallback} callback - The UTF8-encoded text to parse or a callback function. + * + * @param {Tree | null} [oldTree] - A previous syntax tree parsed from the same document. If the text of the + * document has changed since `oldTree` was created, then you must edit `oldTree` to match + * the new text using {@link Tree#edit}. + * + * @param {ParseOptions} [options] - Options for parsing the text. + * This can be used to set the included ranges, or a progress callback. + * + * @returns {Tree | null} A {@link Tree} if parsing succeeded, or `null` if: + * - The parser has not yet had a language assigned with {@link Parser#setLanguage}. + * - The progress callback returned true. + */ + parse(callback, oldTree, options) { + if (typeof callback === "string") { + C.currentParseCallback = (index) => callback.slice(index); + } else if (typeof callback === "function") { + C.currentParseCallback = callback; + } else { + throw new Error("Argument must be a string or a function"); + } + if (options?.progressCallback) { + C.currentProgressCallback = options.progressCallback; + } else { + C.currentProgressCallback = null; + } + if (this.logCallback) { + C.currentLogCallback = this.logCallback; + C._ts_parser_enable_logger_wasm(this[0], 1); + } else { + C.currentLogCallback = null; + C._ts_parser_enable_logger_wasm(this[0], 0); + } + let rangeCount = 0; + let rangeAddress = 0; + if (options?.includedRanges) { + rangeCount = options.includedRanges.length; + rangeAddress = C._calloc(rangeCount, SIZE_OF_RANGE); + let address = rangeAddress; + for (let i2 = 0; i2 < rangeCount; i2++) { + marshalRange(address, options.includedRanges[i2]); + address += SIZE_OF_RANGE; + } + } + const treeAddress = C._ts_parser_parse_wasm( + this[0], + this[1], + oldTree ? oldTree[0] : 0, + rangeAddress, + rangeCount + ); + if (!treeAddress) { + C.currentParseCallback = null; + C.currentLogCallback = null; + C.currentProgressCallback = null; + return null; + } + if (!this.language) { + throw new Error("Parser must have a language to parse"); + } + const result = new Tree(INTERNAL, treeAddress, this.language, C.currentParseCallback); + C.currentParseCallback = null; + C.currentLogCallback = null; + C.currentProgressCallback = null; + return result; + } + /** + * Instruct the parser to start the next parse from the beginning. + * + * If the parser previously failed because of a callback, + * then by default, it will resume where it left off on the + * next call to {@link Parser#parse} or other parsing functions. + * If you don't want to resume, and instead intend to use this parser to + * parse some other document, you must call `reset` first. + */ + reset() { + C._ts_parser_reset(this[0]); + } + /** Get the ranges of text that the parser will include when parsing. */ + getIncludedRanges() { + C._ts_parser_included_ranges_wasm(this[0]); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i2 = 0; i2 < count; i2++) { + result[i2] = unmarshalRange(address); + address += SIZE_OF_RANGE; + } + C._free(buffer); + } + return result; + } + /** Set the logging callback that a parser should use during parsing. */ + setLogger(callback) { + if (!callback) { + this.logCallback = null; + } else if (typeof callback !== "function") { + throw new Error("Logger callback must be a function"); + } else { + this.logCallback = callback; + } + return this; + } + /** Get the parser's current logger. */ + getLogger() { + return this.logCallback; + } +}; + +// src/query.ts +var PREDICATE_STEP_TYPE_CAPTURE = 1; +var PREDICATE_STEP_TYPE_STRING = 2; +var QUERY_WORD_REGEX = /[\w-]+/g; +var CaptureQuantifier = { + Zero: 0, + ZeroOrOne: 1, + ZeroOrMore: 2, + One: 3, + OneOrMore: 4 +}; +var isCaptureStep = /* @__PURE__ */ __name((step) => step.type === "capture", "isCaptureStep"); +var isStringStep = /* @__PURE__ */ __name((step) => step.type === "string", "isStringStep"); +var QueryErrorKind = { + Syntax: 1, + NodeName: 2, + FieldName: 3, + CaptureName: 4, + PatternStructure: 5 +}; +var QueryError = class _QueryError extends Error { + constructor(kind, info2, index, length) { + super(_QueryError.formatMessage(kind, info2)); + this.kind = kind; + this.info = info2; + this.index = index; + this.length = length; + this.name = "QueryError"; + } + static { + __name(this, "QueryError"); + } + /** Formats an error message based on the error kind and info */ + static formatMessage(kind, info2) { + switch (kind) { + case QueryErrorKind.NodeName: + return `Bad node name '${info2.word}'`; + case QueryErrorKind.FieldName: + return `Bad field name '${info2.word}'`; + case QueryErrorKind.CaptureName: + return `Bad capture name @${info2.word}`; + case QueryErrorKind.PatternStructure: + return `Bad pattern structure at offset ${info2.suffix}`; + case QueryErrorKind.Syntax: + return `Bad syntax at offset ${info2.suffix}`; + } + } +}; +function parseAnyPredicate(steps, index, operator, textPredicates) { + if (steps.length !== 3) { + throw new Error( + `Wrong number of arguments to \`#${operator}\` predicate. Expected 2, got ${steps.length - 1}` + ); + } + if (!isCaptureStep(steps[1])) { + throw new Error( + `First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}"` + ); + } + const isPositive = operator === "eq?" || operator === "any-eq?"; + const matchAll = !operator.startsWith("any-"); + if (isCaptureStep(steps[2])) { + const captureName1 = steps[1].name; + const captureName2 = steps[2].name; + textPredicates[index].push((captures) => { + const nodes1 = []; + const nodes2 = []; + for (const c of captures) { + if (c.name === captureName1) nodes1.push(c.node); + if (c.name === captureName2) nodes2.push(c.node); + } + const compare = /* @__PURE__ */ __name((n1, n2, positive) => { + return positive ? n1.text === n2.text : n1.text !== n2.text; + }, "compare"); + return matchAll ? nodes1.every((n1) => nodes2.some((n2) => compare(n1, n2, isPositive))) : nodes1.some((n1) => nodes2.some((n2) => compare(n1, n2, isPositive))); + }); + } else { + const captureName = steps[1].name; + const stringValue = steps[2].value; + const matches = /* @__PURE__ */ __name((n) => n.text === stringValue, "matches"); + const doesNotMatch = /* @__PURE__ */ __name((n) => n.text !== stringValue, "doesNotMatch"); + textPredicates[index].push((captures) => { + const nodes = []; + for (const c of captures) { + if (c.name === captureName) nodes.push(c.node); + } + const test = isPositive ? matches : doesNotMatch; + return matchAll ? nodes.every(test) : nodes.some(test); + }); + } +} +__name(parseAnyPredicate, "parseAnyPredicate"); +function parseMatchPredicate(steps, index, operator, textPredicates) { + if (steps.length !== 3) { + throw new Error( + `Wrong number of arguments to \`#${operator}\` predicate. Expected 2, got ${steps.length - 1}.` + ); + } + if (steps[1].type !== "capture") { + throw new Error( + `First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}".` + ); + } + if (steps[2].type !== "string") { + throw new Error( + `Second argument of \`#${operator}\` predicate must be a string. Got @${steps[2].name}.` + ); + } + const isPositive = operator === "match?" || operator === "any-match?"; + const matchAll = !operator.startsWith("any-"); + const captureName = steps[1].name; + const regex = new RegExp(steps[2].value); + textPredicates[index].push((captures) => { + const nodes = []; + for (const c of captures) { + if (c.name === captureName) nodes.push(c.node.text); + } + const test = /* @__PURE__ */ __name((text, positive) => { + return positive ? regex.test(text) : !regex.test(text); + }, "test"); + if (nodes.length === 0) return !isPositive; + return matchAll ? nodes.every((text) => test(text, isPositive)) : nodes.some((text) => test(text, isPositive)); + }); +} +__name(parseMatchPredicate, "parseMatchPredicate"); +function parseAnyOfPredicate(steps, index, operator, textPredicates) { + if (steps.length < 2) { + throw new Error( + `Wrong number of arguments to \`#${operator}\` predicate. Expected at least 1. Got ${steps.length - 1}.` + ); + } + if (steps[1].type !== "capture") { + throw new Error( + `First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}".` + ); + } + const isPositive = operator === "any-of?"; + const captureName = steps[1].name; + const stringSteps = steps.slice(2); + if (!stringSteps.every(isStringStep)) { + throw new Error( + `Arguments to \`#${operator}\` predicate must be strings.".` + ); + } + const values = stringSteps.map((s) => s.value); + textPredicates[index].push((captures) => { + const nodes = []; + for (const c of captures) { + if (c.name === captureName) nodes.push(c.node.text); + } + if (nodes.length === 0) return !isPositive; + return nodes.every((text) => values.includes(text)) === isPositive; + }); +} +__name(parseAnyOfPredicate, "parseAnyOfPredicate"); +function parseIsPredicate(steps, index, operator, assertedProperties, refutedProperties) { + if (steps.length < 2 || steps.length > 3) { + throw new Error( + `Wrong number of arguments to \`#${operator}\` predicate. Expected 1 or 2. Got ${steps.length - 1}.` + ); + } + if (!steps.every(isStringStep)) { + throw new Error( + `Arguments to \`#${operator}\` predicate must be strings.".` + ); + } + const properties = operator === "is?" ? assertedProperties : refutedProperties; + if (!properties[index]) properties[index] = {}; + properties[index][steps[1].value] = steps[2]?.value ?? null; +} +__name(parseIsPredicate, "parseIsPredicate"); +function parseSetDirective(steps, index, setProperties) { + if (steps.length < 2 || steps.length > 3) { + throw new Error(`Wrong number of arguments to \`#set!\` predicate. Expected 1 or 2. Got ${steps.length - 1}.`); + } + if (!steps.every(isStringStep)) { + throw new Error(`Arguments to \`#set!\` predicate must be strings.".`); + } + if (!setProperties[index]) setProperties[index] = {}; + setProperties[index][steps[1].value] = steps[2]?.value ?? null; +} +__name(parseSetDirective, "parseSetDirective"); +function parsePattern(index, stepType, stepValueId, captureNames, stringValues, steps, textPredicates, predicates, setProperties, assertedProperties, refutedProperties) { + if (stepType === PREDICATE_STEP_TYPE_CAPTURE) { + const name2 = captureNames[stepValueId]; + steps.push({ type: "capture", name: name2 }); + } else if (stepType === PREDICATE_STEP_TYPE_STRING) { + steps.push({ type: "string", value: stringValues[stepValueId] }); + } else if (steps.length > 0) { + if (steps[0].type !== "string") { + throw new Error("Predicates must begin with a literal value"); + } + const operator = steps[0].value; + switch (operator) { + case "any-not-eq?": + case "not-eq?": + case "any-eq?": + case "eq?": + parseAnyPredicate(steps, index, operator, textPredicates); + break; + case "any-not-match?": + case "not-match?": + case "any-match?": + case "match?": + parseMatchPredicate(steps, index, operator, textPredicates); + break; + case "not-any-of?": + case "any-of?": + parseAnyOfPredicate(steps, index, operator, textPredicates); + break; + case "is?": + case "is-not?": + parseIsPredicate(steps, index, operator, assertedProperties, refutedProperties); + break; + case "set!": + parseSetDirective(steps, index, setProperties); + break; + default: + predicates[index].push({ operator, operands: steps.slice(1) }); + } + steps.length = 0; + } +} +__name(parsePattern, "parsePattern"); +var Query = class { + static { + __name(this, "Query"); + } + /** @internal */ + [0] = 0; + // Internal handle for Wasm + /** @internal */ + exceededMatchLimit; + /** @internal */ + textPredicates; + /** The names of the captures used in the query. */ + captureNames; + /** The quantifiers of the captures used in the query. */ + captureQuantifiers; + /** + * The other user-defined predicates associated with the given index. + * + * This includes predicates with operators other than: + * - `match?` + * - `eq?` and `not-eq?` + * - `any-of?` and `not-any-of?` + * - `is?` and `is-not?` + * - `set!` + */ + predicates; + /** The properties for predicates with the operator `set!`. */ + setProperties; + /** The properties for predicates with the operator `is?`. */ + assertedProperties; + /** The properties for predicates with the operator `is-not?`. */ + refutedProperties; + /** The maximum number of in-progress matches for this cursor. */ + matchLimit; + /** + * Create a new query from a string containing one or more S-expression + * patterns. + * + * The query is associated with a particular language, and can only be run + * on syntax nodes parsed with that language. References to Queries can be + * shared between multiple threads. + * + * @link {@see https://tree-sitter.github.io/tree-sitter/using-parsers/queries} + */ + constructor(language, source) { + const sourceLength = C.lengthBytesUTF8(source); + const sourceAddress = C._malloc(sourceLength + 1); + C.stringToUTF8(source, sourceAddress, sourceLength + 1); + const address = C._ts_query_new( + language[0], + sourceAddress, + sourceLength, + TRANSFER_BUFFER, + TRANSFER_BUFFER + SIZE_OF_INT + ); + if (!address) { + const errorId = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const errorByte = C.getValue(TRANSFER_BUFFER, "i32"); + const errorIndex = C.UTF8ToString(sourceAddress, errorByte).length; + const suffix = source.slice(errorIndex, errorIndex + 100).split("\n")[0]; + const word = suffix.match(QUERY_WORD_REGEX)?.[0] ?? ""; + C._free(sourceAddress); + switch (errorId) { + case QueryErrorKind.Syntax: + throw new QueryError(QueryErrorKind.Syntax, { suffix: `${errorIndex}: '${suffix}'...` }, errorIndex, 0); + case QueryErrorKind.NodeName: + throw new QueryError(errorId, { word }, errorIndex, word.length); + case QueryErrorKind.FieldName: + throw new QueryError(errorId, { word }, errorIndex, word.length); + case QueryErrorKind.CaptureName: + throw new QueryError(errorId, { word }, errorIndex, word.length); + case QueryErrorKind.PatternStructure: + throw new QueryError(errorId, { suffix: `${errorIndex}: '${suffix}'...` }, errorIndex, 0); + } + } + const stringCount = C._ts_query_string_count(address); + const captureCount = C._ts_query_capture_count(address); + const patternCount = C._ts_query_pattern_count(address); + const captureNames = new Array(captureCount); + const captureQuantifiers = new Array(patternCount); + const stringValues = new Array(stringCount); + for (let i2 = 0; i2 < captureCount; i2++) { + const nameAddress = C._ts_query_capture_name_for_id( + address, + i2, + TRANSFER_BUFFER + ); + const nameLength = C.getValue(TRANSFER_BUFFER, "i32"); + captureNames[i2] = C.UTF8ToString(nameAddress, nameLength); + } + for (let i2 = 0; i2 < patternCount; i2++) { + const captureQuantifiersArray = new Array(captureCount); + for (let j = 0; j < captureCount; j++) { + const quantifier = C._ts_query_capture_quantifier_for_id(address, i2, j); + captureQuantifiersArray[j] = quantifier; + } + captureQuantifiers[i2] = captureQuantifiersArray; + } + for (let i2 = 0; i2 < stringCount; i2++) { + const valueAddress = C._ts_query_string_value_for_id( + address, + i2, + TRANSFER_BUFFER + ); + const nameLength = C.getValue(TRANSFER_BUFFER, "i32"); + stringValues[i2] = C.UTF8ToString(valueAddress, nameLength); + } + const setProperties = new Array(patternCount); + const assertedProperties = new Array(patternCount); + const refutedProperties = new Array(patternCount); + const predicates = new Array(patternCount); + const textPredicates = new Array(patternCount); + for (let i2 = 0; i2 < patternCount; i2++) { + const predicatesAddress = C._ts_query_predicates_for_pattern(address, i2, TRANSFER_BUFFER); + const stepCount = C.getValue(TRANSFER_BUFFER, "i32"); + predicates[i2] = []; + textPredicates[i2] = []; + const steps = new Array(); + let stepAddress = predicatesAddress; + for (let j = 0; j < stepCount; j++) { + const stepType = C.getValue(stepAddress, "i32"); + stepAddress += SIZE_OF_INT; + const stepValueId = C.getValue(stepAddress, "i32"); + stepAddress += SIZE_OF_INT; + parsePattern( + i2, + stepType, + stepValueId, + captureNames, + stringValues, + steps, + textPredicates, + predicates, + setProperties, + assertedProperties, + refutedProperties + ); + } + Object.freeze(textPredicates[i2]); + Object.freeze(predicates[i2]); + Object.freeze(setProperties[i2]); + Object.freeze(assertedProperties[i2]); + Object.freeze(refutedProperties[i2]); + } + C._free(sourceAddress); + this[0] = address; + this.captureNames = captureNames; + this.captureQuantifiers = captureQuantifiers; + this.textPredicates = textPredicates; + this.predicates = predicates; + this.setProperties = setProperties; + this.assertedProperties = assertedProperties; + this.refutedProperties = refutedProperties; + this.exceededMatchLimit = false; + } + /** Delete the query, freeing its resources. */ + delete() { + C._ts_query_delete(this[0]); + this[0] = 0; + } + /** + * Iterate over all of the matches in the order that they were found. + * + * Each match contains the index of the pattern that matched, and a list of + * captures. Because multiple patterns can match the same set of nodes, + * one match may contain captures that appear *before* some of the + * captures from a previous match. + * + * @param {Node} node - The node to execute the query on. + * + * @param {QueryOptions} options - Options for query execution. + */ + matches(node, options = {}) { + const startPosition = options.startPosition ?? ZERO_POINT; + const endPosition = options.endPosition ?? ZERO_POINT; + const startIndex = options.startIndex ?? 0; + const endIndex = options.endIndex ?? 0; + const startContainingPosition = options.startContainingPosition ?? ZERO_POINT; + const endContainingPosition = options.endContainingPosition ?? ZERO_POINT; + const startContainingIndex = options.startContainingIndex ?? 0; + const endContainingIndex = options.endContainingIndex ?? 0; + const matchLimit = options.matchLimit ?? 4294967295; + const maxStartDepth = options.maxStartDepth ?? 4294967295; + const progressCallback = options.progressCallback; + if (typeof matchLimit !== "number") { + throw new Error("Arguments must be numbers"); + } + this.matchLimit = matchLimit; + if (endIndex !== 0 && startIndex > endIndex) { + throw new Error("`startIndex` cannot be greater than `endIndex`"); + } + if (endPosition !== ZERO_POINT && (startPosition.row > endPosition.row || startPosition.row === endPosition.row && startPosition.column > endPosition.column)) { + throw new Error("`startPosition` cannot be greater than `endPosition`"); + } + if (endContainingIndex !== 0 && startContainingIndex > endContainingIndex) { + throw new Error("`startContainingIndex` cannot be greater than `endContainingIndex`"); + } + if (endContainingPosition !== ZERO_POINT && (startContainingPosition.row > endContainingPosition.row || startContainingPosition.row === endContainingPosition.row && startContainingPosition.column > endContainingPosition.column)) { + throw new Error("`startContainingPosition` cannot be greater than `endContainingPosition`"); + } + if (progressCallback) { + C.currentQueryProgressCallback = progressCallback; + } + marshalNode(node); + C._ts_query_matches_wasm( + this[0], + node.tree[0], + startPosition.row, + startPosition.column, + endPosition.row, + endPosition.column, + startIndex, + endIndex, + startContainingPosition.row, + startContainingPosition.column, + endContainingPosition.row, + endContainingPosition.column, + startContainingIndex, + endContainingIndex, + matchLimit, + maxStartDepth + ); + const rawCount = C.getValue(TRANSFER_BUFFER, "i32"); + const startAddress = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const didExceedMatchLimit = C.getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"); + const result = new Array(rawCount); + this.exceededMatchLimit = Boolean(didExceedMatchLimit); + let filteredCount = 0; + let address = startAddress; + for (let i2 = 0; i2 < rawCount; i2++) { + const patternIndex = C.getValue(address, "i32"); + address += SIZE_OF_INT; + const captureCount = C.getValue(address, "i32"); + address += SIZE_OF_INT; + const captures = new Array(captureCount); + address = unmarshalCaptures(this, node.tree, address, patternIndex, captures); + if (this.textPredicates[patternIndex].every((p) => p(captures))) { + result[filteredCount] = { patternIndex, captures }; + const setProperties = this.setProperties[patternIndex]; + result[filteredCount].setProperties = setProperties; + const assertedProperties = this.assertedProperties[patternIndex]; + result[filteredCount].assertedProperties = assertedProperties; + const refutedProperties = this.refutedProperties[patternIndex]; + result[filteredCount].refutedProperties = refutedProperties; + filteredCount++; + } + } + result.length = filteredCount; + C._free(startAddress); + C.currentQueryProgressCallback = null; + return result; + } + /** + * Iterate over all of the individual captures in the order that they + * appear. + * + * This is useful if you don't care about which pattern matched, and just + * want a single, ordered sequence of captures. + * + * @param {Node} node - The node to execute the query on. + * + * @param {QueryOptions} options - Options for query execution. + */ + captures(node, options = {}) { + const startPosition = options.startPosition ?? ZERO_POINT; + const endPosition = options.endPosition ?? ZERO_POINT; + const startIndex = options.startIndex ?? 0; + const endIndex = options.endIndex ?? 0; + const startContainingPosition = options.startContainingPosition ?? ZERO_POINT; + const endContainingPosition = options.endContainingPosition ?? ZERO_POINT; + const startContainingIndex = options.startContainingIndex ?? 0; + const endContainingIndex = options.endContainingIndex ?? 0; + const matchLimit = options.matchLimit ?? 4294967295; + const maxStartDepth = options.maxStartDepth ?? 4294967295; + const progressCallback = options.progressCallback; + if (typeof matchLimit !== "number") { + throw new Error("Arguments must be numbers"); + } + this.matchLimit = matchLimit; + if (endIndex !== 0 && startIndex > endIndex) { + throw new Error("`startIndex` cannot be greater than `endIndex`"); + } + if (endPosition !== ZERO_POINT && (startPosition.row > endPosition.row || startPosition.row === endPosition.row && startPosition.column > endPosition.column)) { + throw new Error("`startPosition` cannot be greater than `endPosition`"); + } + if (endContainingIndex !== 0 && startContainingIndex > endContainingIndex) { + throw new Error("`startContainingIndex` cannot be greater than `endContainingIndex`"); + } + if (endContainingPosition !== ZERO_POINT && (startContainingPosition.row > endContainingPosition.row || startContainingPosition.row === endContainingPosition.row && startContainingPosition.column > endContainingPosition.column)) { + throw new Error("`startContainingPosition` cannot be greater than `endContainingPosition`"); + } + if (progressCallback) { + C.currentQueryProgressCallback = progressCallback; + } + marshalNode(node); + C._ts_query_captures_wasm( + this[0], + node.tree[0], + startPosition.row, + startPosition.column, + endPosition.row, + endPosition.column, + startIndex, + endIndex, + startContainingPosition.row, + startContainingPosition.column, + endContainingPosition.row, + endContainingPosition.column, + startContainingIndex, + endContainingIndex, + matchLimit, + maxStartDepth + ); + const count = C.getValue(TRANSFER_BUFFER, "i32"); + const startAddress = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const didExceedMatchLimit = C.getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"); + const result = new Array(); + this.exceededMatchLimit = Boolean(didExceedMatchLimit); + const captures = new Array(); + let address = startAddress; + for (let i2 = 0; i2 < count; i2++) { + const patternIndex = C.getValue(address, "i32"); + address += SIZE_OF_INT; + const captureCount = C.getValue(address, "i32"); + address += SIZE_OF_INT; + const captureIndex = C.getValue(address, "i32"); + address += SIZE_OF_INT; + captures.length = captureCount; + address = unmarshalCaptures(this, node.tree, address, patternIndex, captures); + if (this.textPredicates[patternIndex].every((p) => p(captures))) { + const capture = captures[captureIndex]; + const setProperties = this.setProperties[patternIndex]; + capture.setProperties = setProperties; + const assertedProperties = this.assertedProperties[patternIndex]; + capture.assertedProperties = assertedProperties; + const refutedProperties = this.refutedProperties[patternIndex]; + capture.refutedProperties = refutedProperties; + result.push(capture); + } + } + C._free(startAddress); + C.currentQueryProgressCallback = null; + return result; + } + /** Get the predicates for a given pattern. */ + predicatesForPattern(patternIndex) { + return this.predicates[patternIndex]; + } + /** + * Disable a certain capture within a query. + * + * This prevents the capture from being returned in matches, and also + * avoids any resource usage associated with recording the capture. + */ + disableCapture(captureName) { + const captureNameLength = C.lengthBytesUTF8(captureName); + const captureNameAddress = C._malloc(captureNameLength + 1); + C.stringToUTF8(captureName, captureNameAddress, captureNameLength + 1); + C._ts_query_disable_capture(this[0], captureNameAddress, captureNameLength); + C._free(captureNameAddress); + } + /** + * Disable a certain pattern within a query. + * + * This prevents the pattern from matching, and also avoids any resource + * usage associated with the pattern. This throws an error if the pattern + * index is out of bounds. + */ + disablePattern(patternIndex) { + if (patternIndex >= this.predicates.length) { + throw new Error( + `Pattern index is ${patternIndex} but the pattern count is ${this.predicates.length}` + ); + } + C._ts_query_disable_pattern(this[0], patternIndex); + } + /** + * Check if, on its last execution, this cursor exceeded its maximum number + * of in-progress matches. + */ + didExceedMatchLimit() { + return this.exceededMatchLimit; + } + /** Get the byte offset where the given pattern starts in the query's source. */ + startIndexForPattern(patternIndex) { + if (patternIndex >= this.predicates.length) { + throw new Error( + `Pattern index is ${patternIndex} but the pattern count is ${this.predicates.length}` + ); + } + return C._ts_query_start_byte_for_pattern(this[0], patternIndex); + } + /** Get the byte offset where the given pattern ends in the query's source. */ + endIndexForPattern(patternIndex) { + if (patternIndex >= this.predicates.length) { + throw new Error( + `Pattern index is ${patternIndex} but the pattern count is ${this.predicates.length}` + ); + } + return C._ts_query_end_byte_for_pattern(this[0], patternIndex); + } + /** Get the number of patterns in the query. */ + patternCount() { + return C._ts_query_pattern_count(this[0]); + } + /** Get the index for a given capture name. */ + captureIndexForName(captureName) { + return this.captureNames.indexOf(captureName); + } + /** Check if a given pattern within a query has a single root node. */ + isPatternRooted(patternIndex) { + return C._ts_query_is_pattern_rooted(this[0], patternIndex) === 1; + } + /** Check if a given pattern within a query has a single root node. */ + isPatternNonLocal(patternIndex) { + return C._ts_query_is_pattern_non_local(this[0], patternIndex) === 1; + } + /** + * Check if a given step in a query is 'definite'. + * + * A query step is 'definite' if its parent pattern will be guaranteed to + * match successfully once it reaches the step. + */ + isPatternGuaranteedAtStep(byteIndex) { + return C._ts_query_is_pattern_guaranteed_at_step(this[0], byteIndex) === 1; + } +}; + +// export { +// CaptureQuantifier, +// Edit, +// LANGUAGE_VERSION, +// Language, +// LookaheadIterator, +// MIN_COMPATIBLE_VERSION, +// Node, +// Parser, +// Query, +// Tree, +// TreeCursor +// }; diff --git a/common/modules/mixly-modules/workers/common/tree-sitter/web-tree-sitter.wasm b/common/modules/mixly-modules/workers/common/tree-sitter/web-tree-sitter.wasm new file mode 100644 index 0000000000000000000000000000000000000000..30ec43129cacf1859ff3ec11b905231542ffcc23 GIT binary patch literal 195953 zcmeFadz4+*ecyLp_kCyP0vLir03y#h7)b+}5TOPOWC*sJgGGX%Nt$XGR~OrA6$FV9 zi5U=&!4RUl7y^T)fjda*GZjP@hh_BNUG~3N}Gor zyNwb{WYit#`q}uRm;MtynY=Vzi^9o^SK=4zo?qhnlAB1m#xEsbPIv77 z@Tp5@PF^~9>cXXG&u^T(u)cEn%*uz~*Zt7xlOJ9`v#}Dj)0K0VcdtBm>FM<|7dBST zom^kJbml)>Ir;3$sS8nbljonPNLxq2z;-K2v0d;0A8ODj>N z8v8faS5{75I{F+nUJE7PFaqG&!2mG5++()#RMHx*DBK>YrJ(|tp zYh;=xxO*k8e)bom0hjCH@^j(xg>bp{%YOGtxP0o%{`D%C&i53r#yd`)glV2Lk(_*b zN$W;QOJTt9X0nU#|(r_XFe9}q&H ze(plFbAcCUdGY)y-d+00b5ET=d-Cb?&!5|feki$h)4PpR8_=#_{ov+Tr=B`<^76|1 zB}gFpR5F^bb?(%2E770YT>L|4R?fn4Zt0IDyEheId0|6D3GcsWbMIkfZti#Ez0-B- zL4WA{`bodOy>n?}{hTJZce^GwK5}6tdf*+?ErbE7@=3LF=5+MS@og$_{`}f0SmE?Z zgwgsbpndY(%7>$$jQ4H-^7P8t6-NHKxY+(ZB4nkR-Wy>OH}>E{(O-=BY~RK?AQXKj zUflle)6cK3ubiU~gDZMH7Tzs60^a{bEbLs67+ODB5BHD9bCYMG_az~vE~Ozi1QLBR z7T~7doH_UO+2>EMoDRfwDf+`h-Up#6P<^l44!`T}9_gOB^x;bvPCdO6J)_%GXU{$V zT(nC)*24CbB=5O~K;p@pr%zqjcz(Sh!fWv@<2qpc%sE7-Y3h57pU_xSWg5BP9hc*Z z&HIbbpE|d320~bGNZ^l7wNf{K`PA9x$0YJ{e8;#IG}q}fPeZkrT>CNaa7LgHz*#?keq-fybakrw)Z25&V&uT7v(c4z zjR!gP9&Se%Y^;E{QzFQf3(-pw1fiSLXD(Tb)Ub*E$c?X>;lC(!TY)`&{=!G1?@MNz z-!-;hNjf|^a}JsF$z&(DHSItg7G%*U5;0T#bmg2oMhiXzA|&Xd?@i_>?_DfB|DNRb z$@48#7)reC5)J8|6yKi&2BHM)3$^|6B&UrVN?bm3>5R0f%X}=cBxoe$b1NICPM_L1 z6<&Tc*(`~kzp%2delCUAS2x$a^!!s(FW)p_8+JnG$#dsV*IoX;>2vFwGaJvIJpZ8& zi5)$#Z^b(pyh}->hlk%Z(fZ-GF!?=Gq~AY7Lr*^|mC!J6XyRYSlA11pG`SRHUU>B{ zVo}2MD`7pn`-bUs`dy%a@b;fuo=(3Fvd}a6eff;4Fx^m7?)1t9xZh~|-{U*C40=*%OaoJ$f9-}zHsvP*=d1B9+Vt<* zm~vNN@p$}ri-k1BbbmK~cT;yup&)3divIefJwJsO(Rc8%%)tf-U!D}&%8^!{9@(!= zcPc3`-IthmQuJ4CXL%COte<-Bxl`+nmFt$iWRd3AVWc)80;vB^EEVH-)9p`{_?1{H zZK}50{G~~o)AjuB7bk6o{%!!kFIZHDUT=^Ue|z#$@?o=V_@ZfbQZsbEN!I-Qq=@Tp zQ{;a$IlGl9sWLU`zcrzjX?gN<=DBHDNMlVk;rais6ZB5K+9GfN#ss}#fHyDtv*xX> zqqT*#NgDqz@p~FfZQJB#uK$?{1{=YF^Bt(-uUl`s#~?1oZ@#d#))X85&zoyaz4__M z8;WT<+#vc3+hxw-#gQ*%=<{;I7Bk7cVY|B20YUf5W#t*ZZiGK6681^wcV z{<{fvT9e*T;K$u+Fl3)Qwej?`jWPCDJoxaUwruNZ{kO5aVGOJ2u-#$|*~Jb|o;!be zCHkQ_I4KvNJrzBx+o!M>*P{R2k58X@2E+Eh^gXeamG$U{egFIg48iEn#y!fv5DLBO zPM&^tJz8mliG%NTwz?rxm_aA@{NeIJ_rk+{oPAAfco z|LVVrZ#y{^9s^KBim;w=Rac__BEI#;mmw_h=i_}hRI@=C{Kx3Ec%cq7oVsw~>_<-8 zEu)K zEAgL<|InXI{zUS}lWWO$Cx0~g%kgL9|0e!R@sGv-b^I3y`^5cU_`Uw8k}nduxsojB z@lx_gnN-ntWy^W;z)ZY9u0HiE(dtsNkSEof{7El9I1>*j8C7q_7t2&NK5%>{(sjN} zbQ$?4<>S>O$$XyV(Y;YLH^}2W9j)qG{amz4(PSx!$~3f^r+beO=vf{&oNaE{{nQPo zb;GF}9>!`p8?6r9;2!#oXln4c2zM#Q$(#;GQ59cgjFDcA)N)j+cM6A5FxE9HY0Sr& zd9;)a3&yRR5krhu%S`w4W$WSWO4ZFvaTq{)>$5%}_S zf16Hr#F56B?(gUau`jor2{d$gBpFV6Y312K1EeY~t>*E8B)Xfqgc9)sGf~Rm0ARdU z#uQA#Pq9U#$#+UGBt!(ER0N9%fyzNk$mdoDjpxS`B5eyFsTsMND z6~NF9VCV)gv;aeE3Jk5c4~EwEU}$XuL(ec^)~h9$W{MBZM1%cZfin?onN@Z$y0f|- zT?9lbaiY47GP*m|lrzmPCEXIT_SCWxEYf0?KO7!J1r!A>C1G-aW6ResVUc&9 z-Wf&oEDjb0R&l`ys^~UA_!SJusv8-hZ*^R7ru9fr25$--2vS@Nu>A@Jvee&kk3cirM8=29+nFx-mfm z)M{_6he0L`vRx&|XJC#3VRA4^s;gHnl^xBadOt0y8~>WBmbc;E7@;*xBzlfLG!uI; zcZ{cQ0g`GGYR*8(s`o!S19FRuCaWueNKI$=MkC?vA%s{Yw1I&N;Wl~be)DX-Mh^7V zyd8WwjoVkmzA)A383A%M++)b_pgL-?!xO(RVzX*IJ0MnG|4AhVrV%T8$)iM4yGCvn zkedm)NNbRbkN~-iD*CROWDjUgDUFm_6YU55CJla*2EVcJtC}@_W8)VNi)nR&-$eKY zA4L-I8yml>M}JfJtt-~}jVJh317Jk>^*9swuhrl;5laXBwm0F|zox3?EyQn9<2PyW z8&}{r%)S8cw6+Pqsql-?E7C!ArGOxeW8j;Duc7E@8ofhNfxFDpFji(5uMSj}r3|?9 zRxly@$uB+tW&t?ZJ+o&pSPNWxH38s@5wM3_ACX|Hu3pcik&p&@wuX|qDye@pd8mx{ zjt=k1V_LGbZ}D(6>vt;lX8f=O0t13iN3#P!b~O?2e<@B{Qg~OS-ynH2e6{Z^BB0v0 zChZ_?1PbGej1e&=ObB(!UGbfj`EF2TXpV$&W*S?SJfzv&6^{ar)9N0z!+&?h$I47{ zRI1cMbt!pV4K3!`S>z^MU3FDf_jkp#i2|$^*3dddhr5y91#!zw&;e~}J_JDE9mJMo zXGfy{>nu1;2|o=$g1KsKlx=3mPln0U!v!FLoA`x*Jdh0UPEpkWySqB-GXNBL^J@O? zQ~=EC=b4mdFa5~ir1_3;tT>I@V)^4Afy{t z*=iBfH5Y(Z!P1~KkcJGmfhs_fve0zNBw(aMU5Se-Ngi7;G7*Hr+@OjE?|@{h*rg7w zRsF{RM>Kl2iXKE_3ErQpf0I$RJ5FL#*7ar!}avz{D z!Tsbn(~C#rJN4sO+0x)dLJ-?x-ZBXl5V`G=MT8YrOfdv3Ew}=jt)g5~2AifBG0{=p zw=PBBi>k7_;x?qfB`dmA!ql5DcR;NvHFP-`9pp~*TMy=Hvd&m!A|ws`rQs=5&eEf5 z+*w@>j1z``HFgctTOhk`(KdmgrTXZOB*(U4kU4Y>0ZF|>l#Hb4=`sqH7Q}!p2{>1i zFmS;n@9JS_p<8t?Ba>;Til`04|9*OrXQj*}4D-Af>})!;@N!iO*7X=yOQq)!f&q4B z6O7rtY7NQ^BVQ=yJTi*emd1Eci<&~dWA%-^m(Q&Nc%ZqExA(5TaV-Dtm+zK=4;f2Q zW_fG1$V9#TH5KdHKy>{HKo#Y<(c`u#W42QgfKBLgrEEkR{Y=iTb+*FeDVvfP3W4>}L;wOH$3 z)ZoX%Y0(X%VIG)6K zW}eXOgz51q;D1U;NnVd?rWcAuQF^7Dqw#y1G7IA(wNee^wYD8Ruv*L@t8hE|wY)S5 z%b(FOK#?3y^H{dJb|l$nY66tsdefGBAeP((=BwM!uC7+Un=V+e}-Zj4E}0klp7nh z$0Wl#3@Z3cH#4izG|9wg`u}a};4{gl2IBIWWLnG4u~D5!R>i!*78vRx>)Eg60*no7 z2m>7P4w*691)V^s!!oT7u3?SxGp)WFK|X`QS4dTQNyZ7}4f0#aCP_ECNMvQU;9_1a z*|2k?_B{jP(?{Zf2?MBpWa72MdC&!YRtcJ}`o8#^1FXc?6|j*3_^O7FQ}L;K8n1C} z6kRSWk69g!-VtWJk4sDHkUAE?&F4iq`U1kn`~Dxe3nfaF9!df2UF`L)+=&~)-&>Pa);XO|(rA$=u7gWpKAv7v!GAZwx)WT4cd6AIuaXtS7Dgv4}w z(Kj{ArL)${A z^wZ)4y2>(^J2EdhM7Znmyesp#WAj-0yV&KzjbxNP^J$QBj7HZI)$xvNq6j$r#7tOLd=)X%czX=IT3H1n?M1MjM+G!4IwMcPvOM< zNq?6+=n+_BaEjJCdm%0E7G!1u7O>pOXJv!ta|feNnex0%k=X$>ImmYt!O7?HTaU{E z$p@=Nzk!Xe`A$aI&u1hAcA(5@5GeV2NLMt)fuwtP`b4-J-JL!e?xMTX4qW`^Tb+n-9;S01p>(N2L3@CID@4tp!qAOscayC8vG`KWfK zjrXB`u7W3;Q)SHMmiP>7^I+62Fpv&LR(L&;Aoj0F5DJH*1^|4FT)gZlcTvUK*fq0y*Z!k3S#ciS~-K11KqMaeF;k?SpF#M_v&JYUAh(m z2>!SYAaOKKEPn{Z{&QVq;kByXYKbrE$3-8vDcxuSce;>|NLi*c>|*MW^<#80pe2hPq@-3w2z@ z#hgSDh1%N|aslu%vPibDpA()&Rd+vfK+94vdFq6;p%ZBsVJ zL+A36;`&4)m?@aCEbB`mG`iVdN(7t*F=@>`h)n6Qw<tgkM`kGHa?|D9qM}8||&9~^z8cBe2JE-ge zc7=3DWk;b|2Ah<9X*`}q`ez8dfUE+5nK*L@jRzLZXVooAAIXFZg-+HAfl6l^4bO-Z z6?B!Zhth}c3NYfPW*h2|!S)~ZnEPuyDm$70F(;q$4d*#wCc859{Juw4|jBeRMGypyb zR>Gmfbod|PK%B$Ep~K|Ilf(KF?@Q&Oy9}<-8afdXKp=^E%6EXEEfFLh=V@`5BmpcT zh;;JZYQjYn@IggJ`7Dr}&1aYJ20W!tc^wkN9N<8+hLLFBFL}l-Y`}CC@|9@PJT*LS zMlu5$6qWrT`F-Ktxs0d@saSj}*S#U+LMq;T{ue0F2*j2?vCtXH%F_atwK*5mNgV8>u z6;N3ycIu*NCzlbji+L{Ox7hmQR)Ux%yBNzxGh!SEBMCa-)TJtyjH-efRc%TyfZS-e6{rG!2bP*06Pto%f}C#PXKewxbE<_-Qj1b;~?tu4n1 zFDLK;_rr1+_y7&C9qwdJAf6f<;AVWFmVxL{G-`ftdI@|WwWpTE2Rj4hBLpLO0~SUg z%4BY!r`tV}S$b)fXl!=4!{e7x4sS^>PucLaGyPVkJ8e@%X4Sj|EmVt;Z8$7M17%JY zJJg*`Qcx#DAF?`JB%%UvK4W{ps9%-xVYLf7^lFz`0jR55Xb(LuA;tq1yDX)~i(Gz% zaUt1<;VRO_gwg61W{eibOwsV37-<3DI?$upY#-80%rP&i#$ge5yxkKLSyNplC1h2Sl4hu?q)vAG#B zy;ltx;z+(2;{`k!&AdTcTf@(1qm68j{y8hC9fp5@f5>37~#TZuq6bQ)@y~V zraNAOh>=-gV?*Q^t2jvn3WI3{k;s9}LxzzG6t2BCI8v`5!tMOcNl~i?tD^^LY8DX? zRwhR$90eYrUT6SjhzEb67te|i@I%`8A;34U?f`y_miq+;$pEXX?M7g$D!(L%oK>Y! z<&xiw3v1s4@@yB!O1T#QlJCSr%pTw;^kbM$xtbKS; z<#h5B4XH8Ak48VYU>eJ%j7HF;Q^TFs&uSUs)@TX$EvV(t3yVh9Hb{pf$x_~iDbqY$ z?8I8B*gg`X=^RVMUWoxyR|dr_wJ|6#syczA)!`h?(Q`l>`6xfuUu{BW&@+*@D_rXJ2e0_n>sDn} zuRe+3sP`Gw3&aMI!<=SX0syjX`F#(~gpe@QELb#u<;JsmKD)oI4XyfW9)z&)|sc`gFyJJQFE9 z1%!lfd^$n zvW(NNr$p36qgi(BhnowU7i*4kj#F5{*~t3@Vm%#=&RvH*Xj0=d>68>XBV zY-HgOC~PpPPFoXVq-)u58(cu-Sq+5#O^gzm7tGScnV3gJ^t~PvaZ18gM5OcK(HLUE zYU*RLnCpikj;OkiV12{y&6S~*YqOms)}PF3zEyoWTAOV}JV+T?tZcn_Gy?}9i5K#o z%%>5+vLLHMT*1IXh=sq5JO*oGn$ha$4mneaNa6}u77}1@(Gz$80mw{8Y*`N$&rhfj z=bt$=zlSpe5HKh2E7L&WaLwN_-%)`-LJwH3^B9A?KzB)@29}vtrTLU5g_%O2A8-j$ z)XPe;0OH*LC}RXT+A9%?+F};tPItUPOUOd3-$BV$#1jOV#1L&!pK%f+WoT|2UsNM( zDcy_*(lcD}PRO;i0aeEVML2B;2Xk741JyP(bF-HEjd0BR6TXE7(Bj{>Swa7?OB$&I$ zX3}FkM;KP|M3Qt=emr3tBwI3MEfbt5@U*u;dSLLL925W^0^=dhvc9m?7ZW{8r}86pkLV z9byQ#kY_ar+wTL?^T*QfW+gGo=a01>-|Km5me4LJZq$fXODi7*HDX;TNwA5E%8}Fv zaUh6~SvJC_=$n2U@l%jMNT|zd#9B*WqE>*T#Srch5AWX;yGE_a!<-6Fb%9vXfpCMp z-)Z_&Z=I&Mfm?=R@23OeH}@I3wXjp{8lILcKN=IB)>=DM&ftU#MX6%!LrFd4rRX<1 z5-Z4nOWHjeYZAQL$%O`vfW=Op9F2!TjLj3=!BCmaTSdpYt@PCLI(*O$Vf7ufAAE3z z7@cCU=+*vtF~JtSgmz>OWlW-KBi21gNzY3)Yja@ko z`>QcP&Vo1!C2y^f9d83E^hcJsOU!6w1R#o5(7+AR<{c>n=yVnW1{PAtP_!((_X?R>eK9g|M}$oO2H6TljKNLQ zQzYw9i${CEW2)F$u!|z9H|l3dR{A-R?9KGEm;wE~nPk-q?M;*Hd>~nQ5Ml;+Hju0p zwZxUME|TT$u6SM~`xa9jOEf62k<6w*nni=p#7W8@&ZXgxw$ez8lRTs-&Xn37*9=71 zs@{7X*P?-3730jPM$p?tHq@M#_m!?f_2qGOh%}HkkH?Lm>1C#&`VrUC z{pOkjHl706Yh`Dw_LVN@;rJaih#4`a!5YanN!84RVUwC+ljkkyp>1b!Am7uS0!`QWC2-NafKxBjbd zj`|=S5RH9YEr(u&f+NWjjK&#mINVa!vg`vR&4|1C+hm^Bb4x@8-GKiToQ<)vWg@92 zVut--Nye9UdC8z=ZZUsTtPZZ8NQx3J97F-fz-C&4PjZP2BAlkp6HzZ=2aqPBmR4mp zMpc9?L$pCC$dL9P#2FKB1jy*1_&BMq+b9HU$y;C;(_?~R33vZA_Pq5>=mTLBzy?{j z6@4-S71wAyMsMnRdmbZr(X5&LCiF=NJb{D_=)+6^Zw>b{r*A{JjhqD^B3vo}pi%Hw zG+#DRC|m5CK`aVNQXk02-Bl*rGrnZ?A3FM7W2Z!Y&d)+H5&dUra@q zK~`t-u4v@{BQPW*3o$|>qF4b5Xq}BZ31M6eY2b7-{jD-JC=I}F*!5*Y5E}tj?_$zg zfXKeb%l&b7d$oa?Wm_$6$9PkXis(^|O1w`PZ)oYOL&1>27IQVm9YGW= zZXpPI)~Xnd*+S2b4T!LM*J#VIA}V`BXn8L~MuN(A4DIl5!#dWzxI5}as2evZ({PMc zXVRj?RLm=SEVNi0qh$^k2*p4`wQp8oKpza$4-p(kB1Cc%xFhQ$ib}Tsobj}B7dZxrMJp?WSQe4_H8Aw7zLh?*aB|+Ov<9ATn9tx&kGt{xgY4Zw< zDS%nc;Thzb7S@4ss%H@GHvrVnWK_!9SH^o%+OwtPYdkf~Hi+hl;xPf_1%=2<-a&nX zRhe%k(xmaX>KFkwwuHTO7B+UD>T05+CS<-{WHqkya50-M^VE)egOOrwb~Xy<;e~(W zDLqyfnrH-!b7}LILECW3l#wp3b5z%MGozK=+%}$Vr`v7@C9~KVGI{VinO@!&aito$ z!kDxX!XGe-_)clq*akVP&bT}*E!XjlVB)}RV+#kzfgwBoYZv6AWOyf+mCl%L4+_RR zE72>Kt?YA~vzinffIyRp{+8v+{$dWVXb8QQrS2n7@3E2`Rq}kh`yFAa@dHL zMep)LEV9DyN`N7`l{6sTct_oXd4FAL5f}FkfV&z{2sMm+F2~Pfb2#HBE~^&|>1wRp z4+@4*+uJhbug1CE&lkd+z$^@dDsUqjXt)!~;Z;^?6~3xx3l|e6>V~DlRBt7a{E!KU z$HwQ2c?z=}NnQ-_lSnuJ*r>cp#z8Q~kg^+CDp->Qg(k~qf(I)C%`))Kme1Vk5r9DJ z_$c*+)K4%gUzGnyQ>%8H!G2?Fv#|GoHt~#Y?N*>9RFB+3$Q-v&ray5@{&tR&+W}-E z{~aq70cx}0l=5vvl_OKOE~JOdTQe}B1Vg7lQcI^M%aGEt1uNWeJ;J-@XRCV8+U)L( zV?J;ALkJ3u{RM5XRyMXo85~wCL3p=rY+7tMvz|7CtH4lhE_qY73GgNijLu#;%_*hHX0J>w9g)B3W*pk&Fad?5Y{M*b4glEz z_=pNPM36E42gxq5SY|$mUow1{G%3Ym*%_g{VU=Gl;v1`x)jzIAx1kz-4b{Lj+dQ-7 z{U~kGc=by|)~RdArrI>Jw*VZDY^GWTZvL876}Khv2pb3}M{$;j`9#7k*bv5R$?wuH zhg6Z&;8LN+5DRtJ_0kI5l0e{!E#skQr8db;ym!S8wD_L42e0&-gj*J028&T*rdAG| z_O;Y$4oWT~dMc&DaCC6Qp;eNjT5K>Uu>x028y85E8gB(9aV|a>4Ya@DVAL;ek+7g; zwtRXml|5h?YM`YaSYyD5(LcND#jdjFG^z12D&}Inj7kTjr_U(q!p36#SkyjLcYR&@ z;}uyFd(bdB*)5V{ovsrmw=G~2IG-V zbr<$2kof|0vf&?`U=%1{QKJ>ra=p(v9eMU$WFU(KWVIN2aEiSqDkJ^ODo{KtP}TL)Jn_7vWry(Jc;UP%o2zs6{nXVM;W)l zA%SUUKGkX-9)tE@2~<24h!Am#R=mcuK}bk?KH=p2m-6V1W1Sa|eS?JRJ3d|{aMmY( znPZ~pGeVfsRJ^}cVrR)yRcmj&SSH6P{N~&fyi6df_aiYk*zk$%76WQp_!2Ethp1Cs znbU8zs7-8)VeqX3@t{6b!cw@=3zI7n_;+LMa4P=D-_eOx8VU#P@O-dZeIvc78%$Bj zkTSXqRj2F(^XPQ;13=8Fr5Ilcg(2aqrP>xhR00f+*$s z;zPg^b_$MFm2#{Ml$NV8K@%kC$q;L`Gc`t%C=G-#6fBGgyIG9CwhlW)8yBD5I;Ngl z+jdOaidc`zx#3uEVN}SBW;pB_f@<=P4kz(|JVfE0b@~bPS_Ig-)e9F_fkF{0vv)qE zNmVh=)64h=wU{Aafq5}cQ5yK~%EO^Xu(7!)!wD?v!f@n$8b}QckO+#zoAkOsXZ&0g z@67rBvzQ7XXDRt?BI%qlE+$Y=rHIpIP)N6mEsE^CGA->Twy#T;08-O@n8RAACAWkd z^jM)mBaJQb<*X>Y-ojYdU6*PMnAI8Yq#UxO$kTZa2vJhwyj&4=%Q;_)nRB9<(z0@V zf;w-uCr9ej0f}FjNRyQ@mx!a0xNL6%igeOKgKWl_1MmS*0Q{vb) z!kO(sKrg!?U35}}j3`67alSqbK>xM~y*lYv(iQ*GEZX{2Gp&f+*G zGv;kFzY(V*dshM8DgRrx29an&rW3dwjx!rVf}2J(EPad+&3Y)Jf9O)C4P=E>RqhNx z9}j9QS(?`95usS!g_cgPfZ1>U8e)|OqA<@cgWexA$M8HX!$rrgDEADX=ru)Rz0o@0 zOz%H0d=IMOYIWga^`+1J@@HC?0A+PGCskHyQ;ct|>_SR;=g}DjzCBsG{E5_QsN8)v zW%x*9WapzZ2E&N9HB<31JWAv)=bV(~JZ6OlIJSvkF#3z=V;O~vzhMR~ zfqXVCkdB^*3=v8y_|kn0GY=jA5GRgsrc}Yq$kL1znWFKv97yP?RX9~NM8!Fi0xCqc z>b@g$*Ry~nvF*o$WYZU1ovvwE$r@*_jfzkMnvu<*;*8WQE>46DpjIz}ABy1fyygU| zA`u)Iz9B&nM$K@^lSjivNhckY3qL0!U+sJrX$l=5(G5R82NZ*8!lTcn(>N1RN}f&d z6XuL$(yTdcO5QxT0W)Eq4Q;@d%n`6W>ID)8MwYBXh7r`61rnmfk>uwXfEeZrx>D#m zSLJZz{LE_HQfx6DOWVjxSa6~&2vqVRmE^Dz1}bBq$`$uB57f|0t0k%97XW$Hxma>G zg*O2)CM;I9pj2Xd(H*qqEG~LYYW84w zFCc{7Azb8qQ2~n-P>CG|LC4yNQA-nAophW`ckI+Foe(3|-vZ^F;~7P{hA#7girP@y zZ^9Bqlq{#qbU>$AYSOwjuC!|#T4jro4>WNWZm5wiCoV<#T*jWJs#<`lt?UoCP{;-n zfNL}|djS}8rUr12wUQv%ybBIniF`ms!D;}LV^#yWL9hT!U+wDMTJGv#7TpDWqyW(a z7?oMYfvEb;K7^l5W$yd-I=86pnrs+{$tbGH3g-i%d4vkwEYuRF!k(lqFZjo&g)uQW zmx(GIV5b2S6#G-!m;beqFbtfP3gjYgt48AHuBkh29TObo>EL1jSm0IcfbjSK-U)(Dd#h7_!kqwzEb&aJU2DIp4Awl4gji zhv+}6eWb}UXmwZ;yF?an&tvjleB;FZe^!(&LY3Z2s@ud*He#@jWW)epnTU2M2?RqG zG88$15(dCZ(R#D25{dzD9}p#Vo(a0xY)XePoOr91|(2<7yJ_M_!3jAcR0W! z4(EL}b<}16hk$7`LwOh3QbK8+@ac!aKA*i!2^@~8t@Vj zQg^@(b(#Vn5-Lqgn#Z^luX)Z9$k>dTZ99IB%0!N{PG=nyQ3^0HWw4of57pSVOJo$w znD=ighA{tYFc;f+rnz*7i47Jppi$Eqajf-L*ua_Js%>Qejx;f7o^E5O2CQ;3n4TU#XxBN2;;fw-8k!iABE*N`k~ zypb$zBnx5uZTuXjZ&uuwr<)`T05zl|OO}=;3uZf8QmQzQ8@E+fj@(v6g2n+Fu+?kH z(nhji-&(S8FsUR9qqby;L=%cEShBPwSz<{R04vF&86&h|GCO)Q2jy%ECx}<$1mh;m zmy2Z!jfu|vlu-yYsmN&|RH-3^E5fEzLJNU3v~oA0FuE0mrJgtVWHyP&#`)mY^fiIuia|Ll$tp@sV7`OE6mizzS?t2z7lFyrGR;a%3RaDGBp1ssw0qev5};Jg zNj=N-z-z!Fs)3D*5(${KQ6ZXE_G@^}o#az3YN(1l6=(5elR}d@*^r+yyMQ(U)GFq& z$d7ZSJyxJ<@|%iGfGC+_(#f`N(4RsFeU8abjW^^ML4N1}$S)3Vw$N-h8)Mtx-Ir%I z`5^`1@amU-70V_z*}+CR2a0km-&lr$)V3kvVK4}Dq@WN%b;K=Ab*(^k_Ol~}IC8d9 z)C95hptobRSc&gK}6Z%cAK$02_!l9SD{ ziR3V6qb(#S*CUV|cW^7v4<;0pT$9{XEUdkKEDY?{k+9s3BU9fd7A7kV*4NGkE>p2E zL4B-C%{by8(INOT*cEcsIpO5vUX3|E%}4%+b;Hr)fLhL&BP38IQ3K{39qV5$lVkmt z{>baqp>-{NMGm_DaQq+U_ zt7#4IsGvzXNwN>5iXkem*fG2pIhTwE)9QM}Bi?XG6sRL?7Ft0DNL0`soMJ;rcgQbo zCFagYV)+hZUPl1%%!g+AZozU+&-Te$^|M?~p6?d%@4_8^!BV)p^GI@MxFckJDBK;E zm**PygmX4&?>_AZh&j;8b6dt-cSejbk!NJMY#M!iPB15a0E4i}&HP$r_JPB}&b*!a zh1=~^$}P}j6m0&zHxdlFOYV)(3cBNXKMRZi>(CDwIv$S}0d9^Ht>~#-H2Cc-X@@Oo zBl-p_GR%~E5$SG$AP0Q9Sdw2Q5yvBMA?MCpP$_hPO?^7aL`M=-$Z7H8#u~^aLk6S@ zkx0k`sq?S6Ga_Za@o@pM2}%qUHliQOaZCmA$(;aJFN+LH4uO};V+}DbHa<(+#ll(I zCQPsomKg7%14pt7sN@VDj)~_~Ww&RW)9W_-+%OR~908HOdSJ?6y;&){M}ZwfC6^Jb z1N8EI>xd#5nE1i6D+vYzE(Lp$fH+{RICdZfehrn>0I>Al#9Oiv-GH4I__ zr$iNXk4bBXz9NVl2DBhXlR?PO^bLrk+Z+-s4NpB=IxILTVv2;U|k+}5WE8a1-?%_H5ypwfyQV9~)X3}p2UrbtJ7nZ+C7%wkzl zgP*Do9w7Oxg-C>~>wp1t$51#FCWr^*hYpC5jTQ(}2Cm5vT___LDM63Cm&MF14>K)( z=@@d1{qY`Y_B#3)a$f0N0>APxmW5`o=f*mKz0Exr^P|{P! zkn;pIRvbg#9&x}2j1CxGRCjCzSBRB6A0OsBojRt$qD`7}$}NJ`P&iF9=E@OijX-u` zWVMZA3z71k<)58_ED>BtL03;072*kMRrAVC*6c+jJc zuS5IkcY*3f3;~5I7YtY*3=8O5UoVv=hD_F?1d$1hQ)kp^T6L4TG9?qDuZ~#BmM5qy z=?wiaZ5$4S71Y`$H(w~y)(SP)>_RXz%J*Ts7JKS8aDRqe;VE6&ug7aQ+hsM|6<(M! z`d}OJk7ulgbacmH@T-|Wsk1*~VrAmg6;S?KFPKl-kwOum|l4;W?6+9+r|5 zT9)H_7V(hD6|o+=fPit_+@m}ZhH_S+6oDBGH7ZUJeHP^N83aZF#>^j*G$Vf&fzCBg zT4*|_0+Z3y&Q`HervgzJW)-!CKA;8%s4P4o_BzP_*Uk~r2 z>g&Dc#F(Z`5Ka!NiA3lLp{>pt7(w%<;^*p$3?m?|!Pw_m_F)G1Mn6+y>=j>+#$TvW z`nmf07xnz}eHH|4U4VTxH(n}JK2oG9uakJDeVuzMj7B6O zr_7RC1ODn%D*%d^v6ZK>MdWrIMifT+@Jd&E^^=hB%}ePq1h;O6aF!(nCV`j8maxHi zekkVw*<((cl)^4aGlP{;>cTCFduRs<9Ys{32jz(OwT!Evud+x(!kGjX;X;Wft55_7 z6qxsA_DF&|7XueYkLyG4;Cl^VN&g_6K|Q(G;(O%}`wR>9#+{2Dre$X!OTZ!2B0&RH z1_bnkh&N}yFc*b?ahlr}p+po6D}6pescit~+fJVZZ=YeMmYE6wmXPI#=g-^3Dob|P zx1YaH_w)QkYGxCsF2D8MeXfJX;k8^(dvGh>x`r`2Q34~ZLzG{Y93Olkj$8f^iYy+) z5piZ+^lgfOKi@kmx2I3r`gWZYC0El40~IVi8wgo8IxIUr5++1dZVw z1SfLD@}UcjGD9^9TKqW{U}qai%++WWIzm{(YBEHrC~3hr%u;4y@`MFd%wLTjm;`a$YE6~ zx?yUBHpZK1#9+|JH4}E?0z+JZKnAtB#N4jMvQC@7;PjtxHbp1mP@33TtQ2`!Ju!5_ zgI1T4Pm)!z2_SOd1Q4#qru?4(i<=!=qz0MfC*uH&m$_;z209ik;JAj$6I%OVrrtpH z2Ro1%4TR|0A2>vM8i-cdt3!m`ngQ8yK_G!@NQY0hm4ugUOMf!Piv}a&0bKlP>YO?i zMIsE*VT^#8F-Az6p*q~G4--gmfNG_m;WLs5Y+jhR$s{0JFEL`Z&>6@^hdSt1Qzc>~ z)djbYXF3K_O7pJWxmj%iDv<7^I)k4&)kLHVW8OfzxL*Pk7wv-L4i{P4m{2jtlQ)1O zlC0Q+-oaHu3DQ`j1*{FEET56CJken%mPbHJz9<)sA66_9c3~^iaUYsCUMbZ^WN4sN~rF^kyp${}sbC-A zSJ!YC7xFKq=Id{+ao!@0JBpLigIvHljL1sgPmlu^zRxyq7hne*vk=^ZDk`*#xtA=b zltnrO`9C-qF>ieqDdGSgHI3+|P5E)!V<4MPffdpP>!fXl1*>w7ELH&@bVAx_&m%t; zpi?gNlJAf)tsh-J55dts(wu4d?gB8$@*S_QuD%b&N%hz$lF?6Xf z98i((F*)Fe*wL8Svw&@pE=xwRea(Ke4-GB*6S(MzwXriU2!U~4tHspzY2G&Wy{;aX zk;sr%0F@cwBVqE1dJ!B4BTSdRuAS0xNW_X=-r#BrJ7l8;67_`mPdhs2!g<`9o$231DTs4Sr#m^g}@S zH3B1jf(&(5rwIC$&j1+cUZZmIfOw94j|9(e-@0Z)X9 z>yEVidJB~%2)l&KNQ~Gt#HZcd)UVcEvMjGxeDDoa7qioFQj^O5mTNjY7sbs+!jw&g z8S}!bV@y9)gL?enuZNap&x8`+Uq1j&;lU^B2PpCI;FbD;)G`sI>MN0=D6p$G&xaz{ zJ@w_afKg|;5h3d9^Bf~wnBJ=LUOCduQ<9a^V)kq-V^@^3|8!0yA}S#G#-ku- zsDfCX@w%n{L8XR+e{|HI*Ii+@Vn#c9wc3(D} ze#?Bt*INT)DMBKSwg$I&T?|&>KwsZs%~o@IT&F}W=3NJ43VkM1i{$KC3$O3jJ+pDT zgpUUxZd9_3i>Qd60ZODL=f*=oRMpuUGpQ(FjG%=NcKe2fkDYg?uVRuQKz5G5EJP7a zSCeOtQvEHTfhXTTKyhum>J#3Xkf{_4`WHVEdGkIh(q1q+^yNS`G#A1&is|T-?>dB} z02nhlp;3ho^+gZ5+d;8|Civ(~2_dq0vqu^|#~2|#&b+uukl?C&Uk==&I&LQ7Vw0;* z*W@TXEIWUErk~ftrmE~=oqXNMEu@w$4$j(R%4}$RpQskX;^Tv>;V9Y$M`0Cr7U@1! z8S43CW9HKl|70`557le_*2!N^_&PQNS2{+AW#0WUD)uUg%Y2&puGJh85DNg2^c*TS zW#M|VahhQz)fewoAO%MPZG(X!()krW9I2bL)!=f~zMz>?@cPdafe8gd2$A->&wC9- zJ*1UWO%tdB7vj>IHVUCd0{hN(V!t512e;-ic`)(Y#4Jp>*l^a&Ygr*1$SFR<4U$FkRb%pzsN z#*4JtZl{fdxrD()5-fiLYnL}Fa76sO-gp5IVXsLpVeqntj+k>rls~Pf;*1N4=yCQN z0>&vic=c2S(XO5w%)gPeEfg$Kf60`a`}?3p@fY#w^|hPk>q z4T@U0WNvQT>`*{08l^~qtDwLs6RqirpHLOid9zUHWn1Ffj4atZ4Yhe+m)qG)ZGkcZ zwQ1j$cMt(+9onXqQ(Riazk;rBpW2|0?MMoti{J|6xIGmyzRgq=fGC8%H5IYv=Iv1t zJ#0%wJO>8bQc=SZ;(^EuD8%GeXqI?kv z$+wUTL@lLxvg}zPoHbOX?BNGEWiJUSdl0O6zfM8t-ie~l*-JtSx*S>2 zH8OUbvu9Ts2?F!0^&I(J83<`Ph6%vry;5KV7m6X>8AznFN0FrHFM+UzlMy91wV5x< zKnL_A+}Vgja)tcx!9U}4BAhma0b+&{IWD9w=q)tZTKGvOmeQ^KQmArD5$d*nomR=X zpw6uhC6rEvVsd*)#a=6(quQc1gs)tEhAHJ)ee`25ch4#ZMI%R_t&!#BP=IUeaTaQO zUJ@FVg~L&7x|8A^)^}NTo4Roc<<9b2$C`6d#Geb=g|*wJ+Wh!#VSKl*X-cENSS_q; zCr(o3YBzr4*hkr!HhM{>B(_2kBNK4Zv`gI=iDQ0g-G~bns+>afsm1r|4(t~kp=j`n zF-DD$LA*=oApVj7f1n8O5olr&z@(*s3i*UGD)L0RMIz2z0!Se!c$Fql)~ImwhGaPb z1S#3t^i*P#-)a+DFvkbXq7}jtRF%1GW>-5J4btOr9jma|EMiI?)PV+tzdhPmjz2?G zv{YoMrPb)c!M{wjCzfVNxe){K$r8sTXc|@Q=5ZJw@+pn7h$w|dB(-lG$SJgz;mz^* z6bgy)y)(gK>Jv#cBuvZP9r|=4LamO+hEfn(aEuozI^Sq>-2_4(3}!oZ;%st zQzSn2vF(Z&pmmX`IrC<7EB4VeubkXHF#;xa<|zosoT36*4hDl?X(hc7d4bS6i;P<7mblrABbx0;zzq zR2*Jkfbi8ZBYg+L6XaVED&^B6u1_Ax0cte|EepOO(@~oX1ZF;r;iw-pF3XyUENTZk zai3s<7s93yi6|4(>6=N+Z~VywWeMx_>3Y4^%{J@+T&XMuAap9(r{>9kGQQO)Q3_(2 z01*!gH&rPzGsuiEG~&+^f!?X2q^23Ao2jafn}GEsdzfzUH#M`S-d4)d?tT*u0zneW z5iLX;O4HFaP!#f6U{t4^@If!-2_Y6WIP_i+>xNM6A1G8whxDq?T_HG0R{I?-rq>h% zp_)QrhPpiKFIj%Qf?sSbZ-f<9i`cfvCj+E`2X#>KT-*}?u_c2@P-7pz=q8Nh0wQHDl1>{j$;lHpDiTX+NqG)VFthpGB%@Dkr{!-22+km zBm^{qI)Qi%QIhH~U8&UqJ{-3!u-Vu}pu?S`d*~C&40&|O3!ukZ z9U*=n$t4?AhHADtAXrr36VU)n6h62(_+G-85@zg~CPNR9gjI8GccO3pVOpHw$iE_U zOra)6jIS*|ERRz*ES9i#ziMbwGzwOuLLogRqL{z$hl2T5&UpDq$$|IhF{8!e&toql zQW8o%EqWt8O_#jD&ygw?eNb-PISFcPMrDL`iW*y-BL)|C_VZztB&54Zd*zG-oC8hL z%hZ}0CRGi~N~vm?esZE?{kni17PgklyE>6aGGNatNK?;DhwG>*hN(<7O=*&;MoVyR zohDZ|&}6E49HBWNEM=|&Kt`k55YQ3sgWpy7h2%jJZd23>BRW(HM6tBy)Nwexz{lf7 zR4tOljN0G{qiWJ{BfV0ZEm|6%j$a_9PO}vdH>KJ7mD6l_HBPg2x27q?KK==M46*k&;wG~`ByEPlQ8lo!G_XXj zuqNZBPA!7z9|XREMbRNDA_fo$(~=5A0G2htM~aI|tDeIg_w zx-Te@JYnX~stk(D?10`2#nPqmkn-_Byw!ue?FtDn`ge8oiyBQ1)y=a>$;wJ;jy%3c zG_Kuf3O~Lb@F>XomJA~Wyd6)VaJGFeDW~ap{=R#nWP5~s?HU64!t0G7fwSdeZ__?g z&;l*u^)I#Komx}aEP$#*)nP109mj|iX&4R7A_7LINYKh%lhbTKJ;tuYB*IHA^0@Vl2KxZr(*cI9A3Ao``J1 zy9lUh-kpPY=d}LflmPQCpY;^c?@)6JD!{i{&c~&4E&TCJ4fX@?a%saITpHd*b%=Ml zH~?YZrB%{FSfn=Za$un%?5x+oV0>pJ2w+`(&|%3k5vwxvL3BbU9_w9VW>{1^Qn?Vv z10aAv^nyYSEX~b)*@LCQZm7r;YM94WjrB^=xsQGf3v7ZSy?J>tABcex*~o+1_D^DX z+Zh%bO~>mT%6PWmV|##XDYfPiyXnvtw~}H)s+QOIic?r#s~sGj_J;yQFT@xYS_oFI zXxFF6*4rp^UsL4uKL-R4*&@Z8fKYU^UFw0E2*=^+-j9 zYh7=ngO&pL^+JSfPoGV=WTRH*G zQurQp zU!R0J+1Bx`fPDqen5N@X-y#x_*1@R{Rxu-_+LI1T0kP3B+SZV?Gm238Rlt{q;Kwhu zf*)+}tF>5nPFiHm3Av-h^^i(s@QOo1BcaWuantH^5s~E#JbAH-wuP!WdlbUZk4qXw z2N?t3mTO@CqHDcaBX!ACO^8KIpcuY$`Dpxp_3$jN5B{g()wXN!#`F!tRHr|&Kmki3 zE)C1mJm!l%j2Ep2tmM854?4dI0u(d*topH{etKbZ`lOMz-sz8 zydQxLz`f~T-kSJUn>zsz9K?pVDIQ2>K#1683#EAAx#kJ!L)Zb_pbnq~(r4J*OI=tw z;C0dYCertE6U9aP5O^T{Y?|~FrUp}p^nJh@4XVj)IGP#MGg2AC!TRm#h@}jNmdRO$085sVODW?nedY5$=2slcphziu7EqH z7+H(qaD46^86$-U1Ec1?;NKD_uS1B(yu+1m@qyiZj?D-aDabOcnOid>#($-cA5+T)Md+a<;(CK=xr`v&j|(? z&xvFu^R!wF5+(PJH8P3h{1Z~rMMo_-N{u%t95R1p8wY*Qx)sDH1)^|?f+e+v?ibGH+*Hi!LRa5QT1$btVnfUz%SAc3unN zq8*Ot0OW&A527bpCuw$C=@HDKF?l!^-q~RAnRc@c_={6v7!4AUP2#bpd6-};7cyy( z&0ceq2m%&J5;?S*9uKti2!nH0#tBMeo51!XySKU{xE+5~96ky4F}>w^_h?&K z#!pRuIILPr9$4!+0X+VlVF7rT> zV!b3^JNM0EVw@}smts?Yh+65UO+*#ZK-xPJyyNk6ArS_%%HtH!vrxL1rhw{p#2h&SE7Je zQjvH$dZ&118Rd~2j2^2QP173l$+!EyW6dWmZ~)Oa>!n-x1pLWA6IlhXT;!l$CVUc( zMFXZVg!x030Q`YNNZ7|$^T!PnAn=fyIb^F$k9?XTWTnOV<}XwJTN$|&bs)=F!q*JJ zUCj{OO~QIEAclZSYogBv|3EwL!$J@F1IaP~V8&Y0#*N0Zfqk`bk7|Gs4u$hJxH}9( zhv%-slSfLOOQ#SvFb?l}bsd`qX*EQFK;@YZ0~V)(VT5!6AnYC zy4*uye`yPq6tYMxeB|Eh)0ar|TFwkv1|93&n|)(SxPlV!vLy-*sRP!i=uZ|LcI9D- zFOS%&i9W@`P=Qw8bsVptl6TM5h(wuLk=w>-RLEriFXUh&b+hZ~kkts|32og;Jg|wysHKb*b`+Pt9Q>vkL zB4tP*-O|CAV?|hALwWc+4Lh)aqbjO?HX>Ih*xJ_^Tm20o<>^N{mYax$CVpY^=GpM# z$?)Qd$%_wg%h7pn&fSfH;99S!5o*7RM;wc+w0KtVutF8*3?BhVPy+M5(z*5^jr+y0 z&Pa_ZUe+&}5!83EMGf2;8dwBrgP-okI~=KEgP)`^?MRq%A&!|Wr^`^OQmC*-EfO2k z1gk*aM;%mhILea4!KtbJS+LHg{aGwYGYxsUs2)}eCSsa`-UwEQWa}tCMcIu7sz}%k zSd-^Vpfv=Ct)GRKI{Z9T;7?NspA=G16d#&JjyQ<&WLfr1FsfiTMCW)<9?!MxBCQ^d zQ-S)l1h|IyPK(%(ASNt72QSsZX4cKZf;~-&SBikbyId88rbF%sywh0)g}^xa zhmCOhuzP38GN$M(E>6{zCA_T z@Td2iQ1rwys1Gzju&UuHil%o6Y|J^(pS>y}Mw?wI%67!LuumBwcxcZ+PPnY>eP%=k zSr0v^u9_XEnglydB8rh%ZdlgaALTR#Bv6nZ_XR1`d`VD) z_t(-T&h9fQ5yhZryt#yAASF(?1Od+*OMEbtc-$qP+^&QKENwjL5=6RgY=dB_N}P3x zm*eel|UP)gv8@m1#AW_;$9^r?qz=9Mxb+%XZnef3>s1t|4V4^g6NZ!q}e-grp{lYE4MG^;vT4j0xD74RYhxmsK;-ob^%vK`pI zv#UkHg(K4USCq?_i*F%}G4MT@Dhjt6{1!ga*>%1j>&R~h>w=|HPiBiKdB6%W&ZM3fH)hmN}RzW)n zDIN;^`VBCo`jFVv2sxTcdckIB2FVv7L*lm{f6qFZF~HPJ1~Y3-+Sdcry}ebNi<;6G})*fB>Dou)2OGtEc%T{Y3)Ww=Xs^zdsjv2(UDeBP6_jrc zt^`yCg$r6x8^bEwM7=Rs!-ul{B+Kv6dVvO_6MG2?^YK;KidqmY41Ndi;L{>Uc9q5H3Nk7GtYPxdbfq^G^Xm!=wfjjl4Fk; zKx+Yv!_gZajJ!{nBnd_MaGGl?n=B;SfvAQG*S4|INUDtp$jvX`#@;ND3ezyqJd%)DS=k1)7$=gZ?y2LVffgjH|t}bsd&*qh2)f2NAnK zh(hfCqH|)kk86MWVsm!Id&E*@hiL#jPTe3%k$b9)K<8%&^w-LQmN{O)vQJ3BJ6% zpZc$M^zITI{4ruy^Y<{Dj@{qB$jWcYPE$hto&cjxol_x^!1~Scff^u2^MDA!v~+x( z1G4p$B^BybKso5RApr=sfFlTLL|HjC~1X}(auiV z^@=EU>5z`7&%EZ@fzL#k1z#!gqJ6!K|2rWj#z2qmRs%p&-Uk-AEORu%6;Z?eg@8_i zrBoSZ=&aUyL#-%rl8+|kRI;2SYbnX89aDObRIzaZK8Pt9E6w=Os$r?&pGE98x6tkfD3RjL;Z;2sP1?HChZOE23j1Qxh$L z`AjbfGmey)y(_x^XcWO;~^dAx<1dzC|djt|SWYb8Q@aVs3kW8HuhcP4@TMKF&Tz|+z z6-cnbHoS(+DF8Z`o8>Hn!~&3kjzJR6j019nBl}}`95y@-3m&qT0uc`KcZQweK9xgIu@e%;qzChnR)@pyDFaRU(?EBGW{z~Y+V=j8(zWfHH*aX|G#-iJ$3+k4U*RgJta9dzYUpf(9hv*a?bWTh3PQ{$(-Jky z$(xab+T&~Wt*Sr3r9?t=gyT;1gc2viIk|g_+w;i#_I7aPcxLPyf&_B_CZoGZ}<(r6*V9;WUbs&Z{>Wsm+u(~FbvH@m-~}SNY?)8 ztpL?qy;9+eQuWB8^WNBb&Tr#oahuHx%It(t7)@IA&4J+JNp>_*gF9_A-!efFi8m{OY{A3Ofa}HEsRqg-f?rmc& zyUzQ*eO~VCxi9C=+?lyEcgWdib0l9%9C7NfBuldK9EKu?7G(_@qSXflp0sL9%w<{* z$uI<}n6x9uEFh#z;SVaHIMYG}iC7MVHXrmst?9xw1Vn9JSZ#^6KorAH4L3kk)F=$Z ziTeBf*WTxxJ9CGmV+DN?HFxi`_uA{_SIOX|y#`t-v!2m^%bH z3g-1j1x^S%3(`A;5ORA{k0)&QOI$F%UT4<+kfaQF7sjt}Z%h>aVt6S%zO^=f8FWZh zYfe^_tS{r5?9e9tu9(6#T+}u&Iqk(5XD);`gMOIp-xaGi*bGT8S2@&s@X{j#*9H#y z-&@OgS95kNcZzT;VX^;ad6( z*x6o*`TAX>7S>AV>k~S1VJ8~0Xes1KV_F#VdiiYBU@~J12n9R)n&VW48_P`ko13xu z6igXYb0U;yn9)h7Z_?B!>kQX6b3g!YijyHs+RG;d6W5LIp{@eH-6m**Z`tcndcn80 z)_dg!y{7UoWqf;r5l40Tet^iOlOrzhkIjxfnTV~cyyXkcsPql)HLL%PQup9!-v*^_ zk@R-l@XP;|?IM~oVnW#;U+zE;qwi^MQHl=c4l5@IROfq8;9+oWR35y~C;1SUyB;Ti z4dbPyTWjpC>FX@Ze*~Lcs@}#EEy{8G*Rv!J?|d7V^uee(72U7dUW_(l*DbS{(-AOY zuVO(NbT)t!On(;xl9n%3)c7jt%4`w*2bB)`@2@fC9ES2;Xz^qjG(QtZRG;jI7hFCG z>bGM8@xGUSzrQv?NUY+k9Q*+K_WFD6_51DhTU;f@_q?*~_DAjW$VNhvzuW%)W_!J5 zIiCM*uJx(Md%x)wQh7O<8x%d;NzuNKZSx)9f!p6h>Vp}fS4GSp(Tw5&nLM(1pJcA3)~sJungS47Gf_C4dOVM`hR3N8JNGC@h)Teh=@SVjY5K zM%GGmFE!00gBQ5xayeg-C2pPHL`kD3Ig#~#>SWILXWn4$LZ}sX1;G10z|$Svg0up) z(?L)h9y4jJP_%)C2+3+9FG}VK)TXQTg&WOAhp;H1EyB`Y>5lDmBI#y*x|Mmdy8n0&%pxGL#k6~w&Qb6X+!Jpla`1Vh-cpc-KL42zPke0= z?|XB^69-$w69+#k;)$dmig?KgcL0JMpqzGiCo;Z-%#Jh&ion;g7lL1~ED0=la3xqm z0>&9`#hSNT|$ zmtVM(sRTY|HV(&dvq5h0Zv9eqiM>v2Wd3b7L=$d<^|b*!iNQb`s%r9Qw>f2gOzy`1 z!ARNkx`)Dc%A3_>a?HqvfLn&fp!mSU&QIHYGojI%%lqeEonH8hw01MC)XnS^s15Gf zIz#kxGuvfMLrr@$)QH`1G1GA`^QqjQX+hesCN3@0Uw&`Yr{>Gzpx#6mnVKa-O@IMb z8#j;Yf^gjlpBwv%Zsz7dF84Hb11J1oz)7FTmijOt6>4gcd2f|I-KuMT-=YMXtXu@; zKusqo7OqXnfj(IXW^jcLF(KTxh_(%aK_|sVq&2fmuZel=j`E&IRf8v{Vkv`1RW=Sw zMO(~*d(PZC>yj;7Scd9s+?JIP^;r*Vqo|hU_FqOkw96L_CI^*}bzit|bfEcn6)g zvs-@-xTX5kD0-L1#JZsRnj+6MnHZ>bF))LirJi#@5XKf3IId4Pg=MZZQ+Tn8XMq4I z@?xE5EayMFKlY9%gld>&nisbSP9;!chj-o~$Oj%t7&P`xX99JZhd~ zjuhTe1T^GIKrNxv?mPHyqNnaYx%yW)<58FA1O$(-E5R8g#JJEyOZLs$mc9zJMj~6OE2D%$Ato`A6NhfbJl+~ zBsPnk8vj-diMAOVaabT#`rNfa_icj+B;4|XBqt);GsuG+5%dYqa;KF9OXpSrUSsB6 z$d;vRE{A;C^ra4WVRHUELkzUNmZMB4&niR~9GR$I=jc8J}* z3Om!(z)mTq1_^;$%`Lvv1*ezoWU!C-UXy5AAxD4a#>4u|cpy+EzD^`3s}Ux>2P)sD1>k1@H@dt5 z)ZV_!t-;0Is>>UW%q{8?tdm>wlBmFOD+khY$n9U__7mmyE8H5FOxd?$IdFUb;LTVL zxqV&3Az!_w`j%%eXf|ZN^Og)*ylojEBflOo)^aRk%17?=863j9%N8xl67uScnipIQ6_+aN;pa#`&uaqmea?Q` z&+Pw-ndteEF!IHMzmjmcg!tj|rYWORv9qRc&`ik9&+x{%kO`bh<2_T%AQeiVIjG%2 zZJ%%N?3mB!4Lf)&bhpkDZ0YL{?<{?=;JmZcZfD2Do281yzS?%_D?;i&KG{E01kdH- z%3dXksLYFv-`Ah6wXy}Kf{uOAoMH-!<9C~@^5yh^N%7@H_v&nL^awk==>(I>|_8hseRj#bDk(;GfHYY2`>L29elRvs1d* zru9=~(S>yen#1J4W!56Ia)6$VTZj3XtT+XHTd#STTwggiTW%exjV!UZF!ivVLM3Ir z-tnsr_luJA@y_!7}2J}OxWL7!CG+p*5G?ex~927~C6Hr(W@>);;fe#0T zOQ7<2zQP6Rj4!);rPB_)MLS^fzq}?9#PUPAMIVK3cyN&5g!B?lqva=x(&-Y1L+wW_ zKcJ)K=S0pdzkX}v@PQ%pea zAVqDh++hOJL4<66-Rd=@szD^@*USVYvJPtj>koD4i1h~~P?EH!WBu`SBinp9FoyL{ zesanSxMubou6rmTP!+5z)?bDwwqy1e>u*`>4`8XT(Xp#2fKt z#M7`lV`r>q9mO>o`cdNA*>`~CT@kKkk7@r(A1W*;r`Wy=u6+QKvHre*WX$jak|9#D zpTk*H#+!m^m=gkRooJb(DKKLx@_tC_B5F;{!^FKXK7gbrF$-+Zj)qWP+^-hwQY~9 zK{}`n(2*4dx8HZ>D zbNPCSvW5kleAcghi?^4znB4TK=f~>NB`_+QS^Ndo$YaEnF`-gO{;a+tf$%M{NUyxi z3mkG^Bwsw=^d`oc8J^`iPb<@988Ez@FD0pUe~wrMrCi{WH&a087yAsp=FnIgjS#OI z3X0tTG715BG1iWDXoJ)%a2or@=# zwTt}|m$ApQtrA8Czt)bA#q_{rHp zAuP)3Yd0c|SspjL)=k$z)cTyBO71s2AI^@h)8}TYiTK zBX*!+wZR>S(_8%;^*wk6p_A`&v@4TB=TA@Hn4Dq&@os&m$C{e)IN1MWQ+UrPtl|pz zR!^ReYo3pPowyxlgO3p}2mNpLm_x4L?wNEgRiQ++hSnnk+%*KfPT%5~B~`D?TDyuPyY+7A z*1I3pEm_#ZjPXOeXS+a%&ajQCM0om>UI9?`kaqV;e2GyGAuY5z8+fdG%lUGG^cwat zmIN8vey_~e*O5lZM8SLucdWY22(wyxaPK`L*L(c>{sHsiUsrS33IE9?5lWazBD77) z;m3QuEblW_2?%8NAiBE+1oFAAjo<|P4TZ>#UuMv@5~py&0HFhfO?zr=w8CXnv%z5- z>rikF_noTlw|ki|5(YYjJ9>KcDK3LY;t&K$N59nz8*pIqCQJav2`Z_(c#Ex-QmB8h zOG8Ujj$It{a^6x7BnhE%A!s^;=0Nzssj#WEoA#_nZgpoh_BoioxEOk?pwz8Jlu9C) z`9kQzsz4j=J)APQdVTx~Q%Lg=kyHVqqfvF_g##p@$g+2)@jbWA76F6;y0{&Q_P(bMPO=e=y~@!psH zV*l~pKlBMDe_vifkiZXgMUy`$^Y#Z+Dg1`SM)Y-}=JuQ1!d89yF1N&>dV7moV|f9> z5BTh&w-3^cPSo7~9Jik+xBoCs)Rg^d-|!1=?;pI~H~b>EZ*lvnQug;L`($})u*Xw& zm*^F{i_Y=BSH69p6>rRs;qanNb0Lrk7vdSeSUaV^zwU<|KsT-G z-SL^IIU-Wo6tL7WxYDpwlNpJgn<4yqk7YJK=G}85}X|SP7JOKYu)cVV`Cyj5T5%(^kRnsuvO=Vl#CO~tIs0@P|f#;jW{3&*_T z1iT|=UAxQ$;Ot`Y9dJ|3Iz%+NTZ>u8&7xTsX-L5*%5EPv!qe#^z5_PWu=Yvw!q)*} zKSOv*+brpH;XbE%LVzSV`&|}$ib9?hJxJlZMaCIU4W8jtub6z$@;WS#%U4ig(TmqT zfMi&sVi3JCtao#sVjRHDpqOHR2nBH_hsP==@A>s+3Cy7e%`xISOZveWkI~4ju_%tT zHz?*zY_gTsCS$Ws=>V%2{d8gFPQwd7+{$~U7(uR3gN9eH#FNZSxTWzuet(AR*+1JsO92&dp~46$0xw@;CSs-j zH!RZ*jc}cTM&fNjgOe(tSpr+z3aVD2UJ)vT4-59S)NR4Os+e80d`3fT8Heq{D@t@K zT4QS#7xg4RZsD4`-PSFzuy#JaVfbfMkF4X!9a<$jPIZQ)X(@JfYIam#Ak$(L`rRB# zw8@0Li+_0O{;GPU0bgKG8Rij}zn@nT+mP_cqu1rb@lUI?3ZUuqcG-Jr<9Itym} z2SbqoB!<|56#`mmHzkP;3+q<+%d&>X%2`e!Av>juZ~(A;ili>eh3gA%7WE?-bxa*E z%RB)9wiE2NeXWQtl$Dc#aoZc>Qt`g7ivoyI;+(SBs^!d7xH7*7I_Ibf z?jP{MIF5aG`GZo3q&RgPORD+2ThGE;hpG|Bb%a z+FECIqe5t-D4C>I7n#}P?qhW`I&$EjtRA>DQdT|^n5dZ{0r1*Q_Ac-!qnqUrr|P3p z*e5bEesZCnsQ5t!)dv(Q#ml4y3>W5SwiZ-cj`dFlDwR$I1eHbQn*|h400Oh5Ez-U} z>~!jaWtfBt7S`e2cqpUQ=kmF%kJ-^kAWvfn-e-`r zU>%yctZwSbB2Teik0$8t6OW+ImD`8ZlW3iiL>H8U(N??o2R<#&1zGMd*Q*JFW>}~T zmy5EdKKM|%RZC=dv3i=i<5P@ZEd_nuN9cNk>#$W4tdG~9tR}VYj1~{U(3cBr7xg)4 zuwMF==0aVwHBOe{Lb^Fw&YNRAY175{G}3uD zk2&~QHU|D?wULceQe}w%;dbF1X=E82{*(N_$cNbKOf@iX(->YWf8z6*wt=QmIRPcJl!q_WzgU_`{oW$?9 z`fz7)U_azL2qo8V@!N9md&OP+cuyNeiv!yv22zPP=C&9a=)N7I81BeZ(I;E{i;=;K zjtbEGREm#BBjXQHV~L~i_6OYlc)8W|fY2?gk@2**#mF$+yC7b|z4=Vry$`wa&q>*rEi=krocxLjGoM>x5} z46YK*3?I}dL>L`As^KI7RL4;nkNbk9mbyDS)#P*<{_gFWN8@yH|!O+x=kOl&$8^m zVVHUtHYx889LTp#;D%pA*($SzLv=W=I9u2?Drn-i#>vxi(9%lTe#6vLA24d?9gr2D z4p@vqUpX-MHMdlr(^906~Cw1tZ%%N07i{)o(<}$y9P)ScSaqu!Zu4gSDLO134pY%Od2A z9VhI3F-JHd#PogfAU>GzM0_yvOgSPxnXs$xP#c{S?~2GGlqB_t|}nVXp30-9eLO6BgJ)L83|^A@;^<^kG|zJ;aUg6ncp+ zr6UGjVn{Uv;YD_14sFiQ@KKeu0@c5DT2^68WHmp&ijT~{yhE8VHadaV8|Dctj4itx zz&72F7$hA9meQah5r5DJvC_jXx;i8uCA56Cz!ciAmiwk5)v zv=c^H^RA*xl4s&`pdSw#iB^JXXoNLd{X&E_5POIZ1ON-JDh3J+vK+IDYbLGH{VtMMm|cZv-Vy|kq4>}G~$)y+51)S!=VkV6Kqw84TU z7-#@N)4R|pyro@yK3S80Tk2*XkpWYJqF5kOqE@wb?``XYDY{OWk^9!a5vfM5I^JO9H$tDryV@?CpRG}mB^|8Ue zEDeD!3)Tv)@l}c)u~woMW_ON?$%JimlT~^_9DG>+;8UaxS{DGo!?Ih$s>cGo^7&`k zV#)S9a^-*uykos5Dm)2w2tZ*JZ0-`u?~>CdUFQB91iwY-h&%-?c3GQM-!Z(tUS3?x zYhB`CmmrA3{mr#zx5#QUvLK;h5lQOIwUyOF*C4t~Pj}mh>B=&)`kQN931@njYv~*< zQ7L{&&;}w6;tph{Ztoz;ifnS-wdp*>!mCHFOGo~owItsJ9zRGK`NtBZJzt4&=p(=| z1dwS<^mt?9zHs1;3$}m?o+YgSJt`F<$|He^hYxk{rx3J3hyfTJhcPv*AKiO~B}?G)Oacz!b2)*-v|Fy!G@LRZ<*!mT>@JbA zty1#j8-(+}AsU$py}W1TdI)&mf3Hrv#LeYwhtF-V_!WR1X+dUi@Z9&%aU zk4Mci@|+5`(5vH?gP#oxt}@5Lx*SzWeq4fF`7PL@%E4?oZn8en1~C)pU`TJ+A=98T zqe9B>)gybjQ7=?6&>+!sf|V;Y5DhX*oOjhAtyEVu7aZzoiH_0=ODLcuPpQvSHBs4& zDqb$zwm8bm0A%vJL~{n%uRwY527EjMm8~$ZB;1tDC5qQmEkyW}D7E8y$0_CcO z#ZC(gnmz)HkZ22wtwN!kOC^O87aCY}+H_#yWENQ5ZGG`rSlG%O7Nx5UN?0&Cu0aqm zCoB*efdvTjO7@Wa$OrA}S_Vx=MSyV`G?d|>?SVO5yFrtdoGfe%dIjVKBArqgobNm# zqb%7m^X=GM1So?pXDPekMg;f>gO=##ctBVxJLVB?%aGL$=P1HGHa|myCy3VY+%mSJ zeTEemrdifC`kj^Dc0?v(kuIYIAo2Nz6l`Er6(g-&2pIR*D#7F&n&Lt!o<$CO%^e5P zLZam$JB@^>;pAX2#C-e+^OZZ&L>ef>Gi^VoidvEcd9#8!^3g?&2llu>3H5W>qX4H& zdqDhl1Ri2>#8@nx^Ed%^4>t^!O+!YMQXPxq42F8z1Py|}P0c&Px0pOD8?;Z%PkmBh zM#dx*iD|DKUgy_S_*w?VagR_L&Fu+2+^PVVmDz++jZGxH$@6uJaM&d4O$7J3<&Dar zaXAc^r^VXOM5!YM7G>6-E;gD6hN!%+vA-Z(+m&g-Pu5~wMm=gJxs8c^Hl=bR=#eZN zj2Pc#_#+RQ?Z^ zdt<_(>Ku#pAw&)FwnWW9CF;-`JJ5=)S6`l#oY#QH=>9LgIly) z_5o=Wq0v!@nuTbNfJMbwrO3#mCZ%SNgEjOH{fJHIbOf`lAlbI*Y5Wz6U7_2dSaMNv z;%q2(o#rB16|vRx?F%9dM-WgSn7 zMQvK7*f6glPZ@3~7F`jFRf4g5$6c&DP^??j+q&dzINVrdH;)e#I|p4dq3@Nt)i5V$!atXLm z-=dscikxHzc1?6PiU9M*{0^BQ>f4OTn+@3nq7#H1d_-YR>sw5}t4K5%iOJq680F1< zQdV0IlcXH6$~GTanZ3XbK1+i{UnKF38XILUX~@$d-fl{TnXo0mAVgYe6Bawe-5y9Q zv_Roh54Q4C-3w51VcAwxT-ztwj29%IMLdAQ;4aewYm`Ic(sJfthRz)GD2HUqoH^{k zik@UZ=v=O%(%4F~1fZ5p&04UXs$~>Ne;gS~e<(#pp{8qVWW#h+=1D=}QkA1C@(QX( z!D-lP7JPP&%Q2prdH}}GUUcd{hBi%~ea9{wCtS7&BJObxG6lC<>C#&T=X5xbU9jK*K01^DZ-;a=QfxE5}a(4!`ACW4AN z4GT!MJO_~W(?*Efx>Pn|d&nBMc8T{_%WDE$`SGrWxw0*z?ae{Cqc^UmMY|u=v)(*v zX9ykG)5Sr1(24yRqS3_ZPrzK_s(JfO{dHWw(F49*-(@w*>$gk#tC8_)3X=V)2WN9E z$Nl1$qXC9-Bo;myEM}a%m6f7bBxSkWNlwX>J?~zIi*?H>Ic?q=g8TRJo#;^C7wuzK zD^YziiW##D11?-}gt;*}NkfwA3S*mVAL{TY7qpMyNwkkGCLIQL(N@(yxa?WyGLMER z&|n){$Oz`MTK^b+GsnXFbQIQeqp9nC&5QlI)~j|9vw?WLPzJDeiry^qN-TCxg(nn+ zsbEv~;}mvalTshO_JCKqib4&oZj_uIoklx^=V%}Z75PXDhE_#oM1{W;fE>|ukuuSB zg}OWko2AorbJVph-c~COl#0T$Xc);aSZDLVke#P?cA2O9m0&r-bsZSFm^9=cLL%aB z4IPc!V_)%HkalBsu0B@Zr}kzx7MQvLCoAx|HTc{Tb22i9&Mg*XwOoe}R-`1tzfpfI znq3^*La052d?q31NE17&Xm%$TCFFL^Pxe!YDN4glWgv^9G9Gdz6xkTKC=Fwm4hzm; zbTVA@tKmLKfzC0kFW#7(o7c0_EKfecDeRxDU3*JW;Fpu6KN+OsZBP&y%bt!A=(ib! zgFUany4UJ0P~tQS#2JWl55hc)w`s{a(f?K7Xg+>CE^fBCh*$G=T!gLQK_K2%L=~WF49& zb6%$^#x8dTTYLxo3chQR&8FNsgOxqO6EF!b!6x_wqu^|@6|w+#kh*v2y)*p*)r{&- z)Sq;&KL*k?pe$xDGg7J(5CUW~E@zq%O?CI5;ooWgX(q9=%v=zx2jJ|UT%f=AGQIcE z--iC4r@uS&m&CKu&Km#J9KDycBr#TG^(}&`QL9wB@KmaDp&oB=LE5Qup?RrtA?qs7 zO(+gX*f_eDgPc&uCL)q%cX)ap1>qk0e=q&N5Sle@?7jTEhktJIP@w>(tI;lwGi0rm z1gb>~JYTxhlr9mwYM1UUUAhqceK0L)Cf;A~H$~TYyXYDakW?WKf9#!xqfH#^$2vvs zUS5rWTOpiM7Lo#!4L7jpPzpxZlY%$AECl9l@B&rRT%}x~;GDJP5d_f^hH*%$^HmeLeZ5HVqB4jWkhU?~-jZrxYCaYnEI(doKHkb3t_c5{cj^T+f8BDgmq!Yw z(hu1}>BP9)p~A=)N+*<5MPryZ-YE=Zl4IW=&Wr=b3n;mM2@rC59f)%IO4J4Hos*=g zyKrMN>C}a0KoDZdC&me z&_%>&*Bo7A3j)Jeq3@MTkAkTNx^}Deq4{;VXf(3Tz+j`IuHN@^|VK-Autp@ zW7eO%GwB`|58PAbNkuvt%Bfmp52eAYkD))zQgM3rZyzSj&eI=0tg z8p~3Z>Qc83;1bwr00F!N6Ly)(0z1Hbrwd}sIPDfa{!6$xg%KYJ)aIYv8DDh z|LnA+%vs9lhd$2;?_q>m!MdNS`fTBK=L)Z@3$NQRybcB^`-Ss`{X#aFKqIu5Rhaz} zjDDFs-8++-Zk(eVXKh%!?e3hFuy&a}3|(dqpOx9S_B9f~)-Zq=T#S*6)#y_kj$RJ= z?72o6$0ST`gQ?yi*U!r=-m}lP0!r?)9sPK}MnC*Z$H?p~^JzNqYu;TLI_0x=DS5uZekCb>{?S zkPjeZHQi-pi=She7%RKz;{;_x@Em>4A(4IFv+7Tj66L{{KJUwKJ`ib;zP5|Hq6lG_ z1HzG?*&MV3(et58Z@`YaG98c<2is$H`KkhL1kjYuDWi*e3?dnN(!VkThh02R?QADf zt`WqPow)gyAALxmg~w2M2#j)!EpU~l3xU#54yswPN!Vi_(lH8`#ZLm{1%fV+fJrGp zp>hlx+k7OJyfB0_FUq_zbM3&H*x{_h0BjG#(%OJNAX3sG3&1mcR|QQwNHFux_9iwa zXhm7n0x!GUM%4rz0)ODRP@(N$#F1sMv0Ed{|S6a;g-@;@7bffC1Ikz|&k7Txd|#G&b< zh!Y@w1jKB9&;Eq8Yo*#=i$ITSaTsvB%nk;OF?7R7a9GT-kB&`ckh>11kmq3fO?RY+sp%ipOI!C@olfVnejNso z{z%C3>-ZXa)3emkd+iVfr9Zv!%>JvgKB>KMBq@Iwe0B-4KfUKQSrI*>7>*ipI)-sV z#oekD;rnFOW+`f}4(>^_(rv_a&=>Kv?7PWVL?$KyX2^^txhT}oKYz);jZ6l--vs^b^uOi>HxFmejgaSafBTl!EcrUp5wat4{} zjCRN&`#MrHTRy1yGt>-3QVEVAlaL+T4zX#ozH@#^*f1E9nBpQ=91i(E#MFKV18~B! zwB3$;T1^K0TbXyu?k0~SvriSg6lQ&oj9+mY=_G7N0CVx&V8rqUgr}}s1Tqgy-Zwao zi>eP7sSMGi)0hL&PHauSBmodr;ewTqb~OpWSt(xgoJ@m=>g8}!ev-sbm2Wwm)Tp^t zxiP{KQO%U3JkmW)$Vs-A&a=?GP3bY%XrID}aSsC>oMcr!4kAYvk_zM!knoqL zuk$yDX`l~rf+8hfht6^c5ia$p|$qX5;JpBn?^j?0f>ec=tL(F^rs-{GxTky>*ynk=- zjJMw$d@d|y@iX}_zn@h< zuW(3(l2*7PRsgvkaX#eC6{@o9c-Vh^Ktg2n?_0Pv%r>KfKAirNLY%O*Z267{7gZQ8 z#CM;?bRbZ9IIUPsFxB|b6q3)?!~5X>H;fd|gKN|@oc>MskUfywU-b5Q)l*ug!QZ68 zB^pGD$c~sLxh7;DvvKz>U;PV5Uy+Ii8m2Suib`ib zIjH`neCy;7c9tqn>b|pM4-qSNmnQzjqp$94;{Ji(j{e==60jFh1`j|Lq&Nj?ZUwsnwr=^mn*2l-2)Y50zR;trqr2T zlQ6fho$Q}1&crM16<`9f89Y{Cb$Y)$4pyf>=CN3-Q*_D`-K5eFB<0{r-NS>#0g7$2 zKZ)MOFPtG=!9GQrl}l_49~ofnPJ`RL$Ht_pU)e-1l@Y~VvjPOi zb_;+Ah&6zVaA8foKfQ>K4UP_IZpum+D=EYs<46J=j2BN=y~30m)f`L@7?p}8Em zt(D$lG(pEfd`z5p`E*XUK-|t@kg$_&_hxM%Whw?{yQ|YDZjAr+h5}c~?}aY##3V|S z5GSUHPXKZ?{S-hZG{jk+4U);|ADxUrHyP|oFutlCD=9&48!O{W4v|O_2M9PEaK$G! z)Q)Ja9TA=_z+xCgkerpapGx2POpzekI|@r=06L&N?{x*g=y@E0z2>wiurmF})#3E% zXE*f>3DEnD>U@l(UT}{8?vppfcqSIv*}FL$-`(igPjLjOau4jg}qZ>Oq z(XHALf@nNrM;FF$IsUUxbJXx^Hr6n(hfG5@bVwY6F)F78=cz9*P-H&{9n!UutgsdAK4+dG&qBeC6i!a$E6=6%Q6GPMsQ{lk7zzfJGh&bE?;`GO9d>tCrfIto|(M$5}%4 zxxd_;BP0U8htV!tLE2+{nB@UD&a?Y^@VCB#W&>La&$uxuxMIimnbB_-z*SdoZl2(+ zXa~~mf^T5_IS*RE4a>h1lT9XgeFN#qQs^~;1~(7k=w0tNJQ?Xyb(y7Z0>Ydpf!gd$ z|1UB?paX8wfvQNGOjN|(=Rm~qzsYeTy+hD)ZJ+84#kD&>g*fnd!A%AQJXi?q#{I9v zUA^KXk0-FH;$4J_rgaS$!vx4N*u=JJb*68e1TcMiGV#)HGk^ zz>!t$_O8;yX=oMjy#9jpOdsK$~X-0nA#XZGGjA&Dv$$uh4`)R_bj~W5rmk zZW7niC6s|r4lYv$VxZL0&X#NqsIG1(eBt4aLZk{(n6flGTLEPE zrozwYT$mSyJZ%{jWo1fCbdM>wHV?7$6~AD-^D3CIqaP5JxjvFB=aglnD*-rSE^_y= z>c_(849VGp+6cxG;aK!Jgc}m}^^=}EJ)Y?;gACVka(K7c2td#)I8a;@uV(DvJkVkh zp&kQP^s@4dW2=XP(FaB-Rw+b-Db#-0!J6qqCep>^?%C2Q$;5Y7Q3=unsiXl`JyFHB zMnBUpD-8cdGkEf$x8A`5yor_h!|i8=U&22POquGZs`h_>-qU1oE42@P@Mr!L%+)VW zDp&KW>6IHS%OVyby%4&FK9CusMSw3`BLXM-?>^#x^=`P z8tc#g+?Q8h)T1|jle=ib_289ecvuf#p1#T3*D-CqxXOXyeS`6tt6k%};CS)dm#+2b zTCX$$upGNx$|v^H9!;y!U(T@&4i5fOhKGWpR4!UKy=5Hb71+TmK4c!PoOabwN^fzE zptm2g_v}blRaPn6rwSVHcQrT>)#2y`T8|1~WBoS}BHtunf>%YdBsY7O9yE@8UbBP( z5;1IU_eJ^Mq@Vf&55PhSiSD<{8i0O0$`gFc+tHgMby?->Lu6F-SjA~=bPl-9MpZGYKoT2(=lJSH zQ|_)6+|4ihnc4^OVWb;O%l3_F&!UdIB-iO*sbJ*O2y}IPzqwEue zs`Mrl7b5A6840Qx{{+k|CEwWU4=M*+_nk2*hS4L>?MPD+{xmo&ScC>}<<#}je>UuG zr9F>M$zl~6^xMWhM^i9 z!i7`?uxostPCi}>e3@D^d@{^FON!j;C2F8@hzue*43v4+hHjp7z^oLvALshk8}bD1 ziS;yM-&C^YcwA!bObZui_^EZ@Wi=FN|Uz`0?+B7WI%SywoRN`X(W;~&r4L4#Vzt#6)HYpILf+&kv0$`*N@#vm_F zD~Q53#6pRidCrw*M69qyzD%sBgRo&lT~fLA(Jx=fK3d4+O(=2YqHt4;B(fCH#Y+wG z5oXUA!Ka19^X-U(PmH?5C;EXPCQ{vuTpJYPvMHuhwSh>Av!znp+k~{&%q7v61Q7f- z6N$s_w-FOPRpccUadBB!_un6)^R%dT9f*T*Z6?4~i}Lf<+N2MJ&4~oC(xlS@1KU)D z0T42PwVUpHZIned&-kA0G6a*!ZsJ5oyXzU~!EeqvYl+ls$JLY*)F-{Rt--?ZXbZ*o zw){&;7j!hcyuRKkixG=$nFXM<)t$Z}R4COy{--xN%} zHpzT|qiAyyQ9-y23PgHvlx8q(WNnMbbz_t*4l-`5&zQQOuz;@&r+nWdawe6Rs1x ziA9@fg}cvHg4|)2k%0!7C4b)&GETm8`tC-K9f`2&nU3F;92d{vg{=M-B-}2?;Zl(t z`2)_oOU2tq5wgYRAWsjy>eG*o1Jiw&RT*Aij=RVY5({}8jUICX#B5#{I*=0}(t$zO zfjK{*BkL_7=>Uv59pNgRne}yD@xg%uF02Ax-J!zQIkOYr!$&}ce_oVrub&86 z9}7>DBGs!uiQDpyd1rrEyjLOJ+vokRVE+-!yLI0V?%BL|yyLEjcT8@)8Shw_cXh3T zcqH48u`73Mc}F|%$01-h?@ut(@bO2>ygyXt{qoUyC&0DKQ+p>zr;XT2Iq2j=*Z_j` zqqFkf#E^tckQaG#Jo2rOhINAyb#$bf=vbC7UUv|=dr7CQNktn#Wn@uL7@=LOY~ZC; zqh2rB3D}wTDwZGtPW3X`2?$(DdWvOy1tp9H0l=cmVs?UAvPqY?&;W{p582=Z=vqNt z#Nf?Ja=Z>J#uh6l|KHP}m*|g@*)D5OpBr3ZH2v5NP}7BSuEfMOFSR*we`52!}jJi!nSUR+_WK)V}TgR0-_J99l|jv`T`<=-WAbV2p% zl@AMh_=sXt-xrtx4CiWe#Aej!nb-s$!ai?PqVLM6k5Rm4jC!G^V-zp&EzFmk9WDr6 zD{9w&sS4d@G6lPjLPM1Yz#IdKyY}xG1>#QziMz_oKRG16SRiqI5fbcjK>VC$fCQgQ#l8p?%o;7Ai)&AkH4R0LD61u0k7 zZD3oBXZq;8S(UJcyqLtiwZ)!Fn#?@M3+PpMsbqbrN|JZG;*Y-PW&sNwtxXTx6iCn~ zdRWqDK;eKkuC?XSZ>{z3A^N}cY}f=9R-65RcWnj-;2j;53?4`|3@a4>p7ZHgbU>BO zzT_I1!Kdu=WfR+oJr68gJ2dug+F?=?5UAv^Ok~g?I@NDkarJ|dJ_cpueF$PES z+%9D!3y5-)$Ga^)pxum?>hpZWVe~By)ypq44!_nn$WDvNJqS0c;+!4?ym&EPnNjqK z(~Pn{|xa_NpeFx z%M?3#gO__XDF;w-@h~#j3#eNz;WN<5I}I68+!ivKo!xPY`}Uv?beKtdj)%kMkfaSZ z@^TsShRf=Ryr3p+sBu2hP-bRlzdof`o0bG2TgV*Kz3iM~P&*7tdD{(UYoAB<-Hx6r zgSi)7YKu|0&vIOXH0o1mYH)k#U<-e#ZuG6ES@*gZuj6MpkaS0of_2msBbMuB0%dr* zLl>MWE-ZZu1y;{gVM%BD221Pk6Cz}Q7ynSfdOTpIoduNhFUpA8+-to>6|6T`!62}r zd%^K^dxaU;3NwHT=F;qD@V}~08&L{fsIX%Cq+~`2d++vCgXHp%?-1zPR&?3x@<+Vgy*Q=RakVQVj|E-(SZe5sHzgn0Zo#|vt zn49V#oFC?f#pJz5_br^DuOePjh=k#z#puYOo+8#$79ys{s27j)H=Oc~kR+uo`FnHp>Z=>Sv;c!HS0=xhC*QEo}5i2jPJECHtVLKc)tXBy%p=| zCht~q@IvViT!DQ|t#8Dy`7mjBMYh?8Hq~8RSyX;(TG-)mb0f1dyoEjvS5X+6MuR8h$rXhjaygpoWw2)BMN~L7)E{0T^@>K&(2RWAW4vum zGj@gN4LY+gW=od*$PVM}ce>0C)cOMCx9vt_Cd0K+6x=+uFiCrG(LuDSZ@1YbAPQTDFbQ2g_p&`URXWh6EaU=XOaMyEmj>eF_Zn>WATzX|ClaO*IUX)#Q&-spdr zS>q}@Uo$%}P{#!%HcSy}z5JgbTh1ExHn@$gunEo6r=FQ&IhG|loJ#YY% z;Se5~IVot%Dg*WLfL_T!p&gLWy3f-v$hVg3mjkyB{8qyrW3fSdr zUoz+X+#(>_sg8MQ-U<+)Jtst!gJAiDY2IG)ioxOKHD;4%JMbweDMO?7=NL2lT+E+K zcy)UmEkGp9Q17~%zh-AHS^hxPY7_1sJt%V$Tw{7PLb+(8Iaw33piWiB`4L<@^^S}{ zoqnC%RBP7u0w{4R7&j0@if3pVw0R-lu{BQ5FnE``cbm~Z-%{fqQro1nS_Il9WZj^L9{R8k8a$C8tce{~neJsZDRE2L%02^ei-ZH> zC0>KHX_tw)C^{(U0qe)Lz-I`34cj+#siX^J0kJBMztQ{=n`ci-776pdQcJr_^DeB&^s1@rLD`tTe=#g-AdGwX11w{Ca8p z07&B8fZ`Gi^-qTEU+m*Yp@- zZgk3et>~19F0{1=dmQQW|MelPBY2LT1>9V%L2>lpBDD?h6s4v!D0Dz#^x$61EZohY za2BG}EY59$!Yj!oD@I}4da-2j;dq!6>UE2Vo0ig=!d96@|ZqHx`pc6ywBRY z( zE4c$q4LO+<73)&+#gs%{F>{vDZ%9wc=VYwkID(+dg%gXha>U$88iLT=#=1qPYM(?jl zJ=`JEStW78=9=Yc*~Q5bv_$>dT3o2rrRs0cA8^)U##4WdpCoeOr>1V7ZqkMGqD!Au z?2b@)_Jl7yo~BRz)z3NLeLBXoizr{I_ki;m0Y>JVWrt!j z4YZkDN#@@|*Z_$hUY(fAy^zJ~B9ot;6le}qa9mGMxXeYHE3K3T-2=oaTPw8tY7HFO zdhX;R(;hHzRhO*?C}#FPeTPcaRTze-!sEH(e^+d2t3d*-VP6Q&sA%xaHRJ6E3%qa?L~ZapgK+vxp|!K%Ueml2?#8@r*G=?p ztYF-@e#aE(l-c%%$a_+p<(XcxA?pMsjkdlbj=PVR_d+xLY~BAfR5RpU2i%N+2k(f= zI8n4>`O-5?vroPNB8@m(pdxGlqnm&HCa_q2nAa%g>dxF2irzyR~_}n7T0Mp;u09T#?GmZ?+|87_GJBOdRoRin$$GJ{hOR8Pe1Gf*TA^yy6{p5<5?GU`xF?{0pJXO7REp#?S8oj zM*&YR6m#eG4$xi0Ujon9dVI&8Wy~Gc-bXycea}!8g7^~g$ zjw@i07#-w)^|_;d(`@5)DXV;XmG`(#^_Eu8O!BgHAq=ZLpaYPdL^y%e#;i7+oG$s3 zJl?)q^L~W=x%?y!z}L&=B_th={ujA$(s{CXl7j}E2EXugad0b)Mh~JTa2WhTem++H z)%N=Hk`25IUfWW7<00JE*&hIY>|GYnCAdbr6FZ1FR8e0LKW;Rf z0rH|v4N{4`1GwS+{)Ha+=lGTKW;D;}tdLfYmrigr29?9G(LxopjuBRd3uO>wq8h8z z(x6&gkcWU9zo*YwD7@L6q4Lc+;5Lr~+)gXJ(7gpwzBmFkz7lFRsV)l+x0u|)uSe*| z0{ohOfm!r55E*=8zmfQK32fTLEkIJ)`V4S%t?mr>fl)UIrt&Mt}L+j%kCz(wd7%@kRK)T0^KcL(~UWRn6Y^@nOKZ~9QCtgnYMDa zRXfn&7(|N()FDn})IT3DC<

-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 literal 0 HcmV?d00001 diff --git a/common/modules/web-modules/diff.min.js b/common/modules/web-modules/diff.min.js new file mode 100644 index 00000000..6fd5d020 --- /dev/null +++ b/common/modules/web-modules/diff.min.js @@ -0,0 +1 @@ +((global,factory)=>{"object"==typeof exports&&"undefined"!=typeof module?factory(exports):"function"==typeof define&&define.amd?define(["exports"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).Diff={})})(this,function(exports){class Diff{diff(oldStr,newStr,options={}){let callback;"function"==typeof options?(callback=options,options={}):"callback"in options&&(callback=options.callback);oldStr=this.castInput(oldStr,options),newStr=this.castInput(newStr,options),oldStr=this.removeEmpty(this.tokenize(oldStr,options)),newStr=this.removeEmpty(this.tokenize(newStr,options));return this.diffWithOptionsObj(oldStr,newStr,options,callback)}diffWithOptionsObj(oldTokens,newTokens,options,callback){let _a,done=value=>{if(value=this.postProcess(value,options),!callback)return value;setTimeout(function(){callback(value)},0)},newLen=newTokens.length,oldLen=oldTokens.length,editLength=1,maxEditLength=newLen+oldLen;null!=options.maxEditLength&&(maxEditLength=Math.min(maxEditLength,options.maxEditLength));var maxExecutionTime=null!=(_a=options.timeout)?_a:1/0;let abortAfterTimestamp=Date.now()+maxExecutionTime,bestPath=[{oldPos:-1,lastComponent:void 0}],newPos=this.extractCommon(bestPath[0],newTokens,oldTokens,0,options);if(bestPath[0].oldPos+1>=oldLen&&newPos+1>=newLen)return done(this.buildValues(bestPath[0].lastComponent,newTokens,oldTokens));let minDiagonalToConsider=-1/0,maxDiagonalToConsider=1/0,execEditLength=()=>{for(let diagonalPath=Math.max(minDiagonalToConsider,-editLength);diagonalPath<=Math.min(maxDiagonalToConsider,editLength);diagonalPath+=2){let basePath;var removePath=bestPath[diagonalPath-1],addPath=bestPath[diagonalPath+1];removePath&&(bestPath[diagonalPath-1]=void 0);let canAdd=!1;addPath&&(addPathNewPos=addPath.oldPos-diagonalPath,canAdd=addPath&&0<=addPathNewPos&&addPathNewPos=oldLen&&newPos+1>=newLen)return done(this.buildValues(basePath.lastComponent,newTokens,oldTokens))||!0;(bestPath[diagonalPath]=basePath).oldPos+1>=oldLen&&(maxDiagonalToConsider=Math.min(maxDiagonalToConsider,diagonalPath-1)),newPos+1>=newLen&&(minDiagonalToConsider=Math.max(minDiagonalToConsider,diagonalPath+1))}else bestPath[diagonalPath]=void 0}editLength++};if(callback)!function exec(){setTimeout(function(){if(editLength>maxEditLength||Date.now()>abortAfterTimestamp)return callback(void 0);execEditLength()||exec()},0)}();else for(;editLength<=maxEditLength&&Date.now()<=abortAfterTimestamp;){var ret=execEditLength();if(ret)return ret}}addToPath(path,added,removed,oldPosInc,options){var last=path.lastComponent;return last&&!options.oneChangePerToken&&last.added===added&&last.removed===removed?{oldPos:path.oldPos+oldPosInc,lastComponent:{count:last.count+1,added:added,removed:removed,previousComponent:last.previousComponent}}:{oldPos:path.oldPos+oldPosInc,lastComponent:{count:1,added:added,removed:removed,previousComponent:last}}}extractCommon(basePath,newTokens,oldTokens,diagonalPath,options){var newLen=newTokens.length,oldLen=oldTokens.length;let oldPos=basePath.oldPos,newPos=oldPos-diagonalPath,commonCount=0;for(;newPos+1value.length?i:value}),component.value=this.join(value)}else component.value=this.join(newTokens.slice(newPos,newPos+component.count));newPos+=component.count,component.added||(oldPos+=component.count)}}return components}}class CharacterDiff extends Diff{}let characterDiff=new CharacterDiff;function longestCommonPrefix(str1,str2){let i;for(i=0;i{let startA=0,endB=(a.length>b.length&&(startA=a.length-b.length),b.length),map=(a.lengthsegment.segment)}else parts=value.match(tokenizeIncludingWhitespace)||[];let tokens=[],prevPart=null;return parts.forEach(part=>{/\s/.test(part)?null==prevPart?tokens.push(part):tokens.push(tokens.pop()+part):null!=prevPart&&/\s/.test(prevPart)?tokens[tokens.length-1]==prevPart?tokens.push(tokens.pop()+part):tokens.push(prevPart+part):tokens.push(part),prevPart=part}),tokens}join(tokens){return tokens.map((token,i)=>0==i?token:token.replace(/^\s+/,"")).join("")}postProcess(changes,options){if(changes&&!options.oneChangePerToken){let lastKeep=null,insertion=null,deletion=null;changes.forEach(change=>{change.added?insertion=change:deletion=change.removed?change:((insertion||deletion)&&dedupeWhitespaceInChangeObjects(lastKeep,deletion,insertion,change),lastKeep=change,insertion=null)}),(insertion||deletion)&&dedupeWhitespaceInChangeObjects(lastKeep,deletion,insertion,null)}return changes}}let wordDiff=new WordDiff;function dedupeWhitespaceInChangeObjects(startKeep,deletion,insertion,endKeep){if(deletion&&insertion){var oldWsPrefix=leadingWs(deletion.value),oldWsSuffix=trailingWs(deletion.value),newWsPrefix=leadingWs(insertion.value),newWsSuffix=trailingWs(insertion.value);startKeep&&(oldWsPrefix=longestCommonPrefix(oldWsPrefix,newWsPrefix),startKeep.value=replaceSuffix(startKeep.value,newWsPrefix,oldWsPrefix),deletion.value=removePrefix(deletion.value,oldWsPrefix),insertion.value=removePrefix(insertion.value,oldWsPrefix)),endKeep&&(newWsPrefix=longestCommonSuffix(oldWsSuffix,newWsSuffix),endKeep.value=replacePrefix(endKeep.value,newWsSuffix,newWsPrefix),deletion.value=removeSuffix(deletion.value,newWsPrefix),insertion.value=removeSuffix(insertion.value,newWsPrefix))}else if(insertion){if(startKeep&&(oldWsPrefix=leadingWs(insertion.value),insertion.value=insertion.value.substring(oldWsPrefix.length)),endKeep){let ws=leadingWs(endKeep.value);endKeep.value=endKeep.value.substring(ws.length)}}else if(startKeep&&endKeep){oldWsSuffix=leadingWs(endKeep.value),newWsSuffix=leadingWs(deletion.value),newWsPrefix=trailingWs(deletion.value),insertion=longestCommonPrefix(oldWsSuffix,newWsSuffix),oldWsPrefix=(deletion.value=removePrefix(deletion.value,insertion),longestCommonSuffix(removePrefix(oldWsSuffix,insertion),newWsPrefix));deletion.value=removeSuffix(deletion.value,oldWsPrefix),endKeep.value=replacePrefix(endKeep.value,oldWsSuffix,oldWsPrefix),startKeep.value=replaceSuffix(startKeep.value,oldWsSuffix,oldWsSuffix.slice(0,oldWsSuffix.length-oldWsPrefix.length))}else if(endKeep){newWsSuffix=leadingWs(endKeep.value),insertion=maximumOverlap(trailingWs(deletion.value),newWsSuffix);deletion.value=removeSuffix(deletion.value,insertion)}else if(startKeep){let overlap=maximumOverlap(trailingWs(startKeep.value),leadingWs(deletion.value));deletion.value=removePrefix(deletion.value,overlap)}}class WordsWithSpaceDiff extends Diff{tokenize(value){var regex=new RegExp(`(\\r?\\n)|[${extendedWordChars}]+|[^\\S\\n\\r]+|[^${extendedWordChars}]`,"ug");return value.match(regex)||[]}}let wordsWithSpaceDiff=new WordsWithSpaceDiff;function diffWordsWithSpace(oldStr,newStr,options){return wordsWithSpaceDiff.diff(oldStr,newStr,options)}class LineDiff extends Diff{constructor(){super(...arguments),this.tokenize=tokenize}equals(left,right,options){return options.ignoreWhitespace?(options.newlineIsToken&&left.includes("\n")||(left=left.trim()),options.newlineIsToken&&right.includes("\n")||(right=right.trim())):options.ignoreNewlineAtEof&&!options.newlineIsToken&&(left.endsWith("\n")&&(left=left.slice(0,-1)),right.endsWith("\n"))&&(right=right.slice(0,-1)),super.equals(left,right,options)}}let lineDiff=new LineDiff;function diffLines(oldStr,newStr,options){return lineDiff.diff(oldStr,newStr,options)}function tokenize(value,options){var retLines=[],linesAndNewlines=(value=options.stripTrailingCr?value.replace(/\r\n/g,"\n"):value).split(/(\n|\r\n)/);linesAndNewlines[linesAndNewlines.length-1]||linesAndNewlines.pop();for(let i=0;ivoid 0===v?undefinedReplacement:v}=options;return"string"==typeof value?value:JSON.stringify(canonicalize(value,null,null,stringifyReplacer),null," ")}equals(left,right,options){return super.equals(left.replace(/,([\r\n])/g,"$1"),right.replace(/,([\r\n])/g,"$1"),options)}}let jsonDiff=new JsonDiff;function canonicalize(obj,stack,replacementStack,replacer,key){stack=stack||[],replacementStack=replacementStack||[],replacer&&(obj=replacer(void 0===key?"":key,obj));let i;for(i=0;i{var chunkHeaderIndex=i,chunkHeaderLine=diffstr[i++],hunk={oldStart:+(chunkHeaderLine=chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/))[1],oldLines:void 0===chunkHeaderLine[2]?1:+chunkHeaderLine[2],newStart:+chunkHeaderLine[3],newLines:void 0===chunkHeaderLine[4]?1:+chunkHeaderLine[4],lines:[]};0===hunk.oldLines&&(hunk.oldStart+=1),0===hunk.newLines&&(hunk.newStart+=1);let addCount=0,removeCount=0;for(;i{!options.autoConvertLineEndings&&null!=options.autoConvertLineEndings||((string=>string.includes("\r\n")&&!string.startsWith("\n")&&!string.match(/[^\r]\n/))(source)&&(patch=>!(patch=Array.isArray(patch)?patch:[patch]).some(index=>index.hunks.some(hunk=>hunk.lines.some(line=>!line.startsWith("\\")&&line.endsWith("\r")))))(patch)?patch=function unixToWin(patch){return Array.isArray(patch)?patch.map(p=>unixToWin(p)):Object.assign(Object.assign({},patch),{hunks:patch.hunks.map(hunk=>Object.assign(Object.assign({},hunk),{lines:hunk.lines.map((line,i)=>line.startsWith("\\")||line.endsWith("\r")||null!=(i=hunk.lines[i+1])&&i.startsWith("\\")?line:line+"\r")}))})}(patch):(string=>!string.includes("\r\n")&&string.includes("\n"))(source)&&(patch=>(patch=Array.isArray(patch)?patch:[patch]).some(index=>index.hunks.some(hunk=>hunk.lines.some(line=>line.endsWith("\r"))))&&patch.every(index=>index.hunks.every(hunk=>hunk.lines.every((line,i)=>line.startsWith("\\")||line.endsWith("\r")||(null==(line=hunk.lines[i+1])?void 0:line.startsWith("\\"))))))(patch)&&(patch=function winToUnix(patch){return Array.isArray(patch)?patch.map(p=>winToUnix(p)):Object.assign(Object.assign({},patch),{hunks:patch.hunks.map(hunk=>Object.assign(Object.assign({},hunk),{lines:hunk.lines.map(line=>line.endsWith("\r")?line.substring(0,line.length-1):line)}))})}(patch)));let lines=source.split("\n"),hunks=patch.hunks,compareLine=options.compareLine||((lineNumber,line,operation,patchContent)=>line===patchContent),fuzzFactor=options.fuzzFactor||0,minLine=0;if(fuzzFactor<0||!Number.isInteger(fuzzFactor))throw new Error("fuzzFactor must be a non-negative integer");if(!hunks.length)return source;let prevLine="",removeEOFNL=!1,addEOFNL=!1;for(let i=0;i{let wantForward=!0,backwardExhausted=!1,forwardExhausted=!1,localOffset=1;return function iterator(){if(wantForward&&!forwardExhausted){if(backwardExhausted?localOffset++:wantForward=!1,start+localOffset<=maxLine)return start+localOffset;forwardExhausted=!0}if(!backwardExhausted)return forwardExhausted||(wantForward=!0),minLine<=start-localOffset?start-localOffset++:(backwardExhausted=!0,iterator())}})(toPos=hunk.oldStart+prevHunkOffset-1,minLine,maxLine);void 0!==toPos&&!(hunkResult=function applyHunk(hunkLines,toPos,maxErrors,hunkLinesI=0,lastContextLineMatched=!0,patchedLines=[],patchedLinesLength=0){let nConsecutiveOldContextLines=0,nextContextLineMustMatch=!1;for(;hunkLinesI{diff=diffLinesResultToPatch(diff);callback(diff)}}))}function diffLinesResultToPatch(diff){if(diff){diff.push({value:"",lines:[]});var hunks=[];let oldRangeStart=0,newRangeStart=0,curRange=[],oldLine=1,newLine=1;for(let i=0;i{var hasTrailingNl=text.endsWith("\n"),text=text.split("\n").map(line=>line+"\n");return hasTrailingNl?text.pop():text.push(text.pop().slice(0,-1)),text})(current.value);if(current.lines=lines,current.added||current.removed){oldRangeStart||(prev=diff[i-1],oldRangeStart=oldLine,newRangeStart=newLine,prev&&(curRange=0{patchObj?callback(formatPatch(patchObj)):callback(void 0)}}))}else{oldFileName=structuredPatch(oldFileName,newFileName,oldStr,newStr,oldHeader,newHeader,options);if(oldFileName)return formatPatch(oldFileName)}}exports.Diff=Diff,exports.applyPatch=applyPatch,exports.applyPatches=function(uniDiff,options){let spDiff="string"==typeof uniDiff?parsePatch(uniDiff):uniDiff,currentIndex=0;!function processIndex(){let index=spDiff[currentIndex++];if(!index)return options.complete();options.loadFile(index,function(err,data){if(err)return options.complete(err);err=applyPatch(data,index,options),options.patched(index,err,function(err){if(err)return options.complete(err);processIndex()})})}()},exports.arrayDiff=arrayDiff,exports.canonicalize=canonicalize,exports.characterDiff=characterDiff,exports.convertChangesToDMP=function(changes){var ret=[];let change,operation;for(let i=0;i"):change.removed&&ret.push(""),ret.push((s=>{let n=s;return n=(n=(n=(n=n.replace(/&/g,"&")).replace(//g,">")).replace(/"/g,""")})(change.value)),change.added?ret.push(""):change.removed&&ret.push("")}return ret.join("")},exports.createPatch=function(fileName,oldStr,newStr,oldHeader,newHeader,options){return createTwoFilesPatch(fileName,fileName,oldStr,newStr,oldHeader,newHeader,options)},exports.createTwoFilesPatch=createTwoFilesPatch,exports.cssDiff=cssDiff,exports.diffArrays=function(oldArr,newArr,options){return arrayDiff.diff(oldArr,newArr,options)},exports.diffChars=function(oldStr,newStr,options){return characterDiff.diff(oldStr,newStr,options)},exports.diffCss=function(oldStr,newStr,options){return cssDiff.diff(oldStr,newStr,options)},exports.diffJson=function(oldStr,newStr,options){return jsonDiff.diff(oldStr,newStr,options)},exports.diffLines=diffLines,exports.diffSentences=function(oldStr,newStr,options){return sentenceDiff.diff(oldStr,newStr,options)},exports.diffTrimmedLines=function(oldStr,newStr,options){return options=((options,defaults)=>{if("function"==typeof options)defaults.callback=options;else if(options)for(var name in options)Object.prototype.hasOwnProperty.call(options,name)&&(defaults[name]=options[name]);return defaults})(options,{ignoreWhitespace:!0}),lineDiff.diff(oldStr,newStr,options)},exports.diffWords=function(oldStr,newStr,options){return null==(null==options?void 0:options.ignoreWhitespace)||options.ignoreWhitespace?wordDiff.diff(oldStr,newStr,options):diffWordsWithSpace(oldStr,newStr,options)},exports.diffWordsWithSpace=diffWordsWithSpace,exports.formatPatch=formatPatch,exports.jsonDiff=jsonDiff,exports.lineDiff=lineDiff,exports.parsePatch=parsePatch,exports.reversePatch=function reversePatch(structuredPatch){return Array.isArray(structuredPatch)?structuredPatch.map(patch=>reversePatch(patch)).reverse():Object.assign(Object.assign({},structuredPatch),{oldFileName:structuredPatch.newFileName,oldHeader:structuredPatch.newHeader,newFileName:structuredPatch.oldFileName,newHeader:structuredPatch.oldHeader,hunks:structuredPatch.hunks.map(hunk=>({oldLines:hunk.newLines,oldStart:hunk.newStart,newLines:hunk.oldLines,newStart:hunk.oldStart,lines:hunk.lines.map(l=>l.startsWith("-")?"+"+l.slice(1):l.startsWith("+")?"-"+l.slice(1):l)}))})},exports.sentenceDiff=sentenceDiff,exports.structuredPatch=structuredPatch,exports.wordDiff=wordDiff,exports.wordsWithSpaceDiff=wordsWithSpaceDiff}); \ No newline at end of file diff --git a/common/templates/json/tree-sitter/grammars/c.json b/common/templates/json/tree-sitter/grammars/c.json new file mode 100644 index 00000000..c58a3e6b --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/c.json @@ -0,0 +1,123 @@ +{ + "simpleTerms": { + "type_identifier": "type", + "primitive_type": "type", + "\"signed\"": "type", + "\"unsigned\"": "type", + "\"short\"": "type", + "\"long\"": "type", + + "statement_identifier": "variable", + + "\"const\"": "modifier", + "\"static\"": "modifier", + "\"auto\"": "modifier", + "\"extern\"": "modifier", + "\"inline\"": "modifier", + "\"register\"": "modifier", + "\"volatile\"": "modifier", + "\"restrict\"": "modifier", + "\"_Atomic\"": "modifier", + "\"__attribute__\"": "modifier", + "function_specifier": "modifier", + + "number_literal": "number", + "char_literal": "string", + "string_literal": "string", + "system_lib_string": "string", + "escape_sequence": "string", + "comment": "comment", + + "null": "constant", + "true": "constant", + "false": "constant", + + "\"if\"": "control", + "\"else\"": "control", + "\"do\"": "control", + "\"for\"": "control", + "\"while\"": "control", + "\"break\"": "control", + "\"continue\"": "control", + "\"return\"": "control", + "\"switch\"": "control", + "\"case\"": "control", + "\"default\"": "control", + "\"goto\"": "control", + "\"struct\"": "control", + "\"enum\"": "control", + "\"union\"": "control", + "\"typedef\"": "control", + + "\"sizeof\"": "operator", + "\".\"": "operator", + "\"->\"": "operator", + "\"*\"": "operator", + "\"-\"": "operator", + "\"+\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"++\"": "operator", + "\"--\"": "operator", + "\"==\"": "operator", + "\"!\"": "operator", + "\"!=\"": "operator", + "\"<\"": "operator", + "\">\"": "operator", + "\">=\"": "operator", + "\"<=\"": "operator", + "\"&&\"": "operator", + "\"||\"": "operator", + "\"&\"": "operator", + "\"|\"": "operator", + "\"^\"": "operator", + "\"~\"": "operator", + "\"<<\"": "operator", + "\">>\"": "operator", + "\"=\"": "operator", + "\"+=\"": "operator", + "\"-=\"": "operator", + "\"*=\"": "operator", + "\"/=\"": "operator", + "\"%=\"": "operator", + "\"<<=\"": "operator", + "\">>=\"": "operator", + "\"&=\"": "operator", + "\"^=\"": "operator", + "\"|=\"": "operator", + "\"?\"": "operator", + "\":\"": "operator", + + "\"#if\"": "directive", + "\"#ifdef\"": "directive", + "\"#ifndef\"": "directive", + "\"#elif\"": "directive", + "\"#else\"": "directive", + "\"#endif\"": "directive", + "\"#define\"": "directive", + "\"#include\"": "directive", + "preproc_directive": "directive", + "preproc_arg": "directive", + + "\";\"": "punctuation", + "\"[\"": "punctuation", + "\"]\"": "punctuation", + "\",\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\"(\"": "punctuation", + "\")\"": "punctuation" + }, + + "complexTerms": ["identifier", "field_identifier"], + + "complexScopes": { + "identifier": "variable", + "field_identifier": "variable", + + "call_expression > identifier" : "function", + "call_expression > field_expression > field_identifier" : "function", + "function_declarator > identifier" : "function" + } + +} diff --git a/common/templates/json/tree-sitter/grammars/cpp.json b/common/templates/json/tree-sitter/grammars/cpp.json new file mode 100644 index 00000000..4bf46886 --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/cpp.json @@ -0,0 +1,156 @@ +{ + "simpleTerms": { + "type_identifier": "type", + "primitive_type": "type", + "\"unsigned\"": "type", + "\"signed\"": "type", + "\"short\"": "type", + "\"long\"": "type", + "auto": "type", + + "namespace_identifier": "scope", + + "operator_name": "function", + + "\"public\"": "modifier", + "\"protected\"": "modifier", + "\"private\"": "modifier", + "\"virtual\"": "modifier", + "\"override\"": "modifier", + "\"default\"": "modifier", + "\"final\"": "modifier", + "\"const\"": "modifier", + "\"constexpr\"": "modifier", + "\"static\"": "modifier", + "\"extern\"": "modifier", + "\"inline\"": "modifier", + "\"noexcept\"": "modifier", + "\"explicit\"": "modifier", + "\"friend\"": "modifier", + "\"register\"": "modifier", + "\"volatile\"": "modifier", + "\"restrict\"": "modifier", + "\"_Atomic\"": "modifier", + "\"__attribute__\"": "modifier", + "function_specifier": "modifier", + + "number_literal": "number", + "char_literal": "string", + "string_literal": "string", + "system_lib_string": "string", + "raw_string_literal": "string", + "escape_sequence": "string", + "comment": "comment", + + "null": "constant", + "nullptr": "constant", + "true": "constant", + "false": "constant", + + "\"if\"": "control", + "\"else\"": "control", + "\"do\"": "control", + "\"for\"": "control", + "\"while\"": "control", + "\"break\"": "control", + "\"continue\"": "control", + "\"return\"": "control", + "\"switch\"": "control", + "\"case\"": "control", + "\"goto\"": "control", + + "\"struct\"": "control", + "\"enum\"": "control", + "\"union\"": "control", + "\"typedef\"": "control", + "\"class\"": "control", + "\"using\"": "control", + "\"namespace\"": "control", + "\"template\"": "control", + "\"typename\"": "control", + "\"try\"": "control", + "\"catch\"": "control", + "\"throw\"": "control", + + "\"sizeof\"": "operator", + "\"new\"": "operator", + "\".\"": "operator", + "\"->\"": "operator", + "\"*\"": "operator", + "\"-\"": "operator", + "\"+\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"++\"": "operator", + "\"--\"": "operator", + "\"==\"": "operator", + "\"!\"": "operator", + "\"!=\"": "operator", + "\"<\"": "operator", + "\">\"": "operator", + "\">=\"": "operator", + "\"<=\"": "operator", + "\"&&\"": "operator", + "\"||\"": "operator", + "\"&\"": "operator", + "\"|\"": "operator", + "\"^\"": "operator", + "\"~\"": "operator", + "\"<<\"": "operator", + "\">>\"": "operator", + "\"=\"": "operator", + "\"+=\"": "operator", + "\"-=\"": "operator", + "\"*=\"": "operator", + "\"/=\"": "operator", + "\"%=\"": "operator", + "\"<<=\"": "operator", + "\">>=\"": "operator", + "\"&=\"": "operator", + "\"^=\"": "operator", + "\"|=\"": "operator", + "\"?\"": "operator", + "\"::\"": "operator", + + "\"#if\"": "directive", + "\"#ifdef\"": "directive", + "\"#ifndef\"": "directive", + "\"#elif\"": "directive", + "\"#else\"": "directive", + "\"#endif\"": "directive", + "\"#define\"": "directive", + "\"#include\"": "directive", + "preproc_directive": "directive", + + "\";\"": "punctuation", + "\":\"": "punctuation", + "\",\"": "punctuation", + "\"[\"": "punctuation", + "\"]\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\"(\"": "punctuation", + "\")\"": "punctuation" + }, + + "complexTerms": ["identifier", "field_identifier", "\"delete\""], + + "complexScopes": { + "identifier": "variable", + "field_identifier": "variable", + + "call_expression > identifier": "function", + "call_expression > field_expression > field_identifier": "function", + "call_expression > scoped_identifier > identifier": "function", + "template_function > identifier": "function", + "template_function > scoped_identifier > identifier": "function", + "template_method > field_identifier": "function", + "function_declarator > identifier": "function", + "function_declarator > field_identifier": "function", + "function_declarator > scoped_identifier > identifier": "function", + "destructor_name > identifier": "function", + + "\"delete\"": "operator", + "delete_method_clause > \"delete\"": "modifier" + } +} diff --git a/common/templates/json/tree-sitter/grammars/go.json b/common/templates/json/tree-sitter/grammars/go.json new file mode 100644 index 00000000..20c455ae --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/go.json @@ -0,0 +1,108 @@ +{ + "simpleTerms": { + "type_identifier": "type", + "package_identifier": "scope", + + "\"var\"": "modifier", + "\"const\"": "modifier", + + "interpreted_string_literal": "string", + "raw_string_literal": "string", + "escape_sequence": "string", + "rune_literal": "number", + "int_literal": "number", + "float_literal": "number", + "imaginary_literal": "number", + "comment": "comment", + + "nil": "constant", + "false": "constant", + "true": "constant", + + "\"if\"": "control", + "\"for\"": "control", + "\"else\"": "control", + "\"case\"": "control", + "\"break\"": "control", + "\"switch\"": "control", + "\"select\"": "control", + "\"return\"": "control", + "\"default\"": "control", + "\"continue\"": "control", + "\"goto\"": "control", + "\"fallthrough\"": "control", + "\"defer\"": "control", + "\"range\"": "control", + "\"go\"": "control", + + "\"type\"": "operator", + "\"struct\"": "operator", + "\"import\"": "operator", + "\"package\"": "operator", + "\"func\"": "operator", + "\"interface\"": "operator", + "\"map\"": "operator", + "\"chan\"": "operator", + + "\"+\"": "operator", + "\"-\"": "operator", + "\"*\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"++\"": "operator", + "\"--\"": "operator", + "\"==\"": "operator", + "\"!=\"": "operator", + "\">\"": "operator", + "\"<\"": "operator", + "\">=\"": "operator", + "\"<=\"": "operator", + "\"!\"": "operator", + "\"|\"": "operator", + "\"^\"": "operator", + "\"<<\"": "operator", + "\">>\"": "operator", + "\"=\"": "operator", + "\"+=\"": "operator", + "\"-=\"": "operator", + "\"*=\"": "operator", + "\"/=\"": "operator", + "\"%=\"": "operator", + "\"<<=\"": "operator", + "\">>=\"": "operator", + "\"&=\"": "operator", + "\"^=\"": "operator", + "\"|=\"": "operator", + "\":=\"": "operator", + "\"&\"": "operator", + "\"&&\"": "operator", + "\"&^\"": "operator", + "\"&^=\"": "operator", + "\"||\"": "operator", + "\"...\"": "operator", + "\"<-\"": "operator", + "\"[\"": "operator", + "\"]\"": "operator", + + "\"(\"": "punctuation", + "\")\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\",\"": "punctuation", + "\";\"": "punctuation", + "\".\"": "punctuation", + "\":\"": "punctuation" + }, + + "complexTerms": ["identifier", "field_identifier"], + + "complexScopes": { + "identifier": "variable", + "field_identifier": "variable", + + "call_expression > identifier": "function", + "function_declaration > identifier": "function", + "method_declaration > field_identifier": "function", + "call_expression > selector_expression > field_identifier": "function" + } +} diff --git a/common/templates/json/tree-sitter/grammars/javascript.json b/common/templates/json/tree-sitter/grammars/javascript.json new file mode 100644 index 00000000..95ed2c27 --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/javascript.json @@ -0,0 +1,136 @@ +{ + "simpleTerms": { + "shorthand_property_identifier": "variable", + + "\"var\"": "modifier", + "\"let\"": "modifier", + "\"extends\"": "modifier", + "\"const\"": "modifier", + "\"static\"": "modifier", + + "number": "number", + "string": "string", + "escape_sequence": "string", + "template_string": "string", + "regex": "string", + "comment": "comment", + "hash_bang_line": "comment", + + "true": "constant", + "false": "constant", + "null": "constant", + "undefined": "constant", + + "\"as\"": "control", + "\"if\"": "control", + "\"do\"": "control", + "\"else\"": "control", + "\"while\"": "control", + "\"for\"": "control", + "\"return\"": "control", + "\"break\"": "control", + "\"continue\"": "control", + "\"throw\"": "control", + "\"try\"": "control", + "\"catch\"": "control", + "\"finally\"": "control", + "\"switch\"": "control", + "\"case\"": "control", + "\"default\"": "control", + "\"export\"": "control", + "\"import\"": "control", + "\"from\"": "control", + "\"yield\"": "control", + "\"async\"": "control", + "\"await\"": "control", + "\"debugger\"": "control", + "\"delete\"": "control", + + "this": "operator", + "\"class\"": "operator", + "\"function\"": "operator", + + "\"in\"": "operator", + "\"instanceof\"": "operator", + "\"of\"": "operator", + "\"new\"": "operator", + "\"typeof\"": "operator", + "\"get\"": "operator", + "\"set\"": "operator", + + "\"=\"": "operator", + "\"+=\"": "operator", + "\"-=\"": "operator", + "\"*=\"": "operator", + "\"/=\"": "operator", + "\"%=\"": "operator", + "\"<<=\"": "operator", + "\">>=\"": "operator", + "\">>>=\"": "operator", + "\"&=\"": "operator", + "\"^=\"": "operator", + "\"|=\"": "operator", + "\"!\"": "operator", + "\"+\"": "operator", + "\"-\"": "operator", + "\"*\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"==\"": "operator", + "\"===\"": "operator", + "\"!=\"": "operator", + "\"!==\"": "operator", + "\">=\"": "operator", + "\"<=\"": "operator", + "\"=>\"": "operator", + "\">\"": "operator", + "\"<\"": "operator", + "\":\"": "operator", + "\"?\"": "operator", + "\"&&\"": "operator", + "\"||\"": "operator", + "\"&\"": "operator", + "\"~\"": "operator", + "\"^\"": "operator", + "\">>\"": "operator", + "\">>>\"": "operator", + "\"<<\"": "operator", + "\"|\"": "operator", + "\"++\"": "operator", + "\"--\"": "operator", + "\"...\"": "operator", + + "\"(\"": "punctuation", + "\")\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\";\"": "punctuation", + "\"[\"": "punctuation", + "\"]\"": "punctuation", + "\".\"": "punctuation", + "\",\"": "punctuation", + "\"${\"": "punctuation" + }, + + "complexTerms": ["identifier", "field_identifier", "property_identifier", "super"], + + "complexScopes": { + "identifier": "variable", + "property_identifier": "variable", + "formal_parameters > identifier": "variable", + "jsx_attribute > property_identifier": "variable", + + "class > identifier": "type", + "new_expression > identifier": "type", + "jsx_opening_element > identifier": "type", + "jsx_closing_element > identifier": "type", + "jsx_self_closing_element > identifier": "type", + + "call_expression > identifier": "function", + "call_expression > super": "function", + "function > identifier": "function", + "generator_function > identifier": "function", + "method_definition > property_identifier": "function", + "call_expression > member_expression > property_identifier": "function" + } +} diff --git a/common/templates/json/tree-sitter/grammars/lua.json b/common/templates/json/tree-sitter/grammars/lua.json new file mode 100644 index 00000000..3003e387 --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/lua.json @@ -0,0 +1,87 @@ +{ + "simpleTerms": { + + "method": "function", + + "\"local\"": "modifier", + "\"function\"": "modifier", + + "number": "number", + "string": "string", + "comment": "comment", + + "true": "constant", + "false": "constant", + "nil": "constant", + "global_variable": "constant", + + "\"while\"": "control", + "\"do\"": "control", + "\"until\"": "control", + "\"break\"": "control", + "\"for\"": "control", + "\"if\"": "control", + "\"else\"": "control", + "\"elseif\"": "control", + "\"then\"": "control", + "\"end\"": "control", + "\"goto\"": "control", + "\"repeat\"": "control", + "\"return\"": "control", + + "self": "operator", + "\"and\"": "operator", + "\"or\"": "operator", + "\"not\"": "operator", + "\"in\"": "operator", + "\"next\"": "operator", + "\"spread\"": "operator", + + "\"+\"": "operator", + "\"-\"": "operator", + "\"*\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"^\"": "operator", + "\"#\"": "operator", + "\"&\"": "operator", + "\"~\"": "operator", + "\"|\"": "operator", + "\"//\"": "operator", + "\"<<\"": "operator", + "\">>\"": "operator", + "\"==\"": "operator", + "\"~=\"": "operator", + "\"<=\"": "operator", + "\">=\"": "operator", + "\"<\"": "operator", + "\">\"": "operator", + "\"=\"": "operator", + "\"::\"": "operator", + "\":\"": "operator", + "\".\"": "operator", + "\"..\"": "operator", + + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\"[\"": "punctuation", + "\"]\"": "punctuation", + "\"(\"": "punctuation", + "\")\"": "punctuation", + "\";\"": "punctuation", + "\",\"": "punctuation" + }, + + "complexTerms": ["identifier", "property_identifier"], + + "complexScopes": { + "identifier": "variable", + "property_identifier": "variable", + + "function_call > identifier": "function", + "function_call > property_identifier": "function", + "function_name > identifier": "function", + "function_name > property_identifier": "function", + "local_function > identifier": "function" + } +} diff --git a/common/templates/json/tree-sitter/grammars/php.json b/common/templates/json/tree-sitter/grammars/php.json new file mode 100644 index 00000000..71746aa6 --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/php.json @@ -0,0 +1,164 @@ +{ + "simpleTerms": { + + "variable_name": "variable", + + "__construct": "function", + "\"echo\"": "function", + "\"print\"": "function", + "\"unset\"": "function", + "\"isset\"": "function", + "\"eval\"": "function", + "\"array\"": "function", + "\"list\"": "function", + "\"empty\"": "function", + + "require_once": "function", + "require": "function", + "include_once": "function", + "include": "function", + + "\"callable\"": "modifier", + "\"var\"": "modifier", + "\"trait\"": "modifier", + "\"class\"": "modifier", + "\"interface\"": "modifier", + "\"function\"": "modifier", + "\"type\"": "modifier", + + "\"static\"": "modifier", + "\"public\"": "modifier", + "\"private\"": "modifier", + "\"protected\"": "modifier", + "\"global\"": "modifier", + "\"const\"": "modifier", + "\"abstract\"": "modifier", + "\"extends\"": "modifier", + "\"implements\"": "modifier", + "\"final\"": "modifier", + + "integer": "number", + "float": "number", + "string": "string", + "regex": "string", + + "true": "constant", + "false": "constant", + + "comment": "comment", + + "\"if\"": "control", + "\"do\"": "control", + "\"else\"": "control", + "\"elseif\"": "control", + "\"endif\"": "control", + "\"while\"": "control", + "\"endwhile\"": "control", + "\"for\"": "control", + "\"endfor\"": "control", + "\"foreach\"": "control", + "\"endforeach\"": "control", + "\"declare\"": "control", + "\"enddeclare\"": "control", + "\"return\"": "control", + "\"break\"": "control", + "\"continue\"": "control", + "\"throw\"": "control", + "\"try\"": "control", + "\"catch\"": "control", + "\"finally\"": "control", + "\"switch\"": "control", + "\"endswitch\"": "control", + "\"case\"": "control", + "\"default\"": "control", + "\"yield\"": "control", + "\"goto\"": "control", + "\"exit\"": "control", + "\"die\"": "control", + + "\"new\"": "operator", + "\"clone\"": "operator", + "\"insteadof\"": "operator", + "\"instanceof\"": "operator", + + "\"+\"": "operator", + "\"-\"": "operator", + "\"*\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"**\"": "operator", + "\"=\"": "operator", + "\"==\"": "operator", + "\"===\"": "operator", + "\"!=\"": "operator", + "\"!==\"": "operator", + "\"<\"": "operator", + "\">\"": "operator", + "\"<>\"": "operator", + "\"<=\"": "operator", + "\"=>\"": "operator", + "\">=\"": "operator", + "\"<=>\"": "operator", + "\"&\"": "operator", + "\"$\"": "operator", + "\"|\"": "operator", + "\"^\"": "operator", + "\"~\"": "operator", + "\"<<\"": "operator", + "\">>\"": "operator", + "\"++\"": "operator", + "\"--\"": "operator", + "\"and\"": "operator", + "\"or\"": "operator", + "\"xor\"": "operator", + "\"!\"": "operator", + "\"&&\"": "operator", + "\"||\"": "operator", + "\".\"": "operator", + "\"?\"": "operator", + "\":\"": "operator", + "\"??\"": "operator", + "\"->\"": "operator", + "\"as\"": "operator", + + "\"use\"": "directive", + "\"namespace\"": "directive", + + "\"(\"": "punctuation", + "\")\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\"[\"": "punctuation", + "\"]\"": "punctuation", + "\";\"": "punctuation", + "\",\"": "punctuation" + }, + + "complexTerms": ["name", "simple_variable"], + + "complexScopes": { + "class_declaration > name": "type", + "catch_clause > qualified_name > name": "type", + "class_base_clause > qualified_name > name": "type", + "interface_declaration > name": "type", + "class_interface_clause > qualified_name > name": "type", + "object_creation_expression > qualified_name > name": "type", + "cast_expression > cast_type": "type", + "object_creation_expression > new_variable > simple_variable": "type", + + "name": "variable", + "member_access_expression > name": "variable", + + "function_definition > name": "function", + "function_call_expression > name": "function", + "function_call_expression > qualified_name": "function", + "method_declaration > name": "function", + "method_declaration > function_definition > name": "function", + "scoped_call_expression > name": "function", + "member_call_expression > name": "function", + + "const_element > name": "constant", + "class_constant_access_expression > name": "constant", + "qualified_name > name": "constant" + } +} diff --git a/common/templates/json/tree-sitter/grammars/python.json b/common/templates/json/tree-sitter/grammars/python.json new file mode 100644 index 00000000..e594a222 --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/python.json @@ -0,0 +1,117 @@ +{ + "simpleTerms": { + "module": "scope", + + "\"global\"": "modifier", + "\"nonlocal\"": "modifier", + + "decorator": "function", + "\"print\"": "function", + "\"assert\"": "function", + "\"exec\"": "function", + "\"del\"": "function", + + "integer" : "number", + "float" : "number", + "string": "string", + "escape_sequence": "string", + "interpolation": "string", + "comment": "comment", + + "none": "constant", + "true": "constant", + "false": "constant", + + "\"if\"": "control", + "\"else\"": "control", + "\"elif\"": "control", + "\"while\"": "control", + "\"for\"": "control", + "\"return\"": "control", + "\"break\"": "control", + "\"continue\"": "control", + "\"pass\"": "control", + "\"raise\"": "control", + "\"yield\"": "control", + "\"await\"": "control", + "\"async\"": "control", + "\"try\"": "control", + "\"except\"": "control", + "\"with\"": "control", + "\"as\"": "control", + "\"finally\"": "control", + + "\"+\"": "operator", + "\"-\"": "operator", + "\"*\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"@\"": "operator", + "\"**\"": "operator", + "\"//\"": "operator", + "\"==\"": "operator", + "\"!=\"": "operator", + "\"<>\"": "operator", + "\">\"": "operator", + "\"<\"": "operator", + "\">=\"": "operator", + "\"<=\"": "operator", + "\"=\"": "operator", + "\"+=\"": "operator", + "\"-=\"": "operator", + "\"*=\"": "operator", + "\"/=\"": "operator", + "\"%=\"": "operator", + "\"@=\"": "operator", + "\"**=\"": "operator", + "\"//=\"": "operator", + "\"&\"": "operator", + "\"|\"": "operator", + "\"^\"": "operator", + "\"~\"": "operator", + "\"<<\"": "operator", + "\">>\"": "operator", + + "\"in\"": "operator", + "\"and\"": "operator", + "\"or\"": "operator", + "\"not\"": "operator", + "\"is\"": "operator", + + "\"import\"": "directive", + "\"from\"": "directive", + "\"class\"": "directive", + "\"def\"": "directive", + "\"lambda\"": "directive", + + "\"[\"": "punctuation", + "\"]\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\"(\"": "punctuation", + "\")\"": "punctuation" + }, + + "complexTerms": ["identifier", "attribute"], + + "complexScopes": { + "type > identifier": "type", + "class_definition > identifier": "type", + "class_definition > argument_list > attribute": "type", + "class_definition > argument_list > identifier": "type", + "class_definition > argument_list > keyword_argument > attribute": "type", + "class_definition > argument_list > keyword_argument > identifier": "type", + + "identifier": "variable", + "attribute > identifier": "variable", + "keyword_argument > identifier": "variable", + "default_parameter > identifier": "variable", + "parameters > identifier": "variable", + "parameters > list_splat > identifier": "variable", + "parameters > dictionary_splat > identifier": "variable", + + "call > identifier": "function", + "call > attribute > identifier[-1]": "function", + "function_definition > identifier": "function" + } +} diff --git a/common/templates/json/tree-sitter/grammars/ruby.json b/common/templates/json/tree-sitter/grammars/ruby.json new file mode 100644 index 00000000..bfebf42b --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/ruby.json @@ -0,0 +1,117 @@ +{ + "simpleTerms": { + "constant": "type", + + "class_variable": "variable", + "instance_variable": "variable", + + "string": "string", + "bare_string": "string", + "subshell": "string", + "heredoc_beginning": "string", + "heredoc_body": "string", + "regex": "string", + "escape_sequence": "string", + "symbol": "string", + "bare_symbol": "string", + "interpolation": "string", + "float": "number", + "integer": "number", + "complex": "number", + "rational": "number", + "comment": "comment", + + "nil": "constant", + "true": "constant", + "false": "constant", + + "\"if\"": "control", + "\"unless\"": "control", + "\"def\"": "control", + "\"do\"": "control", + "\"end\"": "control", + "\"else\"": "control", + "\"elsif\"": "control", + "\"class\"": "control", + "\"module\"": "control", + "\"alias\"": "control", + "\"begin\"": "control", + "\"rescue\"": "control", + "\"ensure\"": "control", + "\"return\"": "control", + "\"yield\"": "control", + "\"case\"": "control", + "\"when\"": "control", + "\"then\"": "control", + "\"for\"": "control", + "\"break\"": "control", + "\"next\"": "control", + "\"retry\"": "control", + "\"while\"": "control", + "\"in\"": "control", + "\"until\"": "control", + + "self": "control", + "super": "control", + + "\"and\"": "operator", + "\"or\"": "operator", + "\"not\"": "operator", + "\"||\"": "operator", + "\"&&\"": "operator", + "\"!\"": "operator", + "\"~\"": "operator", + "\"<<\"": "operator", + "\">>\"": "operator", + "\"=\"": "operator", + "\"==\"": "operator", + "\"!=\"": "operator", + "\"===\"": "operator", + "\"<=>\"": "operator", + "\"=~\"": "operator", + "\"!~\"": "operator", + "\"<\"": "operator", + "\"<=\"": "operator", + "\">\"": "operator", + "\">=\"": "operator", + "\"&\"": "operator", + "\"|\"": "operator", + "\"^\"": "operator", + "\"+\"": "operator", + "\"-\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"*\"": "operator", + "\"**\"": "operator", + "\"+@\"": "operator", + "\"-@\"": "operator", + "\"..\"": "operator", + "\"[]\"": "operator", + "\"[]=\"": "operator", + "\"defined?\"": "operator", + + "\",\"": "punctuation", + "\"%w(\"": "punctuation", + "\"%i(\"": "punctuation", + "\"(\"": "punctuation", + "\")\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\"#{\"": "punctuation" + }, + + "complexTerms": ["identifier"], + + "complexScopes": { + "identifier": "variable", + "block_parameters > identifier": "variable", + "keyword_parameter > identifier": "constant", + + "method > identifier": "function", + "setter > identifier": "function", + "call > identifier": "function", + "method_call > identifier": "function", + "singleton_method > identifier": "function", + "method_parameters > identifier": "function" + }, +} diff --git a/common/templates/json/tree-sitter/grammars/rust.json b/common/templates/json/tree-sitter/grammars/rust.json new file mode 100644 index 00000000..321e650a --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/rust.json @@ -0,0 +1,168 @@ +{ + "simpleTerms": { + + "primitive_type": "type", + + "inner_attribute_item": "variable", + "shorthand_field_identifier": "variable", + "\"_\"": "variable", + + "boolean_literal": "number", + "integer_literal": "number", + "float_literal": "number", + "char_literal": "string", + "string_literal": "string", + "raw_string_literal": "string", + "escape_sequence": "string", + "line_comment": "comment", + "block_comment": "comment", + + "\"let\"": "modifier", + "\"const\"": "modifier", + "\"static\"": "modifier", + "\"extern\"": "modifier", + "\"dyn\"": "modifier", + "\"trait\"": "modifier", + "\"mod\"": "modifier", + "\"pub\"": "modifier", + "\"default\"": "modifier", + "\"ref\"": "modifier", + "mutable_specifier": "modifier", + + "\"fn\"": "control", + "\"type\"": "control", + "\"struct\"": "control", + "\"enum\"": "control", + "\"union\"": "control", + "\"impl\"": "control", + + "\"unsafe\"": "control", + "\"match\"": "control", + "\"if\"": "control", + "\"in\"": "control", + "\"else\"": "control", + "\"move\"": "control", + "\"while\"": "control", + "\"loop\"": "control", + "\"for\"": "control", + "\"return\"": "control", + "\"continue\"": "control", + "\"break\"": "control", + "\"where\"": "control", + "\"macro_rules!\"": "control", + + "self": "control", + "super": "control", + "crate": "control", + + "\".\"": "operator", + "\"->\"": "operator", + "\"=>\"": "operator", + "\"-\"": "operator", + "\"+\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"++\"": "operator", + "\"--\"": "operator", + "\"==\"": "operator", + "\"!\"": "operator", + "\"!=\"": "operator", + "\"<\"": "operator", + "\">\"": "operator", + "\">=\"": "operator", + "\"<=\"": "operator", + "\"&&\"": "operator", + "\"||\"": "operator", + "\"&\"": "operator", + "\"|\"": "operator", + "\"^\"": "operator", + "\"~\"": "operator", + "\"<<\"": "operator", + "\">>\"": "operator", + "\"=\"": "operator", + "\"+=\"": "operator", + "\"-=\"": "operator", + "\"*=\"": "operator", + "\"/=\"": "operator", + "\"%=\"": "operator", + "\"<<=\"": "operator", + "\">>=\"": "operator", + "\"&=\"": "operator", + "\"^=\"": "operator", + "\"|=\"": "operator", + "\"?\"": "operator", + "\"::\"": "operator", + "\"..\"": "operator", + "\"as\"": "operator", + + "\"use\"": "directive", + "\"#\"": "directive", + + "\";\"": "punctuation", + "\":\"": "punctuation", + "\",\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation" + }, + + "complexTerms": [ + "identifier", "field_identifier", "type_identifier", + "\"(\"", "\")\"", "\"[\"", "\"]\"", "\"*\""], + + "complexScopes": { + "type_identifier": "type", + "scoped_type_identifier > type_identifier": "type", + "use_declaration > identifier": "type", + "use_declaration > scoped_identifier > identifier[-1]": "type", + "use_list > identifier": "type", + "use_list > scoped_identifier > identifier": "type", + "use_wildcard > \"*\"": "type", + "use_as_clause > identifier": "type", + "tuple_struct_pattern > identifier": "type", + "tuple_struct_pattern > scoped_identifier > identifier[-1]": "type", + "enum_variant > identifier": "type", + "match_pattern > scoped_identifier > identifier[-1]": "type", + "unit_type > \"(\"": "type", + "unit_type > \")\"": "type", + + "scoped_identifier > identifier": "scope", + "scoped_type_identifier > identifier": "scope", + "scoped_type_identifier > scoped_identifier > identifier": "scope", + "scoped_identifier > scoped_identifier > identifier": "scope", + "scoped_use_list > scoped_identifier > identifier": "scope", + "scoped_use_list > identifier": "scope", + "use_wildcard > scoped_identifier > identifier": "scope", + "use_wildcard > identifier": "scope", + "struct_pattern > scoped_type_identifier > identifier": "scope", + "struct_expression > scoped_type_identifier > identifier": "scope", + + "identifier": "variable", + "field_identifier": "variable", + "scoped_identifier > identifier[-1]": "variable", + + "call_expression > identifier": "function", + "call_expression > field_expression > field_identifier[-1]": "function", + "call_expression > scoped_identifier > identifier[-1]": "function", + "macro_invocation > identifier": "function", + "macro_definition > identifier": "function", + "generic_function > identifier": "function", + "generic_function > field_expression > field_identifier": "function", + "generic_function > scoped_identifier > identifier": "function", + "function_item > identifier": "function", + "function_signature_item > identifier": "function", + + "lifetime > identifier": "modifier", + + "meta_item > identifier": "directive", + + "\"*\"": "operator", + "\"(\"": "punctuation", + "\")\"": "punctuation", + "\"[\"": "punctuation", + "\"]\"": "punctuation", + "unit_expression > \"(\"": "constant", + "unit_expression > \")\"": "constant", + "attribute_item > \"[\"": "directive", + "attribute_item > \"]\"": "directive" + } +} diff --git a/common/templates/json/tree-sitter/grammars/typescript.json b/common/templates/json/tree-sitter/grammars/typescript.json new file mode 100644 index 00000000..7f5420fb --- /dev/null +++ b/common/templates/json/tree-sitter/grammars/typescript.json @@ -0,0 +1,156 @@ +{ + "simpleTerms": { + "type_identifier": "type", + "predefined_type": "type", + + "namespace": "scope", + "\"module\"": "scope", + + "shorthand_property_identifier": "variable", + + "\"var\"": "modifier", + "\"let\"": "modifier", + "\"extends\"": "modifier", + "\"const\"": "modifier", + "\"static\"": "modifier", + "\"public\"": "modifier", + "\"private\"": "modifier", + "\"protected\"": "modifier", + "\"readonly\"": "modifier", + + "number": "number", + "string": "string", + "escape_sequence": "string", + "template_string": "string", + "template_substitution": "string", + "regex": "string", + "comment": "comment", + "hash_bang_line": "comment", + + "true": "constant", + "false": "constant", + "null": "constant", + "undefined": "constant", + + "\"as\"": "control", + "\"if\"": "control", + "\"do\"": "control", + "\"else\"": "control", + "\"while\"": "control", + "\"for\"": "control", + "\"return\"": "control", + "\"break\"": "control", + "\"continue\"": "control", + "\"throw\"": "control", + "\"try\"": "control", + "\"catch\"": "control", + "\"finally\"": "control", + "\"switch\"": "control", + "\"case\"": "control", + "\"default\"": "control", + "\"export\"": "control", + "\"import\"": "control", + "\"from\"": "control", + "\"yield\"": "control", + "\"async\"": "control", + "\"await\"": "control", + "\"debugger\"": "control", + + "this": "operator", + "\"class\"": "operator", + "\"type\"": "operator", + "\"enum\"": "operator", + "\"function\"": "operator", + "\"interface\"": "operator", + "\"implements\"": "operator", + "\"declare\"": "operator", + + "\"in\"": "operator", + "\"instanceof\"": "operator", + "\"of\"": "operator", + "\"new\"": "operator", + "\"delete\"": "operator", + "\"typeof\"": "operator", + "\"get\"": "operator", + "\"set\"": "operator", + + "\"=\"": "operator", + "\"+=\"": "operator", + "\"-=\"": "operator", + "\"*=\"": "operator", + "\"/=\"": "operator", + "\"%=\"": "operator", + "\"<<=\"": "operator", + "\">>=\"": "operator", + "\">>>=\"": "operator", + "\"&=\"": "operator", + "\"^=\"": "operator", + "\"|=\"": "operator", + "\"!\"": "operator", + "\"+\"": "operator", + "\"-\"": "operator", + "\"*\"": "operator", + "\"/\"": "operator", + "\"%\"": "operator", + "\"==\"": "operator", + "\"===\"": "operator", + "\"!=\"": "operator", + "\"!==\"": "operator", + "\">=\"": "operator", + "\"<=\"": "operator", + "\"=>\"": "operator", + "\">\"": "operator", + "\"<\"": "operator", + "\":\"": "operator", + "\"?\"": "operator", + "\"&&\"": "operator", + "\"||\"": "operator", + "\"&\"": "operator", + "\"~\"": "operator", + "\"^\"": "operator", + "\">>\"": "operator", + "\">>>\"": "operator", + "\"<<\"": "operator", + "\"|\"": "operator", + "\"++\"": "operator", + "\"--\"": "operator", + "\"...\"": "operator", + + "\"(\"": "punctuation", + "\")\"": "punctuation", + "\"{\"": "punctuation", + "\"}\"": "punctuation", + "\";\"": "punctuation", + "\"[\"": "punctuation", + "\"]\"": "punctuation", + "\".\"": "punctuation", + "\",\"": "punctuation", + "\"${\"": "punctuation" + }, + + "complexTerms": ["identifier", "property_identifier", "super"], + + "complexScopes": { + "class > identifier": "type", + "new_expression > call_expression > identifier": "type", + "jsx_opening_element > identifier": "type", + "jsx_closing_element > identifier": "type", + "jsx_self_closing_element > identifier": "type", + + "nested_type_identifier > identifier": "scope", + + "identifier": "variable", + "property_identifier": "variable", + "member_expression > property_identifier": "variable", + "jsx_attribute > property_identifier": "variable", + + "call_expression > identifier": "function", + "call_expression > super": "function", + "function > identifier": "function", + "generator_function > identifier": "function", + "method_definition > property_identifier": "function", + "call_expression > member_expression > property_identifier": "function", + "method_signature > property_identifier": "function", + "function_signature > identifier": "function" + } +} diff --git a/common/templates/json/tree-sitter/themes/dark-cpp.json b/common/templates/json/tree-sitter/themes/dark-cpp.json new file mode 100644 index 00000000..156a96cb --- /dev/null +++ b/common/templates/json/tree-sitter/themes/dark-cpp.json @@ -0,0 +1,124 @@ +{ + "monacoTreeSitter": { + "type": "#4EC9B0", + "scope": "#D4D4D4", + "function": "#E5C07B", + "variable": "#9CDCFE", + "number": "#B5CEA8", + "string": "#D19A66", + "comment": "#5C6370", + "constant": "#56B6C2", + "directive": "#C586C0", + "control": "#569CD6", + "operator": "#D4D4D4", + "modifier": "#569CD6", + "punctuation": "#D4D4D4" + }, + "base": { + "base": "vs-dark", + "inherit": true, + "rules": [ + { + "token": "comment", + "foreground": "5C6370", + "fontStyle": "italic" + }, + { + "token": "keyword", + "foreground": "569CD6", + "fontStyle": "bold" + }, + { + "token": "keyword.control", + "foreground": "569CD6", + "fontStyle": "bold" + }, + { + "token": "storage", + "foreground": "569CD6", + "fontStyle": "bold" + }, + { + "token": "storage.type", + "foreground": "569CD6", + "fontStyle": "bold" + }, + { + "token": "entity.name.type", + "foreground": "4EC9B0" + }, + { + "token": "support.type", + "foreground": "4EC9B0" + }, + { + "token": "entity.name.function", + "foreground": "E5C07B", + "fontStyle": "bold" + }, + { + "token": "support.function", + "foreground": "E5C07B", + "fontStyle": "bold" + }, + { + "token": "meta.function-call", + "foreground": "E5C07B", + "fontStyle": "bold" + }, + { + "token": "variable", + "foreground": "9CDCFE" + }, + { + "token": "variable.parameter", + "foreground": "9CDCFE" + }, + { + "token": "constant.numeric", + "foreground": "B5CEA8" + }, + { + "token": "constant.language", + "foreground": "56B6C2", + "fontStyle": "bold" + }, + { + "token": "support.constant", + "foreground": "56B6C2", + "fontStyle": "bold" + }, + { + "token": "string", + "foreground": "D19A66" + }, + { + "token": "meta.preprocessor", + "foreground": "C586C0", + "fontStyle": "bold" + }, + { + "token": "keyword.control.directive", + "foreground": "C586C0", + "fontStyle": "bold" + }, + { + "token": "operator", + "foreground": "D4D4D4" + }, + { + "token": "invalid", + "foreground": "FFFFFF", + "background": "F44747" + } + ], + "colors": { + "editor.foreground": "#D4D4D4", + "editor.background": "#1E1E1E", + "editor.selectionBackground": "#2C313A", + "editor.lineHighlightBackground": "#2A2D2E", + "editorCursor.foreground": "#AEAFAD", + "editorWhitespace.foreground": "#404040" + } + } +} \ No newline at end of file diff --git a/common/templates/json/tree-sitter/themes/dark-python.json b/common/templates/json/tree-sitter/themes/dark-python.json new file mode 100644 index 00000000..c30ac88f --- /dev/null +++ b/common/templates/json/tree-sitter/themes/dark-python.json @@ -0,0 +1,116 @@ +{ + "monacoTreeSitter": { + "type": "#0ca1a6", + "scope": "#dae3e3", + "function": "#F39C12", + "variable": "#dae3e3", + "number": "#7fcbcd", + "string": "#7fcbcd", + "comment": "#7f8c8d", + "constant": "#7fcbcd", + "directive": "#C586C0", + "control": "#0ca1a6", + "operator": "#dae3e3", + "modifier": "#0ca1a6", + "punctuation": "#dae3e3" + }, + "base": { + "base": "vs-dark", + "inherit": true, + "rules": [ + { + "token": "comment", + "foreground": "7f8c8d" + }, + { + "token": "keyword", + "foreground": "0ca1a6" + }, + { + "token": "keyword.control", + "foreground": "0ca1a6" + }, + { + "token": "storage", + "foreground": "0ca1a6" + }, + { + "token": "storage.type", + "foreground": "0ca1a6" + }, + { + "token": "entity.name.type", + "foreground": "7fcbcd" + }, + { + "token": "support.type", + "foreground": "7fcbcd" + }, + { + "token": "entity.name.function", + "foreground": "F39C12" + }, + { + "token": "support.function", + "foreground": "F39C12" + }, + { + "token": "meta.function-call", + "foreground": "F39C12" + }, + { + "token": "variable", + "foreground": "dae3e3" + }, + { + "token": "variable.parameter", + "foreground": "dae3e3" + }, + { + "token": "constant.numeric", + "foreground": "7fcbcd" + }, + { + "token": "constant.language", + "foreground": "7fcbcd" + }, + { + "token": "support.constant", + "foreground": "7fcbcd" + }, + { + "token": "string", + "foreground": "7fcbcd" + }, + { + "token": "meta.preprocessor", + "foreground": "C586C0" + }, + { + "token": "keyword.control.directive", + "foreground": "C586C0" + }, + { + "token": "operator", + "foreground": "dae3e3" + }, + { + "token": "punctuation", + "foreground": "dae3e3" + }, + { + "token": "invalid", + "foreground": "ffffff", + "background": "df7365" + } + ], + "colors": { + "editor.background": "#1f272a", + "editor.foreground": "#dae3e3", + "editor.selectionBackground": "#00818480", + "editor.lineHighlightBackground": "#434f5410", + "editorCursor.foreground": "#dae3e3", + "editorWhitespace.foreground": "#374146" + } + } +} \ No newline at end of file diff --git a/common/templates/json/tree-sitter/themes/light-cpp.json b/common/templates/json/tree-sitter/themes/light-cpp.json new file mode 100644 index 00000000..b5d9724b --- /dev/null +++ b/common/templates/json/tree-sitter/themes/light-cpp.json @@ -0,0 +1,113 @@ +{ + "monacoTreeSitter": { + "type": "#005C5F", + "scope": "#4e5b61", + "function": "#D35400", + "variable": "#4e5b61", + "number": "#005C5F", + "string": "#005C5F", + "comment": "#95a5a6cc", + "constant": "#005C5F", + "directive": "#728E00", + "control": "#00979D", + "operator": "#4e5b61", + "modifier": "#00979D", + "punctuation": "#4e5b61" + }, + "base": { + "base": "vs", + "inherit": true, + "rules": [ + { + "token": "comment", + "foreground": "95a5a6" + }, + { + "token": "keyword", + "foreground": "00979D" + }, + { + "token": "keyword.control", + "foreground": "00979D" + }, + { + "token": "storage", + "foreground": "00979D" + }, + { + "token": "storage.type", + "foreground": "005C5F" + }, + { + "token": "entity.name.type", + "foreground": "005C5F" + }, + { + "token": "support.type", + "foreground": "005C5F" + }, + { + "token": "entity.name.function", + "foreground": "D35400" + }, + { + "token": "support.function", + "foreground": "D35400" + }, + { + "token": "meta.function-call", + "foreground": "D35400" + }, + { + "token": "variable", + "foreground": "4e5b61" + }, + { + "token": "variable.parameter", + "foreground": "4e5b61" + }, + { + "token": "constant.numeric", + "foreground": "005C5F" + }, + { + "token": "constant.language", + "foreground": "005C5F", + "fontStyle": "bold" + }, + { + "token": "support.constant", + "foreground": "005C5F" + }, + { + "token": "string", + "foreground": "005C5F" + }, + { + "token": "meta.preprocessor", + "foreground": "728E00" + }, + { + "token": "keyword.control.directive", + "foreground": "728E00" + }, + { + "token": "operator", + "foreground": "4e5b61" + }, + { + "token": "invalid", + "foreground": "ffffff", + "background": "df7365" + } + ], + "colors": { + "editor.foreground": "#4e5b61", + "editor.background": "#ffffff", + "editor.selectionBackground": "#7fcbcdb3", + "editor.lineHighlightBackground": "#434f5410", + "editorCursor.foreground": "#4e5b61", + "editorWhitespace.foreground": "#bfbfbf" + } + } +} \ No newline at end of file diff --git a/common/templates/json/tree-sitter/themes/light-python.json b/common/templates/json/tree-sitter/themes/light-python.json new file mode 100644 index 00000000..97ba5cec --- /dev/null +++ b/common/templates/json/tree-sitter/themes/light-python.json @@ -0,0 +1,104 @@ +{ + "monacoTreeSitter": { + "type": "#267F99", + "scope": "#333333", + "function": "#795E26", + "variable": "#333333", + "number": "#098658", + "string": "#A31515", + "comment": "#008000", + "constant": "#0451A5", + "directive": "#AF00DB", + "control": "#AF00DB", + "operator": "#333333", + "modifier": "#AF00DB", + "punctuation": "#333333" + }, + "base": { + "base": "vs", + "inherit": true, + "rules": [ + { + "token": "comment", + "foreground": "008000" + }, + { + "token": "keyword", + "foreground": "AF00DB" + }, + { + "token": "keyword.control", + "foreground": "AF00DB" + }, + { + "token": "entity.name.class", + "foreground": "267F99" + }, + { + "token": "entity.name.type", + "foreground": "267F99" + }, + { + "token": "entity.name.function", + "foreground": "795E26" + }, + { + "token": "support.function.builtin", + "foreground": "0451A5" + }, + { + "token": "variable.parameter", + "foreground": "001080" + }, + { + "token": "variable.language.self", + "foreground": "001080" + }, + { + "token": "entity.name.function.magic", + "foreground": "001080" + }, + { + "token": "meta.decorator", + "foreground": "AF00DB" + }, + { + "token": "string", + "foreground": "A31515" + }, + { + "token": "string.doc", + "foreground": "008000" + }, + { + "token": "constant.numeric", + "foreground": "098658" + }, + { + "token": "constant.language", + "foreground": "0451A5" + }, + { + "token": "punctuation", + "foreground": "333333" + }, + { + "token": "keyword.operator", + "foreground": "333333" + }, + { + "token": "invalid", + "foreground": "FFFFFF", + "background": "E51400" + } + ], + "colors": { + "editor.background": "#FFFFFF", + "editor.foreground": "#333333", + "editor.selectionBackground": "#ADD6FF", + "editor.lineHighlightBackground": "#FFFFFF", + "editorCursor.foreground": "#000000", + "editorWhitespace.foreground": "#BFBFBF" + } + } +} \ No newline at end of file