├── .editorconfig
├── .eslintrc
├── .github
└── workflows
│ └── publish.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── icon.png
├── index.html
├── package.json
├── pnpm-lock.yaml
├── screencast.gif
├── src
└── main.ts
├── tsconfig.json
└── vite.config.ts
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | charset = utf-8
7 | trim_trailing_whitespace = true
8 | insert_final_newline = true
9 |
10 | [*.md]
11 | max_line_length = off
12 | trim_trailing_whitespace = false
13 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "es6": true,
4 | "browser": true
5 | },
6 | "globals": {
7 | "Atomics": "readonly",
8 | "SharedArrayBuffer": "readonly"
9 | },
10 | "parser": "@typescript-eslint/parser",
11 | "parserOptions": {
12 | "ecmaVersion": 2015,
13 | "sourceType": "module"
14 | },
15 | "plugins": [
16 | "@typescript-eslint"
17 | ],
18 | "rules": {
19 | "quotes": [
20 | "warn",
21 | "single",
22 | {
23 | "allowTemplateLiterals": true
24 | }
25 | ],
26 | "arrow-parens": [
27 | "warn",
28 | "as-needed"
29 | ],
30 | "comma-spacing": [
31 | "warn",
32 | {
33 | "after": true
34 | }
35 | ],
36 | "linebreak-style": [
37 | "error",
38 | "unix"
39 | ],
40 | "object-curly-spacing": [
41 | "error",
42 | "always"
43 | ],
44 | "@typescript-eslint/semi": [
45 | "warn"
46 | ]
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Build plugin
2 |
3 | on:
4 | push:
5 | # Sequence of patterns matched against refs/tags
6 | tags:
7 | - "*" # Push events to matching any tag format, i.e. 1.0, 20.15.10
8 |
9 | env:
10 | PLUGIN_NAME: logseq-plugin-comment-block
11 |
12 | jobs:
13 | build:
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - uses: actions/checkout@v4
18 | - name: Use Node.js
19 | uses: actions/setup-node@v4
20 | with:
21 | node-version: "20.x" # You might need to adjust this value to your own version
22 | - name: Build
23 | id: build
24 | run: |
25 | npm install -g pnpm
26 | pnpm install
27 | pnpm build
28 | mv dist ${{ env.PLUGIN_NAME }}
29 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }}
30 | tar -cvzf ${{ env.PLUGIN_NAME }}.tar.gz -C ${{ env.PLUGIN_NAME }} .
31 | ls
32 | echo "::set-output name=tag_name::$(git tag --sort version:refname | tail -n 1)"
33 |
34 | - name: Create Release
35 | uses: ncipollo/release-action@v1
36 | id: create_release
37 | env:
38 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39 | VERSION: ${{ github.ref }}
40 | with:
41 | allowUpdates: true
42 | draft: false
43 | prerelease: false
44 |
45 | - name: Upload zip file
46 | id: upload_zip
47 | uses: actions/upload-release-asset@v1
48 | env:
49 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50 | with:
51 | upload_url: ${{ steps.create_release.outputs.upload_url }}
52 | asset_path: ./${{ env.PLUGIN_NAME }}.zip
53 | asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.zip
54 | asset_content_type: application/zip
55 |
56 | - name: Upload tar.gz file
57 | id: upload_metadata
58 | uses: actions/upload-release-asset@v1
59 | env:
60 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
61 | with:
62 | upload_url: ${{ steps.create_release.outputs.upload_url }}
63 | asset_path: ./${{ env.PLUGIN_NAME }}.tar.gz
64 | asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.tar.gz
65 | asset_content_type: application/json
66 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 |
4 | .vscode/
5 | .DS_Store
6 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## v0.0.9
4 |
5 | - infra: update github action config
6 |
7 | ## v0.0.8
8 |
9 | - infra: upgrade deps.
10 | - feat: add settings "putBlockRefAsChild"
11 |
12 | ## v0.0.7
13 |
14 | - fix: lock file
15 |
16 | ## v0.0.6
17 |
18 | - infra: upgrade deps.
19 | - feat: add comment block embed to children
20 | - fix: comment block can not trigger from parallel panel
21 |
22 | ## v0.0.5
23 |
24 | - fix: adjust short cut from `mod+shift+c` to `mod+shift+i`
25 |
26 | ## v0.0.4
27 |
28 | - infra: build tool changed from Webpack to Vite
29 | - infra: add Github Action
30 | - feat: add shortcut support, which is bound to `mod+shift+c` #4
31 |
32 | ## v0.0.3
33 |
34 | - Add screencast for README.
35 | - Cleanup code.
36 |
37 | ## v0.0.2
38 |
39 | - Rename command context menu to `Comment block`.
40 | - Fix: comment block can not be created.
41 | - Fix: can not reuse first empty block.
42 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021
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 | # Logseq Comment Block
2 |
3 | [](https://github.com/vipzhicheng/logseq-plugin-comment-block/releases)
4 |
5 | For building an automatic comment history for Logseq! You can comment any block and show the connected history on journal page, current page, block ref sidebar and "Comments" page.
6 |
7 | So, it should be a workflow of Logseq powered by plugin.
8 |
9 | 
10 |
11 | ## Inspiration and Thanks
12 |
13 | The inspiration of this plugin comes from [our community](https://discord.com/channels/725182569297215569/915076465027055656/915226549857435709) by Bailey Jennings, and likely borrowed from Roam.
14 |
15 | ## Why need this
16 |
17 | If you have a long term plan/job/task, you may need to write down something about it day by day, use this way, you can keep your todo list clean and the progress connected.
18 |
19 | Also Bailey made a demo video on Youtube
20 |
21 | [](https://www.youtube.com/watch?v=TPP2ejiuk-g)
22 |
23 | ## Installation
24 |
25 | ### Preparation
26 |
27 | - Click the 3 dots in the righthand corner and go to `Settings`.
28 | - Got to advanced and enable Developer mode.
29 | - Restart the app.
30 | - Click 3 dots and go to `Plugins`.
31 |
32 | ### Install plugins from Marketplace (recommended)
33 |
34 | - Click `Marketplace` button and then click `Plugins`.
35 | - Find the plugin and click `Install`.
36 |
37 | ### Install plugins manually
38 |
39 | - Download released version assets from Github.
40 | - Unzip it.
41 | - Click `Load unpacked plugin`, and select destination directory to the unziped folder.
42 |
43 | ## Usage
44 |
45 | - Trigger `Comment block` from block contextual menu.
46 | - Trigger `/Comment block` from block slash commands.
47 | - Trigger by shortcut `mod+shift+i`, mod means `command` on Mac and means `ctrl` on Windows.
48 |
49 | ## Settings
50 |
51 | - `putBlockRefAsChild': That means everytime you trigger a comment, it will insert a new block and add commented block ref as child. If you disable this, it will insert a new block as the child of commented block ref. Use this with CAUTION, because the embed feature will not work and it can not reuse the block ref if you trigger comment again.
52 |
53 | ## CAUTION
54 |
55 | If you change the `Preferred date format` on Settings page, you will lose your connections between journal and comments.
56 |
57 | ## ❤️ Buy me a coffee
58 |
59 | If you like this plugin and you will, you can choose to buy me a coffee via [this](https://www.buymeacoffee.com/vipzhicheng) and [this](https://afdian.net/@vipzhicheng), that means a lot to me.
60 |
61 | ## Licence
62 |
63 | MIT
64 |
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vipzhicheng/logseq-plugin-comment-block/8da0b723c2ec4660d2136a6aed213aa022d03113/icon.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Comment block
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "logseq-plugin-comment-block",
3 | "version": "0.0.9",
4 | "license": "MIT",
5 | "main": "index.html",
6 | "logseq": {
7 | "icon": "./icon.png",
8 | "title": "Comment Block",
9 | "id": "logseq-plugin-comment-block"
10 | },
11 | "scripts": {
12 | "build": "vite build && cp LICENSE README.md icon.png package.json ./dist/"
13 | },
14 | "devDependencies": {
15 | "@types/node": "^22.14.0",
16 | "@typescript-eslint/eslint-plugin": "^8.29.0",
17 | "@typescript-eslint/parser": "^8.29.0",
18 | "eslint": "^9.23.0",
19 | "typescript": "^5.8.2",
20 | "vite": "^6.2.5"
21 | },
22 | "dependencies": {
23 | "@logseq/libs": "0.0.17",
24 | "date-fns": "^4.1.0"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@logseq/libs':
9 | specifier: 0.0.17
10 | version: 0.0.17
11 | date-fns:
12 | specifier: ^4.1.0
13 | version: 4.1.0
14 |
15 | devDependencies:
16 | '@types/node':
17 | specifier: ^22.14.0
18 | version: 22.14.0
19 | '@typescript-eslint/eslint-plugin':
20 | specifier: ^8.29.0
21 | version: 8.29.0(@typescript-eslint/parser@8.29.0)(eslint@9.23.0)(typescript@5.8.2)
22 | '@typescript-eslint/parser':
23 | specifier: ^8.29.0
24 | version: 8.29.0(eslint@9.23.0)(typescript@5.8.2)
25 | eslint:
26 | specifier: ^9.23.0
27 | version: 9.23.0
28 | typescript:
29 | specifier: ^5.8.2
30 | version: 5.8.2
31 | vite:
32 | specifier: ^6.2.5
33 | version: 6.2.5(@types/node@22.14.0)
34 |
35 | packages:
36 |
37 | /@esbuild/aix-ppc64@0.25.2:
38 | resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==}
39 | engines: {node: '>=18'}
40 | cpu: [ppc64]
41 | os: [aix]
42 | requiresBuild: true
43 | dev: true
44 | optional: true
45 |
46 | /@esbuild/android-arm64@0.25.2:
47 | resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==}
48 | engines: {node: '>=18'}
49 | cpu: [arm64]
50 | os: [android]
51 | requiresBuild: true
52 | dev: true
53 | optional: true
54 |
55 | /@esbuild/android-arm@0.25.2:
56 | resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==}
57 | engines: {node: '>=18'}
58 | cpu: [arm]
59 | os: [android]
60 | requiresBuild: true
61 | dev: true
62 | optional: true
63 |
64 | /@esbuild/android-x64@0.25.2:
65 | resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==}
66 | engines: {node: '>=18'}
67 | cpu: [x64]
68 | os: [android]
69 | requiresBuild: true
70 | dev: true
71 | optional: true
72 |
73 | /@esbuild/darwin-arm64@0.25.2:
74 | resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==}
75 | engines: {node: '>=18'}
76 | cpu: [arm64]
77 | os: [darwin]
78 | requiresBuild: true
79 | dev: true
80 | optional: true
81 |
82 | /@esbuild/darwin-x64@0.25.2:
83 | resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==}
84 | engines: {node: '>=18'}
85 | cpu: [x64]
86 | os: [darwin]
87 | requiresBuild: true
88 | dev: true
89 | optional: true
90 |
91 | /@esbuild/freebsd-arm64@0.25.2:
92 | resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==}
93 | engines: {node: '>=18'}
94 | cpu: [arm64]
95 | os: [freebsd]
96 | requiresBuild: true
97 | dev: true
98 | optional: true
99 |
100 | /@esbuild/freebsd-x64@0.25.2:
101 | resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==}
102 | engines: {node: '>=18'}
103 | cpu: [x64]
104 | os: [freebsd]
105 | requiresBuild: true
106 | dev: true
107 | optional: true
108 |
109 | /@esbuild/linux-arm64@0.25.2:
110 | resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==}
111 | engines: {node: '>=18'}
112 | cpu: [arm64]
113 | os: [linux]
114 | requiresBuild: true
115 | dev: true
116 | optional: true
117 |
118 | /@esbuild/linux-arm@0.25.2:
119 | resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==}
120 | engines: {node: '>=18'}
121 | cpu: [arm]
122 | os: [linux]
123 | requiresBuild: true
124 | dev: true
125 | optional: true
126 |
127 | /@esbuild/linux-ia32@0.25.2:
128 | resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==}
129 | engines: {node: '>=18'}
130 | cpu: [ia32]
131 | os: [linux]
132 | requiresBuild: true
133 | dev: true
134 | optional: true
135 |
136 | /@esbuild/linux-loong64@0.25.2:
137 | resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==}
138 | engines: {node: '>=18'}
139 | cpu: [loong64]
140 | os: [linux]
141 | requiresBuild: true
142 | dev: true
143 | optional: true
144 |
145 | /@esbuild/linux-mips64el@0.25.2:
146 | resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==}
147 | engines: {node: '>=18'}
148 | cpu: [mips64el]
149 | os: [linux]
150 | requiresBuild: true
151 | dev: true
152 | optional: true
153 |
154 | /@esbuild/linux-ppc64@0.25.2:
155 | resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==}
156 | engines: {node: '>=18'}
157 | cpu: [ppc64]
158 | os: [linux]
159 | requiresBuild: true
160 | dev: true
161 | optional: true
162 |
163 | /@esbuild/linux-riscv64@0.25.2:
164 | resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==}
165 | engines: {node: '>=18'}
166 | cpu: [riscv64]
167 | os: [linux]
168 | requiresBuild: true
169 | dev: true
170 | optional: true
171 |
172 | /@esbuild/linux-s390x@0.25.2:
173 | resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==}
174 | engines: {node: '>=18'}
175 | cpu: [s390x]
176 | os: [linux]
177 | requiresBuild: true
178 | dev: true
179 | optional: true
180 |
181 | /@esbuild/linux-x64@0.25.2:
182 | resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==}
183 | engines: {node: '>=18'}
184 | cpu: [x64]
185 | os: [linux]
186 | requiresBuild: true
187 | dev: true
188 | optional: true
189 |
190 | /@esbuild/netbsd-arm64@0.25.2:
191 | resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==}
192 | engines: {node: '>=18'}
193 | cpu: [arm64]
194 | os: [netbsd]
195 | requiresBuild: true
196 | dev: true
197 | optional: true
198 |
199 | /@esbuild/netbsd-x64@0.25.2:
200 | resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==}
201 | engines: {node: '>=18'}
202 | cpu: [x64]
203 | os: [netbsd]
204 | requiresBuild: true
205 | dev: true
206 | optional: true
207 |
208 | /@esbuild/openbsd-arm64@0.25.2:
209 | resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==}
210 | engines: {node: '>=18'}
211 | cpu: [arm64]
212 | os: [openbsd]
213 | requiresBuild: true
214 | dev: true
215 | optional: true
216 |
217 | /@esbuild/openbsd-x64@0.25.2:
218 | resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==}
219 | engines: {node: '>=18'}
220 | cpu: [x64]
221 | os: [openbsd]
222 | requiresBuild: true
223 | dev: true
224 | optional: true
225 |
226 | /@esbuild/sunos-x64@0.25.2:
227 | resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==}
228 | engines: {node: '>=18'}
229 | cpu: [x64]
230 | os: [sunos]
231 | requiresBuild: true
232 | dev: true
233 | optional: true
234 |
235 | /@esbuild/win32-arm64@0.25.2:
236 | resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==}
237 | engines: {node: '>=18'}
238 | cpu: [arm64]
239 | os: [win32]
240 | requiresBuild: true
241 | dev: true
242 | optional: true
243 |
244 | /@esbuild/win32-ia32@0.25.2:
245 | resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==}
246 | engines: {node: '>=18'}
247 | cpu: [ia32]
248 | os: [win32]
249 | requiresBuild: true
250 | dev: true
251 | optional: true
252 |
253 | /@esbuild/win32-x64@0.25.2:
254 | resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==}
255 | engines: {node: '>=18'}
256 | cpu: [x64]
257 | os: [win32]
258 | requiresBuild: true
259 | dev: true
260 | optional: true
261 |
262 | /@eslint-community/eslint-utils@4.5.1(eslint@9.23.0):
263 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
264 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
265 | peerDependencies:
266 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
267 | dependencies:
268 | eslint: 9.23.0
269 | eslint-visitor-keys: 3.4.3
270 | dev: true
271 |
272 | /@eslint-community/regexpp@4.12.1:
273 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
274 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
275 | dev: true
276 |
277 | /@eslint/config-array@0.19.2:
278 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
279 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
280 | dependencies:
281 | '@eslint/object-schema': 2.1.6
282 | debug: 4.4.0
283 | minimatch: 3.1.2
284 | transitivePeerDependencies:
285 | - supports-color
286 | dev: true
287 |
288 | /@eslint/config-helpers@0.2.1:
289 | resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==}
290 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
291 | dev: true
292 |
293 | /@eslint/core@0.12.0:
294 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
295 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
296 | dependencies:
297 | '@types/json-schema': 7.0.15
298 | dev: true
299 |
300 | /@eslint/core@0.13.0:
301 | resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
302 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
303 | dependencies:
304 | '@types/json-schema': 7.0.15
305 | dev: true
306 |
307 | /@eslint/eslintrc@3.3.1:
308 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
309 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
310 | dependencies:
311 | ajv: 6.12.6
312 | debug: 4.4.0
313 | espree: 10.3.0
314 | globals: 14.0.0
315 | ignore: 5.3.2
316 | import-fresh: 3.3.1
317 | js-yaml: 4.1.0
318 | minimatch: 3.1.2
319 | strip-json-comments: 3.1.1
320 | transitivePeerDependencies:
321 | - supports-color
322 | dev: true
323 |
324 | /@eslint/js@9.23.0:
325 | resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==}
326 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
327 | dev: true
328 |
329 | /@eslint/object-schema@2.1.6:
330 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
331 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
332 | dev: true
333 |
334 | /@eslint/plugin-kit@0.2.8:
335 | resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
336 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
337 | dependencies:
338 | '@eslint/core': 0.13.0
339 | levn: 0.4.1
340 | dev: true
341 |
342 | /@humanfs/core@0.19.1:
343 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
344 | engines: {node: '>=18.18.0'}
345 | dev: true
346 |
347 | /@humanfs/node@0.16.6:
348 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
349 | engines: {node: '>=18.18.0'}
350 | dependencies:
351 | '@humanfs/core': 0.19.1
352 | '@humanwhocodes/retry': 0.3.1
353 | dev: true
354 |
355 | /@humanwhocodes/module-importer@1.0.1:
356 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
357 | engines: {node: '>=12.22'}
358 | dev: true
359 |
360 | /@humanwhocodes/retry@0.3.1:
361 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
362 | engines: {node: '>=18.18'}
363 | dev: true
364 |
365 | /@humanwhocodes/retry@0.4.2:
366 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
367 | engines: {node: '>=18.18'}
368 | dev: true
369 |
370 | /@logseq/libs@0.0.17:
371 | resolution: {integrity: sha512-SkzzAaocmrgeHYrCOaRyEqzPOxw3d0qVEZSrt9qVvXE4tuEgbvEHR8tzI1N5RjgAv+PDWuGPiP7/mhcXHpINEw==}
372 | dependencies:
373 | csstype: 3.1.0
374 | debug: 4.3.4
375 | deepmerge: 4.3.1
376 | dompurify: 2.3.8
377 | eventemitter3: 4.0.7
378 | fast-deep-equal: 3.1.3
379 | lodash-es: 4.17.21
380 | path: 0.12.7
381 | snake-case: 3.0.4
382 | transitivePeerDependencies:
383 | - supports-color
384 | dev: false
385 |
386 | /@nodelib/fs.scandir@2.1.5:
387 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
388 | engines: {node: '>= 8'}
389 | dependencies:
390 | '@nodelib/fs.stat': 2.0.5
391 | run-parallel: 1.2.0
392 | dev: true
393 |
394 | /@nodelib/fs.stat@2.0.5:
395 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
396 | engines: {node: '>= 8'}
397 | dev: true
398 |
399 | /@nodelib/fs.walk@1.2.8:
400 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
401 | engines: {node: '>= 8'}
402 | dependencies:
403 | '@nodelib/fs.scandir': 2.1.5
404 | fastq: 1.19.1
405 | dev: true
406 |
407 | /@rollup/rollup-android-arm-eabi@4.39.0:
408 | resolution: {integrity: sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==}
409 | cpu: [arm]
410 | os: [android]
411 | requiresBuild: true
412 | dev: true
413 | optional: true
414 |
415 | /@rollup/rollup-android-arm64@4.39.0:
416 | resolution: {integrity: sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==}
417 | cpu: [arm64]
418 | os: [android]
419 | requiresBuild: true
420 | dev: true
421 | optional: true
422 |
423 | /@rollup/rollup-darwin-arm64@4.39.0:
424 | resolution: {integrity: sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==}
425 | cpu: [arm64]
426 | os: [darwin]
427 | requiresBuild: true
428 | dev: true
429 | optional: true
430 |
431 | /@rollup/rollup-darwin-x64@4.39.0:
432 | resolution: {integrity: sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==}
433 | cpu: [x64]
434 | os: [darwin]
435 | requiresBuild: true
436 | dev: true
437 | optional: true
438 |
439 | /@rollup/rollup-freebsd-arm64@4.39.0:
440 | resolution: {integrity: sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==}
441 | cpu: [arm64]
442 | os: [freebsd]
443 | requiresBuild: true
444 | dev: true
445 | optional: true
446 |
447 | /@rollup/rollup-freebsd-x64@4.39.0:
448 | resolution: {integrity: sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==}
449 | cpu: [x64]
450 | os: [freebsd]
451 | requiresBuild: true
452 | dev: true
453 | optional: true
454 |
455 | /@rollup/rollup-linux-arm-gnueabihf@4.39.0:
456 | resolution: {integrity: sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==}
457 | cpu: [arm]
458 | os: [linux]
459 | libc: [glibc]
460 | requiresBuild: true
461 | dev: true
462 | optional: true
463 |
464 | /@rollup/rollup-linux-arm-musleabihf@4.39.0:
465 | resolution: {integrity: sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==}
466 | cpu: [arm]
467 | os: [linux]
468 | libc: [musl]
469 | requiresBuild: true
470 | dev: true
471 | optional: true
472 |
473 | /@rollup/rollup-linux-arm64-gnu@4.39.0:
474 | resolution: {integrity: sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==}
475 | cpu: [arm64]
476 | os: [linux]
477 | libc: [glibc]
478 | requiresBuild: true
479 | dev: true
480 | optional: true
481 |
482 | /@rollup/rollup-linux-arm64-musl@4.39.0:
483 | resolution: {integrity: sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==}
484 | cpu: [arm64]
485 | os: [linux]
486 | libc: [musl]
487 | requiresBuild: true
488 | dev: true
489 | optional: true
490 |
491 | /@rollup/rollup-linux-loongarch64-gnu@4.39.0:
492 | resolution: {integrity: sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==}
493 | cpu: [loong64]
494 | os: [linux]
495 | libc: [glibc]
496 | requiresBuild: true
497 | dev: true
498 | optional: true
499 |
500 | /@rollup/rollup-linux-powerpc64le-gnu@4.39.0:
501 | resolution: {integrity: sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==}
502 | cpu: [ppc64]
503 | os: [linux]
504 | libc: [glibc]
505 | requiresBuild: true
506 | dev: true
507 | optional: true
508 |
509 | /@rollup/rollup-linux-riscv64-gnu@4.39.0:
510 | resolution: {integrity: sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==}
511 | cpu: [riscv64]
512 | os: [linux]
513 | libc: [glibc]
514 | requiresBuild: true
515 | dev: true
516 | optional: true
517 |
518 | /@rollup/rollup-linux-riscv64-musl@4.39.0:
519 | resolution: {integrity: sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==}
520 | cpu: [riscv64]
521 | os: [linux]
522 | libc: [musl]
523 | requiresBuild: true
524 | dev: true
525 | optional: true
526 |
527 | /@rollup/rollup-linux-s390x-gnu@4.39.0:
528 | resolution: {integrity: sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==}
529 | cpu: [s390x]
530 | os: [linux]
531 | libc: [glibc]
532 | requiresBuild: true
533 | dev: true
534 | optional: true
535 |
536 | /@rollup/rollup-linux-x64-gnu@4.39.0:
537 | resolution: {integrity: sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==}
538 | cpu: [x64]
539 | os: [linux]
540 | libc: [glibc]
541 | requiresBuild: true
542 | dev: true
543 | optional: true
544 |
545 | /@rollup/rollup-linux-x64-musl@4.39.0:
546 | resolution: {integrity: sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==}
547 | cpu: [x64]
548 | os: [linux]
549 | libc: [musl]
550 | requiresBuild: true
551 | dev: true
552 | optional: true
553 |
554 | /@rollup/rollup-win32-arm64-msvc@4.39.0:
555 | resolution: {integrity: sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==}
556 | cpu: [arm64]
557 | os: [win32]
558 | requiresBuild: true
559 | dev: true
560 | optional: true
561 |
562 | /@rollup/rollup-win32-ia32-msvc@4.39.0:
563 | resolution: {integrity: sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==}
564 | cpu: [ia32]
565 | os: [win32]
566 | requiresBuild: true
567 | dev: true
568 | optional: true
569 |
570 | /@rollup/rollup-win32-x64-msvc@4.39.0:
571 | resolution: {integrity: sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==}
572 | cpu: [x64]
573 | os: [win32]
574 | requiresBuild: true
575 | dev: true
576 | optional: true
577 |
578 | /@types/estree@1.0.7:
579 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
580 | dev: true
581 |
582 | /@types/json-schema@7.0.15:
583 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
584 | dev: true
585 |
586 | /@types/node@22.14.0:
587 | resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==}
588 | dependencies:
589 | undici-types: 6.21.0
590 | dev: true
591 |
592 | /@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0)(eslint@9.23.0)(typescript@5.8.2):
593 | resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==}
594 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
595 | peerDependencies:
596 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
597 | eslint: ^8.57.0 || ^9.0.0
598 | typescript: '>=4.8.4 <5.9.0'
599 | dependencies:
600 | '@eslint-community/regexpp': 4.12.1
601 | '@typescript-eslint/parser': 8.29.0(eslint@9.23.0)(typescript@5.8.2)
602 | '@typescript-eslint/scope-manager': 8.29.0
603 | '@typescript-eslint/type-utils': 8.29.0(eslint@9.23.0)(typescript@5.8.2)
604 | '@typescript-eslint/utils': 8.29.0(eslint@9.23.0)(typescript@5.8.2)
605 | '@typescript-eslint/visitor-keys': 8.29.0
606 | eslint: 9.23.0
607 | graphemer: 1.4.0
608 | ignore: 5.3.2
609 | natural-compare: 1.4.0
610 | ts-api-utils: 2.1.0(typescript@5.8.2)
611 | typescript: 5.8.2
612 | transitivePeerDependencies:
613 | - supports-color
614 | dev: true
615 |
616 | /@typescript-eslint/parser@8.29.0(eslint@9.23.0)(typescript@5.8.2):
617 | resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==}
618 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
619 | peerDependencies:
620 | eslint: ^8.57.0 || ^9.0.0
621 | typescript: '>=4.8.4 <5.9.0'
622 | dependencies:
623 | '@typescript-eslint/scope-manager': 8.29.0
624 | '@typescript-eslint/types': 8.29.0
625 | '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2)
626 | '@typescript-eslint/visitor-keys': 8.29.0
627 | debug: 4.4.0
628 | eslint: 9.23.0
629 | typescript: 5.8.2
630 | transitivePeerDependencies:
631 | - supports-color
632 | dev: true
633 |
634 | /@typescript-eslint/scope-manager@8.29.0:
635 | resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==}
636 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
637 | dependencies:
638 | '@typescript-eslint/types': 8.29.0
639 | '@typescript-eslint/visitor-keys': 8.29.0
640 | dev: true
641 |
642 | /@typescript-eslint/type-utils@8.29.0(eslint@9.23.0)(typescript@5.8.2):
643 | resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==}
644 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
645 | peerDependencies:
646 | eslint: ^8.57.0 || ^9.0.0
647 | typescript: '>=4.8.4 <5.9.0'
648 | dependencies:
649 | '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2)
650 | '@typescript-eslint/utils': 8.29.0(eslint@9.23.0)(typescript@5.8.2)
651 | debug: 4.4.0
652 | eslint: 9.23.0
653 | ts-api-utils: 2.1.0(typescript@5.8.2)
654 | typescript: 5.8.2
655 | transitivePeerDependencies:
656 | - supports-color
657 | dev: true
658 |
659 | /@typescript-eslint/types@8.29.0:
660 | resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==}
661 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
662 | dev: true
663 |
664 | /@typescript-eslint/typescript-estree@8.29.0(typescript@5.8.2):
665 | resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==}
666 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
667 | peerDependencies:
668 | typescript: '>=4.8.4 <5.9.0'
669 | dependencies:
670 | '@typescript-eslint/types': 8.29.0
671 | '@typescript-eslint/visitor-keys': 8.29.0
672 | debug: 4.4.0
673 | fast-glob: 3.3.3
674 | is-glob: 4.0.3
675 | minimatch: 9.0.5
676 | semver: 7.7.1
677 | ts-api-utils: 2.1.0(typescript@5.8.2)
678 | typescript: 5.8.2
679 | transitivePeerDependencies:
680 | - supports-color
681 | dev: true
682 |
683 | /@typescript-eslint/utils@8.29.0(eslint@9.23.0)(typescript@5.8.2):
684 | resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==}
685 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
686 | peerDependencies:
687 | eslint: ^8.57.0 || ^9.0.0
688 | typescript: '>=4.8.4 <5.9.0'
689 | dependencies:
690 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0)
691 | '@typescript-eslint/scope-manager': 8.29.0
692 | '@typescript-eslint/types': 8.29.0
693 | '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2)
694 | eslint: 9.23.0
695 | typescript: 5.8.2
696 | transitivePeerDependencies:
697 | - supports-color
698 | dev: true
699 |
700 | /@typescript-eslint/visitor-keys@8.29.0:
701 | resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==}
702 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
703 | dependencies:
704 | '@typescript-eslint/types': 8.29.0
705 | eslint-visitor-keys: 4.2.0
706 | dev: true
707 |
708 | /acorn-jsx@5.3.2(acorn@8.14.1):
709 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
710 | peerDependencies:
711 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
712 | dependencies:
713 | acorn: 8.14.1
714 | dev: true
715 |
716 | /acorn@8.14.1:
717 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
718 | engines: {node: '>=0.4.0'}
719 | hasBin: true
720 | dev: true
721 |
722 | /ajv@6.12.6:
723 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
724 | dependencies:
725 | fast-deep-equal: 3.1.3
726 | fast-json-stable-stringify: 2.1.0
727 | json-schema-traverse: 0.4.1
728 | uri-js: 4.4.1
729 | dev: true
730 |
731 | /ansi-styles@4.3.0:
732 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
733 | engines: {node: '>=8'}
734 | dependencies:
735 | color-convert: 2.0.1
736 | dev: true
737 |
738 | /argparse@2.0.1:
739 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
740 | dev: true
741 |
742 | /balanced-match@1.0.2:
743 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
744 | dev: true
745 |
746 | /brace-expansion@1.1.11:
747 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
748 | dependencies:
749 | balanced-match: 1.0.2
750 | concat-map: 0.0.1
751 | dev: true
752 |
753 | /brace-expansion@2.0.1:
754 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
755 | dependencies:
756 | balanced-match: 1.0.2
757 | dev: true
758 |
759 | /braces@3.0.3:
760 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
761 | engines: {node: '>=8'}
762 | dependencies:
763 | fill-range: 7.1.1
764 | dev: true
765 |
766 | /callsites@3.1.0:
767 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
768 | engines: {node: '>=6'}
769 | dev: true
770 |
771 | /chalk@4.1.2:
772 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
773 | engines: {node: '>=10'}
774 | dependencies:
775 | ansi-styles: 4.3.0
776 | supports-color: 7.2.0
777 | dev: true
778 |
779 | /color-convert@2.0.1:
780 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
781 | engines: {node: '>=7.0.0'}
782 | dependencies:
783 | color-name: 1.1.4
784 | dev: true
785 |
786 | /color-name@1.1.4:
787 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
788 | dev: true
789 |
790 | /concat-map@0.0.1:
791 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
792 | dev: true
793 |
794 | /cross-spawn@7.0.6:
795 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
796 | engines: {node: '>= 8'}
797 | dependencies:
798 | path-key: 3.1.1
799 | shebang-command: 2.0.0
800 | which: 2.0.2
801 | dev: true
802 |
803 | /csstype@3.1.0:
804 | resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==}
805 | dev: false
806 |
807 | /date-fns@4.1.0:
808 | resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
809 | dev: false
810 |
811 | /debug@4.3.4:
812 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
813 | engines: {node: '>=6.0'}
814 | peerDependencies:
815 | supports-color: '*'
816 | peerDependenciesMeta:
817 | supports-color:
818 | optional: true
819 | dependencies:
820 | ms: 2.1.2
821 | dev: false
822 |
823 | /debug@4.4.0:
824 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
825 | engines: {node: '>=6.0'}
826 | peerDependencies:
827 | supports-color: '*'
828 | peerDependenciesMeta:
829 | supports-color:
830 | optional: true
831 | dependencies:
832 | ms: 2.1.3
833 | dev: true
834 |
835 | /deep-is@0.1.4:
836 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
837 | dev: true
838 |
839 | /deepmerge@4.3.1:
840 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
841 | engines: {node: '>=0.10.0'}
842 | dev: false
843 |
844 | /dompurify@2.3.8:
845 | resolution: {integrity: sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==}
846 | dev: false
847 |
848 | /dot-case@3.0.4:
849 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
850 | dependencies:
851 | no-case: 3.0.4
852 | tslib: 2.8.1
853 | dev: false
854 |
855 | /esbuild@0.25.2:
856 | resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==}
857 | engines: {node: '>=18'}
858 | hasBin: true
859 | requiresBuild: true
860 | optionalDependencies:
861 | '@esbuild/aix-ppc64': 0.25.2
862 | '@esbuild/android-arm': 0.25.2
863 | '@esbuild/android-arm64': 0.25.2
864 | '@esbuild/android-x64': 0.25.2
865 | '@esbuild/darwin-arm64': 0.25.2
866 | '@esbuild/darwin-x64': 0.25.2
867 | '@esbuild/freebsd-arm64': 0.25.2
868 | '@esbuild/freebsd-x64': 0.25.2
869 | '@esbuild/linux-arm': 0.25.2
870 | '@esbuild/linux-arm64': 0.25.2
871 | '@esbuild/linux-ia32': 0.25.2
872 | '@esbuild/linux-loong64': 0.25.2
873 | '@esbuild/linux-mips64el': 0.25.2
874 | '@esbuild/linux-ppc64': 0.25.2
875 | '@esbuild/linux-riscv64': 0.25.2
876 | '@esbuild/linux-s390x': 0.25.2
877 | '@esbuild/linux-x64': 0.25.2
878 | '@esbuild/netbsd-arm64': 0.25.2
879 | '@esbuild/netbsd-x64': 0.25.2
880 | '@esbuild/openbsd-arm64': 0.25.2
881 | '@esbuild/openbsd-x64': 0.25.2
882 | '@esbuild/sunos-x64': 0.25.2
883 | '@esbuild/win32-arm64': 0.25.2
884 | '@esbuild/win32-ia32': 0.25.2
885 | '@esbuild/win32-x64': 0.25.2
886 | dev: true
887 |
888 | /escape-string-regexp@4.0.0:
889 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
890 | engines: {node: '>=10'}
891 | dev: true
892 |
893 | /eslint-scope@8.3.0:
894 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
895 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
896 | dependencies:
897 | esrecurse: 4.3.0
898 | estraverse: 5.3.0
899 | dev: true
900 |
901 | /eslint-visitor-keys@3.4.3:
902 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
903 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
904 | dev: true
905 |
906 | /eslint-visitor-keys@4.2.0:
907 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
908 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
909 | dev: true
910 |
911 | /eslint@9.23.0:
912 | resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==}
913 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
914 | hasBin: true
915 | peerDependencies:
916 | jiti: '*'
917 | peerDependenciesMeta:
918 | jiti:
919 | optional: true
920 | dependencies:
921 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0)
922 | '@eslint-community/regexpp': 4.12.1
923 | '@eslint/config-array': 0.19.2
924 | '@eslint/config-helpers': 0.2.1
925 | '@eslint/core': 0.12.0
926 | '@eslint/eslintrc': 3.3.1
927 | '@eslint/js': 9.23.0
928 | '@eslint/plugin-kit': 0.2.8
929 | '@humanfs/node': 0.16.6
930 | '@humanwhocodes/module-importer': 1.0.1
931 | '@humanwhocodes/retry': 0.4.2
932 | '@types/estree': 1.0.7
933 | '@types/json-schema': 7.0.15
934 | ajv: 6.12.6
935 | chalk: 4.1.2
936 | cross-spawn: 7.0.6
937 | debug: 4.4.0
938 | escape-string-regexp: 4.0.0
939 | eslint-scope: 8.3.0
940 | eslint-visitor-keys: 4.2.0
941 | espree: 10.3.0
942 | esquery: 1.6.0
943 | esutils: 2.0.3
944 | fast-deep-equal: 3.1.3
945 | file-entry-cache: 8.0.0
946 | find-up: 5.0.0
947 | glob-parent: 6.0.2
948 | ignore: 5.3.2
949 | imurmurhash: 0.1.4
950 | is-glob: 4.0.3
951 | json-stable-stringify-without-jsonify: 1.0.1
952 | lodash.merge: 4.6.2
953 | minimatch: 3.1.2
954 | natural-compare: 1.4.0
955 | optionator: 0.9.4
956 | transitivePeerDependencies:
957 | - supports-color
958 | dev: true
959 |
960 | /espree@10.3.0:
961 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
962 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
963 | dependencies:
964 | acorn: 8.14.1
965 | acorn-jsx: 5.3.2(acorn@8.14.1)
966 | eslint-visitor-keys: 4.2.0
967 | dev: true
968 |
969 | /esquery@1.6.0:
970 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
971 | engines: {node: '>=0.10'}
972 | dependencies:
973 | estraverse: 5.3.0
974 | dev: true
975 |
976 | /esrecurse@4.3.0:
977 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
978 | engines: {node: '>=4.0'}
979 | dependencies:
980 | estraverse: 5.3.0
981 | dev: true
982 |
983 | /estraverse@5.3.0:
984 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
985 | engines: {node: '>=4.0'}
986 | dev: true
987 |
988 | /esutils@2.0.3:
989 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
990 | engines: {node: '>=0.10.0'}
991 | dev: true
992 |
993 | /eventemitter3@4.0.7:
994 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
995 | dev: false
996 |
997 | /fast-deep-equal@3.1.3:
998 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
999 |
1000 | /fast-glob@3.3.3:
1001 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
1002 | engines: {node: '>=8.6.0'}
1003 | dependencies:
1004 | '@nodelib/fs.stat': 2.0.5
1005 | '@nodelib/fs.walk': 1.2.8
1006 | glob-parent: 5.1.2
1007 | merge2: 1.4.1
1008 | micromatch: 4.0.8
1009 | dev: true
1010 |
1011 | /fast-json-stable-stringify@2.1.0:
1012 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1013 | dev: true
1014 |
1015 | /fast-levenshtein@2.0.6:
1016 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1017 | dev: true
1018 |
1019 | /fastq@1.19.1:
1020 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
1021 | dependencies:
1022 | reusify: 1.1.0
1023 | dev: true
1024 |
1025 | /file-entry-cache@8.0.0:
1026 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
1027 | engines: {node: '>=16.0.0'}
1028 | dependencies:
1029 | flat-cache: 4.0.1
1030 | dev: true
1031 |
1032 | /fill-range@7.1.1:
1033 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1034 | engines: {node: '>=8'}
1035 | dependencies:
1036 | to-regex-range: 5.0.1
1037 | dev: true
1038 |
1039 | /find-up@5.0.0:
1040 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1041 | engines: {node: '>=10'}
1042 | dependencies:
1043 | locate-path: 6.0.0
1044 | path-exists: 4.0.0
1045 | dev: true
1046 |
1047 | /flat-cache@4.0.1:
1048 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
1049 | engines: {node: '>=16'}
1050 | dependencies:
1051 | flatted: 3.3.3
1052 | keyv: 4.5.4
1053 | dev: true
1054 |
1055 | /flatted@3.3.3:
1056 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
1057 | dev: true
1058 |
1059 | /fsevents@2.3.3:
1060 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1061 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1062 | os: [darwin]
1063 | requiresBuild: true
1064 | dev: true
1065 | optional: true
1066 |
1067 | /glob-parent@5.1.2:
1068 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1069 | engines: {node: '>= 6'}
1070 | dependencies:
1071 | is-glob: 4.0.3
1072 | dev: true
1073 |
1074 | /glob-parent@6.0.2:
1075 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1076 | engines: {node: '>=10.13.0'}
1077 | dependencies:
1078 | is-glob: 4.0.3
1079 | dev: true
1080 |
1081 | /globals@14.0.0:
1082 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
1083 | engines: {node: '>=18'}
1084 | dev: true
1085 |
1086 | /graphemer@1.4.0:
1087 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
1088 | dev: true
1089 |
1090 | /has-flag@4.0.0:
1091 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1092 | engines: {node: '>=8'}
1093 | dev: true
1094 |
1095 | /ignore@5.3.2:
1096 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1097 | engines: {node: '>= 4'}
1098 | dev: true
1099 |
1100 | /import-fresh@3.3.1:
1101 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
1102 | engines: {node: '>=6'}
1103 | dependencies:
1104 | parent-module: 1.0.1
1105 | resolve-from: 4.0.0
1106 | dev: true
1107 |
1108 | /imurmurhash@0.1.4:
1109 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1110 | engines: {node: '>=0.8.19'}
1111 | dev: true
1112 |
1113 | /inherits@2.0.3:
1114 | resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
1115 | dev: false
1116 |
1117 | /is-extglob@2.1.1:
1118 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1119 | engines: {node: '>=0.10.0'}
1120 | dev: true
1121 |
1122 | /is-glob@4.0.3:
1123 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1124 | engines: {node: '>=0.10.0'}
1125 | dependencies:
1126 | is-extglob: 2.1.1
1127 | dev: true
1128 |
1129 | /is-number@7.0.0:
1130 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1131 | engines: {node: '>=0.12.0'}
1132 | dev: true
1133 |
1134 | /isexe@2.0.0:
1135 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1136 | dev: true
1137 |
1138 | /js-yaml@4.1.0:
1139 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1140 | hasBin: true
1141 | dependencies:
1142 | argparse: 2.0.1
1143 | dev: true
1144 |
1145 | /json-buffer@3.0.1:
1146 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1147 | dev: true
1148 |
1149 | /json-schema-traverse@0.4.1:
1150 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1151 | dev: true
1152 |
1153 | /json-stable-stringify-without-jsonify@1.0.1:
1154 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1155 | dev: true
1156 |
1157 | /keyv@4.5.4:
1158 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1159 | dependencies:
1160 | json-buffer: 3.0.1
1161 | dev: true
1162 |
1163 | /levn@0.4.1:
1164 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1165 | engines: {node: '>= 0.8.0'}
1166 | dependencies:
1167 | prelude-ls: 1.2.1
1168 | type-check: 0.4.0
1169 | dev: true
1170 |
1171 | /locate-path@6.0.0:
1172 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1173 | engines: {node: '>=10'}
1174 | dependencies:
1175 | p-locate: 5.0.0
1176 | dev: true
1177 |
1178 | /lodash-es@4.17.21:
1179 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
1180 | dev: false
1181 |
1182 | /lodash.merge@4.6.2:
1183 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1184 | dev: true
1185 |
1186 | /lower-case@2.0.2:
1187 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
1188 | dependencies:
1189 | tslib: 2.8.1
1190 | dev: false
1191 |
1192 | /merge2@1.4.1:
1193 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1194 | engines: {node: '>= 8'}
1195 | dev: true
1196 |
1197 | /micromatch@4.0.8:
1198 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1199 | engines: {node: '>=8.6'}
1200 | dependencies:
1201 | braces: 3.0.3
1202 | picomatch: 2.3.1
1203 | dev: true
1204 |
1205 | /minimatch@3.1.2:
1206 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1207 | dependencies:
1208 | brace-expansion: 1.1.11
1209 | dev: true
1210 |
1211 | /minimatch@9.0.5:
1212 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1213 | engines: {node: '>=16 || 14 >=14.17'}
1214 | dependencies:
1215 | brace-expansion: 2.0.1
1216 | dev: true
1217 |
1218 | /ms@2.1.2:
1219 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1220 | dev: false
1221 |
1222 | /ms@2.1.3:
1223 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1224 | dev: true
1225 |
1226 | /nanoid@3.3.11:
1227 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
1228 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1229 | hasBin: true
1230 | dev: true
1231 |
1232 | /natural-compare@1.4.0:
1233 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1234 | dev: true
1235 |
1236 | /no-case@3.0.4:
1237 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
1238 | dependencies:
1239 | lower-case: 2.0.2
1240 | tslib: 2.8.1
1241 | dev: false
1242 |
1243 | /optionator@0.9.4:
1244 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1245 | engines: {node: '>= 0.8.0'}
1246 | dependencies:
1247 | deep-is: 0.1.4
1248 | fast-levenshtein: 2.0.6
1249 | levn: 0.4.1
1250 | prelude-ls: 1.2.1
1251 | type-check: 0.4.0
1252 | word-wrap: 1.2.5
1253 | dev: true
1254 |
1255 | /p-limit@3.1.0:
1256 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1257 | engines: {node: '>=10'}
1258 | dependencies:
1259 | yocto-queue: 0.1.0
1260 | dev: true
1261 |
1262 | /p-locate@5.0.0:
1263 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1264 | engines: {node: '>=10'}
1265 | dependencies:
1266 | p-limit: 3.1.0
1267 | dev: true
1268 |
1269 | /parent-module@1.0.1:
1270 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1271 | engines: {node: '>=6'}
1272 | dependencies:
1273 | callsites: 3.1.0
1274 | dev: true
1275 |
1276 | /path-exists@4.0.0:
1277 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1278 | engines: {node: '>=8'}
1279 | dev: true
1280 |
1281 | /path-key@3.1.1:
1282 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1283 | engines: {node: '>=8'}
1284 | dev: true
1285 |
1286 | /path@0.12.7:
1287 | resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==}
1288 | dependencies:
1289 | process: 0.11.10
1290 | util: 0.10.4
1291 | dev: false
1292 |
1293 | /picocolors@1.1.1:
1294 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1295 | dev: true
1296 |
1297 | /picomatch@2.3.1:
1298 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1299 | engines: {node: '>=8.6'}
1300 | dev: true
1301 |
1302 | /postcss@8.5.3:
1303 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
1304 | engines: {node: ^10 || ^12 || >=14}
1305 | dependencies:
1306 | nanoid: 3.3.11
1307 | picocolors: 1.1.1
1308 | source-map-js: 1.2.1
1309 | dev: true
1310 |
1311 | /prelude-ls@1.2.1:
1312 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1313 | engines: {node: '>= 0.8.0'}
1314 | dev: true
1315 |
1316 | /process@0.11.10:
1317 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
1318 | engines: {node: '>= 0.6.0'}
1319 | dev: false
1320 |
1321 | /punycode@2.3.1:
1322 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1323 | engines: {node: '>=6'}
1324 | dev: true
1325 |
1326 | /queue-microtask@1.2.3:
1327 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1328 | dev: true
1329 |
1330 | /resolve-from@4.0.0:
1331 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1332 | engines: {node: '>=4'}
1333 | dev: true
1334 |
1335 | /reusify@1.1.0:
1336 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1337 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1338 | dev: true
1339 |
1340 | /rollup@4.39.0:
1341 | resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==}
1342 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1343 | hasBin: true
1344 | dependencies:
1345 | '@types/estree': 1.0.7
1346 | optionalDependencies:
1347 | '@rollup/rollup-android-arm-eabi': 4.39.0
1348 | '@rollup/rollup-android-arm64': 4.39.0
1349 | '@rollup/rollup-darwin-arm64': 4.39.0
1350 | '@rollup/rollup-darwin-x64': 4.39.0
1351 | '@rollup/rollup-freebsd-arm64': 4.39.0
1352 | '@rollup/rollup-freebsd-x64': 4.39.0
1353 | '@rollup/rollup-linux-arm-gnueabihf': 4.39.0
1354 | '@rollup/rollup-linux-arm-musleabihf': 4.39.0
1355 | '@rollup/rollup-linux-arm64-gnu': 4.39.0
1356 | '@rollup/rollup-linux-arm64-musl': 4.39.0
1357 | '@rollup/rollup-linux-loongarch64-gnu': 4.39.0
1358 | '@rollup/rollup-linux-powerpc64le-gnu': 4.39.0
1359 | '@rollup/rollup-linux-riscv64-gnu': 4.39.0
1360 | '@rollup/rollup-linux-riscv64-musl': 4.39.0
1361 | '@rollup/rollup-linux-s390x-gnu': 4.39.0
1362 | '@rollup/rollup-linux-x64-gnu': 4.39.0
1363 | '@rollup/rollup-linux-x64-musl': 4.39.0
1364 | '@rollup/rollup-win32-arm64-msvc': 4.39.0
1365 | '@rollup/rollup-win32-ia32-msvc': 4.39.0
1366 | '@rollup/rollup-win32-x64-msvc': 4.39.0
1367 | fsevents: 2.3.3
1368 | dev: true
1369 |
1370 | /run-parallel@1.2.0:
1371 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1372 | dependencies:
1373 | queue-microtask: 1.2.3
1374 | dev: true
1375 |
1376 | /semver@7.7.1:
1377 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1378 | engines: {node: '>=10'}
1379 | hasBin: true
1380 | dev: true
1381 |
1382 | /shebang-command@2.0.0:
1383 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1384 | engines: {node: '>=8'}
1385 | dependencies:
1386 | shebang-regex: 3.0.0
1387 | dev: true
1388 |
1389 | /shebang-regex@3.0.0:
1390 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1391 | engines: {node: '>=8'}
1392 | dev: true
1393 |
1394 | /snake-case@3.0.4:
1395 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
1396 | dependencies:
1397 | dot-case: 3.0.4
1398 | tslib: 2.8.1
1399 | dev: false
1400 |
1401 | /source-map-js@1.2.1:
1402 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1403 | engines: {node: '>=0.10.0'}
1404 | dev: true
1405 |
1406 | /strip-json-comments@3.1.1:
1407 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1408 | engines: {node: '>=8'}
1409 | dev: true
1410 |
1411 | /supports-color@7.2.0:
1412 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1413 | engines: {node: '>=8'}
1414 | dependencies:
1415 | has-flag: 4.0.0
1416 | dev: true
1417 |
1418 | /to-regex-range@5.0.1:
1419 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1420 | engines: {node: '>=8.0'}
1421 | dependencies:
1422 | is-number: 7.0.0
1423 | dev: true
1424 |
1425 | /ts-api-utils@2.1.0(typescript@5.8.2):
1426 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
1427 | engines: {node: '>=18.12'}
1428 | peerDependencies:
1429 | typescript: '>=4.8.4'
1430 | dependencies:
1431 | typescript: 5.8.2
1432 | dev: true
1433 |
1434 | /tslib@2.8.1:
1435 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1436 | dev: false
1437 |
1438 | /type-check@0.4.0:
1439 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1440 | engines: {node: '>= 0.8.0'}
1441 | dependencies:
1442 | prelude-ls: 1.2.1
1443 | dev: true
1444 |
1445 | /typescript@5.8.2:
1446 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
1447 | engines: {node: '>=14.17'}
1448 | hasBin: true
1449 | dev: true
1450 |
1451 | /undici-types@6.21.0:
1452 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
1453 | dev: true
1454 |
1455 | /uri-js@4.4.1:
1456 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1457 | dependencies:
1458 | punycode: 2.3.1
1459 | dev: true
1460 |
1461 | /util@0.10.4:
1462 | resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==}
1463 | dependencies:
1464 | inherits: 2.0.3
1465 | dev: false
1466 |
1467 | /vite@6.2.5(@types/node@22.14.0):
1468 | resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==}
1469 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1470 | hasBin: true
1471 | peerDependencies:
1472 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1473 | jiti: '>=1.21.0'
1474 | less: '*'
1475 | lightningcss: ^1.21.0
1476 | sass: '*'
1477 | sass-embedded: '*'
1478 | stylus: '*'
1479 | sugarss: '*'
1480 | terser: ^5.16.0
1481 | tsx: ^4.8.1
1482 | yaml: ^2.4.2
1483 | peerDependenciesMeta:
1484 | '@types/node':
1485 | optional: true
1486 | jiti:
1487 | optional: true
1488 | less:
1489 | optional: true
1490 | lightningcss:
1491 | optional: true
1492 | sass:
1493 | optional: true
1494 | sass-embedded:
1495 | optional: true
1496 | stylus:
1497 | optional: true
1498 | sugarss:
1499 | optional: true
1500 | terser:
1501 | optional: true
1502 | tsx:
1503 | optional: true
1504 | yaml:
1505 | optional: true
1506 | dependencies:
1507 | '@types/node': 22.14.0
1508 | esbuild: 0.25.2
1509 | postcss: 8.5.3
1510 | rollup: 4.39.0
1511 | optionalDependencies:
1512 | fsevents: 2.3.3
1513 | dev: true
1514 |
1515 | /which@2.0.2:
1516 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1517 | engines: {node: '>= 8'}
1518 | hasBin: true
1519 | dependencies:
1520 | isexe: 2.0.0
1521 | dev: true
1522 |
1523 | /word-wrap@1.2.5:
1524 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1525 | engines: {node: '>=0.10.0'}
1526 | dev: true
1527 |
1528 | /yocto-queue@0.1.0:
1529 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1530 | engines: {node: '>=10'}
1531 | dev: true
1532 |
--------------------------------------------------------------------------------
/screencast.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vipzhicheng/logseq-plugin-comment-block/8da0b723c2ec4660d2136a6aed213aa022d03113/screencast.gif
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import "@logseq/libs";
2 | import { BlockEntity, SettingSchemaDesc } from "@logseq/libs/dist/LSPlugin";
3 | import { format } from "date-fns";
4 |
5 | const settingsVersion = "v2";
6 | const defaultSettings = {
7 | showToolbarIcon: true,
8 | keyBindings: {
9 | commentBlock: "mod+shift+i",
10 | },
11 | settingsVersion,
12 | disabled: false,
13 | };
14 |
15 | type DefaultSettingsType = typeof defaultSettings;
16 |
17 | const initSettings = () => {
18 | let settings = logseq.settings;
19 |
20 | const shouldUpdateSettings =
21 | !settings || settings.settingsVersion != defaultSettings.settingsVersion;
22 |
23 | if (shouldUpdateSettings) {
24 | settings = defaultSettings;
25 | logseq.updateSettings(settings);
26 | }
27 | };
28 |
29 | const getSettings = (
30 | key: string | undefined,
31 | defaultValue: any = undefined
32 | ) => {
33 | let settings = logseq.settings;
34 | const merged = Object.assign(defaultSettings, settings);
35 | return key ? (merged[key] ? merged[key] : defaultValue) : merged;
36 | };
37 |
38 | const defineSettings = (): SettingSchemaDesc[] => [
39 | {
40 | key: "putBlockRefAsChild",
41 | type: "boolean",
42 | title: "Put block ref as child",
43 | description:
44 | "That means everytime you trigger a comment, it will insert a new block and add commented block ref as child. If you disable this, it will insert a new block as the child of commented block ref. Use this with CAUTION, because the embed feature will not work and it can not reuse the block ref if you trigger comment again.",
45 | default: false,
46 | },
47 | ];
48 | logseq.useSettingsSchema(defineSettings());
49 |
50 | async function getLastBlock(pageName: string): Promise {
51 | const blocks = await logseq.Editor.getPageBlocksTree(pageName);
52 | if (blocks.length === 0) {
53 | return null;
54 | }
55 | return blocks[blocks.length - 1];
56 | }
57 |
58 | const handler = async (e: any) => {
59 | let block;
60 | if (e && e.uuid) {
61 | block = await logseq.Editor.getBlock(e.uuid);
62 | } else {
63 | block = await logseq.Editor.getCurrentBlock();
64 | }
65 | if (!block || !block.uuid) {
66 | return;
67 | }
68 | const config = await logseq.App.getUserConfigs();
69 | if (!block?.properties?.id) {
70 | await logseq.Editor.upsertBlockProperty(e.uuid, "id", e.uuid);
71 | }
72 |
73 | const page = await logseq.Editor.getPage(block.page.id);
74 | if (page?.name) {
75 | const blocks = await logseq.Editor.getPageBlocksTree(page.name);
76 | let findCommentBlock = blocks.find(
77 | (item) => item.content && item.content.startsWith("[[Comments]]")
78 | );
79 |
80 | const lastBlock = await getLastBlock(page.name);
81 | // Find Comment block
82 | if (!findCommentBlock && lastBlock?.uuid) {
83 | const newCommentBlock = await logseq.Editor.insertBlock(
84 | lastBlock.uuid,
85 | "[[Comments]]",
86 | {
87 | sibling: true,
88 | before: false,
89 | properties: {
90 | collapsed: true,
91 | },
92 | }
93 | );
94 | if (newCommentBlock) {
95 | findCommentBlock = newCommentBlock;
96 | }
97 | }
98 |
99 | // Insert Comment blocks
100 | if (findCommentBlock) {
101 | const todayTitle = format(new Date(), config.preferredDateFormat);
102 |
103 | // Reuse today block
104 | let todayBlock, findTodayBlock: any;
105 | if (findCommentBlock.children && findCommentBlock.children.length > 0) {
106 | findTodayBlock = findCommentBlock.children.find(
107 | (item: any) =>
108 | item.content && item.content.startsWith(`[[${todayTitle}]]`)
109 | );
110 | if (findTodayBlock?.uuid) {
111 | todayBlock = findTodayBlock;
112 | } else {
113 | todayBlock = await logseq.Editor.insertBlock(
114 | findCommentBlock.uuid,
115 | `[[${todayTitle}]]`,
116 | {
117 | sibling: false,
118 | properties: {
119 | collapsed: true,
120 | },
121 | }
122 | );
123 | }
124 | } else {
125 | todayBlock = await logseq.Editor.insertBlock(
126 | findCommentBlock.uuid,
127 | `[[${todayTitle}]]`,
128 | {
129 | sibling: false,
130 | properties: {
131 | collapsed: true,
132 | },
133 | }
134 | );
135 | }
136 |
137 | if (todayBlock?.uuid) {
138 | // process putBlockRefAsChild
139 | if (logseq.settings?.putBlockRefAsChild) {
140 | let commentBlock = await logseq.Editor.insertBlock(
141 | todayBlock?.uuid,
142 | ``,
143 | {
144 | sibling: false,
145 | }
146 | );
147 | if (commentBlock?.uuid) {
148 | await logseq.Editor.openInRightSidebar(commentBlock?.uuid);
149 | await logseq.Editor.insertBlock(
150 | commentBlock?.uuid,
151 | `((${e.uuid}))`,
152 | {
153 | sibling: false,
154 | }
155 | );
156 | await logseq.Editor.editBlock(commentBlock?.uuid);
157 | }
158 | } else {
159 | // Reuse block ref block
160 | let blockRefBlock, findBlockRefBlock;
161 |
162 | if (todayBlock.children && todayBlock.children.length > 0) {
163 | findBlockRefBlock = todayBlock.children.find(
164 | (item: any) =>
165 | item.content && item.content.startsWith(`((${e.uuid}))`)
166 | );
167 | if (findBlockRefBlock?.uuid) {
168 | blockRefBlock = findBlockRefBlock;
169 | } else {
170 | blockRefBlock = await logseq.Editor.insertBlock(
171 | todayBlock?.uuid,
172 | `((${e.uuid}))`,
173 | {
174 | sibling: false,
175 | }
176 | );
177 | }
178 | } else {
179 | blockRefBlock = await logseq.Editor.insertBlock(
180 | todayBlock?.uuid,
181 | `((${e.uuid}))`,
182 | {
183 | sibling: false,
184 | }
185 | );
186 | }
187 |
188 | if (blockRefBlock?.uuid) {
189 | await logseq.Editor.openInRightSidebar(blockRefBlock?.uuid);
190 |
191 | // Reuse the empty block
192 | let emptyBlock;
193 | if (blockRefBlock.children && blockRefBlock.children.length > 0) {
194 | const lastEditingBlock =
195 | blockRefBlock.children[blockRefBlock.children.length - 1];
196 | if (lastEditingBlock?.content.length === 0) {
197 | emptyBlock = lastEditingBlock;
198 | }
199 | }
200 |
201 | if (!emptyBlock) {
202 | emptyBlock = await logseq.Editor.insertBlock(
203 | blockRefBlock?.uuid,
204 | "",
205 | {
206 | sibling: false,
207 | }
208 | );
209 | }
210 |
211 | if (emptyBlock?.uuid) {
212 | await logseq.Editor.editBlock(emptyBlock?.uuid);
213 | }
214 | }
215 | }
216 | }
217 | }
218 | }
219 | };
220 |
221 | const handleEmbed = async (e: any) => {
222 | let block;
223 | if (e && e.uuid) {
224 | block = await logseq.Editor.getBlock(e.uuid);
225 | } else {
226 | block = await logseq.Editor.getCurrentBlock();
227 | }
228 | if (!block || !block.uuid) {
229 | return;
230 | }
231 | const page = await logseq.Editor.getPage(block.page.id);
232 | if (page?.name) {
233 | const blocks = await logseq.Editor.getPageBlocksTree(page.name);
234 | let findCommentBlock = blocks.find(
235 | (item) => item.content && item.content.startsWith("[[Comments]]")
236 | );
237 |
238 | if (findCommentBlock && findCommentBlock.children) {
239 | for (let block1 of findCommentBlock.children) {
240 | if (block1) {
241 | // @ts-ignore
242 | for (let block2 of block1.children) {
243 | if (
244 | (block2 as BlockEntity).content.indexOf(`((${block.uuid}))`) > -1
245 | ) {
246 | for (let block3 of block2.children) {
247 | if (!(block3 as BlockEntity)?.properties?.id) {
248 | await logseq.Editor.upsertBlockProperty(
249 | (block3 as BlockEntity).uuid,
250 | "id",
251 | (block3 as BlockEntity).uuid
252 | );
253 | }
254 |
255 | await logseq.Editor.insertBlock(
256 | block.uuid,
257 | `((${(block3 as BlockEntity).uuid}))`,
258 | {
259 | before: false,
260 | sibling: false,
261 | }
262 | );
263 | }
264 | }
265 | }
266 | }
267 | }
268 |
269 | await logseq.Editor.exitEditingMode(true);
270 | }
271 | }
272 | };
273 |
274 | async function main() {
275 | initSettings();
276 | const keyBindings = getSettings("keyBindings");
277 | logseq.Editor.registerSlashCommand(`Comment block`, handler);
278 | logseq.Editor.registerBlockContextMenuItem(`Comment block`, handler);
279 | logseq.App.registerCommandPalette(
280 | {
281 | key: `comment-block`,
282 | label: `Comment block`,
283 | keybinding: {
284 | mode: "global",
285 | binding: keyBindings.commentBlock,
286 | },
287 | },
288 | handler
289 | );
290 |
291 | logseq.Editor.registerSlashCommand(
292 | "Embed Comment blocks To Children",
293 | handleEmbed
294 | );
295 | logseq.Editor.registerBlockContextMenuItem(
296 | `Embed Comment blocks To Children`,
297 | handleEmbed
298 | );
299 |
300 | logseq.App.registerCommandPalette(
301 | {
302 | key: `embed-comment-block-to-children`,
303 | label: `Embed comment block to children`,
304 | },
305 | handleEmbed
306 | );
307 | }
308 | logseq.ready(main).catch(console.error);
309 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 |
5 | /* Basic Options */
6 | // "incremental": true, /* Enable incremental compilation */
7 | "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
8 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
9 | // "lib": [], /* Specify library files to be included in the compilation. */
10 | // "allowJs": true, /* Allow javascript files to be compiled. */
11 | // "checkJs": true, /* Report errors in .js files. */
12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
13 | // "declaration": true, /* Generates corresponding '.d.ts' file. */
14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
15 | "sourceMap": true, /* Generates corresponding '.map' file. */
16 | // "outFile": "./", /* Concatenate and emit output to single file. */
17 | // "outDir": "./", /* Redirect output structure to the directory. */
18 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
19 | // "composite": true, /* Enable project compilation */
20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
21 | // "removeComments": true, /* Do not emit comments to output. */
22 | // "noEmit": true, /* Do not emit outputs. */
23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
25 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
26 |
27 | /* Strict Type-Checking Options */
28 | "strict": true, /* Enable all strict type-checking options. */
29 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
30 | // "strictNullChecks": true, /* Enable strict null checks. */
31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */
32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
36 |
37 | /* Additional Checks */
38 | // "noUnusedLocals": true, /* Report errors on unused locals. */
39 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
40 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
41 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
42 |
43 | /* Module Resolution Options */
44 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
45 | "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
46 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
47 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
48 | // "typeRoots": [], /* List of folders to include type definitions from. */
49 | // "types": [], /* Type declaration files to be included in compilation. */
50 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
51 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
52 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
53 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
54 |
55 | /* Source Map Options */
56 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
58 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
59 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
60 |
61 | /* Experimental Options */
62 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
63 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
64 |
65 | /* Advanced Options */
66 | "skipLibCheck": true, /* Skip type checking of declaration files. */
67 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import path from 'path';
3 |
4 | export default defineConfig({
5 | base: './',
6 | build: {
7 | sourcemap: false,
8 | target: 'esnext',
9 | minify: 'esbuild',
10 | chunkSizeWarningLimit: 1024,
11 | rollupOptions: {
12 | output: {
13 | manualChunks: {
14 | logseq: ['@logseq/libs'],
15 | },
16 | },
17 | },
18 | },
19 | resolve: {
20 | alias: {
21 | '@': path.resolve(__dirname, './src'),
22 | },
23 | },
24 | });
25 |
--------------------------------------------------------------------------------