From aae7ae3735df6961d75dab6214654585abbe2f5e Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 8 Jun 2025 08:39:36 +0900 Subject: [PATCH 01/36] create six-splited richmenu --- package-lock.json | 1607 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 8 +- slides.md | 67 ++ 3 files changed, 1669 insertions(+), 13 deletions(-) create mode 100644 slides.md diff --git a/package-lock.json b/package-lock.json index 3ed1ec9..35e8901 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,10 @@ "license": "Apache-2.0", "dependencies": { "@line/bot-sdk": "^9.8.0", + "@marp-team/marp-cli": "^4.1.2", + "@marp-team/marp-core": "^4.1.0", "@modelcontextprotocol/sdk": "^1.8.0", + "file-type": "^21.0.0", "zod": "^3.24.2" }, "bin": { @@ -27,6 +30,94 @@ "node": ">=20" } }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", + "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/selector-resolve-nested": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", + "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", @@ -467,6 +558,80 @@ "axios": "^1.7.4" } }, + "node_modules/@marp-team/marp-cli": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@marp-team/marp-cli/-/marp-cli-4.1.2.tgz", + "integrity": "sha512-LYfSmggx63MsMHTjpWs/CeVMssL6qerFBP6mgsrXwlDKH/d991ghbRxtT10oohw8mxLOtD8VKo/XZRxwC5JlOA==", + "dependencies": { + "@marp-team/marp-core": "^4.0.1", + "@marp-team/marpit": "^3.1.2", + "chokidar": "^4.0.3", + "cosmiconfig": "^9.0.0", + "puppeteer-core": "24.2.1", + "serve-index": "^1.9.1", + "tmp": "^0.2.3", + "ws": "^8.18.0", + "yargs": "^17.7.2" + }, + "bin": { + "marp": "marp-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@marp-team/marp-core": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@marp-team/marp-core/-/marp-core-4.1.0.tgz", + "integrity": "sha512-QJ79tGpr3itR4TVQ4Cbe9J0kLHg9sR5cNX19OWSHeVK9EjDzMA9iCwS+OCRMKBAvRHo0LGUJC3lm9wUBg3Ud6A==", + "dependencies": { + "@marp-team/marpit": "^3.1.3", + "@marp-team/marpit-svg-polyfill": "^2.1.0", + "highlight.js": "^11.11.1", + "katex": "^0.16.22", + "mathjax-full": "^3.2.2", + "postcss": "^8.5.3", + "postcss-selector-parser": "^7.1.0", + "xss": "^1.0.15" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@marp-team/marpit": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@marp-team/marpit/-/marpit-3.1.3.tgz", + "integrity": "sha512-ApI1SmNK7qy6x1D9h9HGBPJorPhclincNXf4VXrpCJ1+gNFzVf8Aga10Q1JJYFb/5N5FtFxTodMZwMqB31S+Ig==", + "dependencies": { + "@csstools/postcss-is-pseudo-class": "^5.0.1", + "cssesc": "^3.0.0", + "js-yaml": "^4.1.0", + "lodash.kebabcase": "^4.1.1", + "markdown-it": "^14.1.0", + "markdown-it-front-matter": "^0.2.4", + "postcss": "^8.5.3", + "postcss-nesting": "^13.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@marp-team/marpit-svg-polyfill": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@marp-team/marpit-svg-polyfill/-/marpit-svg-polyfill-2.1.0.tgz", + "integrity": "sha512-VqCoAKwv1HJdzZp36dDPxznz2JZgRjkVSSPHpCzk72G2N753F0HPKXjevdjxmzN6gir9bUGBgMD1SguWJIi11A==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@marp-team/marpit": ">=0.5.0" + }, + "peerDependenciesMeta": { + "@marp-team/marpit": { + "optional": true + } + } + }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.10.2.tgz", @@ -526,6 +691,64 @@ "node": ">= 8" } }, + "node_modules/@puppeteer/browsers": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.7.1.tgz", + "integrity": "sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ==", + "dependencies": { + "debug": "^4.4.0", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.0", + "tar-fs": "^3.0.8", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, "node_modules/@types/node": { "version": "22.15.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.2.tgz", @@ -535,6 +758,23 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.8.tgz", + "integrity": "sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A==", + "engines": { + "node": ">=14.6" + } + }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", @@ -548,6 +788,52 @@ "node": ">= 0.6" } }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -567,6 +853,91 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" + }, + "node_modules/bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "optional": true + }, + "node_modules/bare-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, "node_modules/body-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", @@ -600,6 +971,14 @@ "node": ">=8" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -638,6 +1017,69 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chromium-bidi": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-1.3.0.tgz", + "integrity": "sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw==", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -651,6 +1093,14 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/content-disposition": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", @@ -703,6 +1153,31 @@ "node": ">= 0.10" } }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -717,6 +1192,30 @@ "node": ">= 8" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "engines": { + "node": ">= 14" + } + }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", @@ -734,6 +1233,19 @@ } } }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -753,6 +1265,11 @@ "node": ">= 0.8" } }, + "node_modules/devtools-protocol": { + "version": "0.0.1402036", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1402036.tgz", + "integrity": "sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg==" + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -773,6 +1290,11 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -786,19 +1308,45 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { - "node": ">= 0.4" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, "node_modules/es-errors": { @@ -879,12 +1427,76 @@ "@esbuild/win32-x64": "0.25.2" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -1054,6 +1666,44 @@ "express": "^4.11 || 5 || ^5.0.0-beta.1" } }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -1081,6 +1731,36 @@ "reusify": "^1.0.4" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + }, + "node_modules/file-type": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", + "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", + "dependencies": { + "@tokenizer/inflate": "^0.2.7", + "strtok3": "^10.2.2", + "token-types": "^6.0.0", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -1213,6 +1893,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -1276,6 +1964,19 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/get-uri": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1341,6 +2042,14 @@ "node": ">= 0.4" } }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -1357,6 +2066,30 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -1369,6 +2102,40 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1385,6 +2152,18 @@ "node": ">= 0.10" } }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -1394,6 +2173,11 @@ "node": ">= 0.10" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -1420,6 +2204,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -1465,6 +2257,94 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/katex": { + "version": "0.16.22", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", + "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "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" + } + }, + "node_modules/markdown-it-front-matter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/markdown-it-front-matter/-/markdown-it-front-matter-0.2.4.tgz", + "integrity": "sha512-25GUs0yjS2hLl8zAemVndeEzThB1p42yxuDEKbd4JlL3jiz+jsm6e56Ya8B0VREOkNxLYB4TTwaoPJ3ElMmW+w==" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -1474,6 +2354,22 @@ "node": ">= 0.4" } }, + "node_modules/mathjax-full": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz", + "integrity": "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==", + "dependencies": { + "esm": "^3.2.25", + "mhchemparser": "^4.1.0", + "mj-context-menu": "^0.6.1", + "speech-rule-engine": "^4.0.6" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -1505,6 +2401,11 @@ "node": ">= 8" } }, + "node_modules/mhchemparser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.2.1.tgz", + "integrity": "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -1550,12 +2451,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "node_modules/mj-context-menu": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz", + "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -1565,6 +2493,14 @@ "node": ">= 0.6" } }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -1647,6 +2583,64 @@ "node": ">=4" } }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1681,6 +2675,28 @@ "node": ">=16" } }, + "node_modules/peek-readable": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-7.0.0.tgz", + "integrity": "sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -1703,6 +2719,71 @@ "node": ">=16.20.0" } }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nesting": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", + "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/prettier": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", @@ -1719,6 +2800,14 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1732,24 +2821,64 @@ "node": ">= 0.10" } }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer-core": { + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.2.1.tgz", + "integrity": "sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ==", + "dependencies": { + "@puppeteer/browsers": "2.7.1", + "chromium-bidi": "1.3.0", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1402036", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -1810,6 +2939,18 @@ "node": ">= 0.8" } }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -1822,6 +2963,14 @@ "node": ">= 0.10" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -1843,6 +2992,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -1962,6 +3119,115 @@ "node": ">= 18" } }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-static": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", @@ -2119,6 +3385,84 @@ "dev": true, "license": "ISC" }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speech-rule-engine": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.1.2.tgz", + "integrity": "sha512-S6ji+flMEga+1QU79NDbwZ8Ivf0S/MpupQQiIC0rTpU/ZTKgcajijJJb1OcByBQDjrXCN1/DJtGz4ZJeBMPGJw==", + "dependencies": { + "@xmldom/xmldom": "0.9.8", + "commander": "13.1.0", + "wicked-good-xpath": "1.3.0" + }, + "bin": { + "sre": "bin/sre" + } + }, + "node_modules/speech-rule-engine/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -2128,6 +3472,42 @@ "node": ">= 0.8" } }, + "node_modules/streamx": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "dependencies": { + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -2138,6 +3518,22 @@ "node": ">=0.10.0" } }, + "node_modules/strtok3": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.2.2.tgz", + "integrity": "sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -2151,6 +3547,45 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tar-fs": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", + "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "engines": { + "node": ">=14.14" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2173,6 +3608,27 @@ "node": ">=0.6" } }, + "node_modules/token-types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", + "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, "node_modules/tsx": { "version": "4.19.3", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", @@ -2207,11 +3663,16 @@ "node": ">= 0.6" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==" + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -2221,6 +3682,22 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, + "node_modules/uint8array-extras": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", + "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", @@ -2236,6 +3713,11 @@ "node": ">= 0.8" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2260,12 +3742,115 @@ "node": ">= 8" } }, + "node_modules/wicked-good-xpath": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz", + "integrity": "sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xss": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", + "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xss/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/zod": { "version": "3.24.3", "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", diff --git a/package.json b/package.json index 334c415..601910d 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,14 @@ "dist" ], "scripts": { - "build": "tsc && shx chmod +x dist/*.js", + "build": "npm run prettier -- --write && tsc && shx chmod +x dist/*.js", "prettier": "prettier \"src/**/*.ts\"", "format": "npm run prettier -- --write", "format:check": "npm run prettier -- -l", "clean": "rm -rf dist/*", "prebuild": "npm run format:check && npm run clean", - "release": "npm run build && npm publish --provenance --access public" + "release": "npm run build && npm publish --provenance --access public", + "build:slides": "marp slides.md --png -o output01.png" }, "repository": { "type": "git", @@ -35,7 +36,10 @@ "bugs": "https://github.com/line/line-bot-mcp-server/issues", "dependencies": { "@line/bot-sdk": "^9.8.0", + "@marp-team/marp-cli": "^4.1.2", + "@marp-team/marp-core": "^4.1.0", "@modelcontextprotocol/sdk": "^1.8.0", + "file-type": "^21.0.0", "zod": "^3.24.2" }, "devDependencies": { diff --git a/slides.md b/slides.md new file mode 100644 index 0000000..cc1f128 --- /dev/null +++ b/slides.md @@ -0,0 +1,67 @@ +--- +marp: true +size: 16:9 +--- + + + + +
+
+

アイテム 1

+
+
+

アイテム 2

+
+
+

アイテム 3

+
+
+

アイテム 1

+
+
+

アイテム 2

+
+
+

アイテム 3

+
+
From 14f2118cdf0d1f1d506cae13cf02c38c166deeb4 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 8 Jun 2025 09:21:58 +0900 Subject: [PATCH 02/36] add templates --- slides.md => templete-01.md | 54 +++++++++++++++++--------- templete-02.md | 71 +++++++++++++++++++++++++++++++++++ templete-03.md | 73 ++++++++++++++++++++++++++++++++++++ templete-04.md | 75 +++++++++++++++++++++++++++++++++++++ templete-05.md | 62 ++++++++++++++++++++++++++++++ templete-06.md | 59 +++++++++++++++++++++++++++++ templete-07.md | 52 +++++++++++++++++++++++++ 7 files changed, 428 insertions(+), 18 deletions(-) rename slides.md => templete-01.md (50%) create mode 100644 templete-02.md create mode 100644 templete-03.md create mode 100644 templete-04.md create mode 100644 templete-05.md create mode 100644 templete-06.md create mode 100644 templete-07.md diff --git a/slides.md b/templete-01.md similarity index 50% rename from slides.md rename to templete-01.md index cc1f128..c2dd997 100644 --- a/slides.md +++ b/templete-01.md @@ -7,7 +7,7 @@ size: 16:9
-
-

アイテム 1

+
+

item01

-
-

アイテム 2

+
+

item02

-
-

アイテム 3

+
+

item03

-
-

アイテム 1

+
+

item04

-
-

アイテム 2

+
+

item05

-
-

アイテム 3

+
+

item06

diff --git a/templete-02.md b/templete-02.md new file mode 100644 index 0000000..8f9ece7 --- /dev/null +++ b/templete-02.md @@ -0,0 +1,71 @@ +--- +marp: true +size: 16:9 +--- + + + + +
+
+

item01

+
+
+

item02

+
+
+

item03

+
+
+

item04

+
+
diff --git a/templete-03.md b/templete-03.md new file mode 100644 index 0000000..11d001a --- /dev/null +++ b/templete-03.md @@ -0,0 +1,73 @@ +--- +marp: true +size: 16:9 +--- + + + + +
+
+

item01

+
+
+

item02

+
+
+

item03

+
+
+

item04

+
+
diff --git a/templete-04.md b/templete-04.md new file mode 100644 index 0000000..89ba66e --- /dev/null +++ b/templete-04.md @@ -0,0 +1,75 @@ +--- +marp: true +size: 16:9 +--- + + + +
+
item01
+
+
item02
+
item03
+
+
diff --git a/templete-05.md b/templete-05.md new file mode 100644 index 0000000..b9db802 --- /dev/null +++ b/templete-05.md @@ -0,0 +1,62 @@ +--- +marp: true +size: 16:9 +--- + + + + +
+
+

item01

+
+
+

item02

+
+
diff --git a/templete-06.md b/templete-06.md new file mode 100644 index 0000000..3f2546a --- /dev/null +++ b/templete-06.md @@ -0,0 +1,59 @@ +--- +marp: true +size: 16:9 +--- + + + + +
+
+

item01

+
+
+

item02

+
+
diff --git a/templete-07.md b/templete-07.md new file mode 100644 index 0000000..623d824 --- /dev/null +++ b/templete-07.md @@ -0,0 +1,52 @@ +--- +marp: true +size: 16:9 +--- + + + +
+
+

item01

+
+
From 0f25ba13c2439186b060cb077a21f20d0e722971 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 8 Jun 2025 11:06:23 +0900 Subject: [PATCH 03/36] create rich-menu folder --- templete-01.md => richmenu-templetes/templete-01.md | 0 templete-02.md => richmenu-templetes/templete-02.md | 0 templete-03.md => richmenu-templetes/templete-03.md | 0 templete-04.md => richmenu-templetes/templete-04.md | 0 templete-05.md => richmenu-templetes/templete-05.md | 0 templete-06.md => richmenu-templetes/templete-06.md | 0 templete-07.md => richmenu-templetes/templete-07.md | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename templete-01.md => richmenu-templetes/templete-01.md (100%) rename templete-02.md => richmenu-templetes/templete-02.md (100%) rename templete-03.md => richmenu-templetes/templete-03.md (100%) rename templete-04.md => richmenu-templetes/templete-04.md (100%) rename templete-05.md => richmenu-templetes/templete-05.md (100%) rename templete-06.md => richmenu-templetes/templete-06.md (100%) rename templete-07.md => richmenu-templetes/templete-07.md (100%) diff --git a/templete-01.md b/richmenu-templetes/templete-01.md similarity index 100% rename from templete-01.md rename to richmenu-templetes/templete-01.md diff --git a/templete-02.md b/richmenu-templetes/templete-02.md similarity index 100% rename from templete-02.md rename to richmenu-templetes/templete-02.md diff --git a/templete-03.md b/richmenu-templetes/templete-03.md similarity index 100% rename from templete-03.md rename to richmenu-templetes/templete-03.md diff --git a/templete-04.md b/richmenu-templetes/templete-04.md similarity index 100% rename from templete-04.md rename to richmenu-templetes/templete-04.md diff --git a/templete-05.md b/richmenu-templetes/templete-05.md similarity index 100% rename from templete-05.md rename to richmenu-templetes/templete-05.md diff --git a/templete-06.md b/richmenu-templetes/templete-06.md similarity index 100% rename from templete-06.md rename to richmenu-templetes/templete-06.md diff --git a/templete-07.md b/richmenu-templetes/templete-07.md similarity index 100% rename from templete-07.md rename to richmenu-templetes/templete-07.md From 674460738f4ec077b5f67e94d987585c6657bf26 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 8 Jun 2025 22:36:43 +0900 Subject: [PATCH 04/36] separate the generateRichMenuImage function --- src/index.ts | 30 +++++++++++++++- src/utils/generateRichMenuImage.ts | 55 ++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/utils/generateRichMenuImage.ts diff --git a/src/index.ts b/src/index.ts index ba4ff81..8b6260f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -21,10 +21,15 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js" import * as line from "@line/bot-sdk"; import { z } from "zod"; import pkg from "../package.json" with { type: "json" }; - +import path from "path"; +import { fileURLToPath } from "url"; +import { generateRichMenuImage } from "./utils/generateRichMenuImage"; const NO_USER_ID_ERROR = "Error: Specify the userId or set the DESTINATION_USER_ID in the environment variables of this MCP Server."; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + const server = new McpServer({ name: "line-bot", version: pkg.version, @@ -213,6 +218,29 @@ server.tool( }, ); +server.tool( + "generate_rich_menu_image", + "Generate a rich menu image based on the user's request.", + { + templeteNumber: z.number().describe("The number of the templete. 1-7"), + texts: z + .array(z.string()) + .describe("The texts to be displayed on the slide. 1-6"), + }, + async ({ templeteNumber, texts }) => { + try { + const richMenuImagePath = await generateRichMenuImage(templeteNumber, texts); + + return createSuccessResponse({ + message: "creating the image. please wait a moment", + imagePath: richMenuImagePath, + }); + } catch (error) { + return createErrorResponse(`Failed to generate slide: ${error.message}`); + } + }, +); + async function main() { if (!process.env.CHANNEL_ACCESS_TOKEN) { console.error("Please set CHANNEL_ACCESS_TOKEN"); diff --git a/src/utils/generateRichMenuImage.ts b/src/utils/generateRichMenuImage.ts new file mode 100644 index 0000000..5dfac0c --- /dev/null +++ b/src/utils/generateRichMenuImage.ts @@ -0,0 +1,55 @@ +import { Marp } from "@marp-team/marp-core"; +import puppeteer from "puppeteer"; +import { promises as fs } from "fs"; +import path from "path"; +import os from "os"; + +// Function to generate a rich menu image from a Markdown template +export async function generateRichMenuImage(templeteNumber: number, texts: string[]): Promise { + const richMenuImagePath = path.join( + os.tmpdir(), + `slide-0${templeteNumber}-${Date.now()}.png`, + ); + const serverPath = process.env.SERVER_PATH || path.resolve(__dirname, "..", ".." ); + // 1. Read the Markdown template + const srcPath = path.join(serverPath, `richmenu-templetes/templete-0${templeteNumber}.md`); + let content = await fs.readFile(srcPath, "utf8"); + for (let index = 0; index < texts.length; index++) { + const pattern = new RegExp(`

item0${index + 1}

`, "g"); + content = content.replace(pattern, `

${texts[index]}

`); + } + + // 2. Convert Markdown to HTML using Marp + const marp = new Marp(); + const { html, css } = marp.render(content); + + // 3. Save the HTML as a temporary file + const htmlContent = ` + + + + + ${html} + + `; + const tempHtmlPath = path.join(os.tmpdir(), `temp_marp_slide_${Date.now()}.html`); + await fs.writeFile(tempHtmlPath, htmlContent); + + // 4. Use puppeteer to convert HTML to PNG + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + await page.setViewport({ width: 1600, height: 900 }); + await page.goto(`file://${tempHtmlPath}`, { + waitUntil: "networkidle0", + }); + await page.screenshot({ + path: richMenuImagePath as `${string}.png`, + clip: { x: 0, y: 0, width: 1600, height: 910 }, + }); + await browser.close(); + + // 5. Delete the temporary HTML file + await fs.unlink(tempHtmlPath); + + return richMenuImagePath; +} \ No newline at end of file From 4f2762276f4d623c2317f1e75186cc26a9ea6f08 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 8 Jun 2025 22:36:55 +0900 Subject: [PATCH 05/36] add example images --- richmenu-examples/slide-01.png | Bin 0 -> 29874 bytes richmenu-examples/slide-02.png | Bin 0 -> 22834 bytes richmenu-examples/slide-03.png | Bin 0 -> 23878 bytes richmenu-examples/slide-04.png | Bin 0 -> 24870 bytes richmenu-examples/slide-05.png | Bin 0 -> 17066 bytes richmenu-examples/slide-06.png | Bin 0 -> 13606 bytes richmenu-examples/slide-07.png | Bin 0 -> 12276 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 richmenu-examples/slide-01.png create mode 100644 richmenu-examples/slide-02.png create mode 100644 richmenu-examples/slide-03.png create mode 100644 richmenu-examples/slide-04.png create mode 100644 richmenu-examples/slide-05.png create mode 100644 richmenu-examples/slide-06.png create mode 100644 richmenu-examples/slide-07.png diff --git a/richmenu-examples/slide-01.png b/richmenu-examples/slide-01.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef35e7a8b3d6a52e22e75e9592f30251fedef43 GIT binary patch literal 29874 zcmeFZXH-*f_bnPkML|JDK&c7}0sR+37(b z(8Xs@AM1iZXH`HT+W2#4fqyZcobLvKE`gpsexUD{xjAIEiqRz#vdr zz9HymBIsSk3D`-0v%wzkcbsG-;OFw^%Y&NV$ur#~{6SPWtN9Iw=6Qd7``QeibWPIl z&4p{ScL;c%OFVdD!HIFokk{i?xs~@?S$1ORm9)UBCnDZ3!g}%1-!U=^!e>*~Y(R1; zmPY0E25q!MAMQI53%jJPc&vZnZhI9n5_b7f#D%EbF0e4_qN7cfMQg)IaI%R_vdMJM z{rGeO&^NF<|c$R|Ktjbs-9#d#&7ZbI?aS7mUwlNI}P46sN zN2+bS)-uMkSc}VcB%Cc?ZgulY+%m?!BdR#ZU)mD76?b&9zaSpu*8;uV1twOU5Ogbt zAuG~_W;1(1KWYmDUX~V;FY9Sb8K`WV#tD`}x-~2Fo+Phxi31=57H;N_WscECvclj3|ZdyxIx7u#+#C}kM)jN=VvA7%v=Ih^UVZ&oQS zAZEAryo@}!;BcQ%AM+nS)7Gbm>dE((hn##g*YIltM;sdeqP>!M{3GYyS8UQV%E+z!Mh#E5oOa7IjY zPdis$4#YMG-fdaq9k~%s2{N0Yo5EskN4h=Yjy`B#G?YhT;2w1NzT(MGTMx_Xn7(oWXTEm(!|7r* z|J!N_&{l+9hMRdc^Z8N-xlUA1;jfhbQz3+6@E0LXIQXfsM)fw-HIq;+kuSOp+sWN? z?O{odVNOtPXp1=$QdY`x&59me)w)pBbg);xSYF)`J?-~*1kvBPoNU3*xK^Wm7ng85 zze5p!65}zjD=_KwvAZcdfRMK5I-<%NZ<_#qST0k0Yno5E)ZoG8N0E#dO(W`%?Ozn- zbY_0Vc@$1?)A2xFarz&4EdPok?0k>p>50g26FdPqsBF;oqVzFgc;%ye(la&~`AD9n zfWu}sn+d7OsQ#)ZAy7%WX{blsHM#o`v@=?Exn9DFD>zp8jEk9DJJi4NiAABc9VLu0 zY6~)3IJAIhnh(Nkd6qXGC>c4io*s$!#{g zyiBs?2G4^r$$*13+1VY$+ehevu;t9mU)j&J; zD_5=wZ|(i|N!VUyoxq8Rq#ltYd2CX$An&J-wi?kkXi{LWZG!UUi_6jF0V$Zm`~*b} z2F===zzR^O*#2t5lIhC1#tPL}otP51m7KhD-@&H7_N_|ppq`eCF)8n*2AEigib8G+>5x>SX$edKL3`Y^WM+J-_ptQy(Zv1Q!C`{vx1#IGk!j`H6x8tN* zU2g#M{dj}+Q;{jp$5xz@xJy%CRVoe##`rwT_5A*b%$#69Sr zyow3C#q}!SH;a*)j-!nmD$6(ac8akgf7)M|^KV_~?ur?j-c2iL;mW9 zjlP<_=faL@Kv z7qW9ii5eOQ|DHOEy0{n;#wap=yzrJmENW0@reN`Rj91rxxPbT}Gxt`$=%-eg?xh65 z&g@;%mOCuw4BMKi+p;veZNFQvI7?^ExyYiPObK1lVz_&Q1CgWOCg6+}7R$2sv^6ii z(R8@c-*5ILhWxveLJk~PP5&l~-yEX_l_+aAgPR(EgtpppL7pOIH{L%IIH%kzwO)|e zdmh2X6}VO7eD$NDEUk(=>2BP%Zp ze++N+y z{8h}LBv2_k`;zEt(?2K^Bbv4PK3#TiZK;pW)ldMJ%-w2wv%MpdCs=X_>!Z`dLgxs7 ziKN9R{1V7%>q8)7uQNjdtepTCS)W-8#<&9v%0BFVN^$zyH{hIhZDkl}}JI8FF1+~m& z>R5WthEx}A&kIs-7tmH(KU$meXs|(w>`ad?SUocpuSLx((Q9*>2OJyhE~<+mRM|2W zzGIFz_mTZ)^hSQ%#SLgRM)LSq%$j*kI~G?SW#(B0BDfl2(x)MqN_x#V0AR~sK3|nL zX>N<#!&bY_q|t^%=(Q65td?l=(NA)~RH66sBH%BaCSDxe+wq242DZm7{@6!~MxI@I zuDrA#XklD+Gx{md@YwSn?>F}8)`IuXk9@|2<#t7r;@M2!gqD=@!c{+>zaEnO!~9|R zs-1kw2UfnT&B+30ZZ(eMkLej9Gp`Z4m0lh_HQGv~&BwGKSW>J+8Q1+);7Bp{%!wzF zj9jPE6==>$){fK3S6&qiPNUQ-FZ_{a+wtVgGRn(0 z$BZ%+K==_OmSi+Mx$+1i|Mj39k4^|A%o5EL#1r;lG!Lg8Vi zBmNnbcsPTl&%%nEm9mDe4BcECem{EpoAeA;U+hf3ap|=wH-yC^fY8*Sa-<3`C-bkd z!~oHz9T?kD{a*g+O|@~y@R#Y=o(Y4?_H!t0SAhGCMu!u8;>B?HEu04@7~-IZ$82TL zAS(1m@N`%m(R|}cSBLHZcmpMSat-yYINQ?F(S(doq!^U%*qReJeXWnJhoc-fa1YX- z`tQ|5mbF{JG;8L>mjX$HjY9E`=nf0euwtruNi(n4c~#%iikfL59S%Xor}kO;pWeRL zW8voOgm4DUQFi&rudUi{u5O^6rYe{_|8McqK*9)!t)xU8*=CPua0i!o_SEf4)cd>?~M4wzzuy&Ai(!a7%An#MEju*PD4Chq6+;%rKGbAZWT1 z1k`2BvyCh4X`WAnY?wwYOdN7=rd*!G!zd_N&wc> zm)uOK=U zM@EQ!>Xf~x!_(Q=XzK{r50ZGf7a8w&NV%Q zqZ$4Lr^h|`WT_72=^zdBCG;Aaxq-ivG~2-r=hm%f5!}^n(K78RtX3yj8kMn^q6;u~ zFVWnmYt$kl)o!CSzoCWIAvEc#MU%LAX9Bx{8zl|m7b|5qu(k$d>NdP3+K-s!%Ycp7 zT+PSHQ#Mmw?vM5U{jQM4iVfi=_OfQU6A&;aF6oL{y_Qc(zG$gQlfc3A+g5KvtC(kf z0U-PMvg4q!s3aE9w{N z3upGkeb(Pn0MOaPObITV6jop*67!a^u7|ohhd@D=WMwbESy8fT=~uG>D)@s*E5&K( zm?b6!^SDmemmamF5cFmsa)5JHO~9-VB4MF5*(21%1GSfyc}RYq_!b7%g} z#DuA`naCQN`1ho?+alJ8WV+oGAds1fO*~1jFmato>KDER#6)(W1VH-%wJ5zZ&yotJqXySz{=lxe)#;TcHmoM-o->sxs@x+d z>+=8v)IG?QKmMWZ7_klr@Ml0iwxYRCgReywGTfu#ndxpVj`^ZRSq)SBokxq+RvN#d z)pNF;&=$nFo+ir&X8RBo+Q6L!HTt;Lowr`)ca3|KJ{^r|fo}>m0|{nnH3t?y{d|VY z{VvN31C}@IHO^HnZEyM`|K?e)8k&5)MZ`Axx-@Q0>U4iaf~)t)yyZe;8v`xrFC(tg z$CdXZxkHk3GgT1(WogUzbz$x}z>Ma;q_lcl6dzaWw;UJRekB^;EPzT`ac}K^qVMOt1zj;F@(- zGq(AcpME67bJ;WeD|%g2NZFb5MXO#`t=?x&96BumkUW%h(5}WRHr%q zX|K|bgyVVK1Nm|9n97EjmpM>FhamdQQ4?X1By{Bpd$4Hk8Vx!>xZ14pUU1xfaoDor z51{&Hv(NGhc4@{PE+?m#!ukJpU%xRN5~1~XAbOXy*DqFBK$^Hy_VeBM?rBwnPlm4` z>!Zz!O=nslalAnN$;*N$V9BS}?#DOk(w`$mJdf7!Xv!rY1Ml#k7bGU3Qi7mkr+A?1 zz^k%W$?|7qeKJfjOs_Yw+3jP#^^9Ojt*yuPw*dl`C+OPD_E+_Vu2)O|H|C#o4>TCo z{4OF#J@qAFogoh3k6I?^`4}3mI?pt?N}dtCVB!ylFMWL!&_XnIcbjV&ZsG~P3u(_v&7lW(YG&9}+uIc7xDkxKKZe_m`?Z?seKE)g zSUr$H#$!7vRh;jrMNQ~g$&;AANO$Sa55giIyK0E{T-C|pPb)BHh;DH}HMq7>$aE|S z(&3D|`0?LFHCGms+tXDRW5#eG15I#Z!V18&U~na2^FV?i>h|6Z-ch zjmo}_Xzs%5m7)x{>4!@l#Hy*6>&*MM-_I~eu*u>pwf@5e#GXjWbqgh7RYV z1xWd#(c2}Ca{)yTcS_?XD(WEbr3}rafI==}&1*(8yaWG=Ld#T|lAOC^bOnfSgq4hz z%Bx>e^UREhhm~#g-ZtQqovw#V8!b+>At$9w>}p!L?^(WRjzDj*`QD8W*>sPQw1KBV zgNdfO9tDuJq=IlpAIG%g?La6)oby4GoMz}0z}Rq7DVHxanpQh6 zL^g_^j(loEH5xDIB>56MtQ=hPztgAG0U6W>Dne;T5}Iw^_v`w*jgkdOBc#&;~id!5s3Odh1BSA0Qba znpg2ciew;u_X5QwfT(2P50{JsN@3l4+RAz!vkKS_HsQOSF5|s03K4k!7_mdVgG;}N z(Pp4fOU#*cAppC6Nwcq--L}p>!}gwtU1uJj&x;YgLTx*o=r6pfvCoEzcAV^$KkQ8L zAf4$!*0pmEqyxIbKUX?Y76u$-vVnQ=jH_ zAqM^s$Efc%-LK~nh!vHjh z2wyxTQG`GEQ7maEKVF10xZuNTM=SPHFzD6e%3)b5CHXKiw3zipb?2_#__#>pyrsh| zdwI3#GHHD??hKnn?exs^@+ubF-q@(=)K{OL(ep%*$F%uQr3+IBig(6vjBYhg>1JA! zfssk`aFcUYd#+;53+7Th(E9xKo65h+-^}~ zwRHFny1@f1j*&8ha%1}~DTcUqfMU$&?;stvHZ@y=fXYT#-=9*Ds9{Q0GV&o zycEhHV^6H+$VQ}$OK-#=!I9`#%^(&}i$_-v9|1*4;m-4fC>9Y=J!dER(5y$C`s|q- zVF$z+XDs(}vbidijP>a9F+$wka)N!62gM=HAC7&Rwl2g3-1a?a7M7lW6ZX(Pv>*pN zg2=w4T9B1lnq^|Z3UE_*7H1hmWBWx#gYBk_QRabAp!UEOemzGW$MMk*xn1;eGoE#t zO9ypBr4SA5sH*+`pmY>Sb9tx@X}AbbDzk7PBd2jZ%HOJ$v*;=xWn3!;ctb&SSV zxVqj3zBC`aIwxCZJ@P4f$bU6W0p#%e>_v8chfL}!0Cr|8wj;p;zh=2zWARx252>tQ zEb6*lDj4KoIdEH21lScp%@_4QW?c&0Znsh-|0J<6<#dvJGnUA7Jkh+6>6fih*_8l& z$3@@XpvDbV)RJGe@_34*U37;L&GbK=N>>+c&07q7S>eATje4+ObcQw7KH|Fl9m#DV z4BwHgGHZl0#Lf6p!urhEg#9<8U~DZ1VXMY%V!xxvL=&XWvU!Qo*aM4HdQ1Q4qY|!8b zQwV>r`NMt534NIGi9Z;gIqkh)xzxOBRk63510%}~f$?u;504V_-d}a|Mte0nAu8Gy z_jDf1D^$#!&G_sz(lHUQj_v};{Ah_Gd6{Tamzu@a*e`;$w5NL|aQb>I&!?<{mnWJw zqswhj77!txS~>Bo)ir%fl2NJV!|Ca1SCZ!9U*?23H|J`p2Tl~AMnser=NQaGOrA|= z%hrf|mdnW3E1q)C*&e~w!&1SDuWt~KK7g|bzOldY+s=^9Fxu5(i~@5inDj#9D^d8_O}D`-yhglH!c({XXUMj;Ez|c1Xk{}Cv;F2 zBK`1l9lJxV*q-w0cFQWGnCBub4O1>-AuAf7QwGLgFhSwqKiP&tyra2kr4~P8B?hnY z1+!l!;-`wuOJXtamg0ez|DCspQfJGh4dgaVmz5Jw2CAu4m)d8x2Wum{lV;e@VzsKS z01_Y3-GU>kJjO&CS-?Lr)ToKxSo}kaX9DfX*ryDI_ZBA8X@f}`ciYE5jpROx^n`vL ziNN#-30EH!dr;AJ7+as=7n==rJpT%j=cP*WH!yoWzax zJlCqS+BIGVL@!5`m4~@$NF8(?|7qHZCFyNuo`SkCz-uM!iC%XY0s^zp!0$r!g__b- zzdyN={gHNs4d+Nie2%q-d{fzKs8U{uep`V-M5&d}#g5-J z4nTab=Shv4YAeJQNZ5no^97H6M&T!D;62o!J2^&Vh40sJ50)IuaNn_=3G|@7m!i4H zrhd6+`W5&%`lAZpIDdK;t=WG#<%{(c8Jik45ioOyzy24L5-Qkwi>oAB27Yd=mM##r zkVh1H&{E#|>)=4gQ{UNe86@(QU~P^Dww4+cr1D52Ww?#Y>)`S( zQbal?0@4LHLY2fpoa%fKA~KRr=K#<@qYf*Y9}45vDjS(=A{q}`f@W( z-C=$dNvPM;inV~u-(-JCFu^x(6;Vsg{Gt{}mNJ#hescanZv+pQ!VoL9MW=t$^^qd( zFLPeU;AoY_Y`~ZguA}lkE?$G}$B>l6;K-GNuz{+M#nBRXYR_=<>zp)=N`KdH0!Ve4IS>29H_j4xB$C=IR6rQ(N-!Y7C(O>|nk@3u2FMey7OUL|th5S-U3(Dmj$q4;#N zs4q}}`Yoiv5Z8;dIK7Yto#nv@ncuGxfl6UQzXy!~iC92Ubo+w}+Osh2oFi1JzyyX4 z`M0`+sVLj2tVCNicwSH2ViV~yR-~CLuG)$6kP0VQw>WZ8RK`3smEZxVZcu6YWPoa( zjxYSO@R1H%xl6NK3Vx>W%rbak-7{+>peQX5TxiWt;;wEv`7~u$F5-*>V*oDeSScM+ zH0!nMx|?u2<=ju5a`D>}@lB;uRvIwlB45GyS-~4JKo2XPOrqjqh4#K?G4tG44DYNk2M$j(U(%ikYGbbkvC>r>wUC6IB~F7;(ZD)caZq;za^#ADLL z_Hb0WSX>U2gcBsSAM~^JAjBX~9-|(e^88SB6WcK(L(S^C7CX2cZgpmotGydXzi6F) zv#*yXuzC{+Aa-MP9j|5ecQ~wX)V^#mf=<$R<;vd2;K{JFlxoAL6wViAEV`t7p4~rn z0H%Et7q5K z-Fly4dgfoRppsatiQA1}HU9TckkdE*f4fX_b7fn4qk(g_NhS>|owz5-HV7{L#uYdUDi zd38VcJp&qk3)o&H{@W0N$Tp`g{p+c3DE!}kaSj*<&;KC@)IT2vf&QCkjNP~#1affs zzkLk>OX#1C^v@vt6H@=T?Sk}naogVR4>unzEd`ToMxP19HLqq1%h$W}fIv$G5+1#j zs7*wK(9qiSUbl}02yX$Pv<7T3PXQq{FPOZxbhHT=KxSO(dd8?X6@z5P8-t8c4lq=75u5P#X z(kLBDHPe7Zrb=}37pXliW^M46HeOp|P}1W^jam=jir}m?ouCwOf-Y)<9@gQg27vGU zX5HG#B+2i#fFe%ArKM+bcd85DQ$MD~QLmv)KC*4wS%ldD9vpFihdipMgsfS$6jHQW z->qZ^4y}!s>QVbZ1C}i!bqBgsrem@C5HNrA0Ahsl5wD_5&%RXO>}J}K^MyOM#4Jep zUJc-6C=0S^`uk%)ELnJqKX?l#(}xWYrKL-9iXe|*6UocpD%4Yk#Enu!#Sxr^>A7Q@ z;%e&+v$g%*RAn`88R!v+QGUnWZa+L;$r1n^OC@3~JhZcz;aBMn;vHP)!A znrWx<$E%~x5wmdiL;{_`Y7smCZ2v)gs#kGH1O!n1F9HhwO2~j^;3j({Pr#eu+JaMm z0m*E~>sGDaX6+awwF|LWy+bU~so5!mjJq;Q8AF@*P+CfiQR+L-8K zidb}l)n@Gbs>suTbSlrQblEW5dKGa*B?FBC?M+znG9bSPME31V@nGMHHGe=*69sfD zFH-=9ZtvYgi#ecEQG=#Y$`@}x-hkDIO*So-*5!;iuApkJ*VQ3JZiO}O17!qdVGIS8?a^B=4&>_0t$T|+(N?)vAc!CWx52L zJASwUXnE;D8^}L5AJNCDyIyg;o_&PZt06zh=&?P+I;Q_=W5f%IWudAYvL40)BgPLp zaxQ>8QN3Cz=s-@lsl3+#XeMq=RiE?&5lURV#kHzyQ+ zV;`w(1y4{0bj!<~f666D2V*^1jc87ZL0Q{j$#%;3$YqpC4WFdfqHgqtLWZWu;DvJE%P<-V8w>_M4U7hm6TZ9#rmrl|z z5wPXeJ@KuZI^|qENd?xovq}SP*L{ZM>{CKGr)VD5!TX*I8**!Y(t?`2=Pw6tW-CC9#&MMjS!9Pqb=FB89aaWdBcM#-((Y{N@t1`ry zy;=w_gPvr#cT^e+A2cr2KXdMb|1hQm@2yXrr5G85hVM}&(oH)jUS+fAYnNFwdd{q7vjB8A{oZGA zQ!(vB4)tlJpf1hE@ijRspvEQZM)FKcP|ayc30#1PWO>ryZ@Jt!J+&uJ-K*?+^31r6 zdDK}+-ytBim;u_v-C>e%3NqwqZ7IQa^cjB~wHv!4IyV}vy_ZDLo&5W?`d{4-o_g4^ zQer?GBXM(o4<%cTQeB3zeq>Y$1Uja+;mav;ggro%u{7FWT?WzkxbFrknI~X;Vhju| z#pf}^2M1WRvR%4kZ>oETe?N+D57IBvm}I7P6~0K{pJa3jsen{0#Q)L|xBeF52PA^U z&#)|$qky25->W@m3-RXDAI-am=_BJr>;IgpS<8!g3?hk zmT%Rmy}0E&A4fIk?JUOVsiVi9a8$X|T^&pZy|Z(#{lzZ~yQ3jv8d1NuaKv5_H07LN zVGH=b;!2AMGdy^o?0miBhTe_xUKS$@X22l<$*uMQ{D8f-OmjxT=!pp+3DdjQXbQ*2 z%Wh18zPJ@-L8hrLhtKZy7pP$_6Y`|SImmO!q!_`^;kr}I^`KPhd5aIG0m2De6!bv0 zeGG`$(lhTyhxiF_V; zxV1Derk!QIutL=qQYBQ!$v-~oQGA}v1_b6jwAu%H{_nRM=j6XMkDg+1fQ;r^iID&W zu5BZEmDS@YmyRNMa?ObTehaqQ%pb0O*|B_M3%VUm_`ql!xL?^=&XvfxOtN z>SC?6JI@F9hroPPL0(kDBlSuHBzWJd21wP9FU!n(tLIJ>D3gtkad1aloH$7G9WW*4 z9`Hdt|JL;tGFZA2!(miwnIT*V=IIGEu>M?L`Yb;jpeAkkn^Mtz7NtOuRg!PE-8EV0;hh*PssMH9ILT4ITbeV-)~=i6{@-J3=BicQhNtBg$aLh znBlI@HhsMhZEKqJb@RS@N~6uB{xrelF<`&k98qIsZ^eQGshwn2BpCk?Fv84HtmTYL zV~~+d3AXVHHH%GST5>ggXl78)gxcUeyEb`in~A6TqU4t{PHZfTW@i zl~7s)xUw`+qn?BJ)V;H9zIm8kKCyDYCM5$eft}|Nru^mqX2e06%rxQ^24X2%=!2Tc?{Sw^M2;& zP2?ENAcLq#FlZK=sGGH8ax7gS*|;+(gZ?~o-{)GfVQOGib6?^-+#uusH6|4{hlei9 zMFY(r<1(zauo5Ul9JGl$%hiFHChM=`+E_21N?6?to^hd>2{MJWda# z@8~TT?Yy-jOfrvoKF7};{I@2WX1Kq)&6I2z-GF&p^aP0Sa5X%s&;Gu?eXDC@e4_SI z=i~!tpP4UDpj-%3k0hz`wodF!H5>U}w&)$a(#{L2Qa&7+xdx=5&H64#&B9sC#E}Yq z+0eXl@%yv@H*A1s>nha*xEKG9LA0%4I>t&q;a?I7O~CJ*XREv8@jaZa=XQ$4^`weU zx5g=-6s~?c6x&Be0d=-D-gxi7r zLd^1*yC}nAxs`J2E!8Si(M)h!{uQ2gmWlg{a7FEt9uKBDUnB1=dDtUB z)}-5?TQ<%39|zPOq4t#w_xAR-urDR`)5;d=dMTmlcL$pA9dvn!P&y+{6ktJwoe+U- z!wp!}O_~EA`52n{EXyv{>y=qtI|e{>FVz_3Au5oCNp{NJQupFi4NC%IMuC^Ys7>PY zQKTns!Z0fR>Ar@MMX<-o>N3SpLA2d!<35E3CPi~@(D0*3G+!@=UO|tFW-L1nkXkvi z{FGb8M+257UMC^Anf&&<#Qw%{_uZePr=cU~NmzB}gQVDN;soW&LaoskflQR(O#kPYU9s;2yiTfX$9?J>s0 zycsRTbA>0m;zwvBt8&@Ho>6?~WO})pYXR?0Xe4(PL<2Cv_E$E8N-~}+aP+dvdH&_0 zWJB(c7khL;wDG7m#XziY=z^fTw zp25GJ<#6W~;PmxA#>Fc9{uC_cD7EAvkgdDclHF@QL7Z+{Zcw0_pQC^@T)OB*<_Ywr zu`}}7z8JJ{>EVsgOXp~=6g0K6x_Y4gXuWa0ahk!j;OU#_M{kOoPM5zh6}=igX7l~+ z={u7kbQ=-8Klk(1VY-C9wH*?RSKObS|CPS}^8V{idlD)Dt;Pf6U4DPeKBg(->J)Vm zWhLgU$G4GJ%be&I0y=5)%o#(+?heF0g5eGfR-E5wq|_+Cn0($WxH}t{5KJNzF()V# zt^Is~L`~i~>%ydjKdFH4&L5#LZmC0Zn1fwQ?UPs}dw^EUpFH*24x@Lc1xSbW-eZG} zMGQ!e^p(_nt96w3JJXwZsovn{B8y+Nf>e^$%TKx9(fZ(4N79lC=UHmmNOv9soD>F` zEfvL7r;lrkDy3q_R>Q;Tbyu7WkMq)B0O&pAaBnbx9Elg{X({k=`ThJh8drwkhTUJD zazt#6-b&Q?WGdv_<#3drP-yyi*RT5{;&YY4@w=Oj(Sk)!LEeltA8QT?9H^_ov4U^k z`qi~l9z-_yb>$6Mz?uXUPOj;>jK>~t#>`}TB;r4WhSdhT$wcE6wrkZqoZ$nHn3O+x z9-y6K#&t)Y+`?n>;6`4ar#@`YnL(JZg=|E{k>aH1YKwqJ-VKIgTzxei3?DxLaH?G<6KG@S#RpN1pMb3reePqhAFh zvc&*W;C#r?Lh{V^Qx3OU)j{M^QMZIo;$Wi|wnKq;qN@`fB(YUTc~EM2*|-gm-}k^e zsuq-2!AOBu!+-L}7$`v=Z(-!$_W89=Uz^11e*R!6G_7da5UZP1y5DyEh&d;CItX;7 z+GF%tMn{vf)A(u+av?hqs}0C^)oMboD2-C~CydUAIK2;}^>`%7$T&W>D?n~=aK#PE z;F<^bB3rSVRNs2pgvZ6|;$7Bl4@8dn*!Mp1t#)i^PweOO>*wG<00+iLIHhidebBe~ zJ-fuAJDG5R9%a@h3$`EZ3HK-~d$XEaKi~lD;~yQ%T_Fy;rM;ZHN<_fW8(?!3R;rz2 zqU&r9>6xgUcex%gbnKWIC;c?+zMIrv*~JpuF?!*GdF~ZZc2wEKqna#(my;^6HGto2Lh=iEKpER+g2`hF z@Ol#G6il0km!;k2+j*a}%$ES3bg8^9)d!#kgM*+1nkJC9#wuVv>k7n|>zXy~SGA7C zDg_qtCCJ`|PXe;RG*iBLTi{fetWs30k{Ogw`l?6`yHh-K1n1n}9N%}Q3(YXa9M8M( zzl%%IZ82>Uys4c-=4tv2`uz-FhD+N^@jn**nq_?#FO}3aJq$RytOkDuEZs0hu2jHn zNgQX#$vUz#jjmz2pu(8jgiq49@$Vj9(9aou_KQ}p87pcYoGysY6W9i8cPbeHqCax9`;6kCJHct3(wIJa*(qEbe0*!!xc((m zfzH6^7=mX%d4{cWyr0qcN#!+Vd{2sLM=IVlp;OJl{q&7tdd;j;?>jP?><&L(@JPCE z%Dn|h!W`o!3ec_cHutz`|5vg9ndg-#J&vC9?>TeoZ-AN` z7II1}jGQlcTfo|Vu7I+-Y7kk&dDb_l72FyJCml1$W`%_*ro2SV5P0=u)a;ycQUL0L zjOL%=$J-I#gVF>f1YVWi-Y0XXJB#f({yIBwVGQ{qb1{}yK>Th4D;4Y#CgeHBPjC<1 zj${7A1%T=+qehPc8N^Qqb<#3EYqrUUZoz|-sG8jR-$fj3T|-_y5&lCOWeuzg!AfRt zBLcTuJAWa8_3`pmFEY=nv!k>hP_72vF_JmWU0&4;8KH->dKkan!bxi}DJd#GNOA~O zE%qEtN-5IGp;!@MXcE(_ixcbtE9*<}jCA0v355FI(o5*tOSJ+{Kz`)yG3Xt7yvl*u zulWW0RcKTI9F6n!ATTqi&(U#)Y*qxE?o%`w4NI0Xw1TH9?E(^5nbUW**@{)1lnSqB z98;xqyVKdw!)D2o5kwtbrP}v>0IS8~>yGc%-N5|ziWp~C3OpPz#XH*FV6Ln^%cE4_ zJ?DYoP6HhsGr?`oug!`OptSy6nD#B+QjALCH%4dRf$iah&3=+Ygjq2XjaX4N5M5)+GN{<5PAz zbVeVcI-~V6D_NAsnjX|rIsyv;Rk;k!i`LZUd)pGQ87_z*G+3l_wsw6ujOiM7zfNZ4 z6ya09C=wi}{5O>^W|&X<2ZyR}wBHjR@X^|+Kl?8CNnd#c3-W!y`$tjbC!U3p&N<-q zo)k+hZRzpzBk6UlI=&SR8)9P*8AMW_#9q_cG*BdW^VD^cKQ1H`RRa3kHtPH@jKw}m zf!eKGyyKxgobQ~Fn0$D`h^-}t)T6Rni_x5()^CL_g$$Pth^uwhkSV_N{xTR0tCh>h z;)YGytey{td(#8?<-bcAn+Pr?w)`9Et889uw7>cuDrr32f%>CwvYb=qX3R@p6 z14+301%9)JJEx<9#~Nq7w~Xt=^QPV(bG2@E7zF@==GqP<9Z!&Ku_a1bP4Cs%be3m;LA;q=fK*K{gFka2Y@~v7~_<@`cj`x{zyG0Vt4=x-zyxON^zLt4v zwo#G0$|9xa@|osE22f0Tw%L;plmb3?_+~>JOzND%&xyG;?Iw@gfTRpWAW(#1C!z$zHkQfMH*5&&^Mn)L=e z8w%V5modf;p_IaGYd|$szfnalyS!EvL!2tO`!VrRN`kZB45jMNfrR! zF`m!#APAOfaH_mdaV!UZVN7$Y5z}{o(Lq%fX%BB}L8=4kkLztt02&=V@V3)$V0I zAy6g<&lPr%a%Zaqqe%CI77^*0Tgz(-L>I?z+^xw~t@}*A#ip*cBWHU;-=9zOTZ|ez zoRNZk&DT*}>f4A<&AEvxpXZ0XGXyR~~uS*^EIItvnpxzV^ZL6cYL3<8t z1~IaZa?hR_^Slh+esk!*a;&;BJur< zxP2yh=HMVF=c$+?(Ypn6m@&r3G@ED%-EH>XJ+peXQp;0S`3S+?@2pAxO&hZvxGiQ; zH*yxkmiw^EsjGDU}E6n$NNex+9~jDWvfZZr`nMetKc-a=&7>v{tG!` zMGRscx1&;5}m|xNUB)^B%qW-`K!4Dl8 zL}a$uJhV&gP@8ONs{GAvWjDz=C-6d|{?-R}@2OlWRVf%O)63ErVsisqR$le#EH_wo zE~wwt1no5iN3qrY0XZmBVP3_d5pa5*NsLoC&wWOEtr83UcvT6;$Nx`zSN_fB*0$4X z>8!1nwuWl8)vD@bs%mhGDlK|wwbCX^4~ZevTnVBRMbW;dim{4NLMvj3>9po4NJt3c z93=!XG{zvlo%6ltANbaKfBDvVe#j45E6 z#i?xy@sMqkS$RUbdB4L{mCPNrUtMP>R@FV8_)OWbNyPwrnAaRvyk8LR`nf`qb!oBr z+?|@{Jr|WvmKkunKXI8-+ov+VnGi06l>2u6cs!(QzG|6`&31Ko=U5$P8;VLk!pnxa zu;0qb9Va+7Zy*3LxJ_<#4nN?6*6*DFiBmI-8MHO*ie8)BY{0h)B!L`U?Zl<*NXR5} zfR8~^;SoPLS8%2KNS!@0DcgT*Mo@E*)*c;U)?JVJM{oU1z{mu+{ zyjrNZnnHsm$~K>plwjIl1bijbILuWp8KX)FJ+2I zDwRrvr1rd7ZXHII#>2)#H8l&WY@{q{OCG-{``omDWLNsL%gB9q{?6WuI{Hk2Y7(S_ zH6jv@Hz{K8vYx(NEN1Ah#gy_C_8GL5I5i@nqx&Qj??acj!Dy^}8<3KsxO?BBqHJZr zk18%|15c0cB&DWdp-_M4)w9}QTHp9Bh2y45W<$6rFR^$2CZpsN$#cx{4fqnkQ;>ta zW)br0FH#k!>^-k&v)f=XaAQ%MsAt+Is~EK&pnWg+EPZ(*ja*2!?|FEH*Z$pyu37#3 z08v-C!HUddE8|g_8joX!XgvSHdlbL=H|a&8+aCv>&=;QENVyTb?m0Px<=piJ|MSCn zZ^@I>rEM1dyf(Rpy=f z19t&_NJ7y|f(SsqY%;d+r;O4GHx#5q^^=}re6YpvfZgG?PFvN{5*c&}s1D`8M%jlq zbUZE^x>jrv#S~d@@%UdW-RYyyb-N(m;zBRej&R=EJl3sY&U z=}5YF=U7=X;64?L8EQ2PyMDm!;73qdJT{CId2R{gi7#o(EWaciP*u?UAG zPC>m9uHmI~krm_TCo?(qd-g+EF@ww1B^F>#a#~W7WduvSWS2|kb+e$ofeNFfXCpFB zNQD@rwrf}y(JCa5m(@CaYJ7gTBWUPa?FU_7@oqY1EZ*jJ3{+^uWr2<9lv?S8QeHMY zV0@^6andvMav5@>93UA^k4>Y(W392f*2>_Kd6hmbhyfW*L*x;J&SoIri5O{}AxFFTJ*R__1^E;WgvXIT&=nN*fM+5fI-n@ zK7ej9P!lXpJ;W%@(IPM0%qI%kjLB=Zkoz`e}s)=&U*$aX5Y zf)*jQPWtteo=4wZXT6XQdfq1rRAvEn#KqfUmMtJ9iWQq|+~{*GtVb#Qt1qCrUWD(+ zZ-h?t#qBtglTutN_D-ivSFn(D>K7A7Fab@A5MzXsY>cYMinLVe$j>%MBA{vHB7Y&N z9U$fuR=GT2uvqea9r!lSM$mn5xYK zE;J6>V2h-$duy9E`7C~!vQi6$ z`x`PS{Z3LLU7pU*w;vJeVtlxG>4dh*q>BK0(P6a+^)U?CL}<|Eq2X!#BJ&}EzOb+l zs5fDh(PC9IrUG>IRc4}-g(Uq#&5DwO=jd0JCd^a;+}kN8v{|G-8qa!>k>g?)UGXd)k+Ag5G-{f$!A^rLCF| zp=sFQ)~}5&`C4n^Z5PVi4Eq-EkX+p>c+n-B!Pv4~26pqMBrW`OI-XqGd2Z|ekaRP5 z;(lV%`P!e8PRzl;HllMG-0z%|BPXI`25=9*y}%vyZQ>-O|9w>yJL_k!%YQhd+w*iy z!C!h{cr`*!l-y-j9Q&_SK)?ZQwu`;$4d@2ehwE zdDW|h{_--$-Ov2hmQ)qUPF}Um8;TbgN;9CSw>V3h-6C=5_(0BHtg@qUg`iIm4)Ef< zjH+ljt*6-4SO$e46qFVC$`#fkxcCX;v#yU}@l?X$q5Z)r!Hxadf0}Gl zNkt!R*vjurEaleTW3W~#2SBao^fS1o)>{$pnhCXyE>B|(YWAPE_BZ93mO1Zf5X%kY zVn=)T;BXwA8Ph2FWrx;KxexqWGPUxLOq%cfjkT`lCUK#EiHr%m^sjFcOV5N-$FD4} z@1}Qy^6=m;bSv;WOw<}E#w|S$|MpTmVP7%ay~5EdIuU`SMs?6%9DWGHPjB9(%#fLOmSKvXK3ob>E-g9L z9IUkOz8t*TK(&~kKzR&8K3XUHGOAQJJx@IiZ#Z;I zwXiENIlu2gvnQA-IUQvz<-J#@yGlUaHDRzQ)NIc6!&Cd;&~mRlk1ia^Zkg zbwf*@|w9o?Xip*;jN*?H}tE#p1H zt#6%;8?L5-COsWSI#?_y;%agz{y@CcdOSV%*<&$_H=FoDE zLg|2Vhi>NuT7B&86upg6`U10d13GkvR_b=!)9UiLk$Xzc+d63-L#t1SespJ01k3Yl zgN%v`-mV>bUv^`-yCI|Z*-*DI^Ar&6Z)`INYS$T;&z3m+V|eUk%vG(_r-PTASg~f*w9G)SlK0i8n?dx_jWT%;b*OtzBT21HZRCbrT!ThBE~?l;lPI;Tz)p8R@{7@ z3mW!R-Cr9?HYT_=o2W)o&+MvvDLHsyF95jHMJ>+By(wp|2o^gAAo+xFWi!ZnyHmPa z(d>M!aB)`2C#HWNX({Q{M&De8&iF(kXkJSE%4k4;M+NK;Q)(Rqp|qh181ck$-23K) z)AUXn^3#oMf*cz)9x={oRUO~kU4UP)Z8{#GVq<;$d)9DjfS*fLu7o#|C?EKT(00qs zPgnX5C=#WU9pROJ=8&Ey`3->+u@dBKG{A%>B-mnFH2Cf6gd!pT9>BA{O|I{cpkqe9 z82P+EBNe9g;|TyQ=iIT;0=K&uWc`~Far?r(a^GX9n2f?|=B__OHkO=MsspaA&1&qk z;*>0%-JBiLH6O|j@}-0%90aVEF>ScWZrFjOWb#U8zI)>zf^-FMW*jTg}IWr}8bDl}_` z#5}q)M35A;v|f=iKdq>~p61L!{MdeMh+-Z~T^~|$2BbCNkqDlBHkOZD>G&p*LoI+Z zcOAcqO9>FDI1_zwl!3#^ZY964e8&|4|07#N<2LNNWdLS&sMLABm$w-Z}6*$qa>o}Gs@Jj ziKtx~5G3>MdzZT9Ej8ci?w7a1G8nh^ltZW9S}*<-&n2PEA9#p7jk?1#i14Mg-L!M0 zQUB)LOwqJQRrms`hGuCG8VxK@r(Qg1o^@)w^fAasy6#Fy(3CJFa$xIygr6tlVm_?i z0Cd0Vba%Bb)FzwM0lTedSIS=Zoh;`HT&>de0{9M)+?;28|JIf!0w$7(}$k zFPWN&I&LUqjjjU)dXbFdhf@6g@LsJd*0&mXDWuLTL=>EsAcBeQxz1A^3L(@p`^@Bh z3^pWHZnS+DqOYW^XYxB$(%zTM!ajCWT#MpGji5aV4xQZZq0Igx;~iG!ewN$?2eFM& zt-fb(K5~}_16*O4yi-=t1~LA>BdM;vVkDOlm$~@F&6=5H@$TYL;GbpzFs=F)gFWfd zHpYuGbuAu1piZgnk4ALA+^4HCkK?R1401Vgq0(XZCRMa@g8e63jIq722IV^AaY;1{ zy6iQoPKKOkr~pADJBR#L_I3AKw})Q=GI@I5>BLT1ba<}rh}O3v#v|xFj^$14LIG1p zRrma!HO){Fc}tlWxU$Y|dy)PUvQ4(2mVMQ^Hb^`R6B)%XPu)LUNj}X}x>*6b9%;6< zx@7u3Wmk*Dyd1Mcq3}g!h=}I1a;0a310&=FK(6=nTFl)S@(8J@qNdXXv{4pXc;jV|Rj8qc$i-qv~Du`2{N zwxl+5*>{z6zW!RSs61X+E%+$|P4uppoA#y(;ex63qZhDiou)I`NVV>_YOnNQE-LP`IzH z=PnX^yk@%}6d(#nhH9yh5%+jn+udq9liL{zD!o#qOF?*M=@Sa@5t`_YeB6 zbu{p^*{2ttP;Xw7o2gujE*UtlOGf?BWz1C3m$)9d0HwWs-etfPC7^TZirWKATdYnJ zR$Avzqk_Ebpl2cw-{U!7g$rB}Yak9Ml#0isoA(^~Rljj|T7;xBB9sMRe<7)clIL(4 zZHNS#ysq*@bIsaJB`DGs<&4{{ApZjO_w9o2Rqa&NoaBcp*?;aKJ}lF?HJb!l|Il}= zFALe&S%RqHIB4#h1Q)otTFz>(539&(4b%z+$r`}-PBZZK!>V~WFb9ME>)gc}Nxk)p z)$}=1Fz5r34d%>df#WSISJuG@q&p>}OG9I9tJ(o=@p;$6|;$%4gfd~r_-9q}5F zD}US<1wVSBPY$~Z*XWbGym;xRL*HYG3KurX%f}<1+|@UI=}}Cyr5$hIo;rVAdT@S) z&&QOwE#(!ro(@4VN6PP#IW})A`pW9_st>7|yrL ztN!_K=-ToBvXe0wP_?=Pj#uhM1>So21@tfgJo4n$*J$?+?ZZd|K&ZxQQ+F9wKwKz|q9yxdWjG$5lgJDWv(x+k`c*`8oys{wReoAgO2R zN1d$vw$*zCOmz)KT)<@r!oBJ@i%lkW6-ppXC`bs4;ZYg?~(9cd7P|#bc8+vu>;m90uDH9ea zzP~HnRBqMOXuCUUe+mGE3fw}oV`ZwX60`~LRg*3Qty+Z!b#gYMP# z{n=2giG*pY%&`5yL>~NUdMz@_F6ps+%Caj1=h;KY-{uA4TM($L_Lki|zITg~vphK@ z?H_K3tSl^h?ip{cx>V?STM4}wakDJiP+AV9*t9cExC~{_LOiGn%*xx}FIpORe5|Im z26jql@^S!xkuJKeV`%?!wrI_QDsLw3NS~P>Uhr9K;RvhdR zj4Xn&YPWxXrsRy)S#(Q{K0Lp(phDZzvz(?>6<@{n0Kn(jBCf)LkLI$uneB#yw}tVo zORa@vv+WVxv9cI*I22vxb;B1?YTZY-k@Cmjvp)(l;&xKc=M$gCfsy#djC?2b7dL9UOskQJFdFn(k<6IOK1GWo?^P<1L zILaah(`EdiiLy(umq9Lx6>aVW{2soz*ZY0h^M|^`e2k>g_Vk_CN0WU1VdZE609A^i z>|6SiB#1Zvd@|eJ;4_`4y;91x^a^N{U^w-CBn~#!x)wI&?~r-+cUiZcsf^=U$qC6p zW!?glpI<#Oj4WN@-1TQd0N|m<>e2V~b!yuHU#rx6D74~|=XK)Hi>u&prO@7^olHn; zRxXd4uZQDn9fz}5D}`;t7LrbFNk9K(>N(qqwl!GsC#UDNGxzS{$?Nl<)#4)C;}vg& zQ1_Mq;K`Q0?9IFhrXP=&tj{DoP^lLjbD1c8Y$OD|rL^&+0{H&steI+^d7bN7Q|k$( zR#LXdO6baV?;X3t+9q548-;)odE8UKpy8D+{E;cmrfOE+s}zl=qvw@%7oRc3Jg?=EH{ z)K)a+>F->3d%UuVBd(dycb*;M=Ppveb_)hq!EI~T_se20M(}ug7XgAx^mi~o>A=yo zaxZ^enflmx_{sqQB;P9H;>@H^cX=y5Twt|ITRcifcGB+^c`4O*X2gvi0hEZ7h;3-^ z-ix+S5)pxkOE5LR0=#%~m<^be+Z&tnN~u6BMxBUC_7tt!xa&C&HDz_bq6Z!Ot7qnLw* zBu8|yU5(om_>O&&MD@uztS~e=jpplHEVLq4XJ7#X79I#gPL_>@(3cX98^0XKtJIwo z+p?p@&JlbaAt^bQ_uz%F^%mlMKMcW&36c~EhmqY57Q|si`!nWAt%G?<=C|0)pT8_L zLQo-WC}@H=V)?-A$;-Xo^3-Z5wqdb{r_yk#+zy$~9KX#`R%3(nd6;MQ1g)!lr&kVW zyO!-<_zC`W1j(d!l;zFUf!jO3&1`p!PnD%Rb#cru^RYzhDy&)hxb3?FFRp-#-5bp$ zt6o1kQ0l4U{4`{ClAlV%6l8>$SO!vJ^^3fdq43!Cfhl+TJhsH_3Lp8)ZCHTKxwUGck&;9x5Z#=yNz_^gGH z*ElqJLL48eP`1aFmF@eIN8Iy2z|*aF&up-onkmEA;Mzs$&G~x`^8vG+Ghq{=)!PQr zb!qV)wZ^7z;!<5N#4GRKo2(UYCK+@dy1!3WTq+&4sg6tiNDb_WJbMUGZ8wk|dx*a2 zzZzaq{H^rG2nH)-;lY}4KLS}R3AaO0_F*PVzTzLE3JxQQSR5aAETygte#)+E*vPZ(4ZE^nP1aU3tU1AsQt7*pqh zfo$LH(U{>ZH8Q71tz2%A2Oi4{%XX%7}c7oE!I-Hy;Q@s_C1HD??{~J*v3s&jJ<+qc-@#gpJ!tt~&vd3UjikKwx**|v`w0K?5U=;x!NOeP&MP?COk$50mL zo>eZ|e&=Zgg;}KkQn~ob=bkrvyHg%Hk=dR1p@{;d>8I`CI?plTT&3(4+aWSOlm6Y` zA|x69++@|>xtxphE+-i}d|l~enU&o_0^?}^-y-r26sE|ik>NiD03 zQS!lv%3x}2Yrvc~L@?+j(X)08hvbbL^<%HBGiL(G=_B|rtEah4N=fF=X2Y`Ums zj_8fq^K8bjyiZ&ZC|Sd7l}w`lE6H<)ZQ7h7Q%2 z2BQ)({g!7nwU1p+{J^{uxKoR?rN8_8Uv|x1OwbdNpX^fvXF`_He&8c>Zkcjvv`Z2U z_8=IsI%fuLIjsceGoFcFrECdTwlNU&p3}a(T6fr$vyVrml&`Myv3^`=CBpH!jKGtg zTzZ(CMdatgXLl9WNEb^BDx&|Q8%gtt z`t2o{_Lf^Xemydmm|7k!XHlQ=t1@3FHIcdB+NM%HXB6Wj78y6^NXjW?sg!O6k+x_jd$+{`O>{6+(94xiK+#_lV=b_J8vKfzK8>WW?IWD`X9!7~jmhafa5B^K+gh9;H z?08uZWtX*vb|3wYE-tq-snF@%F6ltruyj-*e(0NuMyya%wWwCpmsRJ9#}0xu_y}Iu zX#gnv2Yv_rh}U|JVzAbX#fMGgzb)1@{wzb;9zCY&P7f`r&bBbxYnI;fsi5jOeIt1h z30BF4=AGRseT!c4de=#5ZSmS?7w8+J1S`pPMO=2IevXFTb4<^ z!5bn_Q@-a4#Yi6oROhqYAIXl5g97=@YZiqn@RlA8`Hz+l->f|s3Or-Dj#$*%Q5Q7)XW$_qw35CAQ1F8u7a?X98T7Mx;CnilfXsyLNR@H0g_8W?>o2evpwPI?e0PEZkZR*W!zS zUx{6kpIf$_2O~VYdFB9TK%u#rs%2! z*T&a7NjgZe373Bf%7S{dP~68R6xJ^U;(LV4E`l!e321w+L@koZsd?gM#3i;tMRHKq z&dPerQa`f$>M8LHKx{1i^Epmd1z8a2`|K8;2L8epJ1`~GRIh-0=yFf=De>JnFvzp- z2XY`Q5LC_<9{z#A#oc(Q0LPrijJ0>m}t?FTlAH`OhOU zbU|<6>M>oq=}m0RDv6H+iW-*UEW&tIb8Y~Kk`G7KR27{1?TZOiDNKdZ%-2*AT<*=+ zsfAyjH*YRloGP1oLV+@Z`~E!lWbgbsaE5PUx9hFuC@jh%H6gg#iI|M~=|`kC-%v|% zh>tX32b-Fc(u5ipQ)eaoR6QgX%M-LbYvw*_mtFV{ac~Zad2R^iBl~O@6SI&;4e2;iW|i$v@r7 zb<>Ii3gnpNkgH2AfYc2zAIk5868J+%p{ zp?okLt+iU@2t6BNF8J?ylie2~k_d61G;_e!I$IKF$h;jYdWzSh?uRXZJ0%J(f}7yd z{AlM~#HGByJpVJVH$x(bv>{+a6l?0*?B+hNlOlBj0A*)#;bOHk7@+f#AYwJ;w%xI( z$`n8WIoErLv8Oz6YsI05P2xu#C|G0rD`6^C8z`~Bwezy*k!qA&k5j~SFpJ_v1^meM zDEYmA<{5y{E;aPcos{pZ~>3jK?d9iPum&KIp}QK8;GY zW60;D(c*RYvrbJ)mYj_CzHRLso#D1SY4dxKZ+=LPS%g)5UVb5W-nQ4RPMjRD@}!-< z-;PtMv?y&w6-%JKb!@hmhd03}!k$4+@t(0Oa4g-Oau{3&x9MTN+ARcpV4j85B`7J2 zKAar-aEhR6d9#`Z__gE*r+KMh5^V#MC}$rgOKrBcsLhWw-2EV8CU18sgtD*m#eO9( zF@}#tInWRBSG~5`p-$;dA z`PQpPLz_>i0?uFNPWEaBPr(qu4@7ZHMQRbdp6c=1+2HnZIN5E&^TTa&-)MGL-s2`K zU+g8Yn5DZKUX%(yM7QrkIbG{kZseJ4?SEXPSbI)hXEN!_<$j2Sc-i%tY~1Xcrnr%H zJy$x}@2Rc$Y@P5NIz&DKCbJ~?)71iZ;QI&q{Eq4>xTSfb1obhCu4sAuvcIACBs8f| zuUDkSXxe|O|9syW_ca+zsja2&4y!(9R-)n9&kBbzYzrV&;127Z5VeVFpCVI4nZ3u?SmH)>|!*n8_s8Byq_HBM-4`)>MN zQFmacPkJ3_PTc?Z71aTTXGQmihh6hOWf$tm%-pp0-< z`EnUlZK{H<{A>dWS<*5;^qQrRwEkic-PF-5u6TYa&EH(4p^ahqZGNiz{#~qnS|w>v z0svt7e>Tut<4mIFHIYBSU9-dS&`S>`^B=?t2e6TO$7rPi!5s%yjF(MwG~?sI#nF9? zclQm8%D#X`3`x-bQ{&?xGR{}R(D>y|LZ75&s+>hPDBU5;*+D@n2OGBAIHY*^={W`f7U1CagmxyCCh@tn`M!cNlc-Zg@zNie}3 z11B>bI(zcKcI?=48*XHh+>yg>(eRQ1=>>A=#CQ;LMKv*oZ? z%AZLElC#$=y_%nbMFaZrfBtQw4*})I4Gw@$c7qy~Si%Qp(kN`?EzZlpq>v4@9L%Ir z2ACEr|JkZBt+UnQ^s(~obTS#<0T}*_>E~hEqVN+}6;q)3r%djQGsL7sP9AEH00EO2PH7?c=Dmq!AJiup9Pzl?-m~WoEk<|BoqP15BpnQn z*#U8sxi5V2Z$JQswn7ai&PXyV{Jxx81UwPq2TRh=!BQ5z?8e_fqa#K+adKiB)Gh6` z3IC#jgGhwXNaoXAU;zVYnNy(M7MFgXZ-n_&c77w_4UwHG=KVb`roF2 z))na6ispU!^WGsb>!1lAxiewK?`Ww^{XN>SkHXG_u3yQrKi&RdBx3lfb-@KAQm=kI z-FSPY5|x70$TM);Y-{m7+V%_-HfJmFJgk$Ai+;8!Ai1Yya}jZ>EO4E|@~UedG@N7N zEL;syctCM)r9{_ql#%SSN{BN*Odz>@gh;gk2bEk4M-@@cl$h8#*p;$ZJSyU%lJUTOE zU+_jPy{uR(@#6P);QKq^aPn%N35ZdJ>=+N-PJ_)}&)b;GiC2z;KfvLgVo)GPbpbY} z*7nxteOc4j8-Ea)V6Cu;Sxuhvbcn`j4HR$E!scALvBFZ!dMX4<*H+^KzpbKzobnOr zJ$lv7DicPe5G9HfclxR~N$2&Bw2hTe2iKuTkKY`3LAvAbVi!|NbYek%0mp0{HuRYj zxmJzD=P{oBbSsue30^b58lLL@X5VLu+qX0FtV(CtQYQDPo=Wgo7ptiimqWUjwbaM4 zl@Yu6;JGerd5Wtj5daKd*SSrxnak=m`A92gl;iO5B`POU1gHrT|Bn}dn6C2NVNE(} zSRN6ebnY0h&$F@mvC5YAxb*pd*DT}0w?X#7vrk3$I6!>}Fg)Bzg!p^{>(tiHKR9`5 zpo`jD_mx=9=o*y(myA=w|6^WT%%0F?9D88*Y`fuicGTcB$d+X=afZa~RLIh}1Myy} z(>}dSAcwSr@L~WiAEVd8+%5_tm6|}$6RgrlW`>Aas5N_BSiexVg!4^=w{Z0oWCrt0 z(aOB00|-z%##(qoF4-=u3w}sSM&rpL!xnXRt84UnVysJ?-2V5Y7|-_K)U6;s2zWFa|%%!`P^YIG#Qt+rCCeV9x z>cZ!~_j!}YcrF_LD_c8TCegy@lNsm-XUh!8t$!Q2e-i+T>*)wb9y{a_Zh45iZv8@% zrC&xIDkhJ4>w~VG=#7NdU~;FZl1Kc0Vr#tC**V~08687;JMirG+S}JQ1>C-oV9_h; z3WO!r$7_(AZiM$qbYHqNGoaX1HEck)gHwH`ud$gszI43h_JOorJvi661c{+r@dupz zz6wfsI3=-4eNzEM9O;nEg?CZwhPnq1r44f@CG?sabF@C($RleSvr2>YWV6-P+mt@9 zlPxBz@_R%Jk0kCX(5X&#Ykk~J!pggJMu7D<(AVr-s~%*F7O8sPr!c5^XT}{t85oiF z(swCq3~<_N11ld!J6^W}!9;-YZVBFhyp+hDCo=(#>Vkz4r4OX$uCDgF8Dli%T@Ht? zg7aIND`Bc(B`xMOJ^BYFa}#2u5{hYUFr zYp1Z0*sj^8bws@6pd4aj|I~njLfxcuw2E8EgPi2iGO+rhotner_r-J)sfFBNw+wPh zn<)#Cm!Tt(y0?ogCZQ`>3ZcW0;j_dohEt(MD3Gkw_rvWVEhX-dB+AvW!X~K!73L5OncO|DB%jh=~~a>y`>JY z$RjsAus-RKDmtJ-ETt!$oJfnn8EgF|Egg8eIo0)>8Z!!EH)78igpZ1uZ6 zxF0=5=hQh9_O5|IuRjR+dT!IUdN1C5@sQI6%*Bl!(mNSs`0^hAjwDFOhd>Rgda5Mkv_?+m}Zc#hb*SXRN&J;(r!- zA*);>Sa^BpCA!iYo1La3Fc4$Di(9txLFY+zl@(r?%eB}?Npsx%RRRi%0I(h`h<3h3 z-B}?Gau{y()vlIz^ZPJa>!LylDk7nl{LE`@B(muIldfVHLf!n>8QfB8#r6`a zxPR%xY3_ZUX39WQ-fINe)T)BEq(T!MXD$ji^L`g5%&DJNUJnV_8(*HPfCU*EtHqR_ z6s4mbJHh?Noc?KdBRCw=t_ZzrEofSAK@6d+d}bu-W}Ks|u=y?{*ThP>HS`vSn+onkEcn1g)<8 z3`D%nHt?N>>aEDM(u+sT%Fk&6LM=;E_=b`iazP`p>Ko0m>wPo$MF){fBUjQyntBDT($=d87#rk( z0z0#bwO^%g7SyTPs8Qc|-rQ~6ID7sE7pr{Jd>A_<#SwV_t?a4{#`{Cz*g0(xYZ<@^ zRpVC(f<(!=sy5WHB!MO|?)Mp8xi>)MARf#>l0wpc-`_eTCW=c+FV$lLY%e5OFAadg zB-MT8@p96d*2&`|(!1f<3R6^{(OBC{NM{NR{do{fn`9hFD~WR0c^V&tFushFdI%VUm_k@F!XMPH>=Y!a0OaMgGB1@&gb?RtKz` zSPw)jAq|qF94kWN8PP2SgK(Ki#2DIZoswq(GRX5WhI(R@_pQp9DKk1?J=@-9s9LpY zZ(+ANz|T?Dv649d7#iS@^sM`;{~zwe@q0mFtc5zq1b1Rl3w@p9D}B{ z8rv-3H>h<4jyxG(0rlUd;Aj2nhEsK3onZ0vT!K(Nm$(zC1wbtLu6lXidrz0xu^*2z zqb4MZa^^l74hjU}(GB$UG$MNBNcW}Sdvu+9caZFshAO&Y>rz^f=`XfBUGOvf3q6Oh zS$MD)q;1lS_(_=jX?nr+lL( z?Ok{hemY0@pE`2ciO=xlQ|G{o0Yq(a;jnwsljWl_Vcjnd{RVZw%{RG_HC||+r@m>? zll$|Z;#Ba-KfQ=zwa%#(x~L<*s80^vP$b4^m@pC+7@*=Lga5g^aRmaif{V8xALQx2 z1JQFS9ykrp=^I8-eDO??cyP)NBF-8}FD(nz?mL%!gc}&#Ja0F%{`t;p?K@p01Ac8Q zAD{8x>BTq8(xgD&F0{xLb-T8EhRlvPOHRIUAs5nDpt~-qw{9{lF!h4Y7GLsSKC53; zBOwB{1*@4bmL;m~Sm94vn_90=un~VS%!)W&ziqCt-k=uik{Pl%DUdylHR6vI)g8ow z#b6Me9k#Y`uY7D&3~nRlwuCD{EWP+;oWkxh&~{}RU=p+XUcha!b2cOfTO&Cj7F)N! zgWO-S_b0vU29cL8sPj0Pqe&P)Habvj3?>3P;O4E-)6u+(;?nPcAgxR08r!r|9R53_ z*qyuGQ&N%8RhUps4S+ELK)x<WV z`O2ReVzN)b8N#cm0AR6?b2?8+EFSC8EXVncP8osxxWKBK6@;JFo~X3(s7N?R z2Ddja9NQtkbnr&m`WkRQ(cJk*VcGR0v*sZt+gw&SUm(J zHwPfLA6)VrlNdhp2YeugzMdyyVDWHyT#Q$Cxfo(@btJhWrJN%Cj^R_yi86VxV?pZ= zhcyl#4cSy@2f+^LywPf1@!P`b+Y7Z5mP&OqRR>>jKr9Hgem;~ZsUil?)s)JWBFM1b zhZ?(&8J-0@6C~pf0x3{s*XR2lB6R&!%?zXA5e=VxJm9pC; zU^8jwjHJBFZT~sC<0qFe0fDe^b9QHrm94=I_2i0Xx~?()ZsWKN>^w=)JW6)s;aGPf_amTbMvF+ix$M9QFb-<@HlV4vAJ?Ynb>bu;GUbIN&{Wd`Q5p z;p@I923=2EX$9#G5ppki+|)ukPI>Fg34CTnN_3w~1tM#sJj0zo^UM?!wWt?yHm*qM zi8UCKNZp(K2~2klUV4xAE76Pak^65K(Nt)9txbjxE_+auw_CfS+1xpyBG&sYDF9n; z$f+*vIP|&r)fxnBT$yvQS0qmp#*bY-68&v*sgSZZwUQzw82e7hG&Dbv0!R5H;p+j~ zSHMlCrTM{9=&De9FIU{Ct23)EPtJ)HYr>x+ zuh;uJF^)IT8!(*GjNTEX29${h4TL(2Y~@@m6-tBqh}8Z*w>kd#Yo2-jcL&3CZ>uJK z)i^kCW2f2^qG<}cuyu? z8#DL=tsBqf(JC$E+3_^uE=MrO6-L)+t+i2z>A$Gk+GIwSa#tyrRmaBN;$9oDe~5+&rf+2EkYIm3 zs{Fa{L(c0H&3mOVc!lG!?|nx!%*LN3esU12!8aAF+8+QeK`QZ=IB1HqzXg`2s|O=j z@(C`=p__7yU}$J2Qjdj&2!?!9i5H!Eks*c>S414lzACzW-yv>HJs!`ldnV+Xppo3l zKl2Zcxv(cheO&z(|EyoyBpT1os_^@Z2Z9PBuDRH3W#&U3e+bv2;NTbcGYRc1Gh9j5 zFJ6Kq{u7}@d2T%HS5_6a4)ucYCY;w+8gyIeIq@!^RWFq7=LyfebBMh>s3E1CIwt zPqy@ySFYXCJ_eiziBG9e&65|-MvKAkuYEz+>EBD4hl9Or30B0R_V{~lZXjxu$6#ke zM@xUYAyZD3RT}8O|CXLY@3;wLh#E`yz}#gr>hT{h0N_RP=4h}w!}QQxP-$#wXH*hz z$brO-h%t`sM->s;e9SjYk23)wRW&+O;_eCQ> zekZ%|LZVcv)7)(Pt5YIpxMe2=qDWLS?~R7_sr9JXHt^%21xV?Sbw7tGs>45FzyVzBE=aRaS*_9#z6ezN7 za^ftyK)wys4-bPgLUtR$raiwx&^*)7cPX`|x;A(N{+#T_Tt(GQ(@+>(7rYZ|cBDGn zl2=aFafhz8H^jgh#%2pMnhjY@wak+o|3=pNBR8dRe`x$)O`(a^5%&s9SM z5}DOSZc&S!Mpv{YeWN**;0NLaei^aiNV_C!kiYcy>7iqu^k&LfEV#3s6u8(wp?z zRVYSlUv?*58mtkxT?Osbbm#Z*r!tnX7U0Po_z-s1$m_j>o;o90|Llm?_7zNi)k&3! zeIVK}^eSwkU*2W!n?P+oyFR`Rk&>J4vB2;)``ERK-(-eE_c`~Bk<4%D!5`di9u$xb zLJd%^G(lN}YA(suLQ%tNzo>6yoVrODx#kn{7vk z9=TG#+pL6dp?wv&n$Gm1Gr{zaaSE=Iy`xM#=RRn=xg^6a9pXJuH<%!5eG;0L%x~#V z;_6)Yt0l$(<#%FR?gfb$5nr&qW3?vh^ykXwM~|y2ahdG&uKpnJU}tu2N(-P`mHqDH zPW^y{?A1PE|B+T^p{b_z)L_*|YyODX?e#Uk%|?DO>zayhPZPu%Zqpk^z|BBUVz~kq z1%1ShIi1>^+HfO*&Fcc!SqtRN)n11AzW1PFSNC0mTje#J-|fqhMQIw3_QvJ zwNVCT!?seAkF%#R;5I4H`H?r#BvW~z>E4aS4|>XiHRX0+P4@S1f*#@U{QKzaKbisp zCgVdu+ecjY*;<8vnp+PxyLpE%_F3Nq{6SAW8+@4-XaNL_9WtS7InGyr?17-L(SvW* zpb}x*-Hs*m*e?WVS`|7}4;X~Bib9j%SEJ~t^-sSXrfeDIWrBVd6m-y^b6+0UlKfcF zTpH*)<{4e(0u7~4w|$2H;^$dbbi+2jsTL7VXMeMxZcEORUxP8hwBRh}T`mv!bs?~_ zK&x`0_amCQ^+Wj^5a1@u77@IAId6%w6uep~3En;WNdjAg$DWERg)KWf}eI z(D!ORWpmUIJsh2J&8ypdQT-kQZogNakP<~{yn((9ZcBb*&ks(Vcz=?W>F&9!7o`6& z;WM|n@06f>zg8m5NJmFUTIyAYrMZEGaUheZ({OT%_FD_BM*#|-oz0Uh)!qw-pBcOR zxRH!T8jH%2r{tEdDJ~JKcTdWBTpf_>-JhY*T8U2hY972-Gg>0ZD%>BayXm|EV1)iQufP+H&$Lo!vdbVHual){q{IuB@e3?VcHnp>W13> z>HfWLxD@jcUO55>`RS{GBg{S&sHx;(jqn=GP*O1SOHZ=ArHnwoec-}x9cU%xvejR2 z!g){5vHImYSC#!BHPZ~%md^x{v_J3_DJ}LrnF!i(ZO1Iu$4%TC>=Tvll`u`(V;^A4 zlb_p3VT(RVV%7ReE|OOCjsZA5;E<#3LhPPUe4bug2~*W zSG1U0Ng9gU_B(jPpTl8l6|9p7T@d8a9AgmSjB8_X{Kf^N1%h9yT-D|}ouBI0Ut5WZ zoUME&nrtLJYiim#-RQ+m+Pp=xT`pJ9)ZCmLJY8H&ohE=rv4)8`tn(j8rxJ0- z)Cu?Nh$7rNZd&L{>F}9$&!seW1=vpS&U|x<=hWCr!ZDFu+^7Qhr+gHP@mD~H>A9u< zP6r$E6cQ@+b2ZJ1=+W_1w%nln$L&yZP#=3w*_Z8Ws^jh|B&i>$%1L7suODG<+rwJ zn-irY!}Ew&qxEts3nysd_^N3m)Pp1U4jqHZ4jgeEK^})5zT7+XEur zz8?TY#1;b9caV^Z!AwW36PJzC{6?HSXGqn;Wule8KfjBRRzyLU#S}CLGkBxpYz9$0 zYa|JNX-i+?I!$tbM^-sbac+nW*`G=@xa7BSMc=sbDRZcL`&l!tN1&Xx7)=n@Xg9%)a_&88b7l(z~tOp~wRS-dUn|GAE zpC<6-mA6pCNnQ9rO=H_QuJO6<5@t;VB@Wa17U%1F`)1_FaRW7J`6$kG{a+Z^csW-a!*saH&TlpJOzvsle`Jo%oOX1#y zB>mGRxYYd}i<}V@L5!r8c60Z)-`+wJhB!||6O(>I>z{5u>r7qHh?j@g5iK`^RqBkA z#5V7Y*18}8(oMqQ<84#>L`d~)rKTO>=02&?vq#I;2E2g9FZk9)|H)<}|HA?CEyOb3 z{+jMD=ozmomiP<8)dIRol)l2b63C38e9Aa^H}>5zUb8(aJK1ztblAt@S;I+)HVJA+F%Ik8Ut@ zm{Z8e9Iyji@f^#iiIKlB=-gT%%V~E_?%W1ICWc#4>RrN=q;75;2U>d?;>{~ zGtDG#$4*aXrRzr}F{7y)jtx>wG<)&J?txdoZnU8DJkWC}-6ZXo^nDQUh4cq{TKAPM#ga(B`Vu@KK$tIEJj^G~s)Rf=sZ%t?lRjOg|ml%>r??bDiwg zG3-nI(JB)&A1jKdL#6#T*oMz03_|_)^QMm*t53S5N#oNTVA^~$=HPNCxFh&6z^V998wZ1WjbHmM^u7yIrV#JRO zoljn#bIHRxVc`=3TuBKgtB;*<%$XQv8Oj)cDk`!rfsdK&4o20G{p}U>*ggggB`Uxm z-#QUT-_F&1=$?rGQ5Nvq$;BPNH_TCB!nu(?UWrjDegQa@owKMz+n0cG=@uh6Fq~(> zfjy%N_c1&KSGhXT@Y{jC%ekbClY25wA?QlTbJUOFnO0xY6^Wnj9L+RUQ`Y%&Vntu`3U*s+a88Tc0m9yIW(2P!zNZ6+M6a4?R$)-;PM!O9xd z7HmD+C3&ix2H2G7b7D9Df|TV3>kj&~E>X%I@d4ufwee3%Jln*CzCJ+Nd^~Ked&$c( zXz4R!_G3HiK2{aPvv=xmd&OD{srSLxA6Ifo)VpiN4R&7F-{4n`p>E9XEt||1+d(vf z<6f{hw0|67`RmEngpejH#E&Xh*>|h=Fc6&qFl>m~CEnwpP9*klR1{<=$_yw{K00bI zFi@H|9lCd?m`+fi((8Wod|Xq@OZ_#*c8pDCi*`2mw63f8^)HsPn>|0BHxfa~mMsD1 z*h=yjk9!uv?LT^Jtt=1{uw`Gwc@T}bMT&qbxB5J6cD}o9ZkGVwK%=30K(R&Hn>(~q z4LIbNbWV6cX=%;O7Y)rWV?slhNc~Vm92nitltH(N%wVBYw}_YA5tyK`*t6u2*+Pt& z*xw(rvgzsnV1u-3Wh*nj`u*p5jqcxC$Z^>ow>;MNF^ztk!$>fICQ9seT<6A4YQ8&)b3x+*)lG6=@PK90s+BqA!+qxs4% zSEZhzLw{l|8DDLButN0hcnN|KR!t^>|G+Jf<->`^2cMdtCA;gTRh0rRJ(ptbcknId zY0sw%N%Lsmjw^gD&ij^_7b0!z`81h<+qmCmC9o-FRwITfadAXVNYdojV|ZRrDV^;X zqAA&(w}?}13SKSSQML6t0zA@@gBM4+^A^=1muFf64}KqP?zlAHnr;?Nz|MLN$_Z1S zBXK)f=>CCAf=~0OLk$-f%Br?{5<>b%Sc$q;!aP``1@i+wbg@-MQfgGOS*2#Y<3v@j z7#9ZR>o+au_8?fL;btawYi!^jh~+tpARj^x#sODWGG8CcTsnG?!e;u=aSJx_TI`LP zmmlyed18J<14*gO5nL)+WTHHvZm)rT;pzW1Wh5cRJ`4&?v>HV>ggZrIdCQNu> zb3YnrR74lpGF5&it*cDLGjG36ky4b4w=E_%C>X;vY43o5bwSHR2mj$(?Yt3GcLdW z__jyujtLGcTSAoRh2>}eSAnbqEs&6Bv{ z*z+Zk5Kd=!YeWx$a@x^E;qV#5WICw@gnAzaJG8;$GB^EO;Bj9Q_*YBK2$+oM$KN0M zGYx;|<>&Pvf}qqBi+;K@dJFnb(#<_32Gu~c*WURFHUEl9_md~8?GuL}vZMCzk zJgguP=&btF$NC`9Nfi)?Ir`K|;1ko)=~fWv97z4~14I9mwW$*+@kY~|Tg|W6L~e<) z9xIu$8hdY>Sps{`;#*P(%Y4_CY3m0Z#U-$!)GNZQ5vSTC8ob+{ZN(BD6JsrDZk;@@8; zcZ0c;fcg94Dpd`24#UU;GbXfC%&*}i29LPW4^SbWg9aMRJ-j9Iw3_!*-nQD#f+8DO1VsFxDZ^ z2r@$M)pKvG$Fl!sQ@t%78GnW+XV+n2#Kb0&c0}#?{@_g(J(Ou{f7zy0C_R`x3NyjF99+w#g%vfnfa6#7;J@a$h7 z)UIv>f};d4Qn6b?@z+kB?e2%r`N-4s=a$}EcF0S{UpNG5d+p7d?iaD%u~GBikH}Gr z@fI=!g9D;~=a`;^_t>{`Xy9724qsr89)L#9#sSDd<<0gsxHO)BXCsi+g%zEtCUG z6Ttv9j=BeAL0!kmKd(MI{^!Z(YcY^^CKdsn{^m{F;V_OdG`7|u^*q)OD?|99CKz%d zoIl`M5M@pcxEqdN%m1~~eMW3Lco|~XQT3&{*KmeBvN>0_ACFa)<0h~278ciO+=Xfs z29c&qJ2XU;UR^=vGQJVIyCOLM?Gf7t0?)mdj>4H7 zZS;j%jZ3fGDiMINNhh;M|r!Uc9uAa^>>WTJ;JWoutN?^8%PJd62&QS zIPsFCugkc{OfcDsFKFeXN2^{(d!hssfOvWQ7SEXg0j+c#R1~YPu?eE>b0e8^hI*Hx z`4w6}Y2G+Zg&SWtuAQbEk3em1XeaNZ9ojd6-{x z1w5T=r`lE@1A?I*acFEBQEq8es`r$UZ)CAXMC zAVQ+(H()hR&aIX<3#b0nYrPg?UQ?;zI8TwNjgp=GDwUI`j1Ye}p@FU3TlX>s#A(rt zi6NakSodb5eVUp57v!!?Rg5rs>*9w}N=RH(s?TVWQur<)9um*Lf4?N-VtPj4p48hj zmoGp=4kgU1T+X{aYK(IoMXl8Z>?$s{I!@;4F{bq! zV`Xof*aRYW6&wBHplBJ@e#j1mPCKf!c4#-kSaOfVu~lfh$JQUk^V*IW8H;TTYe>uj z#^VF8d(+Ld;HBD!f%%m&~^%or0Fq5zf(em@(5?xW_A_zJly10^hVpMD(Nu<7bxC>l-sh)_^^q$J> z<|uP^PJ=IvKg6*S%0jA8Pc)lLx=U&b28>PVa9osW{f@aFKc2j^CaDu6TIXVXK=x+) z4N$i<#vVKB1|M#9ltbG;@LR0MxgAK_#KlDEb%aRckdbBGiyK}#$LsW7H|gK@?ZI=1_fNjZG@7MI@XD^Y`Si> z_2D{J%?CLmqpG;IFcj8~G!jJg$w`*f?EY{ZFINSIA7L1~?`K}NzB^yG;}+QJBRk3A zbF(;a%!k}KA5mEHzRq*BmVUeVM;;#I^;Z~o0!^;?nj9e!$69=lm?Yk`Vlz=!D5CnP z_X%$iw{+R}W3HMGsh@WizyFT((l03YU6#iER1^H*hIQiyfmC|`p6n%AH_P4olyCm) zd$O6zy99)@3!Fp@!}@#R5crlxaa*Uf;)RFX!o?)zsUz z`N;SWN#-wV?M_E&&NS!aM|Ku!Xh~owZ66Cni@Lv})}AXRjkI=nq~Jw9kKHnfAPPp0 z*C|fJYHT_5jfO+qaGdw|qv0UwAb*asmCVS;TA~#_=&*JKb;{460k!pnw-qd|e6fD5 z!C>yu6cZ@4;Mbi;8Tr1U;&hawhTy4}Rjb@FVyG#2;TWucW6)N%D(PU= zL#P!HYbadP!ej&~I|Hw;EXcm6nyJ$f&7XpiYhpI)sru$}UeSIc@5MI#?DJR`f}?o<5iu4fuzW8Z%-y|j&|u$0T^MQW9T zNkcKGmtpIh>giyiH2A?dPw54-7yFAE%_v{a-yEsP?U$fDjSV8IiwTrSnMnuFM0#%AH17nxFsEZ6!g{d*z$|ew;~n zw8etX>5eFj4S%skRnj~{D@jV2KdEu}LZn(Xgs4w?OFv>)G+YIJdi|G@-<14MGITlB z_mCc5LbNjfsK+mB?dQX=@50uQ=9#uZ@?o&5vT7UIbA_W6L0$LLYqj+1y<8=+oYJOD zTP=lEpSTRj!3TyFcrG7E8SG$)Xt?P1Ye=n&q?*31`CRi!m|Usq)%; zM>{=|eruIDl3r_0vI~cW_jpm41a+-SjYDsIp9k2uh-*t}^}b9uQgM2%?>;i1!?V-B zUe%nag?=-E04OW5@P40(zPc*>`t#0`g}bU&am|lyyN)}6H_&U<0GH_cKBM}cesUhy zek9Wdi{jV*rMkI#3DSG$Z$RP@Qiikc=0kdFonVQIC?Vp49qD}#Ex5Uxr6 zBD?N*KxBs@zt$tmz3H-^Ml=}Cg^9H*~{Cdsk`f1}AUGqxkEG#3iGEbn3}b=*ne+tP{57Ke0l%*5@w z%p9|deFlsP`Fl-gf-UNeSU85t?IO#ePd;4IgBRulVD{@k%~G$+?8?J5lLoiiL1Ak}zmkpbWIeG_Fco8d-Fe=Ie&Cnk0WSF#1ZdNq4gj)4 z@p-^y9SrU?4u9I3MfjbNuAY`p#T9uSeCGEf9= z9vILJxQ7C}?s90;3gk*Vu=m50^O54lD_3^eA&0jC6S|&PV&Pt&HBb{JV+jES!RgW8 zBX)9`0^U+MsOflIvR%BHZH1Psm=r0;!Yz_O*{Ij^(EJNj-Zzm7pr}NdUn{e>fUyY? zRmhooefkMt+JI3GOyo9bECLan@it-+JXBnaM{gCT1F(g;^7cUF@=n^=MwBO_^6aRV z?2NhZWUAlPMXXDeT}FipnoRy9Ry*oi5`dH@`pz)MV5A}Qgx-Xo5tVZ5aKpBlEz`2P zBrukKk6dP4v8K*HZ)Uy==CzGi?gnNL69Kr!a@QzjxH0vF7@m53*t??8b~4?pPQbkGjn=A z+dw<=n!Z22jIPYM{x4T#IK)@cZ@r?j4#a5J#p>q^C{;a7OZ;5UHjaUXm0HFLCD?WV zsoT^sL25ripSLS)-%@pzlLL28i~ZerE# z1E-0p@=~h%^d$v*7e3#W2gntPG6NmutEdUz@bYx=;%E2g^PsptV&Uycup)sdUfGD5 zV5;bJ!15IOEH%@2YEgXf9I|CVM|q1f=9#>HI^@~Je8Gy0Nt~J6xSefsaUGx%cU>9S z86-WB5AFB?HArM&6it>_xg)$sRC2m)PkHwpel>m%M~=9MofmbKIb#$L{1r)**pUdq z!cvs8OLedDpsr}eu6`NSt-iGqU2)B=SH4iN5islKlBZcfp**+iqV#=s?>}#TXz^m? zmkgpK#ojRh_9Nf<-#XgT{Z_d4*4tN0q8Sk=L)L$37tfgOPOpZA?g+9yil+_9ZKLac zKHF(1$D=ncp{?NryGOs-fi-z!M3Ny?!{NJ)O{=8jtQ~V0U|H@W7%_=1vy*0)q&7sF zV7_WxJda8)E!`1KLd$Vf&v>?QIK)W3#FIC(n+3VU`8}TxBRL>wGW_q*{rLeSKK=Su z|JhTlI+AzVN7z*-j!hL(+CMH4k}RXgi^qu*FtQu9JEIH{e=W@KF?JP6>~H6Fy;Sv) z#+Ti{_oG6GV$BTTHWff|zdjJY08Z+YP~)f?&*AL=iz{AKBF*IXJ?fOPaK9|BOny1( zeI#ABXKYotSGJC=ij391FP4TN431@X+lR5wiEYE&Co0Ft4)JF8!cuOi@rYD4bb%3I zKhUg6Nl&rSRv!4Ut+5ue2{n|m)SH}O{HcMo?S&k<(Yur^PB6f=R{++Vy4FVLV+N^2 z+h4ZH=sGXUP0d&gF>bzugX zshTnbHcM;O7#Vj`)on?~Z8(pJ1Ckcdv2UgGg>x-nnx83tZxHg~eE{Gay-^*nPv1EQ zE~yEMdIW0LoLT+-&B?Z}58i0f6=u7C-x|_^w8cO}K9JVAKLAiBAFxlY$6T?-hk^AG zw+HV7Vqi`=oOowK{@^@bOK7+n3i@>nnJ67U7b6VZFL3;iltunYzx|g?zcIG=KdVUf zPYr{CqJZPif0W@LWdPg}7haD1D;EIzKPkum$Ciws9D1il3vk9gU#TLr=B>7lWO0y6i{#3*^O-cHZPPa& z;Jas4OQ#n{9)a=`zj{wx2NI_-O|_N@81GGnSbL|;P(i}E_!XWR*3P7 z9hk$f5DA#U-Bd=R1UUZF?)u+x5&mP7|9|%~p}-1Uk^RRqssQWo-^KcWKq!VQ0G7#f z^Nat}fBeUzgZ?{R=f8rAFa+ZtKk?5_{eJ{Bb+#v#L2*MsZvTbN*_abtj=ZP+2po(; zCJ6NONi^SOL6aWN;7gLXSPz62Rn93ve5%5(KG5QN;*WPpR0_byMfL@pf}bnInge@jt&t3O8%QibCB^_0ZVRYsWJgy@TiGq$`6l-<|ExNRa@V&r9j^d#^tm00h`7rgS9z_;Ux>c3s- z+3l;J&0O&tylK#&Y~Pc3|6mLU1q$9z$X0%AJS9NF7@|y>ZMk&cQTGhR^Z70jaz*)Q zZ3j)2_cgsOf2UFxD0P?YqB_&L(sE>fC?9TS`4hf4;JPD9R}1HCI%fZR1MM7mfrK>U z+bs)?MS&=NbP&jKnj-d$vUZYSN&d`+E&oq6gp$hvC7X<}ypSFw%BW~vl36RfMBCep zpz~WF>?CLJKLjcYnW~Xo$o(G$;8G4)Ng2GY8A#|xsBb~5l}P!!hy*JSBRp|ZQ%n)! zSaXtH-~v5(rx=|cw!1^+2G|WidRP2J1)~K0gI}Tj;pr;zUQVt8e@)ChkPd3y9S!-O zAOYW9aYj7bvG2`v#qKkEN_10LjiPI6lXUt@gS8&#DjmxS>lX>WJN0Tvv@1IBD2_YR zuAA#Y%SW1X;1)6gm#HZxJ|&eG?R{}=mYMxslrVCBy+NNyv9i^^kgd(*l5g4jqWmj(Ff>TzhZPyc zuT4m+o5ogNQ^Ll<&o&5Pv8c17HnNVU$_JF#n)w3Qd|&-W{%D7^`?MlZKD9Xv2zNvB zYvhDyw7hNONyWqvG`!wXH=2~5*HI4ZfMm$KU&#;&*!O2^d$Kej$sIC{5O=&UfLMFa zNG>9U{0jmfU02unUEtL~Mj7pil}2oeXKGE}F30wwi8X&J279{??`0h|ulC99kF~(> ze+>dN0ak9nnC(kSFh831P7Dyk1%`iLjK|WQ_?CUT}flkvN z{Rnb`+a}XpWF?{0^6;s3;L+aKxu=+eT`zJ@vb)hbTgS?v%%0am?;2=!vqfH#@_#jOcNZV{0RQ&!gn0o9jUKIxn%ELbv5erZ+L}`n zRIBEvU2sSV&>oKCwhpSDZ|}B8-W&%RmW2GJtN60>&#x~M^_E%H;XkCTu<1bgEDwx7 z*>hfvpSRw7rm(W@7ARH(-u%7A;cSP24usdLdV@dMItqws>^Tsi|6N?hNw#O-Q>n&Hs>Si09*Rzyfb`CIV z?0PeO%GK^tu+cld6CPC1EWHTT)rAy%S%@x!h9|mD2Nd!_OYV9le_Uq$xhFeqS-J&% z9n!c(91Cn_#>MlN`b1y)PR9Vh)xRWGt>Ly9XI!*>lofKxz_(%VI8?j%6>Dj87G;or?S4vw1pwycGq^7`88OKO%^9B`c7@jWc6`= z@|Ij+B>tUl79S7T&d+5Ioso7MzTLO#WgG_`weU+F187jMgOFZ0f@JWsKT-Y9*wtwV ztEGB^Xf_Vi&$qv9IE{qKng?pV1-l3#z7Q8D1=ek8fQ^6-P8!mHU%SEo*4W#nE+3#f z{LJDY0h|_YX%D=e$#D=p7w|70>qZGC@S)8A9i2yV+w$suM*#O@t)g#-o@JBe-H)}h zff9Fn*fKo}EqcsvGQ+}hfNTj~z87yCkrqV2OB4rfsnTn)Qfxo`o#ka4FD%Iq6<=$J_h^sf_K?`|fT7FFIn7ofRpW7r`uM0M0xt8vYCNk}Q(X~@z!%Ya#W<8f^QimNkITGNUU1L}}G#59& zf^S|T_>SIsaYW)i!?Y}{SI@jx6F?|NJe6J4R>Bj@w!6Tp^(VOBJ&EFpv({M-WzcP$ zjMPe}9k>rH@k~)6&HKjV>y{v%PmIdy-l&zrG<`N}Wu`f#M|P&6Y|J)tlrkq}FHmi~ zGuKw7P-=Ftj~GR>V#ld=1|R!6X3SqjL{&U*14JuPNb&dVFUO%nh(w`Oo`FBdj-5_)O7%3~Qo@$j zZli_W9G|%`s8FjVO%3Rq{RUKblPZVhBRjUq)GMiaJ7gS9UiC21w64s9@Kfklu~Rjh zmk0FygObV9X@6YrZJ{aM+8tCfD}Q|5Xi_1-Ea1eFsX)Pi8N^ekDPCW`SrD~zkiw63 ztr#&h@$Zu*HViJONJ4w1jbpC4)$NZuyC*A2E9rnkPL5}=kZ<>bzh;yj`{Rps?NQ`V znA3LT(1PI344oz$ap)&PbvN?C)rsIk*K{CM#kXwy#&BN6mrsMJ>($7`*q#2FoZZnJ zpH<4xkJGCF!1j}pjc{QeD<{r$?qsJX$ zGSO%EcaJa4UVVg1c5iy`!D(ZF-CczZPyu=aa97itU6P z(t)f@Y@*pRD_*^ciTPyvw-+rMn1QRDUSVYr+NEN1)H@VV9|UcVRVV!)`reMSX|im0aS#?!Dym+!xN1!&?Ht|MW(;NHHE<95ttn@tyFS4q7= z{b+pb!@z@aua$45A{*c{qE>1{hc8GGuvggk8(?o!#|$(CW2n^x`MC*TOAGgA19?iI zN}JDqf=#e+?|HQ4i>)@U;!)HhzU~0sU21&%kZH@O&GLmyTYp=zc~ud`r`KlUq>^el z!Ob-(Sj%r3;hs^(;OV$j?8V!4{Ia|B4!JTjj4SIp>lWprPCLNxyYGy{JEVc@=cS9i zl>n!y5uW|%(RBt+V0q>{RcA5oQQENCLl+}4{5J!-=ve{Q#{}={$tX|qdFsa87D4n@ zPx`9m?{bg0*1Ou~@>h$y8tA5~4+6v$j&K1F?{SYK$Wim@SzdauB!h{HK2a&+1OsRx zWRdkkWobMMv6;3`v`cq<$~|x8OY>Sot@eev$1Bo*L;}n#(d%8V5Q#EIeZ0;ErJiwA zlO8gM)NpssR-YP(NH$trYs75m@oOz7X6+(EzV;A4ag2f}QzIB_n~5jiMDX&vhmv$M znYNn(&TavxhtS#>=DW)}Qs^o8LLCw1wN`_uMjJmJc~No~vBauAxax!Hm5n5rJLli* zKKbV@tq3*F&=lmAL8n1vSF~n$cJBJQSb)KC9$Y#tR{%arF&z(q?Tr{mS-97UMQEfi zlN2_h0cvjT=4iL@xojA|o!3pbm__L1Ssp$B3FfWUs0q{v#hco0p&{&iQnyPQ2ovSl z`+jR<8Q$Ly?`i5BQPYEqg;G7?PQk`;Qi2*}Ee3P;&Nmh8?fI-2WwFB}g{97xth{(p zi`Ez6e5PAI>Bhcmu{uf@S@y;t<>DJLHQx!U`KblJIsx`pTLD&n=7R5(d<=dGUj5 z!3X=x@0FKw^E9ESgU{mg!;7o2WgIRA7a^bOH=1O9$DA-@&trRWaVBN9kp^&$f& zGN{uJWi8Q(0Pn62T`Gi#=~tvqj`>nkSw)wh>AcBi)~KHL4gZ0av2!2}s)FPff9;O~@Ip;hqH8uMCkwylM$PTgSu|5t`I?M3Dh{aE}AKEJp-?a(%Yv9u|U(d5SO z?qwtH3f(yY5Ufm)7&OM*3V-rxgd+Q7phKKaXg05r>Mbe!Z-0sRFH-mRWh^YOM?W|z(6s-|Ip}1uhS3MJ)yOvmKb&ByP*LiCyDQ~2A`$pL7 z%6nIfSJtKq9jZ`8cb5MO7kK}MUEyBADnQs2FK)k&+nr%w)&|=K@_CzPY)aJbu419Y zBh7Rez+o%$Tmu&TqUvX=Vw}3gm)w|ofE(K#tz{ADTD8cfXC)Z4`NGn3JkBUu-76JG z_kE`F$o|Bs;Vkb#<-JNt!j0f(YrB$tBCaMtQQK$d55gmMi1|7%&qame`PDC*$9tS| z)6KGg_nJD$Y)So`rF43bQiQ2{YE@w)i{mGf*wjnh+0#*oIb=evziS3*9rr~@Ab)%P zEi95>SH4#E^yGl!P>vDkuGdpp3Eyeg82R^t7qbNq{Q!~)BZkZ@Nd!MDKzW57d^VoU z7B%S}fAwbXSm>9QDe|< zR%l#SA9QKjKgM&9={R99jN9r0gZDEW?#qOMe|-Vl_xQzsxG$K+#{Tpg*wdaIN1nW>7jo&)doKnx(BD)dYF>t{#1;rT-q@ z8bYVe$eCV&|9B@~W#|JnH+HYYd_*?L>Uq%cIpnwd26gy;Bv|IuE9rZYxO*Fjzw< zf~`*%qhA0BZ7cfvs-A(hZ2}fYG-hN0f`(q}cK3+Op4ulis19bzvp}K$z?rgne{Lbo zt|Qf#@Y4t7Bj3}L!gQ=kO7mHOggQ&00Gu+YXIOWoq=IBV2wGHJE_a? z?J^c?44C+4rFQuPcEs7gw|-?ym7Xx;(@5Q-mWwT2Ups} zT7D`7Bx90SyZguT%3!S9ew0jYi7HJjI^3zk;A$>vi}5~0zg#)sb&GCc zlecbQ*Q7vTvicO{Ts&{o4Tb1dDk!W9iRe>CZ)f8n9s;KM}tEU+99>zi_-VC09N%5s4p7!J;QOgd! z2aAoU9TzDqGEAa3SZ^T$Nc-HZHrzvILd$eqim&BzT@7p00Wi~SaKJjP(PGqLbI33T8H>lx{WwTkfoi_H|kvLeeP7X&JV8l*MB~m zV08S*|8`}GH8$z|6055BRD&k|>U)l2P#$l$wr{i{K+o*5o*8;`R&|LH2P&F6TEg?n zsU-@4Z2?%x?MUuan~AsOlRok%5+1xc3Gl1L&Q*OBI4PIcK{IGbbDI$Ke!7Qx{tRqh zQg=AdXx*TZCm4}FkWEy@6jzHk$lr3kDbug$rL%25$a%$!YwSmXh*z(iLx#tU@$oM| znMW6ZP7K}<$kylE%PAFo@7klLw!?k{jE2t|gxF-V!ZLM{POC2O)*L!f=bpaJ@*Wu( zBJY(gBSyefqj|3j7o-HuZy{UmMQU99)aB-QgWH>FAHP{gnog zt93FwobsI!Ph~rOv554Cv2`57XtK|!*-;hS-K_ru9lVKRJ4oF%$V#zrtIrz6fW5+m zwTQJ3R|qjM&j?~IMj5(sv)l9xYG&zZykabj;rmS;L}~| znAEO$wQ|*j-uVy5yyAaDM+|9-%=fkesVk08ZuR?h50_y#Y(gX#8@{gie({n@z3vPx zsa+D0a$BgLiQ^w4{)p5hhZK}AZ`8MKcZ>3Vr+eg{A&j-0xOE0^-xiH^=T^;D;tllj zzKi%*E&yns8}|UX{jY|HeX%Y^NgtkR)#XnkstbgSE@uDsG(y2>ynJ;j%uPN!*K8;w z?IP7@vgV|{~Iego`o}Z>q$shF2%0uZ80M6#5!E=R3fX3dq zxzB;GGhet%{6%2zvdr)t@+#4NY_59v{SA8@O8JZR`IDgp&BCjZmfhO-H^y#XQ~l#& zjCix_5`)((9an-~EFmgv42VW(lx5@j3}VCz9%FW97&oxoqhB->34pC!VrdrE+ zQ>=gHoM7(q%PL^I;sjgM6mKr*lE9N^^RBaD3^^(+3jomnAIUTg z)YK_^0X>l7(C}1WQR+)zA3uE|>99O+PcSAoQm3hQ9SpK9N1XBV?B}|DKxEA+ZC9dO ziyoMkGRy`jnigFy6z<>C7?N&PYb5s0li^p2Duc|(rN0j!c9NJ#CTsM%J=37h& zc+#I(F&l3IBu&n-5p?B2#hn+aT1h>|6E+ojGr?dw^T9AG^tSE3U4pQ}t@ZG9L>+Jr$yCX2n1gHUc@PyLW+H zqlnVYGv9k&bPi;MwI3bs^p7NgIeue(6pr|}SxcDYa zomsaTNNE`Q_6X88!<~CMBQ&t8TEW&&&M%@UY0m*GDo*vumDGz=RQ%RD-zLzM_bigp zFQU2ZHr&n*;ZP_-G>MdSGg<)g8E*@+NAB{v*E|3jTu}MSh9Fz*EAhs9gUqZnyP-qM z8F<}c!okqB5I|WrYP)q_qwfu0>*C)qirf9HS)0tG%KXr%3H-|7x+_l4M8_w`%ToXF zcKNW}IM9{D$+R#F6xZ~;oAIf>`P3Sv%I87(A8H>i=8Rar0DN!yJWw)9N#gsKhLYU} z+Ou%cShplMumLE~{3FbFV)}05NL6VwEoZX|ZX3yMTK17+T)BK@*?GL&ZrE_J;(G)w zNLe~djXQAGwkhAGcOU2h^qBvtl$GKwz^f|<09W0l+s}0HIT~2hj+)QNB75`D{J9Nd z&e#-yi4TOxbQ-xiP9V|P@T1Tpi>iYCKVY`vjfc*vhhr6+luE*N{+BG@d+aEfMfT;A zzdIoAndD7YCV?#hN^V?J8fpY+ihU{k2cv1q!|(SUyHDOSoyY{M^DKh?Dge~Ie6MoM zw{tHehb-;vrIb2Z6h#Or87ML<-srP@}Xw`?EFw%tO zJ3DDqRdJMQu2&Hs-|&5K!B*Th%G_4#H$7W05vyAKVEqS}G$6vWH||vXDgg>L;cwt5;j;V?WO2rf`s-rJREm@AnqfmJREGWe z!SO2tDh4yXtISj8%5LB9_J4V>p&q3k>zsa=l9rnW7lBP3`+~906-phRv?CwN7_;zy zbLaauGtKn92ftpuGhv6mcXNbwZ)K{`BqiXWa|P=+ShUCeq3J%z(PA1=8t|x-*KVTH zX;7di;c}?r!5DPV(#e0H7)%dOS}j<=2a)`&)cZzZzVoUyg!~6Cx-aPj%la2C(*YGL zdCZ2LdN(pQT23HcN?68}UO&heqXoYP19;9dbi?Jg1Zx4cvr007M-q=%I#3qwoS>ct zPy3exp2%U=-jDFY^uWfg81NMiT;6=H|ka=|w>swaXQwqQey( z%fajGe$zke^5I)I6I7Mb0%>7MFxu{}WLbOCYVZc8dd4kz%r)V6CP`kVQ&PGc%u;8u zNm+fgL^^zPZ*34-2Q#l|duUPKg)!+fC(jBBMlZovG8+1=_IL{)d!@(_iY|Ffj5{F!qLgp!SkS&Qn02)KRxHEV@qMXS?c=>F-9lB9iA42cV|m{c zFvyX&37v01nt-o{r69so4|d;^o{!tb_n9ZSy~?(bNN>#ec%4k@G>0L;Nvjdy(&*7m z)w%A^!Uo6epBy{q_;p{B`A-F*NqwbMwVmD7>W6y~j>S!ReluR~K6ej~ogT)(=ijg^ zzw?ld={K)$ClsnGp}(PV+Lw$?y5Dz;U*?}VSRw$sEx!Dv^3b!py@t2_WUs6whBb;Y z;Rv9`rg5nbqIBe4v{|*t9E!?vpHYQP3)F0KFSq)QS_wI($pJtJep+hTEMVEnuY){F z)gE5W@sM>Wws0txW_DDv4^?6I>E)~0?*f+|@5Q`8joZE<7AI8suK8fp8rx^&ufkR) z35CVxCV$2qgb2V}XV*5byG}Cr{y*45Uwacri^Y0NHX8dc#?d1e4~q47 zaN`c?kxN}l4^oa@0ZqhPpB6Xt>g^_Rn!7amG^bW=Y)hCtX|zsKtd(z7>?oL_JOLG} zfsUR1Jngb<`5@Jw-1wloh`QboE5<09N&DxiCG~#9)vp%w)+!&YWQ{q@FyjgeceHnN zFoRkcD}Eb`;9AgEJ~`2E==QqtGoqMySeV>WV%EX3)5q(?5=v~TpP!xFwEm7zr8C7jTLmaY~(bL zQ4pF=Rr0UWAzA|g?8o}j&2^vAXfTW~O_L~|+dwk6BJvXJsA>KSgZO@AA^=x$4hrkK zX9?IhX-a{HGa}RbmZ5=qeayg?_Y$i{Gjqu}nT0T?%v; zmGw=)q-(`EU#p!F;E_Y;81mdT?;g%4wtu(sEoIa0{`eMU{c3t#qF>PpNC0WN6>kn{ z$-a-(zC68{ohC*dm z+I{7MY6~qo5WVb8xf;jgMH4@4l(SD)nn(h;GADaJOoD!oXydjivIoC0ynTj8Q7T%& z{%I`lFuu!C#L%-u!L8y*d&KuN_RQG47ki_($c?=OWm;?O^^O?XX<#}Gv)f3TRH8aN zv8J|L2O?Y!Th2m(+UR>75xV-Lr$UpoRl?H4l61EwCx(%Yh27E#mOJTE5A~gkRoq`N z*m@HMso6}(L?(3Dtj9C%9yIdU6B_2x#=FpKFVWgO>s`m zJ5B!5yZ-Y(g>YLMlz5q8&!*Ab^)jp&lM3{Xet_G;{lm_y5(kG~g?lOn!G-}`i;B4L z)O*)%DQ&%6tH211IJD#sm0Z}>Sp>QQcr)j4slw`_k_BvS$YUuU&`FMG;Qd`%O4aE zCgizLl{Q-hcdxnZ#*zhtxf4BNY;_Y(TDwf7FCKLzW6nbSlzafgW_&s>MKDxy^~ikUv#6h?4Ht9_SraYsXT9O~QEK(;_r4u~`h}N1g$o2{9}He#*)XBX11T}K zLh#{Jg4N9D1nVR|kd$^7EG#2Vc7m6lO}h1Hf-+4EeI)W%*WeZaj!PTV(?w|jLhS&a zYG97BCj;$doa;sw#hm&fdk@t3E(C5=*(_+d8Uj73%TJX$3=)q4D~Zna8?E#HK8Ia( z)kTz$H>zG`rJ1{z!g3BG*tqxgMNQ1Bz^F* zREzh#-(&!$neG>pb~@P2AWJi$Pr{S(ZOrz&??qhBIG#1*?jKQm|anKF9xv`9q(ec{ivlbWT)8*GF zMNBhD;At0clC5AP;4sk{Grv@j{TWG>ubI-?&BZ8!tS#AUr$iUky0X*%K8)M?_C&>5 zY6wJIes0Xsm1Uzj2Bi;LH-rtdGM4F-D95xgO+V!h-`0}(Ah`xU4k2*2rHLyZLu-N#kV z4Vp&_c)mOgikUhVO3IgZ4)gBXP63`3Qg!Y|SW!snD8O(#nsL> z?lcqEJwVrxqYqoOU4q8a+*ngyO%4v4pWLWHxL~6#?1IfFY-&jaaE?M^15%&5ZAeA< zmhcYL9lx@vlMnIc*&Tk0uUy>fV2g^?Q5545R{GG-Cw*;{J`MjX#HI2DodK*KXQg_g zx3t)Vn7<+%qs(9YwK0Y3l1MOQagxz@MtY2JCXDiZo0zT~F`u)!`ZUXiB|ZLF{A!2w z<<+7_W6*%SKK5rZi_7Jx__wjS>2p!ji8Fr0^bUaY!g1K4Z)0_@-CFtN8sh z8)UzgFyQmN{X*z>2=d$fhat6AhNX!@?b|1}YGG`K{=AqL&Q}vMsjx+I2D2!Or$(#K zr1MwL$e0sylihi$XXM3Xu)9J`pkgC%c4_k4%os%<)5sZ@+upBo;4d)*5AY2eVKOlUzzIko_G_D5vmSWwK@EG*tS+PN` zw%O_u!2T%m5ylJpwT#{0qCk1lNV(H8G3&sKn+k( z>xd4(+*I&cyA<_#r++fvV0uO}_uW&NzWW+{k5KiB&u3w7tDa>e3ISAjHw4n~tefr| zP1oP1zH+%!=D(wT;G0(OLw!5?iAp@Fg7-{gvdPCe*uzFyA+$ku+;qKL>GbiZq8A7s z&ArbGc$+>u+@lb#zMovqHJ|G)*!Jk3Mw0}6H&`8T^Ko?s^Ayx)z4#eWR~XkQbr%Xk?L`* z@hXGgsd+xS-1DV29W7B&Y+&sgPqx$!XYuTrse%o|fB-2veZBJ0q)C3S{uCyK=u=lE zxr81pTdE%I3{I^=MNha7vh{AOtHy%chxf%-2wB&;uvfnxH?R&A6$o_ESKMBKZjD;F zA7O|{S>hDe3Ks()RlI!~OqmPc0ekVw_143Z1z>0WaP>JT2aSJw}nIw0Y}E!&ZCp)>5*2dpfxE z4O@lZJ0QYn+?G#nmcK3Q`ayKsZ_qS&fAP3LrBbZ+d;f3I4)m0%YcdGY=l0}{dSY9) zP+Hz7EAYG$4WK+jjY}WjF-l*?2i$XClw%lsY1pZN33TAnxC2=F2ZZoPW%cI4s=J}X zvuDXN#pdAbUb;8fd%Q~xZa<(nq)e;XUM73)_1_%<;u_~LZjt`wTKPWUStm`UjbJAA zbmc~x71%q~y$O^wHy(LiVC*X4-dDW;Bj7m?l_{X(Ajb&cB@fAY>|CrLqfY@8I)6&# zpOb$U;eV5aP-Buh@c69at-aTPs4$M((f^$Mvk3o4!arK@AJqcw)#F$CtvNs-Eq!s| zMGp)DiAr?~acY%ZlGOZVV?dR{%t_I*mB2%57)QkQf9tpY&p(j_#{IjOTlbu-%CFJ> t7x=(K;ORpkI-R`j3d|LBk`c-&p;rv5Z00Rka_NJbeE8zX4`t-}(Rm literal 0 HcmV?d00001 diff --git a/richmenu-examples/slide-04.png b/richmenu-examples/slide-04.png new file mode 100644 index 0000000000000000000000000000000000000000..adada110744727767e13cb288c7f8d5dcfd6e5a8 GIT binary patch literal 24870 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�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 literal 0 HcmV?d00001 diff --git a/richmenu-examples/slide-06.png b/richmenu-examples/slide-06.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba158e88f18f2b1207464028fc6539c5f696b28 GIT binary patch literal 13606 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 literal 0 HcmV?d00001 diff --git a/richmenu-examples/slide-07.png b/richmenu-examples/slide-07.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e13f1ca9d39262c25c44e16a06f5210341f9ff GIT binary patch literal 12276 zcmeHNc~q0vw*Sy8*jm8W0xFY33-uye3W!VrwSqD_F$F@b15*TK2txu176rK#&`Xt3 zLP0uEqHyIr);Dv(MRk z|MqY1bJEVZIjVlX`*Q#QR8OD!@f-js+XKMnjIGMx6K}>y2LNmbPXBo9LR`VjaBKtT z>O+wr{M7AjpB3Hw+Ue3)UZq|d+YjRR>?tzS{tl*8y7h6@!9VXiSiH~Z)Q)@mTw$7} z$wg*2R8Cs$Gv9e?Q_h*=Td#ll@ycZU`{Q5zKso={C%8paM7Ksym&l?kH_Pt#mME?$ zDYx!xaBcvwzpJ!my|di`P+ISdZQZl}Zm*;Cr}fV5{YmTZK*XQ6uXpxj0Grl39aB2? zJ=0#Fz77A5-BZAC_e}cq@xTB0OZ)Y2l8$cLy58CD_>ase1D^IA_#|@gw-$33T7yTb zfL+a(KM8O4akPTYzINl&4?6xOQ*I3MZ_?$)#%^rv{{>|>>}11EHtYoWhvMai?`-(a zhVN|n4ghSB;r}6l*?`CYe0WTPAYT7^06Cv1V%GJS(FglV5CguB^rSV}HULPH%M@Ab zYC&LOE;LnNAhVKaQC7<(j_Eo+j=J$b5{Q$#!DR87JWP?5Ccbty4H&3yo;_8MlD!h-fWw=rRDz^j>G<>i{_-w?mS{hSXn5~mvh=$Sq}O` zMQsgi9)d{sB*a$;xx)yY3^DfTv~HkiFqCOEikD~sz>>$OwFxaagAtQG&2!b|I850C z?@NMxaHE6*%u65S3wO8bS6PN$v3@aPjafFD2`g`F5oJ%?&SSiUWm@orT1<3T1ad}T zs0jeQcfkDL9`{2Sr#*erz$Ir-(vlL*73bfKjhJtmWbrF4>NolFmy`Fe)sco!Z>CkT zt)ezoAf<+3E0PjHolLH)I6y9*B z_Ibp8+9CMhWzuXFs@+TN=##=+D`Lz@gk-vU7pSV>a-2`9PD~t_{lg5CK+(#pWOK3f zEn5CI%v_Vp4m9DyhwQ)>P7wZ4+74@6|FfU_R>h&@_Ct%&9-Vtr_59D5LwqGO!p`Z+ z&vqD)_B&-6vq1qZeIElrk-B)P9CFsErhd#X5X#oNhnVcjB~l9|UD?K^8LNFJ$h9q6 z$f>+VOcW-x;nn1r3b@sGKW)v$XGvDV_qYL2K^IBXlrMJuz^~nbAeb}1i-aXiT}Afm zhgXXy*q{LYh3M*WPL{i^2YRj*KHDr;G7n|dgY^~EOHFTZKuc$1^G9wrb2+Gm=cz0e z7c%6Uo@qcdq2a~n#NYSH&%Mus$i%CY&r@Tj@{-kTiV`2ZVUHXkmAO5HiiSn@4-5k!31X9sCh=y|t!|PO5+HscGBOLUCuk|A)|#C5c#B% z44Yzb+k2`M-av~NPh|5}<0u#zi_B~;>lezuk7C$G<-vk}o0Hi-QkaPzCN9A>ô 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 o4LGJ;PP-%X0z1lz Date: Sun, 8 Jun 2025 23:11:40 +0900 Subject: [PATCH 06/36] refactor some --- src/index.ts | 30 +++++++++++----- src/utils/generateRichMenuImage.ts | 55 +++++++++++++++++++++++++++--- 2 files changed, 71 insertions(+), 14 deletions(-) diff --git a/src/index.ts b/src/index.ts index 12ddef5..7ce9083 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,17 +20,16 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import * as line from "@line/bot-sdk"; import { z } from "zod"; -import path from "path"; -import { fileURLToPath } from "url"; -import { generateRichMenuImage } from "./utils/generateRichMenuImage"; import { LINE_BOT_MCP_SERVER_VERSION, USER_AGENT } from "./version.js"; +import { + generateRichMenuImage, + validateRichMenuImage, + initializeTempleteNumber, +} from "./utils/generateRichMenuImage.js"; const NO_USER_ID_ERROR = "Error: Specify the userId or set the DESTINATION_USER_ID in the environment variables of this MCP Server."; -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - const server = new McpServer({ name: "line-bot", version: LINE_BOT_MCP_SERVER_VERSION, @@ -239,18 +238,31 @@ server.tool( "generate_rich_menu_image", "Generate a rich menu image based on the user's request.", { - templeteNumber: z.number().describe("The number of the templete. 1-7"), + templeteNumber: z + .number() + .optional() + .describe( + "The number of the templete. 1-7. If not specified, the number will be automatically determined based on the number of texts.", + ), texts: z .array(z.string()) .describe("The texts to be displayed on the slide. 1-6"), }, async ({ templeteNumber, texts }) => { try { - const richMenuImagePath = await generateRichMenuImage(templeteNumber, texts); - + templeteNumber = initializeTempleteNumber(templeteNumber, texts); + const error = validateRichMenuImage(templeteNumber, texts); + if (error) { + return createErrorResponse(error); + } + const richMenuImagePath = await generateRichMenuImage( + templeteNumber, + texts, + ); return createSuccessResponse({ message: "creating the image. please wait a moment", imagePath: richMenuImagePath, + templeteNumber, }); } catch (error) { return createErrorResponse(`Failed to generate slide: ${error.message}`); diff --git a/src/utils/generateRichMenuImage.ts b/src/utils/generateRichMenuImage.ts index 5dfac0c..85441f5 100644 --- a/src/utils/generateRichMenuImage.ts +++ b/src/utils/generateRichMenuImage.ts @@ -3,16 +3,27 @@ import puppeteer from "puppeteer"; import { promises as fs } from "fs"; import path from "path"; import os from "os"; +import { fileURLToPath } from "url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); // Function to generate a rich menu image from a Markdown template -export async function generateRichMenuImage(templeteNumber: number, texts: string[]): Promise { +export async function generateRichMenuImage( + templeteNumber: number, + texts: string[], +): Promise { const richMenuImagePath = path.join( os.tmpdir(), `slide-0${templeteNumber}-${Date.now()}.png`, ); - const serverPath = process.env.SERVER_PATH || path.resolve(__dirname, "..", ".." ); + const serverPath = + process.env.SERVER_PATH || path.resolve(__dirname, "..", ".."); // 1. Read the Markdown template - const srcPath = path.join(serverPath, `richmenu-templetes/templete-0${templeteNumber}.md`); + const srcPath = path.join( + serverPath, + `richmenu-templetes/templete-0${templeteNumber}.md`, + ); let content = await fs.readFile(srcPath, "utf8"); for (let index = 0; index < texts.length; index++) { const pattern = new RegExp(`

item0${index + 1}

`, "g"); @@ -32,7 +43,10 @@ export async function generateRichMenuImage(templeteNumber: number, texts: strin ${html} `; - const tempHtmlPath = path.join(os.tmpdir(), `temp_marp_slide_${Date.now()}.html`); + const tempHtmlPath = path.join( + os.tmpdir(), + `temp_marp_slide_${Date.now()}.html`, + ); await fs.writeFile(tempHtmlPath, htmlContent); // 4. Use puppeteer to convert HTML to PNG @@ -52,4 +66,35 @@ export async function generateRichMenuImage(templeteNumber: number, texts: strin await fs.unlink(tempHtmlPath); return richMenuImagePath; -} \ No newline at end of file +} + +export const validateRichMenuImage = ( + templeteNumber: number, + texts: string[], +): string | null => { + if (templeteNumber < 1 || templeteNumber > 7) { + return "Invalid templete number"; + } + if (texts.length < 1 || texts.length > 6) { + return "Invalid texts length"; + } + return null; +}; + +export const initializeTempleteNumber = ( + templeteNumber: number, + texts: string[], +): number => { + if (!templeteNumber) { + const templeteNumberMap = { + // text length: templete number + 1: 7, + 2: 6, + 3: 4, + 4: 2, + } as const; + templeteNumber = + templeteNumberMap[texts.length as keyof typeof templeteNumberMap] || 1; + } + return templeteNumber; +}; From 6eb6d1048e85075d4d8e5b76fbdf9d5c1632f1ca Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 8 Jun 2025 23:16:48 +0900 Subject: [PATCH 07/36] add h3 tag on templete 04 --- richmenu-templetes/templete-04.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/richmenu-templetes/templete-04.md b/richmenu-templetes/templete-04.md index 89ba66e..8e54799 100644 --- a/richmenu-templetes/templete-04.md +++ b/richmenu-templetes/templete-04.md @@ -67,9 +67,15 @@ section > :last-child { }
-
item01
+
+

item01

+
-
item02
-
item03
+
+

item02

+
+
+

item03

+
From 417e9d714324c6b0601bc357eb944a3e675e1b1f Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 8 Jun 2025 23:18:00 +0900 Subject: [PATCH 08/36] change return messave --- src/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 7ce9083..1b97318 100644 --- a/src/index.ts +++ b/src/index.ts @@ -260,12 +260,13 @@ server.tool( texts, ); return createSuccessResponse({ - message: "creating the image. please wait a moment", imagePath: richMenuImagePath, templeteNumber, }); } catch (error) { - return createErrorResponse(`Failed to generate slide: ${error.message}`); + return createErrorResponse( + `Failed to generate rich menu image: ${error.message}`, + ); } }, ); From 34e8566bacd082558e57f08ddba27f0c96beafed Mon Sep 17 00:00:00 2001 From: 4geru Date: Tue, 10 Jun 2025 23:20:15 +0900 Subject: [PATCH 09/36] add create richmenu --- src/index.ts | 39 +++++++++++++++++++++++++++++- src/utils/generateRichMenuImage.ts | 4 +-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index 1b97318..a767343 100644 --- a/src/index.ts +++ b/src/index.ts @@ -234,6 +234,43 @@ server.tool( }, ); +server.tool( + 'create_rich_menu', + 'Create a rich menu associated with your LINE Official Account.', + { + chatBarText: z.string().describe("The ID of the rich menu to create."), + templateNumber: z.number().describe("The number of the template."), + actions: z.array(z.object({ + type: z.string().describe("The type of the action.") + })), + }, + async ({ chatBarText, templateNumber, actions }) => { + try { + const templeteNumber = initializeTempleteNumber(templateNumber, actions.length); + const areas: Array = actions.map((action) => ({ + bounds: { + x: 0, + y: 0, + width: 1600, + height: 900, + }, + action: action as line.messagingApi.Action, + })); + const response = await messagingApiClient.createRichMenu({ + chatBarText: chatBarText, + size: { + width: 1600, + height: 900, + }, + areas: areas, + }); + return createSuccessResponse(response); + } catch (error) { + return createErrorResponse(`Failed to create rich menu: ${error.message}`); + } + }, +) + server.tool( "generate_rich_menu_image", "Generate a rich menu image based on the user's request.", @@ -250,7 +287,7 @@ server.tool( }, async ({ templeteNumber, texts }) => { try { - templeteNumber = initializeTempleteNumber(templeteNumber, texts); + templeteNumber = initializeTempleteNumber(templeteNumber, texts.length); const error = validateRichMenuImage(templeteNumber, texts); if (error) { return createErrorResponse(error); diff --git a/src/utils/generateRichMenuImage.ts b/src/utils/generateRichMenuImage.ts index 85441f5..818c570 100644 --- a/src/utils/generateRichMenuImage.ts +++ b/src/utils/generateRichMenuImage.ts @@ -83,7 +83,7 @@ export const validateRichMenuImage = ( export const initializeTempleteNumber = ( templeteNumber: number, - texts: string[], + items: number, ): number => { if (!templeteNumber) { const templeteNumberMap = { @@ -94,7 +94,7 @@ export const initializeTempleteNumber = ( 4: 2, } as const; templeteNumber = - templeteNumberMap[texts.length as keyof typeof templeteNumberMap] || 1; + templeteNumberMap[items as keyof typeof templeteNumberMap] || 1; } return templeteNumber; }; From cb128abba4415b1085f421f5ca906258e8be7b22 Mon Sep 17 00:00:00 2001 From: 4geru Date: Wed, 11 Jun 2025 00:23:21 +0900 Subject: [PATCH 10/36] add create rich menu command --- src/index.ts | 106 +++++++++++++++++++++++------ src/utils/generateRichMenuImage.ts | 81 +++++++++++++++++++++- 2 files changed, 166 insertions(+), 21 deletions(-) diff --git a/src/index.ts b/src/index.ts index a767343..44ccf48 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,7 +25,9 @@ import { generateRichMenuImage, validateRichMenuImage, initializeTempleteNumber, + richmenuBounds, } from "./utils/generateRichMenuImage.js"; +import fs from "fs"; const NO_USER_ID_ERROR = "Error: Specify the userId or set the DESTINATION_USER_ID in the environment variables of this MCP Server."; @@ -45,6 +47,13 @@ const messagingApiClient = new line.messagingApi.MessagingApiClient({ }, }); +const lineBlobClient = new line.messagingApi.MessagingApiBlobClient({ + channelAccessToken: channelAccessToken, + defaultHeaders: { + "User-Agent": USER_AGENT, + }, +}); + function createErrorResponse(message: string) { return { isError: true, @@ -103,7 +112,31 @@ const flexMessageSchema = z.object({ "the 'contents' property.", ), }); +// 代表的なAction型 +const messageActionSchema = z.object({ + type: z.literal("message"), + label: z.string(), + text: z.string(), +}); +const postbackActionSchema = z.object({ + type: z.literal("postback"), + label: z.string(), + data: z.string(), + displayText: z.string().optional(), +}); +const uriActionSchema = z.object({ + type: z.literal("uri"), + label: z.string(), + uri: z.string(), +}); +// すべてのAction型をunion +const actionSchema = z.union([ + messageActionSchema, + postbackActionSchema, + uriActionSchema, + // 必要に応じて他のAction型も追加 +]); server.tool( "push_text_message", "Push a simple text message to a user via LINE. Use this for sending plain text messages without formatting.", @@ -235,41 +268,76 @@ server.tool( ); server.tool( - 'create_rich_menu', - 'Create a rich menu associated with your LINE Official Account.', + "create_rich_menu", + "Create a rich menu associated with your LINE Official Account.", { chatBarText: z.string().describe("The ID of the rich menu to create."), templateNumber: z.number().describe("The number of the template."), - actions: z.array(z.object({ - type: z.string().describe("The type of the action.") - })), + actions: z.array(actionSchema), }, async ({ chatBarText, templateNumber, actions }) => { + let createRichMenuResponse: any = null; + let setImageResponse: any = null; try { - const templeteNumber = initializeTempleteNumber(templateNumber, actions.length); - const areas: Array = actions.map((action) => ({ - bounds: { - x: 0, - y: 0, - width: 1600, - height: 900, + const error = validateRichMenuImage(templateNumber, actions.length); + if (error) { + return createErrorResponse(error); + } + + // initialize templete number + templateNumber = initializeTempleteNumber(templateNumber, actions.length); + + // create rich menu + const bounds = richmenuBounds(templateNumber); + const areas: Array = actions.map( + (action, index) => { + // action.typeが'message'の場合、textプロパティがなければlabelで補完 + let areaAction = { ...action }; + if (areaAction.type === "message" && !areaAction.text) { + areaAction.text = areaAction.label || ""; + } + return { + bounds: bounds[index], + action: areaAction as line.messagingApi.Action, + }; }, - action: action as line.messagingApi.Action, - })); - const response = await messagingApiClient.createRichMenu({ + ); + createRichMenuResponse = await messagingApiClient.createRichMenu({ + name: chatBarText, chatBarText: chatBarText, + selected: false, size: { width: 1600, height: 900, }, areas: areas, }); - return createSuccessResponse(response); + const richMenuId = createRichMenuResponse.richMenuId; + + // upload rich menu image + const richMenuImagePath = await generateRichMenuImage( + templateNumber, + actions.map(action => action.label || ""), + ); + const imageBuffer = fs.readFileSync(richMenuImagePath); + const imageType = "image/png"; + const imageBlob = new Blob([imageBuffer], { type: imageType }); + + setImageResponse = await lineBlobClient.setRichMenuImage( + richMenuId, + imageBlob, + ); + + return createSuccessResponse(setImageResponse); } catch (error) { - return createErrorResponse(`Failed to create rich menu: ${error.message}`); + return createErrorResponse( + `create richmenu: ${JSON.stringify(error, null, 2)}\n` + + `createRichMenuResponse: ${JSON.stringify(createRichMenuResponse, null, 2)}\n` + + `setImageResponse: ${JSON.stringify(setImageResponse, null, 2)}`, + ); } }, -) +); server.tool( "generate_rich_menu_image", @@ -288,7 +356,7 @@ server.tool( async ({ templeteNumber, texts }) => { try { templeteNumber = initializeTempleteNumber(templeteNumber, texts.length); - const error = validateRichMenuImage(templeteNumber, texts); + const error = validateRichMenuImage(templeteNumber, texts.length); if (error) { return createErrorResponse(error); } diff --git a/src/utils/generateRichMenuImage.ts b/src/utils/generateRichMenuImage.ts index 818c570..f9ce284 100644 --- a/src/utils/generateRichMenuImage.ts +++ b/src/utils/generateRichMenuImage.ts @@ -70,12 +70,12 @@ export async function generateRichMenuImage( export const validateRichMenuImage = ( templeteNumber: number, - texts: string[], + len: number, ): string | null => { if (templeteNumber < 1 || templeteNumber > 7) { return "Invalid templete number"; } - if (texts.length < 1 || texts.length > 6) { + if (len < 1 || len > 6) { return "Invalid texts length"; } return null; @@ -98,3 +98,80 @@ export const initializeTempleteNumber = ( } return templeteNumber; }; + +export const richmenuBounds = (templeteNumber: number) => { + const boundsMap: { + [key: number]: { x: number; y: number; width: number; height: number }[]; + } = { + 1: [0, 1, 2] + .map(i => + [0, 1].map(j => ({ + x: 533 * i, + y: 450 * j, + width: 533, + height: 450, + })), + ) + .flat(), + 2: [0, 1] + .map(i => + [0, 1].map(j => ({ + x: 800 * i, + y: 450 * j, + width: 800, + height: 450, + })), + ) + .flat(), + 3: [ + { + x: 0, + y: 0, + width: 1600, + height: 450, + }, + ...[0, 1, 2].map(i => ({ + x: 533 * i, + y: 450, + width: 533, + height: 450, + })), + ], + 4: [ + { + x: 0, + y: 0, + width: 800, + height: 900, + }, + ...[0, 1].map(i => ({ + x: 800 * i, + y: 450, + width: 800, + height: 450, + })), + ], + 5: [0, 1].map(i => ({ + x: 0, + y: 800 * i, + width: 1600, + height: 800, + })), + 6: [0, 1].map(i => ({ + x: 450 * i, + y: 0, + width: 450, + height: 900, + })), + 7: [ + { + x: 0, + y: 0, + width: 1600, + height: 900, + }, + ], + }; + + return boundsMap[templeteNumber]; +}; From 15bfb770e33b44c5e4662778fd41b8e8286f3a1c Mon Sep 17 00:00:00 2001 From: 4geru Date: Wed, 11 Jun 2025 07:58:05 +0900 Subject: [PATCH 11/36] update the create rich menu --- src/common/schema/actionSchema.ts | 79 +++++++ src/index.ts | 208 +----------------- .../createRichmMenu.ts} | 104 +++++++++ src/tools/downloadRichMenuImage.ts | 38 ++++ 4 files changed, 225 insertions(+), 204 deletions(-) create mode 100644 src/common/schema/actionSchema.ts rename src/{utils/generateRichMenuImage.ts => tools/createRichmMenu.ts} (52%) create mode 100644 src/tools/downloadRichMenuImage.ts diff --git a/src/common/schema/actionSchema.ts b/src/common/schema/actionSchema.ts new file mode 100644 index 0000000..e52f6be --- /dev/null +++ b/src/common/schema/actionSchema.ts @@ -0,0 +1,79 @@ +import { z } from "zod"; + +// 1. Postback action +const postbackActionSchema = z.object({ + type: z.literal("postback"), + label: z.string().optional(), + data: z.string(), + displayText: z.string().optional(), + inputOption: z.enum(["closeRichMenu", "openRichMenu"]).optional(), + fillInText: z.string().optional(), +}); +// 2. Message action +const messageActionSchema = z.object({ + type: z.literal("message"), + label: z.string().optional(), + text: z.string(), +}); +// 3. URI action +const uriActionSchema = z.object({ + type: z.literal("uri"), + label: z.string().optional(), + uri: z.string(), + altUri: z + .object({ + desktop: z.string().optional(), + }) + .optional(), +}); +// 4. Datetime picker action +const datetimePickerActionSchema = z.object({ + type: z.literal("datetimepicker"), + label: z.string().optional(), + data: z.string(), + mode: z.enum(["date", "time", "datetime"]), + initial: z.string().optional(), + max: z.string().optional(), + min: z.string().optional(), +}); +// 5. Camera action +const cameraActionSchema = z.object({ + type: z.literal("camera"), + label: z.string().optional(), +}); +// 6. Camera roll action +const cameraRollActionSchema = z.object({ + type: z.literal("cameraRoll"), + label: z.string().optional(), +}); +// 7. Location action +const locationActionSchema = z.object({ + type: z.literal("location"), + label: z.string().optional(), +}); +// 8. Rich menu switch action +const richMenuSwitchActionSchema = z.object({ + type: z.literal("richmenuswitch"), + label: z.string().optional(), + richMenuAliasId: z.string(), + data: z.string(), +}); +// 9. Clipboard action +const clipboardActionSchema = z.object({ + type: z.literal("clipboard"), + label: z.string().optional(), + clipboardText: z.string(), +}); + +// actions +export const actionSchema = z.union([ + postbackActionSchema, + messageActionSchema, + uriActionSchema, + datetimePickerActionSchema, + cameraActionSchema, + cameraRollActionSchema, + locationActionSchema, + richMenuSwitchActionSchema, + clipboardActionSchema, +]); diff --git a/src/index.ts b/src/index.ts index 41930e1..3c6c1c3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,17 +20,6 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import * as line from "@line/bot-sdk"; import { LINE_BOT_MCP_SERVER_VERSION, USER_AGENT } from "./version.js"; -import { - generateRichMenuImage, - validateRichMenuImage, - initializeTempleteNumber, - richmenuBounds, -} from "./utils/generateRichMenuImage.js"; -import { z } from "zod"; -import fs from "fs"; - -const NO_USER_ID_ERROR = - "Error: Specify the userId or set the DESTINATION_USER_ID in the environment variables of this MCP Server."; import CancelRichMenuDefault from "./tools/cancelRichMenuDefault.js"; import PushTextMessage from "./tools/pushTextMessage.js"; import PushFlexMessage from "./tools/pushFlexMessage.js"; @@ -41,6 +30,8 @@ import GetMessageQuota from "./tools/getMessageQuota.js"; import GetRichMenuList from "./tools/getRichMenuList.js"; import DeleteRichMenu from "./tools/deleteRichMenu.js"; import SetRichMenuDefault from "./tools/setRichMenuDefault.js"; +import CreateRichMenu from "./tools/createRichmMenu.js"; +import DownloadRichMenuImage from "./tools/downloadRichMenuImage.js"; const server = new McpServer({ name: "line-bot", @@ -64,90 +55,6 @@ const lineBlobClient = new line.messagingApi.MessagingApiBlobClient({ }, }); -function createErrorResponse(message: string) { - return { - isError: true, - content: [ - { - type: "text" as const, - text: message, - }, - ], - }; -} - -function createSuccessResponse(response: object) { - return { - content: [ - { - type: "text" as const, - text: JSON.stringify(response), - }, - ], - }; -} - -const userIdSchema = z - .string() - .default(destinationId) - .describe( - "The user ID to receive a message. Defaults to DESTINATION_USER_ID.", - ); - -const textMessageSchema = z.object({ - type: z.literal("text").default("text"), - text: z - .string() - .max(5000) - .describe("The plain text content to send to the user."), -}); - -const flexMessageSchema = z.object({ - type: z.literal("flex").default("flex"), - altText: z - .string() - .describe("Alternative text shown when flex message cannot be displayed."), - contents: z - .object({ - type: z - .enum(["bubble", "carousel"]) - .describe( - "Type of the container. 'bubble' for single container, 'carousel' for multiple swipeable bubbles.", - ), - }) - .passthrough() - .describe( - "Flexible container structure following LINE Flex Message format. For 'bubble' type, can include header, " + - "hero, body, footer, and styles sections. For 'carousel' type, includes an array of bubble containers in " + - "the 'contents' property.", - ), -}); -// 代表的なAction型 -const messageActionSchema = z.object({ - type: z.literal("message"), - label: z.string(), - text: z.string(), -}); -const postbackActionSchema = z.object({ - type: z.literal("postback"), - label: z.string(), - data: z.string(), - displayText: z.string().optional(), -}); -const uriActionSchema = z.object({ - type: z.literal("uri"), - label: z.string(), - uri: z.string(), -}); - -// すべてのAction型をunion -const actionSchema = z.union([ - messageActionSchema, - postbackActionSchema, - uriActionSchema, - // 必要に応じて他のAction型も追加 -]); - new PushTextMessage(messagingApiClient, destinationId).register(server); new PushFlexMessage(messagingApiClient, destinationId).register(server); new BroadcastTextMessage(messagingApiClient).register(server); @@ -158,115 +65,8 @@ new GetRichMenuList(messagingApiClient).register(server); new DeleteRichMenu(messagingApiClient).register(server); new SetRichMenuDefault(messagingApiClient).register(server); new CancelRichMenuDefault(messagingApiClient).register(server); - -server.tool( - "create_rich_menu", - "Create a rich menu associated with your LINE Official Account.", - { - chatBarText: z.string().describe("The ID of the rich menu to create."), - templateNumber: z.number().describe("The number of the template."), - actions: z.array(actionSchema), - }, - async ({ chatBarText, templateNumber, actions }) => { - let createRichMenuResponse: any = null; - let setImageResponse: any = null; - try { - const error = validateRichMenuImage(templateNumber, actions.length); - if (error) { - return createErrorResponse(error); - } - - // initialize templete number - templateNumber = initializeTempleteNumber(templateNumber, actions.length); - - // create rich menu - const bounds = richmenuBounds(templateNumber); - const areas: Array = actions.map( - (action, index) => { - // action.typeが'message'の場合、textプロパティがなければlabelで補完 - let areaAction = { ...action }; - if (areaAction.type === "message" && !areaAction.text) { - areaAction.text = areaAction.label || ""; - } - return { - bounds: bounds[index], - action: areaAction as line.messagingApi.Action, - }; - }, - ); - createRichMenuResponse = await messagingApiClient.createRichMenu({ - name: chatBarText, - chatBarText: chatBarText, - selected: false, - size: { - width: 1600, - height: 900, - }, - areas: areas, - }); - const richMenuId = createRichMenuResponse.richMenuId; - - // upload rich menu image - const richMenuImagePath = await generateRichMenuImage( - templateNumber, - actions.map(action => action.label || ""), - ); - const imageBuffer = fs.readFileSync(richMenuImagePath); - const imageType = "image/png"; - const imageBlob = new Blob([imageBuffer], { type: imageType }); - - setImageResponse = await lineBlobClient.setRichMenuImage( - richMenuId, - imageBlob, - ); - - return createSuccessResponse(setImageResponse); - } catch (error) { - return createErrorResponse( - `create richmenu: ${JSON.stringify(error, null, 2)}\n` + - `createRichMenuResponse: ${JSON.stringify(createRichMenuResponse, null, 2)}\n` + - `setImageResponse: ${JSON.stringify(setImageResponse, null, 2)}`, - ); - } - }, -); - -server.tool( - "generate_rich_menu_image", - "Generate a rich menu image based on the user's request.", - { - templeteNumber: z - .number() - .optional() - .describe( - "The number of the templete. 1-7. If not specified, the number will be automatically determined based on the number of texts.", - ), - texts: z - .array(z.string()) - .describe("The texts to be displayed on the slide. 1-6"), - }, - async ({ templeteNumber, texts }) => { - try { - templeteNumber = initializeTempleteNumber(templeteNumber, texts.length); - const error = validateRichMenuImage(templeteNumber, texts.length); - if (error) { - return createErrorResponse(error); - } - const richMenuImagePath = await generateRichMenuImage( - templeteNumber, - texts, - ); - return createSuccessResponse({ - imagePath: richMenuImagePath, - templeteNumber, - }); - } catch (error) { - return createErrorResponse( - `Failed to generate rich menu image: ${error.message}`, - ); - } - }, -); +new CreateRichMenu(messagingApiClient, lineBlobClient).register(server); +new DownloadRichMenuImage(lineBlobClient).register(server); async function main() { if (!process.env.CHANNEL_ACCESS_TOKEN) { diff --git a/src/utils/generateRichMenuImage.ts b/src/tools/createRichmMenu.ts similarity index 52% rename from src/utils/generateRichMenuImage.ts rename to src/tools/createRichmMenu.ts index f9ce284..0619c0f 100644 --- a/src/utils/generateRichMenuImage.ts +++ b/src/tools/createRichmMenu.ts @@ -1,9 +1,113 @@ +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { messagingApi } from "@line/bot-sdk"; +import { + createErrorResponse, + createSuccessResponse, +} from "../common/response.js"; +import { AbstractTool } from "./AbstractTool.js"; +import { z } from "zod"; import { Marp } from "@marp-team/marp-core"; import puppeteer from "puppeteer"; import { promises as fs } from "fs"; import path from "path"; import os from "os"; import { fileURLToPath } from "url"; +import { actionSchema } from "../common/schema/actionSchema.js"; +export default class CreateRichMenu extends AbstractTool { + private client: messagingApi.MessagingApiClient; + private lineBlobClient: messagingApi.MessagingApiBlobClient; + + constructor( + client: messagingApi.MessagingApiClient, + lineBlobClient: messagingApi.MessagingApiBlobClient, + ) { + super(); + this.client = client; + this.lineBlobClient = lineBlobClient; + } + + register(server: McpServer) { + server.tool( + "create_rich_menu", + "Create a rich menu associated with your LINE Official Account.", + { + chatBarText: z.string().describe("The ID of the rich menu to create."), + templateNumber: z.number().describe("The number of the template."), + actions: z.array(actionSchema), + }, + async ({ chatBarText, templateNumber, actions }) => { + let createRichMenuResponse: any = null; + let setImageResponse: any = null; + try { + const error = validateRichMenuImage(templateNumber, actions.length); + if (error) { + return createErrorResponse(error); + } + + // initialize templete number + templateNumber = initializeTempleteNumber( + templateNumber, + actions.length, + ); + + // create rich menu + const bounds = richmenuBounds(templateNumber); + const areas: Array = actions.map( + (action, index) => { + // action.typeが'message'の場合、textプロパティがなければlabelで補完 + let areaAction = { ...action }; + if (areaAction.type === "message" && !areaAction.text) { + areaAction.text = areaAction.label || ""; + } + return { + bounds: bounds[index], + action: areaAction as messagingApi.Action, + }; + }, + ); + + createRichMenuResponse = await this.client.createRichMenu({ + name: chatBarText, + chatBarText: chatBarText, + selected: false, + size: { + width: 1600, + height: 900, + }, + areas: areas, + }); + const richMenuId = createRichMenuResponse.richMenuId; + + // upload rich menu image + const richMenuImagePath = await generateRichMenuImage( + templateNumber, + actions.map(action => action.label || ""), + ); + const imageBuffer = await fs.readFile(richMenuImagePath); + const imageType = "image/png"; + const imageBlob = new Blob([imageBuffer], { type: imageType }); + + setImageResponse = await this.lineBlobClient.setRichMenuImage( + richMenuId, + imageBlob, + ); + + return createSuccessResponse({ + richMenuId, + setImageResponse, + richMenuImagePath, + }); + } catch (error) { + return createErrorResponse( + `create richmenu: ${JSON.stringify(error, null, 2)}\n` + + `createRichMenuResponse: ${JSON.stringify(createRichMenuResponse, null, 2)}\n` + + `setImageResponse: ${JSON.stringify(setImageResponse, null, 2)}`, + ); + } + }, + ); + } +} const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); diff --git a/src/tools/downloadRichMenuImage.ts b/src/tools/downloadRichMenuImage.ts new file mode 100644 index 0000000..985cd2e --- /dev/null +++ b/src/tools/downloadRichMenuImage.ts @@ -0,0 +1,38 @@ +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { messagingApi } from "@line/bot-sdk"; +import { AbstractTool } from "./AbstractTool.js"; +import { z } from "zod"; +import { promises as fs } from "fs"; +import path from "path"; +import os from "os"; + +import { buffer } from "stream/consumers"; + +export default class DownloadRichMenuImage extends AbstractTool { + private lineBlobClient: messagingApi.MessagingApiBlobClient; + + constructor(lineBlobClient: messagingApi.MessagingApiBlobClient) { + super(); + this.lineBlobClient = lineBlobClient; + } + + register(server: McpServer) { + server.tool( + "download_rich_menu_image", + "Download the image of a rich menu.", + { + richMenuId: z.string().describe("The ID of the rich menu to download."), + }, + async ({ richMenuId }) => { + const response = await this.lineBlobClient.getRichMenuImage(richMenuId); + const imageBuffer = await buffer(response); + const imageType = "image/png"; + const imageBlob = new Blob([imageBuffer], { type: imageType }); + const imagePath = path.join(os.tmpdir(), `${richMenuId}.png`); + await fs.writeFile(imagePath, imageBuffer); + + return { imagePath }; + }, + ); + } +} From 3e3ae9e0ac256687c1361e6fd44f5d66881d3b28 Mon Sep 17 00:00:00 2001 From: 4geru Date: Wed, 11 Jun 2025 08:11:28 +0900 Subject: [PATCH 12/36] change the image size --- src/tools/createRichmMenu.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/tools/createRichmMenu.ts b/src/tools/createRichmMenu.ts index 0619c0f..6a1663c 100644 --- a/src/tools/createRichmMenu.ts +++ b/src/tools/createRichmMenu.ts @@ -72,7 +72,7 @@ export default class CreateRichMenu extends AbstractTool { selected: false, size: { width: 1600, - height: 900, + height: 910, }, areas: areas, }); @@ -96,6 +96,16 @@ export default class CreateRichMenu extends AbstractTool { richMenuId, setImageResponse, richMenuImagePath, + params: { + name: chatBarText, + chatBarText: chatBarText, + selected: false, + size: { + width: 1600, + height: 910, + }, + areas: areas, + }, }); } catch (error) { return createErrorResponse( From 1f2f63e3260b2673ef9ecd827fa362f9aebc21a3 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 16:32:47 +0900 Subject: [PATCH 13/36] create the rich menu --- src/tools/createRichmMenu.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/tools/createRichmMenu.ts b/src/tools/createRichmMenu.ts index 6a1663c..1c49b3d 100644 --- a/src/tools/createRichmMenu.ts +++ b/src/tools/createRichmMenu.ts @@ -8,7 +8,7 @@ import { AbstractTool } from "./AbstractTool.js"; import { z } from "zod"; import { Marp } from "@marp-team/marp-core"; import puppeteer from "puppeteer"; -import { promises as fs } from "fs"; +import fs from "fs"; import path from "path"; import os from "os"; import { fileURLToPath } from "url"; @@ -66,6 +66,7 @@ export default class CreateRichMenu extends AbstractTool { }, ); + // create rich menu createRichMenuResponse = await this.client.createRichMenu({ name: chatBarText, chatBarText: chatBarText, @@ -78,23 +79,30 @@ export default class CreateRichMenu extends AbstractTool { }); const richMenuId = createRichMenuResponse.richMenuId; - // upload rich menu image + // generate rich menu image const richMenuImagePath = await generateRichMenuImage( templateNumber, actions.map(action => action.label || ""), ); - const imageBuffer = await fs.readFile(richMenuImagePath); + + // upload rich menu image + const imageBuffer = fs.readFileSync(richMenuImagePath); const imageType = "image/png"; const imageBlob = new Blob([imageBuffer], { type: imageType }); - - setImageResponse = await this.lineBlobClient.setRichMenuImage( + const setImageResponse = await this.lineBlobClient.setRichMenuImage( richMenuId, imageBlob, ); + // set default rich menu + const setDefaultResponse = await this.client.setDefaultRichMenu( + richMenuId, + ); + return createSuccessResponse({ richMenuId, setImageResponse, + setDefaultResponse, richMenuImagePath, params: { name: chatBarText, From 9a97695b21e2ce3e83cb22fcd990c95031ec3dc1 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 16:34:34 +0900 Subject: [PATCH 14/36] refactor the code --- src/tools/createRichmMenu.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/tools/createRichmMenu.ts b/src/tools/createRichmMenu.ts index 1c49b3d..097bad7 100644 --- a/src/tools/createRichmMenu.ts +++ b/src/tools/createRichmMenu.ts @@ -13,6 +13,8 @@ import path from "path"; import os from "os"; import { fileURLToPath } from "url"; import { actionSchema } from "../common/schema/actionSchema.js"; +import { promises as fsp } from "fs"; + export default class CreateRichMenu extends AbstractTool { private client: messagingApi.MessagingApiClient; private lineBlobClient: messagingApi.MessagingApiBlobClient; @@ -95,9 +97,8 @@ export default class CreateRichMenu extends AbstractTool { ); // set default rich menu - const setDefaultResponse = await this.client.setDefaultRichMenu( - richMenuId, - ); + const setDefaultResponse = + await this.client.setDefaultRichMenu(richMenuId); return createSuccessResponse({ richMenuId, @@ -146,7 +147,7 @@ export async function generateRichMenuImage( serverPath, `richmenu-templetes/templete-0${templeteNumber}.md`, ); - let content = await fs.readFile(srcPath, "utf8"); + let content = await fsp.readFile(srcPath, "utf8"); for (let index = 0; index < texts.length; index++) { const pattern = new RegExp(`

item0${index + 1}

`, "g"); content = content.replace(pattern, `

${texts[index]}

`); @@ -169,7 +170,7 @@ export async function generateRichMenuImage( os.tmpdir(), `temp_marp_slide_${Date.now()}.html`, ); - await fs.writeFile(tempHtmlPath, htmlContent); + await fsp.writeFile(tempHtmlPath, htmlContent, "utf8"); // 4. Use puppeteer to convert HTML to PNG const browser = await puppeteer.launch(); @@ -185,7 +186,7 @@ export async function generateRichMenuImage( await browser.close(); // 5. Delete the temporary HTML file - await fs.unlink(tempHtmlPath); + await fsp.unlink(tempHtmlPath); return richMenuImagePath; } From a1749ce8fa31a47cccf01566cb57853e05076a77 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 20:20:53 +0900 Subject: [PATCH 15/36] change the templetes --- richmenu-examples/slide-01.png | Bin 29874 -> 0 bytes richmenu-examples/slide-02.png | Bin 22834 -> 0 bytes richmenu-examples/slide-03.png | Bin 23878 -> 0 bytes richmenu-examples/slide-04.png | Bin 24870 -> 0 bytes richmenu-examples/slide-05.png | Bin 17066 -> 0 bytes richmenu-examples/slide-06.png | Bin 13606 -> 0 bytes richmenu-examples/slide-07.png | Bin 12276 -> 0 bytes richmenu-examples/templete-01.png | Bin 0 -> 7958 bytes richmenu-examples/templete-02.png | Bin 0 -> 10109 bytes richmenu-examples/templete-03.png | Bin 0 -> 19422 bytes richmenu-examples/templete-04.png | Bin 0 -> 17771 bytes richmenu-examples/templete-05.png | Bin 0 -> 20000 bytes richmenu-examples/templete-06.png | Bin 0 -> 24320 bytes richmenu-templetes/templete-01.md | 43 ++--------------- richmenu-templetes/templete-02.md | 22 ++------- richmenu-templetes/templete-03.md | 76 +++++++++++++++++------------- richmenu-templetes/templete-04.md | 76 +++++++++++++----------------- richmenu-templetes/templete-05.md | 30 +++++++++--- richmenu-templetes/templete-06.md | 33 ++++++++++--- richmenu-templetes/templete-07.md | 52 -------------------- 20 files changed, 135 insertions(+), 197 deletions(-) delete mode 100644 richmenu-examples/slide-01.png delete mode 100644 richmenu-examples/slide-02.png delete mode 100644 richmenu-examples/slide-03.png delete mode 100644 richmenu-examples/slide-04.png delete mode 100644 richmenu-examples/slide-05.png delete mode 100644 richmenu-examples/slide-06.png delete mode 100644 richmenu-examples/slide-07.png create mode 100644 richmenu-examples/templete-01.png create mode 100644 richmenu-examples/templete-02.png create mode 100644 richmenu-examples/templete-03.png create mode 100644 richmenu-examples/templete-04.png create mode 100644 richmenu-examples/templete-05.png create mode 100644 richmenu-examples/templete-06.png delete mode 100644 richmenu-templetes/templete-07.md diff --git a/richmenu-examples/slide-01.png b/richmenu-examples/slide-01.png deleted file mode 100644 index 7ef35e7a8b3d6a52e22e75e9592f30251fedef43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29874 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 diff --git a/richmenu-examples/slide-04.png b/richmenu-examples/slide-04.png deleted file mode 100644 index adada110744727767e13cb288c7f8d5dcfd6e5a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24870 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�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 diff --git a/richmenu-examples/slide-06.png b/richmenu-examples/slide-06.png deleted file mode 100644 index 9ba158e88f18f2b1207464028fc6539c5f696b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13606 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 diff --git a/richmenu-examples/slide-07.png b/richmenu-examples/slide-07.png deleted file mode 100644 index e8e13f1ca9d39262c25c44e16a06f5210341f9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12276 zcmeHNc~q0vw*Sy8*jm8W0xFY33-uye3W!VrwSqD_F$F@b15*TK2txu176rK#&`Xt3 zLP0uEqHyIr);Dv(MRk z|MqY1bJEVZIjVlX`*Q#QR8OD!@f-js+XKMnjIGMx6K}>y2LNmbPXBo9LR`VjaBKtT z>O+wr{M7AjpB3Hw+Ue3)UZq|d+YjRR>?tzS{tl*8y7h6@!9VXiSiH~Z)Q)@mTw$7} z$wg*2R8Cs$Gv9e?Q_h*=Td#ll@ycZU`{Q5zKso={C%8paM7Ksym&l?kH_Pt#mME?$ zDYx!xaBcvwzpJ!my|di`P+ISdZQZl}Zm*;Cr}fV5{YmTZK*XQ6uXpxj0Grl39aB2? zJ=0#Fz77A5-BZAC_e}cq@xTB0OZ)Y2l8$cLy58CD_>ase1D^IA_#|@gw-$33T7yTb zfL+a(KM8O4akPTYzINl&4?6xOQ*I3MZ_?$)#%^rv{{>|>>}11EHtYoWhvMai?`-(a zhVN|n4ghSB;r}6l*?`CYe0WTPAYT7^06Cv1V%GJS(FglV5CguB^rSV}HULPH%M@Ab zYC&LOE;LnNAhVKaQC7<(j_Eo+j=J$b5{Q$#!DR87JWP?5Ccbty4H&3yo;_8MlD!h-fWw=rRDz^j>G<>i{_-w?mS{hSXn5~mvh=$Sq}O` zMQsgi9)d{sB*a$;xx)yY3^DfTv~HkiFqCOEikD~sz>>$OwFxaagAtQG&2!b|I850C z?@NMxaHE6*%u65S3wO8bS6PN$v3@aPjafFD2`g`F5oJ%?&SSiUWm@orT1<3T1ad}T zs0jeQcfkDL9`{2Sr#*erz$Ir-(vlL*73bfKjhJtmWbrF4>NolFmy`Fe)sco!Z>CkT zt)ezoAf<+3E0PjHolLH)I6y9*B z_Ibp8+9CMhWzuXFs@+TN=##=+D`Lz@gk-vU7pSV>a-2`9PD~t_{lg5CK+(#pWOK3f zEn5CI%v_Vp4m9DyhwQ)>P7wZ4+74@6|FfU_R>h&@_Ct%&9-Vtr_59D5LwqGO!p`Z+ z&vqD)_B&-6vq1qZeIElrk-B)P9CFsErhd#X5X#oNhnVcjB~l9|UD?K^8LNFJ$h9q6 z$f>+VOcW-x;nn1r3b@sGKW)v$XGvDV_qYL2K^IBXlrMJuz^~nbAeb}1i-aXiT}Afm zhgXXy*q{LYh3M*WPL{i^2YRj*KHDr;G7n|dgY^~EOHFTZKuc$1^G9wrb2+Gm=cz0e z7c%6Uo@qcdq2a~n#NYSH&%Mus$i%CY&r@Tj@{-kTiV`2ZVUHXkmAO5HiiSn@4-5k!31X9sCh=y|t!|PO5+HscGBOLUCuk|A)|#C5c#B% z44Yzb+k2`M-av~NPh|5}<0u#zi_B~;>lezuk7C$G<-vk}o0Hi-QkaPzCN9A>ô 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 aqW_0>tD|rCn*zgtE?C?DUUSAL^*;fYM67oJ literal 0 HcmV?d00001 diff --git a/richmenu-examples/templete-03.png b/richmenu-examples/templete-03.png new file mode 100644 index 0000000000000000000000000000000000000000..d47fd7c51ad81ee0381df1e1fd4434899b5e8b90 GIT binary patch literal 19422 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 literal 0 HcmV?d00001 diff --git a/richmenu-examples/templete-04.png b/richmenu-examples/templete-04.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7a13d4b445c583b475a3511a86b5d1c8b29c5f GIT binary patch literal 17771 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 literal 0 HcmV?d00001 diff --git a/richmenu-examples/templete-06.png b/richmenu-examples/templete-06.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2ba478b5ed9b29f380ad66f30788475c05c209 GIT binary patch literal 24320 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 S@tCuILucffpDKS0y!kJRHLb}2 literal 0 HcmV?d00001 diff --git a/richmenu-templetes/templete-01.md b/richmenu-templetes/templete-01.md index c2dd997..623d824 100644 --- a/richmenu-templetes/templete-01.md +++ b/richmenu-templetes/templete-01.md @@ -3,55 +3,38 @@ marp: true size: 16:9 --- -
-
+

item01

-
-

item02

-
-
-

item03

-
-
-

item04

-
-
-

item05

-
-
-

item06

-
diff --git a/richmenu-templetes/templete-02.md b/richmenu-templetes/templete-02.md index 8f9ece7..3f2546a 100644 --- a/richmenu-templetes/templete-02.md +++ b/richmenu-templetes/templete-02.md @@ -30,24 +30,18 @@ section > :last-child { justify-content: center; align-items: center; background-color: white; + margin: 10px 0px 10px 10px; box-sizing: border-box; - height: calc((100% - 30px) / 2); + height: calc((100% - 20px)); width: calc((100% - 30px) / 2); overflow: hidden; } -.column-item-01 { - margin: 10px 0px 0px 10px; -} -.column-item-02 { - margin: 0px 0px 0px 10px; -} - .column-item h3 { font-weight: bold; width: 100%; text-align: center; - margin: 5px; + margin: 0; font-size: clamp(16px, 6vw, 50px); white-space: normal; word-break: break-all; @@ -56,16 +50,10 @@ section > :last-child {
-
+

item01

-
+

item02

-
-

item03

-
-
-

item04

-
diff --git a/richmenu-templetes/templete-03.md b/richmenu-templetes/templete-03.md index 11d001a..8e54799 100644 --- a/richmenu-templetes/templete-03.md +++ b/richmenu-templetes/templete-03.md @@ -18,56 +18,64 @@ section > :last-child { margin-bottom: 0 !important; } -.columns-container { +.flex-container { display: flex; - flex-wrap: wrap; width: 100%; + height: 400px; gap: 10px; height: 100%; } -.column-item { +.flex-left { + flex: 2; + background: white; display: flex; - flex-direction: column; justify-content: center; align-items: center; - background-color: white; - box-sizing: border-box; - overflow: hidden; + font-size: 2rem; + border: 1px solid #ccc; + margin: 10px 0px 10px 10px; } -.column-item-01 { - margin: 10px 0px 0px 10px; - height: calc((100% - 30px) / 2); - width: calc((100% - 20px)); -} -.column-item-02 { - margin: 0px 0px 0px 10px; - height: calc((100% - 30px) / 2); - width: calc((100% - 40px) / 3); +.flex-right { + flex: 1; + display: flex; + flex-direction: column; + gap: 10px; + height: 100%; } -.column-item h3 { - font-weight: bold; - width: 100%; - text-align: center; - font-size: clamp(16px, 6vw, 50px); - white-space: normal; - word-break: break-all; +.flex-right-top-item { + flex: 1; + background: white; + margin: 10px 10px 0px 0px; + display: flex; + justify-content: center; + align-items: center; + font-size: 2rem; + border: 1px solid #ccc; } +.flex-right-bottom-item { + flex: 1; + background: white; + margin: 0px 10px 10px 0px; + display: flex; + justify-content: center; + align-items: center; + font-size: 2rem; + border: 1px solid #ccc; +} - -
-
+
+

item01

-
-

item02

-
-
-

item03

-
-
-

item04

+
+
+

item02

+
+
+

item03

+
diff --git a/richmenu-templetes/templete-04.md b/richmenu-templetes/templete-04.md index 8e54799..8f9ece7 100644 --- a/richmenu-templetes/templete-04.md +++ b/richmenu-templetes/templete-04.md @@ -18,64 +18,54 @@ section > :last-child { margin-bottom: 0 !important; } -.flex-container { +.columns-container { display: flex; - width: 100%; - height: 400px; gap: 10px; + flex-wrap: wrap; width: 100%; height: 100%; } -.flex-left { - flex: 2; - background: white; +.column-item { display: flex; + flex-direction: column; justify-content: center; align-items: center; - font-size: 2rem; - border: 1px solid #ccc; - margin: 10px 0px 10px 10px; + background-color: white; + box-sizing: border-box; + height: calc((100% - 30px) / 2); + width: calc((100% - 30px) / 2); + overflow: hidden; } -.flex-right { - flex: 1; - display: flex; - flex-direction: column; - gap: 10px; - height: 100%; +.column-item-01 { + margin: 10px 0px 0px 10px; } - -.flex-right-top-item { - flex: 1; - background: white; - margin: 10px 10px 0px 0px; - display: flex; - justify-content: center; - align-items: center; - font-size: 2rem; - border: 1px solid #ccc; +.column-item-02 { + margin: 0px 0px 0px 10px; } -.flex-right-bottom-item { - flex: 1; - background: white; - margin: 0px 10px 10px 0px; - display: flex; - justify-content: center; - align-items: center; - font-size: 2rem; - border: 1px solid #ccc; +.column-item h3 { + font-weight: bold; + width: 100%; + text-align: center; + margin: 5px; + font-size: clamp(16px, 6vw, 50px); + white-space: normal; + word-break: break-all; } + -
-
+ +
+

item01

-
-
-

item02

-
-
-

item03

-
+
+

item02

+
+
+

item03

+
+
+

item04

diff --git a/richmenu-templetes/templete-05.md b/richmenu-templetes/templete-05.md index b9db802..e364b16 100644 --- a/richmenu-templetes/templete-05.md +++ b/richmenu-templetes/templete-05.md @@ -20,7 +20,8 @@ section > :last-child { .columns-container { display: flex; - flex-wrap: wrap; width: 100%; + flex-wrap: wrap; + width: 100%; height: 100%; } @@ -30,15 +31,23 @@ section > :last-child { justify-content: center; align-items: center; background-color: white; - margin: 10px 10px 0px 10px; box-sizing: border-box; height: calc((100% - 30px) / 2); - width: calc((100% - 20px)); + width: calc((100% - 40px) / 3); overflow: hidden; } +.column-item-01 { + margin: 10px 0px 0px 10px; +} + +.column-item-wide-01 { + width: calc((100% - 40px) / 3 * 2 + 10px); + margin: 10px 0px 0px 10px; +} + .column-item-02 { - margin: 0px 10px 0px 10px; + margin: 0px 0px 0px 10px; } .column-item h3 { @@ -53,10 +62,19 @@ section > :last-child {
-
+

item01

+
+

item03

+
+
+

item04

+
+
+

item05

+
-

item02

+

item06

diff --git a/richmenu-templetes/templete-06.md b/richmenu-templetes/templete-06.md index 3f2546a..3386488 100644 --- a/richmenu-templetes/templete-06.md +++ b/richmenu-templetes/templete-06.md @@ -20,7 +20,8 @@ section > :last-child { .columns-container { display: flex; - flex-wrap: wrap; width: 100%; + flex-wrap: wrap; + width: 100%; height: 100%; } @@ -30,18 +31,24 @@ section > :last-child { justify-content: center; align-items: center; background-color: white; - margin: 10px 0px 10px 10px; box-sizing: border-box; - height: calc((100% - 20px)); - width: calc((100% - 30px) / 2); + height: calc((100% - 30px) / 2); + width: calc((100% - 40px) / 3); overflow: hidden; } +.column-item-01 { + margin: 10px 0px 0px 10px; +} + +.column-item-02 { + margin: 0px 0px 0px 10px; +} + .column-item h3 { font-weight: bold; width: 100%; text-align: center; - margin: 0; font-size: clamp(16px, 6vw, 50px); white-space: normal; word-break: break-all; @@ -50,10 +57,22 @@ section > :last-child {
-
+

item01

-
+

item02

+
+

item03

+
+
+

item04

+
+
+

item05

+
+
+

item06

+
diff --git a/richmenu-templetes/templete-07.md b/richmenu-templetes/templete-07.md deleted file mode 100644 index 623d824..0000000 --- a/richmenu-templetes/templete-07.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -marp: true -size: 16:9 ---- - - - -
-
-

item01

-
-
From 0a39c3c8dab97204c690e38a5c4b28709ca6aa7c Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 20:25:41 +0900 Subject: [PATCH 16/36] change TempleteNo and height --- src/tools/createRichmMenu.ts | 78 ++++++++++++------------------------ 1 file changed, 25 insertions(+), 53 deletions(-) diff --git a/src/tools/createRichmMenu.ts b/src/tools/createRichmMenu.ts index 097bad7..9046392 100644 --- a/src/tools/createRichmMenu.ts +++ b/src/tools/createRichmMenu.ts @@ -34,26 +34,20 @@ export default class CreateRichMenu extends AbstractTool { "Create a rich menu associated with your LINE Official Account.", { chatBarText: z.string().describe("The ID of the rich menu to create."), - templateNumber: z.number().describe("The number of the template."), actions: z.array(actionSchema), }, - async ({ chatBarText, templateNumber, actions }) => { + async ({ chatBarText, actions }) => { let createRichMenuResponse: any = null; let setImageResponse: any = null; + const templeteNo = actions.length; try { - const error = validateRichMenuImage(templateNumber, actions.length); + const error = validateRichMenuImage(templeteNo); if (error) { return createErrorResponse(error); } - // initialize templete number - templateNumber = initializeTempleteNumber( - templateNumber, - actions.length, - ); - // create rich menu - const bounds = richmenuBounds(templateNumber); + const bounds = richmenuBounds(templeteNo); const areas: Array = actions.map( (action, index) => { // action.typeが'message'の場合、textプロパティがなければlabelで補完 @@ -83,7 +77,7 @@ export default class CreateRichMenu extends AbstractTool { // generate rich menu image const richMenuImagePath = await generateRichMenuImage( - templateNumber, + templeteNo, actions.map(action => action.label || ""), ); @@ -133,19 +127,19 @@ const __dirname = path.dirname(__filename); // Function to generate a rich menu image from a Markdown template export async function generateRichMenuImage( - templeteNumber: number, + templeteNo: number, texts: string[], ): Promise { const richMenuImagePath = path.join( os.tmpdir(), - `slide-0${templeteNumber}-${Date.now()}.png`, + `slide-0${templeteNo}-${Date.now()}.png`, ); const serverPath = process.env.SERVER_PATH || path.resolve(__dirname, "..", ".."); // 1. Read the Markdown template const srcPath = path.join( serverPath, - `richmenu-templetes/templete-0${templeteNumber}.md`, + `richmenu-templetes/templete-0${templeteNo}.md`, ); let content = await fsp.readFile(srcPath, "utf8"); for (let index = 0; index < texts.length; index++) { @@ -175,7 +169,7 @@ export async function generateRichMenuImage( // 4. Use puppeteer to convert HTML to PNG const browser = await puppeteer.launch(); const page = await browser.newPage(); - await page.setViewport({ width: 1600, height: 900 }); + await page.setViewport({ width: 1600, height: 910 }); await page.goto(`file://${tempHtmlPath}`, { waitUntil: "networkidle0", }); @@ -192,37 +186,15 @@ export async function generateRichMenuImage( } export const validateRichMenuImage = ( - templeteNumber: number, len: number, ): string | null => { - if (templeteNumber < 1 || templeteNumber > 7) { - return "Invalid templete number"; - } if (len < 1 || len > 6) { return "Invalid texts length"; } return null; }; -export const initializeTempleteNumber = ( - templeteNumber: number, - items: number, -): number => { - if (!templeteNumber) { - const templeteNumberMap = { - // text length: templete number - 1: 7, - 2: 6, - 3: 4, - 4: 2, - } as const; - templeteNumber = - templeteNumberMap[items as keyof typeof templeteNumberMap] || 1; - } - return templeteNumber; -}; - -export const richmenuBounds = (templeteNumber: number) => { +export const richmenuBounds = (templeteNo: number) => { const boundsMap: { [key: number]: { x: number; y: number; width: number; height: number }[]; } = { @@ -230,9 +202,9 @@ export const richmenuBounds = (templeteNumber: number) => { .map(i => [0, 1].map(j => ({ x: 533 * i, - y: 450 * j, + y: 455 * j, width: 533, - height: 450, + height: 455, })), ) .flat(), @@ -240,9 +212,9 @@ export const richmenuBounds = (templeteNumber: number) => { .map(i => [0, 1].map(j => ({ x: 800 * i, - y: 450 * j, + y: 455 * j, width: 800, - height: 450, + height: 455, })), ) .flat(), @@ -251,13 +223,13 @@ export const richmenuBounds = (templeteNumber: number) => { x: 0, y: 0, width: 1600, - height: 450, + height: 455, }, ...[0, 1, 2].map(i => ({ x: 533 * i, - y: 450, + y: 455, width: 533, - height: 450, + height: 455, })), ], 4: [ @@ -265,13 +237,13 @@ export const richmenuBounds = (templeteNumber: number) => { x: 0, y: 0, width: 800, - height: 900, + height: 910, }, ...[0, 1].map(i => ({ x: 800 * i, - y: 450, + y: 455, width: 800, - height: 450, + height: 455, })), ], 5: [0, 1].map(i => ({ @@ -281,20 +253,20 @@ export const richmenuBounds = (templeteNumber: number) => { height: 800, })), 6: [0, 1].map(i => ({ - x: 450 * i, + x: 455 * i, y: 0, - width: 450, - height: 900, + width: 455, + height: 910, })), 7: [ { x: 0, y: 0, width: 1600, - height: 900, + height: 910, }, ], }; - return boundsMap[templeteNumber]; + return boundsMap[templeteNo]; }; From b4f256b958a9f60252ef4b3868adf700df03019a Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 21:03:29 +0900 Subject: [PATCH 17/36] change templete actions area --- src/tools/createRichmMenu.ts | 161 +++++++++++++++++++---------------- 1 file changed, 89 insertions(+), 72 deletions(-) diff --git a/src/tools/createRichmMenu.ts b/src/tools/createRichmMenu.ts index 9046392..ba6f59f 100644 --- a/src/tools/createRichmMenu.ts +++ b/src/tools/createRichmMenu.ts @@ -185,88 +185,105 @@ export async function generateRichMenuImage( return richMenuImagePath; } -export const validateRichMenuImage = ( - len: number, -): string | null => { +const validateRichMenuImage = (len: number): string | null => { if (len < 1 || len > 6) { return "Invalid texts length"; } return null; }; -export const richmenuBounds = (templeteNo: number) => { - const boundsMap: { - [key: number]: { x: number; y: number; width: number; height: number }[]; - } = { - 1: [0, 1, 2] - .map(i => - [0, 1].map(j => ({ - x: 533 * i, - y: 455 * j, - width: 533, - height: 455, - })), - ) - .flat(), - 2: [0, 1] - .map(i => - [0, 1].map(j => ({ +const richmenuAreas = ( + templeteNo: number, + actions: messagingApi.Action[], +): messagingApi.RichMenuArea[] => { + const bounds = richmenuBounds(templeteNo); + return actions.map((action, index) => { + return { + bounds: bounds[index], + action: action as messagingApi.Action, + }; + }); +}; + +const richmenuBounds = (templeteNo: number) => { + const boundsMap: { x: number; y: number; width: number; height: number }[][] = + [ + [], + // templete-01 + [ + { + x: 0, + y: 0, + width: 1600, + height: 910, + }, + ], + // templete-02 + [0, 1].map(i => ({ + x: 455 * i, + y: 0, + width: 455, + height: 910, + })), + // templete-03 + [ + { + x: 0, + y: 0, + width: 800, + height: 910, + }, + ...[0, 1].map(i => ({ x: 800 * i, - y: 455 * j, + y: 455, width: 800, height: 455, })), - ) - .flat(), - 3: [ - { - x: 0, - y: 0, - width: 1600, - height: 455, - }, - ...[0, 1, 2].map(i => ({ - x: 533 * i, - y: 455, - width: 533, - height: 455, - })), - ], - 4: [ - { - x: 0, - y: 0, - width: 800, - height: 910, - }, - ...[0, 1].map(i => ({ - x: 800 * i, - y: 455, - width: 800, - height: 455, - })), - ], - 5: [0, 1].map(i => ({ - x: 0, - y: 800 * i, - width: 1600, - height: 800, - })), - 6: [0, 1].map(i => ({ - x: 455 * i, - y: 0, - width: 455, - height: 910, - })), - 7: [ - { - x: 0, - y: 0, - width: 1600, - height: 910, - }, - ], - }; + ], + // templete-04 + [0, 1] + .map(i => + [0, 1].map(j => ({ + x: 800 * i, + y: 455 * j, + width: 800, + height: 455, + })), + ) + .flat(), + // templete-05 + [ + { + x: 0, + y: 0, + width: 1066, + height: 910, + }, + { + x: 1066, + y: 0, + width: 533, + height: 910, + }, + ...[0, 1, 2].map(i => ({ + x: 533 * i, + y: 455, + width: 533, + height: 455, + })), + ], + // templete-06 + [0, 1] + .map(i => + [0, 1, 2].map(j => ({ + x: 533 * j, + y: 455 * i, + width: 533, + height: 455, + })), + ) + .flat(), + ]; return boundsMap[templeteNo]; }; From fac005c68915e67afdc2d4d5ffbc39420013dce1 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 21:03:47 +0900 Subject: [PATCH 18/36] refactor the codes --- src/tools/createRichmMenu.ts | 66 ++++++++++++++---------------------- 1 file changed, 25 insertions(+), 41 deletions(-) diff --git a/src/tools/createRichmMenu.ts b/src/tools/createRichmMenu.ts index ba6f59f..c7cff17 100644 --- a/src/tools/createRichmMenu.ts +++ b/src/tools/createRichmMenu.ts @@ -34,12 +34,16 @@ export default class CreateRichMenu extends AbstractTool { "Create a rich menu associated with your LINE Official Account.", { chatBarText: z.string().describe("The ID of the rich menu to create."), - actions: z.array(actionSchema), + actions: z + .array(actionSchema) + .describe("The actions of the rich menu."), }, async ({ chatBarText, actions }) => { let createRichMenuResponse: any = null; let setImageResponse: any = null; + let setDefaultResponse: any = null; const templeteNo = actions.length; + const lineActions = actions as messagingApi.Action[]; try { const error = validateRichMenuImage(templeteNo); if (error) { @@ -47,23 +51,11 @@ export default class CreateRichMenu extends AbstractTool { } // create rich menu - const bounds = richmenuBounds(templeteNo); - const areas: Array = actions.map( - (action, index) => { - // action.typeが'message'の場合、textプロパティがなければlabelで補完 - let areaAction = { ...action }; - if (areaAction.type === "message" && !areaAction.text) { - areaAction.text = areaAction.label || ""; - } - return { - bounds: bounds[index], - action: areaAction as messagingApi.Action, - }; - }, + const areas: Array = richmenuAreas( + templeteNo, + lineActions, ); - - // create rich menu - createRichMenuResponse = await this.client.createRichMenu({ + const createRichMenuParams = { name: chatBarText, chatBarText: chatBarText, selected: false, @@ -71,50 +63,42 @@ export default class CreateRichMenu extends AbstractTool { width: 1600, height: 910, }, - areas: areas, - }); + }; + createRichMenuResponse = + await this.client.createRichMenu(createRichMenuParams); const richMenuId = createRichMenuResponse.richMenuId; // generate rich menu image const richMenuImagePath = await generateRichMenuImage( templeteNo, - actions.map(action => action.label || ""), + lineActions, ); // upload rich menu image const imageBuffer = fs.readFileSync(richMenuImagePath); const imageType = "image/png"; const imageBlob = new Blob([imageBuffer], { type: imageType }); - const setImageResponse = await this.lineBlobClient.setRichMenuImage( + setImageResponse = await this.lineBlobClient.setRichMenuImage( richMenuId, imageBlob, ); // set default rich menu - const setDefaultResponse = - await this.client.setDefaultRichMenu(richMenuId); + setDefaultResponse = await this.client.setDefaultRichMenu(richMenuId); return createSuccessResponse({ richMenuId, + createRichMenuParams, + createRichMenuResponse, setImageResponse, setDefaultResponse, richMenuImagePath, - params: { - name: chatBarText, - chatBarText: chatBarText, - selected: false, - size: { - width: 1600, - height: 910, - }, - areas: areas, - }, }); } catch (error) { return createErrorResponse( - `create richmenu: ${JSON.stringify(error, null, 2)}\n` + - `createRichMenuResponse: ${JSON.stringify(createRichMenuResponse, null, 2)}\n` + - `setImageResponse: ${JSON.stringify(setImageResponse, null, 2)}`, + `createRichMenuResponse: ${JSON.stringify(createRichMenuResponse, null, 2)}\n` + + `setImageResponse: ${JSON.stringify(setImageResponse, null, 2)}\n` + + `setDefaultResponse: ${JSON.stringify(setDefaultResponse, null, 2)}\n`, ); } }, @@ -126,13 +110,13 @@ const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // Function to generate a rich menu image from a Markdown template -export async function generateRichMenuImage( +async function generateRichMenuImage( templeteNo: number, - texts: string[], + actions: messagingApi.Action[], ): Promise { const richMenuImagePath = path.join( os.tmpdir(), - `slide-0${templeteNo}-${Date.now()}.png`, + `templete-0${templeteNo}-${Date.now()}.png`, ); const serverPath = process.env.SERVER_PATH || path.resolve(__dirname, "..", ".."); @@ -142,9 +126,9 @@ export async function generateRichMenuImage( `richmenu-templetes/templete-0${templeteNo}.md`, ); let content = await fsp.readFile(srcPath, "utf8"); - for (let index = 0; index < texts.length; index++) { + for (let index = 0; index < actions.length; index++) { const pattern = new RegExp(`

item0${index + 1}

`, "g"); - content = content.replace(pattern, `

${texts[index]}

`); + content = content.replace(pattern, `

${actions[index].label}

`); } // 2. Convert Markdown to HTML using Marp From d709b290e76de55032e424df9fab020849968944 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 21:09:05 +0900 Subject: [PATCH 19/36] use const variable --- src/tools/createRichmMenu.ts | 63 +++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/tools/createRichmMenu.ts b/src/tools/createRichmMenu.ts index c7cff17..393e2af 100644 --- a/src/tools/createRichmMenu.ts +++ b/src/tools/createRichmMenu.ts @@ -15,6 +15,9 @@ import { fileURLToPath } from "url"; import { actionSchema } from "../common/schema/actionSchema.js"; import { promises as fsp } from "fs"; +const RICHMENU_HEIGHT = 910; +const RICHMENU_WIDTH = 1600; + export default class CreateRichMenu extends AbstractTool { private client: messagingApi.MessagingApiClient; private lineBlobClient: messagingApi.MessagingApiBlobClient; @@ -60,8 +63,8 @@ export default class CreateRichMenu extends AbstractTool { chatBarText: chatBarText, selected: false, size: { - width: 1600, - height: 910, + width: RICHMENU_WIDTH, + height: RICHMENU_HEIGHT, }, }; createRichMenuResponse = @@ -153,13 +156,13 @@ async function generateRichMenuImage( // 4. Use puppeteer to convert HTML to PNG const browser = await puppeteer.launch(); const page = await browser.newPage(); - await page.setViewport({ width: 1600, height: 910 }); + await page.setViewport({ width: RICHMENU_WIDTH, height: RICHMENU_HEIGHT }); await page.goto(`file://${tempHtmlPath}`, { waitUntil: "networkidle0", }); await page.screenshot({ path: richMenuImagePath as `${string}.png`, - clip: { x: 0, y: 0, width: 1600, height: 910 }, + clip: { x: 0, y: 0, width: RICHMENU_WIDTH, height: RICHMENU_HEIGHT }, }); await browser.close(); @@ -198,40 +201,40 @@ const richmenuBounds = (templeteNo: number) => { { x: 0, y: 0, - width: 1600, - height: 910, + width: RICHMENU_WIDTH, + height: RICHMENU_HEIGHT, }, ], // templete-02 [0, 1].map(i => ({ - x: 455 * i, + x: (RICHMENU_HEIGHT / 2) * i, y: 0, - width: 455, - height: 910, + width: RICHMENU_HEIGHT / 2, + height: RICHMENU_HEIGHT, })), // templete-03 [ { x: 0, y: 0, - width: 800, - height: 910, + width: RICHMENU_WIDTH / 3 * 2, + height: RICHMENU_HEIGHT, }, ...[0, 1].map(i => ({ x: 800 * i, - y: 455, + y: RICHMENU_WIDTH / 3 * 2, width: 800, - height: 455, + height: RICHMENU_HEIGHT / 2, })), ], // templete-04 [0, 1] .map(i => [0, 1].map(j => ({ - x: 800 * i, - y: 455 * j, - width: 800, - height: 455, + x: (RICHMENU_HEIGHT / 2) * i, + y: (RICHMENU_HEIGHT / 2) * j, + width: RICHMENU_HEIGHT / 2, + height: RICHMENU_HEIGHT / 2, })), ) .flat(), @@ -240,30 +243,30 @@ const richmenuBounds = (templeteNo: number) => { { x: 0, y: 0, - width: 1066, - height: 910, + width: (RICHMENU_WIDTH / 3) * 2, + height: RICHMENU_HEIGHT, }, { - x: 1066, + x: (RICHMENU_WIDTH / 3) * 2, y: 0, - width: 533, - height: 910, + width: RICHMENU_WIDTH / 3, + height: RICHMENU_HEIGHT, }, ...[0, 1, 2].map(i => ({ - x: 533 * i, - y: 455, - width: 533, - height: 455, + x: (RICHMENU_WIDTH / 3) * i, + y: RICHMENU_HEIGHT / 2, + width: RICHMENU_WIDTH / 3, + height: RICHMENU_HEIGHT / 2, })), ], // templete-06 [0, 1] .map(i => [0, 1, 2].map(j => ({ - x: 533 * j, - y: 455 * i, - width: 533, - height: 455, + x: (RICHMENU_WIDTH / 3) * j, + y: (RICHMENU_HEIGHT / 2) * i, + width: RICHMENU_WIDTH / 3, + height: RICHMENU_HEIGHT / 2, })), ) .flat(), From 760c05945cdc1fda3a8c95d28b9cc285b714bf35 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 21:25:49 +0900 Subject: [PATCH 20/36] rename the filename --- src/index.ts | 2 +- src/tools/{createRichmMenu.ts => createRichMenu.ts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/tools/{createRichmMenu.ts => createRichMenu.ts} (100%) diff --git a/src/index.ts b/src/index.ts index 3c6c1c3..6e5a039 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,7 +30,7 @@ import GetMessageQuota from "./tools/getMessageQuota.js"; import GetRichMenuList from "./tools/getRichMenuList.js"; import DeleteRichMenu from "./tools/deleteRichMenu.js"; import SetRichMenuDefault from "./tools/setRichMenuDefault.js"; -import CreateRichMenu from "./tools/createRichmMenu.js"; +import CreateRichMenu from "./tools/createRichMenu.js"; import DownloadRichMenuImage from "./tools/downloadRichMenuImage.js"; const server = new McpServer({ diff --git a/src/tools/createRichmMenu.ts b/src/tools/createRichMenu.ts similarity index 100% rename from src/tools/createRichmMenu.ts rename to src/tools/createRichMenu.ts From 280a98cd19633ee195a8dc55c51f16dbde722174 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 21:29:59 +0900 Subject: [PATCH 21/36] add the areas and some --- src/tools/createRichMenu.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 393e2af..c7f2528 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -60,12 +60,13 @@ export default class CreateRichMenu extends AbstractTool { ); const createRichMenuParams = { name: chatBarText, - chatBarText: chatBarText, - selected: false, + chatBarText, + selected: true, size: { width: RICHMENU_WIDTH, height: RICHMENU_HEIGHT, }, + areas, }; createRichMenuResponse = await this.client.createRichMenu(createRichMenuParams); @@ -217,12 +218,12 @@ const richmenuBounds = (templeteNo: number) => { { x: 0, y: 0, - width: RICHMENU_WIDTH / 3 * 2, + width: (RICHMENU_WIDTH / 3) * 2, height: RICHMENU_HEIGHT, }, ...[0, 1].map(i => ({ x: 800 * i, - y: RICHMENU_WIDTH / 3 * 2, + y: (RICHMENU_WIDTH / 3) * 2, width: 800, height: RICHMENU_HEIGHT / 2, })), From 73416bf3b300ab9504a31841864f5e4f453b40d2 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sat, 14 Jun 2025 23:15:36 +0900 Subject: [PATCH 22/36] debug --- richmenu-templetes/templete-05.md | 6 +++--- src/tools/createRichMenu.ts | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/richmenu-templetes/templete-05.md b/richmenu-templetes/templete-05.md index e364b16..117935c 100644 --- a/richmenu-templetes/templete-05.md +++ b/richmenu-templetes/templete-05.md @@ -66,6 +66,9 @@ section > :last-child {

item01

+

item02

+
+

item03

@@ -74,7 +77,4 @@ section > :last-child {

item05

-
-

item06

-
diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index c7f2528..2856799 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -208,9 +208,9 @@ const richmenuBounds = (templeteNo: number) => { ], // templete-02 [0, 1].map(i => ({ - x: (RICHMENU_HEIGHT / 2) * i, + x: (RICHMENU_WIDTH / 2) * i, y: 0, - width: RICHMENU_HEIGHT / 2, + width: RICHMENU_WIDTH / 2, height: RICHMENU_HEIGHT, })), // templete-03 @@ -222,9 +222,9 @@ const richmenuBounds = (templeteNo: number) => { height: RICHMENU_HEIGHT, }, ...[0, 1].map(i => ({ - x: 800 * i, - y: (RICHMENU_WIDTH / 3) * 2, - width: 800, + x: (RICHMENU_WIDTH / 3) * 2, + y: (RICHMENU_HEIGHT / 3) * i, + width: RICHMENU_WIDTH / 3, height: RICHMENU_HEIGHT / 2, })), ], @@ -232,9 +232,9 @@ const richmenuBounds = (templeteNo: number) => { [0, 1] .map(i => [0, 1].map(j => ({ - x: (RICHMENU_HEIGHT / 2) * i, + x: (RICHMENU_WIDTH / 2) * i, y: (RICHMENU_HEIGHT / 2) * j, - width: RICHMENU_HEIGHT / 2, + width: RICHMENU_WIDTH / 2, height: RICHMENU_HEIGHT / 2, })), ) @@ -245,13 +245,13 @@ const richmenuBounds = (templeteNo: number) => { x: 0, y: 0, width: (RICHMENU_WIDTH / 3) * 2, - height: RICHMENU_HEIGHT, + height: RICHMENU_HEIGHT / 2, }, { x: (RICHMENU_WIDTH / 3) * 2, y: 0, width: RICHMENU_WIDTH / 3, - height: RICHMENU_HEIGHT, + height: RICHMENU_HEIGHT / 2, }, ...[0, 1, 2].map(i => ({ x: (RICHMENU_WIDTH / 3) * i, From 6237d7edc98a86e14954d1cc007a2e1e1c20fec4 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 15 Jun 2025 00:05:52 +0900 Subject: [PATCH 23/36] update the templetes --- richmenu-templetes/templete-01.md | 16 +++----- richmenu-templetes/templete-02.md | 27 ++++-------- richmenu-templetes/templete-03.md | 68 +++++++++++++------------------ richmenu-templetes/templete-04.md | 42 ++++++++----------- richmenu-templetes/templete-05.md | 49 +++++++++------------- richmenu-templetes/templete-06.md | 42 ++++++++----------- 6 files changed, 95 insertions(+), 149 deletions(-) diff --git a/richmenu-templetes/templete-01.md b/richmenu-templetes/templete-01.md index 623d824..59070dc 100644 --- a/richmenu-templetes/templete-01.md +++ b/richmenu-templetes/templete-01.md @@ -8,11 +8,7 @@ section { padding: 0 !important; background-color: orange; height: 100% !important; -} -section > :first-child { margin-top: 0 !important; -} -section > :last-child { margin-bottom: 0 !important; } .columns-container { @@ -21,20 +17,15 @@ section > :last-child { width: 100%; height: 100%; } - .column-item { display: flex; flex-direction: column; justify-content: center; align-items: center; - margin: 10px; background-color: white; box-sizing: border-box; - height: calc((100% - 20px)); - width: calc((100% - 20px)); overflow: hidden; } - .column-item h3 { font-weight: bold; width: 100%; @@ -43,10 +34,15 @@ section > :last-child { white-space: normal; word-break: break-all; } +.column-item-01 { + margin: 10px; + height: calc((100% - 20px)); + width: calc((100% - 20px)); +}
-
+

item01

diff --git a/richmenu-templetes/templete-02.md b/richmenu-templetes/templete-02.md index 3f2546a..554fa3a 100644 --- a/richmenu-templetes/templete-02.md +++ b/richmenu-templetes/templete-02.md @@ -2,58 +2,49 @@ marp: true size: 16:9 --- - -
-
+

item01

-
+

item02

diff --git a/richmenu-templetes/templete-03.md b/richmenu-templetes/templete-03.md index 8e54799..16c4c27 100644 --- a/richmenu-templetes/templete-03.md +++ b/richmenu-templetes/templete-03.md @@ -2,79 +2,69 @@ marp: true size: 16:9 --- - - -
-
+
+

item01

-
-
+
+

item02

-
+

item03

diff --git a/richmenu-templetes/templete-04.md b/richmenu-templetes/templete-04.md index 8f9ece7..2bbfe67 100644 --- a/richmenu-templetes/templete-04.md +++ b/richmenu-templetes/templete-04.md @@ -2,28 +2,20 @@ marp: true size: 16:9 --- - -
-
+

item01

-
+

item02

-
+

item03

-
+

item04

diff --git a/richmenu-templetes/templete-05.md b/richmenu-templetes/templete-05.md index 117935c..ff09a3d 100644 --- a/richmenu-templetes/templete-05.md +++ b/richmenu-templetes/templete-05.md @@ -3,28 +3,20 @@ marp: true size: 16:9 --- -
-
+

item01

-
+

item02

-
+

item03

-
+

item04

-
+

item05

diff --git a/richmenu-templetes/templete-06.md b/richmenu-templetes/templete-06.md index 3386488..454e906 100644 --- a/richmenu-templetes/templete-06.md +++ b/richmenu-templetes/templete-06.md @@ -3,28 +3,20 @@ marp: true size: 16:9 --- -
-
+

item01

-
+

item02

-
+

item03

-
+

item04

-
+

item05

-
+

item06

From 36f68fd4100895097a8256fc91a60a11cc96e3be Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 15 Jun 2025 09:50:47 +0900 Subject: [PATCH 24/36] self review --- package-lock.json | 334 ++-- package.json | 6 +- pnpm-lock.yaml | 2603 ++++++++++++++++++++++++++++ richmenu-templetes/templete-01.md | 4 +- richmenu-templetes/templete-02.md | 3 +- richmenu-templetes/templete-03.md | 31 +- richmenu-templetes/templete-04.md | 15 +- richmenu-templetes/templete-05.md | 22 +- richmenu-templetes/templete-06.md | 20 +- src/common/schema/actionSchema.ts | 6 + src/index.ts | 2 - src/tools/createRichMenu.ts | 46 +- src/tools/downloadRichMenuImage.ts | 38 - 13 files changed, 2802 insertions(+), 328 deletions(-) create mode 100644 pnpm-lock.yaml delete mode 100644 src/tools/downloadRichMenuImage.ts diff --git a/package-lock.json b/package-lock.json index b4144fe..7a4ef79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "@marp-team/marp-cli": "^4.1.2", "@marp-team/marp-core": "^4.1.0", "@modelcontextprotocol/sdk": "^1.8.0", - "file-type": "^21.0.0", "zod": "^3.24.2" }, "bin": { @@ -52,9 +51,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", "funding": [ { "type": "github", @@ -77,9 +76,9 @@ } }, "node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", "funding": [ { "type": "github", @@ -559,18 +558,18 @@ } }, "node_modules/@marp-team/marp-cli": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@marp-team/marp-cli/-/marp-cli-4.1.2.tgz", - "integrity": "sha512-LYfSmggx63MsMHTjpWs/CeVMssL6qerFBP6mgsrXwlDKH/d991ghbRxtT10oohw8mxLOtD8VKo/XZRxwC5JlOA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@marp-team/marp-cli/-/marp-cli-4.2.0.tgz", + "integrity": "sha512-98yHfGeRxWzKff6aiAhXlyXnSbu5hr4NGzSfiUODEbH0m5Rri/hVneYGKCebWWh7mc3ZFlkx+w72+NCB75sj7A==", "dependencies": { - "@marp-team/marp-core": "^4.0.1", - "@marp-team/marpit": "^3.1.2", + "@marp-team/marp-core": "^4.1.0", + "@marp-team/marpit": "^3.1.3", "chokidar": "^4.0.3", "cosmiconfig": "^9.0.0", - "puppeteer-core": "24.2.1", + "puppeteer-core": "^24.10.0", "serve-index": "^1.9.1", "tmp": "^0.2.3", - "ws": "^8.18.0", + "ws": "^8.18.2", "yargs": "^17.7.2" }, "bin": { @@ -693,15 +692,15 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.7.1.tgz", - "integrity": "sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ==", + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.5.tgz", + "integrity": "sha512-eifa0o+i8dERnngJwKrfp3dEq7ia5XFyoqB17S4gK8GhsQE4/P8nxOfQSE0zQHxzzLo/cmF+7+ywEQ7wK7Fb+w==", "dependencies": { - "debug": "^4.4.0", + "debug": "^4.4.1", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", - "semver": "^7.7.0", + "semver": "^7.7.2", "tar-fs": "^3.0.8", "yargs": "^17.7.2" }, @@ -712,6 +711,22 @@ "node": ">=18" } }, + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/@puppeteer/browsers/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -723,28 +738,6 @@ "node": ">=10" } }, - "node_modules/@tokenizer/inflate": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", - "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", - "dependencies": { - "debug": "^4.4.0", - "fflate": "^0.8.2", - "token-types": "^6.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -789,7 +782,6 @@ "node": ">= 0.6" } }, -<<<<<<< HEAD "node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", @@ -798,6 +790,22 @@ "node": ">= 14" } }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -834,22 +842,6 @@ }, "engines": { "node": ">=4" -======= - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" ->>>>>>> origin/main } }, "node_modules/asynckit": { @@ -1058,9 +1050,9 @@ } }, "node_modules/chromium-bidi": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-1.3.0.tgz", - "integrity": "sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-5.1.0.tgz", + "integrity": "sha512-9MSRhWRVoRPDG0TgzkHrshFSJJNZzfY5UFqUMuksg7zL1yoZIZ3jLB0YAgHclbiAxPI86pBnwDX1tbzoiV8aFw==", "dependencies": { "mitt": "^3.0.1", "zod": "^3.24.1" @@ -1284,9 +1276,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1402036", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1402036.tgz", - "integrity": "sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg==" + "version": "0.0.1452169", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1452169.tgz", + "integrity": "sha512-FOFDVMGrAUNp0dDKsAU1TorWJUx2JOU1k9xdgBKKJF3IBh/Uhl2yswG5r3TEAOrCiGY2QRp1e6LVDQrCsTKO4g==" }, "node_modules/dunder-proto": { "version": "1.0.1", @@ -1684,7 +1676,6 @@ "express": "^4.11 || 5 || ^5.0.0-beta.1" } }, -<<<<<<< HEAD "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -1718,17 +1709,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" -======= "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" ->>>>>>> origin/main + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-glob": { "version": "3.3.3", @@ -1771,28 +1761,6 @@ "pend": "~1.2.0" } }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" - }, - "node_modules/file-type": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", - "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", - "dependencies": { - "@tokenizer/inflate": "^0.2.7", - "strtok3": "^10.2.2", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -2134,25 +2102,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -2289,7 +2238,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, -<<<<<<< HEAD "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2316,6 +2264,12 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, "node_modules/katex": { "version": "0.16.22", "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", @@ -2377,13 +2331,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/markdown-it-front-matter/-/markdown-it-front-matter-0.2.4.tgz", "integrity": "sha512-25GUs0yjS2hLl8zAemVndeEzThB1p42yxuDEKbd4JlL3jiz+jsm6e56Ya8B0VREOkNxLYB4TTwaoPJ3ElMmW+w==" -======= - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" ->>>>>>> origin/main }, "node_modules/math-intrinsics": { "version": "1.1.0", @@ -2715,18 +2662,6 @@ "node": ">=16" } }, - "node_modules/peek-readable": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-7.0.0.tgz", - "integrity": "sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -2760,9 +2695,9 @@ } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz", + "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==", "funding": [ { "type": "opencollective", @@ -2778,7 +2713,7 @@ } ], "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -2787,9 +2722,9 @@ } }, "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "funding": [ { "type": "github", @@ -2801,7 +2736,7 @@ } ], "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, @@ -2895,41 +2830,55 @@ "once": "^1.3.1" } }, -<<<<<<< HEAD - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", -======= "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", ->>>>>>> origin/main "engines": { "node": ">=6" } }, -<<<<<<< HEAD + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, "node_modules/puppeteer-core": { - "version": "24.2.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.2.1.tgz", - "integrity": "sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ==", - "dependencies": { - "@puppeteer/browsers": "2.7.1", - "chromium-bidi": "1.3.0", - "debug": "^4.4.0", - "devtools-protocol": "0.0.1402036", + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.10.1.tgz", + "integrity": "sha512-AE6doA9znmEEps/pC5lc9p0zejCdNLR6UBp3EZ49/15Nbvh+uklXxGox7Qh8/lFGqGVwxInl0TXmsOmIuIMwiQ==", + "dependencies": { + "@puppeteer/browsers": "2.10.5", + "chromium-bidi": "5.1.0", + "debug": "^4.4.1", + "devtools-protocol": "0.0.1452169", "typed-query-selector": "^2.12.0", - "ws": "^8.18.0" + "ws": "^8.18.2" }, "engines": { "node": ">=18" } }, -======= ->>>>>>> origin/main + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -3446,9 +3395,9 @@ } }, "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", + "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -3524,9 +3473,9 @@ } }, "node_modules/streamx": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", + "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" @@ -3569,22 +3518,6 @@ "node": ">=0.10.0" } }, - "node_modules/strtok3": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.2.2.tgz", - "integrity": "sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -3659,22 +3592,6 @@ "node": ">=0.6" } }, - "node_modules/token-types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", - "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -3738,17 +3655,6 @@ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, - "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", @@ -3764,12 +3670,6 @@ "node": ">= 0.8" } }, -<<<<<<< HEAD - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" -======= "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3778,7 +3678,11 @@ "dependencies": { "punycode": "^2.1.0" } ->>>>>>> origin/main + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vary": { "version": "1.1.2", diff --git a/package.json b/package.json index 510366d..77e9f66 100644 --- a/package.json +++ b/package.json @@ -14,14 +14,13 @@ "dist" ], "scripts": { - "build": "npm run prettier -- --write && tsc && shx chmod +x dist/*.js", + "build": "tsc && shx chmod +x dist/*.js", "prettier": "prettier \"src/**/*.ts\"", "format": "npm run prettier -- --write", "format:check": "npm run prettier -- -l", "clean": "rm -rf dist/*", "prebuild": "npm run format:check && npm run clean", - "release": "npm run build && npm publish --provenance --access public", - "build:slides": "marp slides.md --png -o output01.png" + "release": "npm run build && npm publish --provenance --access public" }, "repository": { "type": "git", @@ -39,7 +38,6 @@ "@marp-team/marp-cli": "^4.1.2", "@marp-team/marp-core": "^4.1.0", "@modelcontextprotocol/sdk": "^1.8.0", - "file-type": "^21.0.0", "zod": "^3.24.2" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..2b8319f --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2603 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@line/bot-sdk': + specifier: ^10.0.0 + version: 10.0.0 + '@marp-team/marp-cli': + specifier: ^4.1.2 + version: 4.1.2(typescript@5.8.3) + '@marp-team/marp-core': + specifier: ^4.1.0 + version: 4.1.0 + '@modelcontextprotocol/sdk': + specifier: ^1.8.0 + version: 1.9.0 + zod: + specifier: ^3.24.2 + version: 3.24.2 + devDependencies: + '@types/node': + specifier: ^22 + version: 22.14.1 + prettier: + specifier: 3.5.3 + version: 3.5.3 + shx: + specifier: ^0.4.0 + version: 0.4.0 + tsx: + specifier: ^4.19.3 + version: 4.19.3 + typescript: + specifier: ^5.6.2 + version: 5.8.3 + +packages: + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@csstools/postcss-is-pseudo-class@5.0.1': + resolution: {integrity: sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/selector-resolve-nested@3.1.0': + resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@esbuild/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.2': + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.2': + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.2': + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.2': + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.2': + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.2': + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.2': + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.2': + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.2': + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.2': + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.2': + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.2': + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.2': + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.2': + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.2': + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.2': + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.2': + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.2': + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.2': + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.2': + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.2': + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.2': + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.2': + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.2': + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@line/bot-sdk@10.0.0': + resolution: {integrity: sha512-Uj6ZVivMDzZUV4Jm/RSsJinryyj3HS+fnyYob+mNl4/uUDWQ2OAEZDVopl0v0tcjXlCRC6GUB+nfEZLgBFI+dg==} + engines: {node: '>=20'} + + '@marp-team/marp-cli@4.1.2': + resolution: {integrity: sha512-LYfSmggx63MsMHTjpWs/CeVMssL6qerFBP6mgsrXwlDKH/d991ghbRxtT10oohw8mxLOtD8VKo/XZRxwC5JlOA==} + engines: {node: '>=18'} + hasBin: true + + '@marp-team/marp-core@4.1.0': + resolution: {integrity: sha512-QJ79tGpr3itR4TVQ4Cbe9J0kLHg9sR5cNX19OWSHeVK9EjDzMA9iCwS+OCRMKBAvRHo0LGUJC3lm9wUBg3Ud6A==} + engines: {node: '>=18'} + + '@marp-team/marpit-svg-polyfill@2.1.0': + resolution: {integrity: sha512-VqCoAKwv1HJdzZp36dDPxznz2JZgRjkVSSPHpCzk72G2N753F0HPKXjevdjxmzN6gir9bUGBgMD1SguWJIi11A==} + engines: {node: '>=10'} + peerDependencies: + '@marp-team/marpit': '>=0.5.0' + peerDependenciesMeta: + '@marp-team/marpit': + optional: true + + '@marp-team/marpit@3.1.3': + resolution: {integrity: sha512-ApI1SmNK7qy6x1D9h9HGBPJorPhclincNXf4VXrpCJ1+gNFzVf8Aga10Q1JJYFb/5N5FtFxTodMZwMqB31S+Ig==} + engines: {node: '>=18'} + + '@modelcontextprotocol/sdk@1.9.0': + resolution: {integrity: sha512-Jq2EUCQpe0iyO5FGpzVYDNFR6oR53AIrwph9yWl7uSc7IWUMsrmpmSaTGra5hQNunXpM+9oit85p924jWuHzUA==} + engines: {node: '>=18'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@puppeteer/browsers@2.7.1': + resolution: {integrity: sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ==} + engines: {node: '>=18'} + hasBin: true + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@types/node@22.14.1': + resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@xmldom/xmldom@0.9.8': + resolution: {integrity: sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A==} + engines: {node: '>=14.6'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + bare-fs@4.1.5: + resolution: {integrity: sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.1: + resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chromium-bidi@1.3.0: + resolution: {integrity: sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw==} + peerDependencies: + devtools-protocol: '*' + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssfilter@0.0.10: + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + devtools-protocol@0.0.1402036: + resolution: {integrity: sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.25.2: + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + esm@3.2.25: + resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} + engines: {node: '>=6'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventsource-parser@3.0.1: + resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.6: + resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} + engines: {node: '>=18.0.0'} + + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + get-uri@6.0.4: + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + engines: {node: '>= 14'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + katex@0.16.22: + resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} + hasBin: true + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + markdown-it-front-matter@0.2.4: + resolution: {integrity: sha512-25GUs0yjS2hLl8zAemVndeEzThB1p42yxuDEKbd4JlL3jiz+jsm6e56Ya8B0VREOkNxLYB4TTwaoPJ3ElMmW+w==} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mathjax-full@3.2.2: + resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + mhchemparser@4.2.1: + resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mj-context-menu@0.6.1: + resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pkce-challenge@5.0.0: + resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + engines: {node: '>=16.20.0'} + + postcss-nesting@13.0.1: + resolution: {integrity: sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss@8.5.4: + resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + engines: {node: '>=14'} + hasBin: true + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + puppeteer-core@24.2.1: + resolution: {integrity: sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ==} + engines: {node: '>=18'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + + serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shelljs@0.9.2: + resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} + engines: {node: '>=18'} + hasBin: true + + shx@0.4.0: + resolution: {integrity: sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==} + engines: {node: '>=18'} + hasBin: true + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + speech-rule-engine@4.1.2: + resolution: {integrity: sha512-S6ji+flMEga+1QU79NDbwZ8Ivf0S/MpupQQiIC0rTpU/ZTKgcajijJJb1OcByBQDjrXCN1/DJtGz4ZJeBMPGJw==} + hasBin: true + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tar-fs@3.0.9: + resolution: {integrity: sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wicked-good-xpath@1.3.0: + resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.2: + resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xss@1.0.15: + resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} + engines: {node: '>= 0.10.0'} + hasBin: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + zod-to-json-schema@3.24.5: + resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + peerDependencies: + zod: ^3.24.1 + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + +snapshots: + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.27.1': {} + + '@csstools/postcss-is-pseudo-class@5.0.1(postcss@8.5.4)': + dependencies: + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + postcss: 8.5.4 + postcss-selector-parser: 7.1.0 + + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@esbuild/aix-ppc64@0.25.2': + optional: true + + '@esbuild/android-arm64@0.25.2': + optional: true + + '@esbuild/android-arm@0.25.2': + optional: true + + '@esbuild/android-x64@0.25.2': + optional: true + + '@esbuild/darwin-arm64@0.25.2': + optional: true + + '@esbuild/darwin-x64@0.25.2': + optional: true + + '@esbuild/freebsd-arm64@0.25.2': + optional: true + + '@esbuild/freebsd-x64@0.25.2': + optional: true + + '@esbuild/linux-arm64@0.25.2': + optional: true + + '@esbuild/linux-arm@0.25.2': + optional: true + + '@esbuild/linux-ia32@0.25.2': + optional: true + + '@esbuild/linux-loong64@0.25.2': + optional: true + + '@esbuild/linux-mips64el@0.25.2': + optional: true + + '@esbuild/linux-ppc64@0.25.2': + optional: true + + '@esbuild/linux-riscv64@0.25.2': + optional: true + + '@esbuild/linux-s390x@0.25.2': + optional: true + + '@esbuild/linux-x64@0.25.2': + optional: true + + '@esbuild/netbsd-arm64@0.25.2': + optional: true + + '@esbuild/netbsd-x64@0.25.2': + optional: true + + '@esbuild/openbsd-arm64@0.25.2': + optional: true + + '@esbuild/openbsd-x64@0.25.2': + optional: true + + '@esbuild/sunos-x64@0.25.2': + optional: true + + '@esbuild/win32-arm64@0.25.2': + optional: true + + '@esbuild/win32-ia32@0.25.2': + optional: true + + '@esbuild/win32-x64@0.25.2': + optional: true + + '@line/bot-sdk@10.0.0': + dependencies: + '@types/node': 22.14.1 + optionalDependencies: + axios: 1.8.4 + transitivePeerDependencies: + - debug + + '@marp-team/marp-cli@4.1.2(typescript@5.8.3)': + dependencies: + '@marp-team/marp-core': 4.1.0 + '@marp-team/marpit': 3.1.3 + chokidar: 4.0.3 + cosmiconfig: 9.0.0(typescript@5.8.3) + puppeteer-core: 24.2.1 + serve-index: 1.9.1 + tmp: 0.2.3 + ws: 8.18.2 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + + '@marp-team/marp-core@4.1.0': + dependencies: + '@marp-team/marpit': 3.1.3 + '@marp-team/marpit-svg-polyfill': 2.1.0(@marp-team/marpit@3.1.3) + highlight.js: 11.11.1 + katex: 0.16.22 + mathjax-full: 3.2.2 + postcss: 8.5.4 + postcss-selector-parser: 7.1.0 + xss: 1.0.15 + + '@marp-team/marpit-svg-polyfill@2.1.0(@marp-team/marpit@3.1.3)': + optionalDependencies: + '@marp-team/marpit': 3.1.3 + + '@marp-team/marpit@3.1.3': + dependencies: + '@csstools/postcss-is-pseudo-class': 5.0.1(postcss@8.5.4) + cssesc: 3.0.0 + js-yaml: 4.1.0 + lodash.kebabcase: 4.1.1 + markdown-it: 14.1.0 + markdown-it-front-matter: 0.2.4 + postcss: 8.5.4 + postcss-nesting: 13.0.1(postcss@8.5.4) + + '@modelcontextprotocol/sdk@1.9.0': + dependencies: + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.6 + express: 5.1.0 + express-rate-limit: 7.5.0(express@5.1.0) + pkce-challenge: 5.0.0 + raw-body: 3.0.0 + zod: 3.24.2 + zod-to-json-schema: 3.24.5(zod@3.24.2) + transitivePeerDependencies: + - supports-color + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@puppeteer/browsers@2.7.1': + dependencies: + debug: 4.4.0 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.2 + tar-fs: 3.0.9 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@types/node@22.14.1': + dependencies: + undici-types: 6.21.0 + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.14.1 + optional: true + + '@xmldom/xmldom@0.9.8': {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + + agent-base@7.1.3: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + asynckit@0.4.0: + optional: true + + axios@1.8.4: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + optional: true + + b4a@1.6.7: {} + + bare-events@2.5.4: + optional: true + + bare-fs@4.1.5: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.5.4) + optional: true + + bare-os@3.6.1: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.1 + optional: true + + bare-stream@2.6.5(bare-events@2.5.4): + dependencies: + streamx: 2.22.1 + optionalDependencies: + bare-events: 2.5.4 + optional: true + + basic-ftp@5.0.5: {} + + batch@0.6.1: {} + + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.1 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-crc32@0.2.13: {} + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chromium-bidi@1.3.0(devtools-protocol@0.0.1402036): + dependencies: + devtools-protocol: 0.0.1402036 + mitt: 3.0.1 + zod: 3.24.2 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + optional: true + + commander@13.1.0: {} + + commander@2.20.3: {} + + commander@8.3.0: {} + + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@9.0.0(typescript@5.8.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.8.3 + + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + cssfilter@0.0.10: {} + + data-uri-to-buffer@6.0.2: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + delayed-stream@1.0.0: + optional: true + + depd@1.1.2: {} + + depd@2.0.0: {} + + devtools-protocol@0.0.1402036: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ee-first@1.1.1: {} + + emoji-regex@8.0.0: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@4.5.0: {} + + env-paths@2.2.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + optional: true + + esbuild@0.25.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.2 + '@esbuild/android-arm': 0.25.2 + '@esbuild/android-arm64': 0.25.2 + '@esbuild/android-x64': 0.25.2 + '@esbuild/darwin-arm64': 0.25.2 + '@esbuild/darwin-x64': 0.25.2 + '@esbuild/freebsd-arm64': 0.25.2 + '@esbuild/freebsd-x64': 0.25.2 + '@esbuild/linux-arm': 0.25.2 + '@esbuild/linux-arm64': 0.25.2 + '@esbuild/linux-ia32': 0.25.2 + '@esbuild/linux-loong64': 0.25.2 + '@esbuild/linux-mips64el': 0.25.2 + '@esbuild/linux-ppc64': 0.25.2 + '@esbuild/linux-riscv64': 0.25.2 + '@esbuild/linux-s390x': 0.25.2 + '@esbuild/linux-x64': 0.25.2 + '@esbuild/netbsd-arm64': 0.25.2 + '@esbuild/netbsd-x64': 0.25.2 + '@esbuild/openbsd-arm64': 0.25.2 + '@esbuild/openbsd-x64': 0.25.2 + '@esbuild/sunos-x64': 0.25.2 + '@esbuild/win32-arm64': 0.25.2 + '@esbuild/win32-ia32': 0.25.2 + '@esbuild/win32-x64': 0.25.2 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esm@3.2.25: {} + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + eventsource-parser@3.0.1: {} + + eventsource@3.0.6: + dependencies: + eventsource-parser: 3.0.1 + + execa@1.0.0: + dependencies: + cross-spawn: 6.0.6 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + + express-rate-limit@7.5.0(express@5.1.0): + dependencies: + express: 5.1.0 + + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + extract-zip@2.0.1: + dependencies: + debug: 4.4.1 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-fifo@1.3.2: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@2.1.0: + dependencies: + debug: 4.4.1 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + follow-redirects@1.15.9: + optional: true + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + optional: true + + forwarded@0.2.0: {} + + fresh@2.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@4.1.0: + dependencies: + pump: 3.0.2 + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + get-uri@6.0.4: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + gopd@1.2.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + optional: true + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + highlight.js@11.11.1: {} + + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + inherits@2.0.3: {} + + inherits@2.0.4: {} + + interpret@1.4.0: {} + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + ipaddr.js@1.9.1: {} + + is-arrayish@0.2.1: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-promise@4.0.0: {} + + is-stream@1.1.0: {} + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@1.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + katex@0.16.22: + dependencies: + commander: 8.3.0 + + lines-and-columns@1.2.4: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + lodash.kebabcase@4.1.1: {} + + lru-cache@7.18.3: {} + + markdown-it-front-matter@0.2.4: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + math-intrinsics@1.1.0: {} + + mathjax-full@3.2.2: + dependencies: + esm: 3.2.25 + mhchemparser: 4.2.1 + mj-context-menu: 0.6.1 + speech-rule-engine: 4.1.2 + + mdurl@2.0.0: {} + + media-typer@1.1.0: {} + + merge-descriptors@2.0.0: {} + + merge2@1.4.1: {} + + mhchemparser@4.2.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + + minimist@1.2.8: {} + + mitt@3.0.1: {} + + mj-context-menu@0.6.1: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + negotiator@0.6.3: {} + + negotiator@1.0.0: {} + + netmask@2.0.2: {} + + nice-try@1.0.5: {} + + npm-run-path@2.0.2: + dependencies: + path-key: 2.0.1 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-finally@1.0.0: {} + + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.3 + debug: 4.4.1 + get-uri: 6.0.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parseurl@1.3.3: {} + + path-key@2.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-to-regexp@8.2.0: {} + + pend@1.2.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pkce-challenge@5.0.0: {} + + postcss-nesting@13.0.1(postcss@8.5.4): + dependencies: + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.0) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + postcss: 8.5.4 + postcss-selector-parser: 7.1.0 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.4: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@3.5.3: {} + + progress@2.0.3: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode.js@2.3.1: {} + + puppeteer-core@24.2.1: + dependencies: + '@puppeteer/browsers': 2.7.1 + chromium-bidi: 1.3.0(devtools-protocol@0.0.1402036) + debug: 4.4.0 + devtools-protocol: 0.0.1402036 + typed-query-selector: 2.12.0 + ws: 8.18.2 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + range-parser@1.2.1: {} + + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + + readdirp@4.1.2: {} + + rechoir@0.6.2: + dependencies: + resolve: 1.22.10 + + require-directory@2.1.1: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + router@2.2.0: + dependencies: + debug: 4.4.1 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + semver@5.7.2: {} + + semver@7.7.2: {} + + send@1.2.0: + dependencies: + debug: 4.4.1 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-index@1.9.1: + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.1.0: {} + + setprototypeof@1.2.0: {} + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + shelljs@0.9.2: + dependencies: + execa: 1.0.0 + fast-glob: 3.3.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + shx@0.4.0: + dependencies: + minimist: 1.2.8 + shelljs: 0.9.2 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1 + socks: 2.8.4 + transitivePeerDependencies: + - supports-color + + socks@2.8.4: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} + + source-map@0.6.1: + optional: true + + speech-rule-engine@4.1.2: + dependencies: + '@xmldom/xmldom': 0.9.8 + commander: 13.1.0 + wicked-good-xpath: 1.3.0 + + sprintf-js@1.1.3: {} + + statuses@1.5.0: {} + + statuses@2.0.1: {} + + streamx@2.22.1: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-eof@1.0.0: {} + + supports-preserve-symlinks-flag@1.0.0: {} + + tar-fs@3.0.9: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.1.5 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.1 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + tmp@0.2.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tslib@2.8.1: {} + + tsx@4.19.3: + dependencies: + esbuild: 0.25.2 + get-tsconfig: 4.10.0 + optionalDependencies: + fsevents: 2.3.3 + + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + + typed-query-selector@2.12.0: {} + + typescript@5.8.3: {} + + uc.micro@2.1.0: {} + + undici-types@6.21.0: {} + + unpipe@1.0.0: {} + + util-deprecate@1.0.2: {} + + vary@1.1.2: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wicked-good-xpath@1.3.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@8.18.2: {} + + xss@1.0.15: + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + zod-to-json-schema@3.24.5(zod@3.24.2): + dependencies: + zod: 3.24.2 + + zod@3.24.2: {} diff --git a/richmenu-templetes/templete-01.md b/richmenu-templetes/templete-01.md index 59070dc..2bb74b2 100644 --- a/richmenu-templetes/templete-01.md +++ b/richmenu-templetes/templete-01.md @@ -2,7 +2,6 @@ marp: true size: 16:9 --- - -

item01

diff --git a/richmenu-templetes/templete-02.md b/richmenu-templetes/templete-02.md index 554fa3a..3c28b81 100644 --- a/richmenu-templetes/templete-02.md +++ b/richmenu-templetes/templete-02.md @@ -29,7 +29,7 @@ section { font-weight: bold; width: 100%; text-align: center; - font-size: clamp(16px, 6vw, 50px); + font-size: 70px; white-space: normal; word-break: break-all; } @@ -39,7 +39,6 @@ section { width: calc((100% - 30px) / 2); } -

item01

diff --git a/richmenu-templetes/templete-03.md b/richmenu-templetes/templete-03.md index 16c4c27..1711487 100644 --- a/richmenu-templetes/templete-03.md +++ b/richmenu-templetes/templete-03.md @@ -29,42 +29,45 @@ section { font-weight: bold; width: 100%; text-align: center; - font-size: clamp(16px, 6vw, 50px); white-space: normal; word-break: break-all; } -.column-item-03-01 { +.column-item-left { + display: flex; flex: 2; - margin: 10px 0px 10px 10px; + font-size: 70px; } - .column-item-right { - flex: 1; display: flex; + flex: 1; flex-direction: column; height: 100%; + font-size: 50px; } - -.column-item-03-02 { +.column-item-03-right { + flex: 1; + margin: 10px 0px 10px 10px; +} +.column-item-03-left-top { flex: 1; margin: 10px 10px 10px 10px; } - -.column-item-03-03 { +.column-item-03-left-bottom { flex: 1; margin: 0px 10px 10px 10px; } -
-
-

item01

+
+
+

item01

+
-
+

item02

-
+

item03

diff --git a/richmenu-templetes/templete-04.md b/richmenu-templetes/templete-04.md index 2bbfe67..17c1ca9 100644 --- a/richmenu-templetes/templete-04.md +++ b/richmenu-templetes/templete-04.md @@ -29,7 +29,7 @@ section { font-weight: bold; width: 100%; text-align: center; - font-size: clamp(16px, 6vw, 50px); + font-size: 50px; white-space: normal; word-break: break-all; } @@ -37,25 +37,24 @@ section { height: calc((100% - 30px) / 2); width: calc((100% - 30px) / 2); } -.column-item-04-01 { +.column-item-04-top { margin: 10px 0px 0px 10px; } -.column-item-04-02 { +.column-item-04-bottom { margin: 0px 0px 0px 10px; } -
-
+

item01

-
+

item02

-
+

item03

-
+

item04

diff --git a/richmenu-templetes/templete-05.md b/richmenu-templetes/templete-05.md index ff09a3d..c8bb3a0 100644 --- a/richmenu-templetes/templete-05.md +++ b/richmenu-templetes/templete-05.md @@ -2,7 +2,6 @@ marp: true size: 16:9 --- - -
-
+

item01

-
+

item02

-
+

item03

-
+

item04

-
+

item05

diff --git a/richmenu-templetes/templete-06.md b/richmenu-templetes/templete-06.md index 454e906..3b689bf 100644 --- a/richmenu-templetes/templete-06.md +++ b/richmenu-templetes/templete-06.md @@ -2,7 +2,6 @@ marp: true size: 16:9 --- - -
-
+

item01

-
+

item02

-
+

item03

-
+

item04

-
+

item05

-
+

item06

diff --git a/src/common/schema/actionSchema.ts b/src/common/schema/actionSchema.ts index e52f6be..281399e 100644 --- a/src/common/schema/actionSchema.ts +++ b/src/common/schema/actionSchema.ts @@ -1,5 +1,11 @@ import { z } from "zod"; +// references: +// * document: +// https://developers.line.biz/ja/docs/messaging-api/actions/ +// * line-bot-sdk-nodejs: +// https://github.com/line/line-bot-sdk-nodejs/blob/master/lib/messaging-api/model/action.ts + // 1. Postback action const postbackActionSchema = z.object({ type: z.literal("postback"), diff --git a/src/index.ts b/src/index.ts index 6e5a039..1595abc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -31,7 +31,6 @@ import GetRichMenuList from "./tools/getRichMenuList.js"; import DeleteRichMenu from "./tools/deleteRichMenu.js"; import SetRichMenuDefault from "./tools/setRichMenuDefault.js"; import CreateRichMenu from "./tools/createRichMenu.js"; -import DownloadRichMenuImage from "./tools/downloadRichMenuImage.js"; const server = new McpServer({ name: "line-bot", @@ -66,7 +65,6 @@ new DeleteRichMenu(messagingApiClient).register(server); new SetRichMenuDefault(messagingApiClient).register(server); new CancelRichMenuDefault(messagingApiClient).register(server); new CreateRichMenu(messagingApiClient, lineBlobClient).register(server); -new DownloadRichMenuImage(lineBlobClient).register(server); async function main() { if (!process.env.CHANNEL_ACCESS_TOKEN) { diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 2856799..6149542 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -42,18 +42,24 @@ export default class CreateRichMenu extends AbstractTool { .describe("The actions of the rich menu."), }, async ({ chatBarText, actions }) => { + // Flow: + // 1. Validate the rich menu image + // 2. Create a rich menu + // 3. Generate a rich menu image + // 4. Upload the rich menu image + // 5. Set the rich menu as the default rich menu let createRichMenuResponse: any = null; let setImageResponse: any = null; let setDefaultResponse: any = null; - const templeteNo = actions.length; const lineActions = actions as messagingApi.Action[]; + const templeteNo = lineActions.length; try { - const error = validateRichMenuImage(templeteNo); - if (error) { - return createErrorResponse(error); + // 1. Validate the rich menu image + if (templeteNo < 1 || templeteNo > 6) { + return createErrorResponse("Invalid texts length"); } - // create rich menu + // 2. Create a rich menu const areas: Array = richmenuAreas( templeteNo, lineActions, @@ -72,13 +78,13 @@ export default class CreateRichMenu extends AbstractTool { await this.client.createRichMenu(createRichMenuParams); const richMenuId = createRichMenuResponse.richMenuId; - // generate rich menu image + // 3. Generate a rich menu image const richMenuImagePath = await generateRichMenuImage( templeteNo, lineActions, ); - // upload rich menu image + // 4. Upload the rich menu image const imageBuffer = fs.readFileSync(richMenuImagePath); const imageType = "image/png"; const imageBlob = new Blob([imageBuffer], { type: imageType }); @@ -87,7 +93,7 @@ export default class CreateRichMenu extends AbstractTool { imageBlob, ); - // set default rich menu + // 5. Set the rich menu as the default rich menu setDefaultResponse = await this.client.setDefaultRichMenu(richMenuId); return createSuccessResponse({ @@ -100,9 +106,12 @@ export default class CreateRichMenu extends AbstractTool { }); } catch (error) { return createErrorResponse( - `createRichMenuResponse: ${JSON.stringify(createRichMenuResponse, null, 2)}\n` + - `setImageResponse: ${JSON.stringify(setImageResponse, null, 2)}\n` + - `setDefaultResponse: ${JSON.stringify(setDefaultResponse, null, 2)}\n`, + JSON.stringify({ + error, + createRichMenuResponse, + setImageResponse, + setDefaultResponse, + }), ); } }, @@ -118,6 +127,12 @@ async function generateRichMenuImage( templeteNo: number, actions: messagingApi.Action[], ): Promise { + // Flow: + // 1. Read the Markdown template + // 2. Convert Markdown to HTML using Marp + // 3. Save the HTML as a temporary file + // 4. Use puppeteer to convert HTML to PNG + // 5. Delete the temporary HTML file const richMenuImagePath = path.join( os.tmpdir(), `templete-0${templeteNo}-${Date.now()}.png`, @@ -173,13 +188,6 @@ async function generateRichMenuImage( return richMenuImagePath; } -const validateRichMenuImage = (len: number): string | null => { - if (len < 1 || len > 6) { - return "Invalid texts length"; - } - return null; -}; - const richmenuAreas = ( templeteNo: number, actions: messagingApi.Action[], @@ -188,7 +196,7 @@ const richmenuAreas = ( return actions.map((action, index) => { return { bounds: bounds[index], - action: action as messagingApi.Action, + action: action, }; }); }; diff --git a/src/tools/downloadRichMenuImage.ts b/src/tools/downloadRichMenuImage.ts deleted file mode 100644 index 985cd2e..0000000 --- a/src/tools/downloadRichMenuImage.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { messagingApi } from "@line/bot-sdk"; -import { AbstractTool } from "./AbstractTool.js"; -import { z } from "zod"; -import { promises as fs } from "fs"; -import path from "path"; -import os from "os"; - -import { buffer } from "stream/consumers"; - -export default class DownloadRichMenuImage extends AbstractTool { - private lineBlobClient: messagingApi.MessagingApiBlobClient; - - constructor(lineBlobClient: messagingApi.MessagingApiBlobClient) { - super(); - this.lineBlobClient = lineBlobClient; - } - - register(server: McpServer) { - server.tool( - "download_rich_menu_image", - "Download the image of a rich menu.", - { - richMenuId: z.string().describe("The ID of the rich menu to download."), - }, - async ({ richMenuId }) => { - const response = await this.lineBlobClient.getRichMenuImage(richMenuId); - const imageBuffer = await buffer(response); - const imageType = "image/png"; - const imageBlob = new Blob([imageBuffer], { type: imageType }); - const imagePath = path.join(os.tmpdir(), `${richMenuId}.png`); - await fs.writeFile(imagePath, imageBuffer); - - return { imagePath }; - }, - ); - } -} From 9c6171cfbdd03245f90098e3107561c242e96517 Mon Sep 17 00:00:00 2001 From: 4geru Date: Sun, 15 Jun 2025 10:03:27 +0900 Subject: [PATCH 25/36] fix the ci --- pnpm-lock.yaml | 2603 ----------------------------------- src/tools/createRichMenu.ts | 2 +- 2 files changed, 1 insertion(+), 2604 deletions(-) delete mode 100644 pnpm-lock.yaml diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 2b8319f..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,2603 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@line/bot-sdk': - specifier: ^10.0.0 - version: 10.0.0 - '@marp-team/marp-cli': - specifier: ^4.1.2 - version: 4.1.2(typescript@5.8.3) - '@marp-team/marp-core': - specifier: ^4.1.0 - version: 4.1.0 - '@modelcontextprotocol/sdk': - specifier: ^1.8.0 - version: 1.9.0 - zod: - specifier: ^3.24.2 - version: 3.24.2 - devDependencies: - '@types/node': - specifier: ^22 - version: 22.14.1 - prettier: - specifier: 3.5.3 - version: 3.5.3 - shx: - specifier: ^0.4.0 - version: 0.4.0 - tsx: - specifier: ^4.19.3 - version: 4.19.3 - typescript: - specifier: ^5.6.2 - version: 5.8.3 - -packages: - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - - '@csstools/postcss-is-pseudo-class@5.0.1': - resolution: {integrity: sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==} - engines: {node: '>=18'} - peerDependencies: - postcss: ^8.4 - - '@csstools/selector-resolve-nested@3.1.0': - resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} - engines: {node: '>=18'} - peerDependencies: - postcss-selector-parser: ^7.0.0 - - '@csstools/selector-specificity@5.0.0': - resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} - engines: {node: '>=18'} - peerDependencies: - postcss-selector-parser: ^7.0.0 - - '@esbuild/aix-ppc64@0.25.2': - resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.2': - resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.2': - resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.2': - resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.2': - resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.2': - resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.2': - resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.2': - resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.2': - resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.2': - resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.2': - resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.2': - resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.2': - resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.2': - resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.2': - resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.2': - resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.2': - resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.2': - resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.2': - resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.2': - resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.2': - resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.25.2': - resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.2': - resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.2': - resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.2': - resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@line/bot-sdk@10.0.0': - resolution: {integrity: sha512-Uj6ZVivMDzZUV4Jm/RSsJinryyj3HS+fnyYob+mNl4/uUDWQ2OAEZDVopl0v0tcjXlCRC6GUB+nfEZLgBFI+dg==} - engines: {node: '>=20'} - - '@marp-team/marp-cli@4.1.2': - resolution: {integrity: sha512-LYfSmggx63MsMHTjpWs/CeVMssL6qerFBP6mgsrXwlDKH/d991ghbRxtT10oohw8mxLOtD8VKo/XZRxwC5JlOA==} - engines: {node: '>=18'} - hasBin: true - - '@marp-team/marp-core@4.1.0': - resolution: {integrity: sha512-QJ79tGpr3itR4TVQ4Cbe9J0kLHg9sR5cNX19OWSHeVK9EjDzMA9iCwS+OCRMKBAvRHo0LGUJC3lm9wUBg3Ud6A==} - engines: {node: '>=18'} - - '@marp-team/marpit-svg-polyfill@2.1.0': - resolution: {integrity: sha512-VqCoAKwv1HJdzZp36dDPxznz2JZgRjkVSSPHpCzk72G2N753F0HPKXjevdjxmzN6gir9bUGBgMD1SguWJIi11A==} - engines: {node: '>=10'} - peerDependencies: - '@marp-team/marpit': '>=0.5.0' - peerDependenciesMeta: - '@marp-team/marpit': - optional: true - - '@marp-team/marpit@3.1.3': - resolution: {integrity: sha512-ApI1SmNK7qy6x1D9h9HGBPJorPhclincNXf4VXrpCJ1+gNFzVf8Aga10Q1JJYFb/5N5FtFxTodMZwMqB31S+Ig==} - engines: {node: '>=18'} - - '@modelcontextprotocol/sdk@1.9.0': - resolution: {integrity: sha512-Jq2EUCQpe0iyO5FGpzVYDNFR6oR53AIrwph9yWl7uSc7IWUMsrmpmSaTGra5hQNunXpM+9oit85p924jWuHzUA==} - engines: {node: '>=18'} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@puppeteer/browsers@2.7.1': - resolution: {integrity: sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ==} - engines: {node: '>=18'} - hasBin: true - - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - - '@types/node@22.14.1': - resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@xmldom/xmldom@0.9.8': - resolution: {integrity: sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A==} - engines: {node: '>=14.6'} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} - - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} - - bare-fs@4.1.5: - resolution: {integrity: sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.6.1: - resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.6.5: - resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true - - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - - batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - chromium-bidi@1.3.0: - resolution: {integrity: sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw==} - peerDependencies: - devtools-protocol: '*' - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - cssfilter@0.0.10: - resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} - - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - devtools-protocol@0.0.1402036: - resolution: {integrity: sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg==} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - esbuild@0.25.2: - resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - eventsource-parser@3.0.1: - resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.6: - resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} - engines: {node: '>=18.0.0'} - - execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} - - express-rate-limit@7.5.0: - resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} - engines: {node: '>= 16'} - peerDependencies: - express: ^4.11 || 5 || ^5.0.0-beta.1 - - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - - get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} - engines: {node: '>= 14'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - highlight.js@11.11.1: - resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} - engines: {node: '>=12.0.0'} - - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - katex@0.16.22: - resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} - hasBin: true - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - - markdown-it-front-matter@0.2.4: - resolution: {integrity: sha512-25GUs0yjS2hLl8zAemVndeEzThB1p42yxuDEKbd4JlL3jiz+jsm6e56Ya8B0VREOkNxLYB4TTwaoPJ3ElMmW+w==} - - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mathjax-full@3.2.2: - resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==} - - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - mhchemparser@4.2.1: - resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - - mj-context-menu@0.6.1: - resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} - - postcss-nesting@13.0.1: - resolution: {integrity: sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==} - engines: {node: '>=18'} - peerDependencies: - postcss: ^8.4 - - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} - engines: {node: '>=4'} - - postcss@8.5.4: - resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} - engines: {node: ^10 || ^12 || >=14} - - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} - engines: {node: '>=14'} - hasBin: true - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - puppeteer-core@24.2.1: - resolution: {integrity: sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ==} - engines: {node: '>=18'} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} - - serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} - - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shelljs@0.9.2: - resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} - engines: {node: '>=18'} - hasBin: true - - shx@0.4.0: - resolution: {integrity: sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==} - engines: {node: '>=18'} - hasBin: true - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - speech-rule-engine@4.1.2: - resolution: {integrity: sha512-S6ji+flMEga+1QU79NDbwZ8Ivf0S/MpupQQiIC0rTpU/ZTKgcajijJJb1OcByBQDjrXCN1/DJtGz4ZJeBMPGJw==} - hasBin: true - - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - streamx@2.22.1: - resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tar-fs@3.0.9: - resolution: {integrity: sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==} - - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsx@4.19.3: - resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - - typed-query-selector@2.12.0: - resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} - - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} - hasBin: true - - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wicked-good-xpath@1.3.0: - resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xss@1.0.15: - resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} - engines: {node: '>= 0.10.0'} - hasBin: true - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} - peerDependencies: - zod: ^3.24.1 - - zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} - -snapshots: - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-validator-identifier@7.27.1': {} - - '@csstools/postcss-is-pseudo-class@5.0.1(postcss@8.5.4)': - dependencies: - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) - postcss: 8.5.4 - postcss-selector-parser: 7.1.0 - - '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.0)': - dependencies: - postcss-selector-parser: 7.1.0 - - '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': - dependencies: - postcss-selector-parser: 7.1.0 - - '@esbuild/aix-ppc64@0.25.2': - optional: true - - '@esbuild/android-arm64@0.25.2': - optional: true - - '@esbuild/android-arm@0.25.2': - optional: true - - '@esbuild/android-x64@0.25.2': - optional: true - - '@esbuild/darwin-arm64@0.25.2': - optional: true - - '@esbuild/darwin-x64@0.25.2': - optional: true - - '@esbuild/freebsd-arm64@0.25.2': - optional: true - - '@esbuild/freebsd-x64@0.25.2': - optional: true - - '@esbuild/linux-arm64@0.25.2': - optional: true - - '@esbuild/linux-arm@0.25.2': - optional: true - - '@esbuild/linux-ia32@0.25.2': - optional: true - - '@esbuild/linux-loong64@0.25.2': - optional: true - - '@esbuild/linux-mips64el@0.25.2': - optional: true - - '@esbuild/linux-ppc64@0.25.2': - optional: true - - '@esbuild/linux-riscv64@0.25.2': - optional: true - - '@esbuild/linux-s390x@0.25.2': - optional: true - - '@esbuild/linux-x64@0.25.2': - optional: true - - '@esbuild/netbsd-arm64@0.25.2': - optional: true - - '@esbuild/netbsd-x64@0.25.2': - optional: true - - '@esbuild/openbsd-arm64@0.25.2': - optional: true - - '@esbuild/openbsd-x64@0.25.2': - optional: true - - '@esbuild/sunos-x64@0.25.2': - optional: true - - '@esbuild/win32-arm64@0.25.2': - optional: true - - '@esbuild/win32-ia32@0.25.2': - optional: true - - '@esbuild/win32-x64@0.25.2': - optional: true - - '@line/bot-sdk@10.0.0': - dependencies: - '@types/node': 22.14.1 - optionalDependencies: - axios: 1.8.4 - transitivePeerDependencies: - - debug - - '@marp-team/marp-cli@4.1.2(typescript@5.8.3)': - dependencies: - '@marp-team/marp-core': 4.1.0 - '@marp-team/marpit': 3.1.3 - chokidar: 4.0.3 - cosmiconfig: 9.0.0(typescript@5.8.3) - puppeteer-core: 24.2.1 - serve-index: 1.9.1 - tmp: 0.2.3 - ws: 8.18.2 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-buffer - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@marp-team/marp-core@4.1.0': - dependencies: - '@marp-team/marpit': 3.1.3 - '@marp-team/marpit-svg-polyfill': 2.1.0(@marp-team/marpit@3.1.3) - highlight.js: 11.11.1 - katex: 0.16.22 - mathjax-full: 3.2.2 - postcss: 8.5.4 - postcss-selector-parser: 7.1.0 - xss: 1.0.15 - - '@marp-team/marpit-svg-polyfill@2.1.0(@marp-team/marpit@3.1.3)': - optionalDependencies: - '@marp-team/marpit': 3.1.3 - - '@marp-team/marpit@3.1.3': - dependencies: - '@csstools/postcss-is-pseudo-class': 5.0.1(postcss@8.5.4) - cssesc: 3.0.0 - js-yaml: 4.1.0 - lodash.kebabcase: 4.1.1 - markdown-it: 14.1.0 - markdown-it-front-matter: 0.2.4 - postcss: 8.5.4 - postcss-nesting: 13.0.1(postcss@8.5.4) - - '@modelcontextprotocol/sdk@1.9.0': - dependencies: - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.6 - express: 5.1.0 - express-rate-limit: 7.5.0(express@5.1.0) - pkce-challenge: 5.0.0 - raw-body: 3.0.0 - zod: 3.24.2 - zod-to-json-schema: 3.24.5(zod@3.24.2) - transitivePeerDependencies: - - supports-color - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - - '@puppeteer/browsers@2.7.1': - dependencies: - debug: 4.4.0 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.7.2 - tar-fs: 3.0.9 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-buffer - - supports-color - - '@tootallnate/quickjs-emscripten@0.23.0': {} - - '@types/node@22.14.1': - dependencies: - undici-types: 6.21.0 - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 22.14.1 - optional: true - - '@xmldom/xmldom@0.9.8': {} - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - accepts@2.0.0: - dependencies: - mime-types: 3.0.1 - negotiator: 1.0.0 - - agent-base@7.1.3: {} - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - argparse@2.0.1: {} - - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - - asynckit@0.4.0: - optional: true - - axios@1.8.4: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.2 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - optional: true - - b4a@1.6.7: {} - - bare-events@2.5.4: - optional: true - - bare-fs@4.1.5: - dependencies: - bare-events: 2.5.4 - bare-path: 3.0.0 - bare-stream: 2.6.5(bare-events@2.5.4) - optional: true - - bare-os@3.6.1: - optional: true - - bare-path@3.0.0: - dependencies: - bare-os: 3.6.1 - optional: true - - bare-stream@2.6.5(bare-events@2.5.4): - dependencies: - streamx: 2.22.1 - optionalDependencies: - bare-events: 2.5.4 - optional: true - - basic-ftp@5.0.5: {} - - batch@0.6.1: {} - - body-parser@2.2.0: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.1 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.0 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - buffer-crc32@0.2.13: {} - - bytes@3.1.2: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - chromium-bidi@1.3.0(devtools-protocol@0.0.1402036): - dependencies: - devtools-protocol: 0.0.1402036 - mitt: 3.0.1 - zod: 3.24.2 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - optional: true - - commander@13.1.0: {} - - commander@2.20.3: {} - - commander@8.3.0: {} - - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - cookie-signature@1.2.2: {} - - cookie@0.7.2: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cosmiconfig@9.0.0(typescript@5.8.3): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.8.3 - - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssesc@3.0.0: {} - - cssfilter@0.0.10: {} - - data-uri-to-buffer@6.0.2: {} - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@4.4.0: - dependencies: - ms: 2.1.3 - - debug@4.4.1: - dependencies: - ms: 2.1.3 - - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - - delayed-stream@1.0.0: - optional: true - - depd@1.1.2: {} - - depd@2.0.0: {} - - devtools-protocol@0.0.1402036: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - ee-first@1.1.1: {} - - emoji-regex@8.0.0: {} - - encodeurl@2.0.0: {} - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - - entities@4.5.0: {} - - env-paths@2.2.1: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - optional: true - - esbuild@0.25.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.2 - '@esbuild/android-arm': 0.25.2 - '@esbuild/android-arm64': 0.25.2 - '@esbuild/android-x64': 0.25.2 - '@esbuild/darwin-arm64': 0.25.2 - '@esbuild/darwin-x64': 0.25.2 - '@esbuild/freebsd-arm64': 0.25.2 - '@esbuild/freebsd-x64': 0.25.2 - '@esbuild/linux-arm': 0.25.2 - '@esbuild/linux-arm64': 0.25.2 - '@esbuild/linux-ia32': 0.25.2 - '@esbuild/linux-loong64': 0.25.2 - '@esbuild/linux-mips64el': 0.25.2 - '@esbuild/linux-ppc64': 0.25.2 - '@esbuild/linux-riscv64': 0.25.2 - '@esbuild/linux-s390x': 0.25.2 - '@esbuild/linux-x64': 0.25.2 - '@esbuild/netbsd-arm64': 0.25.2 - '@esbuild/netbsd-x64': 0.25.2 - '@esbuild/openbsd-arm64': 0.25.2 - '@esbuild/openbsd-x64': 0.25.2 - '@esbuild/sunos-x64': 0.25.2 - '@esbuild/win32-arm64': 0.25.2 - '@esbuild/win32-ia32': 0.25.2 - '@esbuild/win32-x64': 0.25.2 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - esm@3.2.25: {} - - esprima@4.0.1: {} - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - etag@1.8.1: {} - - eventsource-parser@3.0.1: {} - - eventsource@3.0.6: - dependencies: - eventsource-parser: 3.0.1 - - execa@1.0.0: - dependencies: - cross-spawn: 6.0.6 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - - express-rate-limit@7.5.0(express@5.1.0): - dependencies: - express: 5.1.0 - - express@5.1.0: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.0 - fresh: 2.0.0 - http-errors: 2.0.0 - merge-descriptors: 2.0.0 - mime-types: 3.0.1 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 - statuses: 2.0.1 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extract-zip@2.0.1: - dependencies: - debug: 4.4.1 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - fast-fifo@1.3.2: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@2.1.0: - dependencies: - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - follow-redirects@1.15.9: - optional: true - - form-data@4.0.2: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - mime-types: 2.1.35 - optional: true - - forwarded@0.2.0: {} - - fresh@2.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@4.1.0: - dependencies: - pump: 3.0.2 - - get-stream@5.2.0: - dependencies: - pump: 3.0.2 - - get-tsconfig@4.10.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - get-uri@6.0.4: - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - gopd@1.2.0: {} - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - optional: true - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - highlight.js@11.11.1: {} - - http-errors@1.6.3: - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - inherits@2.0.3: {} - - inherits@2.0.4: {} - - interpret@1.4.0: {} - - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - - ipaddr.js@1.9.1: {} - - is-arrayish@0.2.1: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-promise@4.0.0: {} - - is-stream@1.1.0: {} - - isexe@2.0.0: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsbn@1.1.0: {} - - json-parse-even-better-errors@2.3.1: {} - - katex@0.16.22: - dependencies: - commander: 8.3.0 - - lines-and-columns@1.2.4: {} - - linkify-it@5.0.0: - dependencies: - uc.micro: 2.1.0 - - lodash.kebabcase@4.1.1: {} - - lru-cache@7.18.3: {} - - markdown-it-front-matter@0.2.4: {} - - markdown-it@14.1.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.0 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - - math-intrinsics@1.1.0: {} - - mathjax-full@3.2.2: - dependencies: - esm: 3.2.25 - mhchemparser: 4.2.1 - mj-context-menu: 0.6.1 - speech-rule-engine: 4.1.2 - - mdurl@2.0.0: {} - - media-typer@1.1.0: {} - - merge-descriptors@2.0.0: {} - - merge2@1.4.1: {} - - mhchemparser@4.2.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-db@1.54.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 - - minimist@1.2.8: {} - - mitt@3.0.1: {} - - mj-context-menu@0.6.1: {} - - ms@2.0.0: {} - - ms@2.1.3: {} - - nanoid@3.3.11: {} - - negotiator@0.6.3: {} - - negotiator@1.0.0: {} - - netmask@2.0.2: {} - - nice-try@1.0.5: {} - - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - p-finally@1.0.0: {} - - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 - debug: 4.4.1 - get-uri: 6.0.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parseurl@1.3.3: {} - - path-key@2.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-to-regexp@8.2.0: {} - - pend@1.2.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - pkce-challenge@5.0.0: {} - - postcss-nesting@13.0.1(postcss@8.5.4): - dependencies: - '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.0) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) - postcss: 8.5.4 - postcss-selector-parser: 7.1.0 - - postcss-selector-parser@7.1.0: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss@8.5.4: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prettier@3.5.3: {} - - progress@2.0.3: {} - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - - pump@3.0.2: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - - punycode.js@2.3.1: {} - - puppeteer-core@24.2.1: - dependencies: - '@puppeteer/browsers': 2.7.1 - chromium-bidi: 1.3.0(devtools-protocol@0.0.1402036) - debug: 4.4.0 - devtools-protocol: 0.0.1402036 - typed-query-selector: 2.12.0 - ws: 8.18.2 - transitivePeerDependencies: - - bare-buffer - - bufferutil - - supports-color - - utf-8-validate - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - - queue-microtask@1.2.3: {} - - range-parser@1.2.1: {} - - raw-body@3.0.0: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - unpipe: 1.0.0 - - readdirp@4.1.2: {} - - rechoir@0.6.2: - dependencies: - resolve: 1.22.10 - - require-directory@2.1.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.1.0: {} - - router@2.2.0: - dependencies: - debug: 4.4.1 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.2.0 - transitivePeerDependencies: - - supports-color - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - semver@5.7.2: {} - - semver@7.7.2: {} - - send@1.2.0: - dependencies: - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serve-index@1.9.1: - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - - serve-static@2.2.0: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.0 - transitivePeerDependencies: - - supports-color - - setprototypeof@1.1.0: {} - - setprototypeof@1.2.0: {} - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@1.0.0: {} - - shebang-regex@3.0.0: {} - - shelljs@0.9.2: - dependencies: - execa: 1.0.0 - fast-glob: 3.3.3 - interpret: 1.4.0 - rechoir: 0.6.2 - - shx@0.4.0: - dependencies: - minimist: 1.2.8 - shelljs: 0.9.2 - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@3.0.7: {} - - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - socks: 2.8.4 - transitivePeerDependencies: - - supports-color - - socks@2.8.4: - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - - source-map-js@1.2.1: {} - - source-map@0.6.1: - optional: true - - speech-rule-engine@4.1.2: - dependencies: - '@xmldom/xmldom': 0.9.8 - commander: 13.1.0 - wicked-good-xpath: 1.3.0 - - sprintf-js@1.1.3: {} - - statuses@1.5.0: {} - - statuses@2.0.1: {} - - streamx@2.22.1: - dependencies: - fast-fifo: 1.3.2 - text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.5.4 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-eof@1.0.0: {} - - supports-preserve-symlinks-flag@1.0.0: {} - - tar-fs@3.0.9: - dependencies: - pump: 3.0.2 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.1.5 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-buffer - - tar-stream@3.1.7: - dependencies: - b4a: 1.6.7 - fast-fifo: 1.3.2 - streamx: 2.22.1 - - text-decoder@1.2.3: - dependencies: - b4a: 1.6.7 - - tmp@0.2.3: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - tslib@2.8.1: {} - - tsx@4.19.3: - dependencies: - esbuild: 0.25.2 - get-tsconfig: 4.10.0 - optionalDependencies: - fsevents: 2.3.3 - - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.1 - - typed-query-selector@2.12.0: {} - - typescript@5.8.3: {} - - uc.micro@2.1.0: {} - - undici-types@6.21.0: {} - - unpipe@1.0.0: {} - - util-deprecate@1.0.2: {} - - vary@1.1.2: {} - - which@1.3.1: - dependencies: - isexe: 2.0.0 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wicked-good-xpath@1.3.0: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - ws@8.18.2: {} - - xss@1.0.15: - dependencies: - commander: 2.20.3 - cssfilter: 0.0.10 - - y18n@5.0.8: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - zod-to-json-schema@3.24.5(zod@3.24.2): - dependencies: - zod: 3.24.2 - - zod@3.24.2: {} diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 6149542..f4ba16d 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -7,7 +7,7 @@ import { import { AbstractTool } from "./AbstractTool.js"; import { z } from "zod"; import { Marp } from "@marp-team/marp-core"; -import puppeteer from "puppeteer"; +import puppeteer from "puppeteer-core"; import fs from "fs"; import path from "path"; import os from "os"; From 0b6bd3d1e13f9814e94b28b3fe1a7b033f9386a9 Mon Sep 17 00:00:00 2001 From: 4geru Date: Thu, 19 Jun 2025 23:26:03 +0900 Subject: [PATCH 26/36] use puppeteer --- package-lock.json | 27 ++++++++++++++++++++++++--- package.json | 1 + src/tools/createRichMenu.ts | 2 +- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c823eb5..dd1f5ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@marp-team/marp-cli": "^4.1.2", "@marp-team/marp-core": "^4.1.0", "@modelcontextprotocol/sdk": "^1.8.0", + "puppeteer": "^24.10.2", "zod": "^3.24.2" }, "bin": { @@ -2847,10 +2848,30 @@ "node": ">=6" } }, + "node_modules/puppeteer": { + "version": "24.10.2", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.10.2.tgz", + "integrity": "sha512-+k26rCz6akFZntx0hqUoFjCojgOLIxZs6p2k53LmEicwsT8F/FMBKfRfiBw1sitjiCvlR/15K7lBqfjXa251FA==", + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "2.10.5", + "chromium-bidi": "5.1.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1452169", + "puppeteer-core": "24.10.2", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/puppeteer-core": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.10.1.tgz", - "integrity": "sha512-AE6doA9znmEEps/pC5lc9p0zejCdNLR6UBp3EZ49/15Nbvh+uklXxGox7Qh8/lFGqGVwxInl0TXmsOmIuIMwiQ==", + "version": "24.10.2", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.10.2.tgz", + "integrity": "sha512-CnzhOgrZj8DvkDqI+Yx+9or33i3Y9uUYbKyYpP4C13jWwXx/keQ38RMTMmxuLCWQlxjZrOH0Foq7P2fGP7adDQ==", "dependencies": { "@puppeteer/browsers": "2.10.5", "chromium-bidi": "5.1.0", diff --git a/package.json b/package.json index 77e9f66..ba71235 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@marp-team/marp-cli": "^4.1.2", "@marp-team/marp-core": "^4.1.0", "@modelcontextprotocol/sdk": "^1.8.0", + "puppeteer": "^24.10.2", "zod": "^3.24.2" }, "devDependencies": { diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index f4ba16d..6149542 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -7,7 +7,7 @@ import { import { AbstractTool } from "./AbstractTool.js"; import { z } from "zod"; import { Marp } from "@marp-team/marp-core"; -import puppeteer from "puppeteer-core"; +import puppeteer from "puppeteer"; import fs from "fs"; import path from "path"; import os from "os"; From e266dec4b0ccc8a90a9786978f8c07a4d820776e Mon Sep 17 00:00:00 2001 From: 4geru Date: Thu, 19 Jun 2025 23:31:35 +0900 Subject: [PATCH 27/36] reply successful message --- src/tools/createRichMenu.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 6149542..01b9a16 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -97,6 +97,7 @@ export default class CreateRichMenu extends AbstractTool { setDefaultResponse = await this.client.setDefaultRichMenu(richMenuId); return createSuccessResponse({ + message: "Rich menu created successfully and set as default.", richMenuId, createRichMenuParams, createRichMenuResponse, From 09eeace535eb4d4709e0a7111b22e5dc119dfe97 Mon Sep 17 00:00:00 2001 From: 4geru Date: Tue, 24 Jun 2025 00:49:33 +0900 Subject: [PATCH 28/36] add rich menu alias --- src/tools/createRichMenu.ts | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 01b9a16..06a9533 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -39,18 +39,32 @@ export default class CreateRichMenu extends AbstractTool { chatBarText: z.string().describe("The ID of the rich menu to create."), actions: z .array(actionSchema) - .describe("The actions of the rich menu."), + .describe( + "The actions array for the rich menu. Accepts 1-6 items." + + "Each action defines a button's behavior in the rich menu layout." + + "The buttons will be automatically arranged in a grid." + ), + richMenuAliasId: z + .string() + .describe( + "The alias of the rich menu." + + "This is required when creating a rich menu that can be switched to from another rich menu using the richmenuswitch action type." + + "The alias serves as a unique identifier for the target rich menu", + ) + .optional(), }, - async ({ chatBarText, actions }) => { + async ({ chatBarText, actions, richMenuAliasId }) => { // Flow: // 1. Validate the rich menu image // 2. Create a rich menu // 3. Generate a rich menu image // 4. Upload the rich menu image // 5. Set the rich menu as the default rich menu + // 6. Set the rich menu alias let createRichMenuResponse: any = null; let setImageResponse: any = null; let setDefaultResponse: any = null; + let richMenuAliasResponse: any = null; const lineActions = actions as messagingApi.Action[]; const templeteNo = lineActions.length; try { @@ -96,14 +110,25 @@ export default class CreateRichMenu extends AbstractTool { // 5. Set the rich menu as the default rich menu setDefaultResponse = await this.client.setDefaultRichMenu(richMenuId); + // 6. Set the rich menu alias + if (richMenuAliasId) { + await this.client.deleteRichMenuAlias(richMenuAliasId); + richMenuAliasResponse = await this.client.createRichMenuAlias({ + richMenuId, + richMenuAliasId, + }); + } + return createSuccessResponse({ message: "Rich menu created successfully and set as default.", richMenuId, + richMenuAliasId, createRichMenuParams, createRichMenuResponse, setImageResponse, setDefaultResponse, richMenuImagePath, + richMenuAliasResponse, }); } catch (error) { return createErrorResponse( @@ -112,6 +137,7 @@ export default class CreateRichMenu extends AbstractTool { createRichMenuResponse, setImageResponse, setDefaultResponse, + richMenuAliasResponse, }), ); } From 06ca6da11a3c0ab949e52f1db479f62f9330bab4 Mon Sep 17 00:00:00 2001 From: 4geru Date: Fri, 4 Jul 2025 07:48:53 +0900 Subject: [PATCH 29/36] update the createRichMenus from review comments --- src/tools/createRichMenu.ts | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 06a9533..24c5c2c 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -34,11 +34,15 @@ export default class CreateRichMenu extends AbstractTool { register(server: McpServer) { server.tool( "create_rich_menu", - "Create a rich menu associated with your LINE Official Account.", + "Create a rich menu based on the given actions." + + "Generate and upload a rich menu image based on the given action." + + "This rich menu will be registered as the default rich menu.", { - chatBarText: z.string().describe("The ID of the rich menu to create."), + chatBarText: z.string().describe("Text displayed in the chat bar and this is also used as name of the rich menu to create."), actions: z .array(actionSchema) + .min(1) + .max(6) .describe( "The actions array for the rich menu. Accepts 1-6 items." + "Each action defines a button's behavior in the rich menu layout." + @@ -66,16 +70,16 @@ export default class CreateRichMenu extends AbstractTool { let setDefaultResponse: any = null; let richMenuAliasResponse: any = null; const lineActions = actions as messagingApi.Action[]; - const templeteNo = lineActions.length; + const templateNo = lineActions.length; try { // 1. Validate the rich menu image - if (templeteNo < 1 || templeteNo > 6) { + if (templateNo < 1 || templateNo > 6) { return createErrorResponse("Invalid texts length"); } // 2. Create a rich menu const areas: Array = richmenuAreas( - templeteNo, + templateNo, lineActions, ); const createRichMenuParams = { @@ -94,7 +98,7 @@ export default class CreateRichMenu extends AbstractTool { // 3. Generate a rich menu image const richMenuImagePath = await generateRichMenuImage( - templeteNo, + templateNo, lineActions, ); @@ -151,7 +155,7 @@ const __dirname = path.dirname(__filename); // Function to generate a rich menu image from a Markdown template async function generateRichMenuImage( - templeteNo: number, + templateNo: number, actions: messagingApi.Action[], ): Promise { // Flow: @@ -162,14 +166,14 @@ async function generateRichMenuImage( // 5. Delete the temporary HTML file const richMenuImagePath = path.join( os.tmpdir(), - `templete-0${templeteNo}-${Date.now()}.png`, + `templete-0${templateNo}-${Date.now()}.png`, ); const serverPath = process.env.SERVER_PATH || path.resolve(__dirname, "..", ".."); // 1. Read the Markdown template const srcPath = path.join( serverPath, - `richmenu-templetes/templete-0${templeteNo}.md`, + `richmenu-templetes/templete-0${templateNo}.md`, ); let content = await fsp.readFile(srcPath, "utf8"); for (let index = 0; index < actions.length; index++) { @@ -216,10 +220,10 @@ async function generateRichMenuImage( } const richmenuAreas = ( - templeteNo: number, + templateNo: number, actions: messagingApi.Action[], ): messagingApi.RichMenuArea[] => { - const bounds = richmenuBounds(templeteNo); + const bounds = richmenuBounds(templateNo); return actions.map((action, index) => { return { bounds: bounds[index], @@ -228,7 +232,7 @@ const richmenuAreas = ( }); }; -const richmenuBounds = (templeteNo: number) => { +const richmenuBounds = (templateNo: number) => { const boundsMap: { x: number; y: number; width: number; height: number }[][] = [ [], @@ -308,5 +312,5 @@ const richmenuBounds = (templeteNo: number) => { .flat(), ]; - return boundsMap[templeteNo]; + return boundsMap[templateNo]; }; From 2529edd3fb55b2d8da2b99026e950fbd0c48e493 Mon Sep 17 00:00:00 2001 From: 4geru Date: Fri, 4 Jul 2025 07:49:19 +0900 Subject: [PATCH 30/36] remove the example images --- richmenu-examples/templete-01.png | Bin 7958 -> 0 bytes richmenu-examples/templete-02.png | Bin 10109 -> 0 bytes richmenu-examples/templete-03.png | Bin 19422 -> 0 bytes richmenu-examples/templete-04.png | Bin 17771 -> 0 bytes richmenu-examples/templete-05.png | Bin 20000 -> 0 bytes richmenu-examples/templete-06.png | Bin 24320 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 richmenu-examples/templete-01.png delete mode 100644 richmenu-examples/templete-02.png delete mode 100644 richmenu-examples/templete-03.png delete mode 100644 richmenu-examples/templete-04.png delete mode 100644 richmenu-examples/templete-05.png delete mode 100644 richmenu-examples/templete-06.png diff --git a/richmenu-examples/templete-01.png b/richmenu-examples/templete-01.png deleted file mode 100644 index 61b10436429de104fb22b7d2cf7cf084aae8e4f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7958 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 aqW_0>tD|rCn*zgtE?C?DUUSAL^*;fYM67oJ diff --git a/richmenu-examples/templete-03.png b/richmenu-examples/templete-03.png deleted file mode 100644 index d47fd7c51ad81ee0381df1e1fd4434899b5e8b90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19422 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 diff --git a/richmenu-examples/templete-04.png b/richmenu-examples/templete-04.png deleted file mode 100644 index 7e7a13d4b445c583b475a3511a86b5d1c8b29c5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17771 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 diff --git a/richmenu-examples/templete-06.png b/richmenu-examples/templete-06.png deleted file mode 100644 index dd2ba478b5ed9b29f380ad66f30788475c05c209..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24320 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 S@tCuILucffpDKS0y!kJRHLb}2 From 3e82d4c82eda831f565de21b4bda5f930fdb9c3d Mon Sep 17 00:00:00 2001 From: 4geru Date: Fri, 4 Jul 2025 07:52:37 +0900 Subject: [PATCH 31/36] add the readme.md --- README.ja.md | 6 ++++++ README.md | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/README.ja.md b/README.ja.md index 3e46435..8bb2a97 100644 --- a/README.ja.md +++ b/README.ja.md @@ -57,6 +57,12 @@ LINE公式アカウントとAI Agentを接続するために、LINE Messaging AP - デフォルトのリッチメニューを解除する。 - **入力:** - なし +11. **create_rich_menu** + - 指定したアクションに基づいてリッチメニューを作成します。アクションに基づいてリッチメニュー画像を生成してアップロードします。このリッチメニューはデフォルトのリッチメニューとして登録されます。 + - **入力:** + - `chatBarText` (string): チャットバーに表示されるテキストで、作成するリッチメニューの名前としても使用されます。 + - `actions` (array[1-6]): リッチメニューのためのアクション配列。1〜6個を受け取ります。各アクションはリッチメニューのボタンの動作を定義します。 + - `richMenuAliasId` (string?): リッチメニューのエイリアス。`richmenuswitch` アクションタイプを使用して別のリッチメニューから切り替えられるようにリッチメニューを作成する場合に必須です。エイリアスは対象リッチメニューの一意な識別子として機能します。 ## インストール (npxを使用) diff --git a/README.md b/README.md index 96410da..620e147 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,12 @@ - Cancel the default rich menu. - **Inputs:** - None +11. **create_rich_menu** + - Create a rich menu based on the given actions. Generate and upload a rich menu image based on the given actions. This rich menu will be registered as the default rich menu. + - **Inputs:** + - `chatBarText` (string): Text displayed in the chat bar and used as the name of the rich menu to create. + - `actions` (array[1-6]): The actions array for the rich menu. Accepts 1-6 items. Each action defines a button's behavior in the rich menu layout. + - `richMenuAliasId` (string?): The alias of the rich menu. This is required when creating a rich menu that can be switched to from another rich menu using the `richmenuswitch` action type. The alias serves as a unique identifier for the target rich menu. ## Installation (Using npx) From 6c7335c773ec9d72aa80c615875bab5ca73ed7c5 Mon Sep 17 00:00:00 2001 From: 4geru Date: Fri, 4 Jul 2025 07:57:44 +0900 Subject: [PATCH 32/36] fix the lint --- src/tools/createRichMenu.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 24c5c2c..6dedc03 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -35,25 +35,29 @@ export default class CreateRichMenu extends AbstractTool { server.tool( "create_rich_menu", "Create a rich menu based on the given actions." + - "Generate and upload a rich menu image based on the given action." + - "This rich menu will be registered as the default rich menu.", + "Generate and upload a rich menu image based on the given action." + + "This rich menu will be registered as the default rich menu.", { - chatBarText: z.string().describe("Text displayed in the chat bar and this is also used as name of the rich menu to create."), + chatBarText: z + .string() + .describe( + "Text displayed in the chat bar and this is also used as name of the rich menu to create.", + ), actions: z .array(actionSchema) .min(1) .max(6) .describe( "The actions array for the rich menu. Accepts 1-6 items." + - "Each action defines a button's behavior in the rich menu layout." + - "The buttons will be automatically arranged in a grid." + "Each action defines a button's behavior in the rich menu layout." + + "The buttons will be automatically arranged in a grid.", ), richMenuAliasId: z .string() .describe( "The alias of the rich menu." + - "This is required when creating a rich menu that can be switched to from another rich menu using the richmenuswitch action type." + - "The alias serves as a unique identifier for the target rich menu", + "This is required when creating a rich menu that can be switched to from another rich menu using the richmenuswitch action type." + + "The alias serves as a unique identifier for the target rich menu", ) .optional(), }, From 180699ededfda2c1b67ec9113c174db7f427f487 Mon Sep 17 00:00:00 2001 From: 4geru Date: Fri, 4 Jul 2025 08:05:27 +0900 Subject: [PATCH 33/36] add richmenu-templates --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 872939b..28dc761 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,6 +19,7 @@ RUN addgroup -S appgroup && adduser -S appuser -G appgroup COPY --from=builder /app/dist /app/dist COPY --from=builder /app/package.json /app/package.json COPY --from=builder /app/package-lock.json /app/package-lock.json +COPY --from=builder /app/richmenu-templetes /app/richmenu-templetes ENV NODE_ENV=production From d6752a54497730ad1f59c343f7681e27ad35c367 Mon Sep 17 00:00:00 2001 From: 4geru Date: Fri, 4 Jul 2025 08:06:57 +0900 Subject: [PATCH 34/36] fix typo --- Dockerfile | 2 +- .../templete-01.md | 0 .../templete-02.md | 0 .../templete-03.md | 0 .../templete-04.md | 0 .../templete-05.md | 0 .../templete-06.md | 0 src/tools/createRichMenu.ts | 16 ++++++++-------- 8 files changed, 9 insertions(+), 9 deletions(-) rename {richmenu-templetes => richmenu-templates}/templete-01.md (100%) rename {richmenu-templetes => richmenu-templates}/templete-02.md (100%) rename {richmenu-templetes => richmenu-templates}/templete-03.md (100%) rename {richmenu-templetes => richmenu-templates}/templete-04.md (100%) rename {richmenu-templetes => richmenu-templates}/templete-05.md (100%) rename {richmenu-templetes => richmenu-templates}/templete-06.md (100%) diff --git a/Dockerfile b/Dockerfile index 28dc761..9d18341 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ RUN addgroup -S appgroup && adduser -S appuser -G appgroup COPY --from=builder /app/dist /app/dist COPY --from=builder /app/package.json /app/package.json COPY --from=builder /app/package-lock.json /app/package-lock.json -COPY --from=builder /app/richmenu-templetes /app/richmenu-templetes +COPY --from=builder /app/richmenu-templates /app/richmenu-templates ENV NODE_ENV=production diff --git a/richmenu-templetes/templete-01.md b/richmenu-templates/templete-01.md similarity index 100% rename from richmenu-templetes/templete-01.md rename to richmenu-templates/templete-01.md diff --git a/richmenu-templetes/templete-02.md b/richmenu-templates/templete-02.md similarity index 100% rename from richmenu-templetes/templete-02.md rename to richmenu-templates/templete-02.md diff --git a/richmenu-templetes/templete-03.md b/richmenu-templates/templete-03.md similarity index 100% rename from richmenu-templetes/templete-03.md rename to richmenu-templates/templete-03.md diff --git a/richmenu-templetes/templete-04.md b/richmenu-templates/templete-04.md similarity index 100% rename from richmenu-templetes/templete-04.md rename to richmenu-templates/templete-04.md diff --git a/richmenu-templetes/templete-05.md b/richmenu-templates/templete-05.md similarity index 100% rename from richmenu-templetes/templete-05.md rename to richmenu-templates/templete-05.md diff --git a/richmenu-templetes/templete-06.md b/richmenu-templates/templete-06.md similarity index 100% rename from richmenu-templetes/templete-06.md rename to richmenu-templates/templete-06.md diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 6dedc03..08d553f 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -170,14 +170,14 @@ async function generateRichMenuImage( // 5. Delete the temporary HTML file const richMenuImagePath = path.join( os.tmpdir(), - `templete-0${templateNo}-${Date.now()}.png`, + `template-0${templateNo}-${Date.now()}.png`, ); const serverPath = process.env.SERVER_PATH || path.resolve(__dirname, "..", ".."); // 1. Read the Markdown template const srcPath = path.join( serverPath, - `richmenu-templetes/templete-0${templateNo}.md`, + `richmenu-templates/template-0${templateNo}.md`, ); let content = await fsp.readFile(srcPath, "utf8"); for (let index = 0; index < actions.length; index++) { @@ -240,7 +240,7 @@ const richmenuBounds = (templateNo: number) => { const boundsMap: { x: number; y: number; width: number; height: number }[][] = [ [], - // templete-01 + // template-01 [ { x: 0, @@ -249,14 +249,14 @@ const richmenuBounds = (templateNo: number) => { height: RICHMENU_HEIGHT, }, ], - // templete-02 + // template-02 [0, 1].map(i => ({ x: (RICHMENU_WIDTH / 2) * i, y: 0, width: RICHMENU_WIDTH / 2, height: RICHMENU_HEIGHT, })), - // templete-03 + // template-03 [ { x: 0, @@ -271,7 +271,7 @@ const richmenuBounds = (templateNo: number) => { height: RICHMENU_HEIGHT / 2, })), ], - // templete-04 + // template-04 [0, 1] .map(i => [0, 1].map(j => ({ @@ -282,7 +282,7 @@ const richmenuBounds = (templateNo: number) => { })), ) .flat(), - // templete-05 + // template-05 [ { x: 0, @@ -303,7 +303,7 @@ const richmenuBounds = (templateNo: number) => { height: RICHMENU_HEIGHT / 2, })), ], - // templete-06 + // template-06 [0, 1] .map(i => [0, 1, 2].map(j => ({ From 7b0416b3791338cb90b74a5a21f6b108742981fb Mon Sep 17 00:00:00 2001 From: 4geru Date: Fri, 4 Jul 2025 08:10:34 +0900 Subject: [PATCH 35/36] rename the file names --- richmenu-templates/{templete-01.md => template-01.md} | 0 richmenu-templates/{templete-02.md => template-02.md} | 0 richmenu-templates/{templete-03.md => template-03.md} | 0 richmenu-templates/{templete-04.md => template-04.md} | 0 richmenu-templates/{templete-05.md => template-05.md} | 0 richmenu-templates/{templete-06.md => template-06.md} | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename richmenu-templates/{templete-01.md => template-01.md} (100%) rename richmenu-templates/{templete-02.md => template-02.md} (100%) rename richmenu-templates/{templete-03.md => template-03.md} (100%) rename richmenu-templates/{templete-04.md => template-04.md} (100%) rename richmenu-templates/{templete-05.md => template-05.md} (100%) rename richmenu-templates/{templete-06.md => template-06.md} (100%) diff --git a/richmenu-templates/templete-01.md b/richmenu-templates/template-01.md similarity index 100% rename from richmenu-templates/templete-01.md rename to richmenu-templates/template-01.md diff --git a/richmenu-templates/templete-02.md b/richmenu-templates/template-02.md similarity index 100% rename from richmenu-templates/templete-02.md rename to richmenu-templates/template-02.md diff --git a/richmenu-templates/templete-03.md b/richmenu-templates/template-03.md similarity index 100% rename from richmenu-templates/templete-03.md rename to richmenu-templates/template-03.md diff --git a/richmenu-templates/templete-04.md b/richmenu-templates/template-04.md similarity index 100% rename from richmenu-templates/templete-04.md rename to richmenu-templates/template-04.md diff --git a/richmenu-templates/templete-05.md b/richmenu-templates/template-05.md similarity index 100% rename from richmenu-templates/templete-05.md rename to richmenu-templates/template-05.md diff --git a/richmenu-templates/templete-06.md b/richmenu-templates/template-06.md similarity index 100% rename from richmenu-templates/templete-06.md rename to richmenu-templates/template-06.md From 61d9b34ab1c6cbcf2ed02a483260ddf23f5291a7 Mon Sep 17 00:00:00 2001 From: 4geru Date: Fri, 4 Jul 2025 08:47:38 +0900 Subject: [PATCH 36/36] change workable on Docker --- Dockerfile | 4 ++++ src/tools/createRichMenu.ts | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9d18341..b5e8af8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,6 +32,10 @@ RUN chown -R appuser:appgroup /app # Install *only* the production dependencies RUN npm ci --ignore-scripts --omit-dev +RUN apk add --no-cache chromium nss freetype harfbuzz ca-certificates ttf-freefont + +ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser + # Now, switch to running as our non-root user for the actual app process USER appuser diff --git a/src/tools/createRichMenu.ts b/src/tools/createRichMenu.ts index 08d553f..c99a567 100644 --- a/src/tools/createRichMenu.ts +++ b/src/tools/createRichMenu.ts @@ -205,7 +205,10 @@ async function generateRichMenuImage( await fsp.writeFile(tempHtmlPath, htmlContent, "utf8"); // 4. Use puppeteer to convert HTML to PNG - const browser = await puppeteer.launch(); + const browser = await puppeteer.launch({ + args: ["--no-sandbox", "--disable-setuid-sandbox"], + executablePath: process.env.PUPPETEER_EXECUTABLE_PATH, + }); const page = await browser.newPage(); await page.setViewport({ width: RICHMENU_WIDTH, height: RICHMENU_HEIGHT }); await page.goto(`file://${tempHtmlPath}`, {