Suggester als Einstellung optional gemacht und anderes

This commit is contained in:
TheOnlySilas 2024-10-23 12:39:27 +02:00
parent 01a7d2eec9
commit 3c5220ceb0
6 changed files with 186 additions and 67 deletions

77
package-lock.json generated
View File

@ -9,6 +9,7 @@
"version": "1.0.0", "version": "1.0.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@codemirror/language": "github:codemirror/language",
"axios": "^1.7.2", "axios": "^1.7.2",
"cheerio": "^1.0.0-rc.12", "cheerio": "^1.0.0-rc.12",
"fetch-jsonp": "^1.3.0", "fetch-jsonp": "^1.3.0",
@ -35,19 +36,28 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/@codemirror/language": {
"version": "6.10.3",
"resolved": "git+ssh://git@github.com/codemirror/language.git#308d5f4cfba541c19f4cb345a2a46bd4386519d1",
"license": "MIT",
"dependencies": {
"@codemirror/state": "^6.0.0",
"@codemirror/view": "^6.23.0",
"@lezer/common": "^1.1.0",
"@lezer/highlight": "^1.0.0",
"@lezer/lr": "^1.0.0",
"style-mod": "^4.0.0"
}
},
"node_modules/@codemirror/state": { "node_modules/@codemirror/state": {
"version": "6.4.0", "version": "6.4.0",
"resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.0.tgz", "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.0.tgz",
"integrity": "sha512-hm8XshYj5Fo30Bb922QX9hXB/bxOAVH+qaqHBzw5TKa72vOeslyGwd4X8M0c1dJ9JqxlaMceOQ8RsL9tC7gU0A==", "integrity": "sha512-hm8XshYj5Fo30Bb922QX9hXB/bxOAVH+qaqHBzw5TKa72vOeslyGwd4X8M0c1dJ9JqxlaMceOQ8RsL9tC7gU0A=="
"dev": true,
"peer": true
}, },
"node_modules/@codemirror/view": { "node_modules/@codemirror/view": {
"version": "6.23.0", "version": "6.23.0",
"resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.23.0.tgz", "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.23.0.tgz",
"integrity": "sha512-/51px9N4uW8NpuWkyUX+iam5+PM6io2fm+QmRnzwqBy5v/pwGg9T0kILFtYeum8hjuvENtgsGNKluOfqIICmeQ==", "integrity": "sha512-/51px9N4uW8NpuWkyUX+iam5+PM6io2fm+QmRnzwqBy5v/pwGg9T0kILFtYeum8hjuvENtgsGNKluOfqIICmeQ==",
"dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@codemirror/state": "^6.4.0", "@codemirror/state": "^6.4.0",
"style-mod": "^4.1.0", "style-mod": "^4.1.0",
@ -502,6 +512,27 @@
"dev": true, "dev": true,
"peer": true "peer": true
}, },
"node_modules/@lezer/common": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz",
"integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA=="
},
"node_modules/@lezer/highlight": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz",
"integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==",
"dependencies": {
"@lezer/common": "^1.0.0"
}
},
"node_modules/@lezer/lr": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz",
"integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==",
"dependencies": {
"@lezer/common": "^1.0.0"
}
},
"node_modules/@nodelib/fs.scandir": { "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -852,9 +883,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.7.2", "version": "1.7.7",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
"integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.6", "follow-redirects": "^1.15.6",
"form-data": "^4.0.0", "form-data": "^4.0.0",
@ -898,12 +929,12 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -1601,9 +1632,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
@ -2106,12 +2137,12 @@
} }
}, },
"node_modules/micromatch": { "node_modules/micromatch": {
"version": "4.0.5", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"braces": "^3.0.2", "braces": "^3.0.3",
"picomatch": "^2.3.1" "picomatch": "^2.3.1"
}, },
"engines": { "engines": {
@ -2641,9 +2672,7 @@
"node_modules/style-mod": { "node_modules/style-mod": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz",
"integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==", "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA=="
"dev": true,
"peer": true
}, },
"node_modules/superagent": { "node_modules/superagent": {
"version": "3.7.0", "version": "3.7.0",
@ -2790,9 +2819,7 @@
"node_modules/w3c-keyname": { "node_modules/w3c-keyname": {
"version": "2.2.8", "version": "2.2.8",
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
"integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="
"dev": true,
"peer": true
}, },
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",

View File

@ -22,6 +22,7 @@
"typescript": "4.7.4" "typescript": "4.7.4"
}, },
"dependencies": { "dependencies": {
"@codemirror/language": "github:codemirror/language",
"axios": "^1.7.2", "axios": "^1.7.2",
"cheerio": "^1.0.0-rc.12", "cheerio": "^1.0.0-rc.12",
"fetch-jsonp": "^1.3.0", "fetch-jsonp": "^1.3.0",

View File

@ -7,15 +7,25 @@ import {
ViewPlugin, ViewPlugin,
ViewUpdate, ViewUpdate,
WidgetType, WidgetType,
MatchDecorator
} from '@codemirror/view'; } from '@codemirror/view';
import { import {
/** EditorState, EditorState,
StateField **/ StateField,
RangeSetBuilder RangeSetBuilder,
StateEffect
} from '@codemirror/state'; } from '@codemirror/state';
import { syntaxTree } from '@codemirror/language'; import { syntaxTree } from '@codemirror/language';
import { MarkdownEditView } from 'obsidian';
// §\s\d+[a-z]?\s(I+\s)?(\d\s)?(Nr.\s\d\s)?\w+
const placeholderMatcher = new MatchDecorator({
regexp: /\[\[(\w+)\]\]/g,
decoration: match => Decoration.replace({
})
})
class LawRefPluginEditorProcessor implements PluginValue { class LawRefPluginEditorProcessor implements PluginValue {
decorations: DecorationSet; decorations: DecorationSet;
@ -49,7 +59,7 @@ class LawRefPluginEditorProcessor implements PluginValue {
listCharFrom, listCharFrom,
listCharFrom + 1, listCharFrom + 1,
Decoration.replace({ Decoration.replace({
widget: new EmojiWidget(),
}) })
); );
} }
@ -63,3 +73,50 @@ class LawRefPluginEditorProcessor implements PluginValue {
export const lawRefPluginEditorProcessor = ViewPlugin.fromClass(LawRefPluginEditorProcessor); export const lawRefPluginEditorProcessor = ViewPlugin.fromClass(LawRefPluginEditorProcessor);
const addUnderline = StateEffect.define<{from: number, to: number}>({
map: ({from, to}, change) => ({from: change.mapPos(from), to: change.mapPos(to)})
})
const underlineField = StateField.define<DecorationSet>({
create() {
return Decoration.none
},
update(underlines, tr) {
underlines = underlines.map(tr.changes)
for (let e of tr.effects) if (e.is(addUnderline)) {
underlines = underlines.update({
add: [underlineMark.range(e.value.from, e.value.to)]
})
}
return underlines
},
provide: f => EditorView.decorations.from(f)
})
const underlineMark = Decoration.mark({class: "cm-underline"})
const underlineTheme = EditorView.baseTheme({
".cm-underline": { textDecoration: "underline 3px red" }
})
export function underlineSelection(view: EditorView) {
let effects: StateEffect<unknown>[] = view.state.selection.ranges
.filter(r => !r.empty)
.map(({from, to}) => addUnderline.of({from, to}))
if (!effects.length) return false
if (!view.state.field(underlineField, false))
effects.push(StateEffect.appendConfig.of([underlineField,
underlineTheme]))
view.dispatch({effects})
return true
}

View File

@ -5,7 +5,8 @@ import { OldpApi, OldpSearchResponseItem } from "./api/opld";
export default class LawSuggester extends EditorSuggest<OldpSearchResponseItem> { export default class LawSuggester extends EditorSuggest<OldpSearchResponseItem> {
private readonly oldpApi = new OldpApi(); private readonly oldpApi = new OldpApi();
plugin: LawRefPlugin; plugin: LawRefPlugin;
queryRegex = new RegExp(/(?:(?<=^|\n)|(?<=\s))(§[-\w]+)(?=\s|$)/gi); queryRegex = new RegExp(/(?:(?<=^|\n)|(?<=\s))(§\s\d+\s\w+)(?=\s|$)/gi);
// Alte Fassung falls ich Scheiße gebaut habe /(?:(?<=^|\n)|(?<=\s))(§[-\w]+)(?=\s|$)/gi
constructor(plugin: LawRefPlugin) { constructor(plugin: LawRefPlugin) {
super(plugin.app); super(plugin.app);

View File

@ -1,18 +1,17 @@
import { App, Modal, Notice, Plugin, PluginSettingTab, Setting, Vault, Workspace, WorkspaceLeaf, MarkdownPostProcessorContext, parseFrontMatterEntry } from 'obsidian'; import { App, Modal, Notice, Plugin, PluginSettingTab, Setting, Vault, Workspace, WorkspaceLeaf, MarkdownPostProcessorContext, parseFrontMatterEntry, View, MarkdownView } from 'obsidian';
import { ExampleView, VIEW_TYPE_EXAMPLE } from './law-view'; import { ExampleView, VIEW_TYPE_EXAMPLE } from './law-view';
import { OldpApi } from './api/opld'; import { OldpApi } from './api/opld';
import LawSuggester from './lawSuggester'; import LawSuggester from './lawSuggester';
import { lawRefPluginEditorProcessor } from './law-editor-processor'; import { lawRefPluginEditorProcessor, underlineSelection } from './law-editor-processor';
import { syntaxTree } from '@codemirror/language';
// Remember to rename these classes and interfaces! // Remember to rename these classes and interfaces!
interface LawRefPluginSettings { interface LawRefPluginSettings {
mySetting: string; useSuggester: boolean;
} }
const DEFAULT_SETTINGS: LawRefPluginSettings = { const DEFAULT_SETTINGS: LawRefPluginSettings = {
mySetting: 'default' useSuggester: false
} }
export default class LawRefPlugin extends Plugin { export default class LawRefPlugin extends Plugin {
@ -23,7 +22,7 @@ export default class LawRefPlugin extends Plugin {
this.registerView(VIEW_TYPE_EXAMPLE, (leaf) => new ExampleView(leaf)) this.registerView(VIEW_TYPE_EXAMPLE, (leaf) => new ExampleView(leaf))
this.registerEditorExtension(lawRefPluginEditorProcessor); this.registerEditorExtension(lawRefPluginEditorProcessor);
// This adds a settings tab so the user can configure various aspects of the plugin // This adds a settings tab so the user can configure various aspects of the plugin
this.addSettingTab(new SampleSettingTab(this.app, this)); this.addSettingTab(new LawRefPluginSettingTab(this.app, this));
// If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin) // If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin)
// Using this function will automatically remove the event listener when this plugin is disabled. // Using this function will automatically remove the event listener when this plugin is disabled.
@ -33,7 +32,10 @@ export default class LawRefPlugin extends Plugin {
const ribbonIconEl = this.addRibbonIcon('dice', 'Sample Plugin', (evt: MouseEvent) => { const ribbonIconEl = this.addRibbonIcon('dice', 'Sample Plugin', (evt: MouseEvent) => {
// Called when the user clicks the icon. // Called when the user clicks the icon.
new Notice('This is a notice!');
// @ts-expect-error, not typed
const CoMieditorView = this.app.workspace.activeEditor.editor.cm as EditorView;
underlineSelection(CoMieditorView);
this.activateView(); this.activateView();
}); });
@ -41,7 +43,9 @@ export default class LawRefPlugin extends Plugin {
this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000)); this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000));
// register suggestor on § key // register suggestor on § key
this.registerEditorSuggest(new LawSuggester(this)) if (this.settings.useSuggester===true){
this.registerEditorSuggest(new LawSuggester(this))
}
} }
@ -55,7 +59,7 @@ export default class LawRefPlugin extends Plugin {
let leaf: WorkspaceLeaf | null = null; let leaf: WorkspaceLeaf | null = null;
const leaves = workspace.getLeavesOfType(VIEW_TYPE_EXAMPLE); const leaves = workspace.getLeavesOfType(VIEW_TYPE_EXAMPLE);
const paragraphs = this.getFrontMatterMeta(); //const paragraphs = this.getFrontMatterMeta();
if (leaves.length > 0) { if (leaves.length > 0) {
// A leaf with our view already exists, use that // A leaf with our view already exists, use that
@ -73,7 +77,7 @@ export default class LawRefPlugin extends Plugin {
// "Reveal" the leaf in case it is in a collapsed sidebar // "Reveal" the leaf in case it is in a collapsed sidebar
workspace.revealLeaf(leaf); workspace.revealLeaf(leaf);
} }
async getFrontMatterMeta(){ /**async getFrontMatterMeta(){
const { workspace } = this.app; const { workspace } = this.app;
const actFile = workspace.getActiveFile(); const actFile = workspace.getActiveFile();
if (!actFile) return if (!actFile) return
@ -94,7 +98,7 @@ export default class LawRefPlugin extends Plugin {
container.createEl("p", {cls: "LawRefContainer", text: element})}); container.createEl("p", {cls: "LawRefContainer", text: element})});
} }
}); });
} }**/
async loadSettings() { async loadSettings() {
@ -122,7 +126,7 @@ class SampleModal extends Modal {
} }
} }
class SampleSettingTab extends PluginSettingTab { class LawRefPluginSettingTab extends PluginSettingTab {
plugin: LawRefPlugin; plugin: LawRefPlugin;
constructor(app: App, plugin: LawRefPlugin) { constructor(app: App, plugin: LawRefPlugin) {
@ -136,13 +140,12 @@ class SampleSettingTab extends PluginSettingTab {
containerEl.empty(); containerEl.empty();
new Setting(containerEl) new Setting(containerEl)
.setName('Setting #1') .setName('Use the Suggester for law Refs')
.setDesc('It\'s a secret') .setDesc('Warning: This Feature can lead to overload the oldpapi - Changing this setting requires a restart')
.addText(text => text .addToggle(toggle => toggle
.setPlaceholder('Enter your secret') .setValue(this.plugin.settings.useSuggester)
.setValue(this.plugin.settings.mySetting)
.onChange(async (value) => { .onChange(async (value) => {
this.plugin.settings.mySetting = value; this.plugin.settings.useSuggester = value;
await this.plugin.saveSettings(); await this.plugin.saveSettings();
})); }));
} }

View File

@ -7,12 +7,23 @@
resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz"
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
"@codemirror/language@github:codemirror/language":
version "6.10.3"
resolved "git+ssh://git@github.com/codemirror/language.git#308d5f4cfba541c19f4cb345a2a46bd4386519d1"
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.23.0"
"@lezer/common" "^1.1.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
style-mod "^4.0.0"
"@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0": "@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0":
version "6.4.0" version "6.4.0"
resolved "https://registry.npmjs.org/@codemirror/state/-/state-6.4.0.tgz" resolved "https://registry.npmjs.org/@codemirror/state/-/state-6.4.0.tgz"
integrity sha512-hm8XshYj5Fo30Bb922QX9hXB/bxOAVH+qaqHBzw5TKa72vOeslyGwd4X8M0c1dJ9JqxlaMceOQ8RsL9tC7gU0A== integrity sha512-hm8XshYj5Fo30Bb922QX9hXB/bxOAVH+qaqHBzw5TKa72vOeslyGwd4X8M0c1dJ9JqxlaMceOQ8RsL9tC7gU0A==
"@codemirror/view@^6.0.0": "@codemirror/view@^6.0.0", "@codemirror/view@^6.23.0":
version "6.23.0" version "6.23.0"
resolved "https://registry.npmjs.org/@codemirror/view/-/view-6.23.0.tgz" resolved "https://registry.npmjs.org/@codemirror/view/-/view-6.23.0.tgz"
integrity sha512-/51px9N4uW8NpuWkyUX+iam5+PM6io2fm+QmRnzwqBy5v/pwGg9T0kILFtYeum8hjuvENtgsGNKluOfqIICmeQ== integrity sha512-/51px9N4uW8NpuWkyUX+iam5+PM6io2fm+QmRnzwqBy5v/pwGg9T0kILFtYeum8hjuvENtgsGNKluOfqIICmeQ==
@ -77,6 +88,25 @@
resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz" resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz"
integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
"@lezer/common@^1.0.0", "@lezer/common@^1.1.0":
version "1.2.3"
resolved "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz"
integrity sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==
"@lezer/highlight@^1.0.0":
version "1.2.1"
resolved "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz"
integrity sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==
dependencies:
"@lezer/common" "^1.0.0"
"@lezer/lr@^1.0.0":
version "1.4.2"
resolved "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz"
integrity sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==
dependencies:
"@lezer/common" "^1.0.0"
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@ -260,9 +290,9 @@ asynckit@^0.4.0:
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
axios@^1.7.2: axios@^1.7.2:
version "1.7.2" version "1.7.7"
resolved "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz" resolved "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz"
integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==
dependencies: dependencies:
follow-redirects "^1.15.6" follow-redirects "^1.15.6"
form-data "^4.0.0" form-data "^4.0.0"
@ -286,12 +316,12 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0" balanced-match "^1.0.0"
concat-map "0.0.1" concat-map "0.0.1"
braces@^3.0.2: braces@^3.0.3:
version "3.0.2" version "3.0.3"
resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies: dependencies:
fill-range "^7.0.1" fill-range "^7.1.1"
builtin-modules@3.3.0: builtin-modules@3.3.0:
version "3.3.0" version "3.3.0"
@ -708,10 +738,10 @@ file-entry-cache@^6.0.1:
dependencies: dependencies:
flat-cache "^3.0.4" flat-cache "^3.0.4"
fill-range@^7.0.1: fill-range@^7.1.1:
version "7.0.1" version "7.1.1"
resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies: dependencies:
to-regex-range "^5.0.1" to-regex-range "^5.0.1"
@ -1017,11 +1047,11 @@ methods@^1.1.1:
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
micromatch@^4.0.4: micromatch@^4.0.4:
version "4.0.5" version "4.0.8"
resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
dependencies: dependencies:
braces "^3.0.2" braces "^3.0.3"
picomatch "^2.3.1" picomatch "^2.3.1"
mime-db@1.52.0: mime-db@1.52.0:
@ -1314,7 +1344,7 @@ strip-json-comments@^3.1.1:
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
style-mod@^4.1.0: style-mod@^4.0.0, style-mod@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz" resolved "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz"
integrity sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA== integrity sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==