| 1 | - | { |
|
| 2 | - | "lockfileVersion": 1, |
|
| 3 | - | "configVersion": 1, |
|
| 4 | - | "workspaces": { |
|
| 5 | - | "": { |
|
| 6 | - | "name": "stevedylan.dev", |
|
| 7 | - | }, |
|
| 8 | - | "packages/client": { |
|
| 9 | - | "name": "client", |
|
| 10 | - | "version": "1.0.0", |
|
| 11 | - | "dependencies": { |
|
| 12 | - | "@astrojs/cloudflare": "12.6.12", |
|
| 13 | - | "@astrojs/react": "4.4.2", |
|
| 14 | - | "@astrojs/rss": "4.0.14", |
|
| 15 | - | "@astrojs/ts-plugin": "1.10.6", |
|
| 16 | - | "@types/react": "^18.3.8", |
|
| 17 | - | "@types/react-dom": "^18.3.0", |
|
| 18 | - | "astro": "5.16.7", |
|
| 19 | - | "markdown-it": "^14.1.0", |
|
| 20 | - | "react": "^18.3.1", |
|
| 21 | - | "react-dom": "^18.3.1", |
|
| 22 | - | "rehype-external-links": "^3.0.0", |
|
| 23 | - | "sanitize-html": "^2.17.0", |
|
| 24 | - | "sharp": "^0.33.1", |
|
| 25 | - | "shiki": "^4.0.2", |
|
| 26 | - | }, |
|
| 27 | - | "devDependencies": { |
|
| 28 | - | "@astrojs/mdx": "4.3.13", |
|
| 29 | - | "@astrojs/sitemap": "3.6.1", |
|
| 30 | - | "@astrojs/tailwind": "6.0.2", |
|
| 31 | - | "@biomejs/biome": "2.1.1", |
|
| 32 | - | "@tailwindcss/aspect-ratio": "^0.4.2", |
|
| 33 | - | "@tailwindcss/typography": "^0.5.8", |
|
| 34 | - | "@types/bun": "^1.3.6", |
|
| 35 | - | "@types/markdown-it": "^14.1.2", |
|
| 36 | - | "@types/sanitize-html": "^2.16.0", |
|
| 37 | - | "autoprefixer": "^10.4.13", |
|
| 38 | - | "postcss": "^8.4.21", |
|
| 39 | - | "tailwindcss": "^3.4.7", |
|
| 40 | - | "typescript": "^5.6.2", |
|
| 41 | - | "wrangler": "^4.58.0", |
|
| 42 | - | }, |
|
| 43 | - | }, |
|
| 44 | - | "packages/server": { |
|
| 45 | - | "name": "server", |
|
| 46 | - | "dependencies": { |
|
| 47 | - | "@atproto/api": "^0.18.12", |
|
| 48 | - | "feed": "^5.1.0", |
|
| 49 | - | "hono": "^4.11.3", |
|
| 50 | - | "jose": "^6.1.3", |
|
| 51 | - | }, |
|
| 52 | - | "devDependencies": { |
|
| 53 | - | "@cloudflare/workers-types": "^4.20260103.0", |
|
| 54 | - | "wrangler": "^4.4.0", |
|
| 55 | - | }, |
|
| 56 | - | }, |
|
| 57 | - | }, |
|
| 58 | - | "packages": { |
|
| 59 | - | "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], |
|
| 60 | - | ||
| 61 | - | "@astrojs/cloudflare": ["@astrojs/cloudflare@12.6.12", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "@astrojs/underscore-redirects": "1.0.0", "@cloudflare/workers-types": "^4.20251121.0", "tinyglobby": "^0.2.15", "vite": "^6.4.1", "wrangler": "4.50.0" }, "peerDependencies": { "astro": "^5.7.0" } }, "sha512-f6iXreyJc02EhokqsoPf7D/s3tebyZ8dBNVOyY2JDY87ujft4RokVS1f+zNwNFyu0wkehC4ALUboU5z590DE4w=="], |
|
| 62 | - | ||
| 63 | - | "@astrojs/compiler": ["@astrojs/compiler@2.13.0", "", {}, "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw=="], |
|
| 64 | - | ||
| 65 | - | "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.7.5", "", {}, "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA=="], |
|
| 66 | - | ||
| 67 | - | "@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.10", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.19.0", "smol-toml": "^1.5.2", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A=="], |
|
| 68 | - | ||
| 69 | - | "@astrojs/mdx": ["@astrojs/mdx@4.3.13", "", { "dependencies": { "@astrojs/markdown-remark": "6.3.10", "@mdx-js/mdx": "^3.1.1", "acorn": "^8.15.0", "es-module-lexer": "^1.7.0", "estree-util-visit": "^2.0.0", "hast-util-to-html": "^9.0.5", "piccolore": "^0.1.3", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.1", "remark-smartypants": "^3.0.2", "source-map": "^0.7.6", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q=="], |
|
| 70 | - | ||
| 71 | - | "@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="], |
|
| 72 | - | ||
| 73 | - | "@astrojs/react": ["@astrojs/react@4.4.2", "", { "dependencies": { "@vitejs/plugin-react": "^4.7.0", "ultrahtml": "^1.6.0", "vite": "^6.4.1" }, "peerDependencies": { "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0", "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0", "react": "^17.0.2 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0" } }, "sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ=="], |
|
| 74 | - | ||
| 75 | - | "@astrojs/rss": ["@astrojs/rss@4.0.14", "", { "dependencies": { "fast-xml-parser": "^5.3.0", "piccolore": "^0.1.3" } }, "sha512-KCe1imDcADKOOuO/wtKOMDO/umsBD6DWF+94r5auna1jKl5fmlK9vzf+sjA3EyveXA/FoB3khtQ/u/tQgETmTw=="], |
|
| 76 | - | ||
| 77 | - | "@astrojs/sitemap": ["@astrojs/sitemap@3.6.1", "", { "dependencies": { "sitemap": "^8.0.2", "stream-replace-string": "^2.0.0", "zod": "^3.25.76" } }, "sha512-+o+TbxXqQJAOd+HxCjz/5RdAMrRFGjeuO+U6zddUuTO59WqMqXnsc8uveRiEr2Ff+3McZiEne7iG4J5cnuI6kA=="], |
|
| 78 | - | ||
| 79 | - | "@astrojs/tailwind": ["@astrojs/tailwind@6.0.2", "", { "dependencies": { "autoprefixer": "^10.4.21", "postcss": "^8.5.3", "postcss-load-config": "^4.0.2" }, "peerDependencies": { "astro": "^3.0.0 || ^4.0.0 || ^5.0.0", "tailwindcss": "^3.0.24" } }, "sha512-j3mhLNeugZq6A8dMNXVarUa8K6X9AW+QHU9u3lKNrPLMHhOQ0S7VeWhHwEeJFpEK1BTKEUY1U78VQv2gN6hNGg=="], |
|
| 80 | - | ||
| 81 | - | "@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="], |
|
| 82 | - | ||
| 83 | - | "@astrojs/ts-plugin": ["@astrojs/ts-plugin@1.10.6", "", { "dependencies": { "@astrojs/compiler": "^2.10.3", "@astrojs/yaml2ts": "^0.2.2", "@jridgewell/sourcemap-codec": "^1.4.15", "@volar/language-core": "~2.4.23", "@volar/typescript": "~2.4.23", "semver": "^7.3.8", "vscode-languageserver-textdocument": "^1.0.11" } }, "sha512-Ke5CNwxn/ozsh6THJKuayUlBToa3uiPDi2oSwcXmTdeiJ0PGr+UkdQJf9hdMgBjbIka9fhnSn3UhYamfNfJ73A=="], |
|
| 84 | - | ||
| 85 | - | "@astrojs/underscore-redirects": ["@astrojs/underscore-redirects@1.0.0", "", {}, "sha512-qZxHwVnmb5FXuvRsaIGaqWgnftjCuMY+GSbaVZdBmE4j8AfgPqKPxYp8SUERyJcjpKCEmO4wD6ybuGH8A2kVRQ=="], |
|
| 86 | - | ||
| 87 | - | "@astrojs/yaml2ts": ["@astrojs/yaml2ts@0.2.2", "", { "dependencies": { "yaml": "^2.5.0" } }, "sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ=="], |
|
| 88 | - | ||
| 89 | - | "@atproto/api": ["@atproto/api@0.18.12", "", { "dependencies": { "@atproto/common-web": "^0.4.10", "@atproto/lexicon": "^0.6.0", "@atproto/syntax": "^0.4.2", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-b4MdUhYzebb6nQLo8LLZvBC9yvlzF69XqZeKewvmz9SleK2sJX2cqAPj78IStjNzT/3Xm9vVQrq9DkCkhSiTiQ=="], |
|
| 90 | - | ||
| 91 | - | "@atproto/common-web": ["@atproto/common-web@0.4.10", "", { "dependencies": { "@atproto/lex-data": "0.0.6", "@atproto/lex-json": "0.0.6", "zod": "^3.23.8" } }, "sha512-TLDZSgSKzT8ZgOrBrTGK87J1CXve9TEuY6NVVUBRkOMzRRtQzpFb9/ih5WVS/hnaWVvE30CfuyaetRoma+WKNw=="], |
|
| 92 | - | ||
| 93 | - | "@atproto/lex-data": ["@atproto/lex-data@0.0.6", "", { "dependencies": { "@atproto/syntax": "0.4.2", "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-MBNB4ghRJQzuXK1zlUPljpPbQcF1LZ5dzxy274KqPt4p3uPuRw0mHjgcCoWzRUNBQC685WMQR4IN9DHtsnG57A=="], |
|
| 94 | - | ||
| 95 | - | "@atproto/lex-json": ["@atproto/lex-json@0.0.6", "", { "dependencies": { "@atproto/lex-data": "0.0.6", "tslib": "^2.8.1" } }, "sha512-EILnN5cditPvf+PCNjXt7reMuzjugxAL1fpSzmzJbEMGMUwxOf5pPWxRsaA/M3Boip4NQZ+6DVrPOGUMlnqceg=="], |
|
| 96 | - | ||
| 97 | - | "@atproto/lexicon": ["@atproto/lexicon@0.6.0", "", { "dependencies": { "@atproto/common-web": "^0.4.7", "@atproto/syntax": "^0.4.2", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-5veb8aD+J5M0qszLJ+73KSFsFrJBgAY/nM1TSAJvGY7fNc9ZAT+PSUlmIyrdye9YznAZ07yktalls/TwNV7cHQ=="], |
|
| 98 | - | ||
| 99 | - | "@atproto/syntax": ["@atproto/syntax@0.4.2", "", {}, "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA=="], |
|
| 100 | - | ||
| 101 | - | "@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], |
|
| 102 | - | ||
| 103 | - | "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], |
|
| 104 | - | ||
| 105 | - | "@babel/compat-data": ["@babel/compat-data@7.28.5", "", {}, "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="], |
|
| 106 | - | ||
| 107 | - | "@babel/core": ["@babel/core@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw=="], |
|
| 108 | - | ||
| 109 | - | "@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="], |
|
| 110 | - | ||
| 111 | - | "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], |
|
| 112 | - | ||
| 113 | - | "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], |
|
| 114 | - | ||
| 115 | - | "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], |
|
| 116 | - | ||
| 117 | - | "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], |
|
| 118 | - | ||
| 119 | - | "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], |
|
| 120 | - | ||
| 121 | - | "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], |
|
| 122 | - | ||
| 123 | - | "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], |
|
| 124 | - | ||
| 125 | - | "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], |
|
| 126 | - | ||
| 127 | - | "@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="], |
|
| 128 | - | ||
| 129 | - | "@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="], |
|
| 130 | - | ||
| 131 | - | "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], |
|
| 132 | - | ||
| 133 | - | "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], |
|
| 134 | - | ||
| 135 | - | "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], |
|
| 136 | - | ||
| 137 | - | "@babel/traverse": ["@babel/traverse@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="], |
|
| 138 | - | ||
| 139 | - | "@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="], |
|
| 140 | - | ||
| 141 | - | "@biomejs/biome": ["@biomejs/biome@2.1.1", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.1.1", "@biomejs/cli-darwin-x64": "2.1.1", "@biomejs/cli-linux-arm64": "2.1.1", "@biomejs/cli-linux-arm64-musl": "2.1.1", "@biomejs/cli-linux-x64": "2.1.1", "@biomejs/cli-linux-x64-musl": "2.1.1", "@biomejs/cli-win32-arm64": "2.1.1", "@biomejs/cli-win32-x64": "2.1.1" }, "bin": { "biome": "bin/biome" } }, "sha512-HFGYkxG714KzG+8tvtXCJ1t1qXQMzgWzfvQaUjxN6UeKv+KvMEuliInnbZLJm6DXFXwqVi6446EGI0sGBLIYng=="], |
|
| 142 | - | ||
| 143 | - | "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.1.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2Muinu5ok4tWxq4nu5l19el48cwCY/vzvI7Vjbkf3CYIQkjxZLyj0Ad37Jv2OtlXYaLvv+Sfu1hFeXt/JwRRXQ=="], |
|
| 144 | - | ||
| 145 | - | "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.1.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cC8HM5lrgKQXLAK+6Iz2FrYW5A62pAAX6KAnRlEyLb+Q3+Kr6ur/sSuoIacqlp1yvmjHJqjYfZjPvHWnqxoEIA=="], |
|
| 146 | - | ||
| 147 | - | "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-tw4BEbhAUkWPe4WBr6IX04DJo+2jz5qpPzpW/SWvqMjb9QuHY8+J0M23V8EPY/zWU4IG8Ui0XESapR1CB49Q7g=="], |
|
| 148 | - | ||
| 149 | - | "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-/7FBLnTswu4jgV9ttI3AMIdDGqVEPIZd8I5u2D4tfCoj8rl9dnjrEQbAIDlWhUXdyWlFSz8JypH3swU9h9P+2A=="], |
|
| 150 | - | ||
| 151 | - | "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-3WJ1GKjU7NzZb6RTbwLB59v9cTIlzjbiFLDB0z4376TkDqoNYilJaC37IomCr/aXwuU8QKkrYoHrgpSq5ffJ4Q=="], |
|
| 152 | - | ||
| 153 | - | "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-kUu+loNI3OCD2c12cUt7M5yaaSjDnGIksZwKnueubX6c/HWUyi/0mPbTBHR49Me3F0KKjWiKM+ZOjsmC+lUt9g=="], |
|
| 154 | - | ||
| 155 | - | "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.1.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-vEHK0v0oW+E6RUWLoxb2isI3rZo57OX9ZNyyGH701fZPj6Il0Rn1f5DMNyCmyflMwTnIQstEbs7n2BxYSqQx4Q=="], |
|
| 156 | - | ||
| 157 | - | "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.1.1", "", { "os": "win32", "cpu": "x64" }, "sha512-i2PKdn70kY++KEF/zkQFvQfX1e8SkA8hq4BgC+yE9dZqyLzB/XStY2MvwI3qswlRgnGpgncgqe0QYKVS1blksg=="], |
|
| 158 | - | ||
| 159 | - | "@capsizecss/unpack": ["@capsizecss/unpack@4.0.0", "", { "dependencies": { "fontkitten": "^1.0.0" } }, "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA=="], |
|
| 160 | - | ||
| 161 | - | "@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.1", "", { "dependencies": { "mime": "^3.0.0" } }, "sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg=="], |
|
| 162 | - | ||
| 163 | - | "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.8.0", "", { "peerDependencies": { "unenv": "2.0.0-rc.24", "workerd": "^1.20251202.0" }, "optionalPeers": ["workerd"] }, "sha512-oIAu6EdQ4zJuPwwKr9odIEqd8AV96z1aqi3RBEA4iKaJ+Vd3fvuI6m5EDC7/QCv+oaPIhy1SkYBYxmD09N+oZg=="], |
|
| 164 | - | ||
| 165 | - | "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260107.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-Srwe/IukVppkMU2qTndkFaKCmZBI7CnZoq4Y0U0gD/8158VGzMREHTqCii4IcCeHifwrtDqTWu8EcA1VBKI4mg=="], |
|
| 166 | - | ||
| 167 | - | "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260107.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-aAYwU7zXW+UZFh/a4vHP5cs1ulTOcDRLzwU9547yKad06RlZ6ioRm7ovjdYvdqdmbI8mPd99v4LN9gMmecazQw=="], |
|
| 168 | - | ||
| 169 | - | "@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260107.1", "", { "os": "linux", "cpu": "x64" }, "sha512-Wh7xWtFOkk6WY3CXe3lSqZ1anMkFcwy+qOGIjtmvQ/3nCOaG34vKNwPIE9iwryPupqkSuDmEqkosI1UUnSTh1A=="], |
|
| 170 | - | ||
| 171 | - | "@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260107.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-NI0/5rdssdZZKYHxNG4umTmMzODByq86vSCEk8u4HQbGhRCQo7rV1eXn84ntSBdyWBzWdYGISCbeZMsgfIjSTg=="], |
|
| 172 | - | ||
| 173 | - | "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260107.1", "", { "os": "win32", "cpu": "x64" }, "sha512-gmBMqs606Gd/IhBEBPSL/hJAqy2L8IyPUjKtoqd/Ccy7GQxbSc0rYlRkxbQ9YzmqnuhrTVYvXuLscyWrpmAJkw=="], |
|
| 174 | - | ||
| 175 | - | "@cloudflare/workers-types": ["@cloudflare/workers-types@4.20260108.0", "", {}, "sha512-0SuzZ7SeMB35X0wL2rhsEQG1dmfAGY8N8z7UwrkFb6hxerxwXP4QuIzcF8HtCJTRTjChmarxV+HQC+ADB4UK1A=="], |
|
| 176 | - | ||
| 177 | - | "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], |
|
| 178 | - | ||
| 179 | - | "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], |
|
| 180 | - | ||
| 181 | - | "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A=="], |
|
| 182 | - | ||
| 183 | - | "@esbuild/android-arm": ["@esbuild/android-arm@0.27.0", "", { "os": "android", "cpu": "arm" }, "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ=="], |
|
| 184 | - | ||
| 185 | - | "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.0", "", { "os": "android", "cpu": "arm64" }, "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ=="], |
|
| 186 | - | ||
| 187 | - | "@esbuild/android-x64": ["@esbuild/android-x64@0.27.0", "", { "os": "android", "cpu": "x64" }, "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q=="], |
|
| 188 | - | ||
| 189 | - | "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg=="], |
|
| 190 | - | ||
| 191 | - | "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g=="], |
|
| 192 | - | ||
| 193 | - | "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw=="], |
|
| 194 | - | ||
| 195 | - | "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g=="], |
|
| 196 | - | ||
| 197 | - | "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.0", "", { "os": "linux", "cpu": "arm" }, "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ=="], |
|
| 198 | - | ||
| 199 | - | "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ=="], |
|
| 200 | - | ||
| 201 | - | "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw=="], |
|
| 202 | - | ||
| 203 | - | "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.0", "", { "os": "linux", "cpu": "none" }, "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg=="], |
|
| 204 | - | ||
| 205 | - | "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.0", "", { "os": "linux", "cpu": "none" }, "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg=="], |
|
| 206 | - | ||
| 207 | - | "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA=="], |
|
| 208 | - | ||
| 209 | - | "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.0", "", { "os": "linux", "cpu": "none" }, "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ=="], |
|
| 210 | - | ||
| 211 | - | "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w=="], |
|
| 212 | - | ||
| 213 | - | "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.0", "", { "os": "linux", "cpu": "x64" }, "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw=="], |
|
| 214 | - | ||
| 215 | - | "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.0", "", { "os": "none", "cpu": "arm64" }, "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w=="], |
|
| 216 | - | ||
| 217 | - | "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.0", "", { "os": "none", "cpu": "x64" }, "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA=="], |
|
| 218 | - | ||
| 219 | - | "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ=="], |
|
| 220 | - | ||
| 221 | - | "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A=="], |
|
| 222 | - | ||
| 223 | - | "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.0", "", { "os": "none", "cpu": "arm64" }, "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA=="], |
|
| 224 | - | ||
| 225 | - | "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA=="], |
|
| 226 | - | ||
| 227 | - | "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg=="], |
|
| 228 | - | ||
| 229 | - | "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ=="], |
|
| 230 | - | ||
| 231 | - | "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.0", "", { "os": "win32", "cpu": "x64" }, "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg=="], |
|
| 232 | - | ||
| 233 | - | "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="], |
|
| 234 | - | ||
| 235 | - | "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.0.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ=="], |
|
| 236 | - | ||
| 237 | - | "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.0.4" }, "os": "darwin", "cpu": "x64" }, "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q=="], |
|
| 238 | - | ||
| 239 | - | "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.0.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg=="], |
|
| 240 | - | ||
| 241 | - | "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.0.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ=="], |
|
| 242 | - | ||
| 243 | - | "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.0.5", "", { "os": "linux", "cpu": "arm" }, "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g=="], |
|
| 244 | - | ||
| 245 | - | "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA=="], |
|
| 246 | - | ||
| 247 | - | "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], |
|
| 248 | - | ||
| 249 | - | "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], |
|
| 250 | - | ||
| 251 | - | "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.0.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA=="], |
|
| 252 | - | ||
| 253 | - | "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw=="], |
|
| 254 | - | ||
| 255 | - | "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA=="], |
|
| 256 | - | ||
| 257 | - | "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw=="], |
|
| 258 | - | ||
| 259 | - | "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.0.5" }, "os": "linux", "cpu": "arm" }, "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ=="], |
|
| 260 | - | ||
| 261 | - | "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.0.4" }, "os": "linux", "cpu": "arm64" }, "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA=="], |
|
| 262 | - | ||
| 263 | - | "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], |
|
| 264 | - | ||
| 265 | - | "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], |
|
| 266 | - | ||
| 267 | - | "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.0.4" }, "os": "linux", "cpu": "s390x" }, "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q=="], |
|
| 268 | - | ||
| 269 | - | "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.0.4" }, "os": "linux", "cpu": "x64" }, "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA=="], |
|
| 270 | - | ||
| 271 | - | "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" }, "os": "linux", "cpu": "arm64" }, "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g=="], |
|
| 272 | - | ||
| 273 | - | "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.0.4" }, "os": "linux", "cpu": "x64" }, "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw=="], |
|
| 274 | - | ||
| 275 | - | "@img/sharp-wasm32": ["@img/sharp-wasm32@0.33.5", "", { "dependencies": { "@emnapi/runtime": "^1.2.0" }, "cpu": "none" }, "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg=="], |
|
| 276 | - | ||
| 277 | - | "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], |
|
| 278 | - | ||
| 279 | - | "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.33.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ=="], |
|
| 280 | - | ||
| 281 | - | "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.33.5", "", { "os": "win32", "cpu": "x64" }, "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg=="], |
|
| 282 | - | ||
| 283 | - | "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], |
|
| 284 | - | ||
| 285 | - | "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], |
|
| 286 | - | ||
| 287 | - | "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], |
|
| 288 | - | ||
| 289 | - | "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], |
|
| 290 | - | ||
| 291 | - | "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], |
|
| 292 | - | ||
| 293 | - | "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], |
|
| 294 | - | ||
| 295 | - | "@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=="], |
|
| 296 | - | ||
| 297 | - | "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], |
|
| 298 | - | ||
| 299 | - | "@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=="], |
|
| 300 | - | ||
| 301 | - | "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], |
|
| 302 | - | ||
| 303 | - | "@poppinss/colors": ["@poppinss/colors@4.1.6", "", { "dependencies": { "kleur": "^4.1.5" } }, "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg=="], |
|
| 304 | - | ||
| 305 | - | "@poppinss/dumper": ["@poppinss/dumper@0.6.5", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@sindresorhus/is": "^7.0.2", "supports-color": "^10.0.0" } }, "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw=="], |
|
| 306 | - | ||
| 307 | - | "@poppinss/exception": ["@poppinss/exception@1.2.3", "", {}, "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw=="], |
|
| 308 | - | ||
| 309 | - | "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], |
|
| 310 | - | ||
| 311 | - | "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], |
|
| 312 | - | ||
| 313 | - | "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.55.1", "", { "os": "android", "cpu": "arm" }, "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg=="], |
|
| 314 | - | ||
| 315 | - | "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.55.1", "", { "os": "android", "cpu": "arm64" }, "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg=="], |
|
| 316 | - | ||
| 317 | - | "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.55.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg=="], |
|
| 318 | - | ||
| 319 | - | "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.55.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ=="], |
|
| 320 | - | ||
| 321 | - | "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.55.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg=="], |
|
| 322 | - | ||
| 323 | - | "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.55.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw=="], |
|
| 324 | - | ||
| 325 | - | "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.55.1", "", { "os": "linux", "cpu": "arm" }, "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ=="], |
|
| 326 | - | ||
| 327 | - | "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.55.1", "", { "os": "linux", "cpu": "arm" }, "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg=="], |
|
| 328 | - | ||
| 329 | - | "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.55.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ=="], |
|
| 330 | - | ||
| 331 | - | "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.55.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA=="], |
|
| 332 | - | ||
| 333 | - | "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.55.1", "", { "os": "linux", "cpu": "none" }, "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g=="], |
|
| 334 | - | ||
| 335 | - | "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.55.1", "", { "os": "linux", "cpu": "none" }, "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw=="], |
|
| 336 | - | ||
| 337 | - | "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.55.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw=="], |
|
| 338 | - | ||
| 339 | - | "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.55.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw=="], |
|
| 340 | - | ||
| 341 | - | "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.55.1", "", { "os": "linux", "cpu": "none" }, "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw=="], |
|
| 342 | - | ||
| 343 | - | "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.55.1", "", { "os": "linux", "cpu": "none" }, "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg=="], |
|
| 344 | - | ||
| 345 | - | "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.55.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg=="], |
|
| 346 | - | ||
| 347 | - | "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.55.1", "", { "os": "linux", "cpu": "x64" }, "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg=="], |
|
| 348 | - | ||
| 349 | - | "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.55.1", "", { "os": "linux", "cpu": "x64" }, "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w=="], |
|
| 350 | - | ||
| 351 | - | "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.55.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg=="], |
|
| 352 | - | ||
| 353 | - | "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.55.1", "", { "os": "none", "cpu": "arm64" }, "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw=="], |
|
| 354 | - | ||
| 355 | - | "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.55.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g=="], |
|
| 356 | - | ||
| 357 | - | "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.55.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA=="], |
|
| 358 | - | ||
| 359 | - | "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.55.1", "", { "os": "win32", "cpu": "x64" }, "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg=="], |
|
| 360 | - | ||
| 361 | - | "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.55.1", "", { "os": "win32", "cpu": "x64" }, "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw=="], |
|
| 362 | - | ||
| 363 | - | "@shikijs/core": ["@shikijs/core@4.0.2", "", { "dependencies": { "@shikijs/primitive": "4.0.2", "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw=="], |
|
| 364 | - | ||
| 365 | - | "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag=="], |
|
| 366 | - | ||
| 367 | - | "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg=="], |
|
| 368 | - | ||
| 369 | - | "@shikijs/langs": ["@shikijs/langs@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2" } }, "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg=="], |
|
| 370 | - | ||
| 371 | - | "@shikijs/primitive": ["@shikijs/primitive@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw=="], |
|
| 372 | - | ||
| 373 | - | "@shikijs/themes": ["@shikijs/themes@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2" } }, "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA=="], |
|
| 374 | - | ||
| 375 | - | "@shikijs/types": ["@shikijs/types@4.0.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg=="], |
|
| 376 | - | ||
| 377 | - | "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], |
|
| 378 | - | ||
| 379 | - | "@sindresorhus/is": ["@sindresorhus/is@7.2.0", "", {}, "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw=="], |
|
| 380 | - | ||
| 381 | - | "@speed-highlight/core": ["@speed-highlight/core@1.2.14", "", {}, "sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA=="], |
|
| 382 | - | ||
| 383 | - | "@tailwindcss/aspect-ratio": ["@tailwindcss/aspect-ratio@0.4.2", "", { "peerDependencies": { "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" } }, "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ=="], |
|
| 384 | - | ||
| 385 | - | "@tailwindcss/typography": ["@tailwindcss/typography@0.5.19", "", { "dependencies": { "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg=="], |
|
| 386 | - | ||
| 387 | - | "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], |
|
| 388 | - | ||
| 389 | - | "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], |
|
| 390 | - | ||
| 391 | - | "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], |
|
| 392 | - | ||
| 393 | - | "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], |
|
| 394 | - | ||
| 395 | - | "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], |
|
| 396 | - | ||
| 397 | - | "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], |
|
| 398 | - | ||
| 399 | - | "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], |
|
| 400 | - | ||
| 401 | - | "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], |
|
| 402 | - | ||
| 403 | - | "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], |
|
| 404 | - | ||
| 405 | - | "@types/linkify-it": ["@types/linkify-it@5.0.0", "", {}, "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q=="], |
|
| 406 | - | ||
| 407 | - | "@types/markdown-it": ["@types/markdown-it@14.1.2", "", { "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog=="], |
|
| 408 | - | ||
| 409 | - | "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], |
|
| 410 | - | ||
| 411 | - | "@types/mdurl": ["@types/mdurl@2.0.0", "", {}, "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg=="], |
|
| 412 | - | ||
| 413 | - | "@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], |
|
| 414 | - | ||
| 415 | - | "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], |
|
| 416 | - | ||
| 417 | - | "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], |
|
| 418 | - | ||
| 419 | - | "@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="], |
|
| 420 | - | ||
| 421 | - | "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], |
|
| 422 | - | ||
| 423 | - | "@types/react": ["@types/react@18.3.27", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" } }, "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w=="], |
|
| 424 | - | ||
| 425 | - | "@types/react-dom": ["@types/react-dom@18.3.7", "", { "peerDependencies": { "@types/react": "^18.0.0" } }, "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ=="], |
|
| 426 | - | ||
| 427 | - | "@types/sanitize-html": ["@types/sanitize-html@2.16.0", "", { "dependencies": { "htmlparser2": "^8.0.0" } }, "sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw=="], |
|
| 428 | - | ||
| 429 | - | "@types/sax": ["@types/sax@1.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A=="], |
|
| 430 | - | ||
| 431 | - | "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], |
|
| 432 | - | ||
| 433 | - | "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], |
|
| 434 | - | ||
| 435 | - | "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], |
|
| 436 | - | ||
| 437 | - | "@volar/language-core": ["@volar/language-core@2.4.27", "", { "dependencies": { "@volar/source-map": "2.4.27" } }, "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ=="], |
|
| 438 | - | ||
| 439 | - | "@volar/source-map": ["@volar/source-map@2.4.27", "", {}, "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg=="], |
|
| 440 | - | ||
| 441 | - | "@volar/typescript": ["@volar/typescript@2.4.27", "", { "dependencies": { "@volar/language-core": "2.4.27", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg=="], |
|
| 442 | - | ||
| 443 | - | "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], |
|
| 444 | - | ||
| 445 | - | "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], |
|
| 446 | - | ||
| 447 | - | "acorn-walk": ["acorn-walk@8.3.2", "", {}, "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A=="], |
|
| 448 | - | ||
| 449 | - | "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], |
|
| 450 | - | ||
| 451 | - | "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], |
|
| 452 | - | ||
| 453 | - | "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], |
|
| 454 | - | ||
| 455 | - | "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], |
|
| 456 | - | ||
| 457 | - | "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], |
|
| 458 | - | ||
| 459 | - | "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], |
|
| 460 | - | ||
| 461 | - | "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], |
|
| 462 | - | ||
| 463 | - | "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], |
|
| 464 | - | ||
| 465 | - | "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], |
|
| 466 | - | ||
| 467 | - | "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], |
|
| 468 | - | ||
| 469 | - | "astro": ["astro@5.16.7", "", { "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", "@astrojs/markdown-remark": "6.3.10", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "acorn": "^8.15.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.3.1", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.1.1", "cssesc": "^3.0.0", "debug": "^4.4.3", "deterministic-object-hash": "^2.0.2", "devalue": "^5.6.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.7.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.4.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.1", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.1", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.3", "shiki": "^3.20.0", "smol-toml": "^1.6.0", "svgo": "^4.0.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.7.1", "unist-util-visit": "^5.0.0", "unstorage": "^1.17.3", "vfile": "^6.0.3", "vite": "^6.4.1", "vitefu": "^1.1.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.3", "zod": "^3.25.76", "zod-to-json-schema": "^3.25.1", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "astro.js" } }, "sha512-Kfv7FKisFR+THvmojXWtvJGRCvQ4D9przguE9XdeUtS464ned6hvbgmyFDvPzyaNmDtkHGNpPwAQ9tgFcVqp+Q=="], |
|
| 470 | - | ||
| 471 | - | "autoprefixer": ["autoprefixer@10.4.23", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-lite": "^1.0.30001760", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA=="], |
|
| 472 | - | ||
| 473 | - | "await-lock": ["await-lock@2.2.2", "", {}, "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw=="], |
|
| 474 | - | ||
| 475 | - | "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], |
|
| 476 | - | ||
| 477 | - | "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], |
|
| 478 | - | ||
| 479 | - | "base-64": ["base-64@1.0.0", "", {}, "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="], |
|
| 480 | - | ||
| 481 | - | "baseline-browser-mapping": ["baseline-browser-mapping@2.9.12", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-Mij6Lij93pTAIsSYy5cyBQ975Qh9uLEc5rwGTpomiZeXZL9yIS6uORJakb3ScHgfs0serMMfIbXzokPMuEiRyw=="], |
|
| 482 | - | ||
| 483 | - | "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], |
|
| 484 | - | ||
| 485 | - | "blake3-wasm": ["blake3-wasm@2.1.5", "", {}, "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g=="], |
|
| 486 | - | ||
| 487 | - | "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], |
|
| 488 | - | ||
| 489 | - | "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], |
|
| 490 | - | ||
| 491 | - | "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], |
|
| 492 | - | ||
| 493 | - | "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], |
|
| 494 | - | ||
| 495 | - | "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], |
|
| 496 | - | ||
| 497 | - | "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], |
|
| 498 | - | ||
| 499 | - | "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], |
|
| 500 | - | ||
| 501 | - | "caniuse-lite": ["caniuse-lite@1.0.30001762", "", {}, "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw=="], |
|
| 502 | - | ||
| 503 | - | "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], |
|
| 504 | - | ||
| 505 | - | "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], |
|
| 506 | - | ||
| 507 | - | "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], |
|
| 508 | - | ||
| 509 | - | "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], |
|
| 510 | - | ||
| 511 | - | "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], |
|
| 512 | - | ||
| 513 | - | "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], |
|
| 514 | - | ||
| 515 | - | "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], |
|
| 516 | - | ||
| 517 | - | "ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], |
|
| 518 | - | ||
| 519 | - | "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], |
|
| 520 | - | ||
| 521 | - | "client": ["client@workspace:packages/client"], |
|
| 522 | - | ||
| 523 | - | "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], |
|
| 524 | - | ||
| 525 | - | "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], |
|
| 526 | - | ||
| 527 | - | "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], |
|
| 528 | - | ||
| 529 | - | "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], |
|
| 530 | - | ||
| 531 | - | "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], |
|
| 532 | - | ||
| 533 | - | "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], |
|
| 534 | - | ||
| 535 | - | "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], |
|
| 536 | - | ||
| 537 | - | "commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], |
|
| 538 | - | ||
| 539 | - | "common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], |
|
| 540 | - | ||
| 541 | - | "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], |
|
| 542 | - | ||
| 543 | - | "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], |
|
| 544 | - | ||
| 545 | - | "cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], |
|
| 546 | - | ||
| 547 | - | "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], |
|
| 548 | - | ||
| 549 | - | "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], |
|
| 550 | - | ||
| 551 | - | "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], |
|
| 552 | - | ||
| 553 | - | "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], |
|
| 554 | - | ||
| 555 | - | "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], |
|
| 556 | - | ||
| 557 | - | "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], |
|
| 558 | - | ||
| 559 | - | "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], |
|
| 560 | - | ||
| 561 | - | "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], |
|
| 562 | - | ||
| 563 | - | "decode-named-character-reference": ["decode-named-character-reference@1.2.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q=="], |
|
| 564 | - | ||
| 565 | - | "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], |
|
| 566 | - | ||
| 567 | - | "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], |
|
| 568 | - | ||
| 569 | - | "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], |
|
| 570 | - | ||
| 571 | - | "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], |
|
| 572 | - | ||
| 573 | - | "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], |
|
| 574 | - | ||
| 575 | - | "deterministic-object-hash": ["deterministic-object-hash@2.0.2", "", { "dependencies": { "base-64": "^1.0.0" } }, "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ=="], |
|
| 576 | - | ||
| 577 | - | "devalue": ["devalue@5.6.1", "", {}, "sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A=="], |
|
| 578 | - | ||
| 579 | - | "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], |
|
| 580 | - | ||
| 581 | - | "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], |
|
| 582 | - | ||
| 583 | - | "diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="], |
|
| 584 | - | ||
| 585 | - | "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], |
|
| 586 | - | ||
| 587 | - | "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], |
|
| 588 | - | ||
| 589 | - | "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], |
|
| 590 | - | ||
| 591 | - | "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], |
|
| 592 | - | ||
| 593 | - | "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], |
|
| 594 | - | ||
| 595 | - | "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], |
|
| 596 | - | ||
| 597 | - | "electron-to-chromium": ["electron-to-chromium@1.5.267", "", {}, "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw=="], |
|
| 598 | - | ||
| 599 | - | "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], |
|
| 600 | - | ||
| 601 | - | "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], |
|
| 602 | - | ||
| 603 | - | "error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="], |
|
| 604 | - | ||
| 605 | - | "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], |
|
| 606 | - | ||
| 607 | - | "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], |
|
| 608 | - | ||
| 609 | - | "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], |
|
| 610 | - | ||
| 611 | - | "esbuild": ["esbuild@0.27.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.0", "@esbuild/android-arm": "0.27.0", "@esbuild/android-arm64": "0.27.0", "@esbuild/android-x64": "0.27.0", "@esbuild/darwin-arm64": "0.27.0", "@esbuild/darwin-x64": "0.27.0", "@esbuild/freebsd-arm64": "0.27.0", "@esbuild/freebsd-x64": "0.27.0", "@esbuild/linux-arm": "0.27.0", "@esbuild/linux-arm64": "0.27.0", "@esbuild/linux-ia32": "0.27.0", "@esbuild/linux-loong64": "0.27.0", "@esbuild/linux-mips64el": "0.27.0", "@esbuild/linux-ppc64": "0.27.0", "@esbuild/linux-riscv64": "0.27.0", "@esbuild/linux-s390x": "0.27.0", "@esbuild/linux-x64": "0.27.0", "@esbuild/netbsd-arm64": "0.27.0", "@esbuild/netbsd-x64": "0.27.0", "@esbuild/openbsd-arm64": "0.27.0", "@esbuild/openbsd-x64": "0.27.0", "@esbuild/openharmony-arm64": "0.27.0", "@esbuild/sunos-x64": "0.27.0", "@esbuild/win32-arm64": "0.27.0", "@esbuild/win32-ia32": "0.27.0", "@esbuild/win32-x64": "0.27.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA=="], |
|
| 612 | - | ||
| 613 | - | "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], |
|
| 614 | - | ||
| 615 | - | "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], |
|
| 616 | - | ||
| 617 | - | "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], |
|
| 618 | - | ||
| 619 | - | "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="], |
|
| 620 | - | ||
| 621 | - | "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], |
|
| 622 | - | ||
| 623 | - | "estree-util-scope": ["estree-util-scope@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ=="], |
|
| 624 | - | ||
| 625 | - | "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], |
|
| 626 | - | ||
| 627 | - | "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="], |
|
| 628 | - | ||
| 629 | - | "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], |
|
| 630 | - | ||
| 631 | - | "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], |
|
| 632 | - | ||
| 633 | - | "exit-hook": ["exit-hook@2.2.1", "", {}, "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw=="], |
|
| 634 | - | ||
| 635 | - | "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], |
|
| 636 | - | ||
| 637 | - | "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=="], |
|
| 638 | - | ||
| 639 | - | "fast-xml-parser": ["fast-xml-parser@5.3.3", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA=="], |
|
| 640 | - | ||
| 641 | - | "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], |
|
| 642 | - | ||
| 643 | - | "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], |
|
| 644 | - | ||
| 645 | - | "feed": ["feed@5.1.0", "", { "dependencies": { "xml-js": "^1.6.11" } }, "sha512-qGNhgYygnefSkAHHrNHqC7p3R8J0/xQDS/cYUud8er/qD9EFGWyCdUDfULHTJQN1d3H3WprzVwMc9MfB4J50Wg=="], |
|
| 646 | - | ||
| 647 | - | "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], |
|
| 648 | - | ||
| 649 | - | "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], |
|
| 650 | - | ||
| 651 | - | "fontace": ["fontace@0.4.0", "", { "dependencies": { "fontkitten": "^1.0.0" } }, "sha512-moThBCItUe2bjZip5PF/iZClpKHGLwMvR79Kp8XpGRBrvoRSnySN4VcILdv3/MJzbhvUA5WeiUXF5o538m5fvg=="], |
|
| 652 | - | ||
| 653 | - | "fontkitten": ["fontkitten@1.0.0", "", { "dependencies": { "tiny-inflate": "^1.0.3" } }, "sha512-b0RdzQeztiiUFWEDzq6Ka26qkNVNLCehoRtifOIGNbQ4CfxyYRh73fyWaQX/JshPVcueITOEeoSWPy5XQv8FUg=="], |
|
| 654 | - | ||
| 655 | - | "fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="], |
|
| 656 | - | ||
| 657 | - | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], |
|
| 658 | - | ||
| 659 | - | "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], |
|
| 660 | - | ||
| 661 | - | "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], |
|
| 662 | - | ||
| 663 | - | "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], |
|
| 664 | - | ||
| 665 | - | "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], |
|
| 666 | - | ||
| 667 | - | "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], |
|
| 668 | - | ||
| 669 | - | "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], |
|
| 670 | - | ||
| 671 | - | "h3": ["h3@1.15.4", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.2", "radix3": "^1.1.2", "ufo": "^1.6.1", "uncrypto": "^0.1.3" } }, "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ=="], |
|
| 672 | - | ||
| 673 | - | "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], |
|
| 674 | - | ||
| 675 | - | "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], |
|
| 676 | - | ||
| 677 | - | "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], |
|
| 678 | - | ||
| 679 | - | "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], |
|
| 680 | - | ||
| 681 | - | "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], |
|
| 682 | - | ||
| 683 | - | "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], |
|
| 684 | - | ||
| 685 | - | "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], |
|
| 686 | - | ||
| 687 | - | "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], |
|
| 688 | - | ||
| 689 | - | "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], |
|
| 690 | - | ||
| 691 | - | "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], |
|
| 692 | - | ||
| 693 | - | "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], |
|
| 694 | - | ||
| 695 | - | "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], |
|
| 696 | - | ||
| 697 | - | "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], |
|
| 698 | - | ||
| 699 | - | "hono": ["hono@4.11.3", "", {}, "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w=="], |
|
| 700 | - | ||
| 701 | - | "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], |
|
| 702 | - | ||
| 703 | - | "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], |
|
| 704 | - | ||
| 705 | - | "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], |
|
| 706 | - | ||
| 707 | - | "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], |
|
| 708 | - | ||
| 709 | - | "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], |
|
| 710 | - | ||
| 711 | - | "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], |
|
| 712 | - | ||
| 713 | - | "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], |
|
| 714 | - | ||
| 715 | - | "is-absolute-url": ["is-absolute-url@4.0.1", "", {}, "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A=="], |
|
| 716 | - | ||
| 717 | - | "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], |
|
| 718 | - | ||
| 719 | - | "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], |
|
| 720 | - | ||
| 721 | - | "is-arrayish": ["is-arrayish@0.3.4", "", {}, "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA=="], |
|
| 722 | - | ||
| 723 | - | "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], |
|
| 724 | - | ||
| 725 | - | "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], |
|
| 726 | - | ||
| 727 | - | "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], |
|
| 728 | - | ||
| 729 | - | "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], |
|
| 730 | - | ||
| 731 | - | "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], |
|
| 732 | - | ||
| 733 | - | "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], |
|
| 734 | - | ||
| 735 | - | "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], |
|
| 736 | - | ||
| 737 | - | "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], |
|
| 738 | - | ||
| 739 | - | "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], |
|
| 740 | - | ||
| 741 | - | "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], |
|
| 742 | - | ||
| 743 | - | "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], |
|
| 744 | - | ||
| 745 | - | "is-plain-object": ["is-plain-object@5.0.0", "", {}, "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="], |
|
| 746 | - | ||
| 747 | - | "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], |
|
| 748 | - | ||
| 749 | - | "iso-datestring-validator": ["iso-datestring-validator@2.2.2", "", {}, "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="], |
|
| 750 | - | ||
| 751 | - | "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], |
|
| 752 | - | ||
| 753 | - | "jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], |
|
| 754 | - | ||
| 755 | - | "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], |
|
| 756 | - | ||
| 757 | - | "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], |
|
| 758 | - | ||
| 759 | - | "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], |
|
| 760 | - | ||
| 761 | - | "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], |
|
| 762 | - | ||
| 763 | - | "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], |
|
| 764 | - | ||
| 765 | - | "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], |
|
| 766 | - | ||
| 767 | - | "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], |
|
| 768 | - | ||
| 769 | - | "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], |
|
| 770 | - | ||
| 771 | - | "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], |
|
| 772 | - | ||
| 773 | - | "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=="], |
|
| 774 | - | ||
| 775 | - | "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], |
|
| 776 | - | ||
| 777 | - | "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], |
|
| 778 | - | ||
| 779 | - | "magicast": ["magicast@0.5.1", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "source-map-js": "^1.2.1" } }, "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw=="], |
|
| 780 | - | ||
| 781 | - | "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], |
|
| 782 | - | ||
| 783 | - | "markdown-it": ["markdown-it@14.1.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg=="], |
|
| 784 | - | ||
| 785 | - | "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], |
|
| 786 | - | ||
| 787 | - | "mdast-util-definitions": ["mdast-util-definitions@6.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="], |
|
| 788 | - | ||
| 789 | - | "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], |
|
| 790 | - | ||
| 791 | - | "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=="], |
|
| 792 | - | ||
| 793 | - | "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], |
|
| 794 | - | ||
| 795 | - | "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], |
|
| 796 | - | ||
| 797 | - | "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], |
|
| 798 | - | ||
| 799 | - | "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], |
|
| 800 | - | ||
| 801 | - | "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], |
|
| 802 | - | ||
| 803 | - | "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], |
|
| 804 | - | ||
| 805 | - | "mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="], |
|
| 806 | - | ||
| 807 | - | "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], |
|
| 808 | - | ||
| 809 | - | "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], |
|
| 810 | - | ||
| 811 | - | "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], |
|
| 812 | - | ||
| 813 | - | "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], |
|
| 814 | - | ||
| 815 | - | "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], |
|
| 816 | - | ||
| 817 | - | "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=="], |
|
| 818 | - | ||
| 819 | - | "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], |
|
| 820 | - | ||
| 821 | - | "mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], |
|
| 822 | - | ||
| 823 | - | "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], |
|
| 824 | - | ||
| 825 | - | "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], |
|
| 826 | - | ||
| 827 | - | "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=="], |
|
| 828 | - | ||
| 829 | - | "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=="], |
|
| 830 | - | ||
| 831 | - | "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], |
|
| 832 | - | ||
| 833 | - | "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], |
|
| 834 | - | ||
| 835 | - | "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], |
|
| 836 | - | ||
| 837 | - | "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], |
|
| 838 | - | ||
| 839 | - | "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "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-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], |
|
| 840 | - | ||
| 841 | - | "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], |
|
| 842 | - | ||
| 843 | - | "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "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-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], |
|
| 844 | - | ||
| 845 | - | "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="], |
|
| 846 | - | ||
| 847 | - | "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="], |
|
| 848 | - | ||
| 849 | - | "micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="], |
|
| 850 | - | ||
| 851 | - | "micromark-extension-mdxjs": ["micromark-extension-mdxjs@3.0.0", "", { "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "micromark-extension-mdx-expression": "^3.0.0", "micromark-extension-mdx-jsx": "^3.0.0", "micromark-extension-mdx-md": "^2.0.0", "micromark-extension-mdxjs-esm": "^3.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ=="], |
|
| 852 | - | ||
| 853 | - | "micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="], |
|
| 854 | - | ||
| 855 | - | "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=="], |
|
| 856 | - | ||
| 857 | - | "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=="], |
|
| 858 | - | ||
| 859 | - | "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="], |
|
| 860 | - | ||
| 861 | - | "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=="], |
|
| 862 | - | ||
| 863 | - | "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=="], |
|
| 864 | - | ||
| 865 | - | "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=="], |
|
| 866 | - | ||
| 867 | - | "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=="], |
|
| 868 | - | ||
| 869 | - | "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], |
|
| 870 | - | ||
| 871 | - | "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=="], |
|
| 872 | - | ||
| 873 | - | "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=="], |
|
| 874 | - | ||
| 875 | - | "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=="], |
|
| 876 | - | ||
| 877 | - | "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=="], |
|
| 878 | - | ||
| 879 | - | "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], |
|
| 880 | - | ||
| 881 | - | "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg=="], |
|
| 882 | - | ||
| 883 | - | "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], |
|
| 884 | - | ||
| 885 | - | "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], |
|
| 886 | - | ||
| 887 | - | "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], |
|
| 888 | - | ||
| 889 | - | "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=="], |
|
| 890 | - | ||
| 891 | - | "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=="], |
|
| 892 | - | ||
| 893 | - | "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], |
|
| 894 | - | ||
| 895 | - | "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], |
|
| 896 | - | ||
| 897 | - | "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], |
|
| 898 | - | ||
| 899 | - | "mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="], |
|
| 900 | - | ||
| 901 | - | "miniflare": ["miniflare@4.20260107.0", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "8.14.0", "acorn-walk": "8.3.2", "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", "sharp": "^0.33.5", "stoppable": "1.1.0", "undici": "7.14.0", "workerd": "1.20260107.1", "ws": "8.18.0", "youch": "4.1.0-beta.10", "zod": "^3.25.76" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-X93sXczqbBq9ixoM6jnesmdTqp+4baVC/aM/DuPpRS0LK0XtcqaO75qPzNEvDEzBAHxwMAWRIum/9hg32YB8iA=="], |
|
| 902 | - | ||
| 903 | - | "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], |
|
| 904 | - | ||
| 905 | - | "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], |
|
| 906 | - | ||
| 907 | - | "multiformats": ["multiformats@9.9.0", "", {}, "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="], |
|
| 908 | - | ||
| 909 | - | "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], |
|
| 910 | - | ||
| 911 | - | "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], |
|
| 912 | - | ||
| 913 | - | "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], |
|
| 914 | - | ||
| 915 | - | "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], |
|
| 916 | - | ||
| 917 | - | "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], |
|
| 918 | - | ||
| 919 | - | "node-mock-http": ["node-mock-http@1.0.4", "", {}, "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="], |
|
| 920 | - | ||
| 921 | - | "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], |
|
| 922 | - | ||
| 923 | - | "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], |
|
| 924 | - | ||
| 925 | - | "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], |
|
| 926 | - | ||
| 927 | - | "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], |
|
| 928 | - | ||
| 929 | - | "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], |
|
| 930 | - | ||
| 931 | - | "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], |
|
| 932 | - | ||
| 933 | - | "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], |
|
| 934 | - | ||
| 935 | - | "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], |
|
| 936 | - | ||
| 937 | - | "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], |
|
| 938 | - | ||
| 939 | - | "p-limit": ["p-limit@6.2.0", "", { "dependencies": { "yocto-queue": "^1.1.1" } }, "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA=="], |
|
| 940 | - | ||
| 941 | - | "p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], |
|
| 942 | - | ||
| 943 | - | "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], |
|
| 944 | - | ||
| 945 | - | "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], |
|
| 946 | - | ||
| 947 | - | "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], |
|
| 948 | - | ||
| 949 | - | "parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], |
|
| 950 | - | ||
| 951 | - | "parse-srcset": ["parse-srcset@1.0.2", "", {}, "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q=="], |
|
| 952 | - | ||
| 953 | - | "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], |
|
| 954 | - | ||
| 955 | - | "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], |
|
| 956 | - | ||
| 957 | - | "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], |
|
| 958 | - | ||
| 959 | - | "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], |
|
| 960 | - | ||
| 961 | - | "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], |
|
| 962 | - | ||
| 963 | - | "piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="], |
|
| 964 | - | ||
| 965 | - | "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], |
|
| 966 | - | ||
| 967 | - | "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], |
|
| 968 | - | ||
| 969 | - | "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], |
|
| 970 | - | ||
| 971 | - | "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], |
|
| 972 | - | ||
| 973 | - | "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], |
|
| 974 | - | ||
| 975 | - | "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], |
|
| 976 | - | ||
| 977 | - | "postcss-js": ["postcss-js@4.1.0", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw=="], |
|
| 978 | - | ||
| 979 | - | "postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], |
|
| 980 | - | ||
| 981 | - | "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], |
|
| 982 | - | ||
| 983 | - | "postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="], |
|
| 984 | - | ||
| 985 | - | "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], |
|
| 986 | - | ||
| 987 | - | "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], |
|
| 988 | - | ||
| 989 | - | "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], |
|
| 990 | - | ||
| 991 | - | "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], |
|
| 992 | - | ||
| 993 | - | "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], |
|
| 994 | - | ||
| 995 | - | "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], |
|
| 996 | - | ||
| 997 | - | "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], |
|
| 998 | - | ||
| 999 | - | "react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="], |
|
| 1000 | - | ||
| 1001 | - | "react-dom": ["react-dom@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="], |
|
| 1002 | - | ||
| 1003 | - | "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], |
|
| 1004 | - | ||
| 1005 | - | "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], |
|
| 1006 | - | ||
| 1007 | - | "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], |
|
| 1008 | - | ||
| 1009 | - | "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], |
|
| 1010 | - | ||
| 1011 | - | "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="], |
|
| 1012 | - | ||
| 1013 | - | "recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="], |
|
| 1014 | - | ||
| 1015 | - | "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="], |
|
| 1016 | - | ||
| 1017 | - | "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], |
|
| 1018 | - | ||
| 1019 | - | "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], |
|
| 1020 | - | ||
| 1021 | - | "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], |
|
| 1022 | - | ||
| 1023 | - | "rehype": ["rehype@13.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "rehype-parse": "^9.0.0", "rehype-stringify": "^10.0.0", "unified": "^11.0.0" } }, "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="], |
|
| 1024 | - | ||
| 1025 | - | "rehype-external-links": ["rehype-external-links@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-is-element": "^3.0.0", "is-absolute-url": "^4.0.0", "space-separated-tokens": "^2.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw=="], |
|
| 1026 | - | ||
| 1027 | - | "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], |
|
| 1028 | - | ||
| 1029 | - | "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], |
|
| 1030 | - | ||
| 1031 | - | "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], |
|
| 1032 | - | ||
| 1033 | - | "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], |
|
| 1034 | - | ||
| 1035 | - | "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], |
|
| 1036 | - | ||
| 1037 | - | "remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="], |
|
| 1038 | - | ||
| 1039 | - | "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=="], |
|
| 1040 | - | ||
| 1041 | - | "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], |
|
| 1042 | - | ||
| 1043 | - | "remark-smartypants": ["remark-smartypants@3.0.2", "", { "dependencies": { "retext": "^9.0.0", "retext-smartypants": "^6.0.0", "unified": "^11.0.4", "unist-util-visit": "^5.0.0" } }, "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA=="], |
|
| 1044 | - | ||
| 1045 | - | "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=="], |
|
| 1046 | - | ||
| 1047 | - | "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=="], |
|
| 1048 | - | ||
| 1049 | - | "retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], |
|
| 1050 | - | ||
| 1051 | - | "retext-latin": ["retext-latin@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "parse-latin": "^7.0.0", "unified": "^11.0.0" } }, "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA=="], |
|
| 1052 | - | ||
| 1053 | - | "retext-smartypants": ["retext-smartypants@6.2.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="], |
|
| 1054 | - | ||
| 1055 | - | "retext-stringify": ["retext-stringify@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unified": "^11.0.0" } }, "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="], |
|
| 1056 | - | ||
| 1057 | - | "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], |
|
| 1058 | - | ||
| 1059 | - | "rollup": ["rollup@4.55.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.55.1", "@rollup/rollup-android-arm64": "4.55.1", "@rollup/rollup-darwin-arm64": "4.55.1", "@rollup/rollup-darwin-x64": "4.55.1", "@rollup/rollup-freebsd-arm64": "4.55.1", "@rollup/rollup-freebsd-x64": "4.55.1", "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", "@rollup/rollup-linux-arm-musleabihf": "4.55.1", "@rollup/rollup-linux-arm64-gnu": "4.55.1", "@rollup/rollup-linux-arm64-musl": "4.55.1", "@rollup/rollup-linux-loong64-gnu": "4.55.1", "@rollup/rollup-linux-loong64-musl": "4.55.1", "@rollup/rollup-linux-ppc64-gnu": "4.55.1", "@rollup/rollup-linux-ppc64-musl": "4.55.1", "@rollup/rollup-linux-riscv64-gnu": "4.55.1", "@rollup/rollup-linux-riscv64-musl": "4.55.1", "@rollup/rollup-linux-s390x-gnu": "4.55.1", "@rollup/rollup-linux-x64-gnu": "4.55.1", "@rollup/rollup-linux-x64-musl": "4.55.1", "@rollup/rollup-openbsd-x64": "4.55.1", "@rollup/rollup-openharmony-arm64": "4.55.1", "@rollup/rollup-win32-arm64-msvc": "4.55.1", "@rollup/rollup-win32-ia32-msvc": "4.55.1", "@rollup/rollup-win32-x64-gnu": "4.55.1", "@rollup/rollup-win32-x64-msvc": "4.55.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A=="], |
|
| 1060 | - | ||
| 1061 | - | "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], |
|
| 1062 | - | ||
| 1063 | - | "sanitize-html": ["sanitize-html@2.17.0", "", { "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", "htmlparser2": "^8.0.0", "is-plain-object": "^5.0.0", "parse-srcset": "^1.0.2", "postcss": "^8.3.11" } }, "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA=="], |
|
| 1064 | - | ||
| 1065 | - | "sax": ["sax@1.4.3", "", {}, "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="], |
|
| 1066 | - | ||
| 1067 | - | "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], |
|
| 1068 | - | ||
| 1069 | - | "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], |
|
| 1070 | - | ||
| 1071 | - | "server": ["server@workspace:packages/server"], |
|
| 1072 | - | ||
| 1073 | - | "sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "0.33.5", "@img/sharp-linux-x64": "0.33.5", "@img/sharp-linuxmusl-arm64": "0.33.5", "@img/sharp-linuxmusl-x64": "0.33.5", "@img/sharp-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], |
|
| 1074 | - | ||
| 1075 | - | "shiki": ["shiki@4.0.2", "", { "dependencies": { "@shikijs/core": "4.0.2", "@shikijs/engine-javascript": "4.0.2", "@shikijs/engine-oniguruma": "4.0.2", "@shikijs/langs": "4.0.2", "@shikijs/themes": "4.0.2", "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ=="], |
|
| 1076 | - | ||
| 1077 | - | "simple-swizzle": ["simple-swizzle@0.2.4", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw=="], |
|
| 1078 | - | ||
| 1079 | - | "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], |
|
| 1080 | - | ||
| 1081 | - | "sitemap": ["sitemap@8.0.2", "", { "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.4.1" }, "bin": { "sitemap": "dist/cli.js" } }, "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ=="], |
|
| 1082 | - | ||
| 1083 | - | "smol-toml": ["smol-toml@1.6.0", "", {}, "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw=="], |
|
| 1084 | - | ||
| 1085 | - | "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], |
|
| 1086 | - | ||
| 1087 | - | "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], |
|
| 1088 | - | ||
| 1089 | - | "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], |
|
| 1090 | - | ||
| 1091 | - | "stoppable": ["stoppable@1.1.0", "", {}, "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="], |
|
| 1092 | - | ||
| 1093 | - | "stream-replace-string": ["stream-replace-string@2.0.0", "", {}, "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="], |
|
| 1094 | - | ||
| 1095 | - | "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], |
|
| 1096 | - | ||
| 1097 | - | "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], |
|
| 1098 | - | ||
| 1099 | - | "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], |
|
| 1100 | - | ||
| 1101 | - | "strnum": ["strnum@2.1.2", "", {}, "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ=="], |
|
| 1102 | - | ||
| 1103 | - | "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], |
|
| 1104 | - | ||
| 1105 | - | "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], |
|
| 1106 | - | ||
| 1107 | - | "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], |
|
| 1108 | - | ||
| 1109 | - | "supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], |
|
| 1110 | - | ||
| 1111 | - | "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], |
|
| 1112 | - | ||
| 1113 | - | "svgo": ["svgo@4.0.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.4.1" }, "bin": "./bin/svgo.js" }, "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw=="], |
|
| 1114 | - | ||
| 1115 | - | "tailwindcss": ["tailwindcss@3.4.19", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ=="], |
|
| 1116 | - | ||
| 1117 | - | "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], |
|
| 1118 | - | ||
| 1119 | - | "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], |
|
| 1120 | - | ||
| 1121 | - | "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], |
|
| 1122 | - | ||
| 1123 | - | "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], |
|
| 1124 | - | ||
| 1125 | - | "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], |
|
| 1126 | - | ||
| 1127 | - | "tlds": ["tlds@1.261.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA=="], |
|
| 1128 | - | ||
| 1129 | - | "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], |
|
| 1130 | - | ||
| 1131 | - | "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], |
|
| 1132 | - | ||
| 1133 | - | "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], |
|
| 1134 | - | ||
| 1135 | - | "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], |
|
| 1136 | - | ||
| 1137 | - | "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], |
|
| 1138 | - | ||
| 1139 | - | "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], |
|
| 1140 | - | ||
| 1141 | - | "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], |
|
| 1142 | - | ||
| 1143 | - | "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], |
|
| 1144 | - | ||
| 1145 | - | "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], |
|
| 1146 | - | ||
| 1147 | - | "ufo": ["ufo@1.6.2", "", {}, "sha512-heMioaxBcG9+Znsda5Q8sQbWnLJSl98AFDXTO80wELWEzX3hordXsTdxrIfMQoO9IY1MEnoGoPjpoKpMj+Yx0Q=="], |
|
| 1148 | - | ||
| 1149 | - | "uint8arrays": ["uint8arrays@3.0.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA=="], |
|
| 1150 | - | ||
| 1151 | - | "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], |
|
| 1152 | - | ||
| 1153 | - | "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], |
|
| 1154 | - | ||
| 1155 | - | "undici": ["undici@7.14.0", "", {}, "sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ=="], |
|
| 1156 | - | ||
| 1157 | - | "unenv": ["unenv@2.0.0-rc.24", "", { "dependencies": { "pathe": "^2.0.3" } }, "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw=="], |
|
| 1158 | - | ||
| 1159 | - | "unicode-segmenter": ["unicode-segmenter@0.14.5", "", {}, "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g=="], |
|
| 1160 | - | ||
| 1161 | - | "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=="], |
|
| 1162 | - | ||
| 1163 | - | "unifont": ["unifont@0.7.1", "", { "dependencies": { "css-tree": "^3.1.0", "ofetch": "^1.5.1", "ohash": "^2.0.11" } }, "sha512-0lg9M1cMYvXof8//wZBq6EDEfbwv4++t7+dYpXeS2ypaLuZJmUFYEwTm412/1ED/Wfo/wyzSu6kNZEr9hgRNfg=="], |
|
| 1164 | - | ||
| 1165 | - | "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], |
|
| 1166 | - | ||
| 1167 | - | "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], |
|
| 1168 | - | ||
| 1169 | - | "unist-util-modify-children": ["unist-util-modify-children@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "array-iterate": "^2.0.0" } }, "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw=="], |
|
| 1170 | - | ||
| 1171 | - | "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], |
|
| 1172 | - | ||
| 1173 | - | "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], |
|
| 1174 | - | ||
| 1175 | - | "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], |
|
| 1176 | - | ||
| 1177 | - | "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], |
|
| 1178 | - | ||
| 1179 | - | "unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], |
|
| 1180 | - | ||
| 1181 | - | "unist-util-visit-children": ["unist-util-visit-children@3.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="], |
|
| 1182 | - | ||
| 1183 | - | "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=="], |
|
| 1184 | - | ||
| 1185 | - | "unstorage": ["unstorage@1.17.3", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q=="], |
|
| 1186 | - | ||
| 1187 | - | "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], |
|
| 1188 | - | ||
| 1189 | - | "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], |
|
| 1190 | - | ||
| 1191 | - | "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], |
|
| 1192 | - | ||
| 1193 | - | "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], |
|
| 1194 | - | ||
| 1195 | - | "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], |
|
| 1196 | - | ||
| 1197 | - | "vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], |
|
| 1198 | - | ||
| 1199 | - | "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], |
|
| 1200 | - | ||
| 1201 | - | "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="], |
|
| 1202 | - | ||
| 1203 | - | "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], |
|
| 1204 | - | ||
| 1205 | - | "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], |
|
| 1206 | - | ||
| 1207 | - | "which-pm-runs": ["which-pm-runs@1.1.0", "", {}, "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="], |
|
| 1208 | - | ||
| 1209 | - | "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], |
|
| 1210 | - | ||
| 1211 | - | "workerd": ["workerd@1.20260107.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260107.1", "@cloudflare/workerd-darwin-arm64": "1.20260107.1", "@cloudflare/workerd-linux-64": "1.20260107.1", "@cloudflare/workerd-linux-arm64": "1.20260107.1", "@cloudflare/workerd-windows-64": "1.20260107.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-4ylAQJDdJZdMAUl2SbJgTa77YHpa88l6qmhiuCLNactP933+rifs7I0w1DslhUIFgydArUX5dNLAZnZhT7Bh7g=="], |
|
| 1212 | - | ||
| 1213 | - | "wrangler": ["wrangler@4.58.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.1", "@cloudflare/unenv-preset": "2.8.0", "blake3-wasm": "2.1.5", "esbuild": "0.27.0", "miniflare": "4.20260107.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20260107.1" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20260107.1" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-Jm6EYtlt8iUcznOCPSMYC54DYkwrMNESzbH0Vh3GFHv/7XVw5gBC13YJAB+nWMRGJ+6B2dMzy/NVQS4ONL51Pw=="], |
|
| 1214 | - | ||
| 1215 | - | "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], |
|
| 1216 | - | ||
| 1217 | - | "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], |
|
| 1218 | - | ||
| 1219 | - | "xml-js": ["xml-js@1.6.11", "", { "dependencies": { "sax": "^1.2.4" }, "bin": { "xml-js": "./bin/cli.js" } }, "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g=="], |
|
| 1220 | - | ||
| 1221 | - | "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], |
|
| 1222 | - | ||
| 1223 | - | "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], |
|
| 1224 | - | ||
| 1225 | - | "yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], |
|
| 1226 | - | ||
| 1227 | - | "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], |
|
| 1228 | - | ||
| 1229 | - | "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], |
|
| 1230 | - | ||
| 1231 | - | "yocto-spinner": ["yocto-spinner@0.2.3", "", { "dependencies": { "yoctocolors": "^2.1.1" } }, "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ=="], |
|
| 1232 | - | ||
| 1233 | - | "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], |
|
| 1234 | - | ||
| 1235 | - | "youch": ["youch@4.1.0-beta.10", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@poppinss/dumper": "^0.6.4", "@speed-highlight/core": "^1.2.7", "cookie": "^1.0.2", "youch-core": "^0.3.3" } }, "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ=="], |
|
| 1236 | - | ||
| 1237 | - | "youch-core": ["youch-core@0.3.3", "", { "dependencies": { "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } }, "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA=="], |
|
| 1238 | - | ||
| 1239 | - | "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], |
|
| 1240 | - | ||
| 1241 | - | "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], |
|
| 1242 | - | ||
| 1243 | - | "zod-to-ts": ["zod-to-ts@1.2.0", "", { "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" } }, "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA=="], |
|
| 1244 | - | ||
| 1245 | - | "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], |
|
| 1246 | - | ||
| 1247 | - | "@astrojs/cloudflare/wrangler": ["wrangler@4.50.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.7.11", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20251118.1", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20251118.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20251118.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-+nuZuHZxDdKmAyXOSrHlciGshCoAPiy5dM+t6mEohWm7HpXvTHmWQGUf/na9jjWlWJHCJYOWzkA1P5HBJqrIEA=="], |
|
| 1248 | - | ||
| 1249 | - | "@astrojs/markdown-remark/shiki": ["shiki@3.21.0", "", { "dependencies": { "@shikijs/core": "3.21.0", "@shikijs/engine-javascript": "3.21.0", "@shikijs/engine-oniguruma": "3.21.0", "@shikijs/langs": "3.21.0", "@shikijs/themes": "3.21.0", "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w=="], |
|
| 1250 | - | ||
| 1251 | - | "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], |
|
| 1252 | - | ||
| 1253 | - | "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], |
|
| 1254 | - | ||
| 1255 | - | "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], |
|
| 1256 | - | ||
| 1257 | - | "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], |
|
| 1258 | - | ||
| 1259 | - | "@poppinss/colors/kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], |
|
| 1260 | - | ||
| 1261 | - | "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], |
|
| 1262 | - | ||
| 1263 | - | "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], |
|
| 1264 | - | ||
| 1265 | - | "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], |
|
| 1266 | - | ||
| 1267 | - | "astro/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], |
|
| 1268 | - | ||
| 1269 | - | "astro/sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], |
|
| 1270 | - | ||
| 1271 | - | "astro/shiki": ["shiki@3.21.0", "", { "dependencies": { "@shikijs/core": "3.21.0", "@shikijs/engine-javascript": "3.21.0", "@shikijs/engine-oniguruma": "3.21.0", "@shikijs/langs": "3.21.0", "@shikijs/themes": "3.21.0", "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w=="], |
|
| 1272 | - | ||
| 1273 | - | "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], |
|
| 1274 | - | ||
| 1275 | - | "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], |
|
| 1276 | - | ||
| 1277 | - | "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], |
|
| 1278 | - | ||
| 1279 | - | "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], |
|
| 1280 | - | ||
| 1281 | - | "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], |
|
| 1282 | - | ||
| 1283 | - | "miniflare/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], |
|
| 1284 | - | ||
| 1285 | - | "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], |
|
| 1286 | - | ||
| 1287 | - | "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], |
|
| 1288 | - | ||
| 1289 | - | "postcss-nested/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], |
|
| 1290 | - | ||
| 1291 | - | "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], |
|
| 1292 | - | ||
| 1293 | - | "server/wrangler": ["wrangler@4.57.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.1", "@cloudflare/unenv-preset": "2.8.0", "blake3-wasm": "2.1.5", "esbuild": "0.27.0", "miniflare": "4.20260103.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20260103.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20260103.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-JTVHmL2zr5PUJ22kT21fNXZBgVm4WzXSHsVc+VVIRANBVgTwn6EikXBx1DMyvHDQP6vkaojuyrRjeasB7rxV9A=="], |
|
| 1294 | - | ||
| 1295 | - | "svgo/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], |
|
| 1296 | - | ||
| 1297 | - | "tailwindcss/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], |
|
| 1298 | - | ||
| 1299 | - | "unstorage/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], |
|
| 1300 | - | ||
| 1301 | - | "vite/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], |
|
| 1302 | - | ||
| 1303 | - | "@astrojs/cloudflare/wrangler/@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.0", "", { "dependencies": { "mime": "^3.0.0" } }, "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA=="], |
|
| 1304 | - | ||
| 1305 | - | "@astrojs/cloudflare/wrangler/@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.7.11", "", { "peerDependencies": { "unenv": "2.0.0-rc.24", "workerd": "^1.20251106.1" }, "optionalPeers": ["workerd"] }, "sha512-se23f1D4PxKrMKOq+Stz+Yn7AJ9ITHcEecXo2Yjb+UgbUDCEBch1FXQC6hx6uT5fNA3kmX3mfzeZiUmpK1W9IQ=="], |
|
| 1306 | - | ||
| 1307 | - | "@astrojs/cloudflare/wrangler/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], |
|
| 1308 | - | ||
| 1309 | - | "@astrojs/cloudflare/wrangler/miniflare": ["miniflare@4.20251118.1", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "8.14.0", "acorn-walk": "8.3.2", "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", "sharp": "^0.33.5", "stoppable": "1.1.0", "undici": "7.14.0", "workerd": "1.20251118.0", "ws": "8.18.0", "youch": "4.1.0-beta.10", "zod": "3.22.3" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-uLSAE/DvOm392fiaig4LOaatxLjM7xzIniFRG5Y3yF9IduOYLLK/pkCPQNCgKQH3ou0YJRHnTN+09LPfqYNTQQ=="], |
|
| 1310 | - | ||
| 1311 | - | "@astrojs/cloudflare/wrangler/workerd": ["workerd@1.20251118.0", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20251118.0", "@cloudflare/workerd-darwin-arm64": "1.20251118.0", "@cloudflare/workerd-linux-64": "1.20251118.0", "@cloudflare/workerd-linux-arm64": "1.20251118.0", "@cloudflare/workerd-windows-64": "1.20251118.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-Om5ns0Lyx/LKtYI04IV0bjIrkBgoFNg0p6urzr2asekJlfP18RqFzyqMFZKf0i9Gnjtz/JfAS/Ol6tjCe5JJsQ=="], |
|
| 1312 | - | ||
| 1313 | - | "@astrojs/markdown-remark/shiki/@shikijs/core": ["@shikijs/core@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA=="], |
|
| 1314 | - | ||
| 1315 | - | "@astrojs/markdown-remark/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ=="], |
|
| 1316 | - | ||
| 1317 | - | "@astrojs/markdown-remark/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ=="], |
|
| 1318 | - | ||
| 1319 | - | "@astrojs/markdown-remark/shiki/@shikijs/langs": ["@shikijs/langs@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0" } }, "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA=="], |
|
| 1320 | - | ||
| 1321 | - | "@astrojs/markdown-remark/shiki/@shikijs/themes": ["@shikijs/themes@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0" } }, "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw=="], |
|
| 1322 | - | ||
| 1323 | - | "@astrojs/markdown-remark/shiki/@shikijs/types": ["@shikijs/types@3.21.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA=="], |
|
| 1324 | - | ||
| 1325 | - | "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], |
|
| 1326 | - | ||
| 1327 | - | "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], |
|
| 1328 | - | ||
| 1329 | - | "astro/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], |
|
| 1330 | - | ||
| 1331 | - | "astro/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], |
|
| 1332 | - | ||
| 1333 | - | "astro/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], |
|
| 1334 | - | ||
| 1335 | - | "astro/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], |
|
| 1336 | - | ||
| 1337 | - | "astro/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], |
|
| 1338 | - | ||
| 1339 | - | "astro/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], |
|
| 1340 | - | ||
| 1341 | - | "astro/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], |
|
| 1342 | - | ||
| 1343 | - | "astro/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], |
|
| 1344 | - | ||
| 1345 | - | "astro/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], |
|
| 1346 | - | ||
| 1347 | - | "astro/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], |
|
| 1348 | - | ||
| 1349 | - | "astro/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], |
|
| 1350 | - | ||
| 1351 | - | "astro/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], |
|
| 1352 | - | ||
| 1353 | - | "astro/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], |
|
| 1354 | - | ||
| 1355 | - | "astro/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], |
|
| 1356 | - | ||
| 1357 | - | "astro/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], |
|
| 1358 | - | ||
| 1359 | - | "astro/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], |
|
| 1360 | - | ||
| 1361 | - | "astro/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], |
|
| 1362 | - | ||
| 1363 | - | "astro/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], |
|
| 1364 | - | ||
| 1365 | - | "astro/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], |
|
| 1366 | - | ||
| 1367 | - | "astro/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], |
|
| 1368 | - | ||
| 1369 | - | "astro/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], |
|
| 1370 | - | ||
| 1371 | - | "astro/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], |
|
| 1372 | - | ||
| 1373 | - | "astro/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], |
|
| 1374 | - | ||
| 1375 | - | "astro/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], |
|
| 1376 | - | ||
| 1377 | - | "astro/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], |
|
| 1378 | - | ||
| 1379 | - | "astro/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], |
|
| 1380 | - | ||
| 1381 | - | "astro/sharp/@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], |
|
| 1382 | - | ||
| 1383 | - | "astro/sharp/@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], |
|
| 1384 | - | ||
| 1385 | - | "astro/sharp/@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], |
|
| 1386 | - | ||
| 1387 | - | "astro/sharp/@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], |
|
| 1388 | - | ||
| 1389 | - | "astro/sharp/@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="], |
|
| 1390 | - | ||
| 1391 | - | "astro/sharp/@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], |
|
| 1392 | - | ||
| 1393 | - | "astro/sharp/@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], |
|
| 1394 | - | ||
| 1395 | - | "astro/sharp/@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], |
|
| 1396 | - | ||
| 1397 | - | "astro/sharp/@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="], |
|
| 1398 | - | ||
| 1399 | - | "astro/sharp/@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="], |
|
| 1400 | - | ||
| 1401 | - | "astro/sharp/@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="], |
|
| 1402 | - | ||
| 1403 | - | "astro/sharp/@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], |
|
| 1404 | - | ||
| 1405 | - | "astro/sharp/@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], |
|
| 1406 | - | ||
| 1407 | - | "astro/sharp/@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], |
|
| 1408 | - | ||
| 1409 | - | "astro/sharp/@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="], |
|
| 1410 | - | ||
| 1411 | - | "astro/sharp/@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], |
|
| 1412 | - | ||
| 1413 | - | "astro/sharp/@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], |
|
| 1414 | - | ||
| 1415 | - | "astro/sharp/@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], |
|
| 1416 | - | ||
| 1417 | - | "astro/sharp/@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], |
|
| 1418 | - | ||
| 1419 | - | "astro/shiki/@shikijs/core": ["@shikijs/core@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA=="], |
|
| 1420 | - | ||
| 1421 | - | "astro/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ=="], |
|
| 1422 | - | ||
| 1423 | - | "astro/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ=="], |
|
| 1424 | - | ||
| 1425 | - | "astro/shiki/@shikijs/langs": ["@shikijs/langs@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0" } }, "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA=="], |
|
| 1426 | - | ||
| 1427 | - | "astro/shiki/@shikijs/themes": ["@shikijs/themes@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0" } }, "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw=="], |
|
| 1428 | - | ||
| 1429 | - | "astro/shiki/@shikijs/types": ["@shikijs/types@3.21.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA=="], |
|
| 1430 | - | ||
| 1431 | - | "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], |
|
| 1432 | - | ||
| 1433 | - | "server/wrangler/miniflare": ["miniflare@4.20260103.0", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "8.14.0", "acorn-walk": "8.3.2", "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", "sharp": "^0.33.5", "stoppable": "1.1.0", "undici": "7.14.0", "workerd": "1.20260103.0", "ws": "8.18.0", "youch": "4.1.0-beta.10", "zod": "^3.25.76" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-iuSU0e+KMuFD7gxuPKoJXFi6cvDu/w/lQP4Wayq3v+YsmZ0dVMAJY9LMZ0TKMLicdAj2So9WcReAhJmJJ9Ppnw=="], |
|
| 1434 | - | ||
| 1435 | - | "server/wrangler/workerd": ["workerd@1.20260103.0", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260103.0", "@cloudflare/workerd-darwin-arm64": "1.20260103.0", "@cloudflare/workerd-linux-64": "1.20260103.0", "@cloudflare/workerd-linux-arm64": "1.20260103.0", "@cloudflare/workerd-windows-64": "1.20260103.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-uB5eliFHVCdPD3uaPGe6zNRFjWzijOb26c0/1oXKmQFUSUR7GFPCTTd0iJXZAGKZDZ0DNgzQCPoolWelz6W5Zg=="], |
|
| 1436 | - | ||
| 1437 | - | "unstorage/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], |
|
| 1438 | - | ||
| 1439 | - | "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], |
|
| 1440 | - | ||
| 1441 | - | "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], |
|
| 1442 | - | ||
| 1443 | - | "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], |
|
| 1444 | - | ||
| 1445 | - | "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], |
|
| 1446 | - | ||
| 1447 | - | "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], |
|
| 1448 | - | ||
| 1449 | - | "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], |
|
| 1450 | - | ||
| 1451 | - | "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], |
|
| 1452 | - | ||
| 1453 | - | "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], |
|
| 1454 | - | ||
| 1455 | - | "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], |
|
| 1456 | - | ||
| 1457 | - | "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], |
|
| 1458 | - | ||
| 1459 | - | "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], |
|
| 1460 | - | ||
| 1461 | - | "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], |
|
| 1462 | - | ||
| 1463 | - | "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], |
|
| 1464 | - | ||
| 1465 | - | "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], |
|
| 1466 | - | ||
| 1467 | - | "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], |
|
| 1468 | - | ||
| 1469 | - | "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], |
|
| 1470 | - | ||
| 1471 | - | "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], |
|
| 1472 | - | ||
| 1473 | - | "vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], |
|
| 1474 | - | ||
| 1475 | - | "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], |
|
| 1476 | - | ||
| 1477 | - | "vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], |
|
| 1478 | - | ||
| 1479 | - | "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], |
|
| 1480 | - | ||
| 1481 | - | "vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], |
|
| 1482 | - | ||
| 1483 | - | "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], |
|
| 1484 | - | ||
| 1485 | - | "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], |
|
| 1486 | - | ||
| 1487 | - | "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], |
|
| 1488 | - | ||
| 1489 | - | "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], |
|
| 1490 | - | ||
| 1491 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], |
|
| 1492 | - | ||
| 1493 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], |
|
| 1494 | - | ||
| 1495 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], |
|
| 1496 | - | ||
| 1497 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], |
|
| 1498 | - | ||
| 1499 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], |
|
| 1500 | - | ||
| 1501 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], |
|
| 1502 | - | ||
| 1503 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], |
|
| 1504 | - | ||
| 1505 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], |
|
| 1506 | - | ||
| 1507 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], |
|
| 1508 | - | ||
| 1509 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], |
|
| 1510 | - | ||
| 1511 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], |
|
| 1512 | - | ||
| 1513 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], |
|
| 1514 | - | ||
| 1515 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], |
|
| 1516 | - | ||
| 1517 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], |
|
| 1518 | - | ||
| 1519 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], |
|
| 1520 | - | ||
| 1521 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], |
|
| 1522 | - | ||
| 1523 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], |
|
| 1524 | - | ||
| 1525 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], |
|
| 1526 | - | ||
| 1527 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], |
|
| 1528 | - | ||
| 1529 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], |
|
| 1530 | - | ||
| 1531 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], |
|
| 1532 | - | ||
| 1533 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], |
|
| 1534 | - | ||
| 1535 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], |
|
| 1536 | - | ||
| 1537 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], |
|
| 1538 | - | ||
| 1539 | - | "@astrojs/cloudflare/wrangler/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], |
|
| 1540 | - | ||
| 1541 | - | "@astrojs/cloudflare/wrangler/miniflare/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], |
|
| 1542 | - | ||
| 1543 | - | "@astrojs/cloudflare/wrangler/miniflare/zod": ["zod@3.22.3", "", {}, "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug=="], |
|
| 1544 | - | ||
| 1545 | - | "@astrojs/cloudflare/wrangler/workerd/@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20251118.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-UmWmYEYS/LkK/4HFKN6xf3Hk8cw70PviR+ftr3hUvs9HYZS92IseZEp16pkL6ZBETrPRpZC7OrzoYF7ky6kHsg=="], |
|
| 1546 | - | ||
| 1547 | - | "@astrojs/cloudflare/wrangler/workerd/@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20251118.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RockU7Qzf4rxNfY1lx3j4rvwutNLjTIX7rr2hogbQ4mzLo8Ea40/oZTzXVxl+on75joLBrt0YpenGW8o/r44QA=="], |
|
| 1548 | - | ||
| 1549 | - | "@astrojs/cloudflare/wrangler/workerd/@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20251118.0", "", { "os": "linux", "cpu": "x64" }, "sha512-aT97GnOAbJDuuOG0zPVhgRk0xFtB1dzBMrxMZ09eubDLoU4djH4BuORaqvxNRMmHgKfa4T6drthckT0NjUvBdw=="], |
|
| 1550 | - | ||
| 1551 | - | "@astrojs/cloudflare/wrangler/workerd/@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20251118.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-bXZPJcwlq00MPOXqP7DMWjr+goYj0+Fqyw6zgEC2M3FR1+SWla4yjghnZ4IdpN+H1t7VbUrsi5np2LzMUFs0NA=="], |
|
| 1552 | - | ||
| 1553 | - | "@astrojs/cloudflare/wrangler/workerd/@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20251118.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2LV99AHSlpr8WcCb/BYbU2QsYkXLUL1izN6YKWkN9Eibv80JKX0RtgmD3dfmajE5sNvClavxZejgzVvHD9N9Ag=="], |
|
| 1554 | - | ||
| 1555 | - | "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], |
|
| 1556 | - | ||
| 1557 | - | "server/wrangler/miniflare/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], |
|
| 1558 | - | ||
| 1559 | - | "server/wrangler/workerd/@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260103.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-jhpwADN14T+plfDt3ljYAJL2+nTdTJQ3I/OpedweOz1l2jYZITRD+EI0zUpOzGJRqCE1k5SCkHUXINsWaE6aKg=="], |
|
| 1560 | - | ||
| 1561 | - | "server/wrangler/workerd/@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260103.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RoVMzq+TMoKTPr0aewwRasJumMqNYlBJuTC7ZwPAjfjuqedkLfvLx8GsXkW5zpyUMEsUciRh4DPJfDPKVgAy9g=="], |
|
| 1562 | - | ||
| 1563 | - | "server/wrangler/workerd/@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260103.0", "", { "os": "linux", "cpu": "x64" }, "sha512-JQN4FnsTiBgtLF/9ABcgJjew+QxonE3ZxnqCT355x45mksJuArjD2iZ4kLZQ16OSEAkno8fmVw0VvljdGd41kg=="], |
|
| 1564 | - | ||
| 1565 | - | "server/wrangler/workerd/@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260103.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-kjMHGrnnZrOyQnXuJ8YpblKtjkv45o+utIYk4AZUoaUBbEltwn7CXucDa0MG0jsDDvCCwRabdaJSAXHV6JB/ZQ=="], |
|
| 1566 | - | ||
| 1567 | - | "server/wrangler/workerd/@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260103.0", "", { "os": "win32", "cpu": "x64" }, "sha512-M7mZHV6uWVE+Mf8r/nT6/21N1+Z4JmZTPJjek3rB4n7netOJGZIUQwyuY+5gwOnq+qJsqHoU/RP7b4lFSoMZuQ=="], |
|
| 1568 | - | } |
|
| 1569 | - | } |
| 1 | 1 | { |
|
| 2 | - | "name": "stevedylan.dev", |
|
| 2 | + | "name": "client", |
|
| 3 | + | "version": "1.0.0", |
|
| 3 | 4 | "private": true, |
|
| 4 | - | "workspaces": ["packages/*"], |
|
| 5 | 5 | "scripts": { |
|
| 6 | - | "dev": "bun run --filter '*' dev", |
|
| 7 | - | "dev:client": "bun run --filter client dev", |
|
| 8 | - | "dev:server": "bun run --filter server dev", |
|
| 9 | - | "build": "bun run --filter '*' build", |
|
| 10 | - | "build:client": "bun run --filter client build", |
|
| 11 | - | "build:server": "bun run --filter server build", |
|
| 12 | - | "deploy": "bun run --filter '*' deploy", |
|
| 13 | - | "deploy:client": "bun run --filter client deploy", |
|
| 14 | - | "deploy:server": "bun run --filter server deploy" |
|
| 6 | + | "dev": "astro dev", |
|
| 7 | + | "start": "astro dev", |
|
| 8 | + | "sync": "astro sync", |
|
| 9 | + | "build": "astro build", |
|
| 10 | + | "preview": "astro preview", |
|
| 11 | + | "format": "biome format --write src package.json", |
|
| 12 | + | "deploy": "bun run build && wrangler pages deploy dist", |
|
| 13 | + | "parse:birds": "bun run scripts/parse-birds.ts" |
|
| 14 | + | }, |
|
| 15 | + | "devDependencies": { |
|
| 16 | + | "@astrojs/mdx": "4.3.13", |
|
| 17 | + | "@astrojs/sitemap": "3.6.1", |
|
| 18 | + | "@astrojs/tailwind": "6.0.2", |
|
| 19 | + | "@biomejs/biome": "2.1.1", |
|
| 20 | + | "@tailwindcss/aspect-ratio": "^0.4.2", |
|
| 21 | + | "@tailwindcss/typography": "^0.5.8", |
|
| 22 | + | "@types/bun": "^1.3.6", |
|
| 23 | + | "@types/markdown-it": "^14.1.2", |
|
| 24 | + | "@types/sanitize-html": "^2.16.0", |
|
| 25 | + | "autoprefixer": "^10.4.13", |
|
| 26 | + | "postcss": "^8.4.21", |
|
| 27 | + | "tailwindcss": "^3.4.7", |
|
| 28 | + | "typescript": "^5.6.2", |
|
| 29 | + | "wrangler": "^4.58.0" |
|
| 30 | + | }, |
|
| 31 | + | "dependencies": { |
|
| 32 | + | "@astrojs/cloudflare": "12.6.12", |
|
| 33 | + | "@astrojs/react": "4.4.2", |
|
| 34 | + | "@astrojs/rss": "4.0.14", |
|
| 35 | + | "@astrojs/ts-plugin": "1.10.6", |
|
| 36 | + | "@types/react": "^18.3.8", |
|
| 37 | + | "@types/react-dom": "^18.3.0", |
|
| 38 | + | "astro": "5.16.7", |
|
| 39 | + | "markdown-it": "^14.1.0", |
|
| 40 | + | "react": "^18.3.1", |
|
| 41 | + | "react-dom": "^18.3.1", |
|
| 42 | + | "rehype-external-links": "^3.0.0", |
|
| 43 | + | "sanitize-html": "^2.17.0", |
|
| 44 | + | "sharp": "^0.33.1", |
|
| 45 | + | "shiki": "^4.0.2" |
|
| 15 | 46 | } |
|
| 16 | 47 | } |
| 1 | - | MyEBirdData.csv |
| 1 | - | { |
|
| 2 | - | "posts": { |
|
| 3 | - | "src/content/post/back-to-basic.mdx": { |
|
| 4 | - | "contentHash": "dced34604b582ac4631db5aafe33e3d90089bd3429e463ae2543e8b4e85ffad5", |
|
| 5 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mggpic7sdd2h", |
|
| 6 | - | "lastPublished": "2026-03-06T05:00:00.000Z", |
|
| 7 | - | "slug": "back-to-basic" |
|
| 8 | - | }, |
|
| 9 | - | "src/content/post/programmers-on-the-verge-of-extinction.mdx": { |
|
| 10 | - | "contentHash": "0077e0d782061bb84c60967e481578240b3f854b903e607fbe634b733bfc6ee9", |
|
| 11 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mfv2rjkplk2h", |
|
| 12 | - | "lastPublished": "2026-02-27T05:00:00.000Z", |
|
| 13 | - | "slug": "programmers-on-the-verge-of-extinction" |
|
| 14 | - | }, |
|
| 15 | - | "src/content/post/the-power-of-dedicated-gateways.mdx": { |
|
| 16 | - | "contentHash": "0049e5f9848c92a124214718178cd218b80f153cbeade00527e83781f0494243", |
|
| 17 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvutcycf2v", |
|
| 18 | - | "lastPublished": "2022-02-10T05:00:00.000Z", |
|
| 19 | - | "slug": "the-power-of-dedicated-gateways" |
|
| 20 | - | }, |
|
| 21 | - | "src/content/post/how-to-offset-NFT-emissions.mdx": { |
|
| 22 | - | "contentHash": "afa6abe84fa1520252ca4559f110d7ca4269fc69732b800a906119de77e96686", |
|
| 23 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvut7d4f2v", |
|
| 24 | - | "lastPublished": "2022-04-22T04:00:00.000Z", |
|
| 25 | - | "slug": "how-to-offset-nft-emissions" |
|
| 26 | - | }, |
|
| 27 | - | "src/content/post/3d-solana-nfts.mdx": { |
|
| 28 | - | "contentHash": "c8bcdcc72a18c53c5d1ad0c0835f1683c47571d29988418ff169a7b64ffadf01", |
|
| 29 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvut5khv2v", |
|
| 30 | - | "lastPublished": "2022-05-18T04:00:00.000Z", |
|
| 31 | - | "slug": "3d-solana-nfts" |
|
| 32 | - | }, |
|
| 33 | - | "src/content/post/resizing-ipfs-images.mdx": { |
|
| 34 | - | "contentHash": "9f4a3b64b2c2f5af972204e70ac8456925d9b0c8afef3fc9ac7dd3451c3ff267", |
|
| 35 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvut3ovn2v", |
|
| 36 | - | "lastPublished": "2022-06-23T04:00:00.000Z", |
|
| 37 | - | "slug": "resizing-ipfs-images" |
|
| 38 | - | }, |
|
| 39 | - | "src/content/post/beginners-guide-to-ipfs.mdx": { |
|
| 40 | - | "contentHash": "1738d00f8b70132fe6fd859f428dd74c3207030f3b27cfdf90006fd69cec0f6b", |
|
| 41 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvusztdf2v", |
|
| 42 | - | "lastPublished": "2022-10-07T04:00:00.000Z", |
|
| 43 | - | "slug": "beginners-guide-to-ipfs" |
|
| 44 | - | }, |
|
| 45 | - | "src/content/post/case-for-ipfs-on-l1-chains.mdx": { |
|
| 46 | - | "contentHash": "31bb805e67a5fd599830cdbe379c2da9dc77e2a61105edd1a8cbd8d85b5a4882", |
|
| 47 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvusuqan2v", |
|
| 48 | - | "lastPublished": "2022-12-06T05:00:00.000Z", |
|
| 49 | - | "slug": "case-for-ipfs-on-l1-chains" |
|
| 50 | - | }, |
|
| 51 | - | "src/content/post/3d-nft-resume.mdx": { |
|
| 52 | - | "contentHash": "e54863264ab98ead0653f75ac24d70b01c2cbb5543113ed04df72e2bec33650a", |
|
| 53 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvussqrf2v", |
|
| 54 | - | "lastPublished": "2023-01-10T05:00:00.000Z", |
|
| 55 | - | "slug": "3d-nft-resume" |
|
| 56 | - | }, |
|
| 57 | - | "src/content/post/how-to-mint-on-sui.mdx": { |
|
| 58 | - | "contentHash": "34927db597a951650cc6e7d2cd5e5d278df0d8d48aef7a8f351798c2612dff7f", |
|
| 59 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvusolxf2v", |
|
| 60 | - | "lastPublished": "2023-02-27T05:00:00.000Z", |
|
| 61 | - | "slug": "how-to-mint-on-sui" |
|
| 62 | - | }, |
|
| 63 | - | "src/content/post/my-developer-journey.md": { |
|
| 64 | - | "contentHash": "49bace7b3b4c147edb9c05631652d0b39e3a8ba6bc6886988094f49e53793d04", |
|
| 65 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvusmkjn2v", |
|
| 66 | - | "lastPublished": "2023-02-28T05:00:00.000Z", |
|
| 67 | - | "slug": "my-developer-journey" |
|
| 68 | - | }, |
|
| 69 | - | "src/content/post/arc-internet.mdx": { |
|
| 70 | - | "contentHash": "c3aa3810b085a9dd9020c4302dd04a7fa6eb8887607c0d3bf3f501f5f7478262", |
|
| 71 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuskpwn2v", |
|
| 72 | - | "lastPublished": "2023-03-08T05:00:00.000Z", |
|
| 73 | - | "slug": "arc-internet" |
|
| 74 | - | }, |
|
| 75 | - | "src/content/post/48-hours-disconnected.mdx": { |
|
| 76 | - | "contentHash": "b0d632a60f95724783ac205f09cc6e52afdb9f76d167bb961f32bf7264e067cb", |
|
| 77 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvusirgn2v", |
|
| 78 | - | "lastPublished": "2023-05-02T04:00:00.000Z", |
|
| 79 | - | "slug": "48-hours-disconnected" |
|
| 80 | - | }, |
|
| 81 | - | "src/content/post/how-to-create-a-weekly-photo-zine.mdx": { |
|
| 82 | - | "contentHash": "80079d77779c443a703b05feb1da32dc565432f765ca5e258e315fc68bf4c0de", |
|
| 83 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvusgpyv2v", |
|
| 84 | - | "lastPublished": "2023-06-08T04:00:00.000Z", |
|
| 85 | - | "slug": "how-to-create-a-weekly-photo-zine" |
|
| 86 | - | }, |
|
| 87 | - | "src/content/post/how-to-migrate-from-neovim-to-vscode.mdx": { |
|
| 88 | - | "contentHash": "0b19444c34b821b6bb9f1be0863918855024b66fa08d457fbca2785f116c9f32", |
|
| 89 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuseriv2v", |
|
| 90 | - | "lastPublished": "2023-07-06T04:00:00.000Z", |
|
| 91 | - | "slug": "how-to-migrate-from-neovim-to-vscode" |
|
| 92 | - | }, |
|
| 93 | - | "src/content/post/How To Run Your Own IPFS Gateway.mdx": { |
|
| 94 | - | "contentHash": "7e61fa3bfb77f72d2a6863e603095608157ed45a50583cdf281982a89fe6ce94", |
|
| 95 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvus7pff2v", |
|
| 96 | - | "lastPublished": "2023-10-10T00:00:00.000Z", |
|
| 97 | - | "slug": "how-to-run-your-own-ipfs-gateway" |
|
| 98 | - | }, |
|
| 99 | - | "src/content/post/How to Encrypt and Decrypt Files on IPFS Using Lit.md": { |
|
| 100 | - | "contentHash": "4ed99c9b13c6d64dc3e8a1151b664de8335738f68d8d3254f2961c0e6710621b", |
|
| 101 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvus3hnn2v", |
|
| 102 | - | "lastPublished": "2023-11-04T04:00:00.000Z", |
|
| 103 | - | "slug": "how-to-encrypt-and-decrypt-files-on-ipfs-using-lit" |
|
| 104 | - | }, |
|
| 105 | - | "src/content/post/why-i-learned-vim.mdx": { |
|
| 106 | - | "contentHash": "58c0a48983183589d4f0175d6c994dcbcfb0f04572370a9a48dfa0a5e504687a", |
|
| 107 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvurxbuf2v", |
|
| 108 | - | "lastPublished": "2024-01-05T05:00:00.000Z", |
|
| 109 | - | "slug": "why-i-learned-vim" |
|
| 110 | - | }, |
|
| 111 | - | "src/content/post/a-terminal-based-workflow.mdx": { |
|
| 112 | - | "contentHash": "ec3532e9aaef9466849e34089b09fb5e2363aad90d85f0d5f61e7329bdea7206", |
|
| 113 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvurvdef2v", |
|
| 114 | - | "lastPublished": "2024-03-06T05:00:00.000Z", |
|
| 115 | - | "slug": "a-terminal-based-workflow" |
|
| 116 | - | }, |
|
| 117 | - | "src/content/post/building-snippets-so.mdx": { |
|
| 118 | - | "contentHash": "676ad30c25c02d980a530cf01a0b1ae2aac6cb2aca8325b93ab68238b43319ab", |
|
| 119 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvurteuf2v", |
|
| 120 | - | "lastPublished": "2024-08-02T04:00:00.000Z", |
|
| 121 | - | "slug": "building-snippets-so" |
|
| 122 | - | }, |
|
| 123 | - | "src/content/post/leaving-neovim-for-zed.mdx": { |
|
| 124 | - | "contentHash": "52715d1e88dd8db9921222e7b58b9c2cfb8ad3a3860174915ff3e7f9e19bc222", |
|
| 125 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvurqlyn2v", |
|
| 126 | - | "lastPublished": "2024-08-16T04:00:00.000Z", |
|
| 127 | - | "slug": "leaving-neovim-for-zed" |
|
| 128 | - | }, |
|
| 129 | - | "src/content/post/building-a-guestbook-with-pglite-clerk-and-pinata.mdx": { |
|
| 130 | - | "contentHash": "720a4d301ca8edf109317703943af40f1cc156429286c0558531306f271f381a", |
|
| 131 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvurhwnn2v", |
|
| 132 | - | "lastPublished": "2024-09-24T04:00:00.000Z", |
|
| 133 | - | "slug": "building-a-guestbook-with-pglite-clerk-and-pinata" |
|
| 134 | - | }, |
|
| 135 | - | "src/content/post/why-you-should-learn-jq-in-2024.mdx": { |
|
| 136 | - | "contentHash": "74263c4d4b8b320279582ab717f8d13fdd822302592431ff61131eeecf9d7892", |
|
| 137 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvurdwpv2v", |
|
| 138 | - | "lastPublished": "2024-10-12T04:00:00.000Z", |
|
| 139 | - | "slug": "why-you-should-learn-jq-in-2024" |
|
| 140 | - | }, |
|
| 141 | - | "src/content/post/vibe-coding-and-kodak-cameras.mdx": { |
|
| 142 | - | "contentHash": "17d0932eac5ba08ae666f01a6c20faf43f1f8121904048fa3b742059b0886333", |
|
| 143 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvur3ysv2v", |
|
| 144 | - | "lastPublished": "2025-03-30T04:00:00.000Z", |
|
| 145 | - | "slug": "vibe-coding-and-kodak-cameras" |
|
| 146 | - | }, |
|
| 147 | - | "src/content/post/learning-rust-with-ai.mdx": { |
|
| 148 | - | "contentHash": "6fb67a72bff6b72d8beb117242abe882edf56555b5036d710135efcc8f5301d8", |
|
| 149 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuqzawf2v", |
|
| 150 | - | "lastPublished": "2025-07-11T04:00:00.000Z", |
|
| 151 | - | "slug": "learning-rust-with-ai" |
|
| 152 | - | }, |
|
| 153 | - | "src/content/post/the-meaning-of-life.mdx": { |
|
| 154 | - | "contentHash": "5fe508620a2cb861bb6c13a72da1a052822504f4348ebc83bb2d36ce881c1ad0", |
|
| 155 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuqqzav2v", |
|
| 156 | - | "lastPublished": "2025-08-15T04:00:00.000Z", |
|
| 157 | - | "slug": "the-meaning-of-life" |
|
| 158 | - | }, |
|
| 159 | - | "src/content/post/turning-natspec-into-markdown-ui.mdx": { |
|
| 160 | - | "contentHash": "1947cb4d75885eb6c7f6b1b830d72e7dccb2cd9fa0dddac5e4d33801432d5b54", |
|
| 161 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuqmxen2v", |
|
| 162 | - | "lastPublished": "2025-08-31T04:00:00.000Z", |
|
| 163 | - | "slug": "turning-natspec-into-markdown-ui" |
|
| 164 | - | }, |
|
| 165 | - | "src/content/post/resurrect-the-old-web.mdx": { |
|
| 166 | - | "contentHash": "00bef41b408ae240a9753a09c361121ef6d11cd13e5a64419b01befb0ccc172c", |
|
| 167 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuqbfav2v", |
|
| 168 | - | "lastPublished": "2025-09-23T04:00:00.000Z", |
|
| 169 | - | "slug": "resurrect-the-old-web" |
|
| 170 | - | }, |
|
| 171 | - | "src/content/post/when-ai-gives-the-ick.mdx": { |
|
| 172 | - | "contentHash": "9f79fa67376c39951c019a21e16d397e26249b0ee30ceb330e436268779e18db", |
|
| 173 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuq2x752v", |
|
| 174 | - | "lastPublished": "2025-10-03T04:00:00.000Z", |
|
| 175 | - | "slug": "when-ai-gives-the-ick" |
|
| 176 | - | }, |
|
| 177 | - | "src/content/post/programming-bowls.mdx": { |
|
| 178 | - | "contentHash": "e551a3cd78f8b115b1314a2dec6b5e111e67d075a4a2a159afe939509c71f1af", |
|
| 179 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuposjn2v", |
|
| 180 | - | "lastPublished": "2025-10-16T04:00:00.000Z", |
|
| 181 | - | "slug": "programming-bowls" |
|
| 182 | - | }, |
|
| 183 | - | "src/content/post/concerning-omarchy-and-distro-philosophy.mdx": { |
|
| 184 | - | "contentHash": "8c597d97e15b3a503fd0d77a7789c76599c2f537b7e1be6a29627ee3b7af8c55", |
|
| 185 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvupkguv2v", |
|
| 186 | - | "lastPublished": "2025-11-09T05:00:00.000Z", |
|
| 187 | - | "slug": "concerning-omarchy-and-distro-philosophy" |
|
| 188 | - | }, |
|
| 189 | - | "src/content/post/introducing-alcove.mdx": { |
|
| 190 | - | "contentHash": "3ed76d60690fb192cdfa3a670360fd83d0031c88a64645d99520a772dfecc81a", |
|
| 191 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvupi6mf2v", |
|
| 192 | - | "lastPublished": "2025-11-23T05:00:00.000Z", |
|
| 193 | - | "slug": "introducing-alcove" |
|
| 194 | - | }, |
|
| 195 | - | "src/content/post/how-gemini-gives-me-hope.mdx": { |
|
| 196 | - | "contentHash": "5df336c1bc0767ce164ca4ede25233bc6a189df7da0fb712527ffdf4c6d51c35", |
|
| 197 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvupdcef2v", |
|
| 198 | - | "lastPublished": "2025-12-18T05:00:00.000Z", |
|
| 199 | - | "slug": "how-gemini-gives-me-hope" |
|
| 200 | - | }, |
|
| 201 | - | "src/content/post/2026-site-plans.mdx": { |
|
| 202 | - | "contentHash": "fafc451b6b4847309b61b9b294a60680b588251216ef4669e55459a039702f47", |
|
| 203 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvup73lv2v", |
|
| 204 | - | "lastPublished": "2026-01-01T05:00:00.000Z", |
|
| 205 | - | "slug": "2026-site-plans" |
|
| 206 | - | }, |
|
| 207 | - | "src/content/post/using-atproto-for-posse.mdx": { |
|
| 208 | - | "contentHash": "cedbab5668b69de3f00c4b559d0ab91815ca07163f6f763407f7b1285d63178d", |
|
| 209 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvup2mzf2v", |
|
| 210 | - | "lastPublished": "2026-01-05T05:00:00.000Z", |
|
| 211 | - | "slug": "using-atproto-for-posse" |
|
| 212 | - | }, |
|
| 213 | - | "src/content/post/standard-site-the-publishing-gateway.mdx": { |
|
| 214 | - | "contentHash": "6b237f9d35c9e6d1f67b841ee98ed05a2093d6019965f4a759976589588e8fe4", |
|
| 215 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuovxm52v", |
|
| 216 | - | "lastPublished": "2026-01-11T05:00:00.000Z", |
|
| 217 | - | "slug": "standard-site-the-publishing-gateway" |
|
| 218 | - | }, |
|
| 219 | - | "src/content/post/atproto-starter.mdx": { |
|
| 220 | - | "contentHash": "3711525540806f7456ca1eec9df4902dc0a3b1ab5df853a86bdf71018ccd63ca", |
|
| 221 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mcxxqjgspk26", |
|
| 222 | - | "lastPublished": "2026-01-21T05:00:00.000Z", |
|
| 223 | - | "slug": "atproto-starter" |
|
| 224 | - | }, |
|
| 225 | - | "src/content/post/introducing-sequoia.mdx": { |
|
| 226 | - | "contentHash": "3fdd4e2604e3fe78b9b7655b8fa2e818edd27e9cb5e43dde5be357264f5a27b5", |
|
| 227 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mdzvuohmmn2v", |
|
| 228 | - | "lastPublished": "2026-01-30T05:00:00.000Z", |
|
| 229 | - | "slug": "introducing-sequoia" |
|
| 230 | - | }, |
|
| 231 | - | "src/content/post/building-personal-software-in-rust.mdx": { |
|
| 232 | - | "contentHash": "46e0374aaa161e5736df35264f60479f1ecd02d7aa682cafb06adba7e29bdb99", |
|
| 233 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mjvh4pgklc2q", |
|
| 234 | - | "lastPublished": "2026-04-27T01:23:26.125Z", |
|
| 235 | - | "slug": "building-personal-software-in-rust" |
|
| 236 | - | }, |
|
| 237 | - | "src/content/post/indexing-standard-site.mdx": { |
|
| 238 | - | "contentHash": "62676d3786fddc9a3adae7f95464f06cde54997cbb676900c5636566c315217d", |
|
| 239 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mjvh4pmxns2q", |
|
| 240 | - | "lastPublished": "2026-04-20T02:44:00.270Z", |
|
| 241 | - | "slug": "indexing-standard-site" |
|
| 242 | - | }, |
|
| 243 | - | "src/content/post/returning-to-neovim.mdx": { |
|
| 244 | - | "contentHash": "365416317f801b062fb04ded20284710e1e09c0df5c288f283a91ae964db9ea4", |
|
| 245 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mjvh4prebs2q", |
|
| 246 | - | "lastPublished": "2026-04-20T02:44:00.422Z", |
|
| 247 | - | "slug": "returning-to-neovim" |
|
| 248 | - | }, |
|
| 249 | - | "src/content/post/spring-website-updates.mdx": { |
|
| 250 | - | "contentHash": "5e33edc09b9082301a0056439164bf0ecb54523056b4348e966ee65869380b94", |
|
| 251 | - | "atUri": "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.document/3mkgvv37nsk2q", |
|
| 252 | - | "lastPublished": "2026-04-27T01:23:25.640Z", |
|
| 253 | - | "slug": "spring-website-updates" |
|
| 254 | - | } |
|
| 255 | - | } |
|
| 256 | - | } |
| 1 | - | { |
|
| 2 | - | "name": "client", |
|
| 3 | - | "version": "1.0.0", |
|
| 4 | - | "private": true, |
|
| 5 | - | "scripts": { |
|
| 6 | - | "dev": "astro dev", |
|
| 7 | - | "start": "astro dev", |
|
| 8 | - | "sync": "astro sync", |
|
| 9 | - | "build": "astro build", |
|
| 10 | - | "preview": "astro preview", |
|
| 11 | - | "format": "biome format --write src package.json", |
|
| 12 | - | "deploy": "bun run build && wrangler pages deploy dist", |
|
| 13 | - | "parse:birds": "bun run scripts/parse-birds.ts" |
|
| 14 | - | }, |
|
| 15 | - | "devDependencies": { |
|
| 16 | - | "@astrojs/mdx": "4.3.13", |
|
| 17 | - | "@astrojs/sitemap": "3.6.1", |
|
| 18 | - | "@astrojs/tailwind": "6.0.2", |
|
| 19 | - | "@biomejs/biome": "2.1.1", |
|
| 20 | - | "@tailwindcss/aspect-ratio": "^0.4.2", |
|
| 21 | - | "@tailwindcss/typography": "^0.5.8", |
|
| 22 | - | "@types/bun": "^1.3.6", |
|
| 23 | - | "@types/markdown-it": "^14.1.2", |
|
| 24 | - | "@types/sanitize-html": "^2.16.0", |
|
| 25 | - | "autoprefixer": "^10.4.13", |
|
| 26 | - | "postcss": "^8.4.21", |
|
| 27 | - | "tailwindcss": "^3.4.7", |
|
| 28 | - | "typescript": "^5.6.2", |
|
| 29 | - | "wrangler": "^4.58.0" |
|
| 30 | - | }, |
|
| 31 | - | "dependencies": { |
|
| 32 | - | "@astrojs/cloudflare": "12.6.12", |
|
| 33 | - | "@astrojs/react": "4.4.2", |
|
| 34 | - | "@astrojs/rss": "4.0.14", |
|
| 35 | - | "@astrojs/ts-plugin": "1.10.6", |
|
| 36 | - | "@types/react": "^18.3.8", |
|
| 37 | - | "@types/react-dom": "^18.3.0", |
|
| 38 | - | "astro": "5.16.7", |
|
| 39 | - | "markdown-it": "^14.1.0", |
|
| 40 | - | "react": "^18.3.1", |
|
| 41 | - | "react-dom": "^18.3.1", |
|
| 42 | - | "rehype-external-links": "^3.0.0", |
|
| 43 | - | "sanitize-html": "^2.17.0", |
|
| 44 | - | "sharp": "^0.33.1", |
|
| 45 | - | "shiki": "^4.0.2" |
|
| 46 | - | } |
|
| 47 | - | } |
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
Binary file — no preview.
| 1 | - | # prod |
|
| 2 | - | dist/ |
|
| 3 | - | ||
| 4 | - | # dev |
|
| 5 | - | .yarn/ |
|
| 6 | - | !.yarn/releases |
|
| 7 | - | .vscode/* |
|
| 8 | - | !.vscode/launch.json |
|
| 9 | - | !.vscode/*.code-snippets |
|
| 10 | - | .idea/workspace.xml |
|
| 11 | - | .idea/usage.statistics.xml |
|
| 12 | - | .idea/shelf |
|
| 13 | - | ||
| 14 | - | # deps |
|
| 15 | - | node_modules/ |
|
| 16 | - | .wrangler |
|
| 17 | - | ||
| 18 | - | # env |
|
| 19 | - | .env |
|
| 20 | - | .env.production |
|
| 21 | - | .dev.vars |
|
| 22 | - | ||
| 23 | - | # logs |
|
| 24 | - | logs/ |
|
| 25 | - | *.log |
|
| 26 | - | npm-debug.log* |
|
| 27 | - | yarn-debug.log* |
|
| 28 | - | yarn-error.log* |
|
| 29 | - | pnpm-debug.log* |
|
| 30 | - | lerna-debug.log* |
|
| 31 | - | ||
| 32 | - | # misc |
|
| 33 | - | .DS_Store |
| 1 | - | ```txt |
|
| 2 | - | npm install |
|
| 3 | - | npm run dev |
|
| 4 | - | ``` |
|
| 5 | - | ||
| 6 | - | ```txt |
|
| 7 | - | npm run deploy |
|
| 8 | - | ``` |
|
| 9 | - | ||
| 10 | - | [For generating/synchronizing types based on your Worker configuration run](https://developers.cloudflare.com/workers/wrangler/commands/#types): |
|
| 11 | - | ||
| 12 | - | ```txt |
|
| 13 | - | npm run cf-typegen |
|
| 14 | - | ``` |
|
| 15 | - | ||
| 16 | - | Pass the `CloudflareBindings` as generics when instantiation `Hono`: |
|
| 17 | - | ||
| 18 | - | ```ts |
|
| 19 | - | // src/index.ts |
|
| 20 | - | const app = new Hono<{ Bindings: CloudflareBindings }>() |
|
| 21 | - | ``` |
| 1 | - | { |
|
| 2 | - | "name": "server", |
|
| 3 | - | "type": "module", |
|
| 4 | - | "private": true, |
|
| 5 | - | "scripts": { |
|
| 6 | - | "dev": "wrangler dev", |
|
| 7 | - | "deploy": "wrangler deploy --minify", |
|
| 8 | - | "cf-typegen": "wrangler types --env-interface CloudflareBindings", |
|
| 9 | - | "typecheck": "tsc --noEmit" |
|
| 10 | - | }, |
|
| 11 | - | "dependencies": { |
|
| 12 | - | "@atproto/api": "^0.18.12", |
|
| 13 | - | "feed": "^5.1.0", |
|
| 14 | - | "hono": "^4.11.3", |
|
| 15 | - | "jose": "^6.1.3" |
|
| 16 | - | }, |
|
| 17 | - | "devDependencies": { |
|
| 18 | - | "@cloudflare/workers-types": "^4.20260103.0", |
|
| 19 | - | "wrangler": "^4.4.0" |
|
| 20 | - | } |
|
| 21 | - | } |
| 1 | - | import { Hono } from "hono"; |
|
| 2 | - | import { cors } from "hono/cors"; |
|
| 3 | - | // COMMENTS FUNCTIONALITY DISABLED |
|
| 4 | - | // import { home, now, auth, guestAuth } from "./routes"; |
|
| 5 | - | import { home, now, auth } from "./routes"; |
|
| 6 | - | ||
| 7 | - | interface Env { |
|
| 8 | - | SESSIONS: KVNamespace; |
|
| 9 | - | ALLOWED_DID: string; |
|
| 10 | - | PDS_URL: string; |
|
| 11 | - | CLIENT_URL: string; |
|
| 12 | - | API_URL: string; |
|
| 13 | - | } |
|
| 14 | - | ||
| 15 | - | const app = new Hono<{ Bindings: Env }>(); |
|
| 16 | - | ||
| 17 | - | // Configure CORS to allow credentials from the client |
|
| 18 | - | app.use( |
|
| 19 | - | cors({ |
|
| 20 | - | origin: (origin) => { |
|
| 21 | - | const allowedOrigins = [ |
|
| 22 | - | "https://stevedylan.dev", |
|
| 23 | - | "http://localhost:4321", |
|
| 24 | - | "http://localhost:3000", |
|
| 25 | - | ]; |
|
| 26 | - | return allowedOrigins.includes(origin) ? origin : allowedOrigins[0]; |
|
| 27 | - | }, |
|
| 28 | - | credentials: true, |
|
| 29 | - | allowMethods: ["GET", "POST", "OPTIONS"], |
|
| 30 | - | allowHeaders: ["Content-Type"], |
|
| 31 | - | }), |
|
| 32 | - | ); |
|
| 33 | - | ||
| 34 | - | app.route("/", home); |
|
| 35 | - | app.route("/now", now); |
|
| 36 | - | app.route("/auth", auth); |
|
| 37 | - | // COMMENTS FUNCTIONALITY DISABLED |
|
| 38 | - | // app.route("/guest-auth", guestAuth); |
|
| 39 | - | ||
| 40 | - | export default app; |
| 1 | - | import * as jose from "jose"; |
|
| 2 | - | ||
| 3 | - | export interface DPoPKeyPair { |
|
| 4 | - | privateKey: CryptoKey; |
|
| 5 | - | publicKey: CryptoKey; |
|
| 6 | - | publicJwk: jose.JWK; |
|
| 7 | - | } |
|
| 8 | - | ||
| 9 | - | export interface DPoPProofOptions { |
|
| 10 | - | method: string; |
|
| 11 | - | url: string; |
|
| 12 | - | nonce?: string; |
|
| 13 | - | accessToken?: string; |
|
| 14 | - | } |
|
| 15 | - | ||
| 16 | - | /** |
|
| 17 | - | * Generate a new ES256 keypair for DPoP proofs |
|
| 18 | - | */ |
|
| 19 | - | export async function generateDPoPKeyPair(): Promise<DPoPKeyPair> { |
|
| 20 | - | const keyPair = (await crypto.subtle.generateKey( |
|
| 21 | - | { |
|
| 22 | - | name: "ECDSA", |
|
| 23 | - | namedCurve: "P-256", |
|
| 24 | - | }, |
|
| 25 | - | true, |
|
| 26 | - | ["sign", "verify"], |
|
| 27 | - | )) as CryptoKeyPair; |
|
| 28 | - | ||
| 29 | - | const publicJwk = await jose.exportJWK(keyPair.publicKey); |
|
| 30 | - | ||
| 31 | - | return { |
|
| 32 | - | privateKey: keyPair.privateKey, |
|
| 33 | - | publicKey: keyPair.publicKey, |
|
| 34 | - | publicJwk, |
|
| 35 | - | }; |
|
| 36 | - | } |
|
| 37 | - | ||
| 38 | - | /** |
|
| 39 | - | * Export a DPoP keypair to a storable format |
|
| 40 | - | */ |
|
| 41 | - | export async function exportDPoPKeyPair( |
|
| 42 | - | keyPair: DPoPKeyPair, |
|
| 43 | - | ): Promise<{ privateJwk: jose.JWK; publicJwk: jose.JWK }> { |
|
| 44 | - | const privateJwk = await jose.exportJWK(keyPair.privateKey); |
|
| 45 | - | return { |
|
| 46 | - | privateJwk, |
|
| 47 | - | publicJwk: keyPair.publicJwk, |
|
| 48 | - | }; |
|
| 49 | - | } |
|
| 50 | - | ||
| 51 | - | /** |
|
| 52 | - | * Import a DPoP keypair from stored JWKs |
|
| 53 | - | */ |
|
| 54 | - | export async function importDPoPKeyPair(stored: { |
|
| 55 | - | privateJwk: jose.JWK; |
|
| 56 | - | publicJwk: jose.JWK; |
|
| 57 | - | }): Promise<DPoPKeyPair> { |
|
| 58 | - | // Use crypto.subtle.importKey with extractable: true |
|
| 59 | - | // jose.importJWK creates non-extractable keys by default |
|
| 60 | - | const privateKey = await crypto.subtle.importKey( |
|
| 61 | - | "jwk", |
|
| 62 | - | stored.privateJwk as JsonWebKey, |
|
| 63 | - | { name: "ECDSA", namedCurve: "P-256" }, |
|
| 64 | - | true, // extractable |
|
| 65 | - | ["sign"], |
|
| 66 | - | ); |
|
| 67 | - | ||
| 68 | - | const publicKey = await crypto.subtle.importKey( |
|
| 69 | - | "jwk", |
|
| 70 | - | stored.publicJwk as JsonWebKey, |
|
| 71 | - | { name: "ECDSA", namedCurve: "P-256" }, |
|
| 72 | - | true, // extractable |
|
| 73 | - | ["verify"], |
|
| 74 | - | ); |
|
| 75 | - | ||
| 76 | - | return { |
|
| 77 | - | privateKey, |
|
| 78 | - | publicKey, |
|
| 79 | - | publicJwk: stored.publicJwk, |
|
| 80 | - | }; |
|
| 81 | - | } |
|
| 82 | - | ||
| 83 | - | /** |
|
| 84 | - | * Create a DPoP proof JWT for a request |
|
| 85 | - | */ |
|
| 86 | - | export async function createDPoPProof( |
|
| 87 | - | keyPair: DPoPKeyPair, |
|
| 88 | - | options: DPoPProofOptions, |
|
| 89 | - | ): Promise<string> { |
|
| 90 | - | const now = Math.floor(Date.now() / 1000); |
|
| 91 | - | const jti = crypto.randomUUID(); |
|
| 92 | - | ||
| 93 | - | const payload: jose.JWTPayload = { |
|
| 94 | - | jti, |
|
| 95 | - | htm: options.method.toUpperCase(), |
|
| 96 | - | htu: options.url, |
|
| 97 | - | iat: now, |
|
| 98 | - | }; |
|
| 99 | - | ||
| 100 | - | // Add nonce if provided (required after first request) |
|
| 101 | - | if (options.nonce) { |
|
| 102 | - | payload.nonce = options.nonce; |
|
| 103 | - | } |
|
| 104 | - | ||
| 105 | - | // Add access token hash if provided (for resource server requests) |
|
| 106 | - | if (options.accessToken) { |
|
| 107 | - | const encoder = new TextEncoder(); |
|
| 108 | - | const data = encoder.encode(options.accessToken); |
|
| 109 | - | const hashBuffer = await crypto.subtle.digest("SHA-256", data); |
|
| 110 | - | const hashArray = new Uint8Array(hashBuffer); |
|
| 111 | - | payload.ath = jose.base64url.encode(hashArray); |
|
| 112 | - | } |
|
| 113 | - | ||
| 114 | - | const jwt = await new jose.SignJWT(payload) |
|
| 115 | - | .setProtectedHeader({ |
|
| 116 | - | alg: "ES256", |
|
| 117 | - | typ: "dpop+jwt", |
|
| 118 | - | jwk: keyPair.publicJwk, |
|
| 119 | - | }) |
|
| 120 | - | .sign(keyPair.privateKey); |
|
| 121 | - | ||
| 122 | - | return jwt; |
|
| 123 | - | } |
|
| 124 | - | ||
| 125 | - | /** |
|
| 126 | - | * Extract DPoP nonce from response headers |
|
| 127 | - | */ |
|
| 128 | - | export function extractDPoPNonce(response: Response): string | null { |
|
| 129 | - | return response.headers.get("DPoP-Nonce"); |
|
| 130 | - | } |
| 1 | - | import * as jose from "jose"; |
|
| 2 | - | import { |
|
| 3 | - | type DPoPKeyPair, |
|
| 4 | - | createDPoPProof, |
|
| 5 | - | extractDPoPNonce, |
|
| 6 | - | generateDPoPKeyPair, |
|
| 7 | - | } from "./dpop"; |
|
| 8 | - | import { storeAuthState, getAndDeleteAuthState } from "./session"; |
|
| 9 | - | ||
| 10 | - | export interface OAuthServerMetadata { |
|
| 11 | - | issuer: string; |
|
| 12 | - | authorization_endpoint: string; |
|
| 13 | - | token_endpoint: string; |
|
| 14 | - | pushed_authorization_request_endpoint: string; |
|
| 15 | - | scopes_supported?: string[]; |
|
| 16 | - | response_types_supported?: string[]; |
|
| 17 | - | grant_types_supported?: string[]; |
|
| 18 | - | dpop_signing_alg_values_supported?: string[]; |
|
| 19 | - | } |
|
| 20 | - | ||
| 21 | - | export interface PKCEPair { |
|
| 22 | - | codeVerifier: string; |
|
| 23 | - | codeChallenge: string; |
|
| 24 | - | } |
|
| 25 | - | ||
| 26 | - | export interface TokenResponse { |
|
| 27 | - | access_token: string; |
|
| 28 | - | token_type: string; |
|
| 29 | - | expires_in: number; |
|
| 30 | - | refresh_token?: string; |
|
| 31 | - | scope: string; |
|
| 32 | - | sub: string; // The DID of the authenticated user |
|
| 33 | - | } |
|
| 34 | - | ||
| 35 | - | export interface PARResponse { |
|
| 36 | - | request_uri: string; |
|
| 37 | - | expires_in: number; |
|
| 38 | - | } |
|
| 39 | - | ||
| 40 | - | interface OAuthErrorResponse { |
|
| 41 | - | error: string; |
|
| 42 | - | error_description?: string; |
|
| 43 | - | } |
|
| 44 | - | ||
| 45 | - | interface ProtectedResourceMetadata { |
|
| 46 | - | resource: string; |
|
| 47 | - | authorization_servers: string[]; |
|
| 48 | - | } |
|
| 49 | - | ||
| 50 | - | /** |
|
| 51 | - | * Fetch OAuth server metadata from PDS |
|
| 52 | - | * First checks for protected resource metadata to find the authorization server, |
|
| 53 | - | * then fetches OAuth metadata from there. |
|
| 54 | - | */ |
|
| 55 | - | export async function fetchOAuthMetadata( |
|
| 56 | - | pdsUrl: string, |
|
| 57 | - | ): Promise<OAuthServerMetadata> { |
|
| 58 | - | // First, try to get the authorization server from protected resource metadata |
|
| 59 | - | let authServerUrl = pdsUrl; |
|
| 60 | - | ||
| 61 | - | try { |
|
| 62 | - | const protectedResourceUrl = `${pdsUrl}/.well-known/oauth-protected-resource`; |
|
| 63 | - | const prResponse = await fetch(protectedResourceUrl); |
|
| 64 | - | if (prResponse.ok) { |
|
| 65 | - | const prData = (await prResponse.json()) as ProtectedResourceMetadata; |
|
| 66 | - | if ( |
|
| 67 | - | prData.authorization_servers && |
|
| 68 | - | prData.authorization_servers.length > 0 |
|
| 69 | - | ) { |
|
| 70 | - | authServerUrl = prData.authorization_servers[0]; |
|
| 71 | - | } |
|
| 72 | - | } |
|
| 73 | - | } catch { |
|
| 74 | - | // If protected resource metadata fails, fall back to PDS URL |
|
| 75 | - | } |
|
| 76 | - | ||
| 77 | - | const metadataUrl = `${authServerUrl}/.well-known/oauth-authorization-server`; |
|
| 78 | - | const response = await fetch(metadataUrl); |
|
| 79 | - | ||
| 80 | - | if (!response.ok) { |
|
| 81 | - | throw new Error( |
|
| 82 | - | `Failed to fetch OAuth metadata: ${response.status} ${response.statusText}`, |
|
| 83 | - | ); |
|
| 84 | - | } |
|
| 85 | - | ||
| 86 | - | return response.json(); |
|
| 87 | - | } |
|
| 88 | - | ||
| 89 | - | /** |
|
| 90 | - | * Generate PKCE code verifier and challenge |
|
| 91 | - | */ |
|
| 92 | - | export async function generatePKCE(): Promise<PKCEPair> { |
|
| 93 | - | // Generate 32 random bytes for code verifier |
|
| 94 | - | const verifierBytes = new Uint8Array(32); |
|
| 95 | - | crypto.getRandomValues(verifierBytes); |
|
| 96 | - | const codeVerifier = jose.base64url.encode(verifierBytes); |
|
| 97 | - | ||
| 98 | - | // Generate S256 challenge |
|
| 99 | - | const encoder = new TextEncoder(); |
|
| 100 | - | const data = encoder.encode(codeVerifier); |
|
| 101 | - | const hashBuffer = await crypto.subtle.digest("SHA-256", data); |
|
| 102 | - | const codeChallenge = jose.base64url.encode(new Uint8Array(hashBuffer)); |
|
| 103 | - | ||
| 104 | - | return { codeVerifier, codeChallenge }; |
|
| 105 | - | } |
|
| 106 | - | ||
| 107 | - | /** |
|
| 108 | - | * Generate a random state token |
|
| 109 | - | */ |
|
| 110 | - | export function generateState(): string { |
|
| 111 | - | const stateBytes = new Uint8Array(32); |
|
| 112 | - | crypto.getRandomValues(stateBytes); |
|
| 113 | - | return jose.base64url.encode(stateBytes); |
|
| 114 | - | } |
|
| 115 | - | ||
| 116 | - | /** |
|
| 117 | - | * Send a Pushed Authorization Request (PAR) to the PDS |
|
| 118 | - | */ |
|
| 119 | - | export async function sendPAR( |
|
| 120 | - | metadata: OAuthServerMetadata, |
|
| 121 | - | clientId: string, |
|
| 122 | - | redirectUri: string, |
|
| 123 | - | state: string, |
|
| 124 | - | pkce: PKCEPair, |
|
| 125 | - | dpopKeyPair: DPoPKeyPair, |
|
| 126 | - | scope: string, |
|
| 127 | - | dpopNonce?: string, |
|
| 128 | - | ): Promise<{ parResponse: PARResponse; dpopNonce: string }> { |
|
| 129 | - | const parEndpoint = metadata.pushed_authorization_request_endpoint; |
|
| 130 | - | ||
| 131 | - | const params = new URLSearchParams({ |
|
| 132 | - | client_id: clientId, |
|
| 133 | - | redirect_uri: redirectUri, |
|
| 134 | - | response_type: "code", |
|
| 135 | - | state, |
|
| 136 | - | scope, |
|
| 137 | - | code_challenge: pkce.codeChallenge, |
|
| 138 | - | code_challenge_method: "S256", |
|
| 139 | - | }); |
|
| 140 | - | ||
| 141 | - | // Create DPoP proof for this request |
|
| 142 | - | const dpopProof = await createDPoPProof(dpopKeyPair, { |
|
| 143 | - | method: "POST", |
|
| 144 | - | url: parEndpoint, |
|
| 145 | - | nonce: dpopNonce, |
|
| 146 | - | }); |
|
| 147 | - | ||
| 148 | - | const response = await fetch(parEndpoint, { |
|
| 149 | - | method: "POST", |
|
| 150 | - | headers: { |
|
| 151 | - | "Content-Type": "application/x-www-form-urlencoded", |
|
| 152 | - | DPoP: dpopProof, |
|
| 153 | - | }, |
|
| 154 | - | body: params.toString(), |
|
| 155 | - | }); |
|
| 156 | - | ||
| 157 | - | // Handle DPoP nonce requirement |
|
| 158 | - | const newNonce = extractDPoPNonce(response); |
|
| 159 | - | ||
| 160 | - | if (response.status === 400 || response.status === 401) { |
|
| 161 | - | const error: OAuthErrorResponse = await response.json(); |
|
| 162 | - | if (error.error === "use_dpop_nonce" && newNonce) { |
|
| 163 | - | // Retry with the nonce |
|
| 164 | - | return sendPAR( |
|
| 165 | - | metadata, |
|
| 166 | - | clientId, |
|
| 167 | - | redirectUri, |
|
| 168 | - | state, |
|
| 169 | - | pkce, |
|
| 170 | - | dpopKeyPair, |
|
| 171 | - | scope, |
|
| 172 | - | newNonce, |
|
| 173 | - | ); |
|
| 174 | - | } |
|
| 175 | - | throw new Error(`PAR failed: ${error.error_description || error.error}`); |
|
| 176 | - | } |
|
| 177 | - | ||
| 178 | - | if (!response.ok) { |
|
| 179 | - | throw new Error(`PAR failed: ${response.status} ${response.statusText}`); |
|
| 180 | - | } |
|
| 181 | - | ||
| 182 | - | const parResponse: PARResponse = await response.json(); |
|
| 183 | - | return { |
|
| 184 | - | parResponse, |
|
| 185 | - | dpopNonce: newNonce || dpopNonce || "", |
|
| 186 | - | }; |
|
| 187 | - | } |
|
| 188 | - | ||
| 189 | - | /** |
|
| 190 | - | * Build the authorization URL for redirecting the user |
|
| 191 | - | */ |
|
| 192 | - | export function buildAuthorizationUrl( |
|
| 193 | - | metadata: OAuthServerMetadata, |
|
| 194 | - | requestUri: string, |
|
| 195 | - | clientId: string, |
|
| 196 | - | ): string { |
|
| 197 | - | const url = new URL(metadata.authorization_endpoint); |
|
| 198 | - | url.searchParams.set("request_uri", requestUri); |
|
| 199 | - | url.searchParams.set("client_id", clientId); |
|
| 200 | - | return url.toString(); |
|
| 201 | - | } |
|
| 202 | - | ||
| 203 | - | /** |
|
| 204 | - | * Exchange authorization code for tokens |
|
| 205 | - | */ |
|
| 206 | - | export async function exchangeCodeForTokens( |
|
| 207 | - | metadata: OAuthServerMetadata, |
|
| 208 | - | code: string, |
|
| 209 | - | codeVerifier: string, |
|
| 210 | - | clientId: string, |
|
| 211 | - | redirectUri: string, |
|
| 212 | - | dpopKeyPair: DPoPKeyPair, |
|
| 213 | - | dpopNonce?: string, |
|
| 214 | - | ): Promise<{ tokenResponse: TokenResponse; dpopNonce: string }> { |
|
| 215 | - | const tokenEndpoint = metadata.token_endpoint; |
|
| 216 | - | ||
| 217 | - | const params = new URLSearchParams({ |
|
| 218 | - | grant_type: "authorization_code", |
|
| 219 | - | code, |
|
| 220 | - | redirect_uri: redirectUri, |
|
| 221 | - | client_id: clientId, |
|
| 222 | - | code_verifier: codeVerifier, |
|
| 223 | - | }); |
|
| 224 | - | ||
| 225 | - | // Create DPoP proof for token request |
|
| 226 | - | const dpopProof = await createDPoPProof(dpopKeyPair, { |
|
| 227 | - | method: "POST", |
|
| 228 | - | url: tokenEndpoint, |
|
| 229 | - | nonce: dpopNonce, |
|
| 230 | - | }); |
|
| 231 | - | ||
| 232 | - | const response = await fetch(tokenEndpoint, { |
|
| 233 | - | method: "POST", |
|
| 234 | - | headers: { |
|
| 235 | - | "Content-Type": "application/x-www-form-urlencoded", |
|
| 236 | - | DPoP: dpopProof, |
|
| 237 | - | }, |
|
| 238 | - | body: params.toString(), |
|
| 239 | - | }); |
|
| 240 | - | ||
| 241 | - | // Handle DPoP nonce requirement |
|
| 242 | - | const newNonce = extractDPoPNonce(response); |
|
| 243 | - | ||
| 244 | - | if (response.status === 400 || response.status === 401) { |
|
| 245 | - | const error: OAuthErrorResponse = await response.json(); |
|
| 246 | - | if (error.error === "use_dpop_nonce" && newNonce) { |
|
| 247 | - | // Retry with the nonce |
|
| 248 | - | return exchangeCodeForTokens( |
|
| 249 | - | metadata, |
|
| 250 | - | code, |
|
| 251 | - | codeVerifier, |
|
| 252 | - | clientId, |
|
| 253 | - | redirectUri, |
|
| 254 | - | dpopKeyPair, |
|
| 255 | - | newNonce, |
|
| 256 | - | ); |
|
| 257 | - | } |
|
| 258 | - | throw new Error( |
|
| 259 | - | `Token exchange failed: ${error.error_description || error.error}`, |
|
| 260 | - | ); |
|
| 261 | - | } |
|
| 262 | - | ||
| 263 | - | if (!response.ok) { |
|
| 264 | - | throw new Error( |
|
| 265 | - | `Token exchange failed: ${response.status} ${response.statusText}`, |
|
| 266 | - | ); |
|
| 267 | - | } |
|
| 268 | - | ||
| 269 | - | const tokenResponse: TokenResponse = await response.json(); |
|
| 270 | - | return { |
|
| 271 | - | tokenResponse, |
|
| 272 | - | dpopNonce: newNonce || dpopNonce || "", |
|
| 273 | - | }; |
|
| 274 | - | } |
|
| 275 | - | ||
| 276 | - | export interface OAuthFlowConfig { |
|
| 277 | - | pdsUrl: string; |
|
| 278 | - | clientId: string; |
|
| 279 | - | redirectUri: string; |
|
| 280 | - | scope: string; |
|
| 281 | - | } |
|
| 282 | - | ||
| 283 | - | export interface InitiateOAuthResult { |
|
| 284 | - | authUrl: string; |
|
| 285 | - | state: string; |
|
| 286 | - | } |
|
| 287 | - | ||
| 288 | - | /** |
|
| 289 | - | * Initiates an OAuth login flow - generates PKCE, DPoP keypair, sends PAR, and stores auth state |
|
| 290 | - | */ |
|
| 291 | - | export async function initiateOAuthFlow( |
|
| 292 | - | kv: KVNamespace, |
|
| 293 | - | config: OAuthFlowConfig, |
|
| 294 | - | ): Promise<InitiateOAuthResult> { |
|
| 295 | - | const metadata = await fetchOAuthMetadata(config.pdsUrl); |
|
| 296 | - | const pkce = await generatePKCE(); |
|
| 297 | - | const state = generateState(); |
|
| 298 | - | const dpopKeyPair = await generateDPoPKeyPair(); |
|
| 299 | - | ||
| 300 | - | const { parResponse, dpopNonce } = await sendPAR( |
|
| 301 | - | metadata, |
|
| 302 | - | config.clientId, |
|
| 303 | - | config.redirectUri, |
|
| 304 | - | state, |
|
| 305 | - | pkce, |
|
| 306 | - | dpopKeyPair, |
|
| 307 | - | config.scope, |
|
| 308 | - | ); |
|
| 309 | - | ||
| 310 | - | await storeAuthState(kv, state, pkce.codeVerifier, dpopKeyPair, dpopNonce); |
|
| 311 | - | ||
| 312 | - | const authUrl = buildAuthorizationUrl( |
|
| 313 | - | metadata, |
|
| 314 | - | parResponse.request_uri, |
|
| 315 | - | config.clientId, |
|
| 316 | - | ); |
|
| 317 | - | ||
| 318 | - | return { authUrl, state }; |
|
| 319 | - | } |
|
| 320 | - | ||
| 321 | - | export interface CompleteOAuthResult { |
|
| 322 | - | tokenResponse: TokenResponse; |
|
| 323 | - | dpopKeyPair: DPoPKeyPair; |
|
| 324 | - | dpopNonce: string; |
|
| 325 | - | } |
|
| 326 | - | ||
| 327 | - | /** |
|
| 328 | - | * Completes an OAuth callback - validates state, exchanges code for tokens |
|
| 329 | - | */ |
|
| 330 | - | export async function completeOAuthFlow( |
|
| 331 | - | kv: KVNamespace, |
|
| 332 | - | pdsUrl: string, |
|
| 333 | - | code: string, |
|
| 334 | - | state: string, |
|
| 335 | - | clientId: string, |
|
| 336 | - | redirectUri: string, |
|
| 337 | - | ): Promise<CompleteOAuthResult | null> { |
|
| 338 | - | const authState = await getAndDeleteAuthState(kv, state); |
|
| 339 | - | if (!authState) { |
|
| 340 | - | return null; |
|
| 341 | - | } |
|
| 342 | - | ||
| 343 | - | const metadata = await fetchOAuthMetadata(pdsUrl); |
|
| 344 | - | ||
| 345 | - | const { tokenResponse, dpopNonce } = await exchangeCodeForTokens( |
|
| 346 | - | metadata, |
|
| 347 | - | code, |
|
| 348 | - | authState.codeVerifier, |
|
| 349 | - | clientId, |
|
| 350 | - | redirectUri, |
|
| 351 | - | authState.dpopKeyPair, |
|
| 352 | - | authState.dpopNonce, |
|
| 353 | - | ); |
|
| 354 | - | ||
| 355 | - | return { |
|
| 356 | - | tokenResponse, |
|
| 357 | - | dpopKeyPair: authState.dpopKeyPair, |
|
| 358 | - | dpopNonce, |
|
| 359 | - | }; |
|
| 360 | - | } |
|
| 361 | - | ||
| 362 | - | /** |
|
| 363 | - | * Refresh an access token |
|
| 364 | - | */ |
|
| 365 | - | export async function refreshAccessToken( |
|
| 366 | - | metadata: OAuthServerMetadata, |
|
| 367 | - | refreshToken: string, |
|
| 368 | - | clientId: string, |
|
| 369 | - | dpopKeyPair: DPoPKeyPair, |
|
| 370 | - | dpopNonce?: string, |
|
| 371 | - | ): Promise<{ tokenResponse: TokenResponse; dpopNonce: string }> { |
|
| 372 | - | const tokenEndpoint = metadata.token_endpoint; |
|
| 373 | - | ||
| 374 | - | const params = new URLSearchParams({ |
|
| 375 | - | grant_type: "refresh_token", |
|
| 376 | - | refresh_token: refreshToken, |
|
| 377 | - | client_id: clientId, |
|
| 378 | - | }); |
|
| 379 | - | ||
| 380 | - | // Create DPoP proof for token request |
|
| 381 | - | const dpopProof = await createDPoPProof(dpopKeyPair, { |
|
| 382 | - | method: "POST", |
|
| 383 | - | url: tokenEndpoint, |
|
| 384 | - | nonce: dpopNonce, |
|
| 385 | - | }); |
|
| 386 | - | ||
| 387 | - | const response = await fetch(tokenEndpoint, { |
|
| 388 | - | method: "POST", |
|
| 389 | - | headers: { |
|
| 390 | - | "Content-Type": "application/x-www-form-urlencoded", |
|
| 391 | - | DPoP: dpopProof, |
|
| 392 | - | }, |
|
| 393 | - | body: params.toString(), |
|
| 394 | - | }); |
|
| 395 | - | ||
| 396 | - | // Handle DPoP nonce requirement |
|
| 397 | - | const newNonce = extractDPoPNonce(response); |
|
| 398 | - | ||
| 399 | - | if (response.status === 400 || response.status === 401) { |
|
| 400 | - | const error: OAuthErrorResponse = await response.json(); |
|
| 401 | - | if (error.error === "use_dpop_nonce" && newNonce) { |
|
| 402 | - | // Retry with the nonce |
|
| 403 | - | return refreshAccessToken( |
|
| 404 | - | metadata, |
|
| 405 | - | refreshToken, |
|
| 406 | - | clientId, |
|
| 407 | - | dpopKeyPair, |
|
| 408 | - | newNonce, |
|
| 409 | - | ); |
|
| 410 | - | } |
|
| 411 | - | throw new Error( |
|
| 412 | - | `Token refresh failed: ${error.error_description || error.error}`, |
|
| 413 | - | ); |
|
| 414 | - | } |
|
| 415 | - | ||
| 416 | - | if (!response.ok) { |
|
| 417 | - | throw new Error( |
|
| 418 | - | `Token refresh failed: ${response.status} ${response.statusText}`, |
|
| 419 | - | ); |
|
| 420 | - | } |
|
| 421 | - | ||
| 422 | - | const tokenResponse: TokenResponse = await response.json(); |
|
| 423 | - | return { |
|
| 424 | - | tokenResponse, |
|
| 425 | - | dpopNonce: newNonce || dpopNonce || "", |
|
| 426 | - | }; |
|
| 427 | - | } |
| 1 | - | import type { Context } from "hono"; |
|
| 2 | - | import type { JWK } from "jose"; |
|
| 3 | - | import { exportDPoPKeyPair, importDPoPKeyPair, type DPoPKeyPair } from "./dpop"; |
|
| 4 | - | ||
| 5 | - | export interface StoredSession { |
|
| 6 | - | accessToken: string; |
|
| 7 | - | refreshToken: string; |
|
| 8 | - | dpopPrivateJwk: JWK; |
|
| 9 | - | dpopPublicJwk: JWK; |
|
| 10 | - | dpopNonce: string; |
|
| 11 | - | did: string; |
|
| 12 | - | handle?: string; |
|
| 13 | - | pdsUrl?: string; // User's PDS URL (for guest sessions) |
|
| 14 | - | expiresAt: number; // Unix timestamp |
|
| 15 | - | createdAt: number; |
|
| 16 | - | } |
|
| 17 | - | ||
| 18 | - | export interface AuthState { |
|
| 19 | - | codeVerifier: string; |
|
| 20 | - | state: string; |
|
| 21 | - | dpopPrivateJwk: JWK; |
|
| 22 | - | dpopPublicJwk: JWK; |
|
| 23 | - | dpopNonce: string; |
|
| 24 | - | createdAt: number; |
|
| 25 | - | } |
|
| 26 | - | ||
| 27 | - | const SESSION_COOKIE_NAME = "session_id"; |
|
| 28 | - | const SESSION_TTL = 60 * 60 * 24 * 14; // 14 days in seconds |
|
| 29 | - | const AUTH_STATE_TTL = 60 * 10; // 10 minutes in seconds |
|
| 30 | - | ||
| 31 | - | /** |
|
| 32 | - | * Generate a unique session ID |
|
| 33 | - | */ |
|
| 34 | - | export function generateSessionId(): string { |
|
| 35 | - | const bytes = new Uint8Array(32); |
|
| 36 | - | crypto.getRandomValues(bytes); |
|
| 37 | - | return Array.from(bytes) |
|
| 38 | - | .map((b) => b.toString(16).padStart(2, "0")) |
|
| 39 | - | .join(""); |
|
| 40 | - | } |
|
| 41 | - | ||
| 42 | - | /** |
|
| 43 | - | * Store auth state during OAuth flow |
|
| 44 | - | */ |
|
| 45 | - | export async function storeAuthState( |
|
| 46 | - | kv: KVNamespace, |
|
| 47 | - | state: string, |
|
| 48 | - | codeVerifier: string, |
|
| 49 | - | dpopKeyPair: DPoPKeyPair, |
|
| 50 | - | dpopNonce: string, |
|
| 51 | - | ): Promise<void> { |
|
| 52 | - | const exported = await exportDPoPKeyPair(dpopKeyPair); |
|
| 53 | - | ||
| 54 | - | const authState: AuthState = { |
|
| 55 | - | codeVerifier, |
|
| 56 | - | state, |
|
| 57 | - | dpopPrivateJwk: exported.privateJwk, |
|
| 58 | - | dpopPublicJwk: exported.publicJwk, |
|
| 59 | - | dpopNonce, |
|
| 60 | - | createdAt: Date.now(), |
|
| 61 | - | }; |
|
| 62 | - | ||
| 63 | - | await kv.put(`auth_state:${state}`, JSON.stringify(authState), { |
|
| 64 | - | expirationTtl: AUTH_STATE_TTL, |
|
| 65 | - | }); |
|
| 66 | - | } |
|
| 67 | - | ||
| 68 | - | /** |
|
| 69 | - | * Retrieve and delete auth state |
|
| 70 | - | */ |
|
| 71 | - | export async function getAndDeleteAuthState( |
|
| 72 | - | kv: KVNamespace, |
|
| 73 | - | state: string, |
|
| 74 | - | ): Promise<{ |
|
| 75 | - | codeVerifier: string; |
|
| 76 | - | dpopKeyPair: DPoPKeyPair; |
|
| 77 | - | dpopNonce: string; |
|
| 78 | - | } | null> { |
|
| 79 | - | const data = await kv.get(`auth_state:${state}`); |
|
| 80 | - | if (!data) return null; |
|
| 81 | - | ||
| 82 | - | // Delete the auth state (one-time use) |
|
| 83 | - | await kv.delete(`auth_state:${state}`); |
|
| 84 | - | ||
| 85 | - | const authState: AuthState = JSON.parse(data); |
|
| 86 | - | const dpopKeyPair = await importDPoPKeyPair({ |
|
| 87 | - | privateJwk: authState.dpopPrivateJwk, |
|
| 88 | - | publicJwk: authState.dpopPublicJwk, |
|
| 89 | - | }); |
|
| 90 | - | ||
| 91 | - | return { |
|
| 92 | - | codeVerifier: authState.codeVerifier, |
|
| 93 | - | dpopKeyPair, |
|
| 94 | - | dpopNonce: authState.dpopNonce, |
|
| 95 | - | }; |
|
| 96 | - | } |
|
| 97 | - | ||
| 98 | - | /** |
|
| 99 | - | * Create a new session and store it in KV |
|
| 100 | - | */ |
|
| 101 | - | export async function createSession( |
|
| 102 | - | kv: KVNamespace, |
|
| 103 | - | accessToken: string, |
|
| 104 | - | refreshToken: string, |
|
| 105 | - | dpopKeyPair: DPoPKeyPair, |
|
| 106 | - | dpopNonce: string, |
|
| 107 | - | did: string, |
|
| 108 | - | expiresIn: number, |
|
| 109 | - | handle?: string, |
|
| 110 | - | pdsUrl?: string, |
|
| 111 | - | ): Promise<string> { |
|
| 112 | - | const sessionId = generateSessionId(); |
|
| 113 | - | const exported = await exportDPoPKeyPair(dpopKeyPair); |
|
| 114 | - | ||
| 115 | - | const session: StoredSession = { |
|
| 116 | - | accessToken, |
|
| 117 | - | refreshToken, |
|
| 118 | - | dpopPrivateJwk: exported.privateJwk, |
|
| 119 | - | dpopPublicJwk: exported.publicJwk, |
|
| 120 | - | dpopNonce, |
|
| 121 | - | did, |
|
| 122 | - | handle, |
|
| 123 | - | pdsUrl, |
|
| 124 | - | expiresAt: Date.now() + expiresIn * 1000, |
|
| 125 | - | createdAt: Date.now(), |
|
| 126 | - | }; |
|
| 127 | - | ||
| 128 | - | await kv.put(`session:${sessionId}`, JSON.stringify(session), { |
|
| 129 | - | expirationTtl: SESSION_TTL, |
|
| 130 | - | }); |
|
| 131 | - | ||
| 132 | - | return sessionId; |
|
| 133 | - | } |
|
| 134 | - | ||
| 135 | - | /** |
|
| 136 | - | * Get session from KV by session ID |
|
| 137 | - | */ |
|
| 138 | - | export async function getSession( |
|
| 139 | - | kv: KVNamespace, |
|
| 140 | - | sessionId: string, |
|
| 141 | - | ): Promise<{ session: StoredSession; dpopKeyPair: DPoPKeyPair } | null> { |
|
| 142 | - | const data = await kv.get(`session:${sessionId}`); |
|
| 143 | - | if (!data) return null; |
|
| 144 | - | ||
| 145 | - | const session: StoredSession = JSON.parse(data); |
|
| 146 | - | const dpopKeyPair = await importDPoPKeyPair({ |
|
| 147 | - | privateJwk: session.dpopPrivateJwk, |
|
| 148 | - | publicJwk: session.dpopPublicJwk, |
|
| 149 | - | }); |
|
| 150 | - | ||
| 151 | - | return { session, dpopKeyPair }; |
|
| 152 | - | } |
|
| 153 | - | ||
| 154 | - | /** |
|
| 155 | - | * Update session with new tokens |
|
| 156 | - | */ |
|
| 157 | - | export async function updateSession( |
|
| 158 | - | kv: KVNamespace, |
|
| 159 | - | sessionId: string, |
|
| 160 | - | accessToken: string, |
|
| 161 | - | refreshToken: string, |
|
| 162 | - | dpopNonce: string, |
|
| 163 | - | expiresIn: number, |
|
| 164 | - | ): Promise<void> { |
|
| 165 | - | const data = await kv.get(`session:${sessionId}`); |
|
| 166 | - | if (!data) throw new Error("Session not found"); |
|
| 167 | - | ||
| 168 | - | const session: StoredSession = JSON.parse(data); |
|
| 169 | - | session.accessToken = accessToken; |
|
| 170 | - | session.refreshToken = refreshToken; |
|
| 171 | - | session.dpopNonce = dpopNonce; |
|
| 172 | - | session.expiresAt = Date.now() + expiresIn * 1000; |
|
| 173 | - | ||
| 174 | - | await kv.put(`session:${sessionId}`, JSON.stringify(session), { |
|
| 175 | - | expirationTtl: SESSION_TTL, |
|
| 176 | - | }); |
|
| 177 | - | } |
|
| 178 | - | ||
| 179 | - | /** |
|
| 180 | - | * Delete a session |
|
| 181 | - | */ |
|
| 182 | - | export async function deleteSession( |
|
| 183 | - | kv: KVNamespace, |
|
| 184 | - | sessionId: string, |
|
| 185 | - | ): Promise<void> { |
|
| 186 | - | await kv.delete(`session:${sessionId}`); |
|
| 187 | - | } |
|
| 188 | - | ||
| 189 | - | /** |
|
| 190 | - | * Get session ID from cookie |
|
| 191 | - | */ |
|
| 192 | - | export function getSessionIdFromCookie(c: Context): string | null { |
|
| 193 | - | const cookie = c.req.header("Cookie"); |
|
| 194 | - | if (!cookie) return null; |
|
| 195 | - | ||
| 196 | - | const match = cookie.match(new RegExp(`${SESSION_COOKIE_NAME}=([^;]+)`)); |
|
| 197 | - | return match ? match[1] : null; |
|
| 198 | - | } |
|
| 199 | - | ||
| 200 | - | /** |
|
| 201 | - | * Set session cookie in response |
|
| 202 | - | */ |
|
| 203 | - | export function setSessionCookie( |
|
| 204 | - | c: Context, |
|
| 205 | - | sessionId: string, |
|
| 206 | - | clientUrl: string, |
|
| 207 | - | ): void { |
|
| 208 | - | const isLocalhost = clientUrl.includes("localhost"); |
|
| 209 | - | const domain = isLocalhost ? "" : "; Domain=.stevedylan.dev"; |
|
| 210 | - | const secure = isLocalhost ? "" : "; Secure"; |
|
| 211 | - | ||
| 212 | - | c.header( |
|
| 213 | - | "Set-Cookie", |
|
| 214 | - | `${SESSION_COOKIE_NAME}=${sessionId}; HttpOnly; SameSite=Lax; Path=/${domain}${secure}; Max-Age=${SESSION_TTL}`, |
|
| 215 | - | ); |
|
| 216 | - | } |
|
| 217 | - | ||
| 218 | - | /** |
|
| 219 | - | * Clear session cookie |
|
| 220 | - | */ |
|
| 221 | - | export function clearSessionCookie(c: Context, clientUrl: string): void { |
|
| 222 | - | const isLocalhost = clientUrl.includes("localhost"); |
|
| 223 | - | const domain = isLocalhost ? "" : "; Domain=.stevedylan.dev"; |
|
| 224 | - | const secure = isLocalhost ? "" : "; Secure"; |
|
| 225 | - | ||
| 226 | - | c.header( |
|
| 227 | - | "Set-Cookie", |
|
| 228 | - | `${SESSION_COOKIE_NAME}=; HttpOnly; SameSite=Lax; Path=/${domain}${secure}; Max-Age=0`, |
|
| 229 | - | ); |
|
| 230 | - | } |
|
| 231 | - | ||
| 232 | - | /** |
|
| 233 | - | * Check if token is expired or about to expire (within 1 minute) |
|
| 234 | - | */ |
|
| 235 | - | export function isTokenExpired(expiresAt: number): boolean { |
|
| 236 | - | return Date.now() > expiresAt - 60000; |
|
| 237 | - | } |
| 1 | - | import { Hono } from "hono"; |
|
| 2 | - | import { |
|
| 3 | - | fetchOAuthMetadata, |
|
| 4 | - | refreshAccessToken, |
|
| 5 | - | initiateOAuthFlow, |
|
| 6 | - | completeOAuthFlow, |
|
| 7 | - | } from "../lib/oauth"; |
|
| 8 | - | import { |
|
| 9 | - | createSession, |
|
| 10 | - | getSession, |
|
| 11 | - | deleteSession, |
|
| 12 | - | getSessionIdFromCookie, |
|
| 13 | - | setSessionCookie, |
|
| 14 | - | clearSessionCookie, |
|
| 15 | - | isTokenExpired, |
|
| 16 | - | updateSession, |
|
| 17 | - | } from "../lib/session"; |
|
| 18 | - | ||
| 19 | - | interface Env { |
|
| 20 | - | SESSIONS: KVNamespace; |
|
| 21 | - | ALLOWED_DID: string; |
|
| 22 | - | PDS_URL: string; |
|
| 23 | - | CLIENT_URL: string; |
|
| 24 | - | API_URL: string; |
|
| 25 | - | } |
|
| 26 | - | ||
| 27 | - | const auth = new Hono<{ Bindings: Env }>(); |
|
| 28 | - | ||
| 29 | - | // OAuth client metadata endpoint |
|
| 30 | - | auth.get("/client-metadata.json", (c) => { |
|
| 31 | - | const clientId = `${c.env.API_URL}/auth/client-metadata.json`; |
|
| 32 | - | const redirectUri = `${c.env.API_URL}/auth/callback`; |
|
| 33 | - | ||
| 34 | - | return c.json({ |
|
| 35 | - | client_id: clientId, |
|
| 36 | - | client_name: "Steve Dylan's Blog", |
|
| 37 | - | client_uri: c.env.API_URL, |
|
| 38 | - | redirect_uris: [redirectUri], |
|
| 39 | - | grant_types: ["authorization_code", "refresh_token"], |
|
| 40 | - | response_types: ["code"], |
|
| 41 | - | scope: "atproto blob:*/* repo:site.standard.document", |
|
| 42 | - | token_endpoint_auth_method: "none", |
|
| 43 | - | application_type: "web", |
|
| 44 | - | dpop_bound_access_tokens: true, |
|
| 45 | - | }); |
|
| 46 | - | }); |
|
| 47 | - | ||
| 48 | - | // Start OAuth login flow |
|
| 49 | - | auth.get("/login", async (c) => { |
|
| 50 | - | try { |
|
| 51 | - | const clientId = `${c.env.API_URL}/auth/client-metadata.json`; |
|
| 52 | - | const redirectUri = `${c.env.API_URL}/auth/callback`; |
|
| 53 | - | ||
| 54 | - | const { authUrl } = await initiateOAuthFlow(c.env.SESSIONS, { |
|
| 55 | - | pdsUrl: c.env.PDS_URL, |
|
| 56 | - | clientId, |
|
| 57 | - | redirectUri, |
|
| 58 | - | scope: "atproto blob:*/* repo:site.standard.document", |
|
| 59 | - | }); |
|
| 60 | - | ||
| 61 | - | return c.redirect(authUrl); |
|
| 62 | - | } catch (error) { |
|
| 63 | - | console.error("Login error:", error); |
|
| 64 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=login_failed`); |
|
| 65 | - | } |
|
| 66 | - | }); |
|
| 67 | - | ||
| 68 | - | // OAuth callback handler |
|
| 69 | - | auth.get("/callback", async (c) => { |
|
| 70 | - | try { |
|
| 71 | - | const code = c.req.query("code"); |
|
| 72 | - | const state = c.req.query("state"); |
|
| 73 | - | const error = c.req.query("error"); |
|
| 74 | - | const errorDescription = c.req.query("error_description"); |
|
| 75 | - | ||
| 76 | - | // Handle OAuth errors |
|
| 77 | - | if (error) { |
|
| 78 | - | console.error("OAuth error:", error, errorDescription); |
|
| 79 | - | return c.redirect( |
|
| 80 | - | `${c.env.CLIENT_URL}/now?error=${encodeURIComponent(error)}`, |
|
| 81 | - | ); |
|
| 82 | - | } |
|
| 83 | - | ||
| 84 | - | if (!code || !state) { |
|
| 85 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=missing_params`); |
|
| 86 | - | } |
|
| 87 | - | ||
| 88 | - | const clientId = `${c.env.API_URL}/auth/client-metadata.json`; |
|
| 89 | - | const redirectUri = `${c.env.API_URL}/auth/callback`; |
|
| 90 | - | ||
| 91 | - | const oauthResult = await completeOAuthFlow( |
|
| 92 | - | c.env.SESSIONS, |
|
| 93 | - | c.env.PDS_URL, |
|
| 94 | - | code, |
|
| 95 | - | state, |
|
| 96 | - | clientId, |
|
| 97 | - | redirectUri, |
|
| 98 | - | ); |
|
| 99 | - | ||
| 100 | - | if (!oauthResult) { |
|
| 101 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=invalid_state`); |
|
| 102 | - | } |
|
| 103 | - | ||
| 104 | - | const { tokenResponse, dpopKeyPair, dpopNonce } = oauthResult; |
|
| 105 | - | ||
| 106 | - | // CRITICAL: Only allow the site owner |
|
| 107 | - | if (tokenResponse.sub !== c.env.ALLOWED_DID) { |
|
| 108 | - | console.error("Unauthorized login attempt from:", tokenResponse.sub); |
|
| 109 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=unauthorized`); |
|
| 110 | - | } |
|
| 111 | - | ||
| 112 | - | // Create session |
|
| 113 | - | const sessionId = await createSession( |
|
| 114 | - | c.env.SESSIONS, |
|
| 115 | - | tokenResponse.access_token, |
|
| 116 | - | tokenResponse.refresh_token || "", |
|
| 117 | - | dpopKeyPair, |
|
| 118 | - | dpopNonce, |
|
| 119 | - | tokenResponse.sub, |
|
| 120 | - | tokenResponse.expires_in, |
|
| 121 | - | ); |
|
| 122 | - | ||
| 123 | - | // Set session cookie and redirect to /now |
|
| 124 | - | setSessionCookie(c, sessionId, c.env.CLIENT_URL); |
|
| 125 | - | return c.redirect(`${c.env.CLIENT_URL}/now/post`); |
|
| 126 | - | } catch (error) { |
|
| 127 | - | console.error("Callback error:", error); |
|
| 128 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=callback_failed`); |
|
| 129 | - | } |
|
| 130 | - | }); |
|
| 131 | - | ||
| 132 | - | // Logout endpoint |
|
| 133 | - | auth.post("/logout", async (c) => { |
|
| 134 | - | const sessionId = getSessionIdFromCookie(c); |
|
| 135 | - | ||
| 136 | - | if (sessionId) { |
|
| 137 | - | await deleteSession(c.env.SESSIONS, sessionId); |
|
| 138 | - | } |
|
| 139 | - | ||
| 140 | - | clearSessionCookie(c, c.env.CLIENT_URL); |
|
| 141 | - | ||
| 142 | - | return c.json({ success: true }); |
|
| 143 | - | }); |
|
| 144 | - | ||
| 145 | - | // Check auth status |
|
| 146 | - | auth.get("/status", async (c) => { |
|
| 147 | - | const sessionId = getSessionIdFromCookie(c); |
|
| 148 | - | ||
| 149 | - | if (!sessionId) { |
|
| 150 | - | return c.json({ authenticated: false }); |
|
| 151 | - | } |
|
| 152 | - | ||
| 153 | - | const sessionData = await getSession(c.env.SESSIONS, sessionId); |
|
| 154 | - | if (!sessionData) { |
|
| 155 | - | clearSessionCookie(c, c.env.CLIENT_URL); |
|
| 156 | - | return c.json({ authenticated: false }); |
|
| 157 | - | } |
|
| 158 | - | ||
| 159 | - | const { session, dpopKeyPair } = sessionData; |
|
| 160 | - | ||
| 161 | - | // Check if token needs refresh |
|
| 162 | - | if (isTokenExpired(session.expiresAt) && session.refreshToken) { |
|
| 163 | - | try { |
|
| 164 | - | const metadata = await fetchOAuthMetadata(c.env.PDS_URL); |
|
| 165 | - | const clientId = `${c.env.API_URL}/auth/client-metadata.json`; |
|
| 166 | - | ||
| 167 | - | const { tokenResponse, dpopNonce } = await refreshAccessToken( |
|
| 168 | - | metadata, |
|
| 169 | - | session.refreshToken, |
|
| 170 | - | clientId, |
|
| 171 | - | dpopKeyPair, |
|
| 172 | - | session.dpopNonce, |
|
| 173 | - | ); |
|
| 174 | - | ||
| 175 | - | // Update session with new tokens |
|
| 176 | - | await updateSession( |
|
| 177 | - | c.env.SESSIONS, |
|
| 178 | - | sessionId, |
|
| 179 | - | tokenResponse.access_token, |
|
| 180 | - | tokenResponse.refresh_token || session.refreshToken, |
|
| 181 | - | dpopNonce, |
|
| 182 | - | tokenResponse.expires_in, |
|
| 183 | - | ); |
|
| 184 | - | ||
| 185 | - | return c.json({ |
|
| 186 | - | authenticated: true, |
|
| 187 | - | did: session.did, |
|
| 188 | - | handle: session.handle, |
|
| 189 | - | }); |
|
| 190 | - | } catch (error) { |
|
| 191 | - | console.error("Token refresh failed:", error); |
|
| 192 | - | await deleteSession(c.env.SESSIONS, sessionId); |
|
| 193 | - | clearSessionCookie(c, c.env.CLIENT_URL); |
|
| 194 | - | return c.json({ authenticated: false }); |
|
| 195 | - | } |
|
| 196 | - | } |
|
| 197 | - | ||
| 198 | - | return c.json({ |
|
| 199 | - | authenticated: true, |
|
| 200 | - | did: session.did, |
|
| 201 | - | handle: session.handle, |
|
| 202 | - | }); |
|
| 203 | - | }); |
|
| 204 | - | ||
| 205 | - | export default auth; |
| 1 | - | import { Hono } from "hono"; |
|
| 2 | - | import { |
|
| 3 | - | fetchOAuthMetadata, |
|
| 4 | - | refreshAccessToken, |
|
| 5 | - | initiateOAuthFlow, |
|
| 6 | - | completeOAuthFlow, |
|
| 7 | - | } from "../lib/oauth"; |
|
| 8 | - | import { |
|
| 9 | - | createSession, |
|
| 10 | - | getSession, |
|
| 11 | - | deleteSession, |
|
| 12 | - | getSessionIdFromCookie, |
|
| 13 | - | setSessionCookie, |
|
| 14 | - | clearSessionCookie, |
|
| 15 | - | isTokenExpired, |
|
| 16 | - | updateSession, |
|
| 17 | - | } from "../lib/session"; |
|
| 18 | - | ||
| 19 | - | interface Env { |
|
| 20 | - | SESSIONS: KVNamespace; |
|
| 21 | - | ALLOWED_DID: string; |
|
| 22 | - | PDS_URL: string; |
|
| 23 | - | CLIENT_URL: string; |
|
| 24 | - | API_URL: string; |
|
| 25 | - | } |
|
| 26 | - | ||
| 27 | - | const guestAuth = new Hono<{ Bindings: Env }>(); |
|
| 28 | - | ||
| 29 | - | // OAuth client metadata endpoint for guests |
|
| 30 | - | guestAuth.get("/client-metadata.json", (c) => { |
|
| 31 | - | const clientId = `${c.env.API_URL}/guest-auth/client-metadata.json`; |
|
| 32 | - | const redirectUri = `${c.env.API_URL}/guest-auth/callback`; |
|
| 33 | - | ||
| 34 | - | return c.json({ |
|
| 35 | - | client_id: clientId, |
|
| 36 | - | client_name: "Steve Dylan's Blog (Guest)", |
|
| 37 | - | client_uri: c.env.API_URL, |
|
| 38 | - | redirect_uris: [redirectUri], |
|
| 39 | - | grant_types: ["authorization_code", "refresh_token"], |
|
| 40 | - | response_types: ["code"], |
|
| 41 | - | scope: "atproto repo:site.standard.document.comment?action=create", |
|
| 42 | - | token_endpoint_auth_method: "none", |
|
| 43 | - | application_type: "web", |
|
| 44 | - | dpop_bound_access_tokens: true, |
|
| 45 | - | }); |
|
| 46 | - | }); |
|
| 47 | - | ||
| 48 | - | // Resolve handle to PDS URL |
|
| 49 | - | async function resolveHandleToPDS(handle: string): Promise<string> { |
|
| 50 | - | // First, resolve the handle to a DID |
|
| 51 | - | let did: string; |
|
| 52 | - | ||
| 53 | - | if (handle.startsWith("did:")) { |
|
| 54 | - | did = handle; |
|
| 55 | - | } else { |
|
| 56 | - | // Try to resolve handle via Bluesky API |
|
| 57 | - | const resolveUrl = `https://public.api.bsky.app/xrpc/com.atproto.identity.resolveHandle?handle=${encodeURIComponent(handle)}`; |
|
| 58 | - | const resolveResponse = await fetch(resolveUrl); |
|
| 59 | - | if (!resolveResponse.ok) { |
|
| 60 | - | throw new Error("Could not resolve handle"); |
|
| 61 | - | } |
|
| 62 | - | const resolveData = (await resolveResponse.json()) as { did: string }; |
|
| 63 | - | did = resolveData.did; |
|
| 64 | - | } |
|
| 65 | - | ||
| 66 | - | // Now resolve the DID to get the PDS URL from the DID document |
|
| 67 | - | let pdsUrl: string | undefined; |
|
| 68 | - | ||
| 69 | - | if (did.startsWith("did:plc:")) { |
|
| 70 | - | // Fetch DID document from plc.directory |
|
| 71 | - | const didDocUrl = `https://plc.directory/${did}`; |
|
| 72 | - | const didDocResponse = await fetch(didDocUrl); |
|
| 73 | - | if (!didDocResponse.ok) { |
|
| 74 | - | throw new Error("Could not fetch DID document"); |
|
| 75 | - | } |
|
| 76 | - | const didDoc = (await didDocResponse.json()) as { |
|
| 77 | - | service?: Array<{ id: string; type: string; serviceEndpoint: string }>; |
|
| 78 | - | }; |
|
| 79 | - | ||
| 80 | - | // Find the PDS service endpoint |
|
| 81 | - | const pdsService = didDoc.service?.find( |
|
| 82 | - | (s) => s.id === "#atproto_pds" || s.type === "AtprotoPersonalDataServer", |
|
| 83 | - | ); |
|
| 84 | - | pdsUrl = pdsService?.serviceEndpoint; |
|
| 85 | - | } else if (did.startsWith("did:web:")) { |
|
| 86 | - | // For did:web, fetch the DID document from the domain |
|
| 87 | - | const domain = did.replace("did:web:", ""); |
|
| 88 | - | const didDocUrl = `https://${domain}/.well-known/did.json`; |
|
| 89 | - | const didDocResponse = await fetch(didDocUrl); |
|
| 90 | - | if (!didDocResponse.ok) { |
|
| 91 | - | throw new Error("Could not fetch DID document"); |
|
| 92 | - | } |
|
| 93 | - | const didDoc = (await didDocResponse.json()) as { |
|
| 94 | - | service?: Array<{ id: string; type: string; serviceEndpoint: string }>; |
|
| 95 | - | }; |
|
| 96 | - | ||
| 97 | - | const pdsService = didDoc.service?.find( |
|
| 98 | - | (s) => s.id === "#atproto_pds" || s.type === "AtprotoPersonalDataServer", |
|
| 99 | - | ); |
|
| 100 | - | pdsUrl = pdsService?.serviceEndpoint; |
|
| 101 | - | } |
|
| 102 | - | ||
| 103 | - | if (!pdsUrl) { |
|
| 104 | - | throw new Error("Could not find PDS URL for user"); |
|
| 105 | - | } |
|
| 106 | - | ||
| 107 | - | return pdsUrl; |
|
| 108 | - | } |
|
| 109 | - | ||
| 110 | - | // Start OAuth login flow for guests |
|
| 111 | - | guestAuth.get("/login", async (c) => { |
|
| 112 | - | try { |
|
| 113 | - | const clientId = `${c.env.API_URL}/guest-auth/client-metadata.json`; |
|
| 114 | - | const redirectUri = `${c.env.API_URL}/guest-auth/callback`; |
|
| 115 | - | ||
| 116 | - | // Get handle from query params (required for guests) |
|
| 117 | - | const handle = c.req.query("handle"); |
|
| 118 | - | const returnTo = c.req.query("returnTo") || "/now"; |
|
| 119 | - | ||
| 120 | - | if (!handle) { |
|
| 121 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=handle_required`); |
|
| 122 | - | } |
|
| 123 | - | ||
| 124 | - | // Resolve handle to their PDS |
|
| 125 | - | let pdsUrl: string; |
|
| 126 | - | try { |
|
| 127 | - | pdsUrl = await resolveHandleToPDS(handle); |
|
| 128 | - | } catch (err) { |
|
| 129 | - | console.error("Failed to resolve handle:", err); |
|
| 130 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=invalid_handle`); |
|
| 131 | - | } |
|
| 132 | - | ||
| 133 | - | const { authUrl, state } = await initiateOAuthFlow(c.env.SESSIONS, { |
|
| 134 | - | pdsUrl, |
|
| 135 | - | clientId, |
|
| 136 | - | redirectUri, |
|
| 137 | - | scope: "atproto repo:site.standard.document.comment?action=create", |
|
| 138 | - | }); |
|
| 139 | - | ||
| 140 | - | // Store returnTo and pdsUrl separately to retrieve after callback |
|
| 141 | - | await c.env.SESSIONS.put( |
|
| 142 | - | `guest_return:${state}`, |
|
| 143 | - | returnTo, |
|
| 144 | - | { expirationTtl: 600 }, // 10 minutes |
|
| 145 | - | ); |
|
| 146 | - | await c.env.SESSIONS.put( |
|
| 147 | - | `guest_pds:${state}`, |
|
| 148 | - | pdsUrl, |
|
| 149 | - | { expirationTtl: 600 }, // 10 minutes |
|
| 150 | - | ); |
|
| 151 | - | ||
| 152 | - | return c.redirect(authUrl); |
|
| 153 | - | } catch (error) { |
|
| 154 | - | console.error("Guest login error:", error); |
|
| 155 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=login_failed`); |
|
| 156 | - | } |
|
| 157 | - | }); |
|
| 158 | - | ||
| 159 | - | // OAuth callback handler for guests |
|
| 160 | - | guestAuth.get("/callback", async (c) => { |
|
| 161 | - | try { |
|
| 162 | - | const code = c.req.query("code"); |
|
| 163 | - | const state = c.req.query("state"); |
|
| 164 | - | const error = c.req.query("error"); |
|
| 165 | - | const errorDescription = c.req.query("error_description"); |
|
| 166 | - | ||
| 167 | - | // Handle OAuth errors |
|
| 168 | - | if (error) { |
|
| 169 | - | console.error("OAuth error:", error, errorDescription); |
|
| 170 | - | return c.redirect( |
|
| 171 | - | `${c.env.CLIENT_URL}/now?error=${encodeURIComponent(error)}`, |
|
| 172 | - | ); |
|
| 173 | - | } |
|
| 174 | - | ||
| 175 | - | if (!code || !state) { |
|
| 176 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=missing_params`); |
|
| 177 | - | } |
|
| 178 | - | ||
| 179 | - | // Get return URL and PDS URL |
|
| 180 | - | const returnTo = |
|
| 181 | - | (await c.env.SESSIONS.get(`guest_return:${state}`)) || "/now"; |
|
| 182 | - | const pdsUrl = await c.env.SESSIONS.get(`guest_pds:${state}`); |
|
| 183 | - | await c.env.SESSIONS.delete(`guest_return:${state}`); |
|
| 184 | - | await c.env.SESSIONS.delete(`guest_pds:${state}`); |
|
| 185 | - | ||
| 186 | - | if (!pdsUrl) { |
|
| 187 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=missing_pds`); |
|
| 188 | - | } |
|
| 189 | - | ||
| 190 | - | const clientId = `${c.env.API_URL}/guest-auth/client-metadata.json`; |
|
| 191 | - | const redirectUri = `${c.env.API_URL}/guest-auth/callback`; |
|
| 192 | - | ||
| 193 | - | const oauthResult = await completeOAuthFlow( |
|
| 194 | - | c.env.SESSIONS, |
|
| 195 | - | pdsUrl, |
|
| 196 | - | code, |
|
| 197 | - | state, |
|
| 198 | - | clientId, |
|
| 199 | - | redirectUri, |
|
| 200 | - | ); |
|
| 201 | - | ||
| 202 | - | if (!oauthResult) { |
|
| 203 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=invalid_state`); |
|
| 204 | - | } |
|
| 205 | - | ||
| 206 | - | const { tokenResponse, dpopKeyPair, dpopNonce } = oauthResult; |
|
| 207 | - | ||
| 208 | - | // For guests, allow any ATProto account (no DID check) |
|
| 209 | - | // Create session with a "guest_" prefix to differentiate from admin sessions |
|
| 210 | - | const sessionId = await createSession( |
|
| 211 | - | c.env.SESSIONS, |
|
| 212 | - | tokenResponse.access_token, |
|
| 213 | - | tokenResponse.refresh_token || "", |
|
| 214 | - | dpopKeyPair, |
|
| 215 | - | dpopNonce, |
|
| 216 | - | tokenResponse.sub, |
|
| 217 | - | tokenResponse.expires_in, |
|
| 218 | - | undefined, // handle |
|
| 219 | - | pdsUrl, // user's PDS URL |
|
| 220 | - | ); |
|
| 221 | - | ||
| 222 | - | // Prefix session ID to mark as guest |
|
| 223 | - | const guestSessionId = `guest_${sessionId}`; |
|
| 224 | - | ||
| 225 | - | // Store the original session ID mapping |
|
| 226 | - | await c.env.SESSIONS.put( |
|
| 227 | - | `guest_session:${guestSessionId}`, |
|
| 228 | - | sessionId, |
|
| 229 | - | { expirationTtl: 60 * 60 * 24 * 14 }, // 14 days |
|
| 230 | - | ); |
|
| 231 | - | ||
| 232 | - | // Set session cookie and redirect to return URL |
|
| 233 | - | setSessionCookie(c, guestSessionId, c.env.CLIENT_URL); |
|
| 234 | - | return c.redirect(`${c.env.CLIENT_URL}${returnTo}`); |
|
| 235 | - | } catch (error) { |
|
| 236 | - | console.error("Guest callback error:", error); |
|
| 237 | - | return c.redirect(`${c.env.CLIENT_URL}/now?error=callback_failed`); |
|
| 238 | - | } |
|
| 239 | - | }); |
|
| 240 | - | ||
| 241 | - | // Logout endpoint for guests |
|
| 242 | - | guestAuth.post("/logout", async (c) => { |
|
| 243 | - | const sessionId = getSessionIdFromCookie(c); |
|
| 244 | - | ||
| 245 | - | if (sessionId?.startsWith("guest_")) { |
|
| 246 | - | // Get original session ID |
|
| 247 | - | const originalSessionId = await c.env.SESSIONS.get( |
|
| 248 | - | `guest_session:${sessionId}`, |
|
| 249 | - | ); |
|
| 250 | - | if (originalSessionId) { |
|
| 251 | - | await deleteSession(c.env.SESSIONS, originalSessionId); |
|
| 252 | - | await c.env.SESSIONS.delete(`guest_session:${sessionId}`); |
|
| 253 | - | } |
|
| 254 | - | } |
|
| 255 | - | ||
| 256 | - | clearSessionCookie(c, c.env.CLIENT_URL); |
|
| 257 | - | return c.json({ success: true }); |
|
| 258 | - | }); |
|
| 259 | - | ||
| 260 | - | // Check auth status for guests |
|
| 261 | - | guestAuth.get("/status", async (c) => { |
|
| 262 | - | const sessionId = getSessionIdFromCookie(c); |
|
| 263 | - | ||
| 264 | - | if (!sessionId || !sessionId.startsWith("guest_")) { |
|
| 265 | - | return c.json({ authenticated: false }); |
|
| 266 | - | } |
|
| 267 | - | ||
| 268 | - | // Get original session ID |
|
| 269 | - | const originalSessionId = await c.env.SESSIONS.get( |
|
| 270 | - | `guest_session:${sessionId}`, |
|
| 271 | - | ); |
|
| 272 | - | if (!originalSessionId) { |
|
| 273 | - | clearSessionCookie(c, c.env.CLIENT_URL); |
|
| 274 | - | return c.json({ authenticated: false }); |
|
| 275 | - | } |
|
| 276 | - | ||
| 277 | - | const sessionData = await getSession(c.env.SESSIONS, originalSessionId); |
|
| 278 | - | if (!sessionData) { |
|
| 279 | - | clearSessionCookie(c, c.env.CLIENT_URL); |
|
| 280 | - | await c.env.SESSIONS.delete(`guest_session:${sessionId}`); |
|
| 281 | - | return c.json({ authenticated: false }); |
|
| 282 | - | } |
|
| 283 | - | ||
| 284 | - | const { session, dpopKeyPair } = sessionData; |
|
| 285 | - | ||
| 286 | - | // Check if token needs refresh |
|
| 287 | - | if (isTokenExpired(session.expiresAt) && session.refreshToken) { |
|
| 288 | - | try { |
|
| 289 | - | // Use the user's PDS URL stored in session |
|
| 290 | - | if (!session.pdsUrl) { |
|
| 291 | - | console.error("No PDS URL in session for token refresh"); |
|
| 292 | - | await deleteSession(c.env.SESSIONS, originalSessionId); |
|
| 293 | - | await c.env.SESSIONS.delete(`guest_session:${sessionId}`); |
|
| 294 | - | clearSessionCookie(c, c.env.CLIENT_URL); |
|
| 295 | - | return c.json({ authenticated: false }); |
|
| 296 | - | } |
|
| 297 | - | const metadata = await fetchOAuthMetadata(session.pdsUrl); |
|
| 298 | - | const clientId = `${c.env.API_URL}/guest-auth/client-metadata.json`; |
|
| 299 | - | ||
| 300 | - | const { tokenResponse, dpopNonce } = await refreshAccessToken( |
|
| 301 | - | metadata, |
|
| 302 | - | session.refreshToken, |
|
| 303 | - | clientId, |
|
| 304 | - | dpopKeyPair, |
|
| 305 | - | session.dpopNonce, |
|
| 306 | - | ); |
|
| 307 | - | ||
| 308 | - | // Update session with new tokens |
|
| 309 | - | await updateSession( |
|
| 310 | - | c.env.SESSIONS, |
|
| 311 | - | originalSessionId, |
|
| 312 | - | tokenResponse.access_token, |
|
| 313 | - | tokenResponse.refresh_token || session.refreshToken, |
|
| 314 | - | dpopNonce, |
|
| 315 | - | tokenResponse.expires_in, |
|
| 316 | - | ); |
|
| 317 | - | ||
| 318 | - | return c.json({ |
|
| 319 | - | authenticated: true, |
|
| 320 | - | did: session.did, |
|
| 321 | - | handle: session.handle, |
|
| 322 | - | isGuest: true, |
|
| 323 | - | }); |
|
| 324 | - | } catch (error) { |
|
| 325 | - | console.error("Token refresh failed:", error); |
|
| 326 | - | await deleteSession(c.env.SESSIONS, originalSessionId); |
|
| 327 | - | await c.env.SESSIONS.delete(`guest_session:${sessionId}`); |
|
| 328 | - | clearSessionCookie(c, c.env.CLIENT_URL); |
|
| 329 | - | return c.json({ authenticated: false }); |
|
| 330 | - | } |
|
| 331 | - | } |
|
| 332 | - | ||
| 333 | - | return c.json({ |
|
| 334 | - | authenticated: true, |
|
| 335 | - | did: session.did, |
|
| 336 | - | handle: session.handle, |
|
| 337 | - | isGuest: true, |
|
| 338 | - | }); |
|
| 339 | - | }); |
|
| 340 | - | ||
| 341 | - | export default guestAuth; |
| 1 | - | import { Hono } from "hono"; |
|
| 2 | - | ||
| 3 | - | const home = new Hono(); |
|
| 4 | - | ||
| 5 | - | home.get("/", (c) => { |
|
| 6 | - | return c.text("Hello Hono!"); |
|
| 7 | - | }); |
|
| 8 | - | ||
| 9 | - | export default home; |
| 1 | - | export { default as home } from "./home"; |
|
| 2 | - | export { default as now } from "./now"; |
|
| 3 | - | export { default as auth } from "./auth"; |
|
| 4 | - | // COMMENTS FUNCTIONALITY DISABLED |
|
| 5 | - | // export { default as guestAuth } from "./guest-auth"; |
| 1 | - | import { Hono } from "hono"; |
|
| 2 | - | import { Feed } from "feed"; |
|
| 3 | - | import type { ListRecordsResponse } from "../types"; |
|
| 4 | - | import { createDPoPProof, extractDPoPNonce } from "../lib/dpop"; |
|
| 5 | - | import { fetchOAuthMetadata, refreshAccessToken } from "../lib/oauth"; |
|
| 6 | - | import { |
|
| 7 | - | getSession, |
|
| 8 | - | getSessionIdFromCookie, |
|
| 9 | - | isTokenExpired, |
|
| 10 | - | updateSession, |
|
| 11 | - | } from "../lib/session"; |
|
| 12 | - | ||
| 13 | - | interface Env { |
|
| 14 | - | SESSIONS: KVNamespace; |
|
| 15 | - | ALLOWED_DID: string; |
|
| 16 | - | PDS_URL: string; |
|
| 17 | - | CLIENT_URL: string; |
|
| 18 | - | API_URL: string; |
|
| 19 | - | } |
|
| 20 | - | ||
| 21 | - | const now = new Hono<{ Bindings: Env }>(); |
|
| 22 | - | ||
| 23 | - | const PDS_URL = "https://andromeda.social"; |
|
| 24 | - | ||
| 25 | - | // COMMENTS FUNCTIONALITY DISABLED |
|
| 26 | - | // // Helper function to get session for both admin and guest users |
|
| 27 | - | // async function getAnySession(c: any, sessionId: string) { |
|
| 28 | - | // if (sessionId.startsWith("guest_")) { |
|
| 29 | - | // // Guest session |
|
| 30 | - | // const originalSessionId = await c.env.SESSIONS.get( |
|
| 31 | - | // `guest_session:${sessionId}`, |
|
| 32 | - | // ); |
|
| 33 | - | // if (!originalSessionId) return null; |
|
| 34 | - | // return await getSession(c.env.SESSIONS, originalSessionId); |
|
| 35 | - | // } else { |
|
| 36 | - | // // Admin session |
|
| 37 | - | // return await getSession(c.env.SESSIONS, sessionId); |
|
| 38 | - | // } |
|
| 39 | - | // } |
|
| 40 | - | ||
| 41 | - | // Upload an image blob to the PDS |
|
| 42 | - | now.post("/upload", async (c) => { |
|
| 43 | - | try { |
|
| 44 | - | const sessionId = getSessionIdFromCookie(c); |
|
| 45 | - | if (!sessionId) { |
|
| 46 | - | return c.json({ error: "Not authenticated" }, 401); |
|
| 47 | - | } |
|
| 48 | - | ||
| 49 | - | const sessionData = await getSession(c.env.SESSIONS, sessionId); |
|
| 50 | - | if (!sessionData) { |
|
| 51 | - | return c.json({ error: "Session not found" }, 401); |
|
| 52 | - | } |
|
| 53 | - | ||
| 54 | - | let { session, dpopKeyPair } = sessionData; |
|
| 55 | - | ||
| 56 | - | // Refresh token if expired |
|
| 57 | - | if (isTokenExpired(session.expiresAt) && session.refreshToken) { |
|
| 58 | - | const metadata = await fetchOAuthMetadata(c.env.PDS_URL); |
|
| 59 | - | const clientId = `${c.env.API_URL}/auth/client-metadata.json`; |
|
| 60 | - | ||
| 61 | - | const { tokenResponse, dpopNonce } = await refreshAccessToken( |
|
| 62 | - | metadata, |
|
| 63 | - | session.refreshToken, |
|
| 64 | - | clientId, |
|
| 65 | - | dpopKeyPair, |
|
| 66 | - | session.dpopNonce, |
|
| 67 | - | ); |
|
| 68 | - | ||
| 69 | - | await updateSession( |
|
| 70 | - | c.env.SESSIONS, |
|
| 71 | - | sessionId, |
|
| 72 | - | tokenResponse.access_token, |
|
| 73 | - | tokenResponse.refresh_token || session.refreshToken, |
|
| 74 | - | dpopNonce, |
|
| 75 | - | tokenResponse.expires_in, |
|
| 76 | - | ); |
|
| 77 | - | ||
| 78 | - | session.accessToken = tokenResponse.access_token; |
|
| 79 | - | session.dpopNonce = dpopNonce; |
|
| 80 | - | } |
|
| 81 | - | ||
| 82 | - | // Parse multipart form data |
|
| 83 | - | const body = await c.req.parseBody(); |
|
| 84 | - | const file = body["file"]; |
|
| 85 | - | ||
| 86 | - | if (!file || !(file instanceof File)) { |
|
| 87 | - | return c.json({ error: "No file provided" }, 400); |
|
| 88 | - | } |
|
| 89 | - | ||
| 90 | - | // Validate file type |
|
| 91 | - | const allowedTypes = ["image/png", "image/jpeg", "image/webp", "image/gif"]; |
|
| 92 | - | if (!allowedTypes.includes(file.type)) { |
|
| 93 | - | return c.json( |
|
| 94 | - | { error: "Invalid file type. Allowed: png, jpeg, webp, gif" }, |
|
| 95 | - | 400, |
|
| 96 | - | ); |
|
| 97 | - | } |
|
| 98 | - | ||
| 99 | - | // Validate file size (max 100MB - matches PDS_BLOB_UPLOAD_LIMIT) |
|
| 100 | - | const maxSize = 100 * 1024 * 1024; |
|
| 101 | - | if (file.size > maxSize) { |
|
| 102 | - | return c.json({ error: "File too large. Maximum size is 100MB" }, 400); |
|
| 103 | - | } |
|
| 104 | - | ||
| 105 | - | const fileBytes = new Uint8Array(await file.arrayBuffer()); |
|
| 106 | - | const uploadUrl = `${c.env.PDS_URL}/xrpc/com.atproto.repo.uploadBlob`; |
|
| 107 | - | ||
| 108 | - | const makeUploadRequest = async (nonce?: string): Promise<Response> => { |
|
| 109 | - | const dpopProof = await createDPoPProof(dpopKeyPair, { |
|
| 110 | - | method: "POST", |
|
| 111 | - | url: uploadUrl, |
|
| 112 | - | nonce: nonce || session.dpopNonce, |
|
| 113 | - | accessToken: session.accessToken, |
|
| 114 | - | }); |
|
| 115 | - | ||
| 116 | - | return fetch(uploadUrl, { |
|
| 117 | - | method: "POST", |
|
| 118 | - | headers: { |
|
| 119 | - | "Content-Type": file.type, |
|
| 120 | - | Authorization: `DPoP ${session.accessToken}`, |
|
| 121 | - | DPoP: dpopProof, |
|
| 122 | - | }, |
|
| 123 | - | body: fileBytes, |
|
| 124 | - | }); |
|
| 125 | - | }; |
|
| 126 | - | ||
| 127 | - | let response = await makeUploadRequest(); |
|
| 128 | - | ||
| 129 | - | // Handle DPoP nonce requirement |
|
| 130 | - | if (response.status === 401) { |
|
| 131 | - | const newNonce = extractDPoPNonce(response); |
|
| 132 | - | if (newNonce) { |
|
| 133 | - | response = await makeUploadRequest(newNonce); |
|
| 134 | - | ||
| 135 | - | await updateSession( |
|
| 136 | - | c.env.SESSIONS, |
|
| 137 | - | sessionId, |
|
| 138 | - | session.accessToken, |
|
| 139 | - | session.refreshToken, |
|
| 140 | - | newNonce, |
|
| 141 | - | Math.floor((session.expiresAt - Date.now()) / 1000), |
|
| 142 | - | ); |
|
| 143 | - | } |
|
| 144 | - | } |
|
| 145 | - | ||
| 146 | - | if (!response.ok) { |
|
| 147 | - | const errorData = await response.json(); |
|
| 148 | - | console.error("Failed to upload blob:", errorData); |
|
| 149 | - | return c.json( |
|
| 150 | - | { error: "Failed to upload image", details: errorData }, |
|
| 151 | - | response.status as 400 | 401 | 403 | 500, |
|
| 152 | - | ); |
|
| 153 | - | } |
|
| 154 | - | ||
| 155 | - | const result = (await response.json()) as { |
|
| 156 | - | blob: { |
|
| 157 | - | $type: string; |
|
| 158 | - | ref: { $link: string }; |
|
| 159 | - | mimeType: string; |
|
| 160 | - | size: number; |
|
| 161 | - | }; |
|
| 162 | - | }; |
|
| 163 | - | ||
| 164 | - | // Build public blob URL |
|
| 165 | - | const blobUrl = `https://andromeda.social/xrpc/com.atproto.sync.getBlob?did=${session.did}&cid=${result.blob.ref.$link}`; |
|
| 166 | - | ||
| 167 | - | return c.json({ blob: result.blob, blobUrl }); |
|
| 168 | - | } catch (error) { |
|
| 169 | - | console.error("Error uploading blob:", error); |
|
| 170 | - | return c.json({ error: "Internal server error" }, 500); |
|
| 171 | - | } |
|
| 172 | - | }); |
|
| 173 | - | ||
| 174 | - | // Create a new post |
|
| 175 | - | now.post("/post", async (c) => { |
|
| 176 | - | try { |
|
| 177 | - | // Get session from cookie |
|
| 178 | - | const sessionId = getSessionIdFromCookie(c); |
|
| 179 | - | if (!sessionId) { |
|
| 180 | - | return c.json({ error: "Not authenticated" }, 401); |
|
| 181 | - | } |
|
| 182 | - | ||
| 183 | - | const sessionData = await getSession(c.env.SESSIONS, sessionId); |
|
| 184 | - | if (!sessionData) { |
|
| 185 | - | return c.json({ error: "Session not found" }, 401); |
|
| 186 | - | } |
|
| 187 | - | ||
| 188 | - | let { session, dpopKeyPair } = sessionData; |
|
| 189 | - | ||
| 190 | - | // Refresh token if expired |
|
| 191 | - | if (isTokenExpired(session.expiresAt) && session.refreshToken) { |
|
| 192 | - | const metadata = await fetchOAuthMetadata(c.env.PDS_URL); |
|
| 193 | - | const clientId = `${c.env.API_URL}/auth/client-metadata.json`; |
|
| 194 | - | ||
| 195 | - | const { tokenResponse, dpopNonce } = await refreshAccessToken( |
|
| 196 | - | metadata, |
|
| 197 | - | session.refreshToken, |
|
| 198 | - | clientId, |
|
| 199 | - | dpopKeyPair, |
|
| 200 | - | session.dpopNonce, |
|
| 201 | - | ); |
|
| 202 | - | ||
| 203 | - | // Update session with new tokens |
|
| 204 | - | await updateSession( |
|
| 205 | - | c.env.SESSIONS, |
|
| 206 | - | sessionId, |
|
| 207 | - | tokenResponse.access_token, |
|
| 208 | - | tokenResponse.refresh_token || session.refreshToken, |
|
| 209 | - | dpopNonce, |
|
| 210 | - | tokenResponse.expires_in, |
|
| 211 | - | ); |
|
| 212 | - | ||
| 213 | - | // Update local session object |
|
| 214 | - | session.accessToken = tokenResponse.access_token; |
|
| 215 | - | session.dpopNonce = dpopNonce; |
|
| 216 | - | } |
|
| 217 | - | ||
| 218 | - | // Parse request body |
|
| 219 | - | const body = await c.req.json<{ |
|
| 220 | - | title: string; |
|
| 221 | - | path?: string; |
|
| 222 | - | content: string; |
|
| 223 | - | coverImage?: { |
|
| 224 | - | $type: string; |
|
| 225 | - | ref: { $link: string }; |
|
| 226 | - | mimeType: string; |
|
| 227 | - | size: number; |
|
| 228 | - | }; |
|
| 229 | - | }>(); |
|
| 230 | - | ||
| 231 | - | if (!body.title || body.title.trim().length === 0) { |
|
| 232 | - | return c.json({ error: "Document title is required" }, 400); |
|
| 233 | - | } |
|
| 234 | - | ||
| 235 | - | if (body.title.length > 128) { |
|
| 236 | - | return c.json({ error: "Title must be 128 characters or less" }, 400); |
|
| 237 | - | } |
|
| 238 | - | ||
| 239 | - | if (!body.content || body.content.trim().length === 0) { |
|
| 240 | - | return c.json({ error: "Content is required" }, 400); |
|
| 241 | - | } |
|
| 242 | - | ||
| 243 | - | // Normalize and validate path if provided |
|
| 244 | - | let normalizedPath = body.path; |
|
| 245 | - | if (normalizedPath) { |
|
| 246 | - | // Add leading / if missing |
|
| 247 | - | if (!normalizedPath.startsWith("/")) { |
|
| 248 | - | normalizedPath = `/${normalizedPath}`; |
|
| 249 | - | } |
|
| 250 | - | // Ensure path starts with /now/ |
|
| 251 | - | if (!normalizedPath.startsWith("/now/")) { |
|
| 252 | - | normalizedPath = `/now${normalizedPath}`; |
|
| 253 | - | } |
|
| 254 | - | // Basic validation: no spaces, no special chars except dashes and underscores |
|
| 255 | - | if (!/^\/[a-zA-Z0-9\-_\/]*$/.test(normalizedPath)) { |
|
| 256 | - | return c.json( |
|
| 257 | - | { |
|
| 258 | - | error: |
|
| 259 | - | "Path can only contain letters, numbers, dashes, underscores, and slashes", |
|
| 260 | - | }, |
|
| 261 | - | 400, |
|
| 262 | - | ); |
|
| 263 | - | } |
|
| 264 | - | } |
|
| 265 | - | ||
| 266 | - | // Create the document record using site.standard.document lexicon |
|
| 267 | - | const createRecordUrl = `${c.env.PDS_URL}/xrpc/com.atproto.repo.createRecord`; |
|
| 268 | - | ||
| 269 | - | // Create markdown content with $type |
|
| 270 | - | const markdownContent = { |
|
| 271 | - | $type: "site.standard.content.markdown", |
|
| 272 | - | markdown: body.content.trim(), |
|
| 273 | - | }; |
|
| 274 | - | ||
| 275 | - | // Strip markdown for textContent (basic implementation) |
|
| 276 | - | const textContent = body.content |
|
| 277 | - | .trim() |
|
| 278 | - | .replace(/#{1,6}\s/g, "") // Remove headers |
|
| 279 | - | .replace(/\*\*([^*]+)\*\*/g, "$1") // Remove bold |
|
| 280 | - | .replace(/\*([^*]+)\*/g, "$1") // Remove italic |
|
| 281 | - | .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1") // Remove links, keep text |
|
| 282 | - | .replace(/`([^`]+)`/g, "$1") // Remove code formatting |
|
| 283 | - | .trim(); |
|
| 284 | - | ||
| 285 | - | const defaultCoverImage = { |
|
| 286 | - | $type: "blob", |
|
| 287 | - | ref: { |
|
| 288 | - | $link: |
|
| 289 | - | "bafkreibuxyp2gth3igqik7fxu4cm4nducetgp67hhlx36bwahgnuw4xmoa", |
|
| 290 | - | }, |
|
| 291 | - | mimeType: "image/png", |
|
| 292 | - | size: 2522, |
|
| 293 | - | }; |
|
| 294 | - | ||
| 295 | - | const documentRecord = { |
|
| 296 | - | repo: session.did, |
|
| 297 | - | collection: "site.standard.document", |
|
| 298 | - | record: { |
|
| 299 | - | $type: "site.standard.document", |
|
| 300 | - | title: body.title.trim(), |
|
| 301 | - | site: "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.publication/3mbykzswhqc2x", |
|
| 302 | - | ...(normalizedPath && { path: normalizedPath.trim() }), |
|
| 303 | - | content: markdownContent, |
|
| 304 | - | coverImage: body.coverImage || defaultCoverImage, |
|
| 305 | - | textContent: textContent, |
|
| 306 | - | publishedAt: new Date().toISOString(), |
|
| 307 | - | }, |
|
| 308 | - | }; |
|
| 309 | - | ||
| 310 | - | // Make request with DPoP |
|
| 311 | - | const makeRequest = async (nonce?: string): Promise<Response> => { |
|
| 312 | - | const dpopProof = await createDPoPProof(dpopKeyPair, { |
|
| 313 | - | method: "POST", |
|
| 314 | - | url: createRecordUrl, |
|
| 315 | - | nonce: nonce || session.dpopNonce, |
|
| 316 | - | accessToken: session.accessToken, |
|
| 317 | - | }); |
|
| 318 | - | ||
| 319 | - | return fetch(createRecordUrl, { |
|
| 320 | - | method: "POST", |
|
| 321 | - | headers: { |
|
| 322 | - | "Content-Type": "application/json", |
|
| 323 | - | Authorization: `DPoP ${session.accessToken}`, |
|
| 324 | - | DPoP: dpopProof, |
|
| 325 | - | }, |
|
| 326 | - | body: JSON.stringify(documentRecord), |
|
| 327 | - | }); |
|
| 328 | - | }; |
|
| 329 | - | ||
| 330 | - | let response = await makeRequest(); |
|
| 331 | - | ||
| 332 | - | // Handle DPoP nonce requirement |
|
| 333 | - | if (response.status === 401) { |
|
| 334 | - | const newNonce = extractDPoPNonce(response); |
|
| 335 | - | if (newNonce) { |
|
| 336 | - | // Retry with new nonce |
|
| 337 | - | response = await makeRequest(newNonce); |
|
| 338 | - | ||
| 339 | - | // Update session with new nonce |
|
| 340 | - | await updateSession( |
|
| 341 | - | c.env.SESSIONS, |
|
| 342 | - | sessionId, |
|
| 343 | - | session.accessToken, |
|
| 344 | - | session.refreshToken, |
|
| 345 | - | newNonce, |
|
| 346 | - | Math.floor((session.expiresAt - Date.now()) / 1000), |
|
| 347 | - | ); |
|
| 348 | - | } |
|
| 349 | - | } |
|
| 350 | - | ||
| 351 | - | if (!response.ok) { |
|
| 352 | - | const errorData = await response.json(); |
|
| 353 | - | console.error("Failed to create document:", errorData); |
|
| 354 | - | return c.json( |
|
| 355 | - | { error: "Failed to create document", details: errorData }, |
|
| 356 | - | response.status as 400 | 401 | 403 | 500, |
|
| 357 | - | ); |
|
| 358 | - | } |
|
| 359 | - | ||
| 360 | - | const result = (await response.json()) as { uri: string; cid: string }; |
|
| 361 | - | return c.json({ success: true, uri: result.uri, cid: result.cid }); |
|
| 362 | - | } catch (error) { |
|
| 363 | - | console.error("Error creating document:", error); |
|
| 364 | - | return c.json({ error: "Internal server error" }, 500); |
|
| 365 | - | } |
|
| 366 | - | }); |
|
| 367 | - | ||
| 368 | - | now.get("/rss", async (c) => { |
|
| 369 | - | try { |
|
| 370 | - | // Fetch documents directly from your PDS using the repo.listRecords endpoint |
|
| 371 | - | const response = await fetch( |
|
| 372 | - | `${PDS_URL}/xrpc/com.atproto.repo.listRecords?` + |
|
| 373 | - | new URLSearchParams({ |
|
| 374 | - | repo: c.env.ALLOWED_DID, |
|
| 375 | - | collection: "site.standard.document", |
|
| 376 | - | limit: "50", |
|
| 377 | - | }), |
|
| 378 | - | ); |
|
| 379 | - | ||
| 380 | - | if (!response.ok) { |
|
| 381 | - | throw new Error(`HTTP error! status: ${response.status}`); |
|
| 382 | - | } |
|
| 383 | - | ||
| 384 | - | const data = (await response.json()) as ListRecordsResponse; |
|
| 385 | - | ||
| 386 | - | // Only include documents from the site publication, excluding blog posts |
|
| 387 | - | const documents = data.records.filter( |
|
| 388 | - | (doc) => |
|
| 389 | - | doc.value?.site === |
|
| 390 | - | "at://did:plc:ia2zdnhjaokf5lazhxrmj6eu/site.standard.publication/3mbykzswhqc2x" && |
|
| 391 | - | !doc.value?.path?.includes("/posts"), |
|
| 392 | - | ); |
|
| 393 | - | ||
| 394 | - | // Create the feed |
|
| 395 | - | const feed = new Feed({ |
|
| 396 | - | title: "Steve Dylan - Updates", |
|
| 397 | - | description: |
|
| 398 | - | "Small updates from my life that don't quite fit into a blog", |
|
| 399 | - | id: "https://stevedylan.dev/", |
|
| 400 | - | link: "https://stevedylan.dev/", |
|
| 401 | - | language: "en", |
|
| 402 | - | favicon: "https://stevedylan.dev/favicon.ico", |
|
| 403 | - | copyright: "All rights reserved, Steve Dylan", |
|
| 404 | - | updated: new Date(), |
|
| 405 | - | feedLinks: { |
|
| 406 | - | rss: "https://stevedylan.dev/now/rss", |
|
| 407 | - | }, |
|
| 408 | - | author: { |
|
| 409 | - | name: "Steve Dylan", |
|
| 410 | - | link: "https://stevedylan.dev", |
|
| 411 | - | }, |
|
| 412 | - | }); |
|
| 413 | - | ||
| 414 | - | // Add documents to the feed |
|
| 415 | - | documents.forEach((record) => { |
|
| 416 | - | const doc = record.value; |
|
| 417 | - | const rkey = record.uri.split("/").pop(); |
|
| 418 | - | ||
| 419 | - | // Use custom path if available, otherwise use rkey |
|
| 420 | - | const urlPath = doc.path || `/${rkey}`; |
|
| 421 | - | const fullUrl = `https://stevedylan.dev${urlPath}`; |
|
| 422 | - | ||
| 423 | - | // Extract content - prefer markdown content, fallback to textContent |
|
| 424 | - | let content = doc.title; |
|
| 425 | - | let description = doc.title; |
|
| 426 | - | ||
| 427 | - | if (doc.content && doc.content.markdown) { |
|
| 428 | - | content = doc.content.markdown; |
|
| 429 | - | description = doc.textContent || doc.title; |
|
| 430 | - | } else if (doc.textContent) { |
|
| 431 | - | content = doc.textContent; |
|
| 432 | - | description = doc.textContent; |
|
| 433 | - | } |
|
| 434 | - | ||
| 435 | - | feed.addItem({ |
|
| 436 | - | title: doc.title, |
|
| 437 | - | id: fullUrl, |
|
| 438 | - | link: fullUrl, |
|
| 439 | - | description: description, |
|
| 440 | - | content: content, |
|
| 441 | - | date: new Date(doc.publishedAt), |
|
| 442 | - | }); |
|
| 443 | - | }); |
|
| 444 | - | ||
| 445 | - | // Return RSS 2.0 feed |
|
| 446 | - | const rssOutput = feed.rss2(); |
|
| 447 | - | ||
| 448 | - | return c.text(rssOutput, 200, { |
|
| 449 | - | "Content-Type": "application/xml", |
|
| 450 | - | }); |
|
| 451 | - | } catch (error) { |
|
| 452 | - | console.error("Error generating RSS feed:", error); |
|
| 453 | - | ||
| 454 | - | // Return an empty feed on error |
|
| 455 | - | const errorFeed = new Feed({ |
|
| 456 | - | title: "Steve Dylan - Updates", |
|
| 457 | - | description: |
|
| 458 | - | "Small updates from my life that don't quite fit into a blog", |
|
| 459 | - | id: "https://stevedylan.dev/", |
|
| 460 | - | link: "https://stevedylan.dev/", |
|
| 461 | - | language: "en", |
|
| 462 | - | updated: new Date(), |
|
| 463 | - | copyright: "All rights reserved, Steve Dylan", |
|
| 464 | - | author: { |
|
| 465 | - | name: "Steve Dylan", |
|
| 466 | - | link: "https://stevedylan.dev", |
|
| 467 | - | }, |
|
| 468 | - | }); |
|
| 469 | - | ||
| 470 | - | return c.text(errorFeed.rss2(), 200, { |
|
| 471 | - | "Content-Type": "application/xml", |
|
| 472 | - | }); |
|
| 473 | - | } |
|
| 474 | - | }); |
|
| 475 | - | ||
| 476 | - | // COMMENTS FUNCTIONALITY DISABLED |
|
| 477 | - | // // Create a reply to a post (for guests) |
|
| 478 | - | // now.post("/reply", async (c) => { |
|
| 479 | - | // try { |
|
| 480 | - | // // Get session from cookie |
|
| 481 | - | // const sessionId = getSessionIdFromCookie(c); |
|
| 482 | - | // if (!sessionId) { |
|
| 483 | - | // return c.json({ error: "Not authenticated" }, 401); |
|
| 484 | - | // } |
|
| 485 | - | ||
| 486 | - | // const sessionData = await getAnySession(c, sessionId); |
|
| 487 | - | // if (!sessionData) { |
|
| 488 | - | // return c.json({ error: "Session not found" }, 401); |
|
| 489 | - | // } |
|
| 490 | - | ||
| 491 | - | // let { session, dpopKeyPair } = sessionData; |
|
| 492 | - | ||
| 493 | - | // // Determine which PDS to use (user's PDS for guests, env PDS for admin) |
|
| 494 | - | // const isGuest = sessionId.startsWith("guest_"); |
|
| 495 | - | // const pdsUrl = isGuest && session.pdsUrl ? session.pdsUrl : c.env.PDS_URL; |
|
| 496 | - | ||
| 497 | - | // // Refresh token if expired |
|
| 498 | - | // if (isTokenExpired(session.expiresAt) && session.refreshToken) { |
|
| 499 | - | // const metadata = await fetchOAuthMetadata(pdsUrl); |
|
| 500 | - | // const clientId = isGuest |
|
| 501 | - | // ? `${c.env.API_URL}/guest-auth/client-metadata.json` |
|
| 502 | - | // : `${c.env.API_URL}/auth/client-metadata.json`; |
|
| 503 | - | ||
| 504 | - | // const { tokenResponse, dpopNonce } = await refreshAccessToken( |
|
| 505 | - | // metadata, |
|
| 506 | - | // session.refreshToken, |
|
| 507 | - | // clientId, |
|
| 508 | - | // dpopKeyPair, |
|
| 509 | - | // session.dpopNonce, |
|
| 510 | - | // ); |
|
| 511 | - | ||
| 512 | - | // // Get the actual session ID for update |
|
| 513 | - | // const actualSessionId = isGuest |
|
| 514 | - | // ? (await c.env.SESSIONS.get(`guest_session:${sessionId}`)) || "" |
|
| 515 | - | // : sessionId; |
|
| 516 | - | ||
| 517 | - | // // Update session with new tokens |
|
| 518 | - | // await updateSession( |
|
| 519 | - | // c.env.SESSIONS, |
|
| 520 | - | // actualSessionId, |
|
| 521 | - | // tokenResponse.access_token, |
|
| 522 | - | // tokenResponse.refresh_token || session.refreshToken, |
|
| 523 | - | // dpopNonce, |
|
| 524 | - | // tokenResponse.expires_in, |
|
| 525 | - | // ); |
|
| 526 | - | ||
| 527 | - | // // Update local session object |
|
| 528 | - | // session.accessToken = tokenResponse.access_token; |
|
| 529 | - | // session.dpopNonce = dpopNonce; |
|
| 530 | - | // } |
|
| 531 | - | ||
| 532 | - | // // Parse request body |
|
| 533 | - | // const body = await c.req.json<{ |
|
| 534 | - | // parentUri: string; |
|
| 535 | - | // content: string; |
|
| 536 | - | // }>(); |
|
| 537 | - | ||
| 538 | - | // if (!body.parentUri || body.parentUri.trim().length === 0) { |
|
| 539 | - | // return c.json({ error: "Parent URI is required" }, 400); |
|
| 540 | - | // } |
|
| 541 | - | ||
| 542 | - | // if (!body.content || body.content.trim().length === 0) { |
|
| 543 | - | // return c.json({ error: "Content is required" }, 400); |
|
| 544 | - | // } |
|
| 545 | - | ||
| 546 | - | // // Fetch the parent post to get its CID (use owner's PDS since that's where the post lives) |
|
| 547 | - | // const getRecordUrl = |
|
| 548 | - | // `${c.env.PDS_URL}/xrpc/com.atproto.repo.getRecord?` + |
|
| 549 | - | // new URLSearchParams({ |
|
| 550 | - | // repo: body.parentUri.split("/")[2], // Extract DID from URI |
|
| 551 | - | // collection: body.parentUri.split("/")[3], // Extract collection |
|
| 552 | - | // rkey: body.parentUri.split("/")[4], // Extract rkey |
|
| 553 | - | // }); |
|
| 554 | - | ||
| 555 | - | // const parentResponse = await fetch(getRecordUrl); |
|
| 556 | - | // if (!parentResponse.ok) { |
|
| 557 | - | // console.error("Failed to fetch parent post"); |
|
| 558 | - | // return c.json({ error: "Failed to fetch parent post" }, 400); |
|
| 559 | - | // } |
|
| 560 | - | ||
| 561 | - | // const parentData = (await parentResponse.json()) as { cid: string }; |
|
| 562 | - | // const parentCid = parentData.cid; |
|
| 563 | - | ||
| 564 | - | // // Fetch author profile to get handle, displayName, and avatar from Bluesky public API |
|
| 565 | - | // let authorHandle = session.did; |
|
| 566 | - | // let authorDisplayName: string | undefined; |
|
| 567 | - | // let authorAvatar: string | undefined; |
|
| 568 | - | ||
| 569 | - | // try { |
|
| 570 | - | // const profileUrl = `https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${session.did}`; |
|
| 571 | - | // const profileResponse = await fetch(profileUrl); |
|
| 572 | - | // if (profileResponse.ok) { |
|
| 573 | - | // const profileData = (await profileResponse.json()) as { |
|
| 574 | - | // handle?: string; |
|
| 575 | - | // displayName?: string; |
|
| 576 | - | // avatar?: string; |
|
| 577 | - | // }; |
|
| 578 | - | // authorHandle = profileData.handle || session.did; |
|
| 579 | - | // authorDisplayName = profileData.displayName; |
|
| 580 | - | // authorAvatar = profileData.avatar; |
|
| 581 | - | // } |
|
| 582 | - | // } catch (err) { |
|
| 583 | - | // console.error("Failed to fetch author profile:", err); |
|
| 584 | - | // } |
|
| 585 | - | ||
| 586 | - | // // Create the comment record using site.standard.document.comment lexicon |
|
| 587 | - | // // Use the user's PDS URL since the record is stored in THEIR repo |
|
| 588 | - | // const createRecordUrl = `${pdsUrl}/xrpc/com.atproto.repo.createRecord`; |
|
| 589 | - | ||
| 590 | - | // const commentRecord = { |
|
| 591 | - | // repo: session.did, |
|
| 592 | - | // collection: "site.standard.document.comment", |
|
| 593 | - | // record: { |
|
| 594 | - | // $type: "site.standard.document.comment", |
|
| 595 | - | // parent: { |
|
| 596 | - | // uri: body.parentUri, |
|
| 597 | - | // cid: parentCid, |
|
| 598 | - | // }, |
|
| 599 | - | // root: { |
|
| 600 | - | // uri: body.parentUri, |
|
| 601 | - | // cid: parentCid, |
|
| 602 | - | // }, |
|
| 603 | - | // content: body.content.trim(), |
|
| 604 | - | // author: { |
|
| 605 | - | // did: session.did, |
|
| 606 | - | // handle: authorHandle, |
|
| 607 | - | // ...(authorDisplayName && { displayName: authorDisplayName }), |
|
| 608 | - | // ...(authorAvatar && { avatar: authorAvatar }), |
|
| 609 | - | // }, |
|
| 610 | - | // createdAt: new Date().toISOString(), |
|
| 611 | - | // }, |
|
| 612 | - | // }; |
|
| 613 | - | ||
| 614 | - | // // Make request with DPoP |
|
| 615 | - | // const makeRequest = async (nonce?: string): Promise<Response> => { |
|
| 616 | - | // const dpopProof = await createDPoPProof(dpopKeyPair, { |
|
| 617 | - | // method: "POST", |
|
| 618 | - | // url: createRecordUrl, |
|
| 619 | - | // nonce: nonce || session.dpopNonce, |
|
| 620 | - | // accessToken: session.accessToken, |
|
| 621 | - | // }); |
|
| 622 | - | ||
| 623 | - | // return fetch(createRecordUrl, { |
|
| 624 | - | // method: "POST", |
|
| 625 | - | // headers: { |
|
| 626 | - | // "Content-Type": "application/json", |
|
| 627 | - | // Authorization: `DPoP ${session.accessToken}`, |
|
| 628 | - | // DPoP: dpopProof, |
|
| 629 | - | // }, |
|
| 630 | - | // body: JSON.stringify(commentRecord), |
|
| 631 | - | // }); |
|
| 632 | - | // }; |
|
| 633 | - | ||
| 634 | - | // let response = await makeRequest(); |
|
| 635 | - | ||
| 636 | - | // // Handle DPoP nonce requirement |
|
| 637 | - | // if (response.status === 401) { |
|
| 638 | - | // const newNonce = extractDPoPNonce(response); |
|
| 639 | - | // if (newNonce) { |
|
| 640 | - | // // Retry with new nonce |
|
| 641 | - | // response = await makeRequest(newNonce); |
|
| 642 | - | ||
| 643 | - | // // Get the actual session ID for update |
|
| 644 | - | // const actualSessionId = isGuest |
|
| 645 | - | // ? (await c.env.SESSIONS.get(`guest_session:${sessionId}`)) || "" |
|
| 646 | - | // : sessionId; |
|
| 647 | - | ||
| 648 | - | // // Update session with new nonce |
|
| 649 | - | // await updateSession( |
|
| 650 | - | // c.env.SESSIONS, |
|
| 651 | - | // actualSessionId, |
|
| 652 | - | // session.accessToken, |
|
| 653 | - | // session.refreshToken, |
|
| 654 | - | // newNonce, |
|
| 655 | - | // Math.floor((session.expiresAt - Date.now()) / 1000), |
|
| 656 | - | // ); |
|
| 657 | - | // } |
|
| 658 | - | // } |
|
| 659 | - | ||
| 660 | - | // if (!response.ok) { |
|
| 661 | - | // const errorData = await response.json(); |
|
| 662 | - | // console.error("Failed to create reply:", errorData); |
|
| 663 | - | // return c.json( |
|
| 664 | - | // { error: "Failed to create reply", details: errorData }, |
|
| 665 | - | // response.status as 400 | 401 | 403 | 500, |
|
| 666 | - | // ); |
|
| 667 | - | // } |
|
| 668 | - | ||
| 669 | - | // const result = (await response.json()) as { uri: string; cid: string }; |
|
| 670 | - | // return c.json({ success: true, uri: result.uri, cid: result.cid }); |
|
| 671 | - | // } catch (error) { |
|
| 672 | - | // console.error("Error creating reply:", error); |
|
| 673 | - | // return c.json({ error: "Internal server error" }, 500); |
|
| 674 | - | // } |
|
| 675 | - | // }); |
|
| 676 | - | ||
| 677 | - | // // Get comments for a post via TAP API |
|
| 678 | - | // now.get("/comments/:uri", async (c) => { |
|
| 679 | - | // try { |
|
| 680 | - | // const encodedUri = c.req.param("uri"); |
|
| 681 | - | // const uri = decodeURIComponent(encodedUri); |
|
| 682 | - | ||
| 683 | - | // // First, get the list of comment URIs from TAP API |
|
| 684 | - | // const tapUrl = `https://tap.stevedylan.dev/comments?document=${encodeURIComponent(uri)}`; |
|
| 685 | - | // const response = await fetch(tapUrl); |
|
| 686 | - | ||
| 687 | - | // if (!response.ok) { |
|
| 688 | - | // console.error("Failed to fetch comment list from TAP:", response.status); |
|
| 689 | - | // return c.json({ replies: [] }); |
|
| 690 | - | // } |
|
| 691 | - | ||
| 692 | - | // interface CommentReference { |
|
| 693 | - | // createdAt: string; |
|
| 694 | - | // did: string; |
|
| 695 | - | // uri: string; |
|
| 696 | - | // } |
|
| 697 | - | ||
| 698 | - | // const commentRefs: CommentReference[] = await response.json(); |
|
| 699 | - | ||
| 700 | - | // // Fetch each individual comment using ATProto getRecord |
|
| 701 | - | // const commentPromises = commentRefs.map(async (ref) => { |
|
| 702 | - | // try { |
|
| 703 | - | // // Parse the AT URI: at://did:plc:.../collection/rkey |
|
| 704 | - | // const parts = ref.uri.split("/"); |
|
| 705 | - | // const did = parts[2]; |
|
| 706 | - | // const collection = parts[3]; |
|
| 707 | - | // const rkey = parts[4]; |
|
| 708 | - | ||
| 709 | - | // // Resolve the DID to find the PDS endpoint |
|
| 710 | - | // const didDoc = (await fetch(`https://plc.directory/${did}`).then((r) => |
|
| 711 | - | // r.json(), |
|
| 712 | - | // )) as { |
|
| 713 | - | // service?: Array<{ type: string; serviceEndpoint: string }>; |
|
| 714 | - | // }; |
|
| 715 | - | ||
| 716 | - | // // Find the PDS service endpoint |
|
| 717 | - | // const pdsService = didDoc.service?.find( |
|
| 718 | - | // (s) => s.type === "AtprotoPersonalDataServer", |
|
| 719 | - | // ); |
|
| 720 | - | ||
| 721 | - | // if (!pdsService?.serviceEndpoint) { |
|
| 722 | - | // console.error(`No PDS found for DID: ${did}`); |
|
| 723 | - | // return null; |
|
| 724 | - | // } |
|
| 725 | - | ||
| 726 | - | // const pdsUrl = pdsService.serviceEndpoint; |
|
| 727 | - | ||
| 728 | - | // // Fetch the record from the user's PDS |
|
| 729 | - | // const getRecordUrl = |
|
| 730 | - | // `${pdsUrl}/xrpc/com.atproto.repo.getRecord?` + |
|
| 731 | - | // new URLSearchParams({ |
|
| 732 | - | // repo: did, |
|
| 733 | - | // collection: collection, |
|
| 734 | - | // rkey: rkey, |
|
| 735 | - | // }); |
|
| 736 | - | ||
| 737 | - | // const recordResponse = await fetch(getRecordUrl); |
|
| 738 | - | // if (!recordResponse.ok) { |
|
| 739 | - | // console.error( |
|
| 740 | - | // `Failed to fetch comment from PDS ${pdsUrl}: ${ref.uri}`, |
|
| 741 | - | // ); |
|
| 742 | - | // return null; |
|
| 743 | - | // } |
|
| 744 | - | ||
| 745 | - | // const data = (await recordResponse.json()) as { |
|
| 746 | - | // value: Record<string, unknown>; |
|
| 747 | - | // cid: string; |
|
| 748 | - | // }; |
|
| 749 | - | // return { |
|
| 750 | - | // ...data.value, |
|
| 751 | - | // uri: ref.uri, |
|
| 752 | - | // cid: data.cid, |
|
| 753 | - | // }; |
|
| 754 | - | // } catch (err) { |
|
| 755 | - | // console.error(`Error fetching comment ${ref.uri}:`, err); |
|
| 756 | - | // return null; |
|
| 757 | - | // } |
|
| 758 | - | // }); |
|
| 759 | - | ||
| 760 | - | // const comments = await Promise.all(commentPromises); |
|
| 761 | - | // const validComments = comments.filter((comment) => comment !== null); |
|
| 762 | - | ||
| 763 | - | // return c.json({ replies: validComments }); |
|
| 764 | - | // } catch (error) { |
|
| 765 | - | // console.error("Error fetching comments:", error); |
|
| 766 | - | // return c.json({ replies: [] }); |
|
| 767 | - | // } |
|
| 768 | - | // }); |
|
| 769 | - | ||
| 770 | - | export default now; |
| 1 | - | // Standard.site lexicon types |
|
| 2 | - | export interface StandardSiteMarkdownContent { |
|
| 3 | - | $type: "site.standard.content.markdown"; |
|
| 4 | - | markdown: string; |
|
| 5 | - | } |
|
| 6 | - | ||
| 7 | - | export interface StandardSiteBlobRef { |
|
| 8 | - | $type: "blob"; |
|
| 9 | - | ref: { |
|
| 10 | - | $link: string; |
|
| 11 | - | }; |
|
| 12 | - | mimeType: string; |
|
| 13 | - | size: number; |
|
| 14 | - | } |
|
| 15 | - | ||
| 16 | - | export interface StandardSiteStrongRef { |
|
| 17 | - | uri: string; |
|
| 18 | - | cid: string; |
|
| 19 | - | } |
|
| 20 | - | ||
| 21 | - | export interface StandardSiteDocument { |
|
| 22 | - | $type: "site.standard.document"; |
|
| 23 | - | site: string; // URI or HTTPS URL |
|
| 24 | - | path?: string; // Path to combine with site |
|
| 25 | - | title: string; // Max 128 graphemes |
|
| 26 | - | description?: string; // Max 300 graphemes |
|
| 27 | - | coverImage?: StandardSiteBlobRef; // Max 1MB |
|
| 28 | - | content?: StandardSiteMarkdownContent; // Union type for content |
|
| 29 | - | textContent?: string; // Plaintext without formatting |
|
| 30 | - | bskyPostRef?: StandardSiteStrongRef; // Reference to Bluesky post |
|
| 31 | - | tags?: string[]; // Max 50 graphemes per tag |
|
| 32 | - | publishedAt: string; // ISO datetime string |
|
| 33 | - | updatedAt?: string; // ISO datetime string |
|
| 34 | - | location?: string; // Custom field for filtering posts by location |
|
| 35 | - | } |
|
| 36 | - | ||
| 37 | - | export interface StandardSiteDocumentRecord { |
|
| 38 | - | uri: string; |
|
| 39 | - | cid: string; |
|
| 40 | - | value: StandardSiteDocument; |
|
| 41 | - | } |
|
| 42 | - | ||
| 43 | - | export interface ListRecordsResponse { |
|
| 44 | - | records: StandardSiteDocumentRecord[]; |
|
| 45 | - | cursor?: string; |
|
| 46 | - | } |
| 1 | - | { |
|
| 2 | - | "compilerOptions": { |
|
| 3 | - | "target": "ESNext", |
|
| 4 | - | "module": "ESNext", |
|
| 5 | - | "moduleResolution": "Bundler", |
|
| 6 | - | "strict": true, |
|
| 7 | - | "skipLibCheck": true, |
|
| 8 | - | "lib": ["ESNext"], |
|
| 9 | - | "types": ["@cloudflare/workers-types"], |
|
| 10 | - | "jsx": "react-jsx", |
|
| 11 | - | "jsxImportSource": "hono/jsx" |
|
| 12 | - | } |
|
| 13 | - | } |
| 1 | - | { |
|
| 2 | - | "$schema": "node_modules/wrangler/config-schema.json", |
|
| 3 | - | "name": "api-stevedylan-dev", |
|
| 4 | - | "main": "src/index.ts", |
|
| 5 | - | "compatibility_date": "2026-01-04", |
|
| 6 | - | "compatibility_flags": ["nodejs_compat"], |
|
| 7 | - | "vars": { |
|
| 8 | - | "ALLOWED_DID": "did:plc:ia2zdnhjaokf5lazhxrmj6eu", |
|
| 9 | - | "PDS_URL": "https://andromeda.social", |
|
| 10 | - | "CLIENT_URL": "https://stevedylan.dev", |
|
| 11 | - | "API_URL": "https://api.stevedylan.dev" |
|
| 12 | - | }, |
|
| 13 | - | "kv_namespaces": [ |
|
| 14 | - | { |
|
| 15 | - | "binding": "SESSIONS", |
|
| 16 | - | "id": "796e0c7a685242aa83f7bbe15710d73f" |
|
| 17 | - | } |
|
| 18 | - | ] |
|
| 19 | - | } |