├── .editorconfig
├── .esbuild.mjs
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
├── dependabot.yml
└── workflows
│ ├── obsidian-plugin-release.yml
│ └── stale-bot.yml
├── .gitignore
├── .knip.jsonc
├── .release.mjs
├── Justfile
├── LICENSE
├── README.md
├── biome.jsonc
├── manifest.json
├── package-lock.json
├── package.json
├── src
├── main.ts
└── settings.ts
├── styles.css
├── tsconfig.json
└── versions.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | max_line_length = 100
5 | end_of_line = lf
6 | charset = utf-8
7 | insert_final_newline = true
8 | indent_style = tab
9 | indent_size = 3
10 | tab_width = 3
11 | trim_trailing_whitespace = true
12 |
13 | [*.{yml,yaml,cff}]
14 | indent_style = space
15 | indent_size = 2
16 | tab_width = 2
17 |
18 | [*.py]
19 | indent_style = space
20 | indent_size = 4
21 | tab_width = 4
22 |
23 | [*.md]
24 | indent_size = 4
25 | tab_width = 4
26 | trim_trailing_whitespace = false
27 |
--------------------------------------------------------------------------------
/.esbuild.mjs:
--------------------------------------------------------------------------------
1 | import { appendFileSync } from "node:fs";
2 | import builtins from "builtin-modules";
3 | import esbuild from "esbuild";
4 |
5 | const banner = `/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
6 | If you want to view the source, please visit the GitHub repository of this plugin. */`;
7 |
8 | const production = process.argv[2] === "production";
9 | const analyze = process.argv[2] === "analyze";
10 |
11 | //──────────────────────────────────────────────────────────────────────────────
12 |
13 | const result = await esbuild
14 | .build({
15 | entryPoints: ["src/main.ts"],
16 | banner: { js: banner + "\n" },
17 | outfile: "main.js",
18 | bundle: true,
19 | // biome-ignore format: no need to inspect this regularly
20 | external: ["obsidian", "electron", "@codemirror/autocomplete", "@codemirror/collab", "@codemirror/commands", "@codemirror/language", "@codemirror/lint", "@codemirror/search", "@codemirror/state", "@codemirror/view", "@lezer/common", "@lezer/highlight", "@lezer/lr", ...builtins],
21 | format: "cjs",
22 | target: "es2022",
23 | sourcemap: production || analyze ? false : "inline",
24 | minify: production || analyze,
25 | drop: ["debugger"],
26 | treeShaking: true,
27 | logLevel: analyze ? "silent" : "info",
28 | metafile: analyze,
29 | })
30 | .catch(() => process.exit(1));
31 |
32 | //──────────────────────────────────────────────────────────────────────────────
33 |
34 | // DOCS https://esbuild.github.io/api/index#metafile
35 | if (result.metafile) {
36 | const sizes = await esbuild.analyzeMetafile(result.metafile, { verbose: false });
37 | console.info(sizes);
38 | }
39 |
40 | // FIX prevent Obsidian from removing the source map when using dev build
41 | // https://forum.obsidian.md/t/source-map-trimming-in-dev-builds/87612
42 | if (!production) appendFileSync(import.meta.dirname + "/main.js", "\n/* nosourcemap */");
43 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # https://docs.github.com/en/github/administering-a-repository/managing-repository-settings/displaying-a-sponsor-button-in-your-repository
2 |
3 | custom: https://www.paypal.me/ChrisGrieser
4 | ko_fi: pseudometa
5 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: Bug Report
2 | description: File a bug report
3 | title: "[Bug]: "
4 | labels: ["bug"]
5 | body:
6 | - type: textarea
7 | id: bug-description
8 | attributes:
9 | label: Bug Description
10 | description: A clear and concise description of the bug.
11 | validations:
12 | required: true
13 | - type: textarea
14 | id: screenshot
15 | attributes:
16 | label: Relevant Screenshot
17 | description: If applicable, add screenshots or a screen recording to help explain your problem.
18 | - type: textarea
19 | id: reproduction-steps
20 | attributes:
21 | label: To Reproduce
22 | description: Steps to reproduce the problem
23 | placeholder: |
24 | For example:
25 | 1. Go to '...'
26 | 2. Click on '...'
27 | 3. Scroll down to '...'
28 | - type: input
29 | id: obsi-version
30 | attributes:
31 | label: Obsidian Version
32 | description: You can find the version in the *About* Tab of the settings.
33 | placeholder: 0.13.19
34 | validations:
35 | required: true
36 | - type: checkboxes
37 | id: editor
38 | attributes:
39 | label: Which editor are you using?
40 | options:
41 | - label: New Editor
42 | - label: Legacy Editor
43 | - type: checkboxes
44 | id: checklist
45 | attributes:
46 | label: Checklist
47 | options:
48 | - label: I updated to the latest version of the plugin.
49 | required: true
50 |
51 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: Feature request
2 | description: Suggest an idea
3 | title: "Feature Request: "
4 | labels: ["feature request"]
5 | body:
6 | - type: textarea
7 | id: feature-requested
8 | attributes:
9 | label: Feature Requested
10 | description: A clear and concise description of the feature.
11 | validations:
12 | required: true
13 | - type: textarea
14 | id: screenshot
15 | attributes:
16 | label: Relevant Screenshot
17 | description: If applicable, add screenshots or a screen recording to help explain the request.
18 | - type: checkboxes
19 | id: checklist
20 | attributes:
21 | label: Checklist
22 | options:
23 | - label: The feature would be useful to more users than just me.
24 | required: true
25 |
26 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "github-actions"
4 | directory: "/"
5 | schedule:
6 | interval: "weekly"
7 | commit-message:
8 | prefix: "chore(dependabot): "
9 |
--------------------------------------------------------------------------------
/.github/workflows/obsidian-plugin-release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | push:
5 | tags: ["*"]
6 |
7 | env:
8 | PLUGIN_NAME: ${{ github.event.repository.name }}
9 |
10 | #───────────────────────────────────────────────────────────────────────────────
11 |
12 | jobs:
13 | build:
14 | runs-on: macos-latest
15 | permissions: { contents: write }
16 | steps:
17 | - name: Checkout
18 | uses: actions/checkout@v4
19 |
20 | - name: Setup node
21 | uses: actions/setup-node@v4
22 | with: { node-version: "22.x" }
23 |
24 | - name: Build plugin
25 | run: |
26 | npm install
27 | node .esbuild.mjs "production"
28 | mkdir ${{ env.PLUGIN_NAME }}
29 | cp main.js manifest.json styles.css ${{ env.PLUGIN_NAME }}
30 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }}
31 |
32 | - name: Release
33 | uses: softprops/action-gh-release@v2
34 | with:
35 | token: ${{ secrets.GITHUB_TOKEN }}
36 | generate_release_notes: true
37 | files: |
38 | ${{ env.PLUGIN_NAME }}.zip
39 | main.js
40 | manifest.json
41 | styles.css
42 |
--------------------------------------------------------------------------------
/.github/workflows/stale-bot.yml:
--------------------------------------------------------------------------------
1 | name: Stale bot
2 | on:
3 | schedule:
4 | - cron: "18 04 * * 3"
5 |
6 | permissions:
7 | issues: write
8 | pull-requests: write
9 |
10 | jobs:
11 | stale:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Close stale issues
15 | uses: actions/stale@v9
16 | with:
17 | repo-token: ${{ secrets.GITHUB_TOKEN }}
18 |
19 | # DOCS https://github.com/actions/stale#all-options
20 | days-before-stale: 180
21 | days-before-close: 7
22 | stale-issue-label: "Stale"
23 | stale-issue-message: |
24 | This issue has been automatically marked as stale.
25 | **If this issue is still affecting you, please leave any comment**, for example "bump", and it will be kept open.
26 | close-issue-message: |
27 | This issue has been closed due to inactivity, and will not be monitored.
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # npm
2 | node_modules
3 |
4 | # obsidian
5 | data.json
6 | main.js
7 |
8 | # Mac
9 | .DS_Store
10 |
--------------------------------------------------------------------------------
/.knip.jsonc:
--------------------------------------------------------------------------------
1 | // DOCS https://knip.dev/overview/configuration
2 | {
3 | "$schema": "https://unpkg.com/knip@5/schema-jsonc.json",
4 | "entry": ["src/main.ts"],
5 | "project": ["**/*.ts"],
6 | "ignoreDependencies": [
7 | "@biomejs/biome", // used only in pre-commit hook / task
8 | "markdownlint-cli" // used only in pre-commit hook / task
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/.release.mjs:
--------------------------------------------------------------------------------
1 | import { spawn } from "node:child_process";
2 | import { readFileSync, writeFileSync } from "node:fs";
3 | import readlinePromises from "node:readline/promises";
4 |
5 | /** @param {string} filepath */
6 | function readJson(filepath) {
7 | return JSON.parse(readFileSync(filepath, "utf8"));
8 | }
9 |
10 | /** @param {string} filepath @param {object} jsonObj */
11 | function writeJson(filepath, jsonObj) {
12 | writeFileSync(filepath, JSON.stringify(jsonObj, null, "\t") + "\n");
13 | }
14 |
15 | //──────────────────────────────────────────────────────────────────────────────
16 | // PROMPT FOR TARGET VERSION
17 |
18 | const manifest = readJson("manifest.json");
19 | const currentVersion = manifest.version;
20 | const rl = readlinePromises.createInterface({ input: process.stdin, output: process.stdout });
21 |
22 | console.info(`current version: ${currentVersion}`);
23 | const nextVersion = await rl.question(" next version: ");
24 | console.info("───────────────────────────");
25 | if (!nextVersion?.match(/\d+\.\d+\.\d+/) || nextVersion === currentVersion) {
26 | console.error("\x1b[1;31mInvalid target version given, aborting.\x1b[0m");
27 | process.exit(1);
28 | }
29 |
30 | rl.close();
31 |
32 | //──────────────────────────────────────────────────────────────────────────────
33 | // UPDATE VERSION IN VARIOUS JSONS
34 |
35 | manifest.version = nextVersion;
36 | writeJson("manifest.json", manifest);
37 |
38 | const versionsJson = readJson("versions.json");
39 | versionsJson[nextVersion] = manifest.minAppVersion;
40 | writeJson("versions.json", versionsJson);
41 |
42 | const packageJson = readJson("package.json");
43 | packageJson.version = nextVersion;
44 | writeJson("package.json", packageJson);
45 |
46 | const packageLock = readJson("package-lock.json");
47 | packageLock.version = nextVersion;
48 | packageLock.packages[""].version = nextVersion;
49 | writeJson("package-lock.json", packageLock);
50 |
51 | //──────────────────────────────────────────────────────────────────────────────
52 | // UPDATE GIT REPO
53 |
54 | const gitCommands = [
55 | "git add manifest.json versions.json package.json package-lock.json",
56 | `git commit --no-verify --message="release: ${nextVersion}"`, // skip hook, since only bumping
57 | "git pull --no-progress",
58 | "git push --no-progress",
59 | `git tag ${nextVersion}`, // tag triggers the release action
60 | "git push --no-progress origin --tags",
61 | ];
62 |
63 | // INFO as opposed to `exec`, `spawn` does not buffer the output
64 | const gitProcess = spawn(gitCommands.join(" && "), [], { shell: true });
65 | gitProcess.stdout.on("data", (data) => console.info(data.toString().trim()));
66 | gitProcess.stderr.on("data", (data) => console.info(data.toString().trim()));
67 | gitProcess.on("error", (_err) => process.exit(1));
68 |
--------------------------------------------------------------------------------
/Justfile:
--------------------------------------------------------------------------------
1 | set quiet := true
2 |
3 | test_vault := "$HOME/Vaults/phd-data-analysis"
4 |
5 | #───────────────────────────────────────────────────────────────────────────────
6 |
7 | [macos]
8 | build-and-reload:
9 | #!/usr/bin/env zsh
10 | node .esbuild.mjs
11 | cp -f "main.js" "{{ test_vault }}/.obsidian/plugins/quadro/main.js"
12 | vault_name=$(basename "{{ test_vault }}")
13 | open "obsidian://open?vault=$vault_name"
14 |
15 | # reload (INFO: requires registering the URI manually in a helper plugin)
16 | plugin_id=$(grep '"id"' "./manifest.json" | cut -d'"' -f4)
17 | open "obsidian://reload-plugin?id=$plugin_id&vault=$vault_name"
18 |
19 | check-all:
20 | zsh ./.githooks/pre-commit
21 |
22 | check-tsc-qf:
23 | npx tsc --noEmit --skipLibCheck --strict && echo "Typescript OK"
24 |
25 | release:
26 | node .release.mjs
27 |
28 | analyze:
29 | node .esbuild.mjs analyze
30 |
31 | init:
32 | #!/usr/bin/env zsh
33 | git config core.hooksPath .githooks
34 | npm install
35 | node .esbuild.mjs
36 |
37 | update-deps:
38 | #!/usr/bin/env zsh
39 | npm update
40 | node .esbuild.mjs
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022-2023 Christopher Grieser
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # New Tab Default Page
2 |
3 |  
4 |
5 | [Obsidian](https://obsidian.md/) plugin to open a note of your choice or the Quick Switcher when creating a new tab, like in the browser.
6 |
7 | > [!IMPORTANT]
8 | > This plugin is in maintenance mode, since I am not using it anymore myself.
9 | > No new features will be added, including support for other plugins. It will
10 | > remain available for anyone who wants to use it, but I suggest using one of
11 | > the many more advanced plugins with similar functionality, such as far more,
12 | > such as [Obsidian Homepage](https://obsidian.md/plugins?id=homepage).
13 |
14 | ---
15 |
16 | 📽️ [YouTube Demo of the plugin](https://www.youtube.com/watch?v=PKcnKqErwJw&t=2s)
17 |
18 | ---
19 |
20 |
21 | - [Examples for Default New Tab Pages](#examples-for-default-new-tab-pages)
22 | - [Usage](#usage)
23 | - [Advanced Examples](#advanced-examples)
24 | - [Random Quote](#random-quote)
25 | - [Installation](#installation)
26 | - [Donate](#donate)
27 | - [Thanks](#thanks)
28 |
29 |
30 | ## Examples for Default New Tab Pages
31 | - your homepage note
32 | - your daily note
33 | - a scratchpad note
34 | - trigger a quick switcher
35 | - an image
36 | - a random quote
37 | - …
38 |
39 | ## Usage
40 | 1. Set the note to open in new tabs in the plugin settings.
41 | 2. Set the mode in which the note should open.
42 | 3. Open a new tab.
43 |
44 | > __Note__
45 | > Closing your last tab also opens the new tab page.
46 |
47 | ## Advanced Examples
48 |
49 | ### Random Quote
50 | To have a random quote on every new tab, you can use dataview and paste the following code as a dataviewjs-codeblock in a note.
51 |
52 | ```js
53 | const quote = JSON.parse(await request("https://api.quotable.io/random"));
54 | dv.span(`> "${quote.content}" \n>
– ${quote.author}
`);
55 | ```
56 |
57 | Then, enter the path of the note in the *New Tab Default Page* settings, and select *Reading Mode*. Now every new note will display a random quote.
58 |
59 | ### Submit your own idea
60 | Have a cool idea of your own? Feel free to make a PR to this README and submit your own idea.
61 |
62 | ## Installation
63 | Available in Obsidian's Community Plugin Browser via: `Settings` → `Community Plugins` → `Browse` → Search for *"New Tab Default Page"*
64 |
65 | ## Donate
66 |
67 |
68 | ## Thanks
69 | Thanks to [@pjeby](https://github.com/pjeby) and various people from the `#plugin-dev` channel for helping me out.
70 |
--------------------------------------------------------------------------------
/biome.jsonc:
--------------------------------------------------------------------------------
1 | // DOCS https://biomejs.dev/reference/configuration/
2 | //──────────────────────────────────────────────────────────────────────────────
3 | {
4 | "linter": {
5 | "rules": {
6 | "all": true,
7 | "nursery": {
8 | "all": true,
9 | "useImportRestrictions": "off", // over-complicating stuff
10 | "noSecrets": "off", // buggy, many false positives
11 | "useGuardForIn": "off"
12 | },
13 | "complexity": {
14 | "noExcessiveCognitiveComplexity": "info",
15 | "useSimplifiedLogicExpression": "off" // complains about negated and-conditions
16 | },
17 | "performance": {
18 | "useTopLevelRegex": "off" // often not needed
19 | },
20 | "suspicious": {
21 | "noConsole": {
22 | "level": "info",
23 | "options": { "allow": ["assert", "error", "info", "warn"] } // only disallow `.log`
24 | }
25 | },
26 | "correctness": {
27 | "noUndeclaredDependencies": "off", // incompatible with typescript's default auto-imports
28 | "useImportExtensions": "off", // incompatible with typescript's default auto-imports
29 | "noNodejsModules": "off" // Obsidian is client-site, thus requiring them
30 | },
31 | "style": {
32 | "useBlockStatements": "off", // too much clutter
33 | "useImportType": "off", // incompatible with typescript's default auto-imports
34 | "useTemplate": "off", // too strict, simple concatenations are often fine
35 | "noParameterAssign": "off", // not useful
36 | "useNamingConvention": { "level": "info", "options": { "strictCase": false } }
37 | }
38 | }
39 | },
40 | "javascript": {
41 | "globals": ["activeDocument", "activeWindow"] // electron
42 | },
43 | "formatter": {
44 | "useEditorconfig": true,
45 | "formatWithErrors": true
46 | },
47 | "files": {
48 | "ignoreUnknown": true
49 | },
50 | "vcs": {
51 | "enabled": true,
52 | "clientKind": "git",
53 | "useIgnoreFile": true
54 | },
55 | "$schema": "./node_modules/@biomejs/biome/configuration_schema.json"
56 | }
57 |
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "new-tab-default-page",
3 | "name": "Default New Tab Page",
4 | "version": "0.11.9",
5 | "minAppVersion": "1.0.0",
6 | "description": "Open a note of your choice when creating a new tab, like in the browser.",
7 | "author": "Chris Grieser (aka pseudometa)",
8 | "fundingUrl": "https://ko-fi.com/pseudometa",
9 | "authorUrl": "https://chris-grieser.de/",
10 | "isDesktopOnly": false
11 | }
12 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "New Tab Default Page",
3 | "version": "0.11.9",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "New Tab Default Page",
9 | "version": "0.11.9",
10 | "license": "MIT",
11 | "devDependencies": {
12 | "@biomejs/biome": "latest",
13 | "@types/node": "^22.5.5",
14 | "builtin-modules": "^3.2.0",
15 | "esbuild": "^0.24.0",
16 | "knip": "latest",
17 | "markdownlint-cli": "latest",
18 | "obsidian": "latest",
19 | "tslib": "2.7.0",
20 | "typescript": "^5.6.2"
21 | }
22 | },
23 | "node_modules/@biomejs/biome": {
24 | "version": "1.9.4",
25 | "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz",
26 | "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==",
27 | "dev": true,
28 | "hasInstallScript": true,
29 | "license": "MIT OR Apache-2.0",
30 | "bin": {
31 | "biome": "bin/biome"
32 | },
33 | "engines": {
34 | "node": ">=14.21.3"
35 | },
36 | "funding": {
37 | "type": "opencollective",
38 | "url": "https://opencollective.com/biome"
39 | },
40 | "optionalDependencies": {
41 | "@biomejs/cli-darwin-arm64": "1.9.4",
42 | "@biomejs/cli-darwin-x64": "1.9.4",
43 | "@biomejs/cli-linux-arm64": "1.9.4",
44 | "@biomejs/cli-linux-arm64-musl": "1.9.4",
45 | "@biomejs/cli-linux-x64": "1.9.4",
46 | "@biomejs/cli-linux-x64-musl": "1.9.4",
47 | "@biomejs/cli-win32-arm64": "1.9.4",
48 | "@biomejs/cli-win32-x64": "1.9.4"
49 | }
50 | },
51 | "node_modules/@biomejs/cli-darwin-arm64": {
52 | "version": "1.9.4",
53 | "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz",
54 | "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==",
55 | "cpu": [
56 | "arm64"
57 | ],
58 | "dev": true,
59 | "license": "MIT OR Apache-2.0",
60 | "optional": true,
61 | "os": [
62 | "darwin"
63 | ],
64 | "engines": {
65 | "node": ">=14.21.3"
66 | }
67 | },
68 | "node_modules/@biomejs/cli-darwin-x64": {
69 | "version": "1.9.4",
70 | "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz",
71 | "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==",
72 | "cpu": [
73 | "x64"
74 | ],
75 | "dev": true,
76 | "license": "MIT OR Apache-2.0",
77 | "optional": true,
78 | "os": [
79 | "darwin"
80 | ],
81 | "engines": {
82 | "node": ">=14.21.3"
83 | }
84 | },
85 | "node_modules/@biomejs/cli-linux-arm64": {
86 | "version": "1.9.4",
87 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz",
88 | "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==",
89 | "cpu": [
90 | "arm64"
91 | ],
92 | "dev": true,
93 | "license": "MIT OR Apache-2.0",
94 | "optional": true,
95 | "os": [
96 | "linux"
97 | ],
98 | "engines": {
99 | "node": ">=14.21.3"
100 | }
101 | },
102 | "node_modules/@biomejs/cli-linux-arm64-musl": {
103 | "version": "1.9.4",
104 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz",
105 | "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==",
106 | "cpu": [
107 | "arm64"
108 | ],
109 | "dev": true,
110 | "license": "MIT OR Apache-2.0",
111 | "optional": true,
112 | "os": [
113 | "linux"
114 | ],
115 | "engines": {
116 | "node": ">=14.21.3"
117 | }
118 | },
119 | "node_modules/@biomejs/cli-linux-x64": {
120 | "version": "1.9.4",
121 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz",
122 | "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==",
123 | "cpu": [
124 | "x64"
125 | ],
126 | "dev": true,
127 | "license": "MIT OR Apache-2.0",
128 | "optional": true,
129 | "os": [
130 | "linux"
131 | ],
132 | "engines": {
133 | "node": ">=14.21.3"
134 | }
135 | },
136 | "node_modules/@biomejs/cli-linux-x64-musl": {
137 | "version": "1.9.4",
138 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz",
139 | "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==",
140 | "cpu": [
141 | "x64"
142 | ],
143 | "dev": true,
144 | "license": "MIT OR Apache-2.0",
145 | "optional": true,
146 | "os": [
147 | "linux"
148 | ],
149 | "engines": {
150 | "node": ">=14.21.3"
151 | }
152 | },
153 | "node_modules/@biomejs/cli-win32-arm64": {
154 | "version": "1.9.4",
155 | "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz",
156 | "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==",
157 | "cpu": [
158 | "arm64"
159 | ],
160 | "dev": true,
161 | "license": "MIT OR Apache-2.0",
162 | "optional": true,
163 | "os": [
164 | "win32"
165 | ],
166 | "engines": {
167 | "node": ">=14.21.3"
168 | }
169 | },
170 | "node_modules/@biomejs/cli-win32-x64": {
171 | "version": "1.9.4",
172 | "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz",
173 | "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==",
174 | "cpu": [
175 | "x64"
176 | ],
177 | "dev": true,
178 | "license": "MIT OR Apache-2.0",
179 | "optional": true,
180 | "os": [
181 | "win32"
182 | ],
183 | "engines": {
184 | "node": ">=14.21.3"
185 | }
186 | },
187 | "node_modules/@codemirror/state": {
188 | "version": "6.5.1",
189 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.1.tgz",
190 | "integrity": "sha512-3rA9lcwciEB47ZevqvD8qgbzhM9qMb8vCcQCNmDfVRPQG4JT9mSb0Jg8H7YjKGGQcFnLN323fj9jdnG59Kx6bg==",
191 | "dev": true,
192 | "license": "MIT",
193 | "peer": true,
194 | "dependencies": {
195 | "@marijn/find-cluster-break": "^1.0.0"
196 | }
197 | },
198 | "node_modules/@codemirror/view": {
199 | "version": "6.36.2",
200 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.2.tgz",
201 | "integrity": "sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA==",
202 | "dev": true,
203 | "license": "MIT",
204 | "peer": true,
205 | "dependencies": {
206 | "@codemirror/state": "^6.5.0",
207 | "style-mod": "^4.1.0",
208 | "w3c-keyname": "^2.2.4"
209 | }
210 | },
211 | "node_modules/@esbuild/aix-ppc64": {
212 | "version": "0.24.2",
213 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
214 | "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
215 | "cpu": [
216 | "ppc64"
217 | ],
218 | "dev": true,
219 | "license": "MIT",
220 | "optional": true,
221 | "os": [
222 | "aix"
223 | ],
224 | "engines": {
225 | "node": ">=18"
226 | }
227 | },
228 | "node_modules/@esbuild/android-arm": {
229 | "version": "0.24.2",
230 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
231 | "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
232 | "cpu": [
233 | "arm"
234 | ],
235 | "dev": true,
236 | "license": "MIT",
237 | "optional": true,
238 | "os": [
239 | "android"
240 | ],
241 | "engines": {
242 | "node": ">=18"
243 | }
244 | },
245 | "node_modules/@esbuild/android-arm64": {
246 | "version": "0.24.2",
247 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
248 | "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
249 | "cpu": [
250 | "arm64"
251 | ],
252 | "dev": true,
253 | "license": "MIT",
254 | "optional": true,
255 | "os": [
256 | "android"
257 | ],
258 | "engines": {
259 | "node": ">=18"
260 | }
261 | },
262 | "node_modules/@esbuild/android-x64": {
263 | "version": "0.24.2",
264 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
265 | "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
266 | "cpu": [
267 | "x64"
268 | ],
269 | "dev": true,
270 | "license": "MIT",
271 | "optional": true,
272 | "os": [
273 | "android"
274 | ],
275 | "engines": {
276 | "node": ">=18"
277 | }
278 | },
279 | "node_modules/@esbuild/darwin-arm64": {
280 | "version": "0.24.2",
281 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
282 | "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
283 | "cpu": [
284 | "arm64"
285 | ],
286 | "dev": true,
287 | "license": "MIT",
288 | "optional": true,
289 | "os": [
290 | "darwin"
291 | ],
292 | "engines": {
293 | "node": ">=18"
294 | }
295 | },
296 | "node_modules/@esbuild/darwin-x64": {
297 | "version": "0.24.2",
298 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
299 | "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
300 | "cpu": [
301 | "x64"
302 | ],
303 | "dev": true,
304 | "license": "MIT",
305 | "optional": true,
306 | "os": [
307 | "darwin"
308 | ],
309 | "engines": {
310 | "node": ">=18"
311 | }
312 | },
313 | "node_modules/@esbuild/freebsd-arm64": {
314 | "version": "0.24.2",
315 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
316 | "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
317 | "cpu": [
318 | "arm64"
319 | ],
320 | "dev": true,
321 | "license": "MIT",
322 | "optional": true,
323 | "os": [
324 | "freebsd"
325 | ],
326 | "engines": {
327 | "node": ">=18"
328 | }
329 | },
330 | "node_modules/@esbuild/freebsd-x64": {
331 | "version": "0.24.2",
332 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
333 | "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
334 | "cpu": [
335 | "x64"
336 | ],
337 | "dev": true,
338 | "license": "MIT",
339 | "optional": true,
340 | "os": [
341 | "freebsd"
342 | ],
343 | "engines": {
344 | "node": ">=18"
345 | }
346 | },
347 | "node_modules/@esbuild/linux-arm": {
348 | "version": "0.24.2",
349 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
350 | "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
351 | "cpu": [
352 | "arm"
353 | ],
354 | "dev": true,
355 | "license": "MIT",
356 | "optional": true,
357 | "os": [
358 | "linux"
359 | ],
360 | "engines": {
361 | "node": ">=18"
362 | }
363 | },
364 | "node_modules/@esbuild/linux-arm64": {
365 | "version": "0.24.2",
366 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
367 | "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
368 | "cpu": [
369 | "arm64"
370 | ],
371 | "dev": true,
372 | "license": "MIT",
373 | "optional": true,
374 | "os": [
375 | "linux"
376 | ],
377 | "engines": {
378 | "node": ">=18"
379 | }
380 | },
381 | "node_modules/@esbuild/linux-ia32": {
382 | "version": "0.24.2",
383 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
384 | "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
385 | "cpu": [
386 | "ia32"
387 | ],
388 | "dev": true,
389 | "license": "MIT",
390 | "optional": true,
391 | "os": [
392 | "linux"
393 | ],
394 | "engines": {
395 | "node": ">=18"
396 | }
397 | },
398 | "node_modules/@esbuild/linux-loong64": {
399 | "version": "0.24.2",
400 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
401 | "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
402 | "cpu": [
403 | "loong64"
404 | ],
405 | "dev": true,
406 | "license": "MIT",
407 | "optional": true,
408 | "os": [
409 | "linux"
410 | ],
411 | "engines": {
412 | "node": ">=18"
413 | }
414 | },
415 | "node_modules/@esbuild/linux-mips64el": {
416 | "version": "0.24.2",
417 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
418 | "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
419 | "cpu": [
420 | "mips64el"
421 | ],
422 | "dev": true,
423 | "license": "MIT",
424 | "optional": true,
425 | "os": [
426 | "linux"
427 | ],
428 | "engines": {
429 | "node": ">=18"
430 | }
431 | },
432 | "node_modules/@esbuild/linux-ppc64": {
433 | "version": "0.24.2",
434 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
435 | "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
436 | "cpu": [
437 | "ppc64"
438 | ],
439 | "dev": true,
440 | "license": "MIT",
441 | "optional": true,
442 | "os": [
443 | "linux"
444 | ],
445 | "engines": {
446 | "node": ">=18"
447 | }
448 | },
449 | "node_modules/@esbuild/linux-riscv64": {
450 | "version": "0.24.2",
451 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
452 | "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
453 | "cpu": [
454 | "riscv64"
455 | ],
456 | "dev": true,
457 | "license": "MIT",
458 | "optional": true,
459 | "os": [
460 | "linux"
461 | ],
462 | "engines": {
463 | "node": ">=18"
464 | }
465 | },
466 | "node_modules/@esbuild/linux-s390x": {
467 | "version": "0.24.2",
468 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
469 | "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
470 | "cpu": [
471 | "s390x"
472 | ],
473 | "dev": true,
474 | "license": "MIT",
475 | "optional": true,
476 | "os": [
477 | "linux"
478 | ],
479 | "engines": {
480 | "node": ">=18"
481 | }
482 | },
483 | "node_modules/@esbuild/linux-x64": {
484 | "version": "0.24.2",
485 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
486 | "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
487 | "cpu": [
488 | "x64"
489 | ],
490 | "dev": true,
491 | "license": "MIT",
492 | "optional": true,
493 | "os": [
494 | "linux"
495 | ],
496 | "engines": {
497 | "node": ">=18"
498 | }
499 | },
500 | "node_modules/@esbuild/netbsd-arm64": {
501 | "version": "0.24.2",
502 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
503 | "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
504 | "cpu": [
505 | "arm64"
506 | ],
507 | "dev": true,
508 | "license": "MIT",
509 | "optional": true,
510 | "os": [
511 | "netbsd"
512 | ],
513 | "engines": {
514 | "node": ">=18"
515 | }
516 | },
517 | "node_modules/@esbuild/netbsd-x64": {
518 | "version": "0.24.2",
519 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
520 | "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
521 | "cpu": [
522 | "x64"
523 | ],
524 | "dev": true,
525 | "license": "MIT",
526 | "optional": true,
527 | "os": [
528 | "netbsd"
529 | ],
530 | "engines": {
531 | "node": ">=18"
532 | }
533 | },
534 | "node_modules/@esbuild/openbsd-arm64": {
535 | "version": "0.24.2",
536 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
537 | "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
538 | "cpu": [
539 | "arm64"
540 | ],
541 | "dev": true,
542 | "license": "MIT",
543 | "optional": true,
544 | "os": [
545 | "openbsd"
546 | ],
547 | "engines": {
548 | "node": ">=18"
549 | }
550 | },
551 | "node_modules/@esbuild/openbsd-x64": {
552 | "version": "0.24.2",
553 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
554 | "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
555 | "cpu": [
556 | "x64"
557 | ],
558 | "dev": true,
559 | "license": "MIT",
560 | "optional": true,
561 | "os": [
562 | "openbsd"
563 | ],
564 | "engines": {
565 | "node": ">=18"
566 | }
567 | },
568 | "node_modules/@esbuild/sunos-x64": {
569 | "version": "0.24.2",
570 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
571 | "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
572 | "cpu": [
573 | "x64"
574 | ],
575 | "dev": true,
576 | "license": "MIT",
577 | "optional": true,
578 | "os": [
579 | "sunos"
580 | ],
581 | "engines": {
582 | "node": ">=18"
583 | }
584 | },
585 | "node_modules/@esbuild/win32-arm64": {
586 | "version": "0.24.2",
587 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
588 | "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
589 | "cpu": [
590 | "arm64"
591 | ],
592 | "dev": true,
593 | "license": "MIT",
594 | "optional": true,
595 | "os": [
596 | "win32"
597 | ],
598 | "engines": {
599 | "node": ">=18"
600 | }
601 | },
602 | "node_modules/@esbuild/win32-ia32": {
603 | "version": "0.24.2",
604 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
605 | "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
606 | "cpu": [
607 | "ia32"
608 | ],
609 | "dev": true,
610 | "license": "MIT",
611 | "optional": true,
612 | "os": [
613 | "win32"
614 | ],
615 | "engines": {
616 | "node": ">=18"
617 | }
618 | },
619 | "node_modules/@esbuild/win32-x64": {
620 | "version": "0.24.2",
621 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
622 | "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
623 | "cpu": [
624 | "x64"
625 | ],
626 | "dev": true,
627 | "license": "MIT",
628 | "optional": true,
629 | "os": [
630 | "win32"
631 | ],
632 | "engines": {
633 | "node": ">=18"
634 | }
635 | },
636 | "node_modules/@isaacs/cliui": {
637 | "version": "8.0.2",
638 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
639 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
640 | "dev": true,
641 | "license": "ISC",
642 | "dependencies": {
643 | "string-width": "^5.1.2",
644 | "string-width-cjs": "npm:string-width@^4.2.0",
645 | "strip-ansi": "^7.0.1",
646 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
647 | "wrap-ansi": "^8.1.0",
648 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
649 | },
650 | "engines": {
651 | "node": ">=12"
652 | }
653 | },
654 | "node_modules/@marijn/find-cluster-break": {
655 | "version": "1.0.2",
656 | "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
657 | "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==",
658 | "dev": true,
659 | "license": "MIT",
660 | "peer": true
661 | },
662 | "node_modules/@nodelib/fs.scandir": {
663 | "version": "4.0.1",
664 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-4.0.1.tgz",
665 | "integrity": "sha512-vAkI715yhnmiPupY+dq+xenu5Tdf2TBQ66jLvBIcCddtz+5Q8LbMKaf9CIJJreez8fQ8fgaY+RaywQx8RJIWpw==",
666 | "dev": true,
667 | "license": "MIT",
668 | "dependencies": {
669 | "@nodelib/fs.stat": "4.0.0",
670 | "run-parallel": "^1.2.0"
671 | },
672 | "engines": {
673 | "node": ">=18.18.0"
674 | }
675 | },
676 | "node_modules/@nodelib/fs.stat": {
677 | "version": "4.0.0",
678 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-4.0.0.tgz",
679 | "integrity": "sha512-ctr6bByzksKRCV0bavi8WoQevU6plSp2IkllIsEqaiKe2mwNNnaluhnRhcsgGZHrrHk57B3lf95MkLMO3STYcg==",
680 | "dev": true,
681 | "license": "MIT",
682 | "engines": {
683 | "node": ">=18.18.0"
684 | }
685 | },
686 | "node_modules/@nodelib/fs.walk": {
687 | "version": "3.0.1",
688 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-3.0.1.tgz",
689 | "integrity": "sha512-nIh/M6Kh3ZtOmlY00DaUYB4xeeV6F3/ts1l29iwl3/cfyY/OuCfUx+v08zgx8TKPTifXRcjjqVQ4KB2zOYSbyw==",
690 | "dev": true,
691 | "license": "MIT",
692 | "dependencies": {
693 | "@nodelib/fs.scandir": "4.0.1",
694 | "fastq": "^1.15.0"
695 | },
696 | "engines": {
697 | "node": ">=18.18.0"
698 | }
699 | },
700 | "node_modules/@snyk/github-codeowners": {
701 | "version": "1.1.0",
702 | "resolved": "https://registry.npmjs.org/@snyk/github-codeowners/-/github-codeowners-1.1.0.tgz",
703 | "integrity": "sha512-lGFf08pbkEac0NYgVf4hdANpAgApRjNByLXB+WBip3qj1iendOIyAwP2GKkKbQMNVy2r1xxDf0ssfWscoiC+Vw==",
704 | "dev": true,
705 | "license": "MIT",
706 | "dependencies": {
707 | "commander": "^4.1.1",
708 | "ignore": "^5.1.8",
709 | "p-map": "^4.0.0"
710 | },
711 | "bin": {
712 | "github-codeowners": "dist/cli.js"
713 | },
714 | "engines": {
715 | "node": ">=8.10"
716 | }
717 | },
718 | "node_modules/@types/codemirror": {
719 | "version": "5.60.8",
720 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz",
721 | "integrity": "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==",
722 | "dev": true,
723 | "license": "MIT",
724 | "dependencies": {
725 | "@types/tern": "*"
726 | }
727 | },
728 | "node_modules/@types/estree": {
729 | "version": "1.0.6",
730 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
731 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
732 | "dev": true,
733 | "license": "MIT"
734 | },
735 | "node_modules/@types/node": {
736 | "version": "22.10.5",
737 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz",
738 | "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==",
739 | "dev": true,
740 | "license": "MIT",
741 | "dependencies": {
742 | "undici-types": "~6.20.0"
743 | }
744 | },
745 | "node_modules/@types/tern": {
746 | "version": "0.23.9",
747 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz",
748 | "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==",
749 | "dev": true,
750 | "license": "MIT",
751 | "dependencies": {
752 | "@types/estree": "*"
753 | }
754 | },
755 | "node_modules/aggregate-error": {
756 | "version": "3.1.0",
757 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
758 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
759 | "dev": true,
760 | "license": "MIT",
761 | "dependencies": {
762 | "clean-stack": "^2.0.0",
763 | "indent-string": "^4.0.0"
764 | },
765 | "engines": {
766 | "node": ">=8"
767 | }
768 | },
769 | "node_modules/ansi-regex": {
770 | "version": "5.0.1",
771 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
772 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
773 | "dev": true,
774 | "license": "MIT",
775 | "engines": {
776 | "node": ">=8"
777 | }
778 | },
779 | "node_modules/ansi-styles": {
780 | "version": "6.2.1",
781 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
782 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
783 | "dev": true,
784 | "license": "MIT",
785 | "engines": {
786 | "node": ">=12"
787 | },
788 | "funding": {
789 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
790 | }
791 | },
792 | "node_modules/argparse": {
793 | "version": "2.0.1",
794 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
795 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
796 | "dev": true,
797 | "license": "Python-2.0"
798 | },
799 | "node_modules/balanced-match": {
800 | "version": "1.0.2",
801 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
802 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
803 | "dev": true,
804 | "license": "MIT"
805 | },
806 | "node_modules/brace-expansion": {
807 | "version": "2.0.1",
808 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
809 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
810 | "dev": true,
811 | "license": "MIT",
812 | "dependencies": {
813 | "balanced-match": "^1.0.0"
814 | }
815 | },
816 | "node_modules/braces": {
817 | "version": "3.0.3",
818 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
819 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
820 | "dev": true,
821 | "license": "MIT",
822 | "dependencies": {
823 | "fill-range": "^7.1.1"
824 | },
825 | "engines": {
826 | "node": ">=8"
827 | }
828 | },
829 | "node_modules/builtin-modules": {
830 | "version": "3.3.0",
831 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
832 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
833 | "dev": true,
834 | "license": "MIT",
835 | "engines": {
836 | "node": ">=6"
837 | },
838 | "funding": {
839 | "url": "https://github.com/sponsors/sindresorhus"
840 | }
841 | },
842 | "node_modules/clean-stack": {
843 | "version": "2.2.0",
844 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
845 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
846 | "dev": true,
847 | "license": "MIT",
848 | "engines": {
849 | "node": ">=6"
850 | }
851 | },
852 | "node_modules/clone": {
853 | "version": "1.0.4",
854 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
855 | "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
856 | "dev": true,
857 | "license": "MIT",
858 | "optional": true,
859 | "engines": {
860 | "node": ">=0.8"
861 | }
862 | },
863 | "node_modules/color-convert": {
864 | "version": "2.0.1",
865 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
866 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
867 | "dev": true,
868 | "license": "MIT",
869 | "dependencies": {
870 | "color-name": "~1.1.4"
871 | },
872 | "engines": {
873 | "node": ">=7.0.0"
874 | }
875 | },
876 | "node_modules/color-name": {
877 | "version": "1.1.4",
878 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
879 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
880 | "dev": true,
881 | "license": "MIT"
882 | },
883 | "node_modules/commander": {
884 | "version": "4.1.1",
885 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
886 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
887 | "dev": true,
888 | "license": "MIT",
889 | "engines": {
890 | "node": ">= 6"
891 | }
892 | },
893 | "node_modules/cross-spawn": {
894 | "version": "7.0.6",
895 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
896 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
897 | "dev": true,
898 | "license": "MIT",
899 | "dependencies": {
900 | "path-key": "^3.1.0",
901 | "shebang-command": "^2.0.0",
902 | "which": "^2.0.1"
903 | },
904 | "engines": {
905 | "node": ">= 8"
906 | }
907 | },
908 | "node_modules/deep-extend": {
909 | "version": "0.6.0",
910 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
911 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
912 | "dev": true,
913 | "license": "MIT",
914 | "engines": {
915 | "node": ">=4.0.0"
916 | }
917 | },
918 | "node_modules/defaults": {
919 | "version": "1.0.4",
920 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
921 | "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
922 | "dev": true,
923 | "license": "MIT",
924 | "optional": true,
925 | "dependencies": {
926 | "clone": "^1.0.2"
927 | },
928 | "funding": {
929 | "url": "https://github.com/sponsors/sindresorhus"
930 | }
931 | },
932 | "node_modules/eastasianwidth": {
933 | "version": "0.2.0",
934 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
935 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
936 | "dev": true,
937 | "license": "MIT"
938 | },
939 | "node_modules/easy-table": {
940 | "version": "1.2.0",
941 | "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz",
942 | "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==",
943 | "dev": true,
944 | "license": "MIT",
945 | "dependencies": {
946 | "ansi-regex": "^5.0.1"
947 | },
948 | "optionalDependencies": {
949 | "wcwidth": "^1.0.1"
950 | }
951 | },
952 | "node_modules/emoji-regex": {
953 | "version": "9.2.2",
954 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
955 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
956 | "dev": true,
957 | "license": "MIT"
958 | },
959 | "node_modules/enhanced-resolve": {
960 | "version": "5.18.0",
961 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz",
962 | "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==",
963 | "dev": true,
964 | "license": "MIT",
965 | "dependencies": {
966 | "graceful-fs": "^4.2.4",
967 | "tapable": "^2.2.0"
968 | },
969 | "engines": {
970 | "node": ">=10.13.0"
971 | }
972 | },
973 | "node_modules/entities": {
974 | "version": "4.5.0",
975 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
976 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
977 | "dev": true,
978 | "license": "BSD-2-Clause",
979 | "engines": {
980 | "node": ">=0.12"
981 | },
982 | "funding": {
983 | "url": "https://github.com/fb55/entities?sponsor=1"
984 | }
985 | },
986 | "node_modules/esbuild": {
987 | "version": "0.24.2",
988 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
989 | "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
990 | "dev": true,
991 | "hasInstallScript": true,
992 | "license": "MIT",
993 | "bin": {
994 | "esbuild": "bin/esbuild"
995 | },
996 | "engines": {
997 | "node": ">=18"
998 | },
999 | "optionalDependencies": {
1000 | "@esbuild/aix-ppc64": "0.24.2",
1001 | "@esbuild/android-arm": "0.24.2",
1002 | "@esbuild/android-arm64": "0.24.2",
1003 | "@esbuild/android-x64": "0.24.2",
1004 | "@esbuild/darwin-arm64": "0.24.2",
1005 | "@esbuild/darwin-x64": "0.24.2",
1006 | "@esbuild/freebsd-arm64": "0.24.2",
1007 | "@esbuild/freebsd-x64": "0.24.2",
1008 | "@esbuild/linux-arm": "0.24.2",
1009 | "@esbuild/linux-arm64": "0.24.2",
1010 | "@esbuild/linux-ia32": "0.24.2",
1011 | "@esbuild/linux-loong64": "0.24.2",
1012 | "@esbuild/linux-mips64el": "0.24.2",
1013 | "@esbuild/linux-ppc64": "0.24.2",
1014 | "@esbuild/linux-riscv64": "0.24.2",
1015 | "@esbuild/linux-s390x": "0.24.2",
1016 | "@esbuild/linux-x64": "0.24.2",
1017 | "@esbuild/netbsd-arm64": "0.24.2",
1018 | "@esbuild/netbsd-x64": "0.24.2",
1019 | "@esbuild/openbsd-arm64": "0.24.2",
1020 | "@esbuild/openbsd-x64": "0.24.2",
1021 | "@esbuild/sunos-x64": "0.24.2",
1022 | "@esbuild/win32-arm64": "0.24.2",
1023 | "@esbuild/win32-ia32": "0.24.2",
1024 | "@esbuild/win32-x64": "0.24.2"
1025 | }
1026 | },
1027 | "node_modules/fast-glob": {
1028 | "version": "3.3.3",
1029 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
1030 | "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
1031 | "dev": true,
1032 | "license": "MIT",
1033 | "dependencies": {
1034 | "@nodelib/fs.stat": "^2.0.2",
1035 | "@nodelib/fs.walk": "^1.2.3",
1036 | "glob-parent": "^5.1.2",
1037 | "merge2": "^1.3.0",
1038 | "micromatch": "^4.0.8"
1039 | },
1040 | "engines": {
1041 | "node": ">=8.6.0"
1042 | }
1043 | },
1044 | "node_modules/fast-glob/node_modules/@nodelib/fs.scandir": {
1045 | "version": "2.1.5",
1046 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
1047 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
1048 | "dev": true,
1049 | "license": "MIT",
1050 | "dependencies": {
1051 | "@nodelib/fs.stat": "2.0.5",
1052 | "run-parallel": "^1.1.9"
1053 | },
1054 | "engines": {
1055 | "node": ">= 8"
1056 | }
1057 | },
1058 | "node_modules/fast-glob/node_modules/@nodelib/fs.stat": {
1059 | "version": "2.0.5",
1060 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
1061 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
1062 | "dev": true,
1063 | "license": "MIT",
1064 | "engines": {
1065 | "node": ">= 8"
1066 | }
1067 | },
1068 | "node_modules/fast-glob/node_modules/@nodelib/fs.walk": {
1069 | "version": "1.2.8",
1070 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
1071 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
1072 | "dev": true,
1073 | "license": "MIT",
1074 | "dependencies": {
1075 | "@nodelib/fs.scandir": "2.1.5",
1076 | "fastq": "^1.6.0"
1077 | },
1078 | "engines": {
1079 | "node": ">= 8"
1080 | }
1081 | },
1082 | "node_modules/fastq": {
1083 | "version": "1.18.0",
1084 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz",
1085 | "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
1086 | "dev": true,
1087 | "license": "ISC",
1088 | "dependencies": {
1089 | "reusify": "^1.0.4"
1090 | }
1091 | },
1092 | "node_modules/fill-range": {
1093 | "version": "7.1.1",
1094 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
1095 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
1096 | "dev": true,
1097 | "license": "MIT",
1098 | "dependencies": {
1099 | "to-regex-range": "^5.0.1"
1100 | },
1101 | "engines": {
1102 | "node": ">=8"
1103 | }
1104 | },
1105 | "node_modules/foreground-child": {
1106 | "version": "3.3.0",
1107 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
1108 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
1109 | "dev": true,
1110 | "license": "ISC",
1111 | "dependencies": {
1112 | "cross-spawn": "^7.0.0",
1113 | "signal-exit": "^4.0.1"
1114 | },
1115 | "engines": {
1116 | "node": ">=14"
1117 | },
1118 | "funding": {
1119 | "url": "https://github.com/sponsors/isaacs"
1120 | }
1121 | },
1122 | "node_modules/glob": {
1123 | "version": "11.0.1",
1124 | "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz",
1125 | "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==",
1126 | "dev": true,
1127 | "license": "ISC",
1128 | "dependencies": {
1129 | "foreground-child": "^3.1.0",
1130 | "jackspeak": "^4.0.1",
1131 | "minimatch": "^10.0.0",
1132 | "minipass": "^7.1.2",
1133 | "package-json-from-dist": "^1.0.0",
1134 | "path-scurry": "^2.0.0"
1135 | },
1136 | "bin": {
1137 | "glob": "dist/esm/bin.mjs"
1138 | },
1139 | "engines": {
1140 | "node": "20 || >=22"
1141 | },
1142 | "funding": {
1143 | "url": "https://github.com/sponsors/isaacs"
1144 | }
1145 | },
1146 | "node_modules/glob-parent": {
1147 | "version": "5.1.2",
1148 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1149 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1150 | "dev": true,
1151 | "license": "ISC",
1152 | "dependencies": {
1153 | "is-glob": "^4.0.1"
1154 | },
1155 | "engines": {
1156 | "node": ">= 6"
1157 | }
1158 | },
1159 | "node_modules/graceful-fs": {
1160 | "version": "4.2.11",
1161 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1162 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
1163 | "dev": true,
1164 | "license": "ISC"
1165 | },
1166 | "node_modules/ignore": {
1167 | "version": "5.3.2",
1168 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
1169 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
1170 | "dev": true,
1171 | "license": "MIT",
1172 | "engines": {
1173 | "node": ">= 4"
1174 | }
1175 | },
1176 | "node_modules/indent-string": {
1177 | "version": "4.0.0",
1178 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
1179 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
1180 | "dev": true,
1181 | "license": "MIT",
1182 | "engines": {
1183 | "node": ">=8"
1184 | }
1185 | },
1186 | "node_modules/ini": {
1187 | "version": "4.1.3",
1188 | "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
1189 | "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
1190 | "dev": true,
1191 | "license": "ISC",
1192 | "engines": {
1193 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
1194 | }
1195 | },
1196 | "node_modules/is-extglob": {
1197 | "version": "2.1.1",
1198 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1199 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1200 | "dev": true,
1201 | "license": "MIT",
1202 | "engines": {
1203 | "node": ">=0.10.0"
1204 | }
1205 | },
1206 | "node_modules/is-fullwidth-code-point": {
1207 | "version": "3.0.0",
1208 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1209 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1210 | "dev": true,
1211 | "license": "MIT",
1212 | "engines": {
1213 | "node": ">=8"
1214 | }
1215 | },
1216 | "node_modules/is-glob": {
1217 | "version": "4.0.3",
1218 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1219 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1220 | "dev": true,
1221 | "license": "MIT",
1222 | "dependencies": {
1223 | "is-extglob": "^2.1.1"
1224 | },
1225 | "engines": {
1226 | "node": ">=0.10.0"
1227 | }
1228 | },
1229 | "node_modules/is-number": {
1230 | "version": "7.0.0",
1231 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1232 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1233 | "dev": true,
1234 | "license": "MIT",
1235 | "engines": {
1236 | "node": ">=0.12.0"
1237 | }
1238 | },
1239 | "node_modules/isexe": {
1240 | "version": "2.0.0",
1241 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1242 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1243 | "dev": true,
1244 | "license": "ISC"
1245 | },
1246 | "node_modules/jackspeak": {
1247 | "version": "4.0.2",
1248 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz",
1249 | "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==",
1250 | "dev": true,
1251 | "license": "BlueOak-1.0.0",
1252 | "dependencies": {
1253 | "@isaacs/cliui": "^8.0.2"
1254 | },
1255 | "engines": {
1256 | "node": "20 || >=22"
1257 | },
1258 | "funding": {
1259 | "url": "https://github.com/sponsors/isaacs"
1260 | }
1261 | },
1262 | "node_modules/jiti": {
1263 | "version": "2.4.2",
1264 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
1265 | "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
1266 | "dev": true,
1267 | "license": "MIT",
1268 | "bin": {
1269 | "jiti": "lib/jiti-cli.mjs"
1270 | }
1271 | },
1272 | "node_modules/js-yaml": {
1273 | "version": "4.1.0",
1274 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1275 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1276 | "dev": true,
1277 | "license": "MIT",
1278 | "dependencies": {
1279 | "argparse": "^2.0.1"
1280 | },
1281 | "bin": {
1282 | "js-yaml": "bin/js-yaml.js"
1283 | }
1284 | },
1285 | "node_modules/jsonc-parser": {
1286 | "version": "3.3.1",
1287 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
1288 | "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
1289 | "dev": true,
1290 | "license": "MIT"
1291 | },
1292 | "node_modules/jsonpointer": {
1293 | "version": "5.0.1",
1294 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
1295 | "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
1296 | "dev": true,
1297 | "license": "MIT",
1298 | "engines": {
1299 | "node": ">=0.10.0"
1300 | }
1301 | },
1302 | "node_modules/knip": {
1303 | "version": "5.42.0",
1304 | "resolved": "https://registry.npmjs.org/knip/-/knip-5.42.0.tgz",
1305 | "integrity": "sha512-/+/GV+oIJ0A2l2LBaiHvp4sGj448T1EMQm2S1I6sPh9AIR9riBaYY19ZYq743Ql/GR0lgwwGoQ2UKNp0B93HNA==",
1306 | "dev": true,
1307 | "funding": [
1308 | {
1309 | "type": "github",
1310 | "url": "https://github.com/sponsors/webpro"
1311 | },
1312 | {
1313 | "type": "opencollective",
1314 | "url": "https://opencollective.com/knip"
1315 | },
1316 | {
1317 | "type": "polar",
1318 | "url": "https://polar.sh/webpro-nl"
1319 | }
1320 | ],
1321 | "license": "ISC",
1322 | "dependencies": {
1323 | "@nodelib/fs.walk": "3.0.1",
1324 | "@snyk/github-codeowners": "1.1.0",
1325 | "easy-table": "1.2.0",
1326 | "enhanced-resolve": "^5.18.0",
1327 | "fast-glob": "^3.3.3",
1328 | "jiti": "^2.4.2",
1329 | "js-yaml": "^4.1.0",
1330 | "minimist": "^1.2.8",
1331 | "picocolors": "^1.1.0",
1332 | "picomatch": "^4.0.1",
1333 | "pretty-ms": "^9.0.0",
1334 | "smol-toml": "^1.3.1",
1335 | "strip-json-comments": "5.0.1",
1336 | "summary": "2.1.0",
1337 | "zod": "^3.22.4",
1338 | "zod-validation-error": "^3.0.3"
1339 | },
1340 | "bin": {
1341 | "knip": "bin/knip.js",
1342 | "knip-bun": "bin/knip-bun.js"
1343 | },
1344 | "engines": {
1345 | "node": ">=18.18.0"
1346 | },
1347 | "peerDependencies": {
1348 | "@types/node": ">=18",
1349 | "typescript": ">=5.0.4"
1350 | }
1351 | },
1352 | "node_modules/linkify-it": {
1353 | "version": "5.0.0",
1354 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
1355 | "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
1356 | "dev": true,
1357 | "license": "MIT",
1358 | "dependencies": {
1359 | "uc.micro": "^2.0.0"
1360 | }
1361 | },
1362 | "node_modules/lru-cache": {
1363 | "version": "11.0.2",
1364 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz",
1365 | "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==",
1366 | "dev": true,
1367 | "license": "ISC",
1368 | "engines": {
1369 | "node": "20 || >=22"
1370 | }
1371 | },
1372 | "node_modules/markdown-it": {
1373 | "version": "14.1.0",
1374 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
1375 | "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
1376 | "dev": true,
1377 | "license": "MIT",
1378 | "dependencies": {
1379 | "argparse": "^2.0.1",
1380 | "entities": "^4.4.0",
1381 | "linkify-it": "^5.0.0",
1382 | "mdurl": "^2.0.0",
1383 | "punycode.js": "^2.3.1",
1384 | "uc.micro": "^2.1.0"
1385 | },
1386 | "bin": {
1387 | "markdown-it": "bin/markdown-it.mjs"
1388 | }
1389 | },
1390 | "node_modules/markdownlint": {
1391 | "version": "0.36.1",
1392 | "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.36.1.tgz",
1393 | "integrity": "sha512-s73fU2CQN7WCgjhaQUQ8wYESQNzGRNOKDd+3xgVqu8kuTEhmwepd/mxOv1LR2oV046ONrTLBFsM7IoKWNvmy5g==",
1394 | "dev": true,
1395 | "license": "MIT",
1396 | "dependencies": {
1397 | "markdown-it": "14.1.0",
1398 | "markdownlint-micromark": "0.1.12"
1399 | },
1400 | "engines": {
1401 | "node": ">=18"
1402 | },
1403 | "funding": {
1404 | "url": "https://github.com/sponsors/DavidAnson"
1405 | }
1406 | },
1407 | "node_modules/markdownlint-cli": {
1408 | "version": "0.43.0",
1409 | "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.43.0.tgz",
1410 | "integrity": "sha512-6vwurKK4B21eyYzwgX6ph13cZS7hE6LZfcS8QyD722CyxVD2RtAvbZK2p7k+FZbbKORulEuwl+hJaEq1l6/hoQ==",
1411 | "dev": true,
1412 | "license": "MIT",
1413 | "dependencies": {
1414 | "commander": "~12.1.0",
1415 | "glob": "~11.0.0",
1416 | "ignore": "~6.0.2",
1417 | "js-yaml": "^4.1.0",
1418 | "jsonc-parser": "~3.3.1",
1419 | "jsonpointer": "5.0.1",
1420 | "markdownlint": "~0.36.1",
1421 | "minimatch": "~10.0.1",
1422 | "run-con": "~1.3.2",
1423 | "smol-toml": "~1.3.1"
1424 | },
1425 | "bin": {
1426 | "markdownlint": "markdownlint.js"
1427 | },
1428 | "engines": {
1429 | "node": ">=18"
1430 | }
1431 | },
1432 | "node_modules/markdownlint-cli/node_modules/commander": {
1433 | "version": "12.1.0",
1434 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
1435 | "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
1436 | "dev": true,
1437 | "license": "MIT",
1438 | "engines": {
1439 | "node": ">=18"
1440 | }
1441 | },
1442 | "node_modules/markdownlint-cli/node_modules/ignore": {
1443 | "version": "6.0.2",
1444 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
1445 | "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
1446 | "dev": true,
1447 | "license": "MIT",
1448 | "engines": {
1449 | "node": ">= 4"
1450 | }
1451 | },
1452 | "node_modules/markdownlint-micromark": {
1453 | "version": "0.1.12",
1454 | "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.12.tgz",
1455 | "integrity": "sha512-RlB6EwMGgc0sxcIhOQ2+aq7Zw1V2fBnzbXKGgYK/mVWdT7cz34fteKSwfYeo4rL6+L/q2tyC9QtD/PgZbkdyJQ==",
1456 | "dev": true,
1457 | "license": "MIT",
1458 | "engines": {
1459 | "node": ">=18"
1460 | },
1461 | "funding": {
1462 | "url": "https://github.com/sponsors/DavidAnson"
1463 | }
1464 | },
1465 | "node_modules/mdurl": {
1466 | "version": "2.0.0",
1467 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
1468 | "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
1469 | "dev": true,
1470 | "license": "MIT"
1471 | },
1472 | "node_modules/merge2": {
1473 | "version": "1.4.1",
1474 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1475 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1476 | "dev": true,
1477 | "license": "MIT",
1478 | "engines": {
1479 | "node": ">= 8"
1480 | }
1481 | },
1482 | "node_modules/micromatch": {
1483 | "version": "4.0.8",
1484 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1485 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1486 | "dev": true,
1487 | "license": "MIT",
1488 | "dependencies": {
1489 | "braces": "^3.0.3",
1490 | "picomatch": "^2.3.1"
1491 | },
1492 | "engines": {
1493 | "node": ">=8.6"
1494 | }
1495 | },
1496 | "node_modules/micromatch/node_modules/picomatch": {
1497 | "version": "2.3.1",
1498 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1499 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1500 | "dev": true,
1501 | "license": "MIT",
1502 | "engines": {
1503 | "node": ">=8.6"
1504 | },
1505 | "funding": {
1506 | "url": "https://github.com/sponsors/jonschlinkert"
1507 | }
1508 | },
1509 | "node_modules/minimatch": {
1510 | "version": "10.0.1",
1511 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
1512 | "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
1513 | "dev": true,
1514 | "license": "ISC",
1515 | "dependencies": {
1516 | "brace-expansion": "^2.0.1"
1517 | },
1518 | "engines": {
1519 | "node": "20 || >=22"
1520 | },
1521 | "funding": {
1522 | "url": "https://github.com/sponsors/isaacs"
1523 | }
1524 | },
1525 | "node_modules/minimist": {
1526 | "version": "1.2.8",
1527 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1528 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1529 | "dev": true,
1530 | "license": "MIT",
1531 | "funding": {
1532 | "url": "https://github.com/sponsors/ljharb"
1533 | }
1534 | },
1535 | "node_modules/minipass": {
1536 | "version": "7.1.2",
1537 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
1538 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
1539 | "dev": true,
1540 | "license": "ISC",
1541 | "engines": {
1542 | "node": ">=16 || 14 >=14.17"
1543 | }
1544 | },
1545 | "node_modules/moment": {
1546 | "version": "2.29.4",
1547 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
1548 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
1549 | "dev": true,
1550 | "license": "MIT",
1551 | "engines": {
1552 | "node": "*"
1553 | }
1554 | },
1555 | "node_modules/obsidian": {
1556 | "version": "1.7.2",
1557 | "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.7.2.tgz",
1558 | "integrity": "sha512-k9hN9brdknJC+afKr5FQzDRuEFGDKbDjfCazJwpgibwCAoZNYHYV8p/s3mM8I6AsnKrPKNXf8xGuMZ4enWelZQ==",
1559 | "dev": true,
1560 | "license": "MIT",
1561 | "dependencies": {
1562 | "@types/codemirror": "5.60.8",
1563 | "moment": "2.29.4"
1564 | },
1565 | "peerDependencies": {
1566 | "@codemirror/state": "^6.0.0",
1567 | "@codemirror/view": "^6.0.0"
1568 | }
1569 | },
1570 | "node_modules/p-map": {
1571 | "version": "4.0.0",
1572 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
1573 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
1574 | "dev": true,
1575 | "license": "MIT",
1576 | "dependencies": {
1577 | "aggregate-error": "^3.0.0"
1578 | },
1579 | "engines": {
1580 | "node": ">=10"
1581 | },
1582 | "funding": {
1583 | "url": "https://github.com/sponsors/sindresorhus"
1584 | }
1585 | },
1586 | "node_modules/package-json-from-dist": {
1587 | "version": "1.0.1",
1588 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
1589 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
1590 | "dev": true,
1591 | "license": "BlueOak-1.0.0"
1592 | },
1593 | "node_modules/parse-ms": {
1594 | "version": "4.0.0",
1595 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
1596 | "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
1597 | "dev": true,
1598 | "license": "MIT",
1599 | "engines": {
1600 | "node": ">=18"
1601 | },
1602 | "funding": {
1603 | "url": "https://github.com/sponsors/sindresorhus"
1604 | }
1605 | },
1606 | "node_modules/path-key": {
1607 | "version": "3.1.1",
1608 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1609 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1610 | "dev": true,
1611 | "license": "MIT",
1612 | "engines": {
1613 | "node": ">=8"
1614 | }
1615 | },
1616 | "node_modules/path-scurry": {
1617 | "version": "2.0.0",
1618 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
1619 | "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
1620 | "dev": true,
1621 | "license": "BlueOak-1.0.0",
1622 | "dependencies": {
1623 | "lru-cache": "^11.0.0",
1624 | "minipass": "^7.1.2"
1625 | },
1626 | "engines": {
1627 | "node": "20 || >=22"
1628 | },
1629 | "funding": {
1630 | "url": "https://github.com/sponsors/isaacs"
1631 | }
1632 | },
1633 | "node_modules/picocolors": {
1634 | "version": "1.1.1",
1635 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1636 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1637 | "dev": true,
1638 | "license": "ISC"
1639 | },
1640 | "node_modules/picomatch": {
1641 | "version": "4.0.2",
1642 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
1643 | "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
1644 | "dev": true,
1645 | "license": "MIT",
1646 | "engines": {
1647 | "node": ">=12"
1648 | },
1649 | "funding": {
1650 | "url": "https://github.com/sponsors/jonschlinkert"
1651 | }
1652 | },
1653 | "node_modules/pretty-ms": {
1654 | "version": "9.2.0",
1655 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz",
1656 | "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==",
1657 | "dev": true,
1658 | "license": "MIT",
1659 | "dependencies": {
1660 | "parse-ms": "^4.0.0"
1661 | },
1662 | "engines": {
1663 | "node": ">=18"
1664 | },
1665 | "funding": {
1666 | "url": "https://github.com/sponsors/sindresorhus"
1667 | }
1668 | },
1669 | "node_modules/punycode.js": {
1670 | "version": "2.3.1",
1671 | "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
1672 | "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
1673 | "dev": true,
1674 | "license": "MIT",
1675 | "engines": {
1676 | "node": ">=6"
1677 | }
1678 | },
1679 | "node_modules/queue-microtask": {
1680 | "version": "1.2.3",
1681 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1682 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1683 | "dev": true,
1684 | "funding": [
1685 | {
1686 | "type": "github",
1687 | "url": "https://github.com/sponsors/feross"
1688 | },
1689 | {
1690 | "type": "patreon",
1691 | "url": "https://www.patreon.com/feross"
1692 | },
1693 | {
1694 | "type": "consulting",
1695 | "url": "https://feross.org/support"
1696 | }
1697 | ],
1698 | "license": "MIT"
1699 | },
1700 | "node_modules/reusify": {
1701 | "version": "1.0.4",
1702 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1703 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1704 | "dev": true,
1705 | "license": "MIT",
1706 | "engines": {
1707 | "iojs": ">=1.0.0",
1708 | "node": ">=0.10.0"
1709 | }
1710 | },
1711 | "node_modules/run-con": {
1712 | "version": "1.3.2",
1713 | "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz",
1714 | "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==",
1715 | "dev": true,
1716 | "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
1717 | "dependencies": {
1718 | "deep-extend": "^0.6.0",
1719 | "ini": "~4.1.0",
1720 | "minimist": "^1.2.8",
1721 | "strip-json-comments": "~3.1.1"
1722 | },
1723 | "bin": {
1724 | "run-con": "cli.js"
1725 | }
1726 | },
1727 | "node_modules/run-con/node_modules/strip-json-comments": {
1728 | "version": "3.1.1",
1729 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
1730 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
1731 | "dev": true,
1732 | "license": "MIT",
1733 | "engines": {
1734 | "node": ">=8"
1735 | },
1736 | "funding": {
1737 | "url": "https://github.com/sponsors/sindresorhus"
1738 | }
1739 | },
1740 | "node_modules/run-parallel": {
1741 | "version": "1.2.0",
1742 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1743 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1744 | "dev": true,
1745 | "funding": [
1746 | {
1747 | "type": "github",
1748 | "url": "https://github.com/sponsors/feross"
1749 | },
1750 | {
1751 | "type": "patreon",
1752 | "url": "https://www.patreon.com/feross"
1753 | },
1754 | {
1755 | "type": "consulting",
1756 | "url": "https://feross.org/support"
1757 | }
1758 | ],
1759 | "license": "MIT",
1760 | "dependencies": {
1761 | "queue-microtask": "^1.2.2"
1762 | }
1763 | },
1764 | "node_modules/shebang-command": {
1765 | "version": "2.0.0",
1766 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1767 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1768 | "dev": true,
1769 | "license": "MIT",
1770 | "dependencies": {
1771 | "shebang-regex": "^3.0.0"
1772 | },
1773 | "engines": {
1774 | "node": ">=8"
1775 | }
1776 | },
1777 | "node_modules/shebang-regex": {
1778 | "version": "3.0.0",
1779 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1780 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1781 | "dev": true,
1782 | "license": "MIT",
1783 | "engines": {
1784 | "node": ">=8"
1785 | }
1786 | },
1787 | "node_modules/signal-exit": {
1788 | "version": "4.1.0",
1789 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
1790 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
1791 | "dev": true,
1792 | "license": "ISC",
1793 | "engines": {
1794 | "node": ">=14"
1795 | },
1796 | "funding": {
1797 | "url": "https://github.com/sponsors/isaacs"
1798 | }
1799 | },
1800 | "node_modules/smol-toml": {
1801 | "version": "1.3.1",
1802 | "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz",
1803 | "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==",
1804 | "dev": true,
1805 | "license": "BSD-3-Clause",
1806 | "engines": {
1807 | "node": ">= 18"
1808 | },
1809 | "funding": {
1810 | "url": "https://github.com/sponsors/cyyynthia"
1811 | }
1812 | },
1813 | "node_modules/string-width": {
1814 | "version": "5.1.2",
1815 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1816 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
1817 | "dev": true,
1818 | "license": "MIT",
1819 | "dependencies": {
1820 | "eastasianwidth": "^0.2.0",
1821 | "emoji-regex": "^9.2.2",
1822 | "strip-ansi": "^7.0.1"
1823 | },
1824 | "engines": {
1825 | "node": ">=12"
1826 | },
1827 | "funding": {
1828 | "url": "https://github.com/sponsors/sindresorhus"
1829 | }
1830 | },
1831 | "node_modules/string-width-cjs": {
1832 | "name": "string-width",
1833 | "version": "4.2.3",
1834 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1835 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1836 | "dev": true,
1837 | "license": "MIT",
1838 | "dependencies": {
1839 | "emoji-regex": "^8.0.0",
1840 | "is-fullwidth-code-point": "^3.0.0",
1841 | "strip-ansi": "^6.0.1"
1842 | },
1843 | "engines": {
1844 | "node": ">=8"
1845 | }
1846 | },
1847 | "node_modules/string-width-cjs/node_modules/emoji-regex": {
1848 | "version": "8.0.0",
1849 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1850 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1851 | "dev": true,
1852 | "license": "MIT"
1853 | },
1854 | "node_modules/string-width-cjs/node_modules/strip-ansi": {
1855 | "version": "6.0.1",
1856 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1857 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1858 | "dev": true,
1859 | "license": "MIT",
1860 | "dependencies": {
1861 | "ansi-regex": "^5.0.1"
1862 | },
1863 | "engines": {
1864 | "node": ">=8"
1865 | }
1866 | },
1867 | "node_modules/strip-ansi": {
1868 | "version": "7.1.0",
1869 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
1870 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
1871 | "dev": true,
1872 | "license": "MIT",
1873 | "dependencies": {
1874 | "ansi-regex": "^6.0.1"
1875 | },
1876 | "engines": {
1877 | "node": ">=12"
1878 | },
1879 | "funding": {
1880 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
1881 | }
1882 | },
1883 | "node_modules/strip-ansi-cjs": {
1884 | "name": "strip-ansi",
1885 | "version": "6.0.1",
1886 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1887 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1888 | "dev": true,
1889 | "license": "MIT",
1890 | "dependencies": {
1891 | "ansi-regex": "^5.0.1"
1892 | },
1893 | "engines": {
1894 | "node": ">=8"
1895 | }
1896 | },
1897 | "node_modules/strip-ansi/node_modules/ansi-regex": {
1898 | "version": "6.1.0",
1899 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
1900 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
1901 | "dev": true,
1902 | "license": "MIT",
1903 | "engines": {
1904 | "node": ">=12"
1905 | },
1906 | "funding": {
1907 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
1908 | }
1909 | },
1910 | "node_modules/strip-json-comments": {
1911 | "version": "5.0.1",
1912 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz",
1913 | "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==",
1914 | "dev": true,
1915 | "license": "MIT",
1916 | "engines": {
1917 | "node": ">=14.16"
1918 | },
1919 | "funding": {
1920 | "url": "https://github.com/sponsors/sindresorhus"
1921 | }
1922 | },
1923 | "node_modules/style-mod": {
1924 | "version": "4.1.2",
1925 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz",
1926 | "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==",
1927 | "dev": true,
1928 | "license": "MIT",
1929 | "peer": true
1930 | },
1931 | "node_modules/summary": {
1932 | "version": "2.1.0",
1933 | "resolved": "https://registry.npmjs.org/summary/-/summary-2.1.0.tgz",
1934 | "integrity": "sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==",
1935 | "dev": true,
1936 | "license": "MIT"
1937 | },
1938 | "node_modules/tapable": {
1939 | "version": "2.2.1",
1940 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
1941 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
1942 | "dev": true,
1943 | "license": "MIT",
1944 | "engines": {
1945 | "node": ">=6"
1946 | }
1947 | },
1948 | "node_modules/to-regex-range": {
1949 | "version": "5.0.1",
1950 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1951 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1952 | "dev": true,
1953 | "license": "MIT",
1954 | "dependencies": {
1955 | "is-number": "^7.0.0"
1956 | },
1957 | "engines": {
1958 | "node": ">=8.0"
1959 | }
1960 | },
1961 | "node_modules/tslib": {
1962 | "version": "2.7.0",
1963 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
1964 | "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
1965 | "dev": true,
1966 | "license": "0BSD"
1967 | },
1968 | "node_modules/typescript": {
1969 | "version": "5.7.3",
1970 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
1971 | "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
1972 | "dev": true,
1973 | "license": "Apache-2.0",
1974 | "bin": {
1975 | "tsc": "bin/tsc",
1976 | "tsserver": "bin/tsserver"
1977 | },
1978 | "engines": {
1979 | "node": ">=14.17"
1980 | }
1981 | },
1982 | "node_modules/uc.micro": {
1983 | "version": "2.1.0",
1984 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
1985 | "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
1986 | "dev": true,
1987 | "license": "MIT"
1988 | },
1989 | "node_modules/undici-types": {
1990 | "version": "6.20.0",
1991 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
1992 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
1993 | "dev": true,
1994 | "license": "MIT"
1995 | },
1996 | "node_modules/w3c-keyname": {
1997 | "version": "2.2.8",
1998 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
1999 | "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
2000 | "dev": true,
2001 | "license": "MIT",
2002 | "peer": true
2003 | },
2004 | "node_modules/wcwidth": {
2005 | "version": "1.0.1",
2006 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
2007 | "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
2008 | "dev": true,
2009 | "license": "MIT",
2010 | "optional": true,
2011 | "dependencies": {
2012 | "defaults": "^1.0.3"
2013 | }
2014 | },
2015 | "node_modules/which": {
2016 | "version": "2.0.2",
2017 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2018 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2019 | "dev": true,
2020 | "license": "ISC",
2021 | "dependencies": {
2022 | "isexe": "^2.0.0"
2023 | },
2024 | "bin": {
2025 | "node-which": "bin/node-which"
2026 | },
2027 | "engines": {
2028 | "node": ">= 8"
2029 | }
2030 | },
2031 | "node_modules/wrap-ansi": {
2032 | "version": "8.1.0",
2033 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
2034 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
2035 | "dev": true,
2036 | "license": "MIT",
2037 | "dependencies": {
2038 | "ansi-styles": "^6.1.0",
2039 | "string-width": "^5.0.1",
2040 | "strip-ansi": "^7.0.1"
2041 | },
2042 | "engines": {
2043 | "node": ">=12"
2044 | },
2045 | "funding": {
2046 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2047 | }
2048 | },
2049 | "node_modules/wrap-ansi-cjs": {
2050 | "name": "wrap-ansi",
2051 | "version": "7.0.0",
2052 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2053 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2054 | "dev": true,
2055 | "license": "MIT",
2056 | "dependencies": {
2057 | "ansi-styles": "^4.0.0",
2058 | "string-width": "^4.1.0",
2059 | "strip-ansi": "^6.0.0"
2060 | },
2061 | "engines": {
2062 | "node": ">=10"
2063 | },
2064 | "funding": {
2065 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2066 | }
2067 | },
2068 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
2069 | "version": "4.3.0",
2070 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2071 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2072 | "dev": true,
2073 | "license": "MIT",
2074 | "dependencies": {
2075 | "color-convert": "^2.0.1"
2076 | },
2077 | "engines": {
2078 | "node": ">=8"
2079 | },
2080 | "funding": {
2081 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2082 | }
2083 | },
2084 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
2085 | "version": "8.0.0",
2086 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2087 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2088 | "dev": true,
2089 | "license": "MIT"
2090 | },
2091 | "node_modules/wrap-ansi-cjs/node_modules/string-width": {
2092 | "version": "4.2.3",
2093 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2094 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2095 | "dev": true,
2096 | "license": "MIT",
2097 | "dependencies": {
2098 | "emoji-regex": "^8.0.0",
2099 | "is-fullwidth-code-point": "^3.0.0",
2100 | "strip-ansi": "^6.0.1"
2101 | },
2102 | "engines": {
2103 | "node": ">=8"
2104 | }
2105 | },
2106 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
2107 | "version": "6.0.1",
2108 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2109 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2110 | "dev": true,
2111 | "license": "MIT",
2112 | "dependencies": {
2113 | "ansi-regex": "^5.0.1"
2114 | },
2115 | "engines": {
2116 | "node": ">=8"
2117 | }
2118 | },
2119 | "node_modules/zod": {
2120 | "version": "3.24.1",
2121 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz",
2122 | "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==",
2123 | "dev": true,
2124 | "license": "MIT",
2125 | "funding": {
2126 | "url": "https://github.com/sponsors/colinhacks"
2127 | }
2128 | },
2129 | "node_modules/zod-validation-error": {
2130 | "version": "3.4.0",
2131 | "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.4.0.tgz",
2132 | "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==",
2133 | "dev": true,
2134 | "license": "MIT",
2135 | "engines": {
2136 | "node": ">=18.0.0"
2137 | },
2138 | "peerDependencies": {
2139 | "zod": "^3.18.0"
2140 | }
2141 | }
2142 | }
2143 | }
2144 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "New Tab Default Page",
3 | "description": "Open a note of your choice when creating a new tab, like in the browser.",
4 | "author": "Chris Grieser",
5 | "version": "0.11.9",
6 | "keywords": [],
7 | "license": "MIT",
8 | "main": "main.js",
9 | "devDependencies": {
10 | "@biomejs/biome": "latest",
11 | "@types/node": "^22.5.5",
12 | "builtin-modules": "^3.2.0",
13 | "esbuild": "^0.24.0",
14 | "knip": "latest",
15 | "markdownlint-cli": "latest",
16 | "obsidian": "latest",
17 | "tslib": "2.7.0",
18 | "typescript": "^5.6.2"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { Notice, Plugin, WorkspaceLeaf } from "obsidian";
2 | import { DefaultNewTabPageSettingTab } from "./settings";
3 |
4 | // add type safety for the undocumented methods
5 | declare module "obsidian" {
6 | interface App {
7 | internalPlugins: {
8 | plugins: {
9 | switcher: { enabled: boolean };
10 | };
11 | };
12 | commands: {
13 | executeCommandById: (commandID: string) => boolean;
14 | };
15 | }
16 | }
17 |
18 | // Default Settings
19 | interface DefaultNewTabPageSettings {
20 | whatToOpen: string;
21 | filePath: string;
22 | mode: string;
23 | compatibilityMode: boolean;
24 | }
25 |
26 | const DEFAULT_SETTINGS: Partial = {
27 | whatToOpen: "new-tab-page",
28 | filePath: "",
29 | mode: "obsidian-default",
30 | compatibilityMode: false,
31 | };
32 |
33 | //──────────────────────────────────────────────────────────────────────────────
34 |
35 | export default class defaultNewTabPage extends Plugin {
36 | settings: DefaultNewTabPageSettings;
37 |
38 | async onload() {
39 | await this.loadSettings();
40 | this.addSettingTab(new DefaultNewTabPageSettingTab(this.app, this));
41 | const { workspace } = this.app;
42 |
43 | workspace.onLayoutReady(() => {
44 | // Get existing leaves (tabs)
45 | const existingLeaves = new WeakSet();
46 | workspace.iterateAllLeaves((leaf) => {
47 | existingLeaves.add(leaf);
48 | });
49 |
50 | // When layout changes, check for new ones
51 | // second arg needs to be arrow-function, so that `this` gets set
52 | // correctly. https://discord.com/channels/686053708261228577/840286264964022302/1016341061641183282
53 | this.registerEvent(
54 | workspace.on("layout-change", () => {
55 | this.checkForNewTab(existingLeaves);
56 | }),
57 | );
58 | });
59 |
60 | console.debug("New Tab Default Page Plugin loaded.");
61 | }
62 |
63 | async loadSettings() {
64 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
65 | }
66 |
67 | async saveSettings() {
68 | await this.saveData(this.settings);
69 | }
70 |
71 | async onunload() {
72 | console.debug("New Tab Default Page Plugin unloaded.");
73 | }
74 |
75 | checkForNewTab(existingLeaves: WeakSet) {
76 | // WeakSet won't hold references, unused leaves are automatically removed
77 | this.app.workspace.iterateAllLeaves((leaf) => {
78 | if (existingLeaves.has(leaf)) return; // only ever check a new leaf once
79 | existingLeaves.add(leaf);
80 |
81 | if (!this.tabIsEmpty(leaf)) return;
82 |
83 | if (this.settings.whatToOpen === "new-tab-page") this.openDefaultPage(leaf);
84 | else this.runCommand(this.settings.whatToOpen, leaf);
85 | });
86 | }
87 |
88 | runCommand(commandId: string, leaf: WorkspaceLeaf) {
89 | const delay = commandId.includes("switcher") ? 200 : 0; // eslint-disable-line no-magic-numbers
90 | setTimeout(() => {
91 | if (!this.tabIsEmpty(leaf)) return;
92 | const commandExists = this.app.commands.executeCommandById(commandId);
93 | const success = commandExists !== false; // INFO on success, commandExists is undefined, otherwise false
94 | if (!success) new Notice("Plugin for the New Tab Page is not enabled.");
95 | }, delay);
96 | }
97 |
98 | tabIsEmpty(leaf: WorkspaceLeaf) {
99 | return !leaf.view || leaf.view.getViewType() === "empty";
100 | }
101 |
102 | // INFO In compatibility mode, we have to check if the view state type of a leaf is
103 | // still empty at the next tick. Other plugins might open a new leaf and change the view state
104 | // after opening the leaf. The layout-change listener is triggered before the state
105 | // might be changed. This might cause this.checkForNewTab to conclude that the view state
106 | // is empty, whilst in fact is only STILL empty but will be overwritten.
107 | // An example of how other plugins might open leafs and change the view state:
108 | // https://github.com/marcusolsson/obsidian-projects/blob/1.16.3/src/main.ts#L207
109 | async leafIsStillEmpty(leaf: WorkspaceLeaf) {
110 | return new Promise((resolve, _reject) => {
111 | process.nextTick(() => {
112 | const viewStateAfterDelay = leaf.getViewState();
113 | resolve(viewStateAfterDelay?.type === "empty");
114 | });
115 | });
116 | }
117 |
118 | async openDefaultPage(leaf: WorkspaceLeaf) {
119 | const newTabPage = this.settings.filePath;
120 | if (!newTabPage) return;
121 |
122 | const tFiletoOpen = this.app.metadataCache.getFirstLinkpathDest(newTabPage, "/"); // `getFirstLinkpathDest` more reliably finds match than `getAbstractFileByPath`, e.g. with missing file extensions
123 | const pathIsValid = Boolean(tFiletoOpen);
124 | if (!pathIsValid) {
125 | new Notice(`${newTabPage} is not a valid path to a note in your vault.`);
126 | return;
127 | }
128 |
129 | // When compatibility mode is enabled, check if leaf is still empty
130 | if (this.settings.compatibilityMode && !(await this.leafIsStillEmpty(leaf))) return;
131 |
132 | await leaf.openFile(tFiletoOpen);
133 | this.setViewMode(leaf, this.settings.mode);
134 | }
135 |
136 | setViewMode(leaf: WorkspaceLeaf, targetMode: string) {
137 | const view = leaf.getViewState();
138 | if (targetMode === "source-mode") {
139 | view.state.mode = "source";
140 | view.state.source = true;
141 | } else if (targetMode === "live-preview") {
142 | view.state.mode = "source";
143 | view.state.source = false;
144 | } else if (targetMode === "reading-mode") {
145 | view.state.mode = "preview";
146 | }
147 | leaf.setViewState(view);
148 | }
149 | }
150 |
--------------------------------------------------------------------------------
/src/settings.ts:
--------------------------------------------------------------------------------
1 | // DOCS https://marcus.se.net/obsidian-plugin-docs/user-interface/settings#register-a-settings-tab
2 | import { App, PluginSettingTab, Setting } from "obsidian";
3 | import defaultNewTabPage from "./main";
4 |
5 | export class DefaultNewTabPageSettingTab extends PluginSettingTab {
6 | plugin: defaultNewTabPage;
7 |
8 | constructor(app: App, plugin: defaultNewTabPage) {
9 | super(app, plugin);
10 | this.plugin = plugin;
11 | }
12 |
13 | display(): void {
14 | const { containerEl } = this;
15 |
16 | containerEl.empty();
17 |
18 | new Setting(containerEl)
19 | .setName("New tab opens…")
20 | .setDesc(
21 | "What to open when a new tab is created. (Except for the new tab page, the respective plugin needs to be enabled.)",
22 | )
23 | .addDropdown((dropdown) => {
24 | dropdown
25 | // INFO: except for the new tab page, the values should be equal to
26 | // the command-id to run
27 | .addOptions({
28 | "new-tab-page": "New Tab Page",
29 | "daily-notes": "Daily Note (Core Plugin)",
30 | "periodic-notes:open-daily-note": "Daily Note (Periodic Notes Plugin)",
31 | "periodic-notes:open-weekly-note": "Weekly Note (Periodic Notes Plugin)",
32 | "periodic-notes:open-monthly-note": "Monthly Note (Periodic Notes Plugin)",
33 | "random-note": "Random Note (Core Plugin)",
34 | "switcher:open": "Quick Switcher (Core Plugin)",
35 | "obsidian-another-quick-switcher:search-command_recent-search":
36 | "Another Quick Switcher",
37 | "darlal-switcher-plus:switcher-plus:open": "Quick Switcher++",
38 | })
39 | .setValue(this.plugin.settings.whatToOpen)
40 | .onChange(async (value) => {
41 | this.plugin.settings.whatToOpen = value;
42 | await this.plugin.saveSettings();
43 | });
44 | });
45 |
46 | new Setting(containerEl)
47 | .setName("Default new tab page")
48 | .setDesc(
49 | "Path of the note that will be opened in new tabs. Images and PDFs also work. Only takes effect when the setting above is 'New Tab Page'.",
50 | )
51 | .addText((text) =>
52 | text
53 | .setPlaceholder("Meta/Homepage.md")
54 | .setValue(this.plugin.settings.filePath)
55 | .onChange(async (value) => {
56 | this.plugin.settings.filePath = value;
57 | await this.plugin.saveSettings();
58 | }),
59 | );
60 |
61 | new Setting(containerEl)
62 | .setName("Mode")
63 | .setDesc("Select the mode in which the default new tab page will be opened.")
64 | .addDropdown((dropdown) => {
65 | dropdown
66 | .addOptions({
67 | "obsidian-default": "Obsidian Default",
68 | "live-preview": "Live Preview",
69 | "reading-mode": "Reading Mode",
70 | "source-mode": "Source Mode",
71 | })
72 | .setValue(this.plugin.settings.mode)
73 | .onChange(async (value) => {
74 | this.plugin.settings.mode = value;
75 | await this.plugin.saveSettings();
76 | });
77 | });
78 |
79 | new Setting(this.containerEl)
80 | .setName("Compatibility mode")
81 | .setDesc(
82 | "Enable compatibility mode for other plugins (e.g. Obsidian Projects) which open new tabs. This introduces minor delays.",
83 | )
84 | .addToggle((toggle) => {
85 | toggle.setValue(this.plugin.settings.compatibilityMode).onChange(async (value) => {
86 | this.plugin.settings.compatibilityMode = value;
87 | await this.plugin.saveSettings();
88 | });
89 | });
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/styles.css:
--------------------------------------------------------------------------------
1 | /* placeholder */
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | // DOCS https://www.typescriptlang.org/tsconfig
2 | //──────────────────────────────────────────────────────────────────────────────
3 |
4 | {
5 | "compilerOptions": {
6 | "baseUrl": ".",
7 | "moduleResolution": "node",
8 | "module": "ESNext",
9 | "target": "ES2022",
10 | "lib": ["DOM", "ES5", "ES6", "ES7", "es2023"],
11 |
12 | // SOURCE strictest tsconfig 2.0.0 https://github.com/tsconfig/bases/blob/main/bases/strictest.json
13 | "strict": true,
14 | "allowUnusedLabels": false,
15 | "allowUnreachableCode": false,
16 | "exactOptionalPropertyTypes": true,
17 | "noFallthroughCasesInSwitch": true,
18 | "noImplicitOverride": true,
19 | "noImplicitReturns": true,
20 | "noUnusedLocals": true,
21 | "noUnusedParameters": true,
22 |
23 | // disabled
24 | "noUncheckedIndexedAccess": false, // *too* strict since it complains about every [0]
25 | "noPropertyAccessFromIndexSignature": false, // not useful https://stackoverflow.com/a/70748402/22114136
26 |
27 | // helpers
28 | "isolatedModules": true,
29 | "esModuleInterop": false, // setting to true causes issues with Obsidian's imported `moment`
30 | "importHelpers": true,
31 | "skipLibCheck": true,
32 | "forceConsistentCasingInFileNames": true
33 | },
34 | "include": ["src/**/*.ts"],
35 |
36 | "$schema": "https://json.schemastore.org/tsconfig"
37 | }
38 |
--------------------------------------------------------------------------------
/versions.json:
--------------------------------------------------------------------------------
1 | {
2 | "0.2.0": "0.16.0",
3 | "0.2.1": "0.16.0",
4 | "0.3.0": "0.16.0",
5 | "0.4.0": "0.16.0",
6 | "0.4.1": "0.16.0",
7 | "0.4.2": "0.16.0",
8 | "0.5.0": "0.16.0",
9 | "0.5.1": "0.16.0",
10 | "0.6.0": "0.16.0",
11 | "0.7.0": "0.16.0",
12 | "0.7.1": "0.16.0",
13 | "0.7.2": "0.16.0",
14 | "0.8.0": "0.16.0",
15 | "0.9.0": "0.16.0",
16 | "0.9.1": "0.16.0",
17 | "0.10.0": "0.16.0",
18 | "0.10.1": "0.16.0",
19 | "0.10.2": "0.16.0",
20 | "0.11.0": "1.0.0",
21 | "0.11.1": "1.0.0",
22 | "0.11.2": "1.0.0",
23 | "0.11.3": "1.0.0",
24 | "0.11.4": "1.0.0",
25 | "0.11.5": "1.0.0",
26 | "0.11.6": "1.0.0",
27 | "0.11.7": "1.0.0",
28 | "0.11.8": "1.0.0",
29 | "0.11.9": "1.0.0"
30 | }
31 |
--------------------------------------------------------------------------------