AT protocol bookmarking platforms in obsidian

Compare changes

Choose any two refs to compare.

+3671 -6515
+8 -10
.github/workflows/lint.yml
··· 1 - name: Node.js build 1 + name: Bun build 2 2 3 3 on: 4 4 push: ··· 12 12 13 13 strategy: 14 14 matrix: 15 - node-version: [20.x, 22.x] 16 - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 15 + bun-version: [latest] 17 16 18 17 steps: 19 18 - uses: actions/checkout@v4 20 - - name: Use Node.js ${{ matrix.node-version }} 21 - uses: actions/setup-node@v4 19 + - name: Setup Bun ${{ matrix.bun-version }} 20 + uses: oven-sh/setup-bun@v2 22 21 with: 23 - node-version: ${{ matrix.node-version }} 24 - cache: "npm" 25 - - run: npm ci 26 - - run: npm run build --if-present 27 - - run: npm run lint 22 + bun-version: ${{ matrix.bun-version }} 23 + - run: bun install --frozen-lockfile 24 + - run: bun run build --if-present 25 + - run: bun run lint 28 26
+5 -5
.github/workflows/release.yml
··· 15 15 steps: 16 16 - uses: actions/checkout@v4 17 17 18 - - name: Use Node.js 19 - uses: actions/setup-node@v4 18 + - name: Setup Bun 19 + uses: oven-sh/setup-bun@v2 20 20 with: 21 - node-version: "18.x" 21 + bun-version: latest 22 22 23 23 - name: Install dependencies 24 - run: npm install 24 + run: bun install --frozen-lockfile 25 25 26 26 - name: Build plugin 27 - run: npm run build 27 + run: bun run build 28 28 29 29 - name: Create release 30 30 env:
+19 -3
LICENSE
··· 1 - Copyright (C) 2020-2025 by Dynalist Inc. 1 + MIT License 2 2 3 - Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. 3 + Copyright (c) 2025 treethought 4 4 5 - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 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.
+8
README.md
··· 2 2 3 3 Obsidian plugin for AT Protocol bookmarking platforms. 4 4 5 + 5 6 ## Supported platforms 6 7 7 8 - **Semble** (`network.cosmik.*`) - Collections and cards 8 9 - **Bookmarks** (`community.lexicon.bookmarks.*`) - Community bookmarks lexicon with tag filtering (supports kipclip tags) 9 10 - **margin.at** (`at.margin.*`) - Bookmarks with collections and tags support 11 + 12 + ![](/preview.png) 13 + ![](/preview-sidebar.png) 10 14 11 15 ## Installation 12 16 ··· 33 37 ### Opening the View 34 38 35 39 Open the command palette (Ctrl/Cmd + P) and search for "ATmark: Open view". The view will show your bookmarks from all supported platforms. 40 + 41 + ## Network Use 42 + 43 + This plugin connects to AT Protocol services to fetch and manage your bookmarks.
+884
bun.lock
··· 1 + { 2 + "lockfileVersion": 1, 3 + "configVersion": 1, 4 + "workspaces": { 5 + "": { 6 + "name": "obsidian-atmark", 7 + "dependencies": { 8 + "@atcute/atproto": "^3.1.10", 9 + "@atcute/bluesky": "^3.2.15", 10 + "@atcute/client": "^4.2.1", 11 + "@atcute/identity-resolver": "^1.2.2", 12 + "@atcute/leaflet": "^1.0.17", 13 + "@atcute/oauth-browser-client": "^2.0.3", 14 + "@atcute/pckt": "^0.1.5", 15 + "@atcute/standard-site": "^1.0.0", 16 + "obsidian": "latest", 17 + "remark-parse": "^11.0.0", 18 + "remark-stringify": "^11.0.0", 19 + "unified": "^11.0.5", 20 + }, 21 + "devDependencies": { 22 + "@atcute/lex-cli": "^2.5.3", 23 + "@eslint/js": "9.30.1", 24 + "@types/node": "^16.11.6", 25 + "esbuild": "0.25.5", 26 + "eslint-plugin-obsidianmd": "0.1.9", 27 + "globals": "14.0.0", 28 + "jiti": "2.6.1", 29 + "tslib": "2.4.0", 30 + "typescript": "^5.8.3", 31 + "typescript-eslint": "8.35.1", 32 + }, 33 + }, 34 + }, 35 + "packages": { 36 + "@atcute/atproto": ["@atcute/atproto@3.1.10", "", { "dependencies": { "@atcute/lexicons": "^1.2.6" } }, "sha512-+GKZpOc0PJcdWMQEkTfg/rSNDAAHxmAUGBl60g2az15etqJn5WaUPNGFE2sB7hKpwi5Ue2h/L0OacINcE/JDDQ=="], 37 + 38 + "@atcute/bluesky": ["@atcute/bluesky@3.2.16", "", { "dependencies": { "@atcute/atproto": "^3.1.10", "@atcute/lexicons": "^1.2.7" } }, "sha512-phFAJNE+SCkIbCcgzjFxntS2KpGvzkLw0JA9qKIXlueF4wNreEt/D5HjnB5eRR9pV1/kcD94II9f7ZAwarf0lQ=="], 39 + 40 + "@atcute/car": ["@atcute/car@5.1.0", "", { "dependencies": { "@atcute/cbor": "^2.3.0", "@atcute/cid": "^2.4.0", "@atcute/uint8array": "^1.0.6", "@atcute/varint": "^1.0.3" } }, "sha512-W9axHVrwIkZJaeN/VQ1LyyU3b95wHBjQnrREouxygvmvWd1lmjFvF8Si8b0AG0VkWJ6h7h6qhOeUATynBzBFIg=="], 41 + 42 + "@atcute/cbor": ["@atcute/cbor@2.3.0", "", { "dependencies": { "@atcute/cid": "^2.4.0", "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.6" } }, "sha512-7G2AndkfYzIXMBOBqUPUWP6oIJJm77KY5nYzS4Mr5NNxnmnrBrXEQqp+seCE3X5TV8FUSWQK5YRTU87uPjafMQ=="], 43 + 44 + "@atcute/cid": ["@atcute/cid@2.4.0", "", { "dependencies": { "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.6" } }, "sha512-6+5u9MpUrgSRQ94z7vaIX4BYk8fYr2KXUBS+rrr2NhlPy8xam8nbTlmd3hvBbtpSwShbhRAE4tA5Ab7eYUp2Yw=="], 45 + 46 + "@atcute/client": ["@atcute/client@4.2.1", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.6" } }, "sha512-ZBFM2pW075JtgGFu5g7HHZBecrClhlcNH8GVP9Zz1aViWR+cjjBsTpeE63rJs+FCOHFYlirUyo5L8SGZ4kMINw=="], 47 + 48 + "@atcute/crypto": ["@atcute/crypto@2.3.0", "", { "dependencies": { "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.6", "@noble/secp256k1": "^3.0.0" } }, "sha512-w5pkJKCjbNMQu+F4JRHbR3ROQyhi1wbn+GSC6WDQamcYHkZmEZk1/eoI354bIQOOfkEM6aFLv718iskrkon4GQ=="], 49 + 50 + "@atcute/identity": ["@atcute/identity@1.1.3", "", { "dependencies": { "@atcute/lexicons": "^1.2.4", "@badrap/valita": "^0.4.6" } }, "sha512-oIqPoI8TwWeQxvcLmFEZLdN2XdWcaLVtlm8pNk0E72As9HNzzD9pwKPrLr3rmTLRIoULPPFmq9iFNsTeCIU9ng=="], 51 + 52 + "@atcute/identity-resolver": ["@atcute/identity-resolver@1.2.2", "", { "dependencies": { "@atcute/lexicons": "^1.2.6", "@atcute/util-fetch": "^1.0.5", "@badrap/valita": "^0.4.6" }, "peerDependencies": { "@atcute/identity": "^1.0.0" } }, "sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw=="], 53 + 54 + "@atcute/leaflet": ["@atcute/leaflet@1.0.17", "", { "dependencies": { "@atcute/atproto": "^3.1.10", "@atcute/lexicons": "^1.2.7" } }, "sha512-aCykf/vCRY19B8S42VEoyIvUR2CuOsH/RQcDF8u8rHZvmGfc4qgcAAxriHxiVrlinLNhxzhzuliq2avVxHiv8g=="], 55 + 56 + "@atcute/lex-cli": ["@atcute/lex-cli@2.5.3", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/identity-resolver": "^1.2.2", "@atcute/lexicon-doc": "^2.1.0", "@atcute/lexicon-resolver": "^0.1.6", "@atcute/lexicons": "^1.2.7", "@badrap/valita": "^0.4.6", "@optique/core": "^0.6.10", "@optique/run": "^0.6.10", "picocolors": "^1.1.1", "prettier": "^3.7.4" }, "bin": { "lex-cli": "cli.mjs" } }, "sha512-829rvezMOfRkJQRKvupNT8TWT/YYffJ2QsB80D9aPjkXSogrETZA7xZcPaMZBXg+mJaVbLO9S4ThPQmlF0L4UQ=="], 57 + 58 + "@atcute/lexicon-doc": ["@atcute/lexicon-doc@2.1.0", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.7", "@atcute/uint8array": "^1.1.0", "@atcute/util-text": "^1.1.0", "@badrap/valita": "^0.4.6" } }, "sha512-I8BNFKUP2VvEv2tNzZ10b0TKtQWJHQ/CLUh29N1HRDUImah+OS7Z7wGBFleF7e1JnMzcWDhgZCvA6JaJOScBuA=="], 59 + 60 + "@atcute/lexicon-resolver": ["@atcute/lexicon-resolver@0.1.6", "", { "dependencies": { "@atcute/crypto": "^2.3.0", "@atcute/lexicon-doc": "^2.0.6", "@atcute/lexicons": "^1.2.6", "@atcute/repo": "^0.1.1", "@atcute/util-fetch": "^1.0.5", "@badrap/valita": "^0.4.6" }, "peerDependencies": { "@atcute/identity": "^1.1.0", "@atcute/identity-resolver": "^1.1.3" } }, "sha512-wJC/ChmpP7k+ywpOd07CMvioXjIGaFpF3bDwXLi/086LYjSWHOvtW6pyC+mqP5wLhjyH2hn4wmi77Buew1l1aw=="], 61 + 62 + "@atcute/lexicons": ["@atcute/lexicons@1.2.7", "", { "dependencies": { "@atcute/uint8array": "^1.1.0", "@atcute/util-text": "^1.1.0", "@standard-schema/spec": "^1.1.0", "esm-env": "^1.2.2" } }, "sha512-gCvkSMI1F1zx7xXa59iPiSKMH3L5Hga6iurGqQjaQbE2V/np/2QuDqQzt96TNbWfaFAXE9f9oY+0z3ljf/bweA=="], 63 + 64 + "@atcute/mst": ["@atcute/mst@0.1.2", "", { "dependencies": { "@atcute/cbor": "^2.3.0", "@atcute/cid": "^2.4.0", "@atcute/uint8array": "^1.0.6" } }, "sha512-Oz5CZTjqauEJLT9B+zkoy/mjl216DrjCxJFrguRV3N+1NkIbCfAcSRf3UDSNjfzDzBkJvC1WjA/3oQkm83duPg=="], 65 + 66 + "@atcute/multibase": ["@atcute/multibase@1.1.7", "", { "dependencies": { "@atcute/uint8array": "^1.1.0" } }, "sha512-YmWds7U52b7Qri0xNfGeqSOvgyNfHR8Yy/NNDQx4d5TkCX2fHJIo0pXquEhCyMNAwKt53uH5yQDswy4TNP1Zhw=="], 67 + 68 + "@atcute/oauth-browser-client": ["@atcute/oauth-browser-client@2.0.3", "", { "dependencies": { "@atcute/client": "^4.1.1", "@atcute/identity-resolver": "^1.2.0", "@atcute/lexicons": "^1.2.5", "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.6", "nanoid": "^5.1.6" } }, "sha512-rzUjwhjE4LRRKdQnCFQag/zXRZMEAB1hhBoLfnoQuHwWbmDUCL7fzwC3jRhDPp3om8XaYNDj8a/iqRip0wRqoQ=="], 69 + 70 + "@atcute/pckt": ["@atcute/pckt@0.1.5", "", { "dependencies": { "@atcute/atproto": "^3.1.10", "@atcute/lexicons": "^1.2.7" } }, "sha512-vvQ/jrSvCsipH7DoAZYDHMWQcStJWg1Jt+GBPGyCmYJylb5ZZTrRg6Hy1rEik5WbLUxKdK5SLXSq0/EYwhqOww=="], 71 + 72 + "@atcute/repo": ["@atcute/repo@0.1.1", "", { "dependencies": { "@atcute/car": "^5.0.0", "@atcute/cbor": "^2.2.8", "@atcute/cid": "^2.2.6", "@atcute/crypto": "^2.3.0", "@atcute/lexicons": "^1.2.5", "@atcute/mst": "^0.1.0", "@atcute/uint8array": "^1.0.6" } }, "sha512-P5aWjt3bvcquUkUmGPslF0naAfLGRHse5Qdz9/RJYrFuoH0iiEMyRnW6M+3ksOe20GPsMnbq71WbzzFkRFPBtg=="], 73 + 74 + "@atcute/standard-site": ["@atcute/standard-site@1.0.0", "", { "dependencies": { "@atcute/atproto": "^3.1.10", "@atcute/lexicons": "^1.2.7" } }, "sha512-szUuE/+9XDsYUSNaWgG/+Lqd0goyKUevP5UYV3CYkDgs10Vxv/waAXer25zWv20Gs2jFzRh+eFY64q8bSvfiQA=="], 75 + 76 + "@atcute/uint8array": ["@atcute/uint8array@1.1.0", "", {}, "sha512-JtHXIVW6LPU9FMWp7SgE4HbUs3uV2WdfkK/2RWdEGjr4EgMV50P3FdU6fPeGlTfDNBJVYMIsuD2wwaKRPV/Aqg=="], 77 + 78 + "@atcute/util-fetch": ["@atcute/util-fetch@1.0.5", "", { "dependencies": { "@badrap/valita": "^0.4.6" } }, "sha512-qjHj01BGxjSjIFdPiAjSARnodJIIyKxnCMMEcXMESo9TAyND6XZQqrie5fia+LlYWVXdpsTds8uFQwc9jdKTig=="], 79 + 80 + "@atcute/util-text": ["@atcute/util-text@1.1.0", "", { "dependencies": { "unicode-segmenter": "^0.14.5" } }, "sha512-34G9KD5Z9f7oEdFpZOmqrMnU86p8ne6LlxJowfZzKNszRcl1GH+FtEPh3N1woelJT2SkPXMK2anwT8DESTluwA=="], 81 + 82 + "@atcute/varint": ["@atcute/varint@1.0.3", "", {}, "sha512-fdvMPyBB+McDT+Ai5e9RwEbwYV4yjZ60S2Dn5PTjGqUyxvoCH1z42viuheDZRUDkmfQehXJTZ5az7dSozVNtog=="], 83 + 84 + "@badrap/valita": ["@badrap/valita@0.4.6", "", {}, "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg=="], 85 + 86 + "@codemirror/state": ["@codemirror/state@6.5.0", "", { "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } }, "sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw=="], 87 + 88 + "@codemirror/view": ["@codemirror/view@6.38.6", "", { "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw=="], 89 + 90 + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA=="], 91 + 92 + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.5", "", { "os": "android", "cpu": "arm" }, "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA=="], 93 + 94 + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.5", "", { "os": "android", "cpu": "arm64" }, "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg=="], 95 + 96 + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.5", "", { "os": "android", "cpu": "x64" }, "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw=="], 97 + 98 + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ=="], 99 + 100 + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ=="], 101 + 102 + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw=="], 103 + 104 + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw=="], 105 + 106 + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw=="], 107 + 108 + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg=="], 109 + 110 + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA=="], 111 + 112 + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg=="], 113 + 114 + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg=="], 115 + 116 + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ=="], 117 + 118 + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA=="], 119 + 120 + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ=="], 121 + 122 + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.5", "", { "os": "linux", "cpu": "x64" }, "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw=="], 123 + 124 + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.5", "", { "os": "none", "cpu": "arm64" }, "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw=="], 125 + 126 + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.5", "", { "os": "none", "cpu": "x64" }, "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ=="], 127 + 128 + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.5", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw=="], 129 + 130 + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg=="], 131 + 132 + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA=="], 133 + 134 + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw=="], 135 + 136 + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ=="], 137 + 138 + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.5", "", { "os": "win32", "cpu": "x64" }, "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g=="], 139 + 140 + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], 141 + 142 + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], 143 + 144 + "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], 145 + 146 + "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], 147 + 148 + "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], 149 + 150 + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.3", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ=="], 151 + 152 + "@eslint/js": ["@eslint/js@9.30.1", "", {}, "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg=="], 153 + 154 + "@eslint/json": ["@eslint/json@0.14.0", "", { "dependencies": { "@eslint/core": "^0.17.0", "@eslint/plugin-kit": "^0.4.1", "@humanwhocodes/momoa": "^3.3.10", "natural-compare": "^1.4.0" } }, "sha512-rvR/EZtvUG3p9uqrSmcDJPYSH7atmWr0RnFWN6m917MAPx82+zQgPUmDu0whPFG6XTyM0vB/hR6c1Q63OaYtCQ=="], 155 + 156 + "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], 157 + 158 + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], 159 + 160 + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], 161 + 162 + "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], 163 + 164 + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], 165 + 166 + "@humanwhocodes/momoa": ["@humanwhocodes/momoa@3.3.10", "", {}, "sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ=="], 167 + 168 + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], 169 + 170 + "@marijn/find-cluster-break": ["@marijn/find-cluster-break@1.0.2", "", {}, "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g=="], 171 + 172 + "@microsoft/eslint-plugin-sdl": ["@microsoft/eslint-plugin-sdl@1.1.0", "", { "dependencies": { "eslint-plugin-n": "17.10.3", "eslint-plugin-react": "7.37.3", "eslint-plugin-security": "1.4.0" }, "peerDependencies": { "eslint": "^9" } }, "sha512-dxdNHOemLnBhfY3eByrujX9KyLigcNtW8sU+axzWv5nLGcsSBeKW2YYyTpfPo1hV8YPOmIGnfA4fZHyKVtWqBQ=="], 173 + 174 + "@noble/secp256k1": ["@noble/secp256k1@3.0.0", "", {}, "sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg=="], 175 + 176 + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], 177 + 178 + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], 179 + 180 + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], 181 + 182 + "@optique/core": ["@optique/core@0.6.11", "", {}, "sha512-GVLFihzBA1j78NFlkU5N1Lu0jRqET0k6Z66WK8VQKG/a3cxmCInVGSKMIdQG8i6pgC8wD5OizF6Y3QMztmhAxg=="], 183 + 184 + "@optique/run": ["@optique/run@0.6.11", "", { "dependencies": { "@optique/core": "0.6.11" } }, "sha512-tsXBEygGSzNpFK2gjsRlXBn7FiScUeLFWIZNpoAZ8iG85Km0/3K9xgqlQAXoQ+uEZBe4XplnzyCDvmEgbyNT8w=="], 185 + 186 + "@pkgr/core": ["@pkgr/core@0.1.2", "", {}, "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ=="], 187 + 188 + "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], 189 + 190 + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], 191 + 192 + "@types/codemirror": ["@types/codemirror@5.60.8", "", { "dependencies": { "@types/tern": "*" } }, "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw=="], 193 + 194 + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], 195 + 196 + "@types/eslint": ["@types/eslint@8.56.2", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw=="], 197 + 198 + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], 199 + 200 + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], 201 + 202 + "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], 203 + 204 + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], 205 + 206 + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], 207 + 208 + "@types/node": ["@types/node@16.18.126", "", {}, "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw=="], 209 + 210 + "@types/tern": ["@types/tern@0.23.9", "", { "dependencies": { "@types/estree": "*" } }, "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw=="], 211 + 212 + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], 213 + 214 + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.35.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.35.1", "@typescript-eslint/type-utils": "8.35.1", "@typescript-eslint/utils": "8.35.1", "@typescript-eslint/visitor-keys": "8.35.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.35.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg=="], 215 + 216 + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.35.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.35.1", "@typescript-eslint/types": "8.35.1", "@typescript-eslint/typescript-estree": "8.35.1", "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w=="], 217 + 218 + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.35.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.35.1", "@typescript-eslint/types": "^8.35.1", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q=="], 219 + 220 + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.35.1", "", { "dependencies": { "@typescript-eslint/types": "8.35.1", "@typescript-eslint/visitor-keys": "8.35.1" } }, "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg=="], 221 + 222 + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.35.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ=="], 223 + 224 + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.35.1", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.35.1", "@typescript-eslint/utils": "8.35.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ=="], 225 + 226 + "@typescript-eslint/types": ["@typescript-eslint/types@8.35.1", "", {}, "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ=="], 227 + 228 + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.35.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.35.1", "@typescript-eslint/tsconfig-utils": "8.35.1", "@typescript-eslint/types": "8.35.1", "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g=="], 229 + 230 + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.35.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.35.1", "@typescript-eslint/types": "8.35.1", "@typescript-eslint/typescript-estree": "8.35.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ=="], 231 + 232 + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.35.1", "", { "dependencies": { "@typescript-eslint/types": "8.35.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw=="], 233 + 234 + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], 235 + 236 + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], 237 + 238 + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], 239 + 240 + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], 241 + 242 + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], 243 + 244 + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], 245 + 246 + "array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="], 247 + 248 + "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="], 249 + 250 + "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="], 251 + 252 + "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="], 253 + 254 + "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="], 255 + 256 + "array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="], 257 + 258 + "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], 259 + 260 + "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], 261 + 262 + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], 263 + 264 + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], 265 + 266 + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], 267 + 268 + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], 269 + 270 + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], 271 + 272 + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], 273 + 274 + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], 275 + 276 + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], 277 + 278 + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], 279 + 280 + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], 281 + 282 + "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], 283 + 284 + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], 285 + 286 + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 287 + 288 + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], 289 + 290 + "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="], 291 + 292 + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], 293 + 294 + "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], 295 + 296 + "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], 297 + 298 + "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], 299 + 300 + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], 301 + 302 + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], 303 + 304 + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], 305 + 306 + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], 307 + 308 + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], 309 + 310 + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], 311 + 312 + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], 313 + 314 + "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], 315 + 316 + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], 317 + 318 + "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], 319 + 320 + "enhanced-resolve": ["enhanced-resolve@5.18.4", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q=="], 321 + 322 + "es-abstract": ["es-abstract@1.24.1", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw=="], 323 + 324 + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], 325 + 326 + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], 327 + 328 + "es-iterator-helpers": ["es-iterator-helpers@1.2.2", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.1", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "safe-array-concat": "^1.1.3" } }, "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w=="], 329 + 330 + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], 331 + 332 + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], 333 + 334 + "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="], 335 + 336 + "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], 337 + 338 + "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], 339 + 340 + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], 341 + 342 + "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="], 343 + 344 + "eslint-compat-utils": ["eslint-compat-utils@0.5.1", "", { "dependencies": { "semver": "^7.5.4" }, "peerDependencies": { "eslint": ">=6.0.0" } }, "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q=="], 345 + 346 + "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], 347 + 348 + "eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="], 349 + 350 + "eslint-plugin-depend": ["eslint-plugin-depend@1.3.1", "", { "dependencies": { "empathic": "^2.0.0", "module-replacements": "^2.8.0", "semver": "^7.6.3" } }, "sha512-1uo2rFAr9vzNrCYdp7IBZRB54LiyVxfaIso0R6/QV3t6Dax6DTbW/EV2Hktf0f4UtmGHK8UyzJWI382pwW04jw=="], 351 + 352 + "eslint-plugin-es-x": ["eslint-plugin-es-x@7.8.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", "@eslint-community/regexpp": "^4.11.0", "eslint-compat-utils": "^0.5.1" }, "peerDependencies": { "eslint": ">=8" } }, "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ=="], 353 + 354 + "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="], 355 + 356 + "eslint-plugin-json-schema-validator": ["eslint-plugin-json-schema-validator@5.1.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.3.0", "ajv": "^8.0.0", "debug": "^4.3.1", "eslint-compat-utils": "^0.5.0", "json-schema-migrate": "^2.0.0", "jsonc-eslint-parser": "^2.0.0", "minimatch": "^8.0.0", "synckit": "^0.9.0", "toml-eslint-parser": "^0.9.0", "tunnel-agent": "^0.6.0", "yaml-eslint-parser": "^1.0.0" }, "peerDependencies": { "eslint": ">=6.0.0" } }, "sha512-ZmVyxRIjm58oqe2kTuy90PpmZPrrKvOjRPXKzq8WCgRgAkidCgm5X8domL2KSfadZ3QFAmifMgGTcVNhZ5ez2g=="], 357 + 358 + "eslint-plugin-n": ["eslint-plugin-n@17.10.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "enhanced-resolve": "^5.17.0", "eslint-plugin-es-x": "^7.5.0", "get-tsconfig": "^4.7.0", "globals": "^15.8.0", "ignore": "^5.2.4", "minimatch": "^9.0.5", "semver": "^7.5.3" }, "peerDependencies": { "eslint": ">=8.23.0" } }, "sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw=="], 359 + 360 + "eslint-plugin-obsidianmd": ["eslint-plugin-obsidianmd@0.1.9", "", { "dependencies": { "@microsoft/eslint-plugin-sdl": "^1.1.0", "@types/eslint": "8.56.2", "@types/node": "20.12.12", "eslint": ">=9.0.0 <10.0.0", "eslint-plugin-depend": "1.3.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-json-schema-validator": "5.1.0", "eslint-plugin-security": "2.1.1", "globals": "14.0.0", "obsidian": "1.8.7", "typescript": "5.4.5" }, "peerDependencies": { "@eslint/js": "^9.30.1", "@eslint/json": "0.14.0", "typescript-eslint": "^8.35.1" }, "bin": { "eslint-plugin-obsidian": "dist/lib/index.js" } }, "sha512-/gyo5vky3Y7re4BtT/8MQbHU5Wes4o6VRqas3YmXE7aTCnMsdV0kfzV1GDXJN9Hrsc9UQPoeKUMiapKL0aGE4g=="], 361 + 362 + "eslint-plugin-react": ["eslint-plugin-react@7.37.3", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA=="], 363 + 364 + "eslint-plugin-security": ["eslint-plugin-security@2.1.1", "", { "dependencies": { "safe-regex": "^2.1.1" } }, "sha512-7cspIGj7WTfR3EhaILzAPcfCo5R9FbeWvbgsPYWivSurTBKW88VQxtP3c4aWMG9Hz/GfJlJVdXEJ3c8LqS+u2w=="], 365 + 366 + "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], 367 + 368 + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], 369 + 370 + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], 371 + 372 + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], 373 + 374 + "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], 375 + 376 + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], 377 + 378 + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], 379 + 380 + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], 381 + 382 + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], 383 + 384 + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], 385 + 386 + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], 387 + 388 + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], 389 + 390 + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], 391 + 392 + "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], 393 + 394 + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], 395 + 396 + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], 397 + 398 + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], 399 + 400 + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], 401 + 402 + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], 403 + 404 + "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], 405 + 406 + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], 407 + 408 + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], 409 + 410 + "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], 411 + 412 + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], 413 + 414 + "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], 415 + 416 + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], 417 + 418 + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], 419 + 420 + "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], 421 + 422 + "get-tsconfig": ["get-tsconfig@4.13.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w=="], 423 + 424 + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], 425 + 426 + "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], 427 + 428 + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], 429 + 430 + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], 431 + 432 + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], 433 + 434 + "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], 435 + 436 + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], 437 + 438 + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], 439 + 440 + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], 441 + 442 + "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], 443 + 444 + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], 445 + 446 + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], 447 + 448 + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], 449 + 450 + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], 451 + 452 + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], 453 + 454 + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], 455 + 456 + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], 457 + 458 + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], 459 + 460 + "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], 461 + 462 + "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], 463 + 464 + "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], 465 + 466 + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], 467 + 468 + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], 469 + 470 + "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], 471 + 472 + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], 473 + 474 + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], 475 + 476 + "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], 477 + 478 + "is-generator-function": ["is-generator-function@1.1.2", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="], 479 + 480 + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], 481 + 482 + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], 483 + 484 + "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], 485 + 486 + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], 487 + 488 + "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], 489 + 490 + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], 491 + 492 + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], 493 + 494 + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], 495 + 496 + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], 497 + 498 + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], 499 + 500 + "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], 501 + 502 + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], 503 + 504 + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], 505 + 506 + "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], 507 + 508 + "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], 509 + 510 + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], 511 + 512 + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], 513 + 514 + "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], 515 + 516 + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], 517 + 518 + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], 519 + 520 + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], 521 + 522 + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], 523 + 524 + "json-schema-migrate": ["json-schema-migrate@2.0.0", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ=="], 525 + 526 + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], 527 + 528 + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], 529 + 530 + "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], 531 + 532 + "jsonc-eslint-parser": ["jsonc-eslint-parser@2.4.2", "", { "dependencies": { "acorn": "^8.5.0", "eslint-visitor-keys": "^3.0.0", "espree": "^9.0.0", "semver": "^7.3.5" } }, "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA=="], 533 + 534 + "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], 535 + 536 + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], 537 + 538 + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], 539 + 540 + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], 541 + 542 + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], 543 + 544 + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], 545 + 546 + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], 547 + 548 + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], 549 + 550 + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA=="], 551 + 552 + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], 553 + 554 + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], 555 + 556 + "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], 557 + 558 + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], 559 + 560 + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], 561 + 562 + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], 563 + 564 + "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], 565 + 566 + "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], 567 + 568 + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], 569 + 570 + "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], 571 + 572 + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], 573 + 574 + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], 575 + 576 + "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], 577 + 578 + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], 579 + 580 + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], 581 + 582 + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], 583 + 584 + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], 585 + 586 + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], 587 + 588 + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], 589 + 590 + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], 591 + 592 + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], 593 + 594 + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], 595 + 596 + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], 597 + 598 + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], 599 + 600 + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], 601 + 602 + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], 603 + 604 + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], 605 + 606 + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], 607 + 608 + "module-replacements": ["module-replacements@2.11.0", "", {}, "sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA=="], 609 + 610 + "moment": ["moment@2.29.4", "", {}, "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="], 611 + 612 + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], 613 + 614 + "nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], 615 + 616 + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], 617 + 618 + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], 619 + 620 + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], 621 + 622 + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], 623 + 624 + "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], 625 + 626 + "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], 627 + 628 + "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="], 629 + 630 + "object.groupby": ["object.groupby@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="], 631 + 632 + "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], 633 + 634 + "obsidian": ["obsidian@1.11.4", "", { "dependencies": { "@types/codemirror": "5.60.8", "moment": "2.29.4" }, "peerDependencies": { "@codemirror/state": "6.5.0", "@codemirror/view": "6.38.6" } }, "sha512-n0KD3S+VndgaByrEtEe8NELy0ya6/s+KZ7OcxA6xOm5NN4thxKpQjo6eqEudHEvfGCeT/TYToAKJzitQ1I3XTg=="], 635 + 636 + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], 637 + 638 + "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], 639 + 640 + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], 641 + 642 + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], 643 + 644 + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], 645 + 646 + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], 647 + 648 + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], 649 + 650 + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], 651 + 652 + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 653 + 654 + "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 655 + 656 + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], 657 + 658 + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], 659 + 660 + "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], 661 + 662 + "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], 663 + 664 + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], 665 + 666 + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], 667 + 668 + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], 669 + 670 + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], 671 + 672 + "regexp-tree": ["regexp-tree@0.1.27", "", { "bin": { "regexp-tree": "bin/regexp-tree" } }, "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA=="], 673 + 674 + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], 675 + 676 + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], 677 + 678 + "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], 679 + 680 + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], 681 + 682 + "resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], 683 + 684 + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], 685 + 686 + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], 687 + 688 + "ret": ["ret@0.1.15", "", {}, "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="], 689 + 690 + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], 691 + 692 + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], 693 + 694 + "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], 695 + 696 + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 697 + 698 + "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], 699 + 700 + "safe-regex": ["safe-regex@2.1.1", "", { "dependencies": { "regexp-tree": "~0.1.1" } }, "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A=="], 701 + 702 + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], 703 + 704 + "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], 705 + 706 + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], 707 + 708 + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], 709 + 710 + "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], 711 + 712 + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], 713 + 714 + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], 715 + 716 + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], 717 + 718 + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], 719 + 720 + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], 721 + 722 + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], 723 + 724 + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], 725 + 726 + "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], 727 + 728 + "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="], 729 + 730 + "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], 731 + 732 + "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], 733 + 734 + "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], 735 + 736 + "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], 737 + 738 + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], 739 + 740 + "style-mod": ["style-mod@4.1.3", "", {}, "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ=="], 741 + 742 + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], 743 + 744 + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], 745 + 746 + "synckit": ["synckit@0.9.3", "", { "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" } }, "sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg=="], 747 + 748 + "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], 749 + 750 + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], 751 + 752 + "toml-eslint-parser": ["toml-eslint-parser@0.9.3", "", { "dependencies": { "eslint-visitor-keys": "^3.0.0" } }, "sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw=="], 753 + 754 + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], 755 + 756 + "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], 757 + 758 + "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], 759 + 760 + "tslib": ["tslib@2.4.0", "", {}, "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="], 761 + 762 + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], 763 + 764 + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], 765 + 766 + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], 767 + 768 + "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], 769 + 770 + "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], 771 + 772 + "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], 773 + 774 + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], 775 + 776 + "typescript-eslint": ["typescript-eslint@8.35.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.35.1", "@typescript-eslint/parser": "8.35.1", "@typescript-eslint/utils": "8.35.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw=="], 777 + 778 + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], 779 + 780 + "undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], 781 + 782 + "unicode-segmenter": ["unicode-segmenter@0.14.5", "", {}, "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g=="], 783 + 784 + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], 785 + 786 + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], 787 + 788 + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], 789 + 790 + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], 791 + 792 + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], 793 + 794 + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], 795 + 796 + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], 797 + 798 + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], 799 + 800 + "w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="], 801 + 802 + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], 803 + 804 + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], 805 + 806 + "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], 807 + 808 + "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], 809 + 810 + "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], 811 + 812 + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], 813 + 814 + "yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], 815 + 816 + "yaml-eslint-parser": ["yaml-eslint-parser@1.3.2", "", { "dependencies": { "eslint-visitor-keys": "^3.0.0", "yaml": "^2.0.0" } }, "sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg=="], 817 + 818 + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], 819 + 820 + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], 821 + 822 + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], 823 + 824 + "@microsoft/eslint-plugin-sdl/eslint-plugin-security": ["eslint-plugin-security@1.4.0", "", { "dependencies": { "safe-regex": "^1.1.0" } }, "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA=="], 825 + 826 + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], 827 + 828 + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 829 + 830 + "eslint/@eslint/js": ["@eslint/js@9.39.2", "", {}, "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA=="], 831 + 832 + "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], 833 + 834 + "eslint-import-resolver-node/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], 835 + 836 + "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], 837 + 838 + "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], 839 + 840 + "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], 841 + 842 + "eslint-plugin-json-schema-validator/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], 843 + 844 + "eslint-plugin-json-schema-validator/minimatch": ["minimatch@8.0.4", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA=="], 845 + 846 + "eslint-plugin-n/globals": ["globals@15.15.0", "", {}, "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg=="], 847 + 848 + "eslint-plugin-n/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 849 + 850 + "eslint-plugin-obsidianmd/@types/node": ["@types/node@20.12.12", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw=="], 851 + 852 + "eslint-plugin-obsidianmd/obsidian": ["obsidian@1.8.7", "", { "dependencies": { "@types/codemirror": "5.60.8", "moment": "2.29.4" }, "peerDependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-h4bWwNFAGRXlMlMAzdEiIM2ppTGlrh7uGOJS6w4gClrsjc+ei/3YAtU2VdFUlCiPuTHpY4aBpFJJW75S1Tl/JA=="], 853 + 854 + "eslint-plugin-obsidianmd/typescript": ["typescript@5.4.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="], 855 + 856 + "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], 857 + 858 + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], 859 + 860 + "json-schema-migrate/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], 861 + 862 + "jsonc-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], 863 + 864 + "jsonc-eslint-parser/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], 865 + 866 + "synckit/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 867 + 868 + "toml-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], 869 + 870 + "yaml-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], 871 + 872 + "@microsoft/eslint-plugin-sdl/eslint-plugin-security/safe-regex": ["safe-regex@1.1.0", "", { "dependencies": { "ret": "~0.1.10" } }, "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg=="], 873 + 874 + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], 875 + 876 + "eslint-plugin-json-schema-validator/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], 877 + 878 + "eslint-plugin-json-schema-validator/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], 879 + 880 + "eslint-plugin-n/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], 881 + 882 + "json-schema-migrate/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], 883 + } 884 + }
+20 -1
lex.config.js
··· 6 6 outdir: 'src/lexicons/', 7 7 pull: { 8 8 outdir: 'lexicons/', 9 - clean: true, 9 + clean: false, 10 10 sources: [ 11 11 { 12 12 type: 'git', ··· 20 20 ref: 'main', 21 21 pattern: ['lexicons/**/*.json'], 22 22 }, 23 + // { 24 + // type: 'git', 25 + // remote: 'https://tangled.org/leaflet.pub/leaflet.git', 26 + // ref: 'main', 27 + // pattern: ['lexicons/**/*.json'], 28 + // }, 29 + // { 30 + // type: 'atproto', 31 + // mode: 'nsids', 32 + // nsids: [ 33 + // 'site.standard.publication', 34 + // 'site.standard.document', 35 + // 'site.standard.theme.basic', 36 + // 'site.standard.theme.color', 37 + // 'pub.leaflet.document', 38 + // 'pub.leaflet.canvas', 39 + // 40 + // ], 41 + // }, 23 42 ], 24 43 }, 25 44 });
+2 -2
lexicons/README.md
··· 3 3 this directory contains lexicon documents pulled from the following sources: 4 4 5 5 - https://github.com/cosmik-network/semble.git (ref: main) 6 - - commit: 6a806594dd7411268299e3467ed09fd173c8f478 6 + - commit: 0c1ee36649c20c0713a0ad0fd20209c0154b8550 7 7 - https://tangled.org/margin.at/margin.git (ref: main) 8 - - commit: 87cca4daaa23df443e7d53aaf58af59f06e4c4c9 8 + - commit: ac7f76cb2ce7d27087825178d95e8d267b524d88
+11
lexicons/at/margin/profile.json
··· 10 10 "type": "object", 11 11 "required": ["createdAt"], 12 12 "properties": { 13 + "displayName": { 14 + "type": "string", 15 + "maxLength": 640, 16 + "description": "Display name for the user." 17 + }, 18 + "avatar": { 19 + "type": "blob", 20 + "accept": ["image/png", "image/jpeg"], 21 + "maxSize": 1000000, 22 + "description": "User avatar image." 23 + }, 13 24 "bio": { 14 25 "type": "string", 15 26 "maxLength": 5000,
+2 -2
manifest.json
··· 1 1 { 2 2 "id": "atmark", 3 3 "name": "ATmark", 4 - "version": "0.1.3", 4 + "version": "0.1.9", 5 5 "minAppVersion": "0.15.0", 6 - "description": "Obsidian plugin for AT Protocol bookmark platforms", 6 + "description": "View and manage AT Protocol bookmarks.", 7 7 "author": "treethought", 8 8 "authorUrl": "https://github.com/treethought", 9 9 "isDesktopOnly": false
-5515
package-lock.json
··· 1 - { 2 - "name": "obsidian-sample-plugin", 3 - "version": "1.0.0", 4 - "lockfileVersion": 3, 5 - "requires": true, 6 - "packages": { 7 - "": { 8 - "name": "obsidian-sample-plugin", 9 - "version": "1.0.0", 10 - "license": "0-BSD", 11 - "dependencies": { 12 - "@atcute/atproto": "^3.1.10", 13 - "@atcute/bluesky": "^3.2.15", 14 - "@atcute/client": "^4.2.1", 15 - "@atcute/lex-cli": "^2.5.2", 16 - "@atcute/oauth-browser-client": "^2.0.3", 17 - "obsidian": "latest" 18 - }, 19 - "devDependencies": { 20 - "@eslint/js": "9.30.1", 21 - "@types/node": "^16.11.6", 22 - "esbuild": "0.25.5", 23 - "eslint-plugin-obsidianmd": "0.1.9", 24 - "globals": "14.0.0", 25 - "jiti": "2.6.1", 26 - "tslib": "2.4.0", 27 - "typescript": "^5.8.3", 28 - "typescript-eslint": "8.35.1" 29 - } 30 - }, 31 - "node_modules/@atcute/atproto": { 32 - "version": "3.1.10", 33 - "resolved": "https://registry.npmjs.org/@atcute/atproto/-/atproto-3.1.10.tgz", 34 - "integrity": "sha512-+GKZpOc0PJcdWMQEkTfg/rSNDAAHxmAUGBl60g2az15etqJn5WaUPNGFE2sB7hKpwi5Ue2h/L0OacINcE/JDDQ==", 35 - "license": "0BSD", 36 - "dependencies": { 37 - "@atcute/lexicons": "^1.2.6" 38 - } 39 - }, 40 - "node_modules/@atcute/bluesky": { 41 - "version": "3.2.15", 42 - "resolved": "https://registry.npmjs.org/@atcute/bluesky/-/bluesky-3.2.15.tgz", 43 - "integrity": "sha512-H4RW3WffjfdKvOZ9issEUQnuSR4KfuAwwJnYu0fclA9VDa99JTJ+pa8tTl9lFeBV9DINtWJAx7rdIbICoVCstQ==", 44 - "license": "0BSD", 45 - "dependencies": { 46 - "@atcute/atproto": "^3.1.10", 47 - "@atcute/lexicons": "^1.2.6" 48 - } 49 - }, 50 - "node_modules/@atcute/car": { 51 - "version": "5.1.0", 52 - "resolved": "https://registry.npmjs.org/@atcute/car/-/car-5.1.0.tgz", 53 - "integrity": "sha512-W9axHVrwIkZJaeN/VQ1LyyU3b95wHBjQnrREouxygvmvWd1lmjFvF8Si8b0AG0VkWJ6h7h6qhOeUATynBzBFIg==", 54 - "license": "0BSD", 55 - "dependencies": { 56 - "@atcute/cbor": "^2.3.0", 57 - "@atcute/cid": "^2.4.0", 58 - "@atcute/uint8array": "^1.0.6", 59 - "@atcute/varint": "^1.0.3" 60 - } 61 - }, 62 - "node_modules/@atcute/cbor": { 63 - "version": "2.3.0", 64 - "resolved": "https://registry.npmjs.org/@atcute/cbor/-/cbor-2.3.0.tgz", 65 - "integrity": "sha512-7G2AndkfYzIXMBOBqUPUWP6oIJJm77KY5nYzS4Mr5NNxnmnrBrXEQqp+seCE3X5TV8FUSWQK5YRTU87uPjafMQ==", 66 - "license": "0BSD", 67 - "dependencies": { 68 - "@atcute/cid": "^2.4.0", 69 - "@atcute/multibase": "^1.1.6", 70 - "@atcute/uint8array": "^1.0.6" 71 - } 72 - }, 73 - "node_modules/@atcute/cid": { 74 - "version": "2.4.0", 75 - "resolved": "https://registry.npmjs.org/@atcute/cid/-/cid-2.4.0.tgz", 76 - "integrity": "sha512-6+5u9MpUrgSRQ94z7vaIX4BYk8fYr2KXUBS+rrr2NhlPy8xam8nbTlmd3hvBbtpSwShbhRAE4tA5Ab7eYUp2Yw==", 77 - "license": "0BSD", 78 - "dependencies": { 79 - "@atcute/multibase": "^1.1.6", 80 - "@atcute/uint8array": "^1.0.6" 81 - } 82 - }, 83 - "node_modules/@atcute/client": { 84 - "version": "4.2.1", 85 - "resolved": "https://registry.npmjs.org/@atcute/client/-/client-4.2.1.tgz", 86 - "integrity": "sha512-ZBFM2pW075JtgGFu5g7HHZBecrClhlcNH8GVP9Zz1aViWR+cjjBsTpeE63rJs+FCOHFYlirUyo5L8SGZ4kMINw==", 87 - "license": "0BSD", 88 - "dependencies": { 89 - "@atcute/identity": "^1.1.3", 90 - "@atcute/lexicons": "^1.2.6" 91 - } 92 - }, 93 - "node_modules/@atcute/crypto": { 94 - "version": "2.3.0", 95 - "resolved": "https://registry.npmjs.org/@atcute/crypto/-/crypto-2.3.0.tgz", 96 - "integrity": "sha512-w5pkJKCjbNMQu+F4JRHbR3ROQyhi1wbn+GSC6WDQamcYHkZmEZk1/eoI354bIQOOfkEM6aFLv718iskrkon4GQ==", 97 - "license": "0BSD", 98 - "dependencies": { 99 - "@atcute/multibase": "^1.1.6", 100 - "@atcute/uint8array": "^1.0.6", 101 - "@noble/secp256k1": "^3.0.0" 102 - } 103 - }, 104 - "node_modules/@atcute/identity": { 105 - "version": "1.1.3", 106 - "resolved": "https://registry.npmjs.org/@atcute/identity/-/identity-1.1.3.tgz", 107 - "integrity": "sha512-oIqPoI8TwWeQxvcLmFEZLdN2XdWcaLVtlm8pNk0E72As9HNzzD9pwKPrLr3rmTLRIoULPPFmq9iFNsTeCIU9ng==", 108 - "license": "0BSD", 109 - "peer": true, 110 - "dependencies": { 111 - "@atcute/lexicons": "^1.2.4", 112 - "@badrap/valita": "^0.4.6" 113 - } 114 - }, 115 - "node_modules/@atcute/identity-resolver": { 116 - "version": "1.2.2", 117 - "resolved": "https://registry.npmjs.org/@atcute/identity-resolver/-/identity-resolver-1.2.2.tgz", 118 - "integrity": "sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw==", 119 - "license": "0BSD", 120 - "peer": true, 121 - "dependencies": { 122 - "@atcute/lexicons": "^1.2.6", 123 - "@atcute/util-fetch": "^1.0.5", 124 - "@badrap/valita": "^0.4.6" 125 - }, 126 - "peerDependencies": { 127 - "@atcute/identity": "^1.0.0" 128 - } 129 - }, 130 - "node_modules/@atcute/lex-cli": { 131 - "version": "2.5.2", 132 - "resolved": "https://registry.npmjs.org/@atcute/lex-cli/-/lex-cli-2.5.2.tgz", 133 - "integrity": "sha512-u3xeu7uF7mAgAErYpXvdUaH2bxpthGWLg+vUf20cejWZHBH/dAzL4ixLRjw/39WwoVmmCQDTde79WTPoBjuhpg==", 134 - "license": "0BSD", 135 - "dependencies": { 136 - "@atcute/identity": "^1.1.3", 137 - "@atcute/identity-resolver": "^1.2.0", 138 - "@atcute/lexicon-doc": "^2.0.5", 139 - "@atcute/lexicon-resolver": "^0.1.5", 140 - "@atcute/lexicons": "^1.2.5", 141 - "@badrap/valita": "^0.4.6", 142 - "@optique/core": "^0.6.3", 143 - "@optique/run": "^0.6.3", 144 - "picocolors": "^1.1.1", 145 - "prettier": "^3.7.1" 146 - }, 147 - "bin": { 148 - "lex-cli": "cli.mjs" 149 - } 150 - }, 151 - "node_modules/@atcute/lexicon-doc": { 152 - "version": "2.0.6", 153 - "resolved": "https://registry.npmjs.org/@atcute/lexicon-doc/-/lexicon-doc-2.0.6.tgz", 154 - "integrity": "sha512-iDYJkuom+tIw3zIvU1ggCEVFfReXKfOUtIhpY2kEg2kQeSfMB75F+8k1QOpeAQBetyWYmjsHqBuSUX9oQS6L1Q==", 155 - "license": "0BSD", 156 - "dependencies": { 157 - "@atcute/identity": "^1.1.3", 158 - "@atcute/lexicons": "^1.2.6", 159 - "@atcute/uint8array": "^1.0.6", 160 - "@atcute/util-text": "^0.0.1", 161 - "@badrap/valita": "^0.4.6" 162 - } 163 - }, 164 - "node_modules/@atcute/lexicon-resolver": { 165 - "version": "0.1.6", 166 - "resolved": "https://registry.npmjs.org/@atcute/lexicon-resolver/-/lexicon-resolver-0.1.6.tgz", 167 - "integrity": "sha512-wJC/ChmpP7k+ywpOd07CMvioXjIGaFpF3bDwXLi/086LYjSWHOvtW6pyC+mqP5wLhjyH2hn4wmi77Buew1l1aw==", 168 - "license": "0BSD", 169 - "dependencies": { 170 - "@atcute/crypto": "^2.3.0", 171 - "@atcute/lexicon-doc": "^2.0.6", 172 - "@atcute/lexicons": "^1.2.6", 173 - "@atcute/repo": "^0.1.1", 174 - "@atcute/util-fetch": "^1.0.5", 175 - "@badrap/valita": "^0.4.6" 176 - }, 177 - "peerDependencies": { 178 - "@atcute/identity": "^1.1.0", 179 - "@atcute/identity-resolver": "^1.1.3" 180 - } 181 - }, 182 - "node_modules/@atcute/lexicons": { 183 - "version": "1.2.6", 184 - "resolved": "https://registry.npmjs.org/@atcute/lexicons/-/lexicons-1.2.6.tgz", 185 - "integrity": "sha512-s76UQd8D+XmHIzrjD9CJ9SOOeeLPHc+sMmcj7UFakAW/dDFXc579fcRdRfuUKvXBL5v1Gs2VgDdlh/IvvQZAwA==", 186 - "license": "0BSD", 187 - "dependencies": { 188 - "@atcute/uint8array": "^1.0.6", 189 - "@atcute/util-text": "^0.0.1", 190 - "@standard-schema/spec": "^1.1.0", 191 - "esm-env": "^1.2.2" 192 - } 193 - }, 194 - "node_modules/@atcute/mst": { 195 - "version": "0.1.2", 196 - "resolved": "https://registry.npmjs.org/@atcute/mst/-/mst-0.1.2.tgz", 197 - "integrity": "sha512-Oz5CZTjqauEJLT9B+zkoy/mjl216DrjCxJFrguRV3N+1NkIbCfAcSRf3UDSNjfzDzBkJvC1WjA/3oQkm83duPg==", 198 - "license": "0BSD", 199 - "dependencies": { 200 - "@atcute/cbor": "^2.3.0", 201 - "@atcute/cid": "^2.4.0", 202 - "@atcute/uint8array": "^1.0.6" 203 - } 204 - }, 205 - "node_modules/@atcute/multibase": { 206 - "version": "1.1.6", 207 - "resolved": "https://registry.npmjs.org/@atcute/multibase/-/multibase-1.1.6.tgz", 208 - "integrity": "sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg==", 209 - "license": "0BSD", 210 - "dependencies": { 211 - "@atcute/uint8array": "^1.0.5" 212 - } 213 - }, 214 - "node_modules/@atcute/oauth-browser-client": { 215 - "version": "2.0.3", 216 - "resolved": "https://registry.npmjs.org/@atcute/oauth-browser-client/-/oauth-browser-client-2.0.3.tgz", 217 - "integrity": "sha512-rzUjwhjE4LRRKdQnCFQag/zXRZMEAB1hhBoLfnoQuHwWbmDUCL7fzwC3jRhDPp3om8XaYNDj8a/iqRip0wRqoQ==", 218 - "license": "0BSD", 219 - "dependencies": { 220 - "@atcute/client": "^4.1.1", 221 - "@atcute/identity-resolver": "^1.2.0", 222 - "@atcute/lexicons": "^1.2.5", 223 - "@atcute/multibase": "^1.1.6", 224 - "@atcute/uint8array": "^1.0.6", 225 - "nanoid": "^5.1.6" 226 - } 227 - }, 228 - "node_modules/@atcute/repo": { 229 - "version": "0.1.1", 230 - "resolved": "https://registry.npmjs.org/@atcute/repo/-/repo-0.1.1.tgz", 231 - "integrity": "sha512-P5aWjt3bvcquUkUmGPslF0naAfLGRHse5Qdz9/RJYrFuoH0iiEMyRnW6M+3ksOe20GPsMnbq71WbzzFkRFPBtg==", 232 - "license": "0BSD", 233 - "dependencies": { 234 - "@atcute/car": "^5.0.0", 235 - "@atcute/cbor": "^2.2.8", 236 - "@atcute/cid": "^2.2.6", 237 - "@atcute/crypto": "^2.3.0", 238 - "@atcute/lexicons": "^1.2.5", 239 - "@atcute/mst": "^0.1.0", 240 - "@atcute/uint8array": "^1.0.6" 241 - } 242 - }, 243 - "node_modules/@atcute/uint8array": { 244 - "version": "1.0.6", 245 - "resolved": "https://registry.npmjs.org/@atcute/uint8array/-/uint8array-1.0.6.tgz", 246 - "integrity": "sha512-ucfRBQc7BFT8n9eCyGOzDHEMKF/nZwhS2pPao4Xtab1ML3HdFYcX2DM1tadCzas85QTGxHe5urnUAAcNKGRi9A==", 247 - "license": "0BSD" 248 - }, 249 - "node_modules/@atcute/util-fetch": { 250 - "version": "1.0.5", 251 - "resolved": "https://registry.npmjs.org/@atcute/util-fetch/-/util-fetch-1.0.5.tgz", 252 - "integrity": "sha512-qjHj01BGxjSjIFdPiAjSARnodJIIyKxnCMMEcXMESo9TAyND6XZQqrie5fia+LlYWVXdpsTds8uFQwc9jdKTig==", 253 - "license": "0BSD", 254 - "dependencies": { 255 - "@badrap/valita": "^0.4.6" 256 - } 257 - }, 258 - "node_modules/@atcute/util-text": { 259 - "version": "0.0.1", 260 - "resolved": "https://registry.npmjs.org/@atcute/util-text/-/util-text-0.0.1.tgz", 261 - "integrity": "sha512-t1KZqvn0AYy+h2KcJyHnKF9aEqfRfMUmyY8j1ELtAEIgqN9CxINAjxnoRCJIFUlvWzb+oY3uElQL/Vyk3yss0g==", 262 - "license": "0BSD", 263 - "dependencies": { 264 - "unicode-segmenter": "^0.14.4" 265 - } 266 - }, 267 - "node_modules/@atcute/varint": { 268 - "version": "1.0.3", 269 - "resolved": "https://registry.npmjs.org/@atcute/varint/-/varint-1.0.3.tgz", 270 - "integrity": "sha512-fdvMPyBB+McDT+Ai5e9RwEbwYV4yjZ60S2Dn5PTjGqUyxvoCH1z42viuheDZRUDkmfQehXJTZ5az7dSozVNtog==", 271 - "license": "0BSD" 272 - }, 273 - "node_modules/@badrap/valita": { 274 - "version": "0.4.6", 275 - "resolved": "https://registry.npmjs.org/@badrap/valita/-/valita-0.4.6.tgz", 276 - "integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==", 277 - "license": "MIT", 278 - "engines": { 279 - "node": ">= 18" 280 - } 281 - }, 282 - "node_modules/@codemirror/state": { 283 - "version": "6.5.0", 284 - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.0.tgz", 285 - "integrity": "sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==", 286 - "license": "MIT", 287 - "peer": true, 288 - "dependencies": { 289 - "@marijn/find-cluster-break": "^1.0.0" 290 - } 291 - }, 292 - "node_modules/@codemirror/view": { 293 - "version": "6.38.6", 294 - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", 295 - "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", 296 - "license": "MIT", 297 - "peer": true, 298 - "dependencies": { 299 - "@codemirror/state": "^6.5.0", 300 - "crelt": "^1.0.6", 301 - "style-mod": "^4.1.0", 302 - "w3c-keyname": "^2.2.4" 303 - } 304 - }, 305 - "node_modules/@esbuild/aix-ppc64": { 306 - "version": "0.25.5", 307 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", 308 - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", 309 - "cpu": [ 310 - "ppc64" 311 - ], 312 - "dev": true, 313 - "license": "MIT", 314 - "optional": true, 315 - "os": [ 316 - "aix" 317 - ], 318 - "engines": { 319 - "node": ">=18" 320 - } 321 - }, 322 - "node_modules/@esbuild/android-arm": { 323 - "version": "0.25.5", 324 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", 325 - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", 326 - "cpu": [ 327 - "arm" 328 - ], 329 - "dev": true, 330 - "license": "MIT", 331 - "optional": true, 332 - "os": [ 333 - "android" 334 - ], 335 - "engines": { 336 - "node": ">=18" 337 - } 338 - }, 339 - "node_modules/@esbuild/android-arm64": { 340 - "version": "0.25.5", 341 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", 342 - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", 343 - "cpu": [ 344 - "arm64" 345 - ], 346 - "dev": true, 347 - "license": "MIT", 348 - "optional": true, 349 - "os": [ 350 - "android" 351 - ], 352 - "engines": { 353 - "node": ">=18" 354 - } 355 - }, 356 - "node_modules/@esbuild/android-x64": { 357 - "version": "0.25.5", 358 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", 359 - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", 360 - "cpu": [ 361 - "x64" 362 - ], 363 - "dev": true, 364 - "license": "MIT", 365 - "optional": true, 366 - "os": [ 367 - "android" 368 - ], 369 - "engines": { 370 - "node": ">=18" 371 - } 372 - }, 373 - "node_modules/@esbuild/darwin-arm64": { 374 - "version": "0.25.5", 375 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", 376 - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", 377 - "cpu": [ 378 - "arm64" 379 - ], 380 - "dev": true, 381 - "license": "MIT", 382 - "optional": true, 383 - "os": [ 384 - "darwin" 385 - ], 386 - "engines": { 387 - "node": ">=18" 388 - } 389 - }, 390 - "node_modules/@esbuild/darwin-x64": { 391 - "version": "0.25.5", 392 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", 393 - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", 394 - "cpu": [ 395 - "x64" 396 - ], 397 - "dev": true, 398 - "license": "MIT", 399 - "optional": true, 400 - "os": [ 401 - "darwin" 402 - ], 403 - "engines": { 404 - "node": ">=18" 405 - } 406 - }, 407 - "node_modules/@esbuild/freebsd-arm64": { 408 - "version": "0.25.5", 409 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", 410 - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", 411 - "cpu": [ 412 - "arm64" 413 - ], 414 - "dev": true, 415 - "license": "MIT", 416 - "optional": true, 417 - "os": [ 418 - "freebsd" 419 - ], 420 - "engines": { 421 - "node": ">=18" 422 - } 423 - }, 424 - "node_modules/@esbuild/freebsd-x64": { 425 - "version": "0.25.5", 426 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", 427 - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", 428 - "cpu": [ 429 - "x64" 430 - ], 431 - "dev": true, 432 - "license": "MIT", 433 - "optional": true, 434 - "os": [ 435 - "freebsd" 436 - ], 437 - "engines": { 438 - "node": ">=18" 439 - } 440 - }, 441 - "node_modules/@esbuild/linux-arm": { 442 - "version": "0.25.5", 443 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", 444 - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", 445 - "cpu": [ 446 - "arm" 447 - ], 448 - "dev": true, 449 - "license": "MIT", 450 - "optional": true, 451 - "os": [ 452 - "linux" 453 - ], 454 - "engines": { 455 - "node": ">=18" 456 - } 457 - }, 458 - "node_modules/@esbuild/linux-arm64": { 459 - "version": "0.25.5", 460 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", 461 - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", 462 - "cpu": [ 463 - "arm64" 464 - ], 465 - "dev": true, 466 - "license": "MIT", 467 - "optional": true, 468 - "os": [ 469 - "linux" 470 - ], 471 - "engines": { 472 - "node": ">=18" 473 - } 474 - }, 475 - "node_modules/@esbuild/linux-ia32": { 476 - "version": "0.25.5", 477 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", 478 - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", 479 - "cpu": [ 480 - "ia32" 481 - ], 482 - "dev": true, 483 - "license": "MIT", 484 - "optional": true, 485 - "os": [ 486 - "linux" 487 - ], 488 - "engines": { 489 - "node": ">=18" 490 - } 491 - }, 492 - "node_modules/@esbuild/linux-loong64": { 493 - "version": "0.25.5", 494 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", 495 - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", 496 - "cpu": [ 497 - "loong64" 498 - ], 499 - "dev": true, 500 - "license": "MIT", 501 - "optional": true, 502 - "os": [ 503 - "linux" 504 - ], 505 - "engines": { 506 - "node": ">=18" 507 - } 508 - }, 509 - "node_modules/@esbuild/linux-mips64el": { 510 - "version": "0.25.5", 511 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", 512 - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", 513 - "cpu": [ 514 - "mips64el" 515 - ], 516 - "dev": true, 517 - "license": "MIT", 518 - "optional": true, 519 - "os": [ 520 - "linux" 521 - ], 522 - "engines": { 523 - "node": ">=18" 524 - } 525 - }, 526 - "node_modules/@esbuild/linux-ppc64": { 527 - "version": "0.25.5", 528 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", 529 - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", 530 - "cpu": [ 531 - "ppc64" 532 - ], 533 - "dev": true, 534 - "license": "MIT", 535 - "optional": true, 536 - "os": [ 537 - "linux" 538 - ], 539 - "engines": { 540 - "node": ">=18" 541 - } 542 - }, 543 - "node_modules/@esbuild/linux-riscv64": { 544 - "version": "0.25.5", 545 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", 546 - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", 547 - "cpu": [ 548 - "riscv64" 549 - ], 550 - "dev": true, 551 - "license": "MIT", 552 - "optional": true, 553 - "os": [ 554 - "linux" 555 - ], 556 - "engines": { 557 - "node": ">=18" 558 - } 559 - }, 560 - "node_modules/@esbuild/linux-s390x": { 561 - "version": "0.25.5", 562 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", 563 - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", 564 - "cpu": [ 565 - "s390x" 566 - ], 567 - "dev": true, 568 - "license": "MIT", 569 - "optional": true, 570 - "os": [ 571 - "linux" 572 - ], 573 - "engines": { 574 - "node": ">=18" 575 - } 576 - }, 577 - "node_modules/@esbuild/linux-x64": { 578 - "version": "0.25.5", 579 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", 580 - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", 581 - "cpu": [ 582 - "x64" 583 - ], 584 - "dev": true, 585 - "license": "MIT", 586 - "optional": true, 587 - "os": [ 588 - "linux" 589 - ], 590 - "engines": { 591 - "node": ">=18" 592 - } 593 - }, 594 - "node_modules/@esbuild/netbsd-arm64": { 595 - "version": "0.25.5", 596 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", 597 - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", 598 - "cpu": [ 599 - "arm64" 600 - ], 601 - "dev": true, 602 - "license": "MIT", 603 - "optional": true, 604 - "os": [ 605 - "netbsd" 606 - ], 607 - "engines": { 608 - "node": ">=18" 609 - } 610 - }, 611 - "node_modules/@esbuild/netbsd-x64": { 612 - "version": "0.25.5", 613 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", 614 - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", 615 - "cpu": [ 616 - "x64" 617 - ], 618 - "dev": true, 619 - "license": "MIT", 620 - "optional": true, 621 - "os": [ 622 - "netbsd" 623 - ], 624 - "engines": { 625 - "node": ">=18" 626 - } 627 - }, 628 - "node_modules/@esbuild/openbsd-arm64": { 629 - "version": "0.25.5", 630 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", 631 - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", 632 - "cpu": [ 633 - "arm64" 634 - ], 635 - "dev": true, 636 - "license": "MIT", 637 - "optional": true, 638 - "os": [ 639 - "openbsd" 640 - ], 641 - "engines": { 642 - "node": ">=18" 643 - } 644 - }, 645 - "node_modules/@esbuild/openbsd-x64": { 646 - "version": "0.25.5", 647 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", 648 - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", 649 - "cpu": [ 650 - "x64" 651 - ], 652 - "dev": true, 653 - "license": "MIT", 654 - "optional": true, 655 - "os": [ 656 - "openbsd" 657 - ], 658 - "engines": { 659 - "node": ">=18" 660 - } 661 - }, 662 - "node_modules/@esbuild/sunos-x64": { 663 - "version": "0.25.5", 664 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", 665 - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", 666 - "cpu": [ 667 - "x64" 668 - ], 669 - "dev": true, 670 - "license": "MIT", 671 - "optional": true, 672 - "os": [ 673 - "sunos" 674 - ], 675 - "engines": { 676 - "node": ">=18" 677 - } 678 - }, 679 - "node_modules/@esbuild/win32-arm64": { 680 - "version": "0.25.5", 681 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", 682 - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", 683 - "cpu": [ 684 - "arm64" 685 - ], 686 - "dev": true, 687 - "license": "MIT", 688 - "optional": true, 689 - "os": [ 690 - "win32" 691 - ], 692 - "engines": { 693 - "node": ">=18" 694 - } 695 - }, 696 - "node_modules/@esbuild/win32-ia32": { 697 - "version": "0.25.5", 698 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", 699 - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", 700 - "cpu": [ 701 - "ia32" 702 - ], 703 - "dev": true, 704 - "license": "MIT", 705 - "optional": true, 706 - "os": [ 707 - "win32" 708 - ], 709 - "engines": { 710 - "node": ">=18" 711 - } 712 - }, 713 - "node_modules/@esbuild/win32-x64": { 714 - "version": "0.25.5", 715 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", 716 - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", 717 - "cpu": [ 718 - "x64" 719 - ], 720 - "dev": true, 721 - "license": "MIT", 722 - "optional": true, 723 - "os": [ 724 - "win32" 725 - ], 726 - "engines": { 727 - "node": ">=18" 728 - } 729 - }, 730 - "node_modules/@eslint-community/eslint-utils": { 731 - "version": "4.9.0", 732 - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", 733 - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", 734 - "dev": true, 735 - "license": "MIT", 736 - "dependencies": { 737 - "eslint-visitor-keys": "^3.4.3" 738 - }, 739 - "engines": { 740 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 741 - }, 742 - "funding": { 743 - "url": "https://opencollective.com/eslint" 744 - }, 745 - "peerDependencies": { 746 - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 747 - } 748 - }, 749 - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 750 - "version": "3.4.3", 751 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 752 - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 753 - "dev": true, 754 - "license": "Apache-2.0", 755 - "engines": { 756 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 757 - }, 758 - "funding": { 759 - "url": "https://opencollective.com/eslint" 760 - } 761 - }, 762 - "node_modules/@eslint-community/regexpp": { 763 - "version": "4.12.2", 764 - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", 765 - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", 766 - "dev": true, 767 - "license": "MIT", 768 - "engines": { 769 - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 770 - } 771 - }, 772 - "node_modules/@eslint/config-array": { 773 - "version": "0.21.1", 774 - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", 775 - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", 776 - "dev": true, 777 - "license": "Apache-2.0", 778 - "dependencies": { 779 - "@eslint/object-schema": "^2.1.7", 780 - "debug": "^4.3.1", 781 - "minimatch": "^3.1.2" 782 - }, 783 - "engines": { 784 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 785 - } 786 - }, 787 - "node_modules/@eslint/config-helpers": { 788 - "version": "0.4.2", 789 - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", 790 - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", 791 - "dev": true, 792 - "license": "Apache-2.0", 793 - "dependencies": { 794 - "@eslint/core": "^0.17.0" 795 - }, 796 - "engines": { 797 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 798 - } 799 - }, 800 - "node_modules/@eslint/core": { 801 - "version": "0.17.0", 802 - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", 803 - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", 804 - "dev": true, 805 - "license": "Apache-2.0", 806 - "dependencies": { 807 - "@types/json-schema": "^7.0.15" 808 - }, 809 - "engines": { 810 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 811 - } 812 - }, 813 - "node_modules/@eslint/eslintrc": { 814 - "version": "3.3.1", 815 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", 816 - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", 817 - "dev": true, 818 - "license": "MIT", 819 - "dependencies": { 820 - "ajv": "^6.12.4", 821 - "debug": "^4.3.2", 822 - "espree": "^10.0.1", 823 - "globals": "^14.0.0", 824 - "ignore": "^5.2.0", 825 - "import-fresh": "^3.2.1", 826 - "js-yaml": "^4.1.0", 827 - "minimatch": "^3.1.2", 828 - "strip-json-comments": "^3.1.1" 829 - }, 830 - "engines": { 831 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 832 - }, 833 - "funding": { 834 - "url": "https://opencollective.com/eslint" 835 - } 836 - }, 837 - "node_modules/@eslint/js": { 838 - "version": "9.30.1", 839 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz", 840 - "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==", 841 - "dev": true, 842 - "license": "MIT", 843 - "peer": true, 844 - "engines": { 845 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 846 - }, 847 - "funding": { 848 - "url": "https://eslint.org/donate" 849 - } 850 - }, 851 - "node_modules/@eslint/json": { 852 - "version": "0.14.0", 853 - "resolved": "https://registry.npmjs.org/@eslint/json/-/json-0.14.0.tgz", 854 - "integrity": "sha512-rvR/EZtvUG3p9uqrSmcDJPYSH7atmWr0RnFWN6m917MAPx82+zQgPUmDu0whPFG6XTyM0vB/hR6c1Q63OaYtCQ==", 855 - "dev": true, 856 - "license": "Apache-2.0", 857 - "peer": true, 858 - "dependencies": { 859 - "@eslint/core": "^0.17.0", 860 - "@eslint/plugin-kit": "^0.4.1", 861 - "@humanwhocodes/momoa": "^3.3.10", 862 - "natural-compare": "^1.4.0" 863 - }, 864 - "engines": { 865 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 866 - } 867 - }, 868 - "node_modules/@eslint/object-schema": { 869 - "version": "2.1.7", 870 - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", 871 - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", 872 - "dev": true, 873 - "license": "Apache-2.0", 874 - "engines": { 875 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 876 - } 877 - }, 878 - "node_modules/@eslint/plugin-kit": { 879 - "version": "0.4.1", 880 - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", 881 - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", 882 - "dev": true, 883 - "license": "Apache-2.0", 884 - "dependencies": { 885 - "@eslint/core": "^0.17.0", 886 - "levn": "^0.4.1" 887 - }, 888 - "engines": { 889 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 890 - } 891 - }, 892 - "node_modules/@humanfs/core": { 893 - "version": "0.19.1", 894 - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 895 - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 896 - "dev": true, 897 - "license": "Apache-2.0", 898 - "engines": { 899 - "node": ">=18.18.0" 900 - } 901 - }, 902 - "node_modules/@humanfs/node": { 903 - "version": "0.16.7", 904 - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", 905 - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", 906 - "dev": true, 907 - "license": "Apache-2.0", 908 - "dependencies": { 909 - "@humanfs/core": "^0.19.1", 910 - "@humanwhocodes/retry": "^0.4.0" 911 - }, 912 - "engines": { 913 - "node": ">=18.18.0" 914 - } 915 - }, 916 - "node_modules/@humanwhocodes/module-importer": { 917 - "version": "1.0.1", 918 - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 919 - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 920 - "dev": true, 921 - "license": "Apache-2.0", 922 - "engines": { 923 - "node": ">=12.22" 924 - }, 925 - "funding": { 926 - "type": "github", 927 - "url": "https://github.com/sponsors/nzakas" 928 - } 929 - }, 930 - "node_modules/@humanwhocodes/momoa": { 931 - "version": "3.3.10", 932 - "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.10.tgz", 933 - "integrity": "sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==", 934 - "dev": true, 935 - "license": "Apache-2.0", 936 - "engines": { 937 - "node": ">=18" 938 - } 939 - }, 940 - "node_modules/@humanwhocodes/retry": { 941 - "version": "0.4.3", 942 - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", 943 - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", 944 - "dev": true, 945 - "license": "Apache-2.0", 946 - "engines": { 947 - "node": ">=18.18" 948 - }, 949 - "funding": { 950 - "type": "github", 951 - "url": "https://github.com/sponsors/nzakas" 952 - } 953 - }, 954 - "node_modules/@marijn/find-cluster-break": { 955 - "version": "1.0.2", 956 - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", 957 - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", 958 - "license": "MIT" 959 - }, 960 - "node_modules/@microsoft/eslint-plugin-sdl": { 961 - "version": "1.1.0", 962 - "resolved": "https://registry.npmjs.org/@microsoft/eslint-plugin-sdl/-/eslint-plugin-sdl-1.1.0.tgz", 963 - "integrity": "sha512-dxdNHOemLnBhfY3eByrujX9KyLigcNtW8sU+axzWv5nLGcsSBeKW2YYyTpfPo1hV8YPOmIGnfA4fZHyKVtWqBQ==", 964 - "dev": true, 965 - "license": "MIT", 966 - "dependencies": { 967 - "eslint-plugin-n": "17.10.3", 968 - "eslint-plugin-react": "7.37.3", 969 - "eslint-plugin-security": "1.4.0" 970 - }, 971 - "engines": { 972 - "node": ">=18.0.0" 973 - }, 974 - "peerDependencies": { 975 - "eslint": "^9" 976 - } 977 - }, 978 - "node_modules/@microsoft/eslint-plugin-sdl/node_modules/eslint-plugin-security": { 979 - "version": "1.4.0", 980 - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", 981 - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", 982 - "dev": true, 983 - "license": "Apache-2.0", 984 - "dependencies": { 985 - "safe-regex": "^1.1.0" 986 - } 987 - }, 988 - "node_modules/@microsoft/eslint-plugin-sdl/node_modules/safe-regex": { 989 - "version": "1.1.0", 990 - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 991 - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", 992 - "dev": true, 993 - "license": "MIT", 994 - "dependencies": { 995 - "ret": "~0.1.10" 996 - } 997 - }, 998 - "node_modules/@noble/secp256k1": { 999 - "version": "3.0.0", 1000 - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-3.0.0.tgz", 1001 - "integrity": "sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==", 1002 - "license": "MIT", 1003 - "funding": { 1004 - "url": "https://paulmillr.com/funding/" 1005 - } 1006 - }, 1007 - "node_modules/@nodelib/fs.scandir": { 1008 - "version": "2.1.5", 1009 - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1010 - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1011 - "dev": true, 1012 - "license": "MIT", 1013 - "dependencies": { 1014 - "@nodelib/fs.stat": "2.0.5", 1015 - "run-parallel": "^1.1.9" 1016 - }, 1017 - "engines": { 1018 - "node": ">= 8" 1019 - } 1020 - }, 1021 - "node_modules/@nodelib/fs.stat": { 1022 - "version": "2.0.5", 1023 - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1024 - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1025 - "dev": true, 1026 - "license": "MIT", 1027 - "engines": { 1028 - "node": ">= 8" 1029 - } 1030 - }, 1031 - "node_modules/@nodelib/fs.walk": { 1032 - "version": "1.2.8", 1033 - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1034 - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1035 - "dev": true, 1036 - "license": "MIT", 1037 - "dependencies": { 1038 - "@nodelib/fs.scandir": "2.1.5", 1039 - "fastq": "^1.6.0" 1040 - }, 1041 - "engines": { 1042 - "node": ">= 8" 1043 - } 1044 - }, 1045 - "node_modules/@optique/core": { 1046 - "version": "0.6.11", 1047 - "resolved": "https://registry.npmjs.org/@optique/core/-/core-0.6.11.tgz", 1048 - "integrity": "sha512-GVLFihzBA1j78NFlkU5N1Lu0jRqET0k6Z66WK8VQKG/a3cxmCInVGSKMIdQG8i6pgC8wD5OizF6Y3QMztmhAxg==", 1049 - "funding": [ 1050 - "https://github.com/sponsors/dahlia" 1051 - ], 1052 - "license": "MIT", 1053 - "engines": { 1054 - "bun": ">=1.2.0", 1055 - "deno": ">=2.3.0", 1056 - "node": ">=20.0.0" 1057 - } 1058 - }, 1059 - "node_modules/@optique/run": { 1060 - "version": "0.6.11", 1061 - "resolved": "https://registry.npmjs.org/@optique/run/-/run-0.6.11.tgz", 1062 - "integrity": "sha512-tsXBEygGSzNpFK2gjsRlXBn7FiScUeLFWIZNpoAZ8iG85Km0/3K9xgqlQAXoQ+uEZBe4XplnzyCDvmEgbyNT8w==", 1063 - "funding": [ 1064 - "https://github.com/sponsors/dahlia" 1065 - ], 1066 - "license": "MIT", 1067 - "dependencies": { 1068 - "@optique/core": "0.6.11" 1069 - }, 1070 - "engines": { 1071 - "bun": ">=1.2.0", 1072 - "deno": ">=2.3.0", 1073 - "node": ">=20.0.0" 1074 - } 1075 - }, 1076 - "node_modules/@pkgr/core": { 1077 - "version": "0.1.2", 1078 - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", 1079 - "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==", 1080 - "dev": true, 1081 - "license": "MIT", 1082 - "engines": { 1083 - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" 1084 - }, 1085 - "funding": { 1086 - "url": "https://opencollective.com/unts" 1087 - } 1088 - }, 1089 - "node_modules/@rtsao/scc": { 1090 - "version": "1.1.0", 1091 - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", 1092 - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", 1093 - "dev": true, 1094 - "license": "MIT" 1095 - }, 1096 - "node_modules/@standard-schema/spec": { 1097 - "version": "1.1.0", 1098 - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", 1099 - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", 1100 - "license": "MIT" 1101 - }, 1102 - "node_modules/@types/codemirror": { 1103 - "version": "5.60.8", 1104 - "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz", 1105 - "integrity": "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==", 1106 - "license": "MIT", 1107 - "dependencies": { 1108 - "@types/tern": "*" 1109 - } 1110 - }, 1111 - "node_modules/@types/eslint": { 1112 - "version": "8.56.2", 1113 - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", 1114 - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", 1115 - "dev": true, 1116 - "license": "MIT", 1117 - "dependencies": { 1118 - "@types/estree": "*", 1119 - "@types/json-schema": "*" 1120 - } 1121 - }, 1122 - "node_modules/@types/estree": { 1123 - "version": "1.0.8", 1124 - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1125 - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1126 - "license": "MIT" 1127 - }, 1128 - "node_modules/@types/json-schema": { 1129 - "version": "7.0.15", 1130 - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 1131 - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 1132 - "dev": true, 1133 - "license": "MIT" 1134 - }, 1135 - "node_modules/@types/json5": { 1136 - "version": "0.0.29", 1137 - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", 1138 - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", 1139 - "dev": true, 1140 - "license": "MIT" 1141 - }, 1142 - "node_modules/@types/node": { 1143 - "version": "16.18.126", 1144 - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", 1145 - "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", 1146 - "dev": true, 1147 - "license": "MIT" 1148 - }, 1149 - "node_modules/@types/tern": { 1150 - "version": "0.23.9", 1151 - "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz", 1152 - "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==", 1153 - "license": "MIT", 1154 - "dependencies": { 1155 - "@types/estree": "*" 1156 - } 1157 - }, 1158 - "node_modules/@typescript-eslint/eslint-plugin": { 1159 - "version": "8.35.1", 1160 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz", 1161 - "integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==", 1162 - "dev": true, 1163 - "license": "MIT", 1164 - "dependencies": { 1165 - "@eslint-community/regexpp": "^4.10.0", 1166 - "@typescript-eslint/scope-manager": "8.35.1", 1167 - "@typescript-eslint/type-utils": "8.35.1", 1168 - "@typescript-eslint/utils": "8.35.1", 1169 - "@typescript-eslint/visitor-keys": "8.35.1", 1170 - "graphemer": "^1.4.0", 1171 - "ignore": "^7.0.0", 1172 - "natural-compare": "^1.4.0", 1173 - "ts-api-utils": "^2.1.0" 1174 - }, 1175 - "engines": { 1176 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1177 - }, 1178 - "funding": { 1179 - "type": "opencollective", 1180 - "url": "https://opencollective.com/typescript-eslint" 1181 - }, 1182 - "peerDependencies": { 1183 - "@typescript-eslint/parser": "^8.35.1", 1184 - "eslint": "^8.57.0 || ^9.0.0", 1185 - "typescript": ">=4.8.4 <5.9.0" 1186 - } 1187 - }, 1188 - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { 1189 - "version": "7.0.5", 1190 - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", 1191 - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", 1192 - "dev": true, 1193 - "license": "MIT", 1194 - "engines": { 1195 - "node": ">= 4" 1196 - } 1197 - }, 1198 - "node_modules/@typescript-eslint/parser": { 1199 - "version": "8.35.1", 1200 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz", 1201 - "integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==", 1202 - "dev": true, 1203 - "license": "MIT", 1204 - "peer": true, 1205 - "dependencies": { 1206 - "@typescript-eslint/scope-manager": "8.35.1", 1207 - "@typescript-eslint/types": "8.35.1", 1208 - "@typescript-eslint/typescript-estree": "8.35.1", 1209 - "@typescript-eslint/visitor-keys": "8.35.1", 1210 - "debug": "^4.3.4" 1211 - }, 1212 - "engines": { 1213 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1214 - }, 1215 - "funding": { 1216 - "type": "opencollective", 1217 - "url": "https://opencollective.com/typescript-eslint" 1218 - }, 1219 - "peerDependencies": { 1220 - "eslint": "^8.57.0 || ^9.0.0", 1221 - "typescript": ">=4.8.4 <5.9.0" 1222 - } 1223 - }, 1224 - "node_modules/@typescript-eslint/project-service": { 1225 - "version": "8.35.1", 1226 - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", 1227 - "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", 1228 - "dev": true, 1229 - "license": "MIT", 1230 - "dependencies": { 1231 - "@typescript-eslint/tsconfig-utils": "^8.35.1", 1232 - "@typescript-eslint/types": "^8.35.1", 1233 - "debug": "^4.3.4" 1234 - }, 1235 - "engines": { 1236 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1237 - }, 1238 - "funding": { 1239 - "type": "opencollective", 1240 - "url": "https://opencollective.com/typescript-eslint" 1241 - }, 1242 - "peerDependencies": { 1243 - "typescript": ">=4.8.4 <5.9.0" 1244 - } 1245 - }, 1246 - "node_modules/@typescript-eslint/scope-manager": { 1247 - "version": "8.35.1", 1248 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", 1249 - "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", 1250 - "dev": true, 1251 - "license": "MIT", 1252 - "dependencies": { 1253 - "@typescript-eslint/types": "8.35.1", 1254 - "@typescript-eslint/visitor-keys": "8.35.1" 1255 - }, 1256 - "engines": { 1257 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1258 - }, 1259 - "funding": { 1260 - "type": "opencollective", 1261 - "url": "https://opencollective.com/typescript-eslint" 1262 - } 1263 - }, 1264 - "node_modules/@typescript-eslint/tsconfig-utils": { 1265 - "version": "8.35.1", 1266 - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", 1267 - "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", 1268 - "dev": true, 1269 - "license": "MIT", 1270 - "engines": { 1271 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1272 - }, 1273 - "funding": { 1274 - "type": "opencollective", 1275 - "url": "https://opencollective.com/typescript-eslint" 1276 - }, 1277 - "peerDependencies": { 1278 - "typescript": ">=4.8.4 <5.9.0" 1279 - } 1280 - }, 1281 - "node_modules/@typescript-eslint/type-utils": { 1282 - "version": "8.35.1", 1283 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz", 1284 - "integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==", 1285 - "dev": true, 1286 - "license": "MIT", 1287 - "dependencies": { 1288 - "@typescript-eslint/typescript-estree": "8.35.1", 1289 - "@typescript-eslint/utils": "8.35.1", 1290 - "debug": "^4.3.4", 1291 - "ts-api-utils": "^2.1.0" 1292 - }, 1293 - "engines": { 1294 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1295 - }, 1296 - "funding": { 1297 - "type": "opencollective", 1298 - "url": "https://opencollective.com/typescript-eslint" 1299 - }, 1300 - "peerDependencies": { 1301 - "eslint": "^8.57.0 || ^9.0.0", 1302 - "typescript": ">=4.8.4 <5.9.0" 1303 - } 1304 - }, 1305 - "node_modules/@typescript-eslint/types": { 1306 - "version": "8.35.1", 1307 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", 1308 - "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", 1309 - "dev": true, 1310 - "license": "MIT", 1311 - "engines": { 1312 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1313 - }, 1314 - "funding": { 1315 - "type": "opencollective", 1316 - "url": "https://opencollective.com/typescript-eslint" 1317 - } 1318 - }, 1319 - "node_modules/@typescript-eslint/typescript-estree": { 1320 - "version": "8.35.1", 1321 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", 1322 - "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", 1323 - "dev": true, 1324 - "license": "MIT", 1325 - "dependencies": { 1326 - "@typescript-eslint/project-service": "8.35.1", 1327 - "@typescript-eslint/tsconfig-utils": "8.35.1", 1328 - "@typescript-eslint/types": "8.35.1", 1329 - "@typescript-eslint/visitor-keys": "8.35.1", 1330 - "debug": "^4.3.4", 1331 - "fast-glob": "^3.3.2", 1332 - "is-glob": "^4.0.3", 1333 - "minimatch": "^9.0.4", 1334 - "semver": "^7.6.0", 1335 - "ts-api-utils": "^2.1.0" 1336 - }, 1337 - "engines": { 1338 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1339 - }, 1340 - "funding": { 1341 - "type": "opencollective", 1342 - "url": "https://opencollective.com/typescript-eslint" 1343 - }, 1344 - "peerDependencies": { 1345 - "typescript": ">=4.8.4 <5.9.0" 1346 - } 1347 - }, 1348 - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 1349 - "version": "2.0.2", 1350 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 1351 - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 1352 - "dev": true, 1353 - "license": "MIT", 1354 - "dependencies": { 1355 - "balanced-match": "^1.0.0" 1356 - } 1357 - }, 1358 - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 1359 - "version": "9.0.5", 1360 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1361 - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1362 - "dev": true, 1363 - "license": "ISC", 1364 - "dependencies": { 1365 - "brace-expansion": "^2.0.1" 1366 - }, 1367 - "engines": { 1368 - "node": ">=16 || 14 >=14.17" 1369 - }, 1370 - "funding": { 1371 - "url": "https://github.com/sponsors/isaacs" 1372 - } 1373 - }, 1374 - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { 1375 - "version": "7.7.3", 1376 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 1377 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 1378 - "dev": true, 1379 - "license": "ISC", 1380 - "bin": { 1381 - "semver": "bin/semver.js" 1382 - }, 1383 - "engines": { 1384 - "node": ">=10" 1385 - } 1386 - }, 1387 - "node_modules/@typescript-eslint/utils": { 1388 - "version": "8.35.1", 1389 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz", 1390 - "integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==", 1391 - "dev": true, 1392 - "license": "MIT", 1393 - "dependencies": { 1394 - "@eslint-community/eslint-utils": "^4.7.0", 1395 - "@typescript-eslint/scope-manager": "8.35.1", 1396 - "@typescript-eslint/types": "8.35.1", 1397 - "@typescript-eslint/typescript-estree": "8.35.1" 1398 - }, 1399 - "engines": { 1400 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1401 - }, 1402 - "funding": { 1403 - "type": "opencollective", 1404 - "url": "https://opencollective.com/typescript-eslint" 1405 - }, 1406 - "peerDependencies": { 1407 - "eslint": "^8.57.0 || ^9.0.0", 1408 - "typescript": ">=4.8.4 <5.9.0" 1409 - } 1410 - }, 1411 - "node_modules/@typescript-eslint/visitor-keys": { 1412 - "version": "8.35.1", 1413 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", 1414 - "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", 1415 - "dev": true, 1416 - "license": "MIT", 1417 - "dependencies": { 1418 - "@typescript-eslint/types": "8.35.1", 1419 - "eslint-visitor-keys": "^4.2.1" 1420 - }, 1421 - "engines": { 1422 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1423 - }, 1424 - "funding": { 1425 - "type": "opencollective", 1426 - "url": "https://opencollective.com/typescript-eslint" 1427 - } 1428 - }, 1429 - "node_modules/acorn": { 1430 - "version": "8.15.0", 1431 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 1432 - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 1433 - "dev": true, 1434 - "license": "MIT", 1435 - "peer": true, 1436 - "bin": { 1437 - "acorn": "bin/acorn" 1438 - }, 1439 - "engines": { 1440 - "node": ">=0.4.0" 1441 - } 1442 - }, 1443 - "node_modules/acorn-jsx": { 1444 - "version": "5.3.2", 1445 - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1446 - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1447 - "dev": true, 1448 - "license": "MIT", 1449 - "peerDependencies": { 1450 - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1451 - } 1452 - }, 1453 - "node_modules/ajv": { 1454 - "version": "6.12.6", 1455 - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1456 - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1457 - "dev": true, 1458 - "license": "MIT", 1459 - "dependencies": { 1460 - "fast-deep-equal": "^3.1.1", 1461 - "fast-json-stable-stringify": "^2.0.0", 1462 - "json-schema-traverse": "^0.4.1", 1463 - "uri-js": "^4.2.2" 1464 - }, 1465 - "funding": { 1466 - "type": "github", 1467 - "url": "https://github.com/sponsors/epoberezkin" 1468 - } 1469 - }, 1470 - "node_modules/ansi-styles": { 1471 - "version": "4.3.0", 1472 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1473 - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1474 - "dev": true, 1475 - "license": "MIT", 1476 - "dependencies": { 1477 - "color-convert": "^2.0.1" 1478 - }, 1479 - "engines": { 1480 - "node": ">=8" 1481 - }, 1482 - "funding": { 1483 - "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1484 - } 1485 - }, 1486 - "node_modules/argparse": { 1487 - "version": "2.0.1", 1488 - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1489 - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1490 - "dev": true, 1491 - "license": "Python-2.0" 1492 - }, 1493 - "node_modules/array-buffer-byte-length": { 1494 - "version": "1.0.2", 1495 - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", 1496 - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", 1497 - "dev": true, 1498 - "license": "MIT", 1499 - "dependencies": { 1500 - "call-bound": "^1.0.3", 1501 - "is-array-buffer": "^3.0.5" 1502 - }, 1503 - "engines": { 1504 - "node": ">= 0.4" 1505 - }, 1506 - "funding": { 1507 - "url": "https://github.com/sponsors/ljharb" 1508 - } 1509 - }, 1510 - "node_modules/array-includes": { 1511 - "version": "3.1.9", 1512 - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", 1513 - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", 1514 - "dev": true, 1515 - "license": "MIT", 1516 - "dependencies": { 1517 - "call-bind": "^1.0.8", 1518 - "call-bound": "^1.0.4", 1519 - "define-properties": "^1.2.1", 1520 - "es-abstract": "^1.24.0", 1521 - "es-object-atoms": "^1.1.1", 1522 - "get-intrinsic": "^1.3.0", 1523 - "is-string": "^1.1.1", 1524 - "math-intrinsics": "^1.1.0" 1525 - }, 1526 - "engines": { 1527 - "node": ">= 0.4" 1528 - }, 1529 - "funding": { 1530 - "url": "https://github.com/sponsors/ljharb" 1531 - } 1532 - }, 1533 - "node_modules/array.prototype.findlast": { 1534 - "version": "1.2.5", 1535 - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", 1536 - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", 1537 - "dev": true, 1538 - "license": "MIT", 1539 - "dependencies": { 1540 - "call-bind": "^1.0.7", 1541 - "define-properties": "^1.2.1", 1542 - "es-abstract": "^1.23.2", 1543 - "es-errors": "^1.3.0", 1544 - "es-object-atoms": "^1.0.0", 1545 - "es-shim-unscopables": "^1.0.2" 1546 - }, 1547 - "engines": { 1548 - "node": ">= 0.4" 1549 - }, 1550 - "funding": { 1551 - "url": "https://github.com/sponsors/ljharb" 1552 - } 1553 - }, 1554 - "node_modules/array.prototype.findlastindex": { 1555 - "version": "1.2.6", 1556 - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", 1557 - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", 1558 - "dev": true, 1559 - "license": "MIT", 1560 - "dependencies": { 1561 - "call-bind": "^1.0.8", 1562 - "call-bound": "^1.0.4", 1563 - "define-properties": "^1.2.1", 1564 - "es-abstract": "^1.23.9", 1565 - "es-errors": "^1.3.0", 1566 - "es-object-atoms": "^1.1.1", 1567 - "es-shim-unscopables": "^1.1.0" 1568 - }, 1569 - "engines": { 1570 - "node": ">= 0.4" 1571 - }, 1572 - "funding": { 1573 - "url": "https://github.com/sponsors/ljharb" 1574 - } 1575 - }, 1576 - "node_modules/array.prototype.flat": { 1577 - "version": "1.3.3", 1578 - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", 1579 - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", 1580 - "dev": true, 1581 - "license": "MIT", 1582 - "dependencies": { 1583 - "call-bind": "^1.0.8", 1584 - "define-properties": "^1.2.1", 1585 - "es-abstract": "^1.23.5", 1586 - "es-shim-unscopables": "^1.0.2" 1587 - }, 1588 - "engines": { 1589 - "node": ">= 0.4" 1590 - }, 1591 - "funding": { 1592 - "url": "https://github.com/sponsors/ljharb" 1593 - } 1594 - }, 1595 - "node_modules/array.prototype.flatmap": { 1596 - "version": "1.3.3", 1597 - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", 1598 - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", 1599 - "dev": true, 1600 - "license": "MIT", 1601 - "dependencies": { 1602 - "call-bind": "^1.0.8", 1603 - "define-properties": "^1.2.1", 1604 - "es-abstract": "^1.23.5", 1605 - "es-shim-unscopables": "^1.0.2" 1606 - }, 1607 - "engines": { 1608 - "node": ">= 0.4" 1609 - }, 1610 - "funding": { 1611 - "url": "https://github.com/sponsors/ljharb" 1612 - } 1613 - }, 1614 - "node_modules/array.prototype.tosorted": { 1615 - "version": "1.1.4", 1616 - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", 1617 - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", 1618 - "dev": true, 1619 - "license": "MIT", 1620 - "dependencies": { 1621 - "call-bind": "^1.0.7", 1622 - "define-properties": "^1.2.1", 1623 - "es-abstract": "^1.23.3", 1624 - "es-errors": "^1.3.0", 1625 - "es-shim-unscopables": "^1.0.2" 1626 - }, 1627 - "engines": { 1628 - "node": ">= 0.4" 1629 - } 1630 - }, 1631 - "node_modules/arraybuffer.prototype.slice": { 1632 - "version": "1.0.4", 1633 - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", 1634 - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", 1635 - "dev": true, 1636 - "license": "MIT", 1637 - "dependencies": { 1638 - "array-buffer-byte-length": "^1.0.1", 1639 - "call-bind": "^1.0.8", 1640 - "define-properties": "^1.2.1", 1641 - "es-abstract": "^1.23.5", 1642 - "es-errors": "^1.3.0", 1643 - "get-intrinsic": "^1.2.6", 1644 - "is-array-buffer": "^3.0.4" 1645 - }, 1646 - "engines": { 1647 - "node": ">= 0.4" 1648 - }, 1649 - "funding": { 1650 - "url": "https://github.com/sponsors/ljharb" 1651 - } 1652 - }, 1653 - "node_modules/async-function": { 1654 - "version": "1.0.0", 1655 - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", 1656 - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", 1657 - "dev": true, 1658 - "license": "MIT", 1659 - "engines": { 1660 - "node": ">= 0.4" 1661 - } 1662 - }, 1663 - "node_modules/available-typed-arrays": { 1664 - "version": "1.0.7", 1665 - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", 1666 - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", 1667 - "dev": true, 1668 - "license": "MIT", 1669 - "dependencies": { 1670 - "possible-typed-array-names": "^1.0.0" 1671 - }, 1672 - "engines": { 1673 - "node": ">= 0.4" 1674 - }, 1675 - "funding": { 1676 - "url": "https://github.com/sponsors/ljharb" 1677 - } 1678 - }, 1679 - "node_modules/balanced-match": { 1680 - "version": "1.0.2", 1681 - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1682 - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1683 - "dev": true, 1684 - "license": "MIT" 1685 - }, 1686 - "node_modules/brace-expansion": { 1687 - "version": "1.1.12", 1688 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 1689 - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 1690 - "dev": true, 1691 - "license": "MIT", 1692 - "dependencies": { 1693 - "balanced-match": "^1.0.0", 1694 - "concat-map": "0.0.1" 1695 - } 1696 - }, 1697 - "node_modules/braces": { 1698 - "version": "3.0.3", 1699 - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1700 - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1701 - "dev": true, 1702 - "license": "MIT", 1703 - "dependencies": { 1704 - "fill-range": "^7.1.1" 1705 - }, 1706 - "engines": { 1707 - "node": ">=8" 1708 - } 1709 - }, 1710 - "node_modules/call-bind": { 1711 - "version": "1.0.8", 1712 - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", 1713 - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", 1714 - "dev": true, 1715 - "license": "MIT", 1716 - "dependencies": { 1717 - "call-bind-apply-helpers": "^1.0.0", 1718 - "es-define-property": "^1.0.0", 1719 - "get-intrinsic": "^1.2.4", 1720 - "set-function-length": "^1.2.2" 1721 - }, 1722 - "engines": { 1723 - "node": ">= 0.4" 1724 - }, 1725 - "funding": { 1726 - "url": "https://github.com/sponsors/ljharb" 1727 - } 1728 - }, 1729 - "node_modules/call-bind-apply-helpers": { 1730 - "version": "1.0.2", 1731 - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 1732 - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 1733 - "dev": true, 1734 - "license": "MIT", 1735 - "dependencies": { 1736 - "es-errors": "^1.3.0", 1737 - "function-bind": "^1.1.2" 1738 - }, 1739 - "engines": { 1740 - "node": ">= 0.4" 1741 - } 1742 - }, 1743 - "node_modules/call-bound": { 1744 - "version": "1.0.4", 1745 - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 1746 - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 1747 - "dev": true, 1748 - "license": "MIT", 1749 - "dependencies": { 1750 - "call-bind-apply-helpers": "^1.0.2", 1751 - "get-intrinsic": "^1.3.0" 1752 - }, 1753 - "engines": { 1754 - "node": ">= 0.4" 1755 - }, 1756 - "funding": { 1757 - "url": "https://github.com/sponsors/ljharb" 1758 - } 1759 - }, 1760 - "node_modules/callsites": { 1761 - "version": "3.1.0", 1762 - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1763 - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1764 - "dev": true, 1765 - "license": "MIT", 1766 - "engines": { 1767 - "node": ">=6" 1768 - } 1769 - }, 1770 - "node_modules/chalk": { 1771 - "version": "4.1.2", 1772 - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1773 - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1774 - "dev": true, 1775 - "license": "MIT", 1776 - "dependencies": { 1777 - "ansi-styles": "^4.1.0", 1778 - "supports-color": "^7.1.0" 1779 - }, 1780 - "engines": { 1781 - "node": ">=10" 1782 - }, 1783 - "funding": { 1784 - "url": "https://github.com/chalk/chalk?sponsor=1" 1785 - } 1786 - }, 1787 - "node_modules/color-convert": { 1788 - "version": "2.0.1", 1789 - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1790 - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1791 - "dev": true, 1792 - "license": "MIT", 1793 - "dependencies": { 1794 - "color-name": "~1.1.4" 1795 - }, 1796 - "engines": { 1797 - "node": ">=7.0.0" 1798 - } 1799 - }, 1800 - "node_modules/color-name": { 1801 - "version": "1.1.4", 1802 - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1803 - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1804 - "dev": true, 1805 - "license": "MIT" 1806 - }, 1807 - "node_modules/concat-map": { 1808 - "version": "0.0.1", 1809 - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1810 - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1811 - "dev": true, 1812 - "license": "MIT" 1813 - }, 1814 - "node_modules/crelt": { 1815 - "version": "1.0.6", 1816 - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", 1817 - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", 1818 - "license": "MIT" 1819 - }, 1820 - "node_modules/cross-spawn": { 1821 - "version": "7.0.6", 1822 - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1823 - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1824 - "dev": true, 1825 - "license": "MIT", 1826 - "dependencies": { 1827 - "path-key": "^3.1.0", 1828 - "shebang-command": "^2.0.0", 1829 - "which": "^2.0.1" 1830 - }, 1831 - "engines": { 1832 - "node": ">= 8" 1833 - } 1834 - }, 1835 - "node_modules/data-view-buffer": { 1836 - "version": "1.0.2", 1837 - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", 1838 - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", 1839 - "dev": true, 1840 - "license": "MIT", 1841 - "dependencies": { 1842 - "call-bound": "^1.0.3", 1843 - "es-errors": "^1.3.0", 1844 - "is-data-view": "^1.0.2" 1845 - }, 1846 - "engines": { 1847 - "node": ">= 0.4" 1848 - }, 1849 - "funding": { 1850 - "url": "https://github.com/sponsors/ljharb" 1851 - } 1852 - }, 1853 - "node_modules/data-view-byte-length": { 1854 - "version": "1.0.2", 1855 - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", 1856 - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", 1857 - "dev": true, 1858 - "license": "MIT", 1859 - "dependencies": { 1860 - "call-bound": "^1.0.3", 1861 - "es-errors": "^1.3.0", 1862 - "is-data-view": "^1.0.2" 1863 - }, 1864 - "engines": { 1865 - "node": ">= 0.4" 1866 - }, 1867 - "funding": { 1868 - "url": "https://github.com/sponsors/inspect-js" 1869 - } 1870 - }, 1871 - "node_modules/data-view-byte-offset": { 1872 - "version": "1.0.1", 1873 - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", 1874 - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", 1875 - "dev": true, 1876 - "license": "MIT", 1877 - "dependencies": { 1878 - "call-bound": "^1.0.2", 1879 - "es-errors": "^1.3.0", 1880 - "is-data-view": "^1.0.1" 1881 - }, 1882 - "engines": { 1883 - "node": ">= 0.4" 1884 - }, 1885 - "funding": { 1886 - "url": "https://github.com/sponsors/ljharb" 1887 - } 1888 - }, 1889 - "node_modules/debug": { 1890 - "version": "4.4.3", 1891 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1892 - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1893 - "dev": true, 1894 - "license": "MIT", 1895 - "dependencies": { 1896 - "ms": "^2.1.3" 1897 - }, 1898 - "engines": { 1899 - "node": ">=6.0" 1900 - }, 1901 - "peerDependenciesMeta": { 1902 - "supports-color": { 1903 - "optional": true 1904 - } 1905 - } 1906 - }, 1907 - "node_modules/deep-is": { 1908 - "version": "0.1.4", 1909 - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1910 - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1911 - "dev": true, 1912 - "license": "MIT" 1913 - }, 1914 - "node_modules/define-data-property": { 1915 - "version": "1.1.4", 1916 - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 1917 - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 1918 - "dev": true, 1919 - "license": "MIT", 1920 - "dependencies": { 1921 - "es-define-property": "^1.0.0", 1922 - "es-errors": "^1.3.0", 1923 - "gopd": "^1.0.1" 1924 - }, 1925 - "engines": { 1926 - "node": ">= 0.4" 1927 - }, 1928 - "funding": { 1929 - "url": "https://github.com/sponsors/ljharb" 1930 - } 1931 - }, 1932 - "node_modules/define-properties": { 1933 - "version": "1.2.1", 1934 - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 1935 - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 1936 - "dev": true, 1937 - "license": "MIT", 1938 - "dependencies": { 1939 - "define-data-property": "^1.0.1", 1940 - "has-property-descriptors": "^1.0.0", 1941 - "object-keys": "^1.1.1" 1942 - }, 1943 - "engines": { 1944 - "node": ">= 0.4" 1945 - }, 1946 - "funding": { 1947 - "url": "https://github.com/sponsors/ljharb" 1948 - } 1949 - }, 1950 - "node_modules/doctrine": { 1951 - "version": "2.1.0", 1952 - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 1953 - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 1954 - "dev": true, 1955 - "license": "Apache-2.0", 1956 - "dependencies": { 1957 - "esutils": "^2.0.2" 1958 - }, 1959 - "engines": { 1960 - "node": ">=0.10.0" 1961 - } 1962 - }, 1963 - "node_modules/dunder-proto": { 1964 - "version": "1.0.1", 1965 - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 1966 - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 1967 - "dev": true, 1968 - "license": "MIT", 1969 - "dependencies": { 1970 - "call-bind-apply-helpers": "^1.0.1", 1971 - "es-errors": "^1.3.0", 1972 - "gopd": "^1.2.0" 1973 - }, 1974 - "engines": { 1975 - "node": ">= 0.4" 1976 - } 1977 - }, 1978 - "node_modules/empathic": { 1979 - "version": "2.0.0", 1980 - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", 1981 - "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", 1982 - "dev": true, 1983 - "license": "MIT", 1984 - "engines": { 1985 - "node": ">=14" 1986 - } 1987 - }, 1988 - "node_modules/enhanced-resolve": { 1989 - "version": "5.18.3", 1990 - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", 1991 - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", 1992 - "dev": true, 1993 - "license": "MIT", 1994 - "dependencies": { 1995 - "graceful-fs": "^4.2.4", 1996 - "tapable": "^2.2.0" 1997 - }, 1998 - "engines": { 1999 - "node": ">=10.13.0" 2000 - } 2001 - }, 2002 - "node_modules/es-abstract": { 2003 - "version": "1.24.0", 2004 - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", 2005 - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", 2006 - "dev": true, 2007 - "license": "MIT", 2008 - "dependencies": { 2009 - "array-buffer-byte-length": "^1.0.2", 2010 - "arraybuffer.prototype.slice": "^1.0.4", 2011 - "available-typed-arrays": "^1.0.7", 2012 - "call-bind": "^1.0.8", 2013 - "call-bound": "^1.0.4", 2014 - "data-view-buffer": "^1.0.2", 2015 - "data-view-byte-length": "^1.0.2", 2016 - "data-view-byte-offset": "^1.0.1", 2017 - "es-define-property": "^1.0.1", 2018 - "es-errors": "^1.3.0", 2019 - "es-object-atoms": "^1.1.1", 2020 - "es-set-tostringtag": "^2.1.0", 2021 - "es-to-primitive": "^1.3.0", 2022 - "function.prototype.name": "^1.1.8", 2023 - "get-intrinsic": "^1.3.0", 2024 - "get-proto": "^1.0.1", 2025 - "get-symbol-description": "^1.1.0", 2026 - "globalthis": "^1.0.4", 2027 - "gopd": "^1.2.0", 2028 - "has-property-descriptors": "^1.0.2", 2029 - "has-proto": "^1.2.0", 2030 - "has-symbols": "^1.1.0", 2031 - "hasown": "^2.0.2", 2032 - "internal-slot": "^1.1.0", 2033 - "is-array-buffer": "^3.0.5", 2034 - "is-callable": "^1.2.7", 2035 - "is-data-view": "^1.0.2", 2036 - "is-negative-zero": "^2.0.3", 2037 - "is-regex": "^1.2.1", 2038 - "is-set": "^2.0.3", 2039 - "is-shared-array-buffer": "^1.0.4", 2040 - "is-string": "^1.1.1", 2041 - "is-typed-array": "^1.1.15", 2042 - "is-weakref": "^1.1.1", 2043 - "math-intrinsics": "^1.1.0", 2044 - "object-inspect": "^1.13.4", 2045 - "object-keys": "^1.1.1", 2046 - "object.assign": "^4.1.7", 2047 - "own-keys": "^1.0.1", 2048 - "regexp.prototype.flags": "^1.5.4", 2049 - "safe-array-concat": "^1.1.3", 2050 - "safe-push-apply": "^1.0.0", 2051 - "safe-regex-test": "^1.1.0", 2052 - "set-proto": "^1.0.0", 2053 - "stop-iteration-iterator": "^1.1.0", 2054 - "string.prototype.trim": "^1.2.10", 2055 - "string.prototype.trimend": "^1.0.9", 2056 - "string.prototype.trimstart": "^1.0.8", 2057 - "typed-array-buffer": "^1.0.3", 2058 - "typed-array-byte-length": "^1.0.3", 2059 - "typed-array-byte-offset": "^1.0.4", 2060 - "typed-array-length": "^1.0.7", 2061 - "unbox-primitive": "^1.1.0", 2062 - "which-typed-array": "^1.1.19" 2063 - }, 2064 - "engines": { 2065 - "node": ">= 0.4" 2066 - }, 2067 - "funding": { 2068 - "url": "https://github.com/sponsors/ljharb" 2069 - } 2070 - }, 2071 - "node_modules/es-define-property": { 2072 - "version": "1.0.1", 2073 - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 2074 - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 2075 - "dev": true, 2076 - "license": "MIT", 2077 - "engines": { 2078 - "node": ">= 0.4" 2079 - } 2080 - }, 2081 - "node_modules/es-errors": { 2082 - "version": "1.3.0", 2083 - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 2084 - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 2085 - "dev": true, 2086 - "license": "MIT", 2087 - "engines": { 2088 - "node": ">= 0.4" 2089 - } 2090 - }, 2091 - "node_modules/es-iterator-helpers": { 2092 - "version": "1.2.1", 2093 - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", 2094 - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", 2095 - "dev": true, 2096 - "license": "MIT", 2097 - "dependencies": { 2098 - "call-bind": "^1.0.8", 2099 - "call-bound": "^1.0.3", 2100 - "define-properties": "^1.2.1", 2101 - "es-abstract": "^1.23.6", 2102 - "es-errors": "^1.3.0", 2103 - "es-set-tostringtag": "^2.0.3", 2104 - "function-bind": "^1.1.2", 2105 - "get-intrinsic": "^1.2.6", 2106 - "globalthis": "^1.0.4", 2107 - "gopd": "^1.2.0", 2108 - "has-property-descriptors": "^1.0.2", 2109 - "has-proto": "^1.2.0", 2110 - "has-symbols": "^1.1.0", 2111 - "internal-slot": "^1.1.0", 2112 - "iterator.prototype": "^1.1.4", 2113 - "safe-array-concat": "^1.1.3" 2114 - }, 2115 - "engines": { 2116 - "node": ">= 0.4" 2117 - } 2118 - }, 2119 - "node_modules/es-object-atoms": { 2120 - "version": "1.1.1", 2121 - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 2122 - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 2123 - "dev": true, 2124 - "license": "MIT", 2125 - "dependencies": { 2126 - "es-errors": "^1.3.0" 2127 - }, 2128 - "engines": { 2129 - "node": ">= 0.4" 2130 - } 2131 - }, 2132 - "node_modules/es-set-tostringtag": { 2133 - "version": "2.1.0", 2134 - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 2135 - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 2136 - "dev": true, 2137 - "license": "MIT", 2138 - "dependencies": { 2139 - "es-errors": "^1.3.0", 2140 - "get-intrinsic": "^1.2.6", 2141 - "has-tostringtag": "^1.0.2", 2142 - "hasown": "^2.0.2" 2143 - }, 2144 - "engines": { 2145 - "node": ">= 0.4" 2146 - } 2147 - }, 2148 - "node_modules/es-shim-unscopables": { 2149 - "version": "1.1.0", 2150 - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", 2151 - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", 2152 - "dev": true, 2153 - "license": "MIT", 2154 - "dependencies": { 2155 - "hasown": "^2.0.2" 2156 - }, 2157 - "engines": { 2158 - "node": ">= 0.4" 2159 - } 2160 - }, 2161 - "node_modules/es-to-primitive": { 2162 - "version": "1.3.0", 2163 - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", 2164 - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", 2165 - "dev": true, 2166 - "license": "MIT", 2167 - "dependencies": { 2168 - "is-callable": "^1.2.7", 2169 - "is-date-object": "^1.0.5", 2170 - "is-symbol": "^1.0.4" 2171 - }, 2172 - "engines": { 2173 - "node": ">= 0.4" 2174 - }, 2175 - "funding": { 2176 - "url": "https://github.com/sponsors/ljharb" 2177 - } 2178 - }, 2179 - "node_modules/esbuild": { 2180 - "version": "0.25.5", 2181 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", 2182 - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", 2183 - "dev": true, 2184 - "hasInstallScript": true, 2185 - "license": "MIT", 2186 - "bin": { 2187 - "esbuild": "bin/esbuild" 2188 - }, 2189 - "engines": { 2190 - "node": ">=18" 2191 - }, 2192 - "optionalDependencies": { 2193 - "@esbuild/aix-ppc64": "0.25.5", 2194 - "@esbuild/android-arm": "0.25.5", 2195 - "@esbuild/android-arm64": "0.25.5", 2196 - "@esbuild/android-x64": "0.25.5", 2197 - "@esbuild/darwin-arm64": "0.25.5", 2198 - "@esbuild/darwin-x64": "0.25.5", 2199 - "@esbuild/freebsd-arm64": "0.25.5", 2200 - "@esbuild/freebsd-x64": "0.25.5", 2201 - "@esbuild/linux-arm": "0.25.5", 2202 - "@esbuild/linux-arm64": "0.25.5", 2203 - "@esbuild/linux-ia32": "0.25.5", 2204 - "@esbuild/linux-loong64": "0.25.5", 2205 - "@esbuild/linux-mips64el": "0.25.5", 2206 - "@esbuild/linux-ppc64": "0.25.5", 2207 - "@esbuild/linux-riscv64": "0.25.5", 2208 - "@esbuild/linux-s390x": "0.25.5", 2209 - "@esbuild/linux-x64": "0.25.5", 2210 - "@esbuild/netbsd-arm64": "0.25.5", 2211 - "@esbuild/netbsd-x64": "0.25.5", 2212 - "@esbuild/openbsd-arm64": "0.25.5", 2213 - "@esbuild/openbsd-x64": "0.25.5", 2214 - "@esbuild/sunos-x64": "0.25.5", 2215 - "@esbuild/win32-arm64": "0.25.5", 2216 - "@esbuild/win32-ia32": "0.25.5", 2217 - "@esbuild/win32-x64": "0.25.5" 2218 - } 2219 - }, 2220 - "node_modules/escape-string-regexp": { 2221 - "version": "4.0.0", 2222 - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2223 - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2224 - "dev": true, 2225 - "license": "MIT", 2226 - "engines": { 2227 - "node": ">=10" 2228 - }, 2229 - "funding": { 2230 - "url": "https://github.com/sponsors/sindresorhus" 2231 - } 2232 - }, 2233 - "node_modules/eslint": { 2234 - "version": "9.39.1", 2235 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", 2236 - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", 2237 - "dev": true, 2238 - "license": "MIT", 2239 - "peer": true, 2240 - "dependencies": { 2241 - "@eslint-community/eslint-utils": "^4.8.0", 2242 - "@eslint-community/regexpp": "^4.12.1", 2243 - "@eslint/config-array": "^0.21.1", 2244 - "@eslint/config-helpers": "^0.4.2", 2245 - "@eslint/core": "^0.17.0", 2246 - "@eslint/eslintrc": "^3.3.1", 2247 - "@eslint/js": "9.39.1", 2248 - "@eslint/plugin-kit": "^0.4.1", 2249 - "@humanfs/node": "^0.16.6", 2250 - "@humanwhocodes/module-importer": "^1.0.1", 2251 - "@humanwhocodes/retry": "^0.4.2", 2252 - "@types/estree": "^1.0.6", 2253 - "ajv": "^6.12.4", 2254 - "chalk": "^4.0.0", 2255 - "cross-spawn": "^7.0.6", 2256 - "debug": "^4.3.2", 2257 - "escape-string-regexp": "^4.0.0", 2258 - "eslint-scope": "^8.4.0", 2259 - "eslint-visitor-keys": "^4.2.1", 2260 - "espree": "^10.4.0", 2261 - "esquery": "^1.5.0", 2262 - "esutils": "^2.0.2", 2263 - "fast-deep-equal": "^3.1.3", 2264 - "file-entry-cache": "^8.0.0", 2265 - "find-up": "^5.0.0", 2266 - "glob-parent": "^6.0.2", 2267 - "ignore": "^5.2.0", 2268 - "imurmurhash": "^0.1.4", 2269 - "is-glob": "^4.0.0", 2270 - "json-stable-stringify-without-jsonify": "^1.0.1", 2271 - "lodash.merge": "^4.6.2", 2272 - "minimatch": "^3.1.2", 2273 - "natural-compare": "^1.4.0", 2274 - "optionator": "^0.9.3" 2275 - }, 2276 - "bin": { 2277 - "eslint": "bin/eslint.js" 2278 - }, 2279 - "engines": { 2280 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2281 - }, 2282 - "funding": { 2283 - "url": "https://eslint.org/donate" 2284 - }, 2285 - "peerDependencies": { 2286 - "jiti": "*" 2287 - }, 2288 - "peerDependenciesMeta": { 2289 - "jiti": { 2290 - "optional": true 2291 - } 2292 - } 2293 - }, 2294 - "node_modules/eslint-compat-utils": { 2295 - "version": "0.5.1", 2296 - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", 2297 - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", 2298 - "dev": true, 2299 - "license": "MIT", 2300 - "dependencies": { 2301 - "semver": "^7.5.4" 2302 - }, 2303 - "engines": { 2304 - "node": ">=12" 2305 - }, 2306 - "peerDependencies": { 2307 - "eslint": ">=6.0.0" 2308 - } 2309 - }, 2310 - "node_modules/eslint-compat-utils/node_modules/semver": { 2311 - "version": "7.7.3", 2312 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 2313 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 2314 - "dev": true, 2315 - "license": "ISC", 2316 - "bin": { 2317 - "semver": "bin/semver.js" 2318 - }, 2319 - "engines": { 2320 - "node": ">=10" 2321 - } 2322 - }, 2323 - "node_modules/eslint-import-resolver-node": { 2324 - "version": "0.3.9", 2325 - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", 2326 - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", 2327 - "dev": true, 2328 - "license": "MIT", 2329 - "dependencies": { 2330 - "debug": "^3.2.7", 2331 - "is-core-module": "^2.13.0", 2332 - "resolve": "^1.22.4" 2333 - } 2334 - }, 2335 - "node_modules/eslint-import-resolver-node/node_modules/debug": { 2336 - "version": "3.2.7", 2337 - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 2338 - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 2339 - "dev": true, 2340 - "license": "MIT", 2341 - "dependencies": { 2342 - "ms": "^2.1.1" 2343 - } 2344 - }, 2345 - "node_modules/eslint-module-utils": { 2346 - "version": "2.12.1", 2347 - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", 2348 - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", 2349 - "dev": true, 2350 - "license": "MIT", 2351 - "dependencies": { 2352 - "debug": "^3.2.7" 2353 - }, 2354 - "engines": { 2355 - "node": ">=4" 2356 - }, 2357 - "peerDependenciesMeta": { 2358 - "eslint": { 2359 - "optional": true 2360 - } 2361 - } 2362 - }, 2363 - "node_modules/eslint-module-utils/node_modules/debug": { 2364 - "version": "3.2.7", 2365 - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 2366 - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 2367 - "dev": true, 2368 - "license": "MIT", 2369 - "dependencies": { 2370 - "ms": "^2.1.1" 2371 - } 2372 - }, 2373 - "node_modules/eslint-plugin-depend": { 2374 - "version": "1.3.1", 2375 - "resolved": "https://registry.npmjs.org/eslint-plugin-depend/-/eslint-plugin-depend-1.3.1.tgz", 2376 - "integrity": "sha512-1uo2rFAr9vzNrCYdp7IBZRB54LiyVxfaIso0R6/QV3t6Dax6DTbW/EV2Hktf0f4UtmGHK8UyzJWI382pwW04jw==", 2377 - "dev": true, 2378 - "license": "MIT", 2379 - "dependencies": { 2380 - "empathic": "^2.0.0", 2381 - "module-replacements": "^2.8.0", 2382 - "semver": "^7.6.3" 2383 - } 2384 - }, 2385 - "node_modules/eslint-plugin-depend/node_modules/semver": { 2386 - "version": "7.7.3", 2387 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 2388 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 2389 - "dev": true, 2390 - "license": "ISC", 2391 - "bin": { 2392 - "semver": "bin/semver.js" 2393 - }, 2394 - "engines": { 2395 - "node": ">=10" 2396 - } 2397 - }, 2398 - "node_modules/eslint-plugin-es-x": { 2399 - "version": "7.8.0", 2400 - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", 2401 - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", 2402 - "dev": true, 2403 - "funding": [ 2404 - "https://github.com/sponsors/ota-meshi", 2405 - "https://opencollective.com/eslint" 2406 - ], 2407 - "license": "MIT", 2408 - "dependencies": { 2409 - "@eslint-community/eslint-utils": "^4.1.2", 2410 - "@eslint-community/regexpp": "^4.11.0", 2411 - "eslint-compat-utils": "^0.5.1" 2412 - }, 2413 - "engines": { 2414 - "node": "^14.18.0 || >=16.0.0" 2415 - }, 2416 - "peerDependencies": { 2417 - "eslint": ">=8" 2418 - } 2419 - }, 2420 - "node_modules/eslint-plugin-import": { 2421 - "version": "2.32.0", 2422 - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", 2423 - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", 2424 - "dev": true, 2425 - "license": "MIT", 2426 - "dependencies": { 2427 - "@rtsao/scc": "^1.1.0", 2428 - "array-includes": "^3.1.9", 2429 - "array.prototype.findlastindex": "^1.2.6", 2430 - "array.prototype.flat": "^1.3.3", 2431 - "array.prototype.flatmap": "^1.3.3", 2432 - "debug": "^3.2.7", 2433 - "doctrine": "^2.1.0", 2434 - "eslint-import-resolver-node": "^0.3.9", 2435 - "eslint-module-utils": "^2.12.1", 2436 - "hasown": "^2.0.2", 2437 - "is-core-module": "^2.16.1", 2438 - "is-glob": "^4.0.3", 2439 - "minimatch": "^3.1.2", 2440 - "object.fromentries": "^2.0.8", 2441 - "object.groupby": "^1.0.3", 2442 - "object.values": "^1.2.1", 2443 - "semver": "^6.3.1", 2444 - "string.prototype.trimend": "^1.0.9", 2445 - "tsconfig-paths": "^3.15.0" 2446 - }, 2447 - "engines": { 2448 - "node": ">=4" 2449 - }, 2450 - "peerDependencies": { 2451 - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" 2452 - } 2453 - }, 2454 - "node_modules/eslint-plugin-import/node_modules/debug": { 2455 - "version": "3.2.7", 2456 - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 2457 - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 2458 - "dev": true, 2459 - "license": "MIT", 2460 - "dependencies": { 2461 - "ms": "^2.1.1" 2462 - } 2463 - }, 2464 - "node_modules/eslint-plugin-json-schema-validator": { 2465 - "version": "5.1.0", 2466 - "resolved": "https://registry.npmjs.org/eslint-plugin-json-schema-validator/-/eslint-plugin-json-schema-validator-5.1.0.tgz", 2467 - "integrity": "sha512-ZmVyxRIjm58oqe2kTuy90PpmZPrrKvOjRPXKzq8WCgRgAkidCgm5X8domL2KSfadZ3QFAmifMgGTcVNhZ5ez2g==", 2468 - "dev": true, 2469 - "license": "MIT", 2470 - "dependencies": { 2471 - "@eslint-community/eslint-utils": "^4.3.0", 2472 - "ajv": "^8.0.0", 2473 - "debug": "^4.3.1", 2474 - "eslint-compat-utils": "^0.5.0", 2475 - "json-schema-migrate": "^2.0.0", 2476 - "jsonc-eslint-parser": "^2.0.0", 2477 - "minimatch": "^8.0.0", 2478 - "synckit": "^0.9.0", 2479 - "toml-eslint-parser": "^0.9.0", 2480 - "tunnel-agent": "^0.6.0", 2481 - "yaml-eslint-parser": "^1.0.0" 2482 - }, 2483 - "engines": { 2484 - "node": "^14.18.0 || >=16.0.0" 2485 - }, 2486 - "funding": { 2487 - "url": "https://github.com/sponsors/ota-meshi" 2488 - }, 2489 - "peerDependencies": { 2490 - "eslint": ">=6.0.0" 2491 - } 2492 - }, 2493 - "node_modules/eslint-plugin-json-schema-validator/node_modules/ajv": { 2494 - "version": "8.17.1", 2495 - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 2496 - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 2497 - "dev": true, 2498 - "license": "MIT", 2499 - "dependencies": { 2500 - "fast-deep-equal": "^3.1.3", 2501 - "fast-uri": "^3.0.1", 2502 - "json-schema-traverse": "^1.0.0", 2503 - "require-from-string": "^2.0.2" 2504 - }, 2505 - "funding": { 2506 - "type": "github", 2507 - "url": "https://github.com/sponsors/epoberezkin" 2508 - } 2509 - }, 2510 - "node_modules/eslint-plugin-json-schema-validator/node_modules/brace-expansion": { 2511 - "version": "2.0.2", 2512 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 2513 - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 2514 - "dev": true, 2515 - "license": "MIT", 2516 - "dependencies": { 2517 - "balanced-match": "^1.0.0" 2518 - } 2519 - }, 2520 - "node_modules/eslint-plugin-json-schema-validator/node_modules/json-schema-traverse": { 2521 - "version": "1.0.0", 2522 - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2523 - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2524 - "dev": true, 2525 - "license": "MIT" 2526 - }, 2527 - "node_modules/eslint-plugin-json-schema-validator/node_modules/minimatch": { 2528 - "version": "8.0.4", 2529 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", 2530 - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", 2531 - "dev": true, 2532 - "license": "ISC", 2533 - "dependencies": { 2534 - "brace-expansion": "^2.0.1" 2535 - }, 2536 - "engines": { 2537 - "node": ">=16 || 14 >=14.17" 2538 - }, 2539 - "funding": { 2540 - "url": "https://github.com/sponsors/isaacs" 2541 - } 2542 - }, 2543 - "node_modules/eslint-plugin-n": { 2544 - "version": "17.10.3", 2545 - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.3.tgz", 2546 - "integrity": "sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==", 2547 - "dev": true, 2548 - "license": "MIT", 2549 - "dependencies": { 2550 - "@eslint-community/eslint-utils": "^4.4.0", 2551 - "enhanced-resolve": "^5.17.0", 2552 - "eslint-plugin-es-x": "^7.5.0", 2553 - "get-tsconfig": "^4.7.0", 2554 - "globals": "^15.8.0", 2555 - "ignore": "^5.2.4", 2556 - "minimatch": "^9.0.5", 2557 - "semver": "^7.5.3" 2558 - }, 2559 - "engines": { 2560 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2561 - }, 2562 - "funding": { 2563 - "url": "https://opencollective.com/eslint" 2564 - }, 2565 - "peerDependencies": { 2566 - "eslint": ">=8.23.0" 2567 - } 2568 - }, 2569 - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { 2570 - "version": "2.0.2", 2571 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 2572 - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 2573 - "dev": true, 2574 - "license": "MIT", 2575 - "dependencies": { 2576 - "balanced-match": "^1.0.0" 2577 - } 2578 - }, 2579 - "node_modules/eslint-plugin-n/node_modules/globals": { 2580 - "version": "15.15.0", 2581 - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", 2582 - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", 2583 - "dev": true, 2584 - "license": "MIT", 2585 - "engines": { 2586 - "node": ">=18" 2587 - }, 2588 - "funding": { 2589 - "url": "https://github.com/sponsors/sindresorhus" 2590 - } 2591 - }, 2592 - "node_modules/eslint-plugin-n/node_modules/minimatch": { 2593 - "version": "9.0.5", 2594 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 2595 - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 2596 - "dev": true, 2597 - "license": "ISC", 2598 - "dependencies": { 2599 - "brace-expansion": "^2.0.1" 2600 - }, 2601 - "engines": { 2602 - "node": ">=16 || 14 >=14.17" 2603 - }, 2604 - "funding": { 2605 - "url": "https://github.com/sponsors/isaacs" 2606 - } 2607 - }, 2608 - "node_modules/eslint-plugin-n/node_modules/semver": { 2609 - "version": "7.7.3", 2610 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 2611 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 2612 - "dev": true, 2613 - "license": "ISC", 2614 - "bin": { 2615 - "semver": "bin/semver.js" 2616 - }, 2617 - "engines": { 2618 - "node": ">=10" 2619 - } 2620 - }, 2621 - "node_modules/eslint-plugin-obsidianmd": { 2622 - "version": "0.1.9", 2623 - "resolved": "https://registry.npmjs.org/eslint-plugin-obsidianmd/-/eslint-plugin-obsidianmd-0.1.9.tgz", 2624 - "integrity": "sha512-/gyo5vky3Y7re4BtT/8MQbHU5Wes4o6VRqas3YmXE7aTCnMsdV0kfzV1GDXJN9Hrsc9UQPoeKUMiapKL0aGE4g==", 2625 - "dev": true, 2626 - "license": "MIT", 2627 - "dependencies": { 2628 - "@microsoft/eslint-plugin-sdl": "^1.1.0", 2629 - "@types/eslint": "8.56.2", 2630 - "@types/node": "20.12.12", 2631 - "eslint": ">=9.0.0 <10.0.0", 2632 - "eslint-plugin-depend": "1.3.1", 2633 - "eslint-plugin-import": "^2.31.0", 2634 - "eslint-plugin-json-schema-validator": "5.1.0", 2635 - "eslint-plugin-security": "2.1.1", 2636 - "globals": "14.0.0", 2637 - "obsidian": "1.8.7", 2638 - "typescript": "5.4.5" 2639 - }, 2640 - "bin": { 2641 - "eslint-plugin-obsidian": "dist/lib/index.js" 2642 - }, 2643 - "engines": { 2644 - "node": ">= 18" 2645 - }, 2646 - "peerDependencies": { 2647 - "@eslint/js": "^9.30.1", 2648 - "@eslint/json": "0.14.0", 2649 - "eslint": ">=9.0.0 <10.0.0", 2650 - "obsidian": "1.8.7", 2651 - "typescript-eslint": "^8.35.1" 2652 - } 2653 - }, 2654 - "node_modules/eslint-plugin-obsidianmd/node_modules/@types/node": { 2655 - "version": "20.12.12", 2656 - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", 2657 - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", 2658 - "dev": true, 2659 - "license": "MIT", 2660 - "dependencies": { 2661 - "undici-types": "~5.26.4" 2662 - } 2663 - }, 2664 - "node_modules/eslint-plugin-obsidianmd/node_modules/obsidian": { 2665 - "version": "1.8.7", 2666 - "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.8.7.tgz", 2667 - "integrity": "sha512-h4bWwNFAGRXlMlMAzdEiIM2ppTGlrh7uGOJS6w4gClrsjc+ei/3YAtU2VdFUlCiPuTHpY4aBpFJJW75S1Tl/JA==", 2668 - "dev": true, 2669 - "license": "MIT", 2670 - "dependencies": { 2671 - "@types/codemirror": "5.60.8", 2672 - "moment": "2.29.4" 2673 - }, 2674 - "peerDependencies": { 2675 - "@codemirror/state": "^6.0.0", 2676 - "@codemirror/view": "^6.0.0" 2677 - } 2678 - }, 2679 - "node_modules/eslint-plugin-obsidianmd/node_modules/typescript": { 2680 - "version": "5.4.5", 2681 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", 2682 - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", 2683 - "dev": true, 2684 - "license": "Apache-2.0", 2685 - "bin": { 2686 - "tsc": "bin/tsc", 2687 - "tsserver": "bin/tsserver" 2688 - }, 2689 - "engines": { 2690 - "node": ">=14.17" 2691 - } 2692 - }, 2693 - "node_modules/eslint-plugin-react": { 2694 - "version": "7.37.3", 2695 - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", 2696 - "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", 2697 - "dev": true, 2698 - "license": "MIT", 2699 - "dependencies": { 2700 - "array-includes": "^3.1.8", 2701 - "array.prototype.findlast": "^1.2.5", 2702 - "array.prototype.flatmap": "^1.3.3", 2703 - "array.prototype.tosorted": "^1.1.4", 2704 - "doctrine": "^2.1.0", 2705 - "es-iterator-helpers": "^1.2.1", 2706 - "estraverse": "^5.3.0", 2707 - "hasown": "^2.0.2", 2708 - "jsx-ast-utils": "^2.4.1 || ^3.0.0", 2709 - "minimatch": "^3.1.2", 2710 - "object.entries": "^1.1.8", 2711 - "object.fromentries": "^2.0.8", 2712 - "object.values": "^1.2.1", 2713 - "prop-types": "^15.8.1", 2714 - "resolve": "^2.0.0-next.5", 2715 - "semver": "^6.3.1", 2716 - "string.prototype.matchall": "^4.0.12", 2717 - "string.prototype.repeat": "^1.0.0" 2718 - }, 2719 - "engines": { 2720 - "node": ">=4" 2721 - }, 2722 - "peerDependencies": { 2723 - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" 2724 - } 2725 - }, 2726 - "node_modules/eslint-plugin-react/node_modules/resolve": { 2727 - "version": "2.0.0-next.5", 2728 - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", 2729 - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", 2730 - "dev": true, 2731 - "license": "MIT", 2732 - "dependencies": { 2733 - "is-core-module": "^2.13.0", 2734 - "path-parse": "^1.0.7", 2735 - "supports-preserve-symlinks-flag": "^1.0.0" 2736 - }, 2737 - "bin": { 2738 - "resolve": "bin/resolve" 2739 - }, 2740 - "funding": { 2741 - "url": "https://github.com/sponsors/ljharb" 2742 - } 2743 - }, 2744 - "node_modules/eslint-plugin-security": { 2745 - "version": "2.1.1", 2746 - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-2.1.1.tgz", 2747 - "integrity": "sha512-7cspIGj7WTfR3EhaILzAPcfCo5R9FbeWvbgsPYWivSurTBKW88VQxtP3c4aWMG9Hz/GfJlJVdXEJ3c8LqS+u2w==", 2748 - "dev": true, 2749 - "license": "Apache-2.0", 2750 - "dependencies": { 2751 - "safe-regex": "^2.1.1" 2752 - } 2753 - }, 2754 - "node_modules/eslint-scope": { 2755 - "version": "8.4.0", 2756 - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", 2757 - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", 2758 - "dev": true, 2759 - "license": "BSD-2-Clause", 2760 - "dependencies": { 2761 - "esrecurse": "^4.3.0", 2762 - "estraverse": "^5.2.0" 2763 - }, 2764 - "engines": { 2765 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2766 - }, 2767 - "funding": { 2768 - "url": "https://opencollective.com/eslint" 2769 - } 2770 - }, 2771 - "node_modules/eslint-visitor-keys": { 2772 - "version": "4.2.1", 2773 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", 2774 - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", 2775 - "dev": true, 2776 - "license": "Apache-2.0", 2777 - "engines": { 2778 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2779 - }, 2780 - "funding": { 2781 - "url": "https://opencollective.com/eslint" 2782 - } 2783 - }, 2784 - "node_modules/eslint/node_modules/@eslint/js": { 2785 - "version": "9.39.1", 2786 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", 2787 - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", 2788 - "dev": true, 2789 - "license": "MIT", 2790 - "engines": { 2791 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2792 - }, 2793 - "funding": { 2794 - "url": "https://eslint.org/donate" 2795 - } 2796 - }, 2797 - "node_modules/esm-env": { 2798 - "version": "1.2.2", 2799 - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 2800 - "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 2801 - "license": "MIT" 2802 - }, 2803 - "node_modules/espree": { 2804 - "version": "10.4.0", 2805 - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", 2806 - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", 2807 - "dev": true, 2808 - "license": "BSD-2-Clause", 2809 - "dependencies": { 2810 - "acorn": "^8.15.0", 2811 - "acorn-jsx": "^5.3.2", 2812 - "eslint-visitor-keys": "^4.2.1" 2813 - }, 2814 - "engines": { 2815 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2816 - }, 2817 - "funding": { 2818 - "url": "https://opencollective.com/eslint" 2819 - } 2820 - }, 2821 - "node_modules/esquery": { 2822 - "version": "1.6.0", 2823 - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 2824 - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 2825 - "dev": true, 2826 - "license": "BSD-3-Clause", 2827 - "dependencies": { 2828 - "estraverse": "^5.1.0" 2829 - }, 2830 - "engines": { 2831 - "node": ">=0.10" 2832 - } 2833 - }, 2834 - "node_modules/esrecurse": { 2835 - "version": "4.3.0", 2836 - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2837 - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2838 - "dev": true, 2839 - "license": "BSD-2-Clause", 2840 - "dependencies": { 2841 - "estraverse": "^5.2.0" 2842 - }, 2843 - "engines": { 2844 - "node": ">=4.0" 2845 - } 2846 - }, 2847 - "node_modules/estraverse": { 2848 - "version": "5.3.0", 2849 - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2850 - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2851 - "dev": true, 2852 - "license": "BSD-2-Clause", 2853 - "engines": { 2854 - "node": ">=4.0" 2855 - } 2856 - }, 2857 - "node_modules/esutils": { 2858 - "version": "2.0.3", 2859 - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2860 - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2861 - "dev": true, 2862 - "license": "BSD-2-Clause", 2863 - "engines": { 2864 - "node": ">=0.10.0" 2865 - } 2866 - }, 2867 - "node_modules/fast-deep-equal": { 2868 - "version": "3.1.3", 2869 - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2870 - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2871 - "dev": true, 2872 - "license": "MIT" 2873 - }, 2874 - "node_modules/fast-glob": { 2875 - "version": "3.3.3", 2876 - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 2877 - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 2878 - "dev": true, 2879 - "license": "MIT", 2880 - "dependencies": { 2881 - "@nodelib/fs.stat": "^2.0.2", 2882 - "@nodelib/fs.walk": "^1.2.3", 2883 - "glob-parent": "^5.1.2", 2884 - "merge2": "^1.3.0", 2885 - "micromatch": "^4.0.8" 2886 - }, 2887 - "engines": { 2888 - "node": ">=8.6.0" 2889 - } 2890 - }, 2891 - "node_modules/fast-glob/node_modules/glob-parent": { 2892 - "version": "5.1.2", 2893 - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2894 - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2895 - "dev": true, 2896 - "license": "ISC", 2897 - "dependencies": { 2898 - "is-glob": "^4.0.1" 2899 - }, 2900 - "engines": { 2901 - "node": ">= 6" 2902 - } 2903 - }, 2904 - "node_modules/fast-json-stable-stringify": { 2905 - "version": "2.1.0", 2906 - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2907 - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2908 - "dev": true, 2909 - "license": "MIT" 2910 - }, 2911 - "node_modules/fast-levenshtein": { 2912 - "version": "2.0.6", 2913 - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2914 - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2915 - "dev": true, 2916 - "license": "MIT" 2917 - }, 2918 - "node_modules/fast-uri": { 2919 - "version": "3.1.0", 2920 - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", 2921 - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", 2922 - "dev": true, 2923 - "funding": [ 2924 - { 2925 - "type": "github", 2926 - "url": "https://github.com/sponsors/fastify" 2927 - }, 2928 - { 2929 - "type": "opencollective", 2930 - "url": "https://opencollective.com/fastify" 2931 - } 2932 - ], 2933 - "license": "BSD-3-Clause" 2934 - }, 2935 - "node_modules/fastq": { 2936 - "version": "1.19.1", 2937 - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", 2938 - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", 2939 - "dev": true, 2940 - "license": "ISC", 2941 - "dependencies": { 2942 - "reusify": "^1.0.4" 2943 - } 2944 - }, 2945 - "node_modules/file-entry-cache": { 2946 - "version": "8.0.0", 2947 - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 2948 - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 2949 - "dev": true, 2950 - "license": "MIT", 2951 - "dependencies": { 2952 - "flat-cache": "^4.0.0" 2953 - }, 2954 - "engines": { 2955 - "node": ">=16.0.0" 2956 - } 2957 - }, 2958 - "node_modules/fill-range": { 2959 - "version": "7.1.1", 2960 - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2961 - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2962 - "dev": true, 2963 - "license": "MIT", 2964 - "dependencies": { 2965 - "to-regex-range": "^5.0.1" 2966 - }, 2967 - "engines": { 2968 - "node": ">=8" 2969 - } 2970 - }, 2971 - "node_modules/find-up": { 2972 - "version": "5.0.0", 2973 - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2974 - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2975 - "dev": true, 2976 - "license": "MIT", 2977 - "dependencies": { 2978 - "locate-path": "^6.0.0", 2979 - "path-exists": "^4.0.0" 2980 - }, 2981 - "engines": { 2982 - "node": ">=10" 2983 - }, 2984 - "funding": { 2985 - "url": "https://github.com/sponsors/sindresorhus" 2986 - } 2987 - }, 2988 - "node_modules/flat-cache": { 2989 - "version": "4.0.1", 2990 - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 2991 - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 2992 - "dev": true, 2993 - "license": "MIT", 2994 - "dependencies": { 2995 - "flatted": "^3.2.9", 2996 - "keyv": "^4.5.4" 2997 - }, 2998 - "engines": { 2999 - "node": ">=16" 3000 - } 3001 - }, 3002 - "node_modules/flatted": { 3003 - "version": "3.3.3", 3004 - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 3005 - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 3006 - "dev": true, 3007 - "license": "ISC" 3008 - }, 3009 - "node_modules/for-each": { 3010 - "version": "0.3.5", 3011 - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", 3012 - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", 3013 - "dev": true, 3014 - "license": "MIT", 3015 - "dependencies": { 3016 - "is-callable": "^1.2.7" 3017 - }, 3018 - "engines": { 3019 - "node": ">= 0.4" 3020 - }, 3021 - "funding": { 3022 - "url": "https://github.com/sponsors/ljharb" 3023 - } 3024 - }, 3025 - "node_modules/function-bind": { 3026 - "version": "1.1.2", 3027 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 3028 - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 3029 - "dev": true, 3030 - "license": "MIT", 3031 - "funding": { 3032 - "url": "https://github.com/sponsors/ljharb" 3033 - } 3034 - }, 3035 - "node_modules/function.prototype.name": { 3036 - "version": "1.1.8", 3037 - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", 3038 - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", 3039 - "dev": true, 3040 - "license": "MIT", 3041 - "dependencies": { 3042 - "call-bind": "^1.0.8", 3043 - "call-bound": "^1.0.3", 3044 - "define-properties": "^1.2.1", 3045 - "functions-have-names": "^1.2.3", 3046 - "hasown": "^2.0.2", 3047 - "is-callable": "^1.2.7" 3048 - }, 3049 - "engines": { 3050 - "node": ">= 0.4" 3051 - }, 3052 - "funding": { 3053 - "url": "https://github.com/sponsors/ljharb" 3054 - } 3055 - }, 3056 - "node_modules/functions-have-names": { 3057 - "version": "1.2.3", 3058 - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 3059 - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 3060 - "dev": true, 3061 - "license": "MIT", 3062 - "funding": { 3063 - "url": "https://github.com/sponsors/ljharb" 3064 - } 3065 - }, 3066 - "node_modules/generator-function": { 3067 - "version": "2.0.1", 3068 - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", 3069 - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", 3070 - "dev": true, 3071 - "license": "MIT", 3072 - "engines": { 3073 - "node": ">= 0.4" 3074 - } 3075 - }, 3076 - "node_modules/get-intrinsic": { 3077 - "version": "1.3.0", 3078 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 3079 - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 3080 - "dev": true, 3081 - "license": "MIT", 3082 - "dependencies": { 3083 - "call-bind-apply-helpers": "^1.0.2", 3084 - "es-define-property": "^1.0.1", 3085 - "es-errors": "^1.3.0", 3086 - "es-object-atoms": "^1.1.1", 3087 - "function-bind": "^1.1.2", 3088 - "get-proto": "^1.0.1", 3089 - "gopd": "^1.2.0", 3090 - "has-symbols": "^1.1.0", 3091 - "hasown": "^2.0.2", 3092 - "math-intrinsics": "^1.1.0" 3093 - }, 3094 - "engines": { 3095 - "node": ">= 0.4" 3096 - }, 3097 - "funding": { 3098 - "url": "https://github.com/sponsors/ljharb" 3099 - } 3100 - }, 3101 - "node_modules/get-proto": { 3102 - "version": "1.0.1", 3103 - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 3104 - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 3105 - "dev": true, 3106 - "license": "MIT", 3107 - "dependencies": { 3108 - "dunder-proto": "^1.0.1", 3109 - "es-object-atoms": "^1.0.0" 3110 - }, 3111 - "engines": { 3112 - "node": ">= 0.4" 3113 - } 3114 - }, 3115 - "node_modules/get-symbol-description": { 3116 - "version": "1.1.0", 3117 - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", 3118 - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", 3119 - "dev": true, 3120 - "license": "MIT", 3121 - "dependencies": { 3122 - "call-bound": "^1.0.3", 3123 - "es-errors": "^1.3.0", 3124 - "get-intrinsic": "^1.2.6" 3125 - }, 3126 - "engines": { 3127 - "node": ">= 0.4" 3128 - }, 3129 - "funding": { 3130 - "url": "https://github.com/sponsors/ljharb" 3131 - } 3132 - }, 3133 - "node_modules/get-tsconfig": { 3134 - "version": "4.13.0", 3135 - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", 3136 - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", 3137 - "dev": true, 3138 - "license": "MIT", 3139 - "dependencies": { 3140 - "resolve-pkg-maps": "^1.0.0" 3141 - }, 3142 - "funding": { 3143 - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 3144 - } 3145 - }, 3146 - "node_modules/glob-parent": { 3147 - "version": "6.0.2", 3148 - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 3149 - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 3150 - "dev": true, 3151 - "license": "ISC", 3152 - "dependencies": { 3153 - "is-glob": "^4.0.3" 3154 - }, 3155 - "engines": { 3156 - "node": ">=10.13.0" 3157 - } 3158 - }, 3159 - "node_modules/globals": { 3160 - "version": "14.0.0", 3161 - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 3162 - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 3163 - "dev": true, 3164 - "license": "MIT", 3165 - "engines": { 3166 - "node": ">=18" 3167 - }, 3168 - "funding": { 3169 - "url": "https://github.com/sponsors/sindresorhus" 3170 - } 3171 - }, 3172 - "node_modules/globalthis": { 3173 - "version": "1.0.4", 3174 - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", 3175 - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", 3176 - "dev": true, 3177 - "license": "MIT", 3178 - "dependencies": { 3179 - "define-properties": "^1.2.1", 3180 - "gopd": "^1.0.1" 3181 - }, 3182 - "engines": { 3183 - "node": ">= 0.4" 3184 - }, 3185 - "funding": { 3186 - "url": "https://github.com/sponsors/ljharb" 3187 - } 3188 - }, 3189 - "node_modules/gopd": { 3190 - "version": "1.2.0", 3191 - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 3192 - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 3193 - "dev": true, 3194 - "license": "MIT", 3195 - "engines": { 3196 - "node": ">= 0.4" 3197 - }, 3198 - "funding": { 3199 - "url": "https://github.com/sponsors/ljharb" 3200 - } 3201 - }, 3202 - "node_modules/graceful-fs": { 3203 - "version": "4.2.11", 3204 - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 3205 - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 3206 - "dev": true, 3207 - "license": "ISC" 3208 - }, 3209 - "node_modules/graphemer": { 3210 - "version": "1.4.0", 3211 - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 3212 - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 3213 - "dev": true, 3214 - "license": "MIT" 3215 - }, 3216 - "node_modules/has-bigints": { 3217 - "version": "1.1.0", 3218 - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", 3219 - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", 3220 - "dev": true, 3221 - "license": "MIT", 3222 - "engines": { 3223 - "node": ">= 0.4" 3224 - }, 3225 - "funding": { 3226 - "url": "https://github.com/sponsors/ljharb" 3227 - } 3228 - }, 3229 - "node_modules/has-flag": { 3230 - "version": "4.0.0", 3231 - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3232 - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3233 - "dev": true, 3234 - "license": "MIT", 3235 - "engines": { 3236 - "node": ">=8" 3237 - } 3238 - }, 3239 - "node_modules/has-property-descriptors": { 3240 - "version": "1.0.2", 3241 - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 3242 - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 3243 - "dev": true, 3244 - "license": "MIT", 3245 - "dependencies": { 3246 - "es-define-property": "^1.0.0" 3247 - }, 3248 - "funding": { 3249 - "url": "https://github.com/sponsors/ljharb" 3250 - } 3251 - }, 3252 - "node_modules/has-proto": { 3253 - "version": "1.2.0", 3254 - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", 3255 - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", 3256 - "dev": true, 3257 - "license": "MIT", 3258 - "dependencies": { 3259 - "dunder-proto": "^1.0.0" 3260 - }, 3261 - "engines": { 3262 - "node": ">= 0.4" 3263 - }, 3264 - "funding": { 3265 - "url": "https://github.com/sponsors/ljharb" 3266 - } 3267 - }, 3268 - "node_modules/has-symbols": { 3269 - "version": "1.1.0", 3270 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 3271 - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 3272 - "dev": true, 3273 - "license": "MIT", 3274 - "engines": { 3275 - "node": ">= 0.4" 3276 - }, 3277 - "funding": { 3278 - "url": "https://github.com/sponsors/ljharb" 3279 - } 3280 - }, 3281 - "node_modules/has-tostringtag": { 3282 - "version": "1.0.2", 3283 - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 3284 - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 3285 - "dev": true, 3286 - "license": "MIT", 3287 - "dependencies": { 3288 - "has-symbols": "^1.0.3" 3289 - }, 3290 - "engines": { 3291 - "node": ">= 0.4" 3292 - }, 3293 - "funding": { 3294 - "url": "https://github.com/sponsors/ljharb" 3295 - } 3296 - }, 3297 - "node_modules/hasown": { 3298 - "version": "2.0.2", 3299 - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 3300 - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 3301 - "dev": true, 3302 - "license": "MIT", 3303 - "dependencies": { 3304 - "function-bind": "^1.1.2" 3305 - }, 3306 - "engines": { 3307 - "node": ">= 0.4" 3308 - } 3309 - }, 3310 - "node_modules/ignore": { 3311 - "version": "5.3.2", 3312 - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 3313 - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 3314 - "dev": true, 3315 - "license": "MIT", 3316 - "engines": { 3317 - "node": ">= 4" 3318 - } 3319 - }, 3320 - "node_modules/import-fresh": { 3321 - "version": "3.3.1", 3322 - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 3323 - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 3324 - "dev": true, 3325 - "license": "MIT", 3326 - "dependencies": { 3327 - "parent-module": "^1.0.0", 3328 - "resolve-from": "^4.0.0" 3329 - }, 3330 - "engines": { 3331 - "node": ">=6" 3332 - }, 3333 - "funding": { 3334 - "url": "https://github.com/sponsors/sindresorhus" 3335 - } 3336 - }, 3337 - "node_modules/imurmurhash": { 3338 - "version": "0.1.4", 3339 - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 3340 - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 3341 - "dev": true, 3342 - "license": "MIT", 3343 - "engines": { 3344 - "node": ">=0.8.19" 3345 - } 3346 - }, 3347 - "node_modules/internal-slot": { 3348 - "version": "1.1.0", 3349 - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", 3350 - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", 3351 - "dev": true, 3352 - "license": "MIT", 3353 - "dependencies": { 3354 - "es-errors": "^1.3.0", 3355 - "hasown": "^2.0.2", 3356 - "side-channel": "^1.1.0" 3357 - }, 3358 - "engines": { 3359 - "node": ">= 0.4" 3360 - } 3361 - }, 3362 - "node_modules/is-array-buffer": { 3363 - "version": "3.0.5", 3364 - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", 3365 - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", 3366 - "dev": true, 3367 - "license": "MIT", 3368 - "dependencies": { 3369 - "call-bind": "^1.0.8", 3370 - "call-bound": "^1.0.3", 3371 - "get-intrinsic": "^1.2.6" 3372 - }, 3373 - "engines": { 3374 - "node": ">= 0.4" 3375 - }, 3376 - "funding": { 3377 - "url": "https://github.com/sponsors/ljharb" 3378 - } 3379 - }, 3380 - "node_modules/is-async-function": { 3381 - "version": "2.1.1", 3382 - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", 3383 - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", 3384 - "dev": true, 3385 - "license": "MIT", 3386 - "dependencies": { 3387 - "async-function": "^1.0.0", 3388 - "call-bound": "^1.0.3", 3389 - "get-proto": "^1.0.1", 3390 - "has-tostringtag": "^1.0.2", 3391 - "safe-regex-test": "^1.1.0" 3392 - }, 3393 - "engines": { 3394 - "node": ">= 0.4" 3395 - }, 3396 - "funding": { 3397 - "url": "https://github.com/sponsors/ljharb" 3398 - } 3399 - }, 3400 - "node_modules/is-bigint": { 3401 - "version": "1.1.0", 3402 - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", 3403 - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", 3404 - "dev": true, 3405 - "license": "MIT", 3406 - "dependencies": { 3407 - "has-bigints": "^1.0.2" 3408 - }, 3409 - "engines": { 3410 - "node": ">= 0.4" 3411 - }, 3412 - "funding": { 3413 - "url": "https://github.com/sponsors/ljharb" 3414 - } 3415 - }, 3416 - "node_modules/is-boolean-object": { 3417 - "version": "1.2.2", 3418 - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", 3419 - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", 3420 - "dev": true, 3421 - "license": "MIT", 3422 - "dependencies": { 3423 - "call-bound": "^1.0.3", 3424 - "has-tostringtag": "^1.0.2" 3425 - }, 3426 - "engines": { 3427 - "node": ">= 0.4" 3428 - }, 3429 - "funding": { 3430 - "url": "https://github.com/sponsors/ljharb" 3431 - } 3432 - }, 3433 - "node_modules/is-callable": { 3434 - "version": "1.2.7", 3435 - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 3436 - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 3437 - "dev": true, 3438 - "license": "MIT", 3439 - "engines": { 3440 - "node": ">= 0.4" 3441 - }, 3442 - "funding": { 3443 - "url": "https://github.com/sponsors/ljharb" 3444 - } 3445 - }, 3446 - "node_modules/is-core-module": { 3447 - "version": "2.16.1", 3448 - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 3449 - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 3450 - "dev": true, 3451 - "license": "MIT", 3452 - "dependencies": { 3453 - "hasown": "^2.0.2" 3454 - }, 3455 - "engines": { 3456 - "node": ">= 0.4" 3457 - }, 3458 - "funding": { 3459 - "url": "https://github.com/sponsors/ljharb" 3460 - } 3461 - }, 3462 - "node_modules/is-data-view": { 3463 - "version": "1.0.2", 3464 - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", 3465 - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", 3466 - "dev": true, 3467 - "license": "MIT", 3468 - "dependencies": { 3469 - "call-bound": "^1.0.2", 3470 - "get-intrinsic": "^1.2.6", 3471 - "is-typed-array": "^1.1.13" 3472 - }, 3473 - "engines": { 3474 - "node": ">= 0.4" 3475 - }, 3476 - "funding": { 3477 - "url": "https://github.com/sponsors/ljharb" 3478 - } 3479 - }, 3480 - "node_modules/is-date-object": { 3481 - "version": "1.1.0", 3482 - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", 3483 - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", 3484 - "dev": true, 3485 - "license": "MIT", 3486 - "dependencies": { 3487 - "call-bound": "^1.0.2", 3488 - "has-tostringtag": "^1.0.2" 3489 - }, 3490 - "engines": { 3491 - "node": ">= 0.4" 3492 - }, 3493 - "funding": { 3494 - "url": "https://github.com/sponsors/ljharb" 3495 - } 3496 - }, 3497 - "node_modules/is-extglob": { 3498 - "version": "2.1.1", 3499 - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3500 - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 3501 - "dev": true, 3502 - "license": "MIT", 3503 - "engines": { 3504 - "node": ">=0.10.0" 3505 - } 3506 - }, 3507 - "node_modules/is-finalizationregistry": { 3508 - "version": "1.1.1", 3509 - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", 3510 - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", 3511 - "dev": true, 3512 - "license": "MIT", 3513 - "dependencies": { 3514 - "call-bound": "^1.0.3" 3515 - }, 3516 - "engines": { 3517 - "node": ">= 0.4" 3518 - }, 3519 - "funding": { 3520 - "url": "https://github.com/sponsors/ljharb" 3521 - } 3522 - }, 3523 - "node_modules/is-generator-function": { 3524 - "version": "1.1.2", 3525 - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", 3526 - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", 3527 - "dev": true, 3528 - "license": "MIT", 3529 - "dependencies": { 3530 - "call-bound": "^1.0.4", 3531 - "generator-function": "^2.0.0", 3532 - "get-proto": "^1.0.1", 3533 - "has-tostringtag": "^1.0.2", 3534 - "safe-regex-test": "^1.1.0" 3535 - }, 3536 - "engines": { 3537 - "node": ">= 0.4" 3538 - }, 3539 - "funding": { 3540 - "url": "https://github.com/sponsors/ljharb" 3541 - } 3542 - }, 3543 - "node_modules/is-glob": { 3544 - "version": "4.0.3", 3545 - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3546 - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3547 - "dev": true, 3548 - "license": "MIT", 3549 - "dependencies": { 3550 - "is-extglob": "^2.1.1" 3551 - }, 3552 - "engines": { 3553 - "node": ">=0.10.0" 3554 - } 3555 - }, 3556 - "node_modules/is-map": { 3557 - "version": "2.0.3", 3558 - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", 3559 - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", 3560 - "dev": true, 3561 - "license": "MIT", 3562 - "engines": { 3563 - "node": ">= 0.4" 3564 - }, 3565 - "funding": { 3566 - "url": "https://github.com/sponsors/ljharb" 3567 - } 3568 - }, 3569 - "node_modules/is-negative-zero": { 3570 - "version": "2.0.3", 3571 - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", 3572 - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", 3573 - "dev": true, 3574 - "license": "MIT", 3575 - "engines": { 3576 - "node": ">= 0.4" 3577 - }, 3578 - "funding": { 3579 - "url": "https://github.com/sponsors/ljharb" 3580 - } 3581 - }, 3582 - "node_modules/is-number": { 3583 - "version": "7.0.0", 3584 - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3585 - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3586 - "dev": true, 3587 - "license": "MIT", 3588 - "engines": { 3589 - "node": ">=0.12.0" 3590 - } 3591 - }, 3592 - "node_modules/is-number-object": { 3593 - "version": "1.1.1", 3594 - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", 3595 - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", 3596 - "dev": true, 3597 - "license": "MIT", 3598 - "dependencies": { 3599 - "call-bound": "^1.0.3", 3600 - "has-tostringtag": "^1.0.2" 3601 - }, 3602 - "engines": { 3603 - "node": ">= 0.4" 3604 - }, 3605 - "funding": { 3606 - "url": "https://github.com/sponsors/ljharb" 3607 - } 3608 - }, 3609 - "node_modules/is-regex": { 3610 - "version": "1.2.1", 3611 - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", 3612 - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", 3613 - "dev": true, 3614 - "license": "MIT", 3615 - "dependencies": { 3616 - "call-bound": "^1.0.2", 3617 - "gopd": "^1.2.0", 3618 - "has-tostringtag": "^1.0.2", 3619 - "hasown": "^2.0.2" 3620 - }, 3621 - "engines": { 3622 - "node": ">= 0.4" 3623 - }, 3624 - "funding": { 3625 - "url": "https://github.com/sponsors/ljharb" 3626 - } 3627 - }, 3628 - "node_modules/is-set": { 3629 - "version": "2.0.3", 3630 - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", 3631 - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", 3632 - "dev": true, 3633 - "license": "MIT", 3634 - "engines": { 3635 - "node": ">= 0.4" 3636 - }, 3637 - "funding": { 3638 - "url": "https://github.com/sponsors/ljharb" 3639 - } 3640 - }, 3641 - "node_modules/is-shared-array-buffer": { 3642 - "version": "1.0.4", 3643 - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", 3644 - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", 3645 - "dev": true, 3646 - "license": "MIT", 3647 - "dependencies": { 3648 - "call-bound": "^1.0.3" 3649 - }, 3650 - "engines": { 3651 - "node": ">= 0.4" 3652 - }, 3653 - "funding": { 3654 - "url": "https://github.com/sponsors/ljharb" 3655 - } 3656 - }, 3657 - "node_modules/is-string": { 3658 - "version": "1.1.1", 3659 - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", 3660 - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", 3661 - "dev": true, 3662 - "license": "MIT", 3663 - "dependencies": { 3664 - "call-bound": "^1.0.3", 3665 - "has-tostringtag": "^1.0.2" 3666 - }, 3667 - "engines": { 3668 - "node": ">= 0.4" 3669 - }, 3670 - "funding": { 3671 - "url": "https://github.com/sponsors/ljharb" 3672 - } 3673 - }, 3674 - "node_modules/is-symbol": { 3675 - "version": "1.1.1", 3676 - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", 3677 - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", 3678 - "dev": true, 3679 - "license": "MIT", 3680 - "dependencies": { 3681 - "call-bound": "^1.0.2", 3682 - "has-symbols": "^1.1.0", 3683 - "safe-regex-test": "^1.1.0" 3684 - }, 3685 - "engines": { 3686 - "node": ">= 0.4" 3687 - }, 3688 - "funding": { 3689 - "url": "https://github.com/sponsors/ljharb" 3690 - } 3691 - }, 3692 - "node_modules/is-typed-array": { 3693 - "version": "1.1.15", 3694 - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", 3695 - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", 3696 - "dev": true, 3697 - "license": "MIT", 3698 - "dependencies": { 3699 - "which-typed-array": "^1.1.16" 3700 - }, 3701 - "engines": { 3702 - "node": ">= 0.4" 3703 - }, 3704 - "funding": { 3705 - "url": "https://github.com/sponsors/ljharb" 3706 - } 3707 - }, 3708 - "node_modules/is-weakmap": { 3709 - "version": "2.0.2", 3710 - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", 3711 - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", 3712 - "dev": true, 3713 - "license": "MIT", 3714 - "engines": { 3715 - "node": ">= 0.4" 3716 - }, 3717 - "funding": { 3718 - "url": "https://github.com/sponsors/ljharb" 3719 - } 3720 - }, 3721 - "node_modules/is-weakref": { 3722 - "version": "1.1.1", 3723 - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", 3724 - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", 3725 - "dev": true, 3726 - "license": "MIT", 3727 - "dependencies": { 3728 - "call-bound": "^1.0.3" 3729 - }, 3730 - "engines": { 3731 - "node": ">= 0.4" 3732 - }, 3733 - "funding": { 3734 - "url": "https://github.com/sponsors/ljharb" 3735 - } 3736 - }, 3737 - "node_modules/is-weakset": { 3738 - "version": "2.0.4", 3739 - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", 3740 - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", 3741 - "dev": true, 3742 - "license": "MIT", 3743 - "dependencies": { 3744 - "call-bound": "^1.0.3", 3745 - "get-intrinsic": "^1.2.6" 3746 - }, 3747 - "engines": { 3748 - "node": ">= 0.4" 3749 - }, 3750 - "funding": { 3751 - "url": "https://github.com/sponsors/ljharb" 3752 - } 3753 - }, 3754 - "node_modules/isarray": { 3755 - "version": "2.0.5", 3756 - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 3757 - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 3758 - "dev": true, 3759 - "license": "MIT" 3760 - }, 3761 - "node_modules/isexe": { 3762 - "version": "2.0.0", 3763 - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3764 - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 3765 - "dev": true, 3766 - "license": "ISC" 3767 - }, 3768 - "node_modules/iterator.prototype": { 3769 - "version": "1.1.5", 3770 - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", 3771 - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", 3772 - "dev": true, 3773 - "license": "MIT", 3774 - "dependencies": { 3775 - "define-data-property": "^1.1.4", 3776 - "es-object-atoms": "^1.0.0", 3777 - "get-intrinsic": "^1.2.6", 3778 - "get-proto": "^1.0.0", 3779 - "has-symbols": "^1.1.0", 3780 - "set-function-name": "^2.0.2" 3781 - }, 3782 - "engines": { 3783 - "node": ">= 0.4" 3784 - } 3785 - }, 3786 - "node_modules/jiti": { 3787 - "version": "2.6.1", 3788 - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", 3789 - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", 3790 - "dev": true, 3791 - "license": "MIT", 3792 - "peer": true, 3793 - "bin": { 3794 - "jiti": "lib/jiti-cli.mjs" 3795 - } 3796 - }, 3797 - "node_modules/js-tokens": { 3798 - "version": "4.0.0", 3799 - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3800 - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 3801 - "dev": true, 3802 - "license": "MIT" 3803 - }, 3804 - "node_modules/js-yaml": { 3805 - "version": "4.1.1", 3806 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", 3807 - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", 3808 - "dev": true, 3809 - "license": "MIT", 3810 - "dependencies": { 3811 - "argparse": "^2.0.1" 3812 - }, 3813 - "bin": { 3814 - "js-yaml": "bin/js-yaml.js" 3815 - } 3816 - }, 3817 - "node_modules/json-buffer": { 3818 - "version": "3.0.1", 3819 - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 3820 - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 3821 - "dev": true, 3822 - "license": "MIT" 3823 - }, 3824 - "node_modules/json-schema-migrate": { 3825 - "version": "2.0.0", 3826 - "resolved": "https://registry.npmjs.org/json-schema-migrate/-/json-schema-migrate-2.0.0.tgz", 3827 - "integrity": "sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ==", 3828 - "dev": true, 3829 - "license": "MIT", 3830 - "dependencies": { 3831 - "ajv": "^8.0.0" 3832 - } 3833 - }, 3834 - "node_modules/json-schema-migrate/node_modules/ajv": { 3835 - "version": "8.17.1", 3836 - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 3837 - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 3838 - "dev": true, 3839 - "license": "MIT", 3840 - "dependencies": { 3841 - "fast-deep-equal": "^3.1.3", 3842 - "fast-uri": "^3.0.1", 3843 - "json-schema-traverse": "^1.0.0", 3844 - "require-from-string": "^2.0.2" 3845 - }, 3846 - "funding": { 3847 - "type": "github", 3848 - "url": "https://github.com/sponsors/epoberezkin" 3849 - } 3850 - }, 3851 - "node_modules/json-schema-migrate/node_modules/json-schema-traverse": { 3852 - "version": "1.0.0", 3853 - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 3854 - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 3855 - "dev": true, 3856 - "license": "MIT" 3857 - }, 3858 - "node_modules/json-schema-traverse": { 3859 - "version": "0.4.1", 3860 - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 3861 - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 3862 - "dev": true, 3863 - "license": "MIT" 3864 - }, 3865 - "node_modules/json-stable-stringify-without-jsonify": { 3866 - "version": "1.0.1", 3867 - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 3868 - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 3869 - "dev": true, 3870 - "license": "MIT" 3871 - }, 3872 - "node_modules/json5": { 3873 - "version": "1.0.2", 3874 - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", 3875 - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", 3876 - "dev": true, 3877 - "license": "MIT", 3878 - "dependencies": { 3879 - "minimist": "^1.2.0" 3880 - }, 3881 - "bin": { 3882 - "json5": "lib/cli.js" 3883 - } 3884 - }, 3885 - "node_modules/jsonc-eslint-parser": { 3886 - "version": "2.4.1", 3887 - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.1.tgz", 3888 - "integrity": "sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==", 3889 - "dev": true, 3890 - "license": "MIT", 3891 - "dependencies": { 3892 - "acorn": "^8.5.0", 3893 - "eslint-visitor-keys": "^3.0.0", 3894 - "espree": "^9.0.0", 3895 - "semver": "^7.3.5" 3896 - }, 3897 - "engines": { 3898 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3899 - }, 3900 - "funding": { 3901 - "url": "https://github.com/sponsors/ota-meshi" 3902 - } 3903 - }, 3904 - "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { 3905 - "version": "3.4.3", 3906 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 3907 - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 3908 - "dev": true, 3909 - "license": "Apache-2.0", 3910 - "engines": { 3911 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3912 - }, 3913 - "funding": { 3914 - "url": "https://opencollective.com/eslint" 3915 - } 3916 - }, 3917 - "node_modules/jsonc-eslint-parser/node_modules/espree": { 3918 - "version": "9.6.1", 3919 - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 3920 - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 3921 - "dev": true, 3922 - "license": "BSD-2-Clause", 3923 - "dependencies": { 3924 - "acorn": "^8.9.0", 3925 - "acorn-jsx": "^5.3.2", 3926 - "eslint-visitor-keys": "^3.4.1" 3927 - }, 3928 - "engines": { 3929 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3930 - }, 3931 - "funding": { 3932 - "url": "https://opencollective.com/eslint" 3933 - } 3934 - }, 3935 - "node_modules/jsonc-eslint-parser/node_modules/semver": { 3936 - "version": "7.7.3", 3937 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 3938 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 3939 - "dev": true, 3940 - "license": "ISC", 3941 - "bin": { 3942 - "semver": "bin/semver.js" 3943 - }, 3944 - "engines": { 3945 - "node": ">=10" 3946 - } 3947 - }, 3948 - "node_modules/jsx-ast-utils": { 3949 - "version": "3.3.5", 3950 - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", 3951 - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", 3952 - "dev": true, 3953 - "license": "MIT", 3954 - "dependencies": { 3955 - "array-includes": "^3.1.6", 3956 - "array.prototype.flat": "^1.3.1", 3957 - "object.assign": "^4.1.4", 3958 - "object.values": "^1.1.6" 3959 - }, 3960 - "engines": { 3961 - "node": ">=4.0" 3962 - } 3963 - }, 3964 - "node_modules/keyv": { 3965 - "version": "4.5.4", 3966 - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 3967 - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 3968 - "dev": true, 3969 - "license": "MIT", 3970 - "dependencies": { 3971 - "json-buffer": "3.0.1" 3972 - } 3973 - }, 3974 - "node_modules/levn": { 3975 - "version": "0.4.1", 3976 - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 3977 - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 3978 - "dev": true, 3979 - "license": "MIT", 3980 - "dependencies": { 3981 - "prelude-ls": "^1.2.1", 3982 - "type-check": "~0.4.0" 3983 - }, 3984 - "engines": { 3985 - "node": ">= 0.8.0" 3986 - } 3987 - }, 3988 - "node_modules/locate-path": { 3989 - "version": "6.0.0", 3990 - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3991 - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3992 - "dev": true, 3993 - "license": "MIT", 3994 - "dependencies": { 3995 - "p-locate": "^5.0.0" 3996 - }, 3997 - "engines": { 3998 - "node": ">=10" 3999 - }, 4000 - "funding": { 4001 - "url": "https://github.com/sponsors/sindresorhus" 4002 - } 4003 - }, 4004 - "node_modules/lodash.merge": { 4005 - "version": "4.6.2", 4006 - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 4007 - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 4008 - "dev": true, 4009 - "license": "MIT" 4010 - }, 4011 - "node_modules/loose-envify": { 4012 - "version": "1.4.0", 4013 - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 4014 - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 4015 - "dev": true, 4016 - "license": "MIT", 4017 - "dependencies": { 4018 - "js-tokens": "^3.0.0 || ^4.0.0" 4019 - }, 4020 - "bin": { 4021 - "loose-envify": "cli.js" 4022 - } 4023 - }, 4024 - "node_modules/math-intrinsics": { 4025 - "version": "1.1.0", 4026 - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 4027 - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 4028 - "dev": true, 4029 - "license": "MIT", 4030 - "engines": { 4031 - "node": ">= 0.4" 4032 - } 4033 - }, 4034 - "node_modules/merge2": { 4035 - "version": "1.4.1", 4036 - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 4037 - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 4038 - "dev": true, 4039 - "license": "MIT", 4040 - "engines": { 4041 - "node": ">= 8" 4042 - } 4043 - }, 4044 - "node_modules/micromatch": { 4045 - "version": "4.0.8", 4046 - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 4047 - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 4048 - "dev": true, 4049 - "license": "MIT", 4050 - "dependencies": { 4051 - "braces": "^3.0.3", 4052 - "picomatch": "^2.3.1" 4053 - }, 4054 - "engines": { 4055 - "node": ">=8.6" 4056 - } 4057 - }, 4058 - "node_modules/minimatch": { 4059 - "version": "3.1.2", 4060 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 4061 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 4062 - "dev": true, 4063 - "license": "ISC", 4064 - "dependencies": { 4065 - "brace-expansion": "^1.1.7" 4066 - }, 4067 - "engines": { 4068 - "node": "*" 4069 - } 4070 - }, 4071 - "node_modules/minimist": { 4072 - "version": "1.2.8", 4073 - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 4074 - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 4075 - "dev": true, 4076 - "license": "MIT", 4077 - "funding": { 4078 - "url": "https://github.com/sponsors/ljharb" 4079 - } 4080 - }, 4081 - "node_modules/module-replacements": { 4082 - "version": "2.10.1", 4083 - "resolved": "https://registry.npmjs.org/module-replacements/-/module-replacements-2.10.1.tgz", 4084 - "integrity": "sha512-qkKuLpMHDqRSM676OPL7HUpCiiP3NSxgf8NNR1ga2h/iJLNKTsOSjMEwrcT85DMSti2vmOqxknOVBGWj6H6etQ==", 4085 - "dev": true, 4086 - "license": "MIT" 4087 - }, 4088 - "node_modules/moment": { 4089 - "version": "2.29.4", 4090 - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 4091 - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 4092 - "license": "MIT", 4093 - "engines": { 4094 - "node": "*" 4095 - } 4096 - }, 4097 - "node_modules/ms": { 4098 - "version": "2.1.3", 4099 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 4100 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 4101 - "dev": true, 4102 - "license": "MIT" 4103 - }, 4104 - "node_modules/nanoid": { 4105 - "version": "5.1.6", 4106 - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", 4107 - "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", 4108 - "funding": [ 4109 - { 4110 - "type": "github", 4111 - "url": "https://github.com/sponsors/ai" 4112 - } 4113 - ], 4114 - "license": "MIT", 4115 - "bin": { 4116 - "nanoid": "bin/nanoid.js" 4117 - }, 4118 - "engines": { 4119 - "node": "^18 || >=20" 4120 - } 4121 - }, 4122 - "node_modules/natural-compare": { 4123 - "version": "1.4.0", 4124 - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 4125 - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 4126 - "dev": true, 4127 - "license": "MIT" 4128 - }, 4129 - "node_modules/object-assign": { 4130 - "version": "4.1.1", 4131 - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 4132 - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 4133 - "dev": true, 4134 - "license": "MIT", 4135 - "engines": { 4136 - "node": ">=0.10.0" 4137 - } 4138 - }, 4139 - "node_modules/object-inspect": { 4140 - "version": "1.13.4", 4141 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 4142 - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 4143 - "dev": true, 4144 - "license": "MIT", 4145 - "engines": { 4146 - "node": ">= 0.4" 4147 - }, 4148 - "funding": { 4149 - "url": "https://github.com/sponsors/ljharb" 4150 - } 4151 - }, 4152 - "node_modules/object-keys": { 4153 - "version": "1.1.1", 4154 - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 4155 - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 4156 - "dev": true, 4157 - "license": "MIT", 4158 - "engines": { 4159 - "node": ">= 0.4" 4160 - } 4161 - }, 4162 - "node_modules/object.assign": { 4163 - "version": "4.1.7", 4164 - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", 4165 - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", 4166 - "dev": true, 4167 - "license": "MIT", 4168 - "dependencies": { 4169 - "call-bind": "^1.0.8", 4170 - "call-bound": "^1.0.3", 4171 - "define-properties": "^1.2.1", 4172 - "es-object-atoms": "^1.0.0", 4173 - "has-symbols": "^1.1.0", 4174 - "object-keys": "^1.1.1" 4175 - }, 4176 - "engines": { 4177 - "node": ">= 0.4" 4178 - }, 4179 - "funding": { 4180 - "url": "https://github.com/sponsors/ljharb" 4181 - } 4182 - }, 4183 - "node_modules/object.entries": { 4184 - "version": "1.1.9", 4185 - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", 4186 - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", 4187 - "dev": true, 4188 - "license": "MIT", 4189 - "dependencies": { 4190 - "call-bind": "^1.0.8", 4191 - "call-bound": "^1.0.4", 4192 - "define-properties": "^1.2.1", 4193 - "es-object-atoms": "^1.1.1" 4194 - }, 4195 - "engines": { 4196 - "node": ">= 0.4" 4197 - } 4198 - }, 4199 - "node_modules/object.fromentries": { 4200 - "version": "2.0.8", 4201 - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", 4202 - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", 4203 - "dev": true, 4204 - "license": "MIT", 4205 - "dependencies": { 4206 - "call-bind": "^1.0.7", 4207 - "define-properties": "^1.2.1", 4208 - "es-abstract": "^1.23.2", 4209 - "es-object-atoms": "^1.0.0" 4210 - }, 4211 - "engines": { 4212 - "node": ">= 0.4" 4213 - }, 4214 - "funding": { 4215 - "url": "https://github.com/sponsors/ljharb" 4216 - } 4217 - }, 4218 - "node_modules/object.groupby": { 4219 - "version": "1.0.3", 4220 - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", 4221 - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", 4222 - "dev": true, 4223 - "license": "MIT", 4224 - "dependencies": { 4225 - "call-bind": "^1.0.7", 4226 - "define-properties": "^1.2.1", 4227 - "es-abstract": "^1.23.2" 4228 - }, 4229 - "engines": { 4230 - "node": ">= 0.4" 4231 - } 4232 - }, 4233 - "node_modules/object.values": { 4234 - "version": "1.2.1", 4235 - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", 4236 - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", 4237 - "dev": true, 4238 - "license": "MIT", 4239 - "dependencies": { 4240 - "call-bind": "^1.0.8", 4241 - "call-bound": "^1.0.3", 4242 - "define-properties": "^1.2.1", 4243 - "es-object-atoms": "^1.0.0" 4244 - }, 4245 - "engines": { 4246 - "node": ">= 0.4" 4247 - }, 4248 - "funding": { 4249 - "url": "https://github.com/sponsors/ljharb" 4250 - } 4251 - }, 4252 - "node_modules/obsidian": { 4253 - "version": "1.10.3", 4254 - "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.10.3.tgz", 4255 - "integrity": "sha512-VP+ZSxNMG7y6Z+sU9WqLvJAskCfkFrTz2kFHWmmzis+C+4+ELjk/sazwcTHrHXNZlgCeo8YOlM6SOrAFCynNew==", 4256 - "license": "MIT", 4257 - "dependencies": { 4258 - "@types/codemirror": "5.60.8", 4259 - "moment": "2.29.4" 4260 - }, 4261 - "peerDependencies": { 4262 - "@codemirror/state": "6.5.0", 4263 - "@codemirror/view": "6.38.6" 4264 - } 4265 - }, 4266 - "node_modules/optionator": { 4267 - "version": "0.9.4", 4268 - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 4269 - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 4270 - "dev": true, 4271 - "license": "MIT", 4272 - "dependencies": { 4273 - "deep-is": "^0.1.3", 4274 - "fast-levenshtein": "^2.0.6", 4275 - "levn": "^0.4.1", 4276 - "prelude-ls": "^1.2.1", 4277 - "type-check": "^0.4.0", 4278 - "word-wrap": "^1.2.5" 4279 - }, 4280 - "engines": { 4281 - "node": ">= 0.8.0" 4282 - } 4283 - }, 4284 - "node_modules/own-keys": { 4285 - "version": "1.0.1", 4286 - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", 4287 - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", 4288 - "dev": true, 4289 - "license": "MIT", 4290 - "dependencies": { 4291 - "get-intrinsic": "^1.2.6", 4292 - "object-keys": "^1.1.1", 4293 - "safe-push-apply": "^1.0.0" 4294 - }, 4295 - "engines": { 4296 - "node": ">= 0.4" 4297 - }, 4298 - "funding": { 4299 - "url": "https://github.com/sponsors/ljharb" 4300 - } 4301 - }, 4302 - "node_modules/p-limit": { 4303 - "version": "3.1.0", 4304 - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 4305 - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 4306 - "dev": true, 4307 - "license": "MIT", 4308 - "dependencies": { 4309 - "yocto-queue": "^0.1.0" 4310 - }, 4311 - "engines": { 4312 - "node": ">=10" 4313 - }, 4314 - "funding": { 4315 - "url": "https://github.com/sponsors/sindresorhus" 4316 - } 4317 - }, 4318 - "node_modules/p-locate": { 4319 - "version": "5.0.0", 4320 - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 4321 - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 4322 - "dev": true, 4323 - "license": "MIT", 4324 - "dependencies": { 4325 - "p-limit": "^3.0.2" 4326 - }, 4327 - "engines": { 4328 - "node": ">=10" 4329 - }, 4330 - "funding": { 4331 - "url": "https://github.com/sponsors/sindresorhus" 4332 - } 4333 - }, 4334 - "node_modules/parent-module": { 4335 - "version": "1.0.1", 4336 - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 4337 - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 4338 - "dev": true, 4339 - "license": "MIT", 4340 - "dependencies": { 4341 - "callsites": "^3.0.0" 4342 - }, 4343 - "engines": { 4344 - "node": ">=6" 4345 - } 4346 - }, 4347 - "node_modules/path-exists": { 4348 - "version": "4.0.0", 4349 - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 4350 - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 4351 - "dev": true, 4352 - "license": "MIT", 4353 - "engines": { 4354 - "node": ">=8" 4355 - } 4356 - }, 4357 - "node_modules/path-key": { 4358 - "version": "3.1.1", 4359 - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 4360 - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 4361 - "dev": true, 4362 - "license": "MIT", 4363 - "engines": { 4364 - "node": ">=8" 4365 - } 4366 - }, 4367 - "node_modules/path-parse": { 4368 - "version": "1.0.7", 4369 - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 4370 - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 4371 - "dev": true, 4372 - "license": "MIT" 4373 - }, 4374 - "node_modules/picocolors": { 4375 - "version": "1.1.1", 4376 - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 4377 - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 4378 - "license": "ISC" 4379 - }, 4380 - "node_modules/picomatch": { 4381 - "version": "2.3.1", 4382 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 4383 - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 4384 - "dev": true, 4385 - "license": "MIT", 4386 - "engines": { 4387 - "node": ">=8.6" 4388 - }, 4389 - "funding": { 4390 - "url": "https://github.com/sponsors/jonschlinkert" 4391 - } 4392 - }, 4393 - "node_modules/possible-typed-array-names": { 4394 - "version": "1.1.0", 4395 - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", 4396 - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", 4397 - "dev": true, 4398 - "license": "MIT", 4399 - "engines": { 4400 - "node": ">= 0.4" 4401 - } 4402 - }, 4403 - "node_modules/prelude-ls": { 4404 - "version": "1.2.1", 4405 - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 4406 - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 4407 - "dev": true, 4408 - "license": "MIT", 4409 - "engines": { 4410 - "node": ">= 0.8.0" 4411 - } 4412 - }, 4413 - "node_modules/prettier": { 4414 - "version": "3.8.1", 4415 - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", 4416 - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", 4417 - "license": "MIT", 4418 - "bin": { 4419 - "prettier": "bin/prettier.cjs" 4420 - }, 4421 - "engines": { 4422 - "node": ">=14" 4423 - }, 4424 - "funding": { 4425 - "url": "https://github.com/prettier/prettier?sponsor=1" 4426 - } 4427 - }, 4428 - "node_modules/prop-types": { 4429 - "version": "15.8.1", 4430 - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 4431 - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 4432 - "dev": true, 4433 - "license": "MIT", 4434 - "dependencies": { 4435 - "loose-envify": "^1.4.0", 4436 - "object-assign": "^4.1.1", 4437 - "react-is": "^16.13.1" 4438 - } 4439 - }, 4440 - "node_modules/punycode": { 4441 - "version": "2.3.1", 4442 - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 4443 - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 4444 - "dev": true, 4445 - "license": "MIT", 4446 - "engines": { 4447 - "node": ">=6" 4448 - } 4449 - }, 4450 - "node_modules/queue-microtask": { 4451 - "version": "1.2.3", 4452 - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 4453 - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 4454 - "dev": true, 4455 - "funding": [ 4456 - { 4457 - "type": "github", 4458 - "url": "https://github.com/sponsors/feross" 4459 - }, 4460 - { 4461 - "type": "patreon", 4462 - "url": "https://www.patreon.com/feross" 4463 - }, 4464 - { 4465 - "type": "consulting", 4466 - "url": "https://feross.org/support" 4467 - } 4468 - ], 4469 - "license": "MIT" 4470 - }, 4471 - "node_modules/react-is": { 4472 - "version": "16.13.1", 4473 - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 4474 - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", 4475 - "dev": true, 4476 - "license": "MIT" 4477 - }, 4478 - "node_modules/reflect.getprototypeof": { 4479 - "version": "1.0.10", 4480 - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", 4481 - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", 4482 - "dev": true, 4483 - "license": "MIT", 4484 - "dependencies": { 4485 - "call-bind": "^1.0.8", 4486 - "define-properties": "^1.2.1", 4487 - "es-abstract": "^1.23.9", 4488 - "es-errors": "^1.3.0", 4489 - "es-object-atoms": "^1.0.0", 4490 - "get-intrinsic": "^1.2.7", 4491 - "get-proto": "^1.0.1", 4492 - "which-builtin-type": "^1.2.1" 4493 - }, 4494 - "engines": { 4495 - "node": ">= 0.4" 4496 - }, 4497 - "funding": { 4498 - "url": "https://github.com/sponsors/ljharb" 4499 - } 4500 - }, 4501 - "node_modules/regexp-tree": { 4502 - "version": "0.1.27", 4503 - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", 4504 - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", 4505 - "dev": true, 4506 - "license": "MIT", 4507 - "bin": { 4508 - "regexp-tree": "bin/regexp-tree" 4509 - } 4510 - }, 4511 - "node_modules/regexp.prototype.flags": { 4512 - "version": "1.5.4", 4513 - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", 4514 - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", 4515 - "dev": true, 4516 - "license": "MIT", 4517 - "dependencies": { 4518 - "call-bind": "^1.0.8", 4519 - "define-properties": "^1.2.1", 4520 - "es-errors": "^1.3.0", 4521 - "get-proto": "^1.0.1", 4522 - "gopd": "^1.2.0", 4523 - "set-function-name": "^2.0.2" 4524 - }, 4525 - "engines": { 4526 - "node": ">= 0.4" 4527 - }, 4528 - "funding": { 4529 - "url": "https://github.com/sponsors/ljharb" 4530 - } 4531 - }, 4532 - "node_modules/require-from-string": { 4533 - "version": "2.0.2", 4534 - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 4535 - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 4536 - "dev": true, 4537 - "license": "MIT", 4538 - "engines": { 4539 - "node": ">=0.10.0" 4540 - } 4541 - }, 4542 - "node_modules/resolve": { 4543 - "version": "1.22.11", 4544 - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", 4545 - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", 4546 - "dev": true, 4547 - "license": "MIT", 4548 - "dependencies": { 4549 - "is-core-module": "^2.16.1", 4550 - "path-parse": "^1.0.7", 4551 - "supports-preserve-symlinks-flag": "^1.0.0" 4552 - }, 4553 - "bin": { 4554 - "resolve": "bin/resolve" 4555 - }, 4556 - "engines": { 4557 - "node": ">= 0.4" 4558 - }, 4559 - "funding": { 4560 - "url": "https://github.com/sponsors/ljharb" 4561 - } 4562 - }, 4563 - "node_modules/resolve-from": { 4564 - "version": "4.0.0", 4565 - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 4566 - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 4567 - "dev": true, 4568 - "license": "MIT", 4569 - "engines": { 4570 - "node": ">=4" 4571 - } 4572 - }, 4573 - "node_modules/resolve-pkg-maps": { 4574 - "version": "1.0.0", 4575 - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 4576 - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 4577 - "dev": true, 4578 - "license": "MIT", 4579 - "funding": { 4580 - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 4581 - } 4582 - }, 4583 - "node_modules/ret": { 4584 - "version": "0.1.15", 4585 - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 4586 - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 4587 - "dev": true, 4588 - "license": "MIT", 4589 - "engines": { 4590 - "node": ">=0.12" 4591 - } 4592 - }, 4593 - "node_modules/reusify": { 4594 - "version": "1.1.0", 4595 - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", 4596 - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", 4597 - "dev": true, 4598 - "license": "MIT", 4599 - "engines": { 4600 - "iojs": ">=1.0.0", 4601 - "node": ">=0.10.0" 4602 - } 4603 - }, 4604 - "node_modules/run-parallel": { 4605 - "version": "1.2.0", 4606 - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 4607 - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 4608 - "dev": true, 4609 - "funding": [ 4610 - { 4611 - "type": "github", 4612 - "url": "https://github.com/sponsors/feross" 4613 - }, 4614 - { 4615 - "type": "patreon", 4616 - "url": "https://www.patreon.com/feross" 4617 - }, 4618 - { 4619 - "type": "consulting", 4620 - "url": "https://feross.org/support" 4621 - } 4622 - ], 4623 - "license": "MIT", 4624 - "dependencies": { 4625 - "queue-microtask": "^1.2.2" 4626 - } 4627 - }, 4628 - "node_modules/safe-array-concat": { 4629 - "version": "1.1.3", 4630 - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", 4631 - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", 4632 - "dev": true, 4633 - "license": "MIT", 4634 - "dependencies": { 4635 - "call-bind": "^1.0.8", 4636 - "call-bound": "^1.0.2", 4637 - "get-intrinsic": "^1.2.6", 4638 - "has-symbols": "^1.1.0", 4639 - "isarray": "^2.0.5" 4640 - }, 4641 - "engines": { 4642 - "node": ">=0.4" 4643 - }, 4644 - "funding": { 4645 - "url": "https://github.com/sponsors/ljharb" 4646 - } 4647 - }, 4648 - "node_modules/safe-buffer": { 4649 - "version": "5.2.1", 4650 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 4651 - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 4652 - "dev": true, 4653 - "funding": [ 4654 - { 4655 - "type": "github", 4656 - "url": "https://github.com/sponsors/feross" 4657 - }, 4658 - { 4659 - "type": "patreon", 4660 - "url": "https://www.patreon.com/feross" 4661 - }, 4662 - { 4663 - "type": "consulting", 4664 - "url": "https://feross.org/support" 4665 - } 4666 - ], 4667 - "license": "MIT" 4668 - }, 4669 - "node_modules/safe-push-apply": { 4670 - "version": "1.0.0", 4671 - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", 4672 - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", 4673 - "dev": true, 4674 - "license": "MIT", 4675 - "dependencies": { 4676 - "es-errors": "^1.3.0", 4677 - "isarray": "^2.0.5" 4678 - }, 4679 - "engines": { 4680 - "node": ">= 0.4" 4681 - }, 4682 - "funding": { 4683 - "url": "https://github.com/sponsors/ljharb" 4684 - } 4685 - }, 4686 - "node_modules/safe-regex": { 4687 - "version": "2.1.1", 4688 - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", 4689 - "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", 4690 - "dev": true, 4691 - "license": "MIT", 4692 - "dependencies": { 4693 - "regexp-tree": "~0.1.1" 4694 - } 4695 - }, 4696 - "node_modules/safe-regex-test": { 4697 - "version": "1.1.0", 4698 - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", 4699 - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", 4700 - "dev": true, 4701 - "license": "MIT", 4702 - "dependencies": { 4703 - "call-bound": "^1.0.2", 4704 - "es-errors": "^1.3.0", 4705 - "is-regex": "^1.2.1" 4706 - }, 4707 - "engines": { 4708 - "node": ">= 0.4" 4709 - }, 4710 - "funding": { 4711 - "url": "https://github.com/sponsors/ljharb" 4712 - } 4713 - }, 4714 - "node_modules/semver": { 4715 - "version": "6.3.1", 4716 - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 4717 - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 4718 - "dev": true, 4719 - "license": "ISC", 4720 - "bin": { 4721 - "semver": "bin/semver.js" 4722 - } 4723 - }, 4724 - "node_modules/set-function-length": { 4725 - "version": "1.2.2", 4726 - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 4727 - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 4728 - "dev": true, 4729 - "license": "MIT", 4730 - "dependencies": { 4731 - "define-data-property": "^1.1.4", 4732 - "es-errors": "^1.3.0", 4733 - "function-bind": "^1.1.2", 4734 - "get-intrinsic": "^1.2.4", 4735 - "gopd": "^1.0.1", 4736 - "has-property-descriptors": "^1.0.2" 4737 - }, 4738 - "engines": { 4739 - "node": ">= 0.4" 4740 - } 4741 - }, 4742 - "node_modules/set-function-name": { 4743 - "version": "2.0.2", 4744 - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", 4745 - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", 4746 - "dev": true, 4747 - "license": "MIT", 4748 - "dependencies": { 4749 - "define-data-property": "^1.1.4", 4750 - "es-errors": "^1.3.0", 4751 - "functions-have-names": "^1.2.3", 4752 - "has-property-descriptors": "^1.0.2" 4753 - }, 4754 - "engines": { 4755 - "node": ">= 0.4" 4756 - } 4757 - }, 4758 - "node_modules/set-proto": { 4759 - "version": "1.0.0", 4760 - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", 4761 - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", 4762 - "dev": true, 4763 - "license": "MIT", 4764 - "dependencies": { 4765 - "dunder-proto": "^1.0.1", 4766 - "es-errors": "^1.3.0", 4767 - "es-object-atoms": "^1.0.0" 4768 - }, 4769 - "engines": { 4770 - "node": ">= 0.4" 4771 - } 4772 - }, 4773 - "node_modules/shebang-command": { 4774 - "version": "2.0.0", 4775 - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 4776 - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 4777 - "dev": true, 4778 - "license": "MIT", 4779 - "dependencies": { 4780 - "shebang-regex": "^3.0.0" 4781 - }, 4782 - "engines": { 4783 - "node": ">=8" 4784 - } 4785 - }, 4786 - "node_modules/shebang-regex": { 4787 - "version": "3.0.0", 4788 - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 4789 - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 4790 - "dev": true, 4791 - "license": "MIT", 4792 - "engines": { 4793 - "node": ">=8" 4794 - } 4795 - }, 4796 - "node_modules/side-channel": { 4797 - "version": "1.1.0", 4798 - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 4799 - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 4800 - "dev": true, 4801 - "license": "MIT", 4802 - "dependencies": { 4803 - "es-errors": "^1.3.0", 4804 - "object-inspect": "^1.13.3", 4805 - "side-channel-list": "^1.0.0", 4806 - "side-channel-map": "^1.0.1", 4807 - "side-channel-weakmap": "^1.0.2" 4808 - }, 4809 - "engines": { 4810 - "node": ">= 0.4" 4811 - }, 4812 - "funding": { 4813 - "url": "https://github.com/sponsors/ljharb" 4814 - } 4815 - }, 4816 - "node_modules/side-channel-list": { 4817 - "version": "1.0.0", 4818 - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 4819 - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 4820 - "dev": true, 4821 - "license": "MIT", 4822 - "dependencies": { 4823 - "es-errors": "^1.3.0", 4824 - "object-inspect": "^1.13.3" 4825 - }, 4826 - "engines": { 4827 - "node": ">= 0.4" 4828 - }, 4829 - "funding": { 4830 - "url": "https://github.com/sponsors/ljharb" 4831 - } 4832 - }, 4833 - "node_modules/side-channel-map": { 4834 - "version": "1.0.1", 4835 - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 4836 - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 4837 - "dev": true, 4838 - "license": "MIT", 4839 - "dependencies": { 4840 - "call-bound": "^1.0.2", 4841 - "es-errors": "^1.3.0", 4842 - "get-intrinsic": "^1.2.5", 4843 - "object-inspect": "^1.13.3" 4844 - }, 4845 - "engines": { 4846 - "node": ">= 0.4" 4847 - }, 4848 - "funding": { 4849 - "url": "https://github.com/sponsors/ljharb" 4850 - } 4851 - }, 4852 - "node_modules/side-channel-weakmap": { 4853 - "version": "1.0.2", 4854 - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 4855 - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 4856 - "dev": true, 4857 - "license": "MIT", 4858 - "dependencies": { 4859 - "call-bound": "^1.0.2", 4860 - "es-errors": "^1.3.0", 4861 - "get-intrinsic": "^1.2.5", 4862 - "object-inspect": "^1.13.3", 4863 - "side-channel-map": "^1.0.1" 4864 - }, 4865 - "engines": { 4866 - "node": ">= 0.4" 4867 - }, 4868 - "funding": { 4869 - "url": "https://github.com/sponsors/ljharb" 4870 - } 4871 - }, 4872 - "node_modules/stop-iteration-iterator": { 4873 - "version": "1.1.0", 4874 - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", 4875 - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", 4876 - "dev": true, 4877 - "license": "MIT", 4878 - "dependencies": { 4879 - "es-errors": "^1.3.0", 4880 - "internal-slot": "^1.1.0" 4881 - }, 4882 - "engines": { 4883 - "node": ">= 0.4" 4884 - } 4885 - }, 4886 - "node_modules/string.prototype.matchall": { 4887 - "version": "4.0.12", 4888 - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", 4889 - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", 4890 - "dev": true, 4891 - "license": "MIT", 4892 - "dependencies": { 4893 - "call-bind": "^1.0.8", 4894 - "call-bound": "^1.0.3", 4895 - "define-properties": "^1.2.1", 4896 - "es-abstract": "^1.23.6", 4897 - "es-errors": "^1.3.0", 4898 - "es-object-atoms": "^1.0.0", 4899 - "get-intrinsic": "^1.2.6", 4900 - "gopd": "^1.2.0", 4901 - "has-symbols": "^1.1.0", 4902 - "internal-slot": "^1.1.0", 4903 - "regexp.prototype.flags": "^1.5.3", 4904 - "set-function-name": "^2.0.2", 4905 - "side-channel": "^1.1.0" 4906 - }, 4907 - "engines": { 4908 - "node": ">= 0.4" 4909 - }, 4910 - "funding": { 4911 - "url": "https://github.com/sponsors/ljharb" 4912 - } 4913 - }, 4914 - "node_modules/string.prototype.repeat": { 4915 - "version": "1.0.0", 4916 - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", 4917 - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", 4918 - "dev": true, 4919 - "license": "MIT", 4920 - "dependencies": { 4921 - "define-properties": "^1.1.3", 4922 - "es-abstract": "^1.17.5" 4923 - } 4924 - }, 4925 - "node_modules/string.prototype.trim": { 4926 - "version": "1.2.10", 4927 - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", 4928 - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", 4929 - "dev": true, 4930 - "license": "MIT", 4931 - "dependencies": { 4932 - "call-bind": "^1.0.8", 4933 - "call-bound": "^1.0.2", 4934 - "define-data-property": "^1.1.4", 4935 - "define-properties": "^1.2.1", 4936 - "es-abstract": "^1.23.5", 4937 - "es-object-atoms": "^1.0.0", 4938 - "has-property-descriptors": "^1.0.2" 4939 - }, 4940 - "engines": { 4941 - "node": ">= 0.4" 4942 - }, 4943 - "funding": { 4944 - "url": "https://github.com/sponsors/ljharb" 4945 - } 4946 - }, 4947 - "node_modules/string.prototype.trimend": { 4948 - "version": "1.0.9", 4949 - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", 4950 - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", 4951 - "dev": true, 4952 - "license": "MIT", 4953 - "dependencies": { 4954 - "call-bind": "^1.0.8", 4955 - "call-bound": "^1.0.2", 4956 - "define-properties": "^1.2.1", 4957 - "es-object-atoms": "^1.0.0" 4958 - }, 4959 - "engines": { 4960 - "node": ">= 0.4" 4961 - }, 4962 - "funding": { 4963 - "url": "https://github.com/sponsors/ljharb" 4964 - } 4965 - }, 4966 - "node_modules/string.prototype.trimstart": { 4967 - "version": "1.0.8", 4968 - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", 4969 - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", 4970 - "dev": true, 4971 - "license": "MIT", 4972 - "dependencies": { 4973 - "call-bind": "^1.0.7", 4974 - "define-properties": "^1.2.1", 4975 - "es-object-atoms": "^1.0.0" 4976 - }, 4977 - "engines": { 4978 - "node": ">= 0.4" 4979 - }, 4980 - "funding": { 4981 - "url": "https://github.com/sponsors/ljharb" 4982 - } 4983 - }, 4984 - "node_modules/strip-bom": { 4985 - "version": "3.0.0", 4986 - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 4987 - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 4988 - "dev": true, 4989 - "license": "MIT", 4990 - "engines": { 4991 - "node": ">=4" 4992 - } 4993 - }, 4994 - "node_modules/strip-json-comments": { 4995 - "version": "3.1.1", 4996 - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 4997 - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 4998 - "dev": true, 4999 - "license": "MIT", 5000 - "engines": { 5001 - "node": ">=8" 5002 - }, 5003 - "funding": { 5004 - "url": "https://github.com/sponsors/sindresorhus" 5005 - } 5006 - }, 5007 - "node_modules/style-mod": { 5008 - "version": "4.1.3", 5009 - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz", 5010 - "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==", 5011 - "license": "MIT" 5012 - }, 5013 - "node_modules/supports-color": { 5014 - "version": "7.2.0", 5015 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 5016 - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 5017 - "dev": true, 5018 - "license": "MIT", 5019 - "dependencies": { 5020 - "has-flag": "^4.0.0" 5021 - }, 5022 - "engines": { 5023 - "node": ">=8" 5024 - } 5025 - }, 5026 - "node_modules/supports-preserve-symlinks-flag": { 5027 - "version": "1.0.0", 5028 - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 5029 - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 5030 - "dev": true, 5031 - "license": "MIT", 5032 - "engines": { 5033 - "node": ">= 0.4" 5034 - }, 5035 - "funding": { 5036 - "url": "https://github.com/sponsors/ljharb" 5037 - } 5038 - }, 5039 - "node_modules/synckit": { 5040 - "version": "0.9.3", 5041 - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.3.tgz", 5042 - "integrity": "sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==", 5043 - "dev": true, 5044 - "license": "MIT", 5045 - "dependencies": { 5046 - "@pkgr/core": "^0.1.0", 5047 - "tslib": "^2.6.2" 5048 - }, 5049 - "engines": { 5050 - "node": "^14.18.0 || >=16.0.0" 5051 - }, 5052 - "funding": { 5053 - "url": "https://opencollective.com/unts" 5054 - } 5055 - }, 5056 - "node_modules/synckit/node_modules/tslib": { 5057 - "version": "2.8.1", 5058 - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 5059 - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 5060 - "dev": true, 5061 - "license": "0BSD" 5062 - }, 5063 - "node_modules/tapable": { 5064 - "version": "2.3.0", 5065 - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", 5066 - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", 5067 - "dev": true, 5068 - "license": "MIT", 5069 - "engines": { 5070 - "node": ">=6" 5071 - }, 5072 - "funding": { 5073 - "type": "opencollective", 5074 - "url": "https://opencollective.com/webpack" 5075 - } 5076 - }, 5077 - "node_modules/to-regex-range": { 5078 - "version": "5.0.1", 5079 - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 5080 - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 5081 - "dev": true, 5082 - "license": "MIT", 5083 - "dependencies": { 5084 - "is-number": "^7.0.0" 5085 - }, 5086 - "engines": { 5087 - "node": ">=8.0" 5088 - } 5089 - }, 5090 - "node_modules/toml-eslint-parser": { 5091 - "version": "0.9.3", 5092 - "resolved": "https://registry.npmjs.org/toml-eslint-parser/-/toml-eslint-parser-0.9.3.tgz", 5093 - "integrity": "sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==", 5094 - "dev": true, 5095 - "license": "MIT", 5096 - "dependencies": { 5097 - "eslint-visitor-keys": "^3.0.0" 5098 - }, 5099 - "engines": { 5100 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 5101 - }, 5102 - "funding": { 5103 - "url": "https://github.com/sponsors/ota-meshi" 5104 - } 5105 - }, 5106 - "node_modules/toml-eslint-parser/node_modules/eslint-visitor-keys": { 5107 - "version": "3.4.3", 5108 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 5109 - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 5110 - "dev": true, 5111 - "license": "Apache-2.0", 5112 - "engines": { 5113 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 5114 - }, 5115 - "funding": { 5116 - "url": "https://opencollective.com/eslint" 5117 - } 5118 - }, 5119 - "node_modules/ts-api-utils": { 5120 - "version": "2.1.0", 5121 - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", 5122 - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", 5123 - "dev": true, 5124 - "license": "MIT", 5125 - "engines": { 5126 - "node": ">=18.12" 5127 - }, 5128 - "peerDependencies": { 5129 - "typescript": ">=4.8.4" 5130 - } 5131 - }, 5132 - "node_modules/tsconfig-paths": { 5133 - "version": "3.15.0", 5134 - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", 5135 - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", 5136 - "dev": true, 5137 - "license": "MIT", 5138 - "dependencies": { 5139 - "@types/json5": "^0.0.29", 5140 - "json5": "^1.0.2", 5141 - "minimist": "^1.2.6", 5142 - "strip-bom": "^3.0.0" 5143 - } 5144 - }, 5145 - "node_modules/tslib": { 5146 - "version": "2.4.0", 5147 - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 5148 - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 5149 - "dev": true, 5150 - "license": "0BSD" 5151 - }, 5152 - "node_modules/tunnel-agent": { 5153 - "version": "0.6.0", 5154 - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 5155 - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 5156 - "dev": true, 5157 - "license": "Apache-2.0", 5158 - "dependencies": { 5159 - "safe-buffer": "^5.0.1" 5160 - }, 5161 - "engines": { 5162 - "node": "*" 5163 - } 5164 - }, 5165 - "node_modules/type-check": { 5166 - "version": "0.4.0", 5167 - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 5168 - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 5169 - "dev": true, 5170 - "license": "MIT", 5171 - "dependencies": { 5172 - "prelude-ls": "^1.2.1" 5173 - }, 5174 - "engines": { 5175 - "node": ">= 0.8.0" 5176 - } 5177 - }, 5178 - "node_modules/typed-array-buffer": { 5179 - "version": "1.0.3", 5180 - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", 5181 - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", 5182 - "dev": true, 5183 - "license": "MIT", 5184 - "dependencies": { 5185 - "call-bound": "^1.0.3", 5186 - "es-errors": "^1.3.0", 5187 - "is-typed-array": "^1.1.14" 5188 - }, 5189 - "engines": { 5190 - "node": ">= 0.4" 5191 - } 5192 - }, 5193 - "node_modules/typed-array-byte-length": { 5194 - "version": "1.0.3", 5195 - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", 5196 - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", 5197 - "dev": true, 5198 - "license": "MIT", 5199 - "dependencies": { 5200 - "call-bind": "^1.0.8", 5201 - "for-each": "^0.3.3", 5202 - "gopd": "^1.2.0", 5203 - "has-proto": "^1.2.0", 5204 - "is-typed-array": "^1.1.14" 5205 - }, 5206 - "engines": { 5207 - "node": ">= 0.4" 5208 - }, 5209 - "funding": { 5210 - "url": "https://github.com/sponsors/ljharb" 5211 - } 5212 - }, 5213 - "node_modules/typed-array-byte-offset": { 5214 - "version": "1.0.4", 5215 - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", 5216 - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", 5217 - "dev": true, 5218 - "license": "MIT", 5219 - "dependencies": { 5220 - "available-typed-arrays": "^1.0.7", 5221 - "call-bind": "^1.0.8", 5222 - "for-each": "^0.3.3", 5223 - "gopd": "^1.2.0", 5224 - "has-proto": "^1.2.0", 5225 - "is-typed-array": "^1.1.15", 5226 - "reflect.getprototypeof": "^1.0.9" 5227 - }, 5228 - "engines": { 5229 - "node": ">= 0.4" 5230 - }, 5231 - "funding": { 5232 - "url": "https://github.com/sponsors/ljharb" 5233 - } 5234 - }, 5235 - "node_modules/typed-array-length": { 5236 - "version": "1.0.7", 5237 - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", 5238 - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", 5239 - "dev": true, 5240 - "license": "MIT", 5241 - "dependencies": { 5242 - "call-bind": "^1.0.7", 5243 - "for-each": "^0.3.3", 5244 - "gopd": "^1.0.1", 5245 - "is-typed-array": "^1.1.13", 5246 - "possible-typed-array-names": "^1.0.0", 5247 - "reflect.getprototypeof": "^1.0.6" 5248 - }, 5249 - "engines": { 5250 - "node": ">= 0.4" 5251 - }, 5252 - "funding": { 5253 - "url": "https://github.com/sponsors/ljharb" 5254 - } 5255 - }, 5256 - "node_modules/typescript": { 5257 - "version": "5.8.3", 5258 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 5259 - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 5260 - "dev": true, 5261 - "license": "Apache-2.0", 5262 - "peer": true, 5263 - "bin": { 5264 - "tsc": "bin/tsc", 5265 - "tsserver": "bin/tsserver" 5266 - }, 5267 - "engines": { 5268 - "node": ">=14.17" 5269 - } 5270 - }, 5271 - "node_modules/typescript-eslint": { 5272 - "version": "8.35.1", 5273 - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.1.tgz", 5274 - "integrity": "sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==", 5275 - "dev": true, 5276 - "license": "MIT", 5277 - "peer": true, 5278 - "dependencies": { 5279 - "@typescript-eslint/eslint-plugin": "8.35.1", 5280 - "@typescript-eslint/parser": "8.35.1", 5281 - "@typescript-eslint/utils": "8.35.1" 5282 - }, 5283 - "engines": { 5284 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5285 - }, 5286 - "funding": { 5287 - "type": "opencollective", 5288 - "url": "https://opencollective.com/typescript-eslint" 5289 - }, 5290 - "peerDependencies": { 5291 - "eslint": "^8.57.0 || ^9.0.0", 5292 - "typescript": ">=4.8.4 <5.9.0" 5293 - } 5294 - }, 5295 - "node_modules/unbox-primitive": { 5296 - "version": "1.1.0", 5297 - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", 5298 - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", 5299 - "dev": true, 5300 - "license": "MIT", 5301 - "dependencies": { 5302 - "call-bound": "^1.0.3", 5303 - "has-bigints": "^1.0.2", 5304 - "has-symbols": "^1.1.0", 5305 - "which-boxed-primitive": "^1.1.1" 5306 - }, 5307 - "engines": { 5308 - "node": ">= 0.4" 5309 - }, 5310 - "funding": { 5311 - "url": "https://github.com/sponsors/ljharb" 5312 - } 5313 - }, 5314 - "node_modules/undici-types": { 5315 - "version": "5.26.5", 5316 - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 5317 - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 5318 - "dev": true, 5319 - "license": "MIT" 5320 - }, 5321 - "node_modules/unicode-segmenter": { 5322 - "version": "0.14.5", 5323 - "resolved": "https://registry.npmjs.org/unicode-segmenter/-/unicode-segmenter-0.14.5.tgz", 5324 - "integrity": "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==", 5325 - "license": "MIT" 5326 - }, 5327 - "node_modules/uri-js": { 5328 - "version": "4.4.1", 5329 - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 5330 - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 5331 - "dev": true, 5332 - "license": "BSD-2-Clause", 5333 - "dependencies": { 5334 - "punycode": "^2.1.0" 5335 - } 5336 - }, 5337 - "node_modules/w3c-keyname": { 5338 - "version": "2.2.8", 5339 - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", 5340 - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", 5341 - "license": "MIT" 5342 - }, 5343 - "node_modules/which": { 5344 - "version": "2.0.2", 5345 - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 5346 - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 5347 - "dev": true, 5348 - "license": "ISC", 5349 - "dependencies": { 5350 - "isexe": "^2.0.0" 5351 - }, 5352 - "bin": { 5353 - "node-which": "bin/node-which" 5354 - }, 5355 - "engines": { 5356 - "node": ">= 8" 5357 - } 5358 - }, 5359 - "node_modules/which-boxed-primitive": { 5360 - "version": "1.1.1", 5361 - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", 5362 - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", 5363 - "dev": true, 5364 - "license": "MIT", 5365 - "dependencies": { 5366 - "is-bigint": "^1.1.0", 5367 - "is-boolean-object": "^1.2.1", 5368 - "is-number-object": "^1.1.1", 5369 - "is-string": "^1.1.1", 5370 - "is-symbol": "^1.1.1" 5371 - }, 5372 - "engines": { 5373 - "node": ">= 0.4" 5374 - }, 5375 - "funding": { 5376 - "url": "https://github.com/sponsors/ljharb" 5377 - } 5378 - }, 5379 - "node_modules/which-builtin-type": { 5380 - "version": "1.2.1", 5381 - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", 5382 - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", 5383 - "dev": true, 5384 - "license": "MIT", 5385 - "dependencies": { 5386 - "call-bound": "^1.0.2", 5387 - "function.prototype.name": "^1.1.6", 5388 - "has-tostringtag": "^1.0.2", 5389 - "is-async-function": "^2.0.0", 5390 - "is-date-object": "^1.1.0", 5391 - "is-finalizationregistry": "^1.1.0", 5392 - "is-generator-function": "^1.0.10", 5393 - "is-regex": "^1.2.1", 5394 - "is-weakref": "^1.0.2", 5395 - "isarray": "^2.0.5", 5396 - "which-boxed-primitive": "^1.1.0", 5397 - "which-collection": "^1.0.2", 5398 - "which-typed-array": "^1.1.16" 5399 - }, 5400 - "engines": { 5401 - "node": ">= 0.4" 5402 - }, 5403 - "funding": { 5404 - "url": "https://github.com/sponsors/ljharb" 5405 - } 5406 - }, 5407 - "node_modules/which-collection": { 5408 - "version": "1.0.2", 5409 - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", 5410 - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", 5411 - "dev": true, 5412 - "license": "MIT", 5413 - "dependencies": { 5414 - "is-map": "^2.0.3", 5415 - "is-set": "^2.0.3", 5416 - "is-weakmap": "^2.0.2", 5417 - "is-weakset": "^2.0.3" 5418 - }, 5419 - "engines": { 5420 - "node": ">= 0.4" 5421 - }, 5422 - "funding": { 5423 - "url": "https://github.com/sponsors/ljharb" 5424 - } 5425 - }, 5426 - "node_modules/which-typed-array": { 5427 - "version": "1.1.19", 5428 - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", 5429 - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", 5430 - "dev": true, 5431 - "license": "MIT", 5432 - "dependencies": { 5433 - "available-typed-arrays": "^1.0.7", 5434 - "call-bind": "^1.0.8", 5435 - "call-bound": "^1.0.4", 5436 - "for-each": "^0.3.5", 5437 - "get-proto": "^1.0.1", 5438 - "gopd": "^1.2.0", 5439 - "has-tostringtag": "^1.0.2" 5440 - }, 5441 - "engines": { 5442 - "node": ">= 0.4" 5443 - }, 5444 - "funding": { 5445 - "url": "https://github.com/sponsors/ljharb" 5446 - } 5447 - }, 5448 - "node_modules/word-wrap": { 5449 - "version": "1.2.5", 5450 - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 5451 - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 5452 - "dev": true, 5453 - "license": "MIT", 5454 - "engines": { 5455 - "node": ">=0.10.0" 5456 - } 5457 - }, 5458 - "node_modules/yaml": { 5459 - "version": "2.8.1", 5460 - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", 5461 - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", 5462 - "dev": true, 5463 - "license": "ISC", 5464 - "bin": { 5465 - "yaml": "bin.mjs" 5466 - }, 5467 - "engines": { 5468 - "node": ">= 14.6" 5469 - } 5470 - }, 5471 - "node_modules/yaml-eslint-parser": { 5472 - "version": "1.3.0", 5473 - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.0.tgz", 5474 - "integrity": "sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==", 5475 - "dev": true, 5476 - "license": "MIT", 5477 - "dependencies": { 5478 - "eslint-visitor-keys": "^3.0.0", 5479 - "yaml": "^2.0.0" 5480 - }, 5481 - "engines": { 5482 - "node": "^14.17.0 || >=16.0.0" 5483 - }, 5484 - "funding": { 5485 - "url": "https://github.com/sponsors/ota-meshi" 5486 - } 5487 - }, 5488 - "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": { 5489 - "version": "3.4.3", 5490 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 5491 - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 5492 - "dev": true, 5493 - "license": "Apache-2.0", 5494 - "engines": { 5495 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 5496 - }, 5497 - "funding": { 5498 - "url": "https://opencollective.com/eslint" 5499 - } 5500 - }, 5501 - "node_modules/yocto-queue": { 5502 - "version": "0.1.0", 5503 - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 5504 - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 5505 - "dev": true, 5506 - "license": "MIT", 5507 - "engines": { 5508 - "node": ">=10" 5509 - }, 5510 - "funding": { 5511 - "url": "https://github.com/sponsors/sindresorhus" 5512 - } 5513 - } 5514 - } 5515 - }
+13 -6
package.json
··· 1 1 { 2 2 "name": "obsidian-atmark", 3 - "version": "0.1.3", 4 - "description": "Obsidian plugin for AT Protocol bookmark platforms", 3 + "version": "0.1.9", 4 + "description": "View and manage AT Protocol bookmarks.", 5 5 "main": "main.js", 6 6 "type": "module", 7 7 "scripts": { ··· 11 11 "lint": "eslint ." 12 12 }, 13 13 "keywords": [], 14 - "license": "0-BSD", 14 + "license": "MIT", 15 15 "devDependencies": { 16 16 "@eslint/js": "9.30.1", 17 17 "@types/node": "^16.11.6", ··· 21 21 "jiti": "2.6.1", 22 22 "tslib": "2.4.0", 23 23 "typescript": "^5.8.3", 24 - "typescript-eslint": "8.35.1" 24 + "typescript-eslint": "8.35.1", 25 + "@atcute/lex-cli": "^2.5.3" 25 26 }, 26 27 "dependencies": { 27 28 "@atcute/atproto": "^3.1.10", 28 29 "@atcute/bluesky": "^3.2.15", 29 30 "@atcute/client": "^4.2.1", 30 - "@atcute/lex-cli": "^2.5.2", 31 + "@atcute/identity-resolver": "^1.2.2", 32 + "@atcute/leaflet": "^1.0.17", 31 33 "@atcute/oauth-browser-client": "^2.0.3", 32 - "obsidian": "latest" 34 + "@atcute/pckt": "^0.1.5", 35 + "@atcute/standard-site": "^1.0.0", 36 + "obsidian": "latest", 37 + "remark-parse": "^11.0.0", 38 + "remark-stringify": "^11.0.0", 39 + "unified": "^11.0.5" 33 40 } 34 41 }
preview-sidebar.png

This is a binary file and will not be displayed.

preview.png

This is a binary file and will not be displayed.

-18
src/auth.ts
··· 1 - import { Client, CredentialManager, simpleFetchHandler } from "@atcute/client"; 2 - 3 - const DEFAULT_PDS = "https://bsky.social"; 4 - 5 - export interface Credentials { 6 - identifier: string; 7 - password: string; 8 - } 9 - 10 - export async function createAuthenticatedClient(creds: Credentials): Promise<Client> { 11 - const manager = new CredentialManager({ service: DEFAULT_PDS }); 12 - await manager.login(creds); 13 - return new Client({ handler: manager }); 14 - } 15 - 16 - export function createPublicClient(): Client { 17 - return new Client({ handler: simpleFetchHandler({ service: DEFAULT_PDS }) }); 18 - }
+188
src/commands/publishDocument.ts
··· 1 + import { Notice, TFile } from "obsidian"; 2 + import type ATmarkPlugin from "../main"; 3 + import { createDocument, putDocument, getPublication, markdownToLeafletContent, stripMarkdown, markdownToPcktContent, buildDocumentUrl } from "../lib"; 4 + import { PublicationSelection, SelectPublicationModal } from "../components/selectPublicationModal"; 5 + import { type ResourceUri, } from "@atcute/lexicons"; 6 + import { SiteStandardDocument, SiteStandardPublication } from "@atcute/standard-site"; 7 + import { PubLeafletContent } from "@atcute/leaflet"; 8 + import { BlogPcktContent } from "@atcute/pckt"; 9 + 10 + export async function publishFileAsDocument(plugin: ATmarkPlugin) { 11 + const file = plugin.app.workspace.getActiveFile(); 12 + if (!file) { 13 + new Notice("No active file to publish."); 14 + return; 15 + } 16 + 17 + if (!plugin.client.loggedIn) { 18 + new Notice("Must login to publish document."); 19 + return; 20 + } 21 + 22 + 23 + try { 24 + let { record, docUri } = await buildDocumentRecord(plugin, file); 25 + let newUri = await createOrUpdateDocument(plugin, record, docUri); 26 + 27 + // pubUrl is at:// record uri or https:// for loose document 28 + // fetch pub if at:// so we can get the url 29 + // otherwise just use the url as is 30 + if (record.site.startsWith("https://")) { 31 + const documentUrl = buildDocumentUrl(record.site, newUri, record); 32 + await updateFrontMatter(plugin, file, newUri, record, documentUrl); 33 + return; 34 + } 35 + const pub = await getPublication(plugin.client, record.site as ResourceUri); 36 + const documentUrl = buildDocumentUrl(pub.value.url, newUri, record); 37 + 38 + await updateFrontMatter(plugin, file, newUri, record, documentUrl); 39 + } catch (error) { 40 + const message = error instanceof Error ? error.message : String(error); 41 + new Notice(`Error publishing document: ${message}`); 42 + console.error("Publish document error:", error); 43 + } 44 + } 45 + 46 + async function updateFrontMatter( 47 + plugin: ATmarkPlugin, 48 + file: TFile, 49 + docUri: ResourceUri, 50 + record: SiteStandardDocument.Main, 51 + documentUrl?: string 52 + ) { 53 + await plugin.app.fileManager.processFrontMatter(file, (fm: Record<string, unknown>) => { 54 + fm["atDocument"] = docUri; 55 + fm["atPublication"] = record.site; 56 + fm["publishedAt"] = record.publishedAt; 57 + fm["updatedAt"] = new Date().toISOString(); 58 + fm["title"] = record.title; 59 + if (documentUrl) { 60 + fm["url"] = documentUrl; 61 + } 62 + if (record.description) { 63 + fm["description"] = record.description; 64 + } 65 + if (record.path) { 66 + fm["path"] = record.path; 67 + } 68 + if (record.tags) { 69 + fm["tags"] = record.tags; 70 + } 71 + if (documentUrl) { 72 + fm["url"] = documentUrl; 73 + } 74 + }); 75 + } 76 + 77 + 78 + async function buildDocumentRecord(plugin: ATmarkPlugin, file: TFile): Promise<{ record: SiteStandardDocument.Main; docUri?: ResourceUri }> { 79 + const full = await plugin.app.vault.read(file); 80 + 81 + let fm: Record<string, unknown> | null = null; 82 + await plugin.app.fileManager.processFrontMatter(file, (fmm: Record<string, unknown>) => { 83 + fm = fmm; 84 + }); 85 + let content = full.replace(/---\n[\s\S]*?\n---\n/, '').trim(); 86 + 87 + 88 + let docUri: ResourceUri | undefined; 89 + let pubUri: ResourceUri | undefined; 90 + let description: string | undefined; 91 + let title: string | undefined; 92 + let path: string | undefined; 93 + let tags: string[] | undefined; 94 + let publishedAt: string | undefined; 95 + if (fm) { 96 + pubUri = fm["atPublication"]; 97 + docUri = fm["atDocument"] as ResourceUri; 98 + description = fm["description"]; 99 + title = fm["title"]; 100 + tags = fm["tags"] && Array.isArray(fm["tags"]) ? fm["tags"] : undefined; 101 + publishedAt = fm["publishedAt"]; // Preserve existing if updating 102 + } 103 + 104 + if (!title) { 105 + title = file.basename; 106 + } 107 + 108 + let pub: SiteStandardPublication.Main | null = null; 109 + if (!pubUri) { 110 + const sel = await selectPublication(plugin); 111 + pubUri = sel.uri; 112 + pub = sel.publication; 113 + } else { 114 + const pubData = await getPublication(plugin.client, pubUri); 115 + pub = pubData.value; 116 + } 117 + 118 + if (!pubUri) { 119 + throw new Error("Missing publication URI."); 120 + } 121 + 122 + // TODO: determine which lexicon to use for rich content 123 + // for now just check url 124 + let textContent = stripMarkdown(content); 125 + 126 + let richContent: PubLeafletContent.Main | BlogPcktContent.Main | null = null; 127 + if (pub?.url.contains("leaflet.pub")) { 128 + richContent = markdownToLeafletContent(content) 129 + } else if (pub?.url.contains("pckt.blog")) { 130 + richContent = markdownToPcktContent(content) 131 + } 132 + 133 + let record = { 134 + $type: "site.standard.document", 135 + title: title, 136 + site: pubUri, 137 + publishedAt: publishedAt || "", 138 + description: description, 139 + path: path, 140 + tags: tags, 141 + textContent, 142 + content: richContent ?? undefined, 143 + } as SiteStandardDocument.Main; 144 + return { record, docUri }; 145 + }; 146 + 147 + async function selectPublication(plugin: ATmarkPlugin): Promise<PublicationSelection> { 148 + return new Promise<PublicationSelection>((resolve, reject) => { 149 + let selected = false; 150 + const modal = new SelectPublicationModal(plugin, (selection) => { 151 + selected = true; 152 + resolve(selection); 153 + }); 154 + 155 + // Override close to reject if nothing selected 156 + const originalClose = modal.close.bind(modal); 157 + modal.close = () => { 158 + originalClose(); 159 + if (!selected) { 160 + reject(new Error("Publication not selected")); 161 + } 162 + }; 163 + 164 + modal.open(); 165 + }); 166 + } 167 + 168 + 169 + async function createOrUpdateDocument( 170 + plugin: ATmarkPlugin, 171 + doc: SiteStandardDocument.Main, 172 + existingUri?: ResourceUri, 173 + ) { 174 + if (!plugin.client) { 175 + throw new Error("Client not initialized"); 176 + } 177 + 178 + const response = existingUri 179 + ? await putDocument(plugin.client, plugin.settings.identifier, existingUri, doc) 180 + : await createDocument(plugin.client, plugin.settings.identifier, doc); 181 + 182 + if (!response.ok) { 183 + throw new Error(`Failed to publish: ${response.status}`); 184 + } 185 + 186 + new Notice(`Published ${doc.title}!`); 187 + return response.data.uri; 188 + }
+15 -20
src/components/cardDetailModal.ts
··· 19 19 onOpen() { 20 20 const { contentEl } = this; 21 21 contentEl.empty(); 22 - contentEl.addClass("semble-detail-modal"); 22 + contentEl.addClass("atmark-detail-modal"); 23 23 24 - // Header with source badge 25 - const header = contentEl.createEl("div", { cls: "semble-detail-header" }); 24 + const header = contentEl.createEl("div", { cls: "atmark-detail-header" }); 26 25 const source = this.item.getSource(); 27 26 header.createEl("span", { 28 27 text: source, 29 - cls: `semble-badge semble-badge-source semble-badge-${source}`, 28 + cls: `atmark-badge atmark-badge-source atmark-badge-${source}`, 30 29 }); 31 30 32 - // Render item detail content 33 31 this.item.renderDetail(contentEl); 34 32 35 - // Render notes with delete buttons (semble-specific) 33 + // semble 36 34 if (this.item.canAddNotes() && this.item.getAttachedNotes) { 37 35 this.renderNotesSection(contentEl); 38 36 } 39 37 40 - // Add note form (only for items that support it) 41 38 if (this.item.canAddNotes()) { 42 39 this.renderAddNoteForm(contentEl); 43 40 } 44 41 45 - // Footer with date 46 - const footer = contentEl.createEl("div", { cls: "semble-detail-footer" }); 42 + const footer = contentEl.createEl("div", { cls: "atmark-detail-footer" }); 47 43 footer.createEl("span", { 48 44 text: `Created ${new Date(this.item.getCreatedAt()).toLocaleDateString()}`, 49 - cls: "semble-detail-date", 45 + cls: "atmark-detail-date", 50 46 }); 51 47 } 52 48 ··· 54 50 const notes = this.item.getAttachedNotes?.(); 55 51 if (!notes || notes.length === 0) return; 56 52 57 - const notesSection = contentEl.createEl("div", { cls: "semble-detail-notes-section" }); 53 + const notesSection = contentEl.createEl("div", { cls: "atmark-semble-detail-notes-section" }); 58 54 notesSection.createEl("h3", { text: "Notes", cls: "atmark-detail-section-title" }); 59 55 60 56 for (const note of notes) { 61 - const noteEl = notesSection.createEl("div", { cls: "semble-detail-note" }); 57 + const noteEl = notesSection.createEl("div", { cls: "atmark-semble-detail-note" }); 62 58 63 - const noteContent = noteEl.createEl("div", { cls: "semble-detail-note-content" }); 64 - const noteIcon = noteContent.createEl("span", { cls: "semble-detail-note-icon" }); 59 + const noteContent = noteEl.createEl("div", { cls: "atmark-semble-detail-note-content" }); 60 + const noteIcon = noteContent.createEl("span", { cls: "atmark-semble-detail-note-icon" }); 65 61 setIcon(noteIcon, "message-square"); 66 - noteContent.createEl("p", { text: note.text, cls: "semble-detail-note-text" }); 62 + noteContent.createEl("p", { text: note.text, cls: "atmark-semble-detail-note-text" }); 67 63 68 - // Delete button 69 - const deleteBtn = noteEl.createEl("button", { cls: "semble-note-delete-btn" }); 64 + const deleteBtn = noteEl.createEl("button", { cls: "atmark-semble-note-delete-btn" }); 70 65 setIcon(deleteBtn, "trash-2"); 71 66 deleteBtn.addEventListener("click", () => { 72 67 void this.handleDeleteNote(note.uri); ··· 75 70 } 76 71 77 72 private renderAddNoteForm(contentEl: HTMLElement) { 78 - const formSection = contentEl.createEl("div", { cls: "semble-detail-add-note" }); 73 + const formSection = contentEl.createEl("div", { cls: "atmark-semble-detail-add-note" }); 79 74 formSection.createEl("h3", { text: "Add a note", cls: "atmark-detail-section-title" }); 80 75 81 - const form = formSection.createEl("div", { cls: "semble-add-note-form" }); 76 + const form = formSection.createEl("div", { cls: "atmark-semble-add-note-form" }); 82 77 83 78 this.noteInput = form.createEl("textarea", { 84 - cls: "atmark-textarea semble-note-input", 79 + cls: "atmark-textarea atmark-semble-note-input", 85 80 attr: { placeholder: "Write a note about this item..." }, 86 81 }); 87 82
+10 -14
src/components/createCollectionModal.ts
··· 15 15 onOpen() { 16 16 const { contentEl } = this; 17 17 contentEl.empty(); 18 - contentEl.addClass("semble-collection-modal"); 18 + contentEl.addClass("atmark-modal"); 19 19 20 20 contentEl.createEl("h2", { text: "New collection" }); 21 21 ··· 24 24 return; 25 25 } 26 26 27 - const form = contentEl.createEl("form", { cls: "semble-form" }); 27 + const form = contentEl.createEl("form", { cls: "atmark-form" }); 28 28 29 - // Name field 30 - const nameGroup = form.createEl("div", { cls: "semble-form-group" }); 29 + const nameGroup = form.createEl("div", { cls: "atmark-form-group" }); 31 30 nameGroup.createEl("label", { text: "Name", attr: { for: "collection-name" } }); 32 31 const nameInput = nameGroup.createEl("input", { 33 32 type: "text", 34 - cls: "semble-input", 33 + cls: "atmark-input", 35 34 attr: { id: "collection-name", placeholder: "Collection name", required: "true" }, 36 35 }); 37 36 38 - // Description field 39 - const descGroup = form.createEl("div", { cls: "semble-form-group" }); 37 + const descGroup = form.createEl("div", { cls: "atmark-form-group" }); 40 38 descGroup.createEl("label", { text: "Description", attr: { for: "collection-desc" } }); 41 39 const descInput = descGroup.createEl("textarea", { 42 - cls: "semble-textarea", 40 + cls: "atmark-textarea", 43 41 attr: { id: "collection-desc", placeholder: "Optional description", rows: "3" }, 44 42 }); 45 43 46 - // Action buttons 47 - const actions = form.createEl("div", { cls: "semble-modal-actions" }); 44 + const actions = form.createEl("div", { cls: "atmark-modal-actions" }); 48 45 49 46 const cancelBtn = actions.createEl("button", { 50 47 text: "Cancel", 51 - cls: "semble-btn semble-btn-secondary", 48 + cls: "atmark-btn atmark-btn-secondary", 52 49 type: "button", 53 50 }); 54 51 cancelBtn.addEventListener("click", () => this.close()); 55 52 56 53 const createBtn = actions.createEl("button", { 57 54 text: "Create", 58 - cls: "semble-btn semble-btn-primary", 55 + cls: "atmark-btn atmark-btn-primary", 59 56 type: "submit", 60 57 }); 61 58 ··· 64 61 void this.handleSubmit(nameInput, descInput, createBtn); 65 62 }); 66 63 67 - // Focus name input 68 64 nameInput.focus(); 69 65 } 70 66 ··· 84 80 85 81 try { 86 82 await createCollection( 87 - this.plugin.client!, 83 + this.plugin.client, 88 84 this.plugin.settings.identifier, 89 85 name, 90 86 descInput.value.trim()
+1 -6
src/components/createMarginCollectionModal.ts
··· 26 26 27 27 const form = contentEl.createEl("form", { cls: "atmark-form" }); 28 28 29 - // Name field 30 29 const nameGroup = form.createEl("div", { cls: "atmark-form-group" }); 31 30 nameGroup.createEl("label", { text: "Name", attr: { for: "collection-name" } }); 32 31 const nameInput = nameGroup.createEl("input", { ··· 35 34 attr: { id: "collection-name", placeholder: "Collection name", required: "true" }, 36 35 }); 37 36 38 - // Icon field 39 37 const iconGroup = form.createEl("div", { cls: "atmark-form-group" }); 40 38 iconGroup.createEl("label", { text: "Icon (optional)", attr: { for: "collection-icon" } }); 41 39 const iconInput = iconGroup.createEl("input", { ··· 44 42 attr: { id: "collection-icon" }, 45 43 }); 46 44 47 - // Description field 48 45 const descGroup = form.createEl("div", { cls: "atmark-form-group" }); 49 46 descGroup.createEl("label", { text: "Description", attr: { for: "collection-desc" } }); 50 47 const descInput = descGroup.createEl("textarea", { ··· 52 49 attr: { id: "collection-desc", placeholder: "Optional description", rows: "3" }, 53 50 }); 54 51 55 - // Action buttons 56 52 const actions = form.createEl("div", { cls: "atmark-modal-actions" }); 57 53 58 54 const cancelBtn = actions.createEl("button", { ··· 73 69 void this.handleSubmit(nameInput, iconInput, descInput, createBtn); 74 70 }); 75 71 76 - // Focus name input 77 72 nameInput.focus(); 78 73 } 79 74 ··· 94 89 95 90 try { 96 91 await createMarginCollection( 97 - this.plugin.client!, 92 + this.plugin.client, 98 93 this.plugin.settings.identifier, 99 94 name, 100 95 descInput.value.trim() || undefined,
+1 -4
src/components/createTagModal.ts
··· 26 26 27 27 const form = contentEl.createEl("form", { cls: "atmark-form" }); 28 28 29 - // Tag value field 30 29 const tagGroup = form.createEl("div", { cls: "atmark-form-group" }); 31 30 tagGroup.createEl("label", { text: "Tag", attr: { for: "tag-value" } }); 32 31 const tagInput = tagGroup.createEl("input", { ··· 35 34 attr: { id: "tag-value", placeholder: "Tag name", required: "true" }, 36 35 }); 37 36 38 - // Action buttons 39 37 const actions = form.createEl("div", { cls: "atmark-modal-actions" }); 40 38 41 39 const cancelBtn = actions.createEl("button", { ··· 56 54 void this.handleSubmit(tagInput, createBtn); 57 55 }); 58 56 59 - // Focus tag input 60 57 tagInput.focus(); 61 58 } 62 59 ··· 75 72 76 73 try { 77 74 await createTag( 78 - this.plugin.client!, 75 + this.plugin.client, 79 76 this.plugin.settings.identifier, 80 77 value 81 78 );
+75 -48
src/components/editBookmarkModal.ts
··· 2 2 import type { Record } from "@atcute/atproto/types/repo/listRecords"; 3 3 import type { Main as Bookmark } from "../lexicons/types/community/lexicon/bookmarks/bookmark"; 4 4 import type ATmarkPlugin from "../main"; 5 - import { putRecord, deleteRecord } from "../lib"; 5 + import { putRecord, deleteRecord, getBookmarks } from "../lib"; 6 6 7 7 type BookmarkRecord = Record & { value: Bookmark }; 8 8 9 + interface TagState { 10 + tag: string; 11 + isSelected: boolean; 12 + } 13 + 9 14 export class EditBookmarkModal extends Modal { 10 15 plugin: ATmarkPlugin; 11 16 record: BookmarkRecord; 12 17 onSuccess?: () => void; 13 - tagInputs: HTMLInputElement[] = []; 18 + tagStates: TagState[] = []; 19 + newTagInput: HTMLInputElement | null = null; 14 20 15 21 constructor(plugin: ATmarkPlugin, record: BookmarkRecord, onSuccess?: () => void) { 16 22 super(plugin.app); ··· 19 25 this.onSuccess = onSuccess; 20 26 } 21 27 22 - onOpen() { 28 + async onOpen() { 23 29 const { contentEl } = this; 24 30 contentEl.empty(); 25 31 contentEl.addClass("atmark-modal"); 26 32 27 - contentEl.createEl("h2", { text: "Edit bookmark tags" }); 33 + contentEl.createEl("h2", { text: "Edit bookmark" }); 28 34 29 35 if (!this.plugin.client) { 30 36 contentEl.createEl("p", { text: "Not connected." }); 31 37 return; 32 38 } 33 39 34 - const existingTags = this.record.value.tags || []; 40 + const loading = contentEl.createEl("p", { text: "Loading..." }); 41 + 42 + try { 43 + const bookmarksResp = await getBookmarks(this.plugin.client, this.plugin.settings.identifier); 44 + loading.remove(); 45 + 46 + const bookmarks = (bookmarksResp.ok ? bookmarksResp.data.records : []) as unknown as BookmarkRecord[]; 47 + 48 + const allTags = new Set<string>(); 49 + for (const bookmark of bookmarks) { 50 + if (bookmark.value.tags) { 51 + for (const tag of bookmark.value.tags) { 52 + allTags.add(tag); 53 + } 54 + } 55 + } 35 56 57 + const currentTags = new Set(this.record.value.tags || []); 58 + this.tagStates = Array.from(allTags).sort().map(tag => ({ 59 + tag, 60 + isSelected: currentTags.has(tag), 61 + })); 62 + 63 + this.renderForm(contentEl); 64 + } catch (err) { 65 + loading.remove(); 66 + const message = err instanceof Error ? err.message : String(err); 67 + contentEl.createEl("p", { text: `Error: ${message}`, cls: "atmark-error" }); 68 + } 69 + } 70 + 71 + private renderForm(contentEl: HTMLElement) { 36 72 const form = contentEl.createEl("div", { cls: "atmark-form" }); 37 73 38 - // Tags section 39 74 const tagsGroup = form.createEl("div", { cls: "atmark-form-group" }); 40 75 tagsGroup.createEl("label", { text: "Tags" }); 41 76 42 - const tagsContainer = tagsGroup.createEl("div", { cls: "atmark-tags-container" }); 43 - 44 - // Render existing tags 45 - for (const tag of existingTags) { 46 - this.addTagInput(tagsContainer, tag); 77 + const tagsList = tagsGroup.createEl("div", { cls: "atmark-tag-list" }); 78 + for (const state of this.tagStates) { 79 + this.addTagChip(tagsList, state); 47 80 } 48 81 49 - // Add empty input for new tag 50 - this.addTagInput(tagsContainer, ""); 51 - 52 - // Add tag button 53 - const addTagBtn = tagsGroup.createEl("button", { 54 - text: "Add tag", 55 - cls: "atmark-btn atmark-btn-secondary" 82 + const newTagRow = tagsGroup.createEl("div", { cls: "atmark-tag-row" }); 83 + this.newTagInput = newTagRow.createEl("input", { 84 + type: "text", 85 + cls: "atmark-input", 86 + attr: { placeholder: "Add new tag..." } 87 + }); 88 + const addBtn = newTagRow.createEl("button", { 89 + text: "Add", 90 + cls: "atmark-btn atmark-btn-secondary", 91 + attr: { type: "button" } 56 92 }); 57 - addTagBtn.addEventListener("click", (e) => { 58 - e.preventDefault(); 59 - this.addTagInput(tagsContainer, ""); 93 + addBtn.addEventListener("click", () => { 94 + const value = this.newTagInput?.value.trim(); 95 + if (value && !this.tagStates.some(s => s.tag === value)) { 96 + const newState = { tag: value, isSelected: true }; 97 + this.tagStates.push(newState); 98 + this.addTagChip(tagsList, newState); 99 + if (this.newTagInput) this.newTagInput.value = ""; 100 + } 60 101 }); 61 102 62 - // Action buttons 63 103 const actions = contentEl.createEl("div", { cls: "atmark-modal-actions" }); 64 104 65 105 const deleteBtn = actions.createEl("button", { ··· 83 123 saveBtn.addEventListener("click", () => { void this.saveChanges(); }); 84 124 } 85 125 86 - private addTagInput(container: HTMLElement, value: string) { 87 - const tagRow = container.createEl("div", { cls: "atmark-tag-row" }); 88 - 89 - const input = tagRow.createEl("input", { 90 - type: "text", 91 - cls: "atmark-input", 92 - value, 93 - attr: { placeholder: "Enter tag..." } 126 + private addTagChip(container: HTMLElement, state: TagState) { 127 + const item = container.createEl("label", { cls: "atmark-tag-item" }); 128 + const checkbox = item.createEl("input", { type: "checkbox" }); 129 + checkbox.checked = state.isSelected; 130 + checkbox.addEventListener("change", () => { 131 + state.isSelected = checkbox.checked; 94 132 }); 95 - this.tagInputs.push(input); 96 - 97 - const removeBtn = tagRow.createEl("button", { 98 - text: "ร—", 99 - cls: "atmark-btn atmark-btn-secondary atmark-tag-remove-btn" 100 - }); 101 - removeBtn.addEventListener("click", (e) => { 102 - e.preventDefault(); 103 - tagRow.remove(); 104 - this.tagInputs = this.tagInputs.filter(i => i !== input); 105 - }); 133 + item.createEl("span", { text: state.tag }); 106 134 } 107 135 108 136 private confirmDelete(contentEl: HTMLElement) { ··· 167 195 contentEl.createEl("p", { text: "Saving changes..." }); 168 196 169 197 try { 170 - // Get non-empty unique tags 171 - const tags = [...new Set( 172 - this.tagInputs 173 - .map(input => input.value.trim()) 174 - .filter(tag => tag.length > 0) 175 - )]; 198 + const selectedTags = this.tagStates.filter(s => s.isSelected).map(s => s.tag); 199 + const newTag = this.newTagInput?.value.trim(); 200 + if (newTag && !selectedTags.includes(newTag)) { 201 + selectedTags.push(newTag); 202 + } 203 + const tags = [...new Set(selectedTags)]; 176 204 177 205 const rkey = this.record.uri.split("/").pop(); 178 206 if (!rkey) { ··· 181 209 return; 182 210 } 183 211 184 - // Update the record with new tags 185 212 const updatedRecord: Bookmark = { 186 213 ...this.record.value, 187 214 tags,
+23 -31
src/components/editCardModal.ts
··· 40 40 async onOpen() { 41 41 const { contentEl } = this; 42 42 contentEl.empty(); 43 - contentEl.addClass("semble-collection-modal"); 43 + contentEl.addClass("atmark-modal"); 44 44 45 45 contentEl.createEl("h2", { text: "Edit collections" }); 46 46 ··· 52 52 const loading = contentEl.createEl("p", { text: "Loading..." }); 53 53 54 54 try { 55 - // Fetch collections and existing links in parallel 56 55 const [collectionsResp, linksResp] = await Promise.all([ 57 56 getCollections(this.plugin.client, this.plugin.settings.identifier), 58 57 getCollectionLinks(this.plugin.client, this.plugin.settings.identifier), ··· 61 60 loading.remove(); 62 61 63 62 if (!collectionsResp.ok) { 64 - contentEl.createEl("p", { text: "Failed to load collections.", cls: "semble-error" }); 63 + contentEl.createEl("p", { text: "Failed to load collections.", cls: "atmark-error" }); 65 64 return; 66 65 } 67 66 ··· 73 72 return; 74 73 } 75 74 76 - // Find which collections this card is already in 77 75 const cardLinks = links.filter(link => link.value.card.uri === this.cardUri); 78 76 const linkedCollectionUris = new Map<string, string>(); 79 77 for (const link of cardLinks) { 80 78 linkedCollectionUris.set(link.value.collection.uri, link.uri); 81 79 } 82 80 83 - // Build collection states 84 81 this.collectionStates = collections.map(collection => ({ 85 82 collection, 86 83 isSelected: linkedCollectionUris.has(collection.uri), ··· 92 89 } catch (err) { 93 90 loading.remove(); 94 91 const message = err instanceof Error ? err.message : String(err); 95 - contentEl.createEl("p", { text: `Error: ${message}`, cls: "semble-error" }); 92 + contentEl.createEl("p", { text: `Error: ${message}`, cls: "atmark-error" }); 96 93 } 97 94 } 98 95 99 96 private renderCollectionList(contentEl: HTMLElement) { 100 - const list = contentEl.createEl("div", { cls: "semble-collection-list" }); 97 + const list = contentEl.createEl("div", { cls: "atmark-collection-list" }); 101 98 102 99 for (const state of this.collectionStates) { 103 - const item = list.createEl("label", { cls: "semble-collection-item" }); 100 + const item = list.createEl("label", { cls: "atmark-collection-item" }); 104 101 105 - const checkbox = item.createEl("input", { type: "checkbox", cls: "semble-collection-checkbox" }); 102 + const checkbox = item.createEl("input", { type: "checkbox", cls: "atmark-collection-checkbox" }); 106 103 checkbox.checked = state.isSelected; 107 104 checkbox.addEventListener("change", () => { 108 105 state.isSelected = checkbox.checked; 109 106 this.updateSaveButton(); 110 107 }); 111 108 112 - const info = item.createEl("div", { cls: "semble-collection-item-info" }); 113 - info.createEl("span", { text: state.collection.value.name, cls: "semble-collection-item-name" }); 109 + const info = item.createEl("div", { cls: "atmark-collection-item-info" }); 110 + info.createEl("span", { text: state.collection.value.name, cls: "atmark-collection-item-name" }); 114 111 if (state.collection.value.description) { 115 - info.createEl("span", { text: state.collection.value.description, cls: "semble-collection-item-desc" }); 112 + info.createEl("span", { text: state.collection.value.description, cls: "atmark-collection-item-desc" }); 116 113 } 117 114 } 118 115 119 - // Action buttons 120 - const actions = contentEl.createEl("div", { cls: "semble-modal-actions" }); 116 + const actions = contentEl.createEl("div", { cls: "atmark-modal-actions" }); 121 117 122 - const deleteBtn = actions.createEl("button", { text: "Delete", cls: "semble-btn semble-btn-danger" }); 118 + const deleteBtn = actions.createEl("button", { text: "Delete", cls: "atmark-btn atmark-btn-danger" }); 123 119 deleteBtn.addEventListener("click", () => { this.confirmDelete(contentEl); }); 124 120 125 - actions.createEl("div", { cls: "semble-spacer" }); 121 + actions.createEl("div", { cls: "atmark-spacer" }); 126 122 127 - const cancelBtn = actions.createEl("button", { text: "Cancel", cls: "semble-btn semble-btn-secondary" }); 123 + const cancelBtn = actions.createEl("button", { text: "Cancel", cls: "atmark-btn atmark-btn-secondary" }); 128 124 cancelBtn.addEventListener("click", () => { this.close(); }); 129 125 130 - const saveBtn = actions.createEl("button", { text: "Save", cls: "semble-btn semble-btn-primary" }); 131 - saveBtn.id = "semble-save-btn"; 126 + const saveBtn = actions.createEl("button", { text: "Save", cls: "atmark-btn atmark-btn-primary" }); 127 + saveBtn.id = "atmark-save-btn"; 132 128 saveBtn.disabled = true; 133 129 saveBtn.addEventListener("click", () => { void this.saveChanges(); }); 134 130 } ··· 136 132 private confirmDelete(contentEl: HTMLElement) { 137 133 contentEl.empty(); 138 134 contentEl.createEl("h2", { text: "Delete card" }); 139 - contentEl.createEl("p", { text: "Delete this card?", cls: "semble-warning-text" }); 135 + contentEl.createEl("p", { text: "Delete this card?", cls: "atmark-warning-text" }); 140 136 141 - const actions = contentEl.createEl("div", { cls: "semble-modal-actions" }); 137 + const actions = contentEl.createEl("div", { cls: "atmark-modal-actions" }); 142 138 143 - const cancelBtn = actions.createEl("button", { text: "Cancel", cls: "semble-btn semble-btn-secondary" }); 139 + const cancelBtn = actions.createEl("button", { text: "Cancel", cls: "atmark-btn atmark-btn-secondary" }); 144 140 cancelBtn.addEventListener("click", () => { 145 - // Re-render the modal 146 141 void this.onOpen(); 147 142 }); 148 143 149 - const confirmBtn = actions.createEl("button", { text: "Delete", cls: "semble-btn semble-btn-danger" }); 144 + const confirmBtn = actions.createEl("button", { text: "Delete", cls: "atmark-btn atmark-btn-danger" }); 150 145 confirmBtn.addEventListener("click", () => { void this.deleteCard(); }); 151 146 } 152 147 ··· 161 156 const rkey = this.cardUri.split("/").pop(); 162 157 if (!rkey) { 163 158 contentEl.empty(); 164 - contentEl.createEl("p", { text: "Invalid card uri.", cls: "semble-error" }); 159 + contentEl.createEl("p", { text: "Invalid card uri.", cls: "atmark-error" }); 165 160 return; 166 161 } 167 162 ··· 178 173 } catch (err) { 179 174 contentEl.empty(); 180 175 const message = err instanceof Error ? err.message : String(err); 181 - contentEl.createEl("p", { text: `Failed to delete: ${message}`, cls: "semble-error" }); 176 + contentEl.createEl("p", { text: `Failed to delete: ${message}`, cls: "atmark-error" }); 182 177 } 183 178 } 184 179 185 180 private updateSaveButton() { 186 - const saveBtn = document.getElementById("semble-save-btn") as HTMLButtonElement | null; 181 + const saveBtn = document.getElementById("atmark-save-btn") as HTMLButtonElement | null; 187 182 if (!saveBtn) return; 188 183 189 - // Check if any changes were made 190 184 const hasChanges = this.collectionStates.some(s => s.isSelected !== s.wasSelected); 191 185 saveBtn.disabled = !hasChanges; 192 186 } ··· 202 196 const toAdd = this.collectionStates.filter(s => s.isSelected && !s.wasSelected); 203 197 const toRemove = this.collectionStates.filter(s => !s.isSelected && s.wasSelected); 204 198 205 - // Process removals 206 199 for (const state of toRemove) { 207 200 if (state.linkUri) { 208 201 const rkey = state.linkUri.split("/").pop(); ··· 217 210 } 218 211 } 219 212 220 - // Process additions 221 213 for (const state of toAdd) { 222 214 const collectionRkey = state.collection.uri.split("/").pop(); 223 215 if (!collectionRkey) continue; ··· 256 248 } catch (err) { 257 249 contentEl.empty(); 258 250 const message = err instanceof Error ? err.message : String(err); 259 - contentEl.createEl("p", { text: `Failed to save: ${message}`, cls: "semble-error" }); 251 + contentEl.createEl("p", { text: `Failed to save: ${message}`, cls: "atmark-error" }); 260 252 } 261 253 } 262 254
+168 -48
src/components/editMarginBookmarkModal.ts
··· 1 1 import { Modal, Notice } from "obsidian"; 2 2 import type { Record } from "@atcute/atproto/types/repo/listRecords"; 3 3 import type { Main as MarginBookmark } from "../lexicons/types/at/margin/bookmark"; 4 + import type { Main as MarginCollection } from "../lexicons/types/at/margin/collection"; 5 + import type { Main as MarginCollectionItem } from "../lexicons/types/at/margin/collectionItem"; 4 6 import type ATmarkPlugin from "../main"; 5 - import { putRecord, deleteRecord } from "../lib"; 7 + import { putRecord, deleteRecord, getMarginCollections, getMarginCollectionItems, createMarginCollectionItem, getMarginBookmarks } from "../lib"; 6 8 7 9 type MarginBookmarkRecord = Record & { value: MarginBookmark }; 10 + type MarginCollectionRecord = Record & { value: MarginCollection }; 11 + type MarginCollectionItemRecord = Record & { value: MarginCollectionItem }; 12 + 13 + interface CollectionState { 14 + collection: MarginCollectionRecord; 15 + isSelected: boolean; 16 + wasSelected: boolean; 17 + linkUri?: string; 18 + } 19 + 20 + interface TagState { 21 + tag: string; 22 + isSelected: boolean; 23 + } 8 24 9 25 export class EditMarginBookmarkModal extends Modal { 10 26 plugin: ATmarkPlugin; 11 27 record: MarginBookmarkRecord; 12 28 onSuccess?: () => void; 13 - tagInputs: HTMLInputElement[] = []; 29 + tagStates: TagState[] = []; 30 + newTagInput: HTMLInputElement | null = null; 31 + collectionStates: CollectionState[] = []; 14 32 15 33 constructor(plugin: ATmarkPlugin, record: MarginBookmarkRecord, onSuccess?: () => void) { 16 34 super(plugin.app); ··· 19 37 this.onSuccess = onSuccess; 20 38 } 21 39 22 - onOpen() { 40 + async onOpen() { 23 41 const { contentEl } = this; 24 42 contentEl.empty(); 25 43 contentEl.addClass("atmark-modal"); ··· 31 49 return; 32 50 } 33 51 34 - const existingTags = this.record.value.tags || []; 52 + const loading = contentEl.createEl("p", { text: "Loading..." }); 35 53 54 + try { 55 + const [collectionsResp, itemsResp, bookmarksResp] = await Promise.all([ 56 + getMarginCollections(this.plugin.client, this.plugin.settings.identifier), 57 + getMarginCollectionItems(this.plugin.client, this.plugin.settings.identifier), 58 + getMarginBookmarks(this.plugin.client, this.plugin.settings.identifier), 59 + ]); 60 + 61 + loading.remove(); 62 + 63 + const collections = (collectionsResp.ok ? collectionsResp.data.records : []) as unknown as MarginCollectionRecord[]; 64 + const items = (itemsResp.ok ? itemsResp.data.records : []) as unknown as MarginCollectionItemRecord[]; 65 + const bookmarks = (bookmarksResp.ok ? bookmarksResp.data.records : []) as unknown as MarginBookmarkRecord[]; 66 + 67 + const bookmarkLinks = items.filter(item => item.value.annotation === this.record.uri); 68 + const linkedCollectionUris = new Map<string, string>(); 69 + for (const link of bookmarkLinks) { 70 + linkedCollectionUris.set(link.value.collection, link.uri); 71 + } 72 + 73 + this.collectionStates = collections.map(collection => ({ 74 + collection, 75 + isSelected: linkedCollectionUris.has(collection.uri), 76 + wasSelected: linkedCollectionUris.has(collection.uri), 77 + linkUri: linkedCollectionUris.get(collection.uri), 78 + })); 79 + 80 + const allTags = new Set<string>(); 81 + for (const bookmark of bookmarks) { 82 + if (bookmark.value.tags) { 83 + for (const tag of bookmark.value.tags) { 84 + allTags.add(tag); 85 + } 86 + } 87 + } 88 + 89 + const currentTags = new Set(this.record.value.tags || []); 90 + this.tagStates = Array.from(allTags).sort().map(tag => ({ 91 + tag, 92 + isSelected: currentTags.has(tag), 93 + })); 94 + 95 + this.renderForm(contentEl); 96 + } catch (err) { 97 + loading.remove(); 98 + const message = err instanceof Error ? err.message : String(err); 99 + contentEl.createEl("p", { text: `Error: ${message}`, cls: "atmark-error" }); 100 + } 101 + } 102 + 103 + private renderForm(contentEl: HTMLElement) { 36 104 const form = contentEl.createEl("div", { cls: "atmark-form" }); 37 105 38 - // Tags section 39 106 const tagsGroup = form.createEl("div", { cls: "atmark-form-group" }); 40 107 tagsGroup.createEl("label", { text: "Tags" }); 41 108 42 - const tagsContainer = tagsGroup.createEl("div", { cls: "atmark-tags-container" }); 43 - 44 - // Render existing tags 45 - for (const tag of existingTags) { 46 - this.addTagInput(tagsContainer, tag); 109 + const tagsList = tagsGroup.createEl("div", { cls: "atmark-tag-list" }); 110 + for (const state of this.tagStates) { 111 + this.addTagChip(tagsList, state); 47 112 } 48 113 49 - // Add empty input for new tag 50 - this.addTagInput(tagsContainer, ""); 51 - 52 - // Add tag button 53 - const addTagBtn = tagsGroup.createEl("button", { 54 - text: "Add tag", 55 - cls: "atmark-btn atmark-btn-secondary" 114 + const newTagRow = tagsGroup.createEl("div", { cls: "atmark-tag-row" }); 115 + this.newTagInput = newTagRow.createEl("input", { 116 + type: "text", 117 + cls: "atmark-input", 118 + attr: { placeholder: "Add new tag..." } 56 119 }); 57 - addTagBtn.addEventListener("click", (e) => { 58 - e.preventDefault(); 59 - this.addTagInput(tagsContainer, ""); 120 + const addBtn = newTagRow.createEl("button", { 121 + text: "Add", 122 + cls: "atmark-btn atmark-btn-secondary", 123 + attr: { type: "button" } 60 124 }); 125 + addBtn.addEventListener("click", () => { 126 + const value = this.newTagInput?.value.trim(); 127 + if (value && !this.tagStates.some(s => s.tag === value)) { 128 + const newState = { tag: value, isSelected: true }; 129 + this.tagStates.push(newState); 130 + this.addTagChip(tagsList, newState); 131 + if (this.newTagInput) this.newTagInput.value = ""; 132 + } 133 + }); 134 + 135 + if (this.collectionStates.length > 0) { 136 + const collectionsGroup = form.createEl("div", { cls: "atmark-form-group" }); 137 + collectionsGroup.createEl("label", { text: "Collections" }); 138 + 139 + const collectionsList = collectionsGroup.createEl("div", { cls: "atmark-collection-list" }); 140 + 141 + for (const state of this.collectionStates) { 142 + const item = collectionsList.createEl("label", { cls: "atmark-collection-item" }); 61 143 62 - // Action buttons 144 + const checkbox = item.createEl("input", { type: "checkbox", cls: "atmark-collection-checkbox" }); 145 + checkbox.checked = state.isSelected; 146 + checkbox.addEventListener("change", () => { 147 + state.isSelected = checkbox.checked; 148 + }); 149 + 150 + const info = item.createEl("div", { cls: "atmark-collection-item-info" }); 151 + info.createEl("span", { text: state.collection.value.name, cls: "atmark-collection-item-name" }); 152 + if (state.collection.value.description) { 153 + info.createEl("span", { text: state.collection.value.description, cls: "atmark-collection-item-desc" }); 154 + } 155 + } 156 + } 157 + 63 158 const actions = contentEl.createEl("div", { cls: "atmark-modal-actions" }); 64 159 65 160 const deleteBtn = actions.createEl("button", { ··· 83 178 saveBtn.addEventListener("click", () => { void this.saveChanges(); }); 84 179 } 85 180 86 - private addTagInput(container: HTMLElement, value: string) { 87 - const tagRow = container.createEl("div", { cls: "atmark-tag-row" }); 88 - 89 - const input = tagRow.createEl("input", { 90 - type: "text", 91 - cls: "atmark-input", 92 - value, 93 - attr: { placeholder: "Enter tag..." } 94 - }); 95 - this.tagInputs.push(input); 96 - 97 - const removeBtn = tagRow.createEl("button", { 98 - text: "ร—", 99 - cls: "atmark-btn atmark-btn-secondary atmark-tag-remove-btn" 100 - }); 101 - removeBtn.addEventListener("click", (e) => { 102 - e.preventDefault(); 103 - tagRow.remove(); 104 - this.tagInputs = this.tagInputs.filter(i => i !== input); 181 + private addTagChip(container: HTMLElement, state: TagState) { 182 + const item = container.createEl("label", { cls: "atmark-tag-item" }); 183 + const checkbox = item.createEl("input", { type: "checkbox" }); 184 + checkbox.checked = state.isSelected; 185 + checkbox.addEventListener("change", () => { 186 + state.isSelected = checkbox.checked; 105 187 }); 188 + item.createEl("span", { text: state.tag }); 106 189 } 107 190 108 191 private confirmDelete(contentEl: HTMLElement) { ··· 167 250 contentEl.createEl("p", { text: "Saving changes..." }); 168 251 169 252 try { 170 - // Get non-empty unique tags 171 - const tags = [...new Set( 172 - this.tagInputs 173 - .map(input => input.value.trim()) 174 - .filter(tag => tag.length > 0) 175 - )]; 253 + const selectedTags = this.tagStates.filter(s => s.isSelected).map(s => s.tag); 254 + const newTag = this.newTagInput?.value.trim(); 255 + if (newTag && !selectedTags.includes(newTag)) { 256 + selectedTags.push(newTag); 257 + } 258 + const tags = [...new Set(selectedTags)]; 176 259 177 260 const rkey = this.record.uri.split("/").pop(); 178 261 if (!rkey) { ··· 181 264 return; 182 265 } 183 266 184 - // Update the record with new tags 185 267 const updatedRecord: MarginBookmark = { 186 268 ...this.record.value, 187 269 tags, ··· 195 277 updatedRecord 196 278 ); 197 279 198 - new Notice("Tags updated"); 280 + const collectionsToAdd = this.collectionStates.filter(s => s.isSelected && !s.wasSelected); 281 + const collectionsToRemove = this.collectionStates.filter(s => !s.isSelected && s.wasSelected); 282 + 283 + for (const state of collectionsToRemove) { 284 + if (state.linkUri) { 285 + const linkRkey = state.linkUri.split("/").pop(); 286 + if (linkRkey) { 287 + await deleteRecord( 288 + this.plugin.client, 289 + this.plugin.settings.identifier, 290 + "at.margin.collectionItem", 291 + linkRkey 292 + ); 293 + } 294 + } 295 + } 296 + 297 + for (const state of collectionsToAdd) { 298 + await createMarginCollectionItem( 299 + this.plugin.client, 300 + this.plugin.settings.identifier, 301 + this.record.uri, 302 + state.collection.uri 303 + ); 304 + } 305 + 306 + const messages: string[] = []; 307 + if (tags.length !== (this.record.value.tags?.length || 0) || 308 + !tags.every(t => this.record.value.tags?.includes(t))) { 309 + messages.push("Tags updated"); 310 + } 311 + if (collectionsToAdd.length > 0) { 312 + messages.push(`Added to ${collectionsToAdd.length} collection${collectionsToAdd.length > 1 ? "s" : ""}`); 313 + } 314 + if (collectionsToRemove.length > 0) { 315 + messages.push(`Removed from ${collectionsToRemove.length} collection${collectionsToRemove.length > 1 ? "s" : ""}`); 316 + } 317 + 318 + new Notice(messages.length > 0 ? messages.join(". ") : "Saved"); 199 319 this.close(); 200 320 this.onSuccess?.(); 201 321 } catch (err) {
+8 -10
src/components/profileIcon.ts
··· 30 30 profile: ProfileData | null, 31 31 onClick?: () => void 32 32 ): HTMLElement { 33 - const wrapper = container.createEl("div", { cls: "semble-profile-icon" }); 33 + const wrapper = container.createEl("div", { cls: "atmark-profile-icon" }); 34 34 35 35 if (!profile) { 36 36 // Fallback when no profile data 37 - const placeholder = wrapper.createEl("div", { cls: "semble-avatar-placeholder" }); 37 + const placeholder = wrapper.createEl("div", { cls: "atmark-avatar-placeholder" }); 38 38 placeholder.createEl("span", { text: "?" }); 39 39 return wrapper; 40 40 } 41 41 42 - // Avatar button 43 - const avatarBtn = wrapper.createEl("button", { cls: "semble-avatar-btn" }); 42 + const avatarBtn = wrapper.createEl("button", { cls: "atmark-avatar-btn" }); 44 43 45 44 if (profile.avatar) { 46 - const img = avatarBtn.createEl("img", { cls: "semble-avatar-img" }); 45 + const img = avatarBtn.createEl("img", { cls: "atmark-avatar-img" }); 47 46 img.src = profile.avatar; 48 47 img.alt = profile.displayName || profile.handle; 49 48 } else { ··· 54 53 .slice(0, 2) 55 54 .join("") 56 55 .toUpperCase(); 57 - avatarBtn.createEl("span", { text: initials, cls: "semble-avatar-initials" }); 56 + avatarBtn.createEl("span", { text: initials, cls: "atmark-avatar-initials" }); 58 57 } 59 58 60 - // User info (display name and handle) 61 - const info = wrapper.createEl("div", { cls: "semble-profile-info" }); 59 + const info = wrapper.createEl("div", { cls: "atmark-profile-info" }); 62 60 63 61 if (profile.displayName) { 64 - info.createEl("span", { text: profile.displayName, cls: "semble-profile-name" }); 62 + info.createEl("span", { text: profile.displayName, cls: "atmark-profile-name" }); 65 63 } 66 64 67 - info.createEl("span", { text: `@${profile.handle}`, cls: "semble-profile-handle" }); 65 + info.createEl("span", { text: `@${profile.handle}`, cls: "atmark-profile-handle" }); 68 66 69 67 if (onClick) { 70 68 avatarBtn.addEventListener("click", onClick);
+90
src/components/selectPublicationModal.ts
··· 1 + import { Modal } from "obsidian"; 2 + import type ATmarkPlugin from "../main"; 3 + import { getPublications } from "../lib"; 4 + import { SiteStandardPublication } from "@atcute/standard-site"; 5 + import type { ResourceUri } from "@atcute/lexicons"; 6 + 7 + export type PublicationSelection = { 8 + uri: ResourceUri; 9 + publication: SiteStandardPublication.Main; 10 + }; 11 + 12 + export class SelectPublicationModal extends Modal { 13 + plugin: ATmarkPlugin; 14 + onSelect: (selection: PublicationSelection) => void; 15 + 16 + constructor(plugin: ATmarkPlugin, onSelect: (selection: PublicationSelection) => void) { 17 + super(plugin.app); 18 + this.plugin = plugin; 19 + this.onSelect = onSelect; 20 + } 21 + 22 + async onOpen() { 23 + const { contentEl } = this; 24 + contentEl.empty(); 25 + contentEl.addClass("atmark-modal"); 26 + 27 + contentEl.createEl("h2", { text: "Select publication" }); 28 + 29 + if (!this.plugin.client) { 30 + contentEl.createEl("p", { text: "Not logged in", cls: "atmark-error" }); 31 + return; 32 + } 33 + 34 + const loading = contentEl.createEl("p", { text: "Loading publications..." }); 35 + 36 + try { 37 + const response = await getPublications(this.plugin.client, this.plugin.settings.identifier); 38 + loading.remove(); 39 + 40 + let pubs = response.records 41 + 42 + if (pubs.length === 0) { 43 + contentEl.createEl("p", { text: "No publications found. Create one first." }); 44 + return; 45 + } 46 + 47 + // Create a list of publications 48 + const listContainer = contentEl.createEl("div", { cls: "atmark-collection-list" }); 49 + 50 + for (const pub of pubs) { 51 + const item = listContainer.createEl("div", { cls: "atmark-collection-item" }); 52 + 53 + const publication = pub.value; 54 + 55 + const info = item.createEl("div", { cls: "atmark-collection-item-info" }); 56 + info.createEl("div", { text: publication.name, cls: "atmark-collection-item-name" }); 57 + 58 + if (publication.description) { 59 + info.createEl("div", { 60 + text: publication.description, 61 + cls: "atmark-collection-item-desc" 62 + }); 63 + } 64 + 65 + info.createEl("div", { 66 + text: publication.url, 67 + cls: "atmark-collection-item-desc" 68 + }); 69 + 70 + item.addEventListener("click", () => { 71 + this.onSelect({ 72 + uri: pub.uri, 73 + publication, 74 + }); 75 + this.close(); 76 + }); 77 + } 78 + 79 + } catch (error) { 80 + loading.remove(); 81 + const message = error instanceof Error ? error.message : String(error); 82 + contentEl.createEl("p", { text: `Error: ${message}`, cls: "atmark-error" }); 83 + } 84 + } 85 + 86 + onClose() { 87 + const { contentEl } = this; 88 + contentEl.empty(); 89 + } 90 + }
+2
src/env.d.ts
··· 1 1 /// <reference types="@atcute/bluesky" /> 2 2 /// <reference types="@atcute/atproto" /> 3 + /// <reference types="@atcute/standard-site" /> 4 + /// <reference types="@atcute/leaflet" />
+15
src/lexicons/types/at/margin/profile.ts
··· 7 7 /*#__PURE__*/ v.object({ 8 8 $type: /*#__PURE__*/ v.literal("at.margin.profile"), 9 9 /** 10 + * User avatar image. 11 + * @accept image/png, image/jpeg 12 + * @maxSize 1000000 13 + */ 14 + avatar: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), 15 + /** 10 16 * User biography or description. 11 17 * @maxLength 5000 12 18 */ ··· 16 22 ]), 17 23 ), 18 24 createdAt: /*#__PURE__*/ v.datetimeString(), 25 + /** 26 + * Display name for the user. 27 + * @maxLength 640 28 + */ 29 + displayName: /*#__PURE__*/ v.optional( 30 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 31 + /*#__PURE__*/ v.stringLength(0, 640), 32 + ]), 33 + ), 19 34 /** 20 35 * List of other relevant links (e.g. GitHub, Bluesky, etc). 21 36 * @maxLength 20
+60
src/lib/bookmarks/community.ts
··· 1 + import type { Client } from "@atcute/client"; 2 + import type { ActorIdentifier, Nsid } from "@atcute/lexicons"; 3 + 4 + export async function getBookmarks(client: Client, repo: string) { 5 + return await client.get("com.atproto.repo.listRecords", { 6 + params: { 7 + repo: repo as ActorIdentifier, 8 + collection: "community.lexicon.bookmarks.bookmark" as Nsid, 9 + limit: 100, 10 + }, 11 + }); 12 + } 13 + 14 + export async function createBookmark( 15 + client: Client, 16 + repo: string, 17 + subject: string, 18 + title?: string, 19 + description?: string, 20 + tags?: string[] 21 + ) { 22 + return await client.post("com.atproto.repo.createRecord", { 23 + input: { 24 + repo: repo as ActorIdentifier, 25 + collection: "community.lexicon.bookmarks.bookmark" as Nsid, 26 + record: { 27 + $type: "community.lexicon.bookmarks.bookmark", 28 + subject, 29 + title, 30 + description, 31 + tags, 32 + createdAt: new Date().toISOString(), 33 + }, 34 + }, 35 + }); 36 + } 37 + 38 + export async function getTags(client: Client, repo: string) { 39 + return await client.get("com.atproto.repo.listRecords", { 40 + params: { 41 + repo: repo as ActorIdentifier, 42 + collection: "com.kipclip.tag" as Nsid, 43 + limit: 100, 44 + }, 45 + }); 46 + } 47 + 48 + export async function createTag(client: Client, repo: string, value: string) { 49 + return await client.post("com.atproto.repo.createRecord", { 50 + input: { 51 + repo: repo as ActorIdentifier, 52 + collection: "com.kipclip.tag" as Nsid, 53 + record: { 54 + $type: "com.kipclip.tag", 55 + value, 56 + createdAt: new Date().toISOString(), 57 + }, 58 + }, 59 + }); 60 + }
+124
src/lib/bookmarks/cosmik.ts
··· 1 + import type { Client } from "@atcute/client"; 2 + import type { ActorIdentifier, Nsid } from "@atcute/lexicons"; 3 + 4 + export async function getSembleCollections(client: Client, repo: string) { 5 + return await client.get("com.atproto.repo.listRecords", { 6 + params: { 7 + repo: repo as ActorIdentifier, 8 + collection: "network.cosmik.collection" as Nsid, 9 + limit: 100, 10 + }, 11 + }); 12 + } 13 + 14 + export async function createSembleCollection(client: Client, repo: string, name: string, description: string) { 15 + return await client.post("com.atproto.repo.createRecord", { 16 + input: { 17 + repo: repo as ActorIdentifier, 18 + collection: "network.cosmik.collection" as Nsid, 19 + validate: false, 20 + record: { 21 + $type: "network.cosmik.collection", 22 + name, 23 + description, 24 + accessType: "CLOSED", 25 + createdAt: new Date().toISOString(), 26 + }, 27 + }, 28 + }); 29 + } 30 + 31 + export async function getSembleCards(client: Client, repo: string) { 32 + return await client.get("com.atproto.repo.listRecords", { 33 + params: { 34 + repo: repo as ActorIdentifier, 35 + collection: "network.cosmik.card" as Nsid, 36 + limit: 100, 37 + }, 38 + }); 39 + } 40 + 41 + export async function createSembleNote(client: Client, repo: string, text: string, parentCard?: { uri: string; cid: string }) { 42 + return await client.post("com.atproto.repo.createRecord", { 43 + input: { 44 + repo: repo as ActorIdentifier, 45 + collection: "network.cosmik.card" as Nsid, 46 + record: { 47 + $type: "network.cosmik.card", 48 + type: "NOTE", 49 + content: { 50 + $type: "network.cosmik.card#noteContent", 51 + text, 52 + }, 53 + // Only set parentCard as per Semble documentation 54 + parentCard: parentCard ? { uri: parentCard.uri, cid: parentCard.cid } : undefined, 55 + createdAt: new Date().toISOString(), 56 + }, 57 + }, 58 + }); 59 + } 60 + 61 + export async function createSembleUrlCard(client: Client, repo: string, url: string, metadata?: { 62 + title?: string; 63 + description?: string; 64 + imageUrl?: string; 65 + siteName?: string; 66 + }) { 67 + return await client.post("com.atproto.repo.createRecord", { 68 + input: { 69 + repo: repo as ActorIdentifier, 70 + collection: "network.cosmik.card" as Nsid, 71 + record: { 72 + $type: "network.cosmik.card", 73 + type: "URL", 74 + url, 75 + content: { 76 + $type: "network.cosmik.card#urlContent", 77 + url, 78 + metadata: metadata ? { $type: "network.cosmik.card#urlMetadata", ...metadata } : undefined, 79 + }, 80 + createdAt: new Date().toISOString(), 81 + }, 82 + }, 83 + }); 84 + } 85 + 86 + export async function getSembleCollectionLinks(client: Client, repo: string) { 87 + return await client.get("com.atproto.repo.listRecords", { 88 + params: { 89 + repo: repo as ActorIdentifier, 90 + collection: "network.cosmik.collectionLink" as Nsid, 91 + limit: 100, 92 + }, 93 + }); 94 + } 95 + 96 + export async function createSembleCollectionLink( 97 + client: Client, 98 + repo: string, 99 + cardUri: string, 100 + cardCid: string, 101 + collectionUri: string, 102 + collectionCid: string 103 + ) { 104 + return await client.post("com.atproto.repo.createRecord", { 105 + input: { 106 + repo: repo as ActorIdentifier, 107 + collection: "network.cosmik.collectionLink" as Nsid, 108 + record: { 109 + $type: "network.cosmik.collectionLink", 110 + card: { 111 + uri: cardUri, 112 + cid: cardCid, 113 + }, 114 + collection: { 115 + uri: collectionUri, 116 + cid: collectionCid, 117 + }, 118 + addedAt: new Date().toISOString(), 119 + addedBy: repo, 120 + createdAt: new Date().toISOString(), 121 + }, 122 + }, 123 + }); 124 + }
+100
src/lib/bookmarks/margin.ts
··· 1 + import type { Client } from "@atcute/client"; 2 + import type { ActorIdentifier, Nsid } from "@atcute/lexicons"; 3 + 4 + export async function getMarginBookmarks(client: Client, repo: string) { 5 + return await client.get("com.atproto.repo.listRecords", { 6 + params: { 7 + repo: repo as ActorIdentifier, 8 + collection: "at.margin.bookmark" as Nsid, 9 + limit: 100, 10 + }, 11 + }); 12 + } 13 + 14 + export async function createMarginBookmark( 15 + client: Client, 16 + repo: string, 17 + source: string, 18 + title?: string, 19 + description?: string, 20 + tags?: string[] 21 + ) { 22 + return await client.post("com.atproto.repo.createRecord", { 23 + input: { 24 + repo: repo as ActorIdentifier, 25 + collection: "at.margin.bookmark" as Nsid, 26 + record: { 27 + $type: "at.margin.bookmark", 28 + source, 29 + title, 30 + description, 31 + tags, 32 + createdAt: new Date().toISOString(), 33 + }, 34 + }, 35 + }); 36 + } 37 + 38 + export async function getMarginCollections(client: Client, repo: string) { 39 + return await client.get("com.atproto.repo.listRecords", { 40 + params: { 41 + repo: repo as ActorIdentifier, 42 + collection: "at.margin.collection" as Nsid, 43 + limit: 100, 44 + }, 45 + }); 46 + } 47 + 48 + export async function getMarginCollectionItems(client: Client, repo: string) { 49 + return await client.get("com.atproto.repo.listRecords", { 50 + params: { 51 + repo: repo as ActorIdentifier, 52 + collection: "at.margin.collectionItem" as Nsid, 53 + limit: 100, 54 + }, 55 + }); 56 + } 57 + 58 + export async function createMarginCollection( 59 + client: Client, 60 + repo: string, 61 + name: string, 62 + description?: string, 63 + icon?: string 64 + ) { 65 + return await client.post("com.atproto.repo.createRecord", { 66 + input: { 67 + repo: repo as ActorIdentifier, 68 + collection: "at.margin.collection" as Nsid, 69 + record: { 70 + $type: "at.margin.collection", 71 + name, 72 + description, 73 + icon, 74 + createdAt: new Date().toISOString(), 75 + }, 76 + }, 77 + }); 78 + } 79 + 80 + export async function createMarginCollectionItem( 81 + client: Client, 82 + repo: string, 83 + annotationUri: string, 84 + collectionUri: string, 85 + position?: number 86 + ) { 87 + return await client.post("com.atproto.repo.createRecord", { 88 + input: { 89 + repo: repo as ActorIdentifier, 90 + collection: "at.margin.collectionItem" as Nsid, 91 + record: { 92 + $type: "at.margin.collectionItem", 93 + annotation: annotationUri, 94 + collection: collectionUri, 95 + position, 96 + createdAt: new Date().toISOString(), 97 + }, 98 + }, 99 + }); 100 + }
-60
src/lib/bookmarks.ts
··· 1 - import type { Client } from "@atcute/client"; 2 - import type { ActorIdentifier, Nsid } from "@atcute/lexicons"; 3 - 4 - export async function getBookmarks(client: Client, repo: string) { 5 - return await client.get("com.atproto.repo.listRecords", { 6 - params: { 7 - repo: repo as ActorIdentifier, 8 - collection: "community.lexicon.bookmarks.bookmark" as Nsid, 9 - limit: 100, 10 - }, 11 - }); 12 - } 13 - 14 - export async function createBookmark( 15 - client: Client, 16 - repo: string, 17 - subject: string, 18 - title?: string, 19 - description?: string, 20 - tags?: string[] 21 - ) { 22 - return await client.post("com.atproto.repo.createRecord", { 23 - input: { 24 - repo: repo as ActorIdentifier, 25 - collection: "community.lexicon.bookmarks.bookmark" as Nsid, 26 - record: { 27 - $type: "community.lexicon.bookmarks.bookmark", 28 - subject, 29 - title, 30 - description, 31 - tags, 32 - createdAt: new Date().toISOString(), 33 - }, 34 - }, 35 - }); 36 - } 37 - 38 - export async function getTags(client: Client, repo: string) { 39 - return await client.get("com.atproto.repo.listRecords", { 40 - params: { 41 - repo: repo as ActorIdentifier, 42 - collection: "com.kipclip.tag" as Nsid, 43 - limit: 100, 44 - }, 45 - }); 46 - } 47 - 48 - export async function createTag(client: Client, repo: string, value: string) { 49 - return await client.post("com.atproto.repo.createRecord", { 50 - input: { 51 - repo: repo as ActorIdentifier, 52 - collection: "com.kipclip.tag" as Nsid, 53 - record: { 54 - $type: "com.kipclip.tag", 55 - value, 56 - createdAt: new Date().toISOString(), 57 - }, 58 - }, 59 - }); 60 - }
+138
src/lib/client.ts
··· 1 + import { Client, CredentialManager, FetchHandlerObject, simpleFetchHandler } from "@atcute/client"; 2 + import { resolveActor } from "./identity"; 3 + import { isActorIdentifier } from "@atcute/lexicons/syntax"; 4 + import { ResolvedActor } from "@atcute/identity-resolver"; 5 + 6 + const DEFAULT_SERVICE = "https://bsky.social"; 7 + 8 + export interface Credentials { 9 + identifier: string; 10 + password: string; 11 + } 12 + 13 + export class ATClient extends Client { 14 + hh: Handler; 15 + 16 + constructor(creds?: Credentials) { 17 + const handler = new Handler(creds); 18 + super({ handler }); 19 + this.hh = handler; 20 + } 21 + 22 + get loggedIn(): boolean { 23 + return !!this.hh.cm.session?.did; 24 + } 25 + get session() { 26 + return this.hh.cm.session; 27 + } 28 + 29 + getActor(identifier: string): Promise<ResolvedActor> { 30 + return this.hh.getActor(identifier); 31 + } 32 + } 33 + 34 + export class Handler implements FetchHandlerObject { 35 + creds?: Credentials; 36 + cm: CredentialManager; 37 + cache: Cache 38 + 39 + constructor(creds?: Credentials) { 40 + this.creds = creds; 41 + this.cache = new Cache(5 * 60 * 1000); // 5 minutes TTL 42 + this.cm = new CredentialManager({ service: DEFAULT_SERVICE }); 43 + } 44 + 45 + async getActor(identifier: string): Promise<ResolvedActor> { 46 + const key = `actor:${identifier}`; 47 + const cached = this.cache.get<ResolvedActor>(key); 48 + if (cached) { 49 + return cached; 50 + } 51 + if (isActorIdentifier(identifier)) { 52 + const res = await resolveActor(identifier); 53 + this.cache.set(key, res); 54 + return res; 55 + } else { 56 + throw new Error("Invalid actor identifier: " + JSON.stringify(identifier)); 57 + } 58 + } 59 + 60 + async getPDS(pathname: string): Promise<string | null> { 61 + const url = new URL(pathname, "https://placeholder") 62 + const repo = url.searchParams.get("repo"); 63 + if (!repo) { 64 + return null 65 + } 66 + const own = (repo === this.cm.session?.handle || repo === this.cm.session?.did); 67 + if (!own) { 68 + const actor = await this.getActor(repo); 69 + return actor.pds 70 + } 71 + return null 72 + } 73 + 74 + async handle(pathname: string, init: RequestInit): Promise<Response> { 75 + if (this.creds && !this.cm.session?.did) { 76 + await this.cm.login(this.creds); 77 + if (this.cm.session?.did) { 78 + void this.getActor(this.cm.session?.did) 79 + } 80 + } 81 + 82 + const cacheKey = `${init?.method || "GET"}:${pathname}`; 83 + if (init?.method?.toLowerCase() === "get") { 84 + const cached = this.cache.get<Response>(cacheKey); 85 + if (cached) { 86 + return cached.clone(); 87 + } 88 + } 89 + 90 + let resp: Response; 91 + const pds = await this.getPDS(pathname); 92 + if (pds) { 93 + const sfh = simpleFetchHandler({ service: pds }); 94 + resp = await sfh(pathname, init); 95 + } else { 96 + resp = await this.cm.handle(pathname, init); 97 + } 98 + 99 + if (init?.method?.toLowerCase() === "get" && resp.ok) { 100 + this.cache.set(cacheKey, resp.clone()); 101 + } 102 + return resp; 103 + } 104 + } 105 + 106 + class CacheEntry<T> { 107 + value: T; 108 + timestamp: number; 109 + constructor(value: T) { 110 + this.value = value; 111 + this.timestamp = Date.now(); 112 + } 113 + } 114 + 115 + class Cache { 116 + #store = new Map<string, CacheEntry<unknown>>(); 117 + #ttl: number; 118 + 119 + constructor(ttlMillis: number) { 120 + this.#ttl = ttlMillis; 121 + } 122 + 123 + get<T>(key: string): T | undefined { 124 + const entry = this.#store.get(key); 125 + if (entry) { 126 + if (Date.now() - entry.timestamp < this.#ttl) { 127 + return entry.value as T; 128 + } else { 129 + this.#store.delete(key); 130 + } 131 + } 132 + return undefined; 133 + } 134 + 135 + set<T>(key: string, value: T): void { 136 + this.#store.set(key, new CacheEntry(value)); 137 + } 138 + }
+118
src/lib/clipper.ts
··· 1 + import { ATRecord, buildDocumentUrl } from "lib"; 2 + import { Main as Document } from "@atcute/standard-site/types/document"; 3 + import { Main as Publication } from "@atcute/standard-site/types/publication"; 4 + import { is, parseResourceUri } from "@atcute/lexicons"; 5 + import { Notice, TFile } from "obsidian"; 6 + import ATmarkPlugin from "main"; 7 + import { leafletContentToMarkdown } from "./markdown/leaflet"; 8 + import { pcktContentToMarkdown } from "./markdown/pckt"; 9 + import { ResolvedActor } from "@atcute/identity-resolver"; 10 + import { PubLeafletContent } from "@atcute/leaflet"; 11 + import { BlogPcktContent } from "@atcute/pckt"; 12 + 13 + 14 + function bskyLink(handle: string) { 15 + return `https://bsky.app/profile/${handle}`; 16 + } 17 + 18 + export class Clipper { 19 + plugin: ATmarkPlugin; 20 + 21 + constructor(plugin: ATmarkPlugin) { 22 + this.plugin = plugin; 23 + } 24 + 25 + safeFilePath(title: string, clipDir: string) { 26 + const safeTitle = title.replace(/[/\\?%*:|"<>]/g, "-").substring(0, 50); 27 + return `${clipDir}/${safeTitle}.md`; 28 + } 29 + 30 + existsInClipDir(doc: ATRecord<Document>) { 31 + const vault = this.plugin.app.vault; 32 + const clipDir = this.plugin.settings.clipDir 33 + 34 + 35 + const filePath = this.safeFilePath(doc.value.title, clipDir); 36 + const file = vault.getAbstractFileByPath(filePath); 37 + return file !== null; 38 + } 39 + 40 + 41 + async writeFrontmatter(file: TFile, doc: ATRecord<Document>, pub: ATRecord<Publication>) { 42 + let actor: ResolvedActor | null = null; 43 + const repoParsed = parseResourceUri(doc.uri); 44 + if (repoParsed.ok) { 45 + actor = await this.plugin.client.getActor(repoParsed.value.repo); 46 + } 47 + // Add frontmatter using Obsidian's processFrontMatter 48 + await this.plugin.app.fileManager.processFrontMatter(file, (fm: Record<string, unknown>) => { 49 + fm["title"] = doc.value.title; 50 + if (actor && actor.handle) { 51 + fm["author"] = `[${actor.handle}](${bskyLink(actor.handle)})`; 52 + } 53 + fm["aturi"] = doc.uri; 54 + 55 + let docUrl = ""; 56 + 57 + // pubUrl is at:// record uri or https:// for loose document 58 + // fetch pub if at:// so we can get the url 59 + // otherwise just use the url as is 60 + if (doc.value.site.startsWith("https://")) { 61 + docUrl = buildDocumentUrl(doc.value.site, doc.uri, doc.value); 62 + } else { 63 + docUrl = buildDocumentUrl(pub.value.url, doc.uri, doc.value); 64 + 65 + } 66 + if (docUrl) { 67 + fm["url"] = docUrl; 68 + } 69 + }); 70 + } 71 + 72 + async clipDocument(doc: ATRecord<Document>, pub: ATRecord<Publication>) { 73 + const vault = this.plugin.app.vault; 74 + const clipDir = this.plugin.settings.clipDir 75 + 76 + const parsed = parseResourceUri(pub.uri); 77 + if (!parsed.ok) { 78 + throw new Error(`Invalid publication URI: ${pub.uri}`); 79 + } 80 + if (!vault.getAbstractFileByPath(clipDir)) { 81 + await vault.createFolder(clipDir); 82 + } 83 + const filePath = this.safeFilePath(doc.value.title, clipDir); 84 + 85 + let content = `# ${doc.value.title}\n\n`; 86 + 87 + if (doc.value.description) { 88 + content += `> ${doc.value.description}\n\n`; 89 + } 90 + 91 + content += `---\n\n`; 92 + 93 + let bodyContent = ""; 94 + if (doc.value.content) { 95 + if (is(PubLeafletContent.mainSchema, doc.value.content)) { 96 + bodyContent = leafletContentToMarkdown(doc.value.content); 97 + } else if (is(BlogPcktContent.mainSchema, doc.value.content)) { 98 + bodyContent = pcktContentToMarkdown(doc.value.content); 99 + } 100 + } 101 + 102 + if (!bodyContent && doc.value.textContent) { 103 + bodyContent = doc.value.textContent; 104 + } 105 + 106 + content += bodyContent; 107 + 108 + const file = await vault.create(filePath, content); 109 + await this.writeFrontmatter(file, doc, pub); 110 + 111 + 112 + const leaf = this.plugin.app.workspace.getLeaf(false); 113 + await leaf.openFile(file); 114 + 115 + new Notice(`Clipped document to ${filePath}`); 116 + } 117 + } 118 +
-124
src/lib/cosmik.ts
··· 1 - import type { Client } from "@atcute/client"; 2 - import type { ActorIdentifier, Nsid } from "@atcute/lexicons"; 3 - 4 - export async function getSembleCollections(client: Client, repo: string) { 5 - return await client.get("com.atproto.repo.listRecords", { 6 - params: { 7 - repo: repo as ActorIdentifier, 8 - collection: "network.cosmik.collection" as Nsid, 9 - limit: 100, 10 - }, 11 - }); 12 - } 13 - 14 - export async function createSembleCollection(client: Client, repo: string, name: string, description: string) { 15 - return await client.post("com.atproto.repo.createRecord", { 16 - input: { 17 - repo: repo as ActorIdentifier, 18 - collection: "network.cosmik.collection" as Nsid, 19 - validate: false, 20 - record: { 21 - $type: "network.cosmik.collection", 22 - name, 23 - description, 24 - accessType: "CLOSED", 25 - createdAt: new Date().toISOString(), 26 - }, 27 - }, 28 - }); 29 - } 30 - 31 - export async function getSembleCards(client: Client, repo: string) { 32 - return await client.get("com.atproto.repo.listRecords", { 33 - params: { 34 - repo: repo as ActorIdentifier, 35 - collection: "network.cosmik.card" as Nsid, 36 - limit: 100, 37 - }, 38 - }); 39 - } 40 - 41 - export async function createSembleNote(client: Client, repo: string, text: string, parentCard?: { uri: string; cid: string }) { 42 - return await client.post("com.atproto.repo.createRecord", { 43 - input: { 44 - repo: repo as ActorIdentifier, 45 - collection: "network.cosmik.card" as Nsid, 46 - record: { 47 - $type: "network.cosmik.card", 48 - type: "NOTE", 49 - content: { 50 - $type: "network.cosmik.card#noteContent", 51 - text, 52 - }, 53 - // Only set parentCard as per Semble documentation 54 - parentCard: parentCard ? { uri: parentCard.uri, cid: parentCard.cid } : undefined, 55 - createdAt: new Date().toISOString(), 56 - }, 57 - }, 58 - }); 59 - } 60 - 61 - export async function createSembleUrlCard(client: Client, repo: string, url: string, metadata?: { 62 - title?: string; 63 - description?: string; 64 - imageUrl?: string; 65 - siteName?: string; 66 - }) { 67 - return await client.post("com.atproto.repo.createRecord", { 68 - input: { 69 - repo: repo as ActorIdentifier, 70 - collection: "network.cosmik.card" as Nsid, 71 - record: { 72 - $type: "network.cosmik.card", 73 - type: "URL", 74 - url, 75 - content: { 76 - $type: "network.cosmik.card#urlContent", 77 - url, 78 - metadata: metadata ? { $type: "network.cosmik.card#urlMetadata", ...metadata } : undefined, 79 - }, 80 - createdAt: new Date().toISOString(), 81 - }, 82 - }, 83 - }); 84 - } 85 - 86 - export async function getSembleCollectionLinks(client: Client, repo: string) { 87 - return await client.get("com.atproto.repo.listRecords", { 88 - params: { 89 - repo: repo as ActorIdentifier, 90 - collection: "network.cosmik.collectionLink" as Nsid, 91 - limit: 100, 92 - }, 93 - }); 94 - } 95 - 96 - export async function createSembleCollectionLink( 97 - client: Client, 98 - repo: string, 99 - cardUri: string, 100 - cardCid: string, 101 - collectionUri: string, 102 - collectionCid: string 103 - ) { 104 - return await client.post("com.atproto.repo.createRecord", { 105 - input: { 106 - repo: repo as ActorIdentifier, 107 - collection: "network.cosmik.collectionLink" as Nsid, 108 - record: { 109 - $type: "network.cosmik.collectionLink", 110 - card: { 111 - uri: cardUri, 112 - cid: cardCid, 113 - }, 114 - collection: { 115 - uri: collectionUri, 116 - cid: collectionCid, 117 - }, 118 - addedAt: new Date().toISOString(), 119 - addedBy: repo, 120 - createdAt: new Date().toISOString(), 121 - }, 122 - }, 123 - }); 124 - }
+38
src/lib/identity.ts
··· 1 + import type { ActorIdentifier } from "@atcute/lexicons"; 2 + import { 3 + CompositeHandleResolver, 4 + DohJsonHandleResolver, 5 + LocalActorResolver, 6 + WellKnownHandleResolver, 7 + } from '@atcute/identity-resolver'; 8 + 9 + import { 10 + CompositeDidDocumentResolver, 11 + PlcDidDocumentResolver, 12 + WebDidDocumentResolver, 13 + } from '@atcute/identity-resolver'; 14 + 15 + const handleResolver = new CompositeHandleResolver({ 16 + methods: { 17 + dns: new DohJsonHandleResolver({ dohUrl: 'https://mozilla.cloudflare-dns.com/dns-query' }), 18 + http: new WellKnownHandleResolver(), 19 + }, 20 + }); 21 + 22 + const didResolver = new CompositeDidDocumentResolver({ 23 + methods: { 24 + plc: new PlcDidDocumentResolver(), 25 + web: new WebDidDocumentResolver(), 26 + }, 27 + }); 28 + 29 + const actorResolver = new LocalActorResolver({ 30 + handleResolver, 31 + didDocumentResolver: didResolver, 32 + }); 33 + 34 + export async function resolveActor(identifier: ActorIdentifier) { 35 + return actorResolver.resolve(identifier); 36 + } 37 + 38 +
-78
src/lib/margin.ts
··· 1 - import type { Client } from "@atcute/client"; 2 - import type { ActorIdentifier, Nsid } from "@atcute/lexicons"; 3 - 4 - export async function getMarginBookmarks(client: Client, repo: string) { 5 - return await client.get("com.atproto.repo.listRecords", { 6 - params: { 7 - repo: repo as ActorIdentifier, 8 - collection: "at.margin.bookmark" as Nsid, 9 - limit: 100, 10 - }, 11 - }); 12 - } 13 - 14 - export async function createMarginBookmark( 15 - client: Client, 16 - repo: string, 17 - source: string, 18 - title?: string, 19 - description?: string, 20 - tags?: string[] 21 - ) { 22 - return await client.post("com.atproto.repo.createRecord", { 23 - input: { 24 - repo: repo as ActorIdentifier, 25 - collection: "at.margin.bookmark" as Nsid, 26 - record: { 27 - $type: "at.margin.bookmark", 28 - source, 29 - title, 30 - description, 31 - tags, 32 - createdAt: new Date().toISOString(), 33 - }, 34 - }, 35 - }); 36 - } 37 - 38 - export async function getMarginCollections(client: Client, repo: string) { 39 - return await client.get("com.atproto.repo.listRecords", { 40 - params: { 41 - repo: repo as ActorIdentifier, 42 - collection: "at.margin.collection" as Nsid, 43 - limit: 100, 44 - }, 45 - }); 46 - } 47 - 48 - export async function getMarginCollectionItems(client: Client, repo: string) { 49 - return await client.get("com.atproto.repo.listRecords", { 50 - params: { 51 - repo: repo as ActorIdentifier, 52 - collection: "at.margin.collectionItem" as Nsid, 53 - limit: 100, 54 - }, 55 - }); 56 - } 57 - 58 - export async function createMarginCollection( 59 - client: Client, 60 - repo: string, 61 - name: string, 62 - description?: string, 63 - icon?: string 64 - ) { 65 - return await client.post("com.atproto.repo.createRecord", { 66 - input: { 67 - repo: repo as ActorIdentifier, 68 - collection: "at.margin.collection" as Nsid, 69 - record: { 70 - $type: "at.margin.collection", 71 - name, 72 - description, 73 - icon, 74 - createdAt: new Date().toISOString(), 75 - }, 76 - }, 77 - }); 78 - }
+46
src/lib/markdown/index.ts
··· 1 + import { unified } from "unified"; 2 + import remarkParse from "remark-parse"; 3 + import type { Root, RootContent } from "mdast"; 4 + 5 + export function parseMarkdown(markdown: string): Root { 6 + return unified().use(remarkParse).parse(markdown); 7 + } 8 + 9 + export function extractText(node: RootContent | Root): string { 10 + if (node.type === "text") { 11 + return node.value; 12 + } 13 + 14 + if (node.type === "inlineCode") { 15 + return node.value; 16 + } 17 + 18 + if ("children" in node && Array.isArray(node.children)) { 19 + return node.children.map(extractText).join(""); 20 + } 21 + 22 + if ("value" in node && typeof node.value === "string") { 23 + return node.value; 24 + } 25 + 26 + return ""; 27 + } 28 + 29 + /** 30 + * Strip markdown formatting to plain text 31 + * Used for the textContent field in standard.site documents 32 + */ 33 + export function stripMarkdown(markdown: string): string { 34 + const tree = parseMarkdown(markdown); 35 + return tree.children.map(extractText).join("\n\n").trim(); 36 + } 37 + 38 + export function cleanPlaintext(text: string): string { 39 + return text.trim(); 40 + } 41 + 42 + export type { Root, RootContent }; 43 + 44 + export { markdownToPcktContent, pcktContentToMarkdown } from "./pckt"; 45 + export { markdownToLeafletContent, leafletContentToMarkdown } from "./leaflet"; 46 +
+191
src/lib/markdown/leaflet.ts
··· 1 + import type { RootContent, Root } from "mdast"; 2 + import { unified } from "unified"; 3 + import remarkStringify from "remark-stringify"; 4 + import { 5 + PubLeafletBlocksUnorderedList, 6 + PubLeafletContent, 7 + PubLeafletPagesLinearDocument, 8 + } from "@atcute/leaflet"; 9 + import { parseMarkdown, extractText, cleanPlaintext } from "../markdown"; 10 + 11 + export function markdownToLeafletContent(markdown: string): PubLeafletContent.Main { 12 + const tree = parseMarkdown(markdown); 13 + const blocks: PubLeafletPagesLinearDocument.Block[] = []; 14 + 15 + for (const node of tree.children) { 16 + const block = convertNodeToBlock(node); 17 + if (block) { 18 + blocks.push(block); 19 + } 20 + } 21 + 22 + return { 23 + $type: "pub.leaflet.content", 24 + pages: [{ 25 + $type: "pub.leaflet.pages.linearDocument", 26 + blocks, 27 + }], 28 + }; 29 + } 30 + 31 + function convertNodeToBlock(node: RootContent): PubLeafletPagesLinearDocument.Block | null { 32 + switch (node.type) { 33 + case "heading": 34 + return { 35 + block: { 36 + $type: "pub.leaflet.blocks.header", 37 + level: node.depth, 38 + plaintext: extractText(node), 39 + }, 40 + alignment: "pub.leaflet.pages.linearDocument#textAlignLeft", 41 + }; 42 + 43 + case "paragraph": 44 + return { 45 + block: { 46 + $type: "pub.leaflet.blocks.text", 47 + plaintext: extractText(node), 48 + textSize: "default", 49 + }, 50 + alignment: "pub.leaflet.pages.linearDocument#textAlignLeft", 51 + }; 52 + 53 + case "list": { 54 + const listItems: PubLeafletBlocksUnorderedList.ListItem[] = node.children.map((item) => ({ 55 + $type: "pub.leaflet.blocks.unorderedList#listItem", 56 + content: { 57 + $type: "pub.leaflet.blocks.text", 58 + plaintext: extractText(item), 59 + textSize: "default", 60 + }, 61 + })); 62 + 63 + return { 64 + block: { 65 + $type: "pub.leaflet.blocks.unorderedList", 66 + children: listItems, 67 + }, 68 + alignment: "pub.leaflet.pages.linearDocument#textAlignLeft", 69 + }; 70 + } 71 + 72 + case "code": 73 + return { 74 + block: { 75 + $type: "pub.leaflet.blocks.code", 76 + plaintext: node.value, 77 + language: node.lang || undefined, 78 + }, 79 + alignment: "pub.leaflet.pages.linearDocument#textAlignLeft", 80 + }; 81 + 82 + case "thematicBreak": 83 + return { 84 + block: { 85 + $type: "pub.leaflet.blocks.horizontalRule", 86 + }, 87 + alignment: "pub.leaflet.pages.linearDocument#textAlignLeft", 88 + }; 89 + 90 + case "blockquote": 91 + return { 92 + block: { 93 + $type: "pub.leaflet.blocks.blockquote", 94 + plaintext: extractText(node), 95 + }, 96 + alignment: "pub.leaflet.pages.linearDocument#textAlignLeft", 97 + }; 98 + 99 + default: 100 + return null; 101 + } 102 + } 103 + 104 + export function leafletContentToMarkdown(content: PubLeafletContent.Main): string { 105 + const mdastNodes: RootContent[] = []; 106 + 107 + for (const page of content.pages) { 108 + if (page.$type !== "pub.leaflet.pages.linearDocument") { 109 + continue; 110 + } 111 + 112 + for (const item of page.blocks) { 113 + const block = item.block; 114 + const node = leafletBlockToMdast(block); 115 + if (node) { 116 + mdastNodes.push(node); 117 + } 118 + } 119 + } 120 + 121 + const root: Root = { 122 + type: "root", 123 + children: mdastNodes, 124 + }; 125 + 126 + return unified().use(remarkStringify).stringify(root); 127 + } 128 + 129 + // Extract the union type of all possible leaflet blocks from the Block interface 130 + type LeafletBlockType = PubLeafletPagesLinearDocument.Block['block']; 131 + 132 + function leafletBlockToMdast(block: LeafletBlockType): RootContent | null { 133 + switch (block.$type) { 134 + case "pub.leaflet.blocks.header": 135 + return { 136 + type: "heading", 137 + depth: block.level as 1 | 2 | 3 | 4 | 5 | 6, 138 + children: [{ type: "text", value: cleanPlaintext(block.plaintext) }], 139 + }; 140 + 141 + case "pub.leaflet.blocks.text": 142 + return { 143 + type: "paragraph", 144 + children: [{ type: "text", value: cleanPlaintext(block.plaintext) }], 145 + }; 146 + 147 + case "pub.leaflet.blocks.unorderedList": 148 + return { 149 + type: "list", 150 + ordered: false, 151 + spread: false, 152 + children: block.children.map((item: PubLeafletBlocksUnorderedList.ListItem) => { 153 + // Extract plaintext from the content, which can be Header, Image, or Text 154 + const plaintext = 'plaintext' in item.content ? cleanPlaintext(item.content.plaintext) : ''; 155 + return { 156 + type: "listItem", 157 + spread: false, 158 + children: [{ 159 + type: "paragraph", 160 + children: [{ type: "text", value: plaintext }], 161 + }], 162 + }; 163 + }), 164 + }; 165 + 166 + case "pub.leaflet.blocks.code": 167 + return { 168 + type: "code", 169 + lang: block.language || null, 170 + meta: null, 171 + value: block.plaintext, // Keep code blocks as-is to preserve formatting 172 + }; 173 + 174 + case "pub.leaflet.blocks.horizontalRule": 175 + return { 176 + type: "thematicBreak", 177 + }; 178 + 179 + case "pub.leaflet.blocks.blockquote": 180 + return { 181 + type: "blockquote", 182 + children: [{ 183 + type: "paragraph", 184 + children: [{ type: "text", value: cleanPlaintext(block.plaintext) }], 185 + }], 186 + }; 187 + 188 + default: 189 + return null; 190 + } 191 + }
+223
src/lib/markdown/pckt.ts
··· 1 + import type { RootContent, Root } from "mdast"; 2 + import { unified } from "unified"; 3 + import remarkStringify from "remark-stringify"; 4 + import { 5 + BlogPcktBlockListItem, 6 + BlogPcktBlockText, 7 + BlogPcktBlockHeading, 8 + BlogPcktBlockCodeBlock, 9 + BlogPcktBlockBulletList, 10 + BlogPcktBlockOrderedList, 11 + BlogPcktBlockHorizontalRule, 12 + BlogPcktBlockBlockquote, 13 + BlogPcktContent, 14 + } from "@atcute/pckt"; 15 + import { parseMarkdown, extractText, cleanPlaintext } from "../markdown"; 16 + 17 + type PcktBlock = 18 + | BlogPcktBlockText.Main 19 + | BlogPcktBlockHeading.Main 20 + | BlogPcktBlockCodeBlock.Main 21 + | BlogPcktBlockBulletList.Main 22 + | BlogPcktBlockOrderedList.Main 23 + | BlogPcktBlockHorizontalRule.Main 24 + | BlogPcktBlockBlockquote.Main; 25 + 26 + export function markdownToPcktContent(markdown: string): BlogPcktContent.Main { 27 + const tree = parseMarkdown(markdown); 28 + const items: PcktBlock[] = []; 29 + 30 + for (const node of tree.children) { 31 + const block = convertNodeToBlock(node); 32 + if (block) { 33 + items.push(block); 34 + } 35 + } 36 + 37 + return { 38 + $type: "blog.pckt.content", 39 + items, 40 + } as BlogPcktContent.Main; 41 + } 42 + 43 + function convertNodeToBlock(node: RootContent): PcktBlock | null { 44 + switch (node.type) { 45 + case "heading": { 46 + const block: BlogPcktBlockHeading.Main = { 47 + $type: "blog.pckt.block.heading", 48 + level: node.depth, 49 + plaintext: extractText(node), 50 + }; 51 + return block; 52 + } 53 + 54 + case "paragraph": { 55 + const block: BlogPcktBlockText.Main = { 56 + $type: "blog.pckt.block.text", 57 + plaintext: extractText(node), 58 + }; 59 + return block; 60 + } 61 + 62 + case "list": { 63 + const listItems: BlogPcktBlockListItem.Main[] = node.children.map((item) => ({ 64 + $type: "blog.pckt.block.listItem", 65 + content: [{ 66 + $type: "blog.pckt.block.text", 67 + plaintext: extractText(item), 68 + }], 69 + })); 70 + 71 + if (node.ordered) { 72 + const block: BlogPcktBlockOrderedList.Main = { 73 + $type: "blog.pckt.block.orderedList", 74 + content: listItems, 75 + }; 76 + return block; 77 + } else { 78 + const block: BlogPcktBlockBulletList.Main = { 79 + $type: "blog.pckt.block.bulletList", 80 + content: listItems, 81 + }; 82 + return block; 83 + } 84 + } 85 + 86 + case "code": { 87 + const block: BlogPcktBlockCodeBlock.Main = { 88 + $type: "blog.pckt.block.codeBlock", 89 + plaintext: node.value, 90 + language: node.lang || undefined, 91 + }; 92 + return block; 93 + } 94 + 95 + case "thematicBreak": { 96 + const block: BlogPcktBlockHorizontalRule.Main = { 97 + $type: "blog.pckt.block.horizontalRule", 98 + }; 99 + return block; 100 + } 101 + 102 + case "blockquote": { 103 + const block: BlogPcktBlockBlockquote.Main = { 104 + $type: "blog.pckt.block.blockquote", 105 + content: [{ 106 + $type: "blog.pckt.block.text", 107 + plaintext: extractText(node), 108 + }], 109 + }; 110 + return block; 111 + } 112 + 113 + default: 114 + return null; 115 + } 116 + } 117 + 118 + /** 119 + * Convert pckt content to markdown string 120 + */ 121 + export function pcktContentToMarkdown(content: BlogPcktContent.Main): string { 122 + const mdastNodes: RootContent[] = []; 123 + 124 + for (const block of content.items) { 125 + const node = pcktBlockToMdast(block); 126 + if (node) { 127 + mdastNodes.push(node); 128 + } 129 + } 130 + 131 + const root: Root = { 132 + type: "root", 133 + children: mdastNodes, 134 + }; 135 + 136 + return unified().use(remarkStringify).stringify(root); 137 + } 138 + 139 + function pcktBlockToMdast(block: PcktBlock): RootContent | null { 140 + switch (block.$type) { 141 + case "blog.pckt.block.heading": 142 + return { 143 + type: "heading", 144 + depth: block.level as 1 | 2 | 3 | 4 | 5 | 6, 145 + children: [{ type: "text", value: cleanPlaintext(block.plaintext) }], 146 + }; 147 + 148 + case "blog.pckt.block.text": 149 + return { 150 + type: "paragraph", 151 + children: [{ type: "text", value: cleanPlaintext(block.plaintext) }], 152 + }; 153 + 154 + case "blog.pckt.block.bulletList": 155 + return { 156 + type: "list", 157 + ordered: false, 158 + spread: false, 159 + children: block.content.map((item: BlogPcktBlockListItem.Main) => { 160 + const text = item.content 161 + .map((c) => ('plaintext' in c ? cleanPlaintext(c.plaintext) : '')) 162 + .join(" "); 163 + return { 164 + type: "listItem", 165 + spread: false, 166 + children: [{ 167 + type: "paragraph", 168 + children: [{ type: "text", value: text }], 169 + }], 170 + }; 171 + }), 172 + }; 173 + 174 + case "blog.pckt.block.orderedList": 175 + return { 176 + type: "list", 177 + ordered: true, 178 + spread: false, 179 + children: block.content.map((item: BlogPcktBlockListItem.Main) => { 180 + const text = item.content 181 + .map((c) => ('plaintext' in c ? cleanPlaintext(c.plaintext) : '')) 182 + .join(" "); 183 + return { 184 + type: "listItem", 185 + spread: false, 186 + children: [{ 187 + type: "paragraph", 188 + children: [{ type: "text", value: text }], 189 + }], 190 + }; 191 + }), 192 + }; 193 + 194 + case "blog.pckt.block.codeBlock": 195 + return { 196 + type: "code", 197 + lang: block.language || null, 198 + meta: null, 199 + value: block.plaintext, 200 + }; 201 + 202 + case "blog.pckt.block.horizontalRule": 203 + return { 204 + type: "thematicBreak", 205 + }; 206 + 207 + case "blog.pckt.block.blockquote": { 208 + const text = block.content 209 + .map((c: BlogPcktBlockText.Main) => cleanPlaintext(c.plaintext)) 210 + .join("\n"); 211 + return { 212 + type: "blockquote", 213 + children: [{ 214 + type: "paragraph", 215 + children: [{ type: "text", value: text }], 216 + }], 217 + }; 218 + } 219 + 220 + default: 221 + return null; 222 + } 223 + }
+214
src/lib/standardsite/index.ts
··· 1 + import { ok, type Client } from "@atcute/client"; 2 + import type { ActorIdentifier, GenericUri, Nsid, ResourceUri } from "@atcute/lexicons"; 3 + import { parse, parseResourceUri } from "@atcute/lexicons"; 4 + import { ComAtprotoRepoCreateRecord, ComAtprotoRepoGetRecord, ComAtprotoRepoListRecords, ComAtprotoRepoPutRecord } from "@atcute/atproto"; 5 + import { Main as Document } from "@atcute/standard-site/types/document"; 6 + import { Main as Publication } from "@atcute/standard-site/types/publication"; 7 + import { Main as Subscription } from "@atcute/standard-site/types/graph/subscription"; 8 + 9 + import { ATRecord } from "lib"; 10 + import { SiteStandardDocument, SiteStandardGraphSubscription, SiteStandardPublication } from "@atcute/standard-site"; 11 + 12 + export function buildDocumentUrl(pubUrl: string, docUri: string, record: SiteStandardDocument.Main): string { 13 + const baseUrl = pubUrl.replace(/\/$/, ''); 14 + 15 + // leaflet does not use path, url just uses rkey 16 + if (record.path === undefined || record.path === '') { 17 + const parsed = parseResourceUri(docUri) 18 + if (parsed.ok) { 19 + return `${baseUrl}/${parsed.value.rkey}`; 20 + } 21 + return "" 22 + } 23 + 24 + return `${baseUrl}/${record.path}` 25 + } 26 + 27 + 28 + export async function getPublicationDocuments(client: Client, repo: string, pubUri: ResourceUri) { 29 + const response = await ok(client.call(ComAtprotoRepoListRecords, { 30 + params: { 31 + repo: repo as ActorIdentifier, 32 + collection: "site.standard.document" as Nsid, 33 + limit: 100, 34 + }, 35 + })); 36 + 37 + const pubDocs = response.records.filter(record => { 38 + const parsed = parse(SiteStandardDocument.mainSchema, record.value); 39 + return parsed.site === pubUri; 40 + }); 41 + 42 + return { 43 + ...response, 44 + records: pubDocs.map(record => ({ 45 + ...record, 46 + value: parse(SiteStandardDocument.mainSchema, record.value), 47 + })) as ATRecord<Document>[], 48 + }; 49 + }; 50 + 51 + export async function createDocument( 52 + client: Client, 53 + repo: string, 54 + record: Document 55 + ) { 56 + const now = new Date().toISOString(); 57 + if (!record.publishedAt) { 58 + record.publishedAt = now; 59 + } 60 + record.updatedAt = now; 61 + 62 + return await client.call(ComAtprotoRepoCreateRecord, { 63 + input: { 64 + repo: repo as ActorIdentifier, 65 + collection: "site.standard.document" as Nsid, 66 + validate: false, 67 + record, 68 + }, 69 + }); 70 + } 71 + 72 + export async function putDocument( 73 + client: Client, 74 + repo: string, 75 + uri: ResourceUri, 76 + record: Document, 77 + ) { 78 + const now = new Date().toISOString(); 79 + record.updatedAt = now; 80 + 81 + if (!record.publishedAt) { 82 + record.publishedAt = now; 83 + } 84 + 85 + const parsed = parseResourceUri(uri); 86 + if (!parsed.ok) { 87 + throw new Error(`Invalid URI: ${uri}`); 88 + } 89 + if (!parsed.value.rkey) { 90 + throw new Error(`URI does not contain rkey: ${uri}`); 91 + } 92 + 93 + return await client.call(ComAtprotoRepoPutRecord, { 94 + input: { 95 + repo: repo as ActorIdentifier, 96 + collection: "site.standard.document" as Nsid, 97 + validate: false, 98 + record, 99 + rkey: parsed.value.rkey, 100 + }, 101 + }); 102 + } 103 + 104 + export async function getPublications(client: Client, repo: string) { 105 + const response = await ok(client.call(ComAtprotoRepoListRecords, { 106 + params: { 107 + repo: repo as ActorIdentifier, 108 + collection: "site.standard.publication" as Nsid, 109 + limit: 100, 110 + }, 111 + })); 112 + const records: ATRecord<Publication>[] = response.records.map(record => ({ 113 + ...record, 114 + value: parse(SiteStandardPublication.mainSchema, record.value), 115 + })); 116 + 117 + return { 118 + ...response, 119 + records, 120 + } 121 + } 122 + 123 + 124 + export async function getPublication(client: Client, uri: ResourceUri): Promise<ATRecord<Publication>> { 125 + const parsed = parseResourceUri(uri); 126 + if (!parsed.ok) { 127 + throw new Error(`Invalid URI: ${uri}`); 128 + } 129 + const resp = await ok(client.call(ComAtprotoRepoGetRecord, { 130 + params: { 131 + repo: parsed.value.repo, 132 + collection: parsed.value.collection as Nsid, 133 + rkey: parsed.value.rkey!, 134 + }, 135 + })); 136 + 137 + return { 138 + uri: resp.uri, 139 + cid: resp.cid!, 140 + value: parse(SiteStandardPublication.mainSchema, resp.value) 141 + }; 142 + } 143 + 144 + 145 + export async function createPublication( 146 + client: Client, 147 + repo: string, 148 + name: string, 149 + url: GenericUri, 150 + options?: { 151 + description?: string; 152 + icon?: Blob; 153 + showInDiscover?: boolean; 154 + } 155 + ) { 156 + const record: Publication = { 157 + $type: "site.standard.publication", 158 + name, 159 + url, 160 + description: options?.description, 161 + // icon: options?.icon, 162 + preferences: options?.showInDiscover !== undefined 163 + ? { 164 + $type: "site.standard.publication#preferences", 165 + showInDiscover: options.showInDiscover, 166 + } 167 + : undefined, 168 + }; 169 + 170 + return await client.post("com.atproto.repo.createRecord", { 171 + input: { 172 + repo: repo as ActorIdentifier, 173 + collection: "site.standard.publication" as Nsid, 174 + validate: false, 175 + record, 176 + }, 177 + }); 178 + } 179 + 180 + export async function getSubscriptions(client: Client, repo: string) { 181 + const response = await ok(client.call(ComAtprotoRepoListRecords, { 182 + params: { 183 + repo: repo as ActorIdentifier, 184 + collection: "site.standard.graph.subscription" as Nsid, 185 + limit: 100, 186 + }, 187 + })); 188 + const records: ATRecord<Subscription>[] = response.records.map(record => ({ 189 + ...record, 190 + value: parse(SiteStandardGraphSubscription.mainSchema, record.value), 191 + })); 192 + 193 + return { 194 + ...response, 195 + records, 196 + } 197 + } 198 + 199 + export async function getSubscribedPublications(client: Client, repo: string): Promise<ATRecord<Publication>[]> { 200 + const subsResp = await getSubscriptions(client, repo); 201 + const pubUris = subsResp.records.map(sub => sub.value.publication); 202 + 203 + let pubs: ATRecord<Publication>[] = []; 204 + for (const uri of pubUris) { 205 + try { 206 + const pubResp = await getPublication(client, uri); 207 + pubs.push(pubResp); 208 + } catch (e) { 209 + console.warn(`Failed to fetch publication at ${uri}:`, e); 210 + } 211 + } 212 + return pubs; 213 + } 214 +
+25 -3
src/lib.ts
··· 1 + import { Record } from "@atcute/atproto/types/repo/listRecords"; 2 + 1 3 export { getRecord, deleteRecord, putRecord, getProfile } from "./lib/atproto"; 2 4 3 5 export { ··· 8 10 createSembleUrlCard as createUrlCard, 9 11 getSembleCollectionLinks as getCollectionLinks, 10 12 createSembleCollectionLink as createCollectionLink, 11 - } from "./lib/cosmik"; 13 + } from "./lib/bookmarks/cosmik"; 12 14 13 - export { getBookmarks, createBookmark, getTags, createTag } from "./lib/bookmarks"; 15 + export { getBookmarks, createBookmark, getTags, createTag } from "./lib/bookmarks/community"; 14 16 15 17 export { 16 18 getMarginBookmarks, ··· 18 20 getMarginCollections, 19 21 getMarginCollectionItems, 20 22 createMarginCollection, 21 - } from "./lib/margin"; 23 + createMarginCollectionItem, 24 + } from "./lib/bookmarks/margin"; 25 + 26 + export { 27 + getPublicationDocuments, 28 + createDocument, 29 + putDocument, 30 + getPublication, 31 + getPublications, 32 + getSubscribedPublications, 33 + createPublication, 34 + buildDocumentUrl 35 + } from "./lib/standardsite"; 36 + 37 + export { 38 + stripMarkdown, 39 + markdownToLeafletContent, 40 + markdownToPcktContent, 41 + } from "./lib/markdown"; 42 + 43 + export type ATRecord<T> = Record & { value: T };
+49 -54
src/main.ts
··· 1 - import { Notice, Plugin, WorkspaceLeaf } from "obsidian"; 2 - import type { Client } from "@atcute/client"; 1 + import { Plugin, WorkspaceLeaf } from "obsidian"; 3 2 import { DEFAULT_SETTINGS, AtProtoSettings, SettingTab } from "./settings"; 4 - import { createAuthenticatedClient, createPublicClient } from "./auth"; 5 - import { getProfile } from "./lib"; 6 - import { ATmarkView, VIEW_TYPE_ATMARK } from "views/atmark"; 7 - import type { ProfileData } from "components/profileIcon"; 3 + import { ATmarkView, VIEW_TYPE_ATMARK } from "./views/atmark"; 4 + import { publishFileAsDocument } from "./commands/publishDocument"; 5 + import { StandardFeedView, VIEW_STANDARD_FEED } from "views/standardfeed"; 6 + import { ATClient } from "lib/client"; 7 + import { Clipper } from "lib/clipper"; 8 8 9 9 export default class ATmarkPlugin extends Plugin { 10 10 settings: AtProtoSettings = DEFAULT_SETTINGS; 11 - client: Client | null = null; 12 - profile: ProfileData | null = null; 11 + client: ATClient; 12 + clipper: Clipper; 13 13 14 14 async onload() { 15 15 await this.loadSettings(); 16 - await this.initClient(); 16 + 17 + const creds = { 18 + identifier: this.settings.identifier, 19 + password: this.settings.appPassword, 20 + }; 21 + this.client = new ATClient(creds); 22 + this.clipper = new Clipper(this); 17 23 18 24 this.registerView(VIEW_TYPE_ATMARK, (leaf) => { 19 25 return new ATmarkView(leaf, this); 20 26 }); 21 27 28 + this.registerView(VIEW_STANDARD_FEED, (leaf) => { 29 + return new StandardFeedView(leaf, this); 30 + }); 31 + 32 + // included name of the plugin, which contains the acronym "AT" 22 33 // eslint-disable-next-line obsidianmd/ui/sentence-case 23 - this.addRibbonIcon("layers", "Open ATmark", () => { 34 + this.addRibbonIcon("layers", "ATmark bookmarks", () => { 24 35 void this.activateView(VIEW_TYPE_ATMARK); 25 36 }); 26 37 38 + // included name of the plugin, which contains the acronym "AT" 39 + // eslint-disable-next-line obsidianmd/ui/sentence-case 40 + this.addRibbonIcon("rss", "ATmark feed", () => { 41 + void this.activateView(VIEW_STANDARD_FEED); 42 + }); 43 + 27 44 this.addCommand({ 28 45 id: "view", 29 46 name: "Open view", 30 47 callback: () => { void this.activateView(VIEW_TYPE_ATMARK); }, 31 48 }); 32 49 33 - this.addSettingTab(new SettingTab(this.app, this)); 34 - } 50 + // this.addCommand({ 51 + // id: "standard-site-view", 52 + // name: "View publications", 53 + // callback: () => { void this.activateView(VIEW_TYPE_STANDARD_SITE); }, 54 + // }); 55 + 56 + this.addCommand({ 57 + id: "standard-site-publich-document", 58 + name: "Publish document", 59 + editorCheckCallback: (checking: boolean,) => { 60 + const file = this.app.workspace.getActiveFile(); 61 + 62 + if (file) { 63 + if (!checking) { 64 + void publishFileAsDocument(this) 65 + } 35 66 67 + return true 68 + } 36 69 37 - private async initClient() { 38 - const { identifier, appPassword } = this.settings; 39 - if (identifier && appPassword) { 40 - try { 41 - this.client = await createAuthenticatedClient({ identifier, password: appPassword }); 42 - await this.fetchProfile(); 43 - new Notice("Connected"); 44 - } catch (err) { 45 - const message = err instanceof Error ? err.message : String(err); 46 - new Notice(`Auth failed: ${message}`); 47 - this.client = createPublicClient(); 48 - this.profile = null; 49 - } 50 - } else { 51 - this.client = createPublicClient(); 52 - this.profile = null; 53 - } 54 - } 70 + return false; 71 + }, 72 + }); 55 73 56 - private async fetchProfile() { 57 - if (!this.client || !this.settings.identifier) { 58 - this.profile = null; 59 - return; 60 - } 61 - try { 62 - const resp = await getProfile(this.client, this.settings.identifier); 63 - if (resp.ok) { 64 - this.profile = { 65 - did: resp.data.did, 66 - handle: resp.data.handle, 67 - displayName: resp.data.displayName, 68 - avatar: resp.data.avatar, 69 - }; 70 - } else { 71 - this.profile = null; 72 - } 73 - } catch (e) { 74 - console.error("Failed to fetch profile:", e); 75 - this.profile = null; 76 - } 74 + this.addSettingTab(new SettingTab(this.app, this)); 77 75 } 78 76 79 - async refreshClient() { 80 - await this.initClient(); 81 - } 82 77 83 78 84 79 async activateView(v: string) {
+17 -9
src/settings.ts
··· 4 4 export interface AtProtoSettings { 5 5 identifier: string; 6 6 appPassword: string; 7 + clipDir: string; 7 8 } 8 9 9 10 export const DEFAULT_SETTINGS: AtProtoSettings = { 10 11 identifier: "", 11 12 appPassword: "", 13 + clipDir: "AtmosphereClips", 12 14 }; 13 15 14 16 export class SettingTab extends PluginSettingTab { ··· 24 26 containerEl.empty(); 25 27 26 28 new Setting(containerEl) 27 - // eslint-disable-next-line obsidianmd/ui/sentence-case 28 - .setName("Handle or DID") 29 - .setDesc("Your handle or did (e.g., user.bsky.social)") 29 + .setName("Handle") 30 + .setDesc("Your bluesky handle or identifier (e.g., user.bsky.social)") 31 + // .setDesc("user.bsky.social") 30 32 .addText((text) => 31 33 text 32 - // eslint-disable-next-line obsidianmd/ui/sentence-case 33 - .setPlaceholder("user.bsky.social") 34 34 .setValue(this.plugin.settings.identifier) 35 35 .onChange(async (value) => { 36 36 this.plugin.settings.identifier = value; ··· 40 40 41 41 new Setting(containerEl) 42 42 .setName("App password") 43 - // eslint-disable-next-line obsidianmd/ui/sentence-case 44 - .setDesc("Create one at Settings โ†’ Privacy and security โ†’ App passwords") 43 + .setDesc("Create one at https://bsky.app/settings/app-passwords") 45 44 .addText((text) => { 46 45 text.inputEl.type = "password"; 47 46 text 48 - // eslint-disable-next-line obsidianmd/ui/sentence-case 49 - .setPlaceholder("xxxx-xxxx-xxxx-xxxx") 50 47 .setValue(this.plugin.settings.appPassword) 51 48 .onChange(async (value) => { 52 49 this.plugin.settings.appPassword = value; 53 50 await this.plugin.saveSettings(); 54 51 }); 55 52 }); 53 + new Setting(containerEl) 54 + .setName("Clip directory") 55 + .setDesc("Directory in your vault to save clips (will be created if it doesn't exist)") 56 + .addText((text) => 57 + text 58 + .setValue(this.plugin.settings.clipDir) 59 + .onChange(async (value) => { 60 + this.plugin.settings.clipDir = value; 61 + await this.plugin.saveSettings(); 62 + }) 63 + ); 56 64 } 57 65 }
-6
src/sources/bookmark.ts
··· 52 52 const bookmark = this.record.value; 53 53 const enriched = bookmark.enriched; 54 54 55 - // Display tags 56 55 if (bookmark.tags && bookmark.tags.length > 0) { 57 56 const tagsContainer = el.createEl("div", { cls: "atmark-item-tags" }); 58 57 for (const tag of bookmark.tags) { ··· 129 128 }); 130 129 link.setAttr("target", "_blank"); 131 130 132 - // Tags section 133 131 if (bookmark.tags && bookmark.tags.length > 0) { 134 132 const tagsSection = container.createEl("div", { cls: "atmark-item-tags-section" }); 135 133 tagsSection.createEl("h3", { text: "Tags", cls: "atmark-detail-section-title" }); ··· 165 163 166 164 let bookmarks = bookmarksResp.data.records as BookmarkRecord[]; 167 165 168 - // Apply tag filter if specified 169 166 const tagFilter = filters.find(f => f.type === "bookmarkTag"); 170 167 if (tagFilter && tagFilter.value) { 171 168 bookmarks = bookmarks.filter((record: BookmarkRecord) => ··· 180 177 const bookmarksResp = await getBookmarks(this.client, this.repo); 181 178 if (!bookmarksResp.ok) return []; 182 179 183 - // Extract unique tags 184 180 const tagSet = new Set<string>(); 185 181 const records = bookmarksResp.data.records as BookmarkRecord[]; 186 182 for (const record of records) { ··· 212 208 213 209 const chips = section.createEl("div", { cls: "atmark-filter-chips" }); 214 210 215 - // All chip 216 211 const allChip = chips.createEl("button", { 217 212 text: "All", 218 213 cls: `atmark-chip ${!activeFilters.has("bookmarkTag") ? "atmark-chip-active" : ""}`, ··· 222 217 onChange(); 223 218 }); 224 219 225 - // Get tags and render chips 226 220 void this.getAvailableFilters().then(tags => { 227 221 for (const tag of tags) { 228 222 const chip = chips.createEl("button", {
-13
src/sources/margin.ts
··· 57 57 const el = container.createEl("div", { cls: "atmark-item-content" }); 58 58 const bookmark = this.record.value; 59 59 60 - // Display collections 61 60 if (this.collections.length > 0) { 62 61 const collectionsContainer = el.createEl("div", { cls: "atmark-item-collections" }); 63 62 for (const collection of this.collections) { ··· 65 64 } 66 65 } 67 66 68 - // Display tags 69 67 if (bookmark.tags && bookmark.tags.length > 0) { 70 68 const tagsContainer = el.createEl("div", { cls: "atmark-item-tags" }); 71 69 for (const tag of bookmark.tags) { ··· 112 110 }); 113 111 link.setAttr("target", "_blank"); 114 112 115 - // Collections section 116 113 if (this.collections.length > 0) { 117 114 const collectionsSection = container.createEl("div", { cls: "atmark-item-collections-section" }); 118 115 collectionsSection.createEl("h3", { text: "Collections", cls: "atmark-detail-section-title" }); ··· 122 119 } 123 120 } 124 121 125 - // Tags section 126 122 if (bookmark.tags && bookmark.tags.length > 0) { 127 123 const tagsSection = container.createEl("div", { cls: "atmark-item-tags-section" }); 128 124 tagsSection.createEl("h3", { text: "Tags", cls: "atmark-detail-section-title" }); ··· 184 180 } 185 181 } 186 182 187 - // Apply collection filter if specified 188 183 const collectionFilter = filters.find(f => f.type === "marginCollection"); 189 184 if (collectionFilter && collectionFilter.value) { 190 185 if (itemsResp.ok) { ··· 197 192 } 198 193 } 199 194 200 - // Apply tag filter if specified 201 195 const tagFilter = filters.find(f => f.type === "marginTag"); 202 196 if (tagFilter && tagFilter.value) { 203 197 bookmarks = bookmarks.filter((record: MarginBookmarkRecord) => ··· 213 207 async getAvailableFilters(): Promise<SourceFilter[]> { 214 208 const filters: SourceFilter[] = []; 215 209 216 - // Get collections 217 210 const collectionsResp = await getMarginCollections(this.client, this.repo); 218 211 if (collectionsResp.ok) { 219 212 const collections = collectionsResp.data.records as MarginCollectionRecord[]; ··· 224 217 }))); 225 218 } 226 219 227 - // Get tags 228 220 const bookmarksResp = await getMarginBookmarks(this.client, this.repo); 229 221 if (bookmarksResp.ok) { 230 222 const tagSet = new Set<string>(); ··· 247 239 } 248 240 249 241 renderFilterUI(container: HTMLElement, activeFilters: Map<string, SourceFilter>, onChange: () => void, plugin: ATmarkPlugin): void { 250 - // Collections section 251 242 const collectionsSection = container.createEl("div", { cls: "atmark-filter-section" }); 252 243 253 244 const collectionsTitleRow = collectionsSection.createEl("div", { cls: "atmark-filter-title-row" }); ··· 261 252 262 253 const collectionsChips = collectionsSection.createEl("div", { cls: "atmark-filter-chips" }); 263 254 264 - // All collections chip 265 255 const allCollectionsChip = collectionsChips.createEl("button", { 266 256 text: "All", 267 257 cls: `atmark-chip ${!activeFilters.has("marginCollection") ? "atmark-chip-active" : ""}`, ··· 271 261 onChange(); 272 262 }); 273 263 274 - // Tags section 275 264 const tagsSection = container.createEl("div", { cls: "atmark-filter-section" }); 276 265 277 266 const tagsTitleRow = tagsSection.createEl("div", { cls: "atmark-filter-title-row" }); ··· 279 268 280 269 const tagsChips = tagsSection.createEl("div", { cls: "atmark-filter-chips" }); 281 270 282 - // All tags chip 283 271 const allTagsChip = tagsChips.createEl("button", { 284 272 text: "All", 285 273 cls: `atmark-chip ${!activeFilters.has("marginTag") ? "atmark-chip-active" : ""}`, ··· 289 277 onChange(); 290 278 }); 291 279 292 - // Get filters and render chips 293 280 void this.getAvailableFilters().then(filters => { 294 281 for (const filter of filters) { 295 282 if (filter.type === "marginCollection") {
+2 -6
src/sources/semble.ts
··· 60 60 61 61 if (card.type === "NOTE") { 62 62 const content = card.content as NoteContent; 63 - el.createEl("p", { text: content.text, cls: "semble-card-text" }); 63 + el.createEl("p", { text: content.text, cls: "atmark-semble-card-text" }); 64 64 } else if (card.type === "URL") { 65 65 const content = card.content as UrlContent; 66 66 const meta = content.metadata; ··· 101 101 102 102 if (card.type === "NOTE") { 103 103 const content = card.content as NoteContent; 104 - body.createEl("p", { text: content.text, cls: "semble-detail-text" }); 104 + body.createEl("p", { text: content.text, cls: "atmark-semble-detail-text" }); 105 105 } else if (card.type === "URL") { 106 106 const content = card.content as UrlContent; 107 107 const meta = content.metadata; ··· 163 163 164 164 const allSembleCards = cardsResp.data.records as CardRecord[]; 165 165 166 - // Build notes map 167 166 const notesMap = new Map<string, Array<{ uri: string; text: string }>>(); 168 167 for (const record of allSembleCards) { 169 168 if (record.value.type === "NOTE") { ··· 186 185 return true; 187 186 }); 188 187 189 - // Apply collection filter if specified 190 188 const collectionFilter = filters.find(f => f.type === "sembleCollection"); 191 189 if (collectionFilter && collectionFilter.value) { 192 190 const linksResp = await getCollectionLinks(this.client, this.repo); ··· 200 198 } 201 199 } 202 200 203 - // Create SembleItem objects 204 201 return sembleCards.map((record: CardRecord) => 205 202 new SembleItem(record, notesMap.get(record.uri) || [], plugin) 206 203 ); ··· 232 229 233 230 const chips = section.createEl("div", { cls: "atmark-filter-chips" }); 234 231 235 - // All chip 236 232 const allChip = chips.createEl("button", { 237 233 text: "All", 238 234 cls: `atmark-chip ${!activeFilters.has("sembleCollection") ? "atmark-chip-active" : ""}`,
+10 -23
src/views/atmark.ts
··· 1 - /* eslint-disable @typescript-eslint/no-explicit-any */ 2 - /* eslint-disable @typescript-eslint/no-unsafe-member-access */ 3 - /* eslint-disable @typescript-eslint/no-unsafe-return */ 4 - /* eslint-disable @typescript-eslint/no-unsafe-call */ 5 1 import { ItemView, WorkspaceLeaf, setIcon } from "obsidian"; 6 2 import type ATmarkPlugin from "../main"; 7 - import { renderProfileIcon } from "../components/profileIcon"; 8 3 import { CardDetailModal } from "../components/cardDetailModal"; 9 - import type { ATmarkItem } from "../sources/types"; 4 + import type { ATmarkItem, DataSource, SourceFilter } from "../sources/types"; 10 5 import { SembleSource } from "../sources/semble"; 11 6 import { BookmarkSource } from "../sources/bookmark"; 12 7 import { MarginSource } from "../sources/margin"; ··· 18 13 export class ATmarkView extends ItemView { 19 14 plugin: ATmarkPlugin; 20 15 activeSource: SourceType = "semble"; 21 - sources: Map<SourceType, { source: any; filters: Map<string, any> }> = new Map(); 16 + sources: Map<SourceType, { source: DataSource; filters: Map<string, SourceFilter> }> = new Map(); 22 17 23 18 constructor(leaf: WorkspaceLeaf, plugin: ATmarkPlugin) { 24 19 super(leaf); 25 20 this.plugin = plugin; 21 + } 26 22 27 - // Initialize sources 28 - if (this.plugin.client) { 23 + initSources() { 24 + if (this.plugin.settings.identifier) { 29 25 const repo = this.plugin.settings.identifier; 30 26 this.sources.set("semble", { 31 27 source: new SembleSource(this.plugin.client, repo), ··· 40 36 filters: new Map() 41 37 }); 42 38 } 39 + 43 40 } 44 41 45 42 getViewType() { ··· 47 44 } 48 45 49 46 getDisplayText() { 47 + // This is the name of the plugin, which contains the acronym "AT" 50 48 // eslint-disable-next-line obsidianmd/ui/sentence-case 51 49 return "ATmark"; 52 50 } ··· 56 54 } 57 55 58 56 async onOpen() { 57 + this.initSources(); 59 58 await this.render(); 60 59 } 61 60 ··· 74 73 container.empty(); 75 74 container.addClass("atmark-view"); 76 75 77 - if (!this.plugin.client) { 78 - container.createEl("p", { text: "Not connected." }); 79 - return; 80 - } 76 + this.renderHeader(container); 81 77 82 78 const loading = container.createEl("p", { text: "Loading..." }); 83 79 ··· 85 81 const items = await this.fetchItems(); 86 82 loading.remove(); 87 83 88 - this.renderHeader(container); 89 84 90 85 if (items.length === 0) { 91 86 container.createEl("p", { text: "No items found." }); ··· 110 105 111 106 private renderHeader(container: HTMLElement) { 112 107 const header = container.createEl("div", { cls: "atmark-header" }); 113 - const nav = header.createEl("div", { cls: "atmark-nav" }); 114 - 115 - // eslint-disable-next-line obsidianmd/ui/sentence-case 116 - nav.createEl("h1", { text: "ATmark", cls: "atmark-title" }); 117 - 118 - renderProfileIcon(nav, this.plugin.profile); 119 108 120 109 const sourceSelector = header.createEl("div", { cls: "atmark-source-selector" }); 121 - const sources: SourceType[] = ["semble", "bookmark", "margin"]; 110 + const sources: SourceType[] = ["semble", "margin", "bookmark"]; 122 111 123 112 for (const source of sources) { 124 113 const label = sourceSelector.createEl("label", { cls: "atmark-source-option" }); ··· 140 129 }); 141 130 } 142 131 143 - // Let the active source render its filters 144 132 const filtersContainer = container.createEl("div", { cls: "atmark-filters" }); 145 133 const sourceData = this.sources.get(this.activeSource); 146 134 if (sourceData) { ··· 173 161 cls: `atmark-badge atmark-badge-${source}`, 174 162 }); 175 163 176 - // Add edit button if item supports it 177 164 if (item.canEdit()) { 178 165 const editBtn = header.createEl("button", { 179 166 cls: "atmark-item-edit-btn",
+236
src/views/standardfeed.ts
··· 1 + import { getSubscribedPublications } from "lib/standardsite"; 2 + import ATmarkPlugin from "main"; 3 + import { ItemView, Notice, WorkspaceLeaf, setIcon } from "obsidian"; 4 + import { Main as Document } from "@atcute/standard-site/types/document"; 5 + import { Main as Publication } from "@atcute/standard-site/types/publication"; 6 + import { ATRecord } from "lib"; 7 + import { parseResourceUri } from "@atcute/lexicons"; 8 + import { getPublicationDocuments } from "lib/standardsite"; 9 + 10 + export const VIEW_STANDARD_FEED = "standard-site-feed"; 11 + 12 + export class StandardFeedView extends ItemView { 13 + plugin: ATmarkPlugin; 14 + 15 + constructor(leaf: WorkspaceLeaf, plugin: ATmarkPlugin) { 16 + super(leaf); 17 + this.plugin = plugin; 18 + } 19 + 20 + getViewType() { 21 + return VIEW_STANDARD_FEED; 22 + } 23 + 24 + getDisplayText() { 25 + return "Feed"; 26 + } 27 + 28 + getIcon() { 29 + return "rss"; 30 + } 31 + 32 + async onOpen() { 33 + await this.render(); 34 + } 35 + 36 + async render() { 37 + const container = this.contentEl; 38 + container.empty(); 39 + container.addClass("standard-site-view"); 40 + this.renderHeader(container); 41 + 42 + 43 + const loading = container.createEl("p", { text: "Loading feed..." }); 44 + try { 45 + const pubs = await getSubscribedPublications(this.plugin.client, this.plugin.settings.identifier); 46 + loading.remove(); 47 + 48 + if (pubs.length === 0) { 49 + container.createEl("p", { text: "No subscriptions found" }); 50 + return; 51 + } 52 + 53 + const list = container.createEl("div", { cls: "standard-site-list" }); 54 + 55 + for (const pub of pubs) { 56 + void this.renderPublicationCard(list, pub); 57 + } 58 + } catch (error) { 59 + const message = error instanceof Error ? error.message : String(error); 60 + console.error("Failed to load feed:", error); 61 + container.createEl("p", { text: `Failed to load feed: ${message}`, cls: "standard-site-error" }); 62 + } finally { 63 + loading.remove(); 64 + } 65 + } 66 + 67 + private async renderPublicationCard(container: HTMLElement, pub: ATRecord<Publication>) { 68 + const card = container.createEl("div", { cls: "standard-site-publication" }); 69 + 70 + const header = card.createEl("div", { cls: "standard-site-publication-header" }); 71 + header.createEl("h3", { 72 + text: pub.value.name, 73 + cls: "standard-site-publication-name" 74 + }); 75 + const extLink = header.createEl("span", { cls: "clickable standard-site-publication-external" }); 76 + setIcon(extLink, "external-link"); 77 + extLink.addEventListener("click", (e) => { 78 + e.stopPropagation(); 79 + window.open(pub.value.url, "_blank"); 80 + }); 81 + 82 + const body = card.createEl("div", { cls: "standard-site-publication-body" }); 83 + 84 + const handleEl = body.createEl("span", { cls: "standard-site-author-handle", text: "..." }); 85 + const parsed = parseResourceUri(pub.uri); 86 + if (parsed.ok) { 87 + this.plugin.client.getActor(parsed.value.repo).then(actor => { 88 + if (actor?.handle) { 89 + handleEl.setText(`@${actor.handle}`); 90 + } else { 91 + handleEl.setText(""); 92 + } 93 + }).catch(() => { 94 + handleEl.setText(""); 95 + }); 96 + } 97 + 98 + const urlLine = body.createEl("div", { cls: "standard-site-publication-url" }); 99 + const link = urlLine.createEl("a", { text: pub.value.url, href: pub.value.url }); 100 + link.setAttr("target", "_blank"); 101 + 102 + if (pub.value.description) { 103 + body.createEl("p", { 104 + text: pub.value.description, 105 + cls: "standard-site-publication-description" 106 + }); 107 + } 108 + 109 + card.addClass("clickable"); 110 + card.addEventListener("click", (e) => { 111 + if ((e.target as HTMLElement).tagName !== "A") { 112 + void this.renderPublicationDocuments(pub); 113 + } 114 + }); 115 + } 116 + 117 + private async renderPublicationDocuments(pub: ATRecord<Publication>) { 118 + const container = this.contentEl; 119 + container.empty(); 120 + container.addClass("standard-site-view"); 121 + 122 + const header = container.createEl("div", { cls: "standard-site-header" }); 123 + const backBtn = header.createEl("span", { text: "Back", cls: "clickable standard-site-back" }); 124 + setIcon(backBtn, "arrow-left"); 125 + backBtn.addEventListener("click", () => { 126 + void this.render(); 127 + }); 128 + 129 + const titleGroup = header.createEl("div", { cls: "standard-site-title-group" }); 130 + titleGroup.createEl("h2", { text: pub.value.name }); 131 + const handleEl = titleGroup.createEl("span", { cls: "standard-site-author-handle", text: "..." }); 132 + 133 + const parsed = parseResourceUri(pub.uri); 134 + if (!parsed.ok) { 135 + // This is the name of the plugin, which contains the acronym "AT" 136 + // eslint-disable-next-line obsidianmd/ui/sentence-case 137 + container.createEl("p", { text: "Failed to parse publication URI." }); 138 + console.error("Failed to parse publication URI:", parsed.error); 139 + 140 + return; 141 + } 142 + 143 + // Fetch actor handle asynchronously without blocking document load 144 + this.plugin.client.getActor(parsed.value.repo).then(actor => { 145 + if (actor?.handle) { 146 + handleEl.setText(`@${actor.handle}`); 147 + } else { 148 + handleEl.setText(""); 149 + } 150 + }).catch(() => { 151 + handleEl.setText(""); 152 + }); 153 + 154 + const loading = container.createEl("p", { text: "Loading documents..." }); 155 + 156 + try { 157 + const docsResp = await getPublicationDocuments(this.plugin.client, parsed.value.repo, pub.uri); 158 + loading.remove(); 159 + 160 + if (docsResp.records.length === 0) { 161 + container.createEl("p", { text: "No documents found for this publication." }); 162 + return; 163 + } 164 + 165 + const list = container.createEl("div", { cls: "standard-site-list" }); 166 + for (const doc of docsResp.records) { 167 + this.renderDocumentCard(list, doc, pub); 168 + } 169 + } catch (error) { 170 + loading.remove(); 171 + const message = error instanceof Error ? error.message : String(error); 172 + container.createEl("p", { text: `Failed to load documents: ${message}`, cls: "standard-site-error" }); 173 + } 174 + } 175 + 176 + 177 + private renderDocumentCard(container: HTMLElement, doc: ATRecord<Document>, pub: ATRecord<Publication>) { 178 + const card = container.createEl("div", { cls: "standard-site-document" }); 179 + 180 + const header = card.createEl("div", { cls: "standard-site-document-header" }); 181 + header.createEl("h3", { text: doc.value.title, cls: "standard-site-document-title" }); 182 + 183 + let clipIcon = "book-open"; 184 + if (this.plugin.clipper.existsInClipDir(doc)) { 185 + clipIcon = "book-open-check"; 186 + } 187 + const clipBtn = header.createEl("span", { cls: "clickable standard-site-document-clip" }); 188 + setIcon(clipBtn, clipIcon); 189 + clipBtn.addEventListener("click", (e) => { 190 + e.stopPropagation(); 191 + try { 192 + void this.plugin.clipper.clipDocument(doc, pub); 193 + } catch (error) { 194 + const message = error instanceof Error ? error.message : String(error); 195 + new Notice(`Failed to clip document: ${message}`); 196 + console.error("Failed to clip document:", error); 197 + } 198 + }) 199 + 200 + 201 + if (doc.value.path) { 202 + const extLink = header.createEl("span", { cls: "clickable standard-site-document-external" }); 203 + setIcon(extLink, "external-link"); 204 + const baseUrl = pub.value.url.replace(/\/+$/, ""); 205 + const path = doc.value.path.startsWith("/") ? doc.value.path : `/${doc.value.path}`; 206 + extLink.addEventListener("click", (e) => { 207 + e.stopPropagation(); 208 + window.open(`${baseUrl}${path}`, "_blank"); 209 + }); 210 + } 211 + 212 + const body = card.createEl("div", { cls: "standard-site-document-body" }); 213 + 214 + if (doc.value.description) { 215 + body.createEl("p", { text: doc.value.description, cls: "standard-site-document-description" }); 216 + } 217 + 218 + if (doc.value.tags && doc.value.tags.length > 0) { 219 + const tags = body.createEl("div", { cls: "standard-site-document-tags" }); 220 + for (const tag of doc.value.tags) { 221 + tags.createEl("span", { text: tag, cls: "standard-site-document-tag" }); 222 + } 223 + } 224 + 225 + if (doc.value.publishedAt) { 226 + const footer = card.createEl("div", { cls: "standard-site-document-footer" }); 227 + const date = new Date(doc.value.publishedAt).toLocaleDateString(); 228 + footer.createEl("span", { text: date, cls: "standard-site-document-date" }); 229 + } 230 + } 231 + 232 + renderHeader(container: HTMLElement) { 233 + const header = container.createEl("div", { cls: "standard-site-header" }); 234 + header.createEl("h2", { text: "Subscriptions" }); 235 + } 236 + }
+512 -395
styles.css
··· 9 9 border-bottom: 1px solid var(--background-modifier-border); 10 10 } 11 11 12 - .atmark-nav { 13 - display: flex; 14 - align-items: center; 15 - justify-content: space-between; 16 - margin-bottom: 12px; 17 - gap: 10px; 18 - } 19 - 20 - .atmark-title { 21 - margin: 0; 22 - font-size: var(--h1-size); 23 - font-weight: var(--font-bold); 24 - color: var(--text-accent); 25 - flex-shrink: 1; 26 - min-width: 0; 27 - } 28 - 29 12 .atmark-source-selector { 30 13 display: flex; 31 14 align-items: center; 32 15 justify-content: center; 33 - gap: 6px; 16 + gap: 0; 34 17 margin-bottom: 12px; 35 - flex-wrap: wrap; 18 + border-bottom: 1px solid var(--background-modifier-border); 19 + position: relative; 36 20 } 37 21 38 22 .atmark-source-option { ··· 40 24 align-items: center; 41 25 justify-content: center; 42 26 gap: 4px; 43 - padding: 4px 12px; 27 + padding: 10px 20px; 44 28 cursor: pointer; 45 29 user-select: none; 46 - border-radius: var(--radius-s); 47 - border: 1px solid var(--background-modifier-border); 48 - background: var(--background-secondary); 30 + border: none; 31 + background: transparent; 49 32 transition: all 0.15s ease; 50 - font-size: var(--font-smaller); 33 + position: relative; 34 + margin-bottom: -1px; 35 + } 36 + 37 + .atmark-source-option::after { 38 + content: ""; 39 + position: absolute; 40 + bottom: 0; 41 + left: 0; 42 + right: 0; 43 + height: 2px; 44 + background: transparent; 45 + transition: background 0.15s ease; 51 46 } 52 47 53 48 .atmark-source-option:hover { 54 49 background: var(--background-modifier-hover); 55 - border-color: var(--background-modifier-border-hover); 56 50 } 57 51 58 - .atmark-source-option:has(input:checked) { 52 + .atmark-source-option:has(input:checked)::after { 59 53 background: var(--interactive-accent); 60 - border-color: var(--interactive-accent); 61 54 } 62 55 63 56 .atmark-source-option:has(input:checked) .atmark-source-text { 64 - color: var(--text-on-accent); 57 + color: var(--interactive-accent); 58 + font-weight: var(--font-semibold); 65 59 } 66 60 67 61 .atmark-source-radio { ··· 69 63 } 70 64 71 65 .atmark-source-text { 72 - font-size: var(--font-smaller); 66 + font-size: var(--font-ui-small); 73 67 font-weight: var(--font-medium); 74 - color: var(--text-normal); 68 + color: var(--text-muted); 75 69 } 76 70 77 71 .atmark-filters { ··· 240 234 } 241 235 242 236 .atmark-badge-semble { 243 - background: rgba(255, 87, 34, 0.15); 244 - color: rgb(255, 120, 70); 245 - border: 1px solid rgba(255, 87, 34, 0.3); 237 + background: color-mix(in srgb, var(--color-orange) 15%, transparent); 238 + color: var(--color-orange); 239 + border: 1px solid color-mix(in srgb, var(--color-orange) 30%, transparent); 246 240 } 247 241 248 242 .atmark-badge-bookmark { 249 - background: rgba(3, 169, 244, 0.15); 250 - color: rgb(3, 169, 244); 251 - border: 1px solid rgba(3, 169, 244, 0.3); 243 + background: color-mix(in srgb, var(--color-cyan) 15%, transparent); 244 + color: var(--color-cyan); 245 + border: 1px solid color-mix(in srgb, var(--color-cyan) 30%, transparent); 252 246 } 253 247 254 248 .atmark-badge-margin { 255 - background: rgba(156, 39, 176, 0.15); 256 - color: rgb(186, 104, 200); 257 - border: 1px solid rgba(156, 39, 176, 0.3); 249 + background: color-mix(in srgb, var(--color-purple) 15%, transparent); 250 + color: var(--color-purple); 251 + border: 1px solid color-mix(in srgb, var(--color-purple) 30%, transparent); 258 252 } 259 253 260 254 .atmark-item-footer { ··· 362 356 font-size: var(--font-smallest); 363 357 padding: 2px 8px; 364 358 border-radius: var(--radius-s); 365 - background: rgba(156, 39, 176, 0.1); 366 - color: rgb(186, 104, 200); 367 - border: 1px solid rgba(156, 39, 176, 0.3); 359 + background: color-mix(in srgb, var(--color-purple) 10%, transparent); 360 + color: var(--color-purple); 361 + border: 1px solid color-mix(in srgb, var(--color-purple) 30%, transparent); 368 362 } 369 363 370 364 .atmark-item-collections-section { ··· 628 622 flex-shrink: 0; 629 623 } 630 624 625 + 626 + .atmark-collection-list { 627 + display: flex; 628 + flex-direction: column; 629 + gap: 8px; 630 + max-height: 200px; 631 + overflow-y: auto; 632 + } 633 + 634 + .atmark-collection-item { 635 + display: flex; 636 + align-items: center; 637 + gap: 12px; 638 + padding: 10px 12px; 639 + background: var(--background-secondary); 640 + border: 1px solid var(--background-modifier-border); 641 + border-radius: var(--radius-m); 642 + cursor: pointer; 643 + transition: all 0.15s ease; 644 + } 645 + 646 + .atmark-collection-item:hover { 647 + background: var(--background-modifier-hover); 648 + border-color: var(--background-modifier-border-hover); 649 + } 650 + 651 + .atmark-collection-checkbox { 652 + width: 18px; 653 + height: 18px; 654 + margin: 0; 655 + cursor: pointer; 656 + accent-color: var(--interactive-accent); 657 + } 658 + 659 + .atmark-collection-item-info { 660 + display: flex; 661 + flex-direction: column; 662 + gap: 2px; 663 + flex: 1; 664 + } 665 + 666 + .atmark-collection-item-name { 667 + font-weight: var(--font-medium); 668 + color: var(--text-normal); 669 + } 670 + 671 + .atmark-collection-item-desc { 672 + font-size: var(--font-small); 673 + color: var(--text-muted); 674 + } 675 + 676 + .atmark-tag-list { 677 + display: flex; 678 + flex-wrap: wrap; 679 + gap: 6px; 680 + margin-bottom: 8px; 681 + } 682 + 683 + .atmark-tag-item { 684 + display: flex; 685 + align-items: center; 686 + padding: 4px 12px; 687 + background: var(--background-modifier-border); 688 + border-radius: var(--radius-m); 689 + cursor: pointer; 690 + transition: all 0.15s ease; 691 + font-size: var(--font-small); 692 + color: var(--text-muted); 693 + } 694 + 695 + .atmark-tag-item:hover { 696 + background: var(--background-modifier-border-hover); 697 + color: var(--text-normal); 698 + } 699 + 700 + .atmark-tag-item:has(input:checked) { 701 + background: var(--interactive-accent); 702 + color: var(--text-on-accent); 703 + } 704 + 705 + .atmark-tag-item input { 706 + display: none; 707 + } 708 + 631 709 /* Semble-specific styles (for NOTE cards and attached notes) */ 632 - .semble-card-note { 710 + .atmark-semble-card-note { 633 711 margin: 0; 634 712 padding: 8px 12px; 635 713 background: var(--background-primary); 636 - border-left: 3px solid var(--color-blue); 714 + border-left: 3px solid var(--color-accent); 637 715 border-radius: var(--radius-s); 638 716 font-size: var(--font-small); 639 717 font-style: italic; ··· 642 720 line-height: var(--line-height-normal); 643 721 } 644 722 645 - .semble-card-text { 723 + .atmark-semble-card-text { 646 724 margin: 0; 647 725 line-height: 1.5; 648 726 color: var(--text-normal); ··· 652 730 overflow: hidden; 653 731 } 654 732 655 - .semble-detail-text { 733 + .atmark-semble-detail-text { 656 734 margin: 0; 657 735 white-space: pre-wrap; 658 736 line-height: var(--line-height-normal); ··· 660 738 font-size: 1.1em; 661 739 } 662 740 663 - .semble-detail-notes-section { 741 + .atmark-semble-detail-notes-section { 664 742 margin-top: 20px; 665 743 padding-top: 20px; 666 744 border-top: 1px solid var(--background-modifier-border); 667 745 } 668 746 669 - .semble-detail-note { 747 + .atmark-semble-detail-note { 670 748 display: flex; 671 749 align-items: flex-start; 672 750 justify-content: space-between; 673 751 gap: 12px; 674 752 padding: 12px 16px; 675 753 background: var(--background-secondary); 676 - border-left: 3px solid var(--color-blue); 754 + border-left: 3px solid var(--color-accent); 677 755 border-radius: var(--radius-s); 678 756 margin-bottom: 8px; 679 757 } 680 758 681 - .semble-detail-note-content { 759 + .atmark-semble-detail-note-content { 682 760 display: flex; 683 761 gap: 12px; 684 762 flex: 1; 685 763 min-width: 0; 686 764 } 687 765 688 - .semble-detail-note-icon { 766 + .atmark-semble-detail-note-icon { 689 767 flex-shrink: 0; 690 - color: var(--color-blue); 768 + color: var(--color-accent); 691 769 } 692 770 693 - .semble-detail-note-icon svg { 771 + .atmark-semble-detail-note-icon svg { 694 772 width: 16px; 695 773 height: 16px; 696 774 } 697 775 698 - .semble-detail-note-text { 776 + .atmark-semble-detail-note-text { 699 777 margin: 0; 700 778 color: var(--text-normal); 701 779 line-height: var(--line-height-normal); 702 780 white-space: pre-wrap; 703 781 } 704 782 705 - /* Legacy Semble classes (backwards compatibility - will be removed in future) */ 706 - .semble-card-grid { 707 - display: grid; 708 - grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); 709 - gap: 16px; 710 - padding: 8px 0; 711 - } 712 - 713 - .semble-card { 714 - background: var(--background-secondary); 715 - border: 1px solid var(--background-modifier-border); 716 - border-radius: var(--radius-m); 717 - padding: 16px; 718 - display: flex; 719 - flex-direction: column; 720 - gap: 8px; 721 - transition: box-shadow 0.15s ease, border-color 0.15s ease; 722 - cursor: pointer; 723 - } 724 - 725 - .semble-card:hover { 726 - box-shadow: var(--shadow-s); 727 - border-color: var(--background-modifier-border-hover); 728 - } 729 - 730 - .semble-card-header { 731 - display: flex; 732 - justify-content: space-between; 733 - align-items: flex-start; 734 - gap: 8px; 735 - } 736 - 737 - .semble-badge { 738 - font-size: var(--font-smallest); 739 - padding: 2px 8px; 740 - border-radius: var(--radius-s); 741 - text-transform: uppercase; 742 - font-weight: var(--font-medium); 743 - flex-shrink: 0; 744 - } 745 - 746 - .semble-badge-open { 747 - background: var(--color-green); 748 - color: var(--text-on-accent); 749 - } 750 - 751 - .semble-badge-closed { 752 - background: var(--color-orange); 753 - color: var(--text-on-accent); 754 - } 755 - 756 783 /* Card type badges */ 757 - .semble-badge-note { 758 - background: var(--color-blue); 784 + .atmark-semble-badge-note { 785 + background: var(--color-accent); 759 786 color: var(--text-on-accent); 760 787 } 761 788 762 - .semble-badge-url { 763 - background: var(--color-purple); 789 + .atmark-semble-badge-url { 790 + background: color-mix(in srgb, var(--color-purple) 80%, var(--background-primary)); 764 791 color: var(--text-on-accent); 765 792 } 766 793 767 - .semble-badge-source { 794 + .atmark-badge-source { 768 795 font-size: var(--font-smallest); 769 796 opacity: 0.8; 770 797 } 771 798 772 - .semble-badge-semble { 773 - background: var(--color-green); 799 + .atmark-semble-badge-semble { 800 + background: color-mix(in srgb, var(--color-green) 80%, var(--background-primary)); 774 801 color: var(--text-on-accent); 775 802 } 776 803 777 - /* Semble-specific page components */ 778 - .semble-page-header { 779 - margin-bottom: 16px; 780 - padding-bottom: 16px; 781 - border-top: 1px solid var(--background-modifier-border); 782 - } 783 - 784 - .semble-nav-row { 804 + /* Profile Icon */ 805 + .atmark-profile-icon { 785 806 display: flex; 786 807 align-items: center; 787 - gap: 12px; 788 - margin-bottom: 8px; 789 - } 790 - 791 - .semble-brand { 792 - font-size: var(--font-small); 793 - font-weight: var(--font-semibold); 794 - color: var(--text-accent); 795 - text-transform: uppercase; 796 - letter-spacing: 0.5px; 797 - } 798 - 799 - .semble-page-title { 800 - margin: 0; 801 - font-size: var(--h1-size); 802 - font-weight: var(--font-bold); 803 - color: var(--text-normal); 804 - } 805 - 806 - .semble-back-btn { 807 - display: flex; 808 - align-items: center; 809 - justify-content: center; 810 - width: 32px; 811 - height: 32px; 812 - padding: 0; 808 + gap: 6px; 809 + padding: 10px 12px; 810 + margin-bottom: -1px; 811 + margin-left: auto; 812 + position: absolute; 813 + right: 0; 813 814 background: transparent; 814 - border: 1px solid var(--background-modifier-border); 815 - border-radius: var(--radius-s); 816 - cursor: pointer; 817 - color: var(--text-muted); 815 + transition: background 0.15s ease; 818 816 } 819 817 820 - .semble-back-btn:hover { 818 + .atmark-profile-icon:hover { 821 819 background: var(--background-modifier-hover); 822 - color: var(--text-normal); 823 820 } 824 821 825 - /* Semble-specific Profile Icon */ 826 - .semble-profile-icon { 827 - display: flex; 828 - align-items: center; 829 - gap: 10px; 830 - margin-left: auto; 831 - } 832 - 833 - .semble-avatar-btn { 822 + .atmark-avatar-btn { 834 823 display: flex; 835 824 align-items: center; 836 825 justify-content: center; 837 - width: 36px; 838 - height: 36px; 826 + width: 24px; 827 + height: 24px; 839 828 padding: 0; 840 829 background: var(--background-secondary); 841 - border: 2px solid var(--background-modifier-border); 842 - border-radius: var(--radius-full); 830 + border: 1px solid var(--background-modifier-border); 831 + border-radius: 50%; 843 832 cursor: pointer; 844 833 overflow: hidden; 845 834 transition: opacity 0.15s ease; 846 835 } 847 836 848 - .semble-avatar-btn:hover { 837 + .atmark-avatar-btn:hover { 849 838 opacity: 0.8; 850 839 } 851 840 852 - .semble-avatar-img { 841 + .atmark-avatar-img { 853 842 width: 100%; 854 843 height: 100%; 855 844 object-fit: cover; 856 - border-radius: var(--radius-full); 845 + border-radius: 50%; 857 846 } 858 847 859 - .semble-avatar-initials { 860 - font-size: var(--font-small); 848 + .atmark-avatar-initials { 849 + font-size: var(--font-smallest); 861 850 font-weight: var(--font-semibold); 862 851 color: var(--text-muted); 863 852 } 864 853 865 - .semble-avatar-placeholder { 854 + .atmark-avatar-placeholder { 866 855 display: flex; 867 856 align-items: center; 868 857 justify-content: center; 869 - width: 36px; 870 - height: 36px; 858 + width: 24px; 859 + height: 24px; 871 860 background: var(--background-secondary); 872 - border: 2px solid var(--background-modifier-border); 873 - border-radius: var(--radius-full); 861 + border: 1px solid var(--background-modifier-border); 862 + border-radius: 50%; 874 863 color: var(--text-faint); 875 - font-size: var(--font-small); 864 + font-size: var(--font-smallest); 876 865 } 877 866 878 - .semble-profile-info { 867 + .atmark-profile-info { 879 868 display: flex; 880 869 flex-direction: column; 881 870 align-items: flex-end; 882 - gap: 2px; 871 + gap: 1px; 883 872 } 884 873 885 - .semble-profile-name { 886 - font-size: var(--font-small); 887 - font-weight: var(--font-semibold); 888 - color: var(--text-normal); 874 + .atmark-profile-name { 875 + font-size: var(--font-ui-small); 876 + font-weight: var(--font-medium); 877 + color: var(--text-muted); 889 878 line-height: 1.2; 890 879 } 891 880 892 - .semble-profile-handle { 881 + .atmark-profile-handle { 893 882 font-size: var(--font-smallest); 894 - color: var(--text-muted); 883 + color: var(--text-faint); 895 884 line-height: 1.2; 896 885 } 897 886 898 - /* Semble-specific Collection UI */ 899 - .semble-collection-modal { 900 - padding: 16px; 887 + /* Generic Card Detail Modal (used for all sources) */ 888 + .atmark-detail-modal { 889 + padding: 20px; 890 + max-width: 600px; 891 + } 892 + 893 + .atmark-detail-header { 894 + margin-bottom: 16px; 895 + } 896 + 897 + .atmark-detail-footer { 898 + margin-top: 20px; 899 + padding-top: 16px; 900 + border-top: 1px solid var(--background-modifier-border); 901 901 } 902 902 903 - .semble-collection-modal h2 { 904 - margin: 0 0 16px 0; 905 - font-size: var(--h2-size); 906 - font-weight: var(--font-semibold); 907 - color: var(--text-normal); 903 + .atmark-detail-date { 904 + font-size: var(--font-small); 905 + color: var(--text-faint); 908 906 } 909 907 910 - .semble-collection-list { 908 + /* Semble-specific Add Note Form */ 909 + .atmark-semble-detail-add-note { 910 + margin-top: 20px; 911 + padding-top: 20px; 912 + border-top: 1px solid var(--background-modifier-border); 913 + } 914 + 915 + .atmark-semble-add-note-form { 911 916 display: flex; 912 917 flex-direction: column; 913 - gap: 8px; 914 - max-height: 300px; 915 - overflow-y: auto; 916 - margin-bottom: 16px; 918 + gap: 12px; 919 + } 920 + 921 + .atmark-semble-note-input { 922 + min-height: 80px; 923 + resize: vertical; 917 924 } 918 925 919 - .semble-collection-item { 926 + .atmark-semble-note-delete-btn { 920 927 display: flex; 921 928 align-items: center; 922 - gap: 12px; 923 - padding: 12px 16px; 924 - background: var(--background-secondary); 925 - border: 1px solid var(--background-modifier-border); 926 - border-radius: var(--radius-m); 929 + justify-content: center; 930 + width: 28px; 931 + height: 28px; 932 + padding: 0; 933 + flex-shrink: 0; 934 + background: transparent; 935 + border: none; 936 + border-radius: var(--radius-s); 927 937 cursor: pointer; 938 + color: var(--text-faint); 939 + opacity: 0.6; 928 940 transition: all 0.15s ease; 929 941 } 930 942 931 - .semble-collection-item:hover { 932 - background: var(--background-modifier-hover); 933 - border-color: var(--background-modifier-border-hover); 943 + .atmark-semble-note-delete-btn:hover { 944 + background: color-mix(in srgb, var(--color-red) 15%, transparent); 945 + color: var(--color-red); 946 + opacity: 1; 947 + } 948 + 949 + .atmark-semble-note-delete-btn svg { 950 + width: 14px; 951 + height: 14px; 952 + } 953 + 954 + /* Responsive styles */ 955 + @media (max-width: 600px) { 956 + .atmark-view { 957 + padding: 12px; 958 + } 959 + 960 + .atmark-header { 961 + margin-bottom: 16px; 962 + padding-bottom: 12px; 963 + } 964 + 965 + .atmark-profile-icon { 966 + display: none; 967 + } 968 + 969 + .atmark-source-option { 970 + padding: 8px 16px; 971 + font-size: var(--font-ui-small); 972 + } 973 + 974 + .atmark-source-text { 975 + font-size: var(--font-ui-small); 976 + } 977 + 978 + .atmark-source-selector { 979 + justify-content: center; 980 + } 981 + 982 + .atmark-grid { 983 + grid-template-columns: 1fr; 984 + gap: 12px; 985 + } 986 + 987 + .standard-site-list { 988 + grid-template-columns: 1fr; 989 + gap: 12px; 990 + } 991 + 992 + .atmark-filter-section { 993 + margin-bottom: 12px; 994 + } 934 995 } 935 996 936 - .semble-collection-checkbox { 937 - width: 18px; 938 - height: 18px; 939 - margin: 0; 940 - cursor: pointer; 941 - accent-color: var(--interactive-accent); 997 + /* Hide profile in narrow sidebar widths (but not mobile) */ 998 + @media (max-width: 400px) { 999 + .atmark-profile-icon { 1000 + display: none; 1001 + } 1002 + } 1003 + 1004 + .is-mobile .atmark-profile-icon { 1005 + display: none; 942 1006 } 943 1007 944 - .semble-collection-item-info { 945 - display: flex; 946 - flex-direction: column; 947 - gap: 2px; 948 - flex: 1; 1008 + .is-mobile .atmark-source-option { 1009 + padding: 8px 16px; 1010 + font-size: var(--font-ui-small); 949 1011 } 950 1012 951 - .semble-collection-item-name { 952 - font-weight: var(--font-semibold); 953 - color: var(--text-normal); 1013 + .is-mobile .atmark-source-text { 1014 + font-size: var(--font-ui-small); 954 1015 } 955 1016 956 - .semble-collection-item-desc { 957 - font-size: var(--font-small); 958 - color: var(--text-muted); 1017 + .is-mobile .atmark-source-selector { 1018 + justify-content: center; 959 1019 } 960 1020 961 - /* Semble-specific Toolbar */ 962 - .semble-toolbar { 1021 + /* Standard Site View */ 1022 + .standard-site-view { 1023 + padding: 20px; 1024 + } 1025 + 1026 + .standard-site-header { 963 1027 display: flex; 964 1028 align-items: center; 965 - gap: 8px; 966 - margin-bottom: 16px; 1029 + justify-content: space-between; 1030 + margin-bottom: 24px; 1031 + padding-bottom: 16px; 1032 + border-bottom: 1px solid var(--background-modifier-border); 1033 + } 1034 + 1035 + .standard-site-header h2 { 1036 + margin: 0; 1037 + font-size: var(--h2-size); 1038 + font-weight: var(--font-semibold); 1039 + color: var(--text-normal); 967 1040 } 968 1041 969 - .semble-create-btn { 970 - display: inline-flex; 1042 + .standard-site-create-btn { 1043 + display: flex; 971 1044 align-items: center; 1045 + justify-content: center; 1046 + padding: 8px 16px; 972 1047 gap: 6px; 973 - padding: 6px 12px; 974 1048 background: var(--interactive-accent); 975 1049 border: none; 976 1050 border-radius: var(--radius-s); 1051 + cursor: pointer; 977 1052 color: var(--text-on-accent); 978 - font-size: var(--font-small); 979 1053 font-weight: var(--font-medium); 980 - cursor: pointer; 981 1054 transition: all 0.15s ease; 982 1055 } 983 1056 984 - .semble-create-btn:hover { 1057 + .standard-site-create-btn:hover { 985 1058 background: var(--interactive-accent-hover); 986 1059 } 987 1060 988 - .semble-create-btn svg { 989 - width: 14px; 990 - height: 14px; 1061 + .standard-site-create-btn svg { 1062 + width: 16px; 1063 + height: 16px; 991 1064 } 992 1065 993 - .semble-toolbar-btn { 994 - display: inline-flex; 995 - align-items: center; 996 - gap: 6px; 997 - padding: 6px 12px; 1066 + .standard-site-list { 1067 + display: grid; 1068 + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); 1069 + gap: 16px; 1070 + padding: 8px 0; 1071 + } 1072 + 1073 + .standard-site-publication { 998 1074 background: var(--background-secondary); 999 1075 border: 1px solid var(--background-modifier-border); 1000 - border-radius: var(--radius-s); 1001 - color: var(--text-normal); 1002 - font-size: var(--font-small); 1003 - font-weight: var(--font-medium); 1076 + border-radius: var(--radius-m); 1077 + padding: 16px; 1078 + display: flex; 1079 + flex-direction: column; 1080 + transition: box-shadow 0.15s ease, border-color 0.15s ease; 1081 + } 1082 + 1083 + .standard-site-publication.clickable { 1004 1084 cursor: pointer; 1005 - transition: all 0.15s ease; 1006 1085 } 1007 1086 1008 - .semble-toolbar-btn:hover { 1009 - background: var(--background-modifier-hover); 1087 + .standard-site-publication:hover { 1088 + box-shadow: var(--shadow-s); 1010 1089 border-color: var(--background-modifier-border-hover); 1011 1090 } 1012 1091 1013 - .semble-toolbar-btn svg { 1014 - width: 14px; 1015 - height: 14px; 1092 + .standard-site-publication-header { 1093 + display: flex; 1094 + align-items: center; 1095 + justify-content: space-between; 1096 + gap: 12px; 1097 + margin-bottom: 12px; 1016 1098 } 1017 1099 1018 - /* Semble-specific Card Detail Modal */ 1019 - .semble-detail-modal { 1020 - padding: 20px; 1021 - max-width: 600px; 1100 + .standard-site-publication-name { 1101 + margin: 0; 1102 + font-size: var(--h3-size); 1103 + font-weight: var(--font-semibold); 1104 + color: var(--text-normal); 1105 + flex: 1; 1022 1106 } 1023 1107 1024 - .semble-detail-header { 1025 - margin-bottom: 16px; 1108 + .standard-site-publication-actions { 1109 + display: flex; 1110 + gap: 6px; 1026 1111 } 1027 1112 1028 - .semble-detail-footer { 1029 - margin-top: 20px; 1030 - padding-top: 16px; 1031 - border-top: 1px solid var(--background-modifier-border); 1032 - } 1033 - 1034 - .semble-detail-date { 1035 - font-size: var(--font-small); 1113 + .standard-site-action-btn { 1114 + display: flex; 1115 + align-items: center; 1116 + justify-content: center; 1117 + width: 32px; 1118 + height: 32px; 1119 + padding: 0; 1120 + background: transparent; 1121 + border: none; 1122 + border-radius: var(--radius-s); 1123 + cursor: pointer; 1036 1124 color: var(--text-faint); 1125 + transition: all 0.15s ease; 1037 1126 } 1038 1127 1039 - .semble-detail-section-title { 1040 - margin: 0 0 12px 0; 1041 - font-size: var(--font-small); 1042 - font-weight: var(--font-semibold); 1043 - color: var(--text-muted); 1044 - text-transform: uppercase; 1045 - letter-spacing: 0.5px; 1128 + .standard-site-action-btn:hover { 1129 + background: var(--background-modifier-hover); 1130 + color: var(--text-normal); 1046 1131 } 1047 1132 1048 - /* Semble-specific Add Note Form */ 1049 - .semble-detail-add-note { 1050 - margin-top: 20px; 1051 - padding-top: 20px; 1052 - border-top: 1px solid var(--background-modifier-border); 1133 + .standard-site-action-btn svg { 1134 + width: 16px; 1135 + height: 16px; 1053 1136 } 1054 1137 1055 - .semble-add-note-form { 1138 + .standard-site-publication-body { 1056 1139 display: flex; 1057 1140 flex-direction: column; 1058 1141 gap: 12px; 1059 1142 } 1060 1143 1061 - .semble-note-input { 1062 - min-height: 80px; 1063 - resize: vertical; 1064 - } 1065 - 1066 - .semble-note-delete-btn { 1144 + .standard-site-publication-url { 1067 1145 display: flex; 1068 1146 align-items: center; 1069 - justify-content: center; 1070 - width: 28px; 1071 - height: 28px; 1072 - padding: 0; 1073 - flex-shrink: 0; 1074 - background: transparent; 1075 - border: none; 1076 - border-radius: var(--radius-s); 1077 - cursor: pointer; 1078 - color: var(--text-faint); 1079 - opacity: 0.6; 1080 - transition: all 0.15s ease; 1147 + gap: 6px; 1081 1148 } 1082 1149 1083 - .semble-note-delete-btn:hover { 1084 - background: color-mix(in srgb, var(--color-red) 15%, transparent); 1085 - color: var(--color-red); 1086 - opacity: 1; 1150 + .standard-site-publication-url a { 1151 + color: var(--text-accent); 1152 + text-decoration: none; 1153 + font-size: var(--font-small); 1087 1154 } 1088 1155 1089 - .semble-note-delete-btn svg { 1090 - width: 14px; 1091 - height: 14px; 1156 + .standard-site-publication-url a:hover { 1157 + text-decoration: underline; 1092 1158 } 1093 1159 1094 - /* Semble-specific legacy classes that need to be migrated to atmark-* */ 1095 - .semble-modal-actions { 1160 + .standard-site-publication-description { 1161 + margin: 0; 1162 + color: var(--text-muted); 1163 + line-height: var(--line-height-normal); 1164 + font-size: var(--font-small); 1165 + } 1166 + 1167 + .standard-site-publication-footer { 1096 1168 display: flex; 1169 + flex-wrap: wrap; 1170 + gap: 12px; 1097 1171 align-items: center; 1098 - gap: 8px; 1099 - padding-top: 16px; 1172 + margin-top: 12px; 1173 + padding-top: 12px; 1100 1174 border-top: 1px solid var(--background-modifier-border); 1101 1175 } 1102 1176 1103 - .semble-spacer { 1104 - flex: 1; 1177 + .standard-site-publication-uri { 1178 + display: flex; 1179 + align-items: center; 1180 + gap: 4px; 1181 + font-size: var(--font-smallest); 1182 + color: var(--text-faint); 1183 + } 1184 + 1185 + .standard-site-label { 1186 + font-weight: var(--font-medium); 1105 1187 } 1106 1188 1107 - .semble-btn { 1108 - padding: 8px 16px; 1189 + .standard-site-publication-uri code { 1190 + font-size: var(--font-smallest); 1191 + background: var(--background-primary); 1192 + padding: 2px 6px; 1193 + border-radius: var(--radius-s); 1194 + color: var(--text-muted); 1195 + } 1196 + 1197 + .standard-site-badge { 1198 + font-size: var(--font-smallest); 1199 + padding: 3px 8px; 1109 1200 border-radius: var(--radius-s); 1110 - font-size: var(--font-small); 1201 + background: color-mix(in srgb, var(--color-orange) 15%, transparent); 1202 + color: var(--color-orange); 1203 + border: 1px solid color-mix(in srgb, var(--color-orange) 30%, transparent); 1111 1204 font-weight: var(--font-medium); 1112 - cursor: pointer; 1113 - transition: all 0.15s ease; 1114 1205 } 1115 1206 1116 - .semble-btn:disabled { 1117 - opacity: 0.5; 1118 - cursor: not-allowed; 1207 + .standard-site-error { 1208 + color: var(--text-error); 1119 1209 } 1120 1210 1121 - .semble-btn-secondary { 1211 + /* Standard Site Documents */ 1212 + .standard-site-document { 1122 1213 background: var(--background-secondary); 1123 1214 border: 1px solid var(--background-modifier-border); 1124 - color: var(--text-normal); 1215 + border-radius: var(--radius-m); 1216 + padding: 16px; 1217 + display: flex; 1218 + flex-direction: column; 1219 + transition: box-shadow 0.15s ease, border-color 0.15s ease; 1125 1220 } 1126 1221 1127 - .semble-btn-secondary:hover:not(:disabled) { 1128 - background: var(--background-modifier-hover); 1222 + .standard-site-document:hover { 1223 + box-shadow: var(--shadow-s); 1224 + border-color: var(--background-modifier-border-hover); 1129 1225 } 1130 1226 1131 - .semble-btn-primary { 1132 - background: var(--interactive-accent); 1133 - border: 1px solid var(--interactive-accent); 1134 - color: var(--text-on-accent); 1227 + .standard-site-document-header { 1228 + display: flex; 1229 + align-items: flex-start; 1230 + justify-content: space-between; 1231 + gap: 8px; 1232 + margin-bottom: 8px; 1135 1233 } 1136 1234 1137 - .semble-btn-primary:hover:not(:disabled) { 1138 - background: var(--interactive-accent-hover); 1235 + .standard-site-document-title { 1236 + margin: 0; 1237 + font-size: var(--h3-size); 1238 + font-weight: var(--font-semibold); 1239 + color: var(--text-normal); 1240 + flex: 1; 1241 + line-height: 1.3; 1139 1242 } 1140 1243 1141 - .semble-btn-danger { 1142 - background: color-mix(in srgb, var(--color-red) 15%, transparent); 1143 - border: none; 1144 - color: var(--color-red); 1244 + .standard-site-document-external { 1245 + display: flex; 1246 + align-items: center; 1247 + justify-content: center; 1248 + flex-shrink: 0; 1249 + width: 24px; 1250 + height: 24px; 1251 + border-radius: var(--radius-s); 1252 + color: var(--text-faint); 1253 + transition: all 0.15s ease; 1145 1254 } 1146 1255 1147 - .semble-btn-danger:hover:not(:disabled) { 1148 - background: color-mix(in srgb, var(--color-red) 25%, transparent); 1256 + .standard-site-document-external:hover { 1257 + background: var(--background-modifier-hover); 1258 + color: var(--text-normal); 1149 1259 } 1150 1260 1151 - .semble-warning-text { 1152 - color: var(--text-muted); 1153 - margin-bottom: 16px; 1261 + .standard-site-document-external svg { 1262 + width: 14px; 1263 + height: 14px; 1154 1264 } 1155 1265 1156 - .semble-form { 1266 + .standard-site-document-body { 1157 1267 display: flex; 1158 1268 flex-direction: column; 1159 - gap: 16px; 1269 + gap: 8px; 1160 1270 } 1161 1271 1162 - .semble-form-group { 1163 - display: flex; 1164 - flex-direction: column; 1165 - gap: 6px; 1272 + .standard-site-document-description { 1273 + margin: 0; 1274 + color: var(--text-muted); 1275 + font-size: var(--font-small); 1276 + line-height: var(--line-height-normal); 1277 + display: -webkit-box; 1278 + -webkit-line-clamp: 3; 1279 + -webkit-box-orient: vertical; 1280 + overflow: hidden; 1166 1281 } 1167 1282 1168 - .semble-form-group label { 1169 - font-size: var(--font-small); 1170 - font-weight: var(--font-medium); 1171 - color: var(--text-normal); 1283 + .standard-site-document-tags { 1284 + display: flex; 1285 + flex-wrap: wrap; 1286 + gap: 6px; 1172 1287 } 1173 1288 1174 - .semble-input, 1175 - .semble-textarea { 1176 - padding: 8px 12px; 1177 - background: var(--background-primary); 1178 - border: 1px solid var(--background-modifier-border); 1289 + .standard-site-document-tag { 1290 + font-size: var(--font-smallest); 1291 + padding: 2px 8px; 1179 1292 border-radius: var(--radius-s); 1180 - color: var(--text-normal); 1181 - font-size: var(--font-ui-medium); 1182 - font-family: inherit; 1183 - transition: border-color 0.15s ease; 1293 + background: var(--background-modifier-border); 1294 + color: var(--text-muted); 1295 + border: 1px solid var(--background-modifier-border-hover); 1184 1296 } 1185 1297 1186 - .semble-input:focus, 1187 - .semble-textarea:focus { 1188 - outline: none; 1189 - border-color: var(--interactive-accent); 1190 - box-shadow: 0 0 0 2px var(--background-modifier-border-focus); 1298 + .standard-site-document-footer { 1299 + display: flex; 1300 + align-items: center; 1301 + margin-top: 12px; 1302 + padding-top: 8px; 1303 + border-top: 1px solid var(--background-modifier-border); 1191 1304 } 1192 1305 1193 - .semble-input::placeholder, 1194 - .semble-textarea::placeholder { 1306 + .standard-site-document-date { 1307 + font-size: var(--font-smallest); 1195 1308 color: var(--text-faint); 1196 1309 } 1197 1310 1198 - .semble-textarea { 1199 - resize: vertical; 1200 - min-height: 60px; 1311 + .standard-site-title-group { 1312 + display: flex; 1313 + flex-direction: column; 1314 + flex: 1; 1315 + min-width: 0; 1201 1316 } 1202 1317 1203 - .semble-error { 1204 - color: var(--text-error); 1318 + .standard-site-author-handle { 1319 + font-size: var(--font-small); 1320 + color: var(--text-muted); 1205 1321 } 1206 1322 1207 - /* Responsive styles for mobile and narrow views */ 1208 - @media (max-width: 600px) { 1209 - .atmark-view { 1210 - padding: 12px; 1211 - } 1212 - 1213 - .atmark-header { 1214 - margin-bottom: 16px; 1215 - padding-bottom: 12px; 1216 - } 1217 - 1218 - .atmark-title { 1219 - font-size: var(--font-ui-medium); 1220 - } 1323 + .standard-site-back { 1324 + font-size: var(--font-small); 1325 + color: var(--text-muted); 1326 + padding: 4px 8px; 1327 + border-radius: var(--radius-s); 1328 + transition: all 0.15s ease; 1329 + } 1221 1330 1222 - .atmark-source-option { 1223 - padding: 3px 10px; 1224 - font-size: var(--font-smallest); 1225 - } 1331 + .standard-site-back:hover { 1332 + background: var(--background-modifier-hover); 1333 + color: var(--text-normal); 1334 + } 1226 1335 1227 - .atmark-source-text { 1228 - font-size: var(--font-smallest); 1229 - } 1336 + .standard-site-publication-external { 1337 + display: flex; 1338 + align-items: center; 1339 + justify-content: center; 1340 + flex-shrink: 0; 1341 + width: 24px; 1342 + height: 24px; 1343 + border-radius: var(--radius-s); 1344 + color: var(--text-faint); 1345 + transition: all 0.15s ease; 1346 + } 1230 1347 1231 - .atmark-grid { 1232 - grid-template-columns: 1fr; 1233 - gap: 12px; 1234 - } 1348 + .standard-site-publication-external:hover { 1349 + background: var(--background-modifier-hover); 1350 + color: var(--text-normal); 1351 + } 1235 1352 1236 - .atmark-filter-section { 1237 - margin-bottom: 12px; 1238 - } 1353 + .standard-site-publication-external svg { 1354 + width: 14px; 1355 + height: 14px; 1239 1356 }
-1
tsconfig.json
··· 17 17 "strictBindCallApply": true, 18 18 "allowSyntheticDefaultImports": true, 19 19 "useUnknownInCatchVariables": true, 20 - "types": ["@atcute/bluesky", "@atcute/atproto", "node"], 21 20 "lib": [ 22 21 "DOM", 23 22 "ES5",