diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b278d5ee..36a60036 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,8 +13,6 @@ jobs: - run: npm ci - - run: cp -rf patches/shiki-twoslash/* node_modules/shiki-twoslash/dist/ - - run: npm run build - name: deploy diff --git a/docusaurus.config.js b/docusaurus.config.js index d555d165..4f4a1253 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -2,8 +2,7 @@ // Note: type annotations allow type checking and IDEs autocompletion const fs = require('node:fs'); -const remarkShikiTwoSlash = require('remark-shiki-twoslash').default; -const rehypeRaw = require('rehype-raw').default; +const rehypeShiki = require('@shikijs/rehype').default; const rehypeRawOptions = { passThrough: ['mdxjsEsm', 'mdxJsxTextElement', 'mdxJsxFlowElement', 'mdxFlowExpression'] @@ -41,33 +40,26 @@ const config = { docs: { breadcrumbs: false, sidebarPath: require.resolve('./sidebars.js'), - rehypePlugins: [[rehypeRaw, rehypeRawOptions]], // fix for MDX compilation courtesy of kamranayub: https://github.com/shikijs/twoslash/issues/125#issuecomment-2692325341 + beforeDefaultRehypePlugins: [ + [ + rehypeShiki, + { + theme: require('./src/theme/monokai-patched.json'), + langs: [ + 'c', + 'cpp', + 'lua', + require('./src/theme/Pluto.tmLanguage.json'), + ], + } + ], + ], }, theme: { customCss: require.resolve('./src/css/custom.css'), }, }), ], - [ - 'docusaurus-preset-shiki-twoslash', - { - theme: 'monokai-patched', - langs: [ - 'c', - 'cpp', - 'lua', - { - id: 'pluto', - name: 'pluto', - scopeName: 'source.pluto', - path: require.resolve('./src/theme/Pluto.tmLanguage.json'), - } - ], - themes: [ - require('./src/theme/monokai-patched.json'), - ], - } - ], ], themeConfig: diff --git a/package-lock.json b/package-lock.json index a4cac219..238b5408 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,8 @@ "@docusaurus/core": "^3", "@docusaurus/preset-classic": "^3", "@easyops-cn/docusaurus-search-local": "^0.49.2", - "docusaurus-preset-shiki-twoslash": "^1.1.41", - "rehype-raw": "^7.0.0" + "@shikijs/rehype": "^3.2.2", + "shiki": "^3.2.2" }, "engines": { "node": ">=16.14" @@ -4416,6 +4416,87 @@ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "license": "MIT" }, + "node_modules/@shikijs/core": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.4.2.tgz", + "integrity": "sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.4.2.tgz", + "integrity": "sha512-1/adJbSMBOkpScCE/SB6XkjJU17ANln3Wky7lOmrnpl+zBdQ1qXUJg2GXTYVHRq+2j3hd1DesmElTXYDgtfSOQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.3" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.4.2.tgz", + "integrity": "sha512-zcZKMnNndgRa3ORja6Iemsr3DrLtkX3cAF7lTJkdMB6v9alhlBsX9uNiCpqofNrXOvpA3h6lHcLJxgCIhVOU5Q==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.4.2", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.4.2.tgz", + "integrity": "sha512-H6azIAM+OXD98yztIfs/KH5H4PU39t+SREhmM8LaNXyUrqj2mx+zVkr8MWYqjceSjDw9I1jawm1WdFqU806rMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.4.2" + } + }, + "node_modules/@shikijs/rehype": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.4.2.tgz", + "integrity": "sha512-atbsrT3UKs25OdKVbNoHyKO9ZP7KEBPlo1oanPGMkvUL0fLictpxMPz6vPE2YTeHhpwz7EMrA4K4FHRY8XAReg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.4.2", + "@types/hast": "^3.0.4", + "hast-util-to-string": "^3.0.1", + "shiki": "3.4.2", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.4.2.tgz", + "integrity": "sha512-qAEuAQh+brd8Jyej2UDDf+b4V2g1Rm8aBIdvt32XhDPrHvDkEnpb7Kzc9hSuHUxz0Iuflmq7elaDuQAP9bHIhg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.4.2" + } + }, + "node_modules/@shikijs/types": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.4.2.tgz", + "integrity": "sha512-zHC1l7L+eQlDXLnxvM9R91Efh2V4+rN3oMVS2swCBssbj2U/FBwybD1eeLaq8yl/iwT+zih8iUbTBCgGZOYlVg==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -5144,35 +5225,6 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "license": "MIT" }, - "node_modules/@typescript/twoslash": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@typescript/twoslash/-/twoslash-3.1.0.tgz", - "integrity": "sha512-kTwMUQ8xtAZaC4wb2XuLkPqFVBj2dNBueMQ89NWEuw87k2nLBbuafeG5cob/QEr6YduxIdTVUjix0MtC7mPlmg==", - "license": "MIT", - "dependencies": { - "@typescript/vfs": "1.3.5", - "debug": "^4.1.1", - "lz-string": "^1.4.4" - } - }, - "node_modules/@typescript/twoslash/node_modules/@typescript/vfs": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.5.tgz", - "integrity": "sha512-pI8Saqjupf9MfLw7w2+og+fmb0fZS0J6vsKXXrp4/PDXEFvntgzXmChCXC/KefZZS0YGS6AT8e0hGAJcTsdJlg==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@typescript/vfs": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.4.tgz", - "integrity": "sha512-RbyJiaAGQPIcAGWFa3jAXSuAexU4BFiDRF1g3hy7LmRqfNpYlTQWGXjcrOaVZjJ8YkkpuwG0FcsYvtWQpd9igQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1" - } - }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -7500,17 +7552,6 @@ "node": ">=6" } }, - "node_modules/docusaurus-preset-shiki-twoslash": { - "version": "1.1.41", - "resolved": "https://registry.npmjs.org/docusaurus-preset-shiki-twoslash/-/docusaurus-preset-shiki-twoslash-1.1.41.tgz", - "integrity": "sha512-Ny5Ot+r7dMnfkcD+YcdtSmM4LVWoLRGWe/A6AqzcN4h6mqE82EU6KMA53wVI50YqgTOIIrNNI6QJr70rPWebcw==", - "license": "MIT", - "dependencies": { - "copy-text-to-clipboard": "^3.0.1", - "remark-shiki-twoslash": "3.1.3", - "typescript": ">3" - } - }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -8288,15 +8329,6 @@ "node": ">=0.4.0" } }, - "node_modules/fenceparser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fenceparser/-/fenceparser-1.1.1.tgz", - "integrity": "sha512-VdkTsK7GWLT0VWMK5S5WTAPn61wJ98WPFwJiRHumhg4ESNUO/tnkU8bzzzc62o6Uk1SVhuZFLnakmDA4SGV7wA==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -9186,6 +9218,29 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-jsx-runtime": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", @@ -9242,6 +9297,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-whitespace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", @@ -10223,12 +10291,6 @@ "node": ">=6" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "license": "MIT" - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -10455,15 +10517,6 @@ "integrity": "sha512-hWUAb2KqM3L7J5bcrngszzISY4BxrXn/Xhbb9TTCJYEGqlR1nG67/M14sp09+PTIRklobrn57IAxcdcO/ZFyNA==", "license": "MPL-1.1" }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } - }, "node_modules/mark.js": { "version": "8.11.1", "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", @@ -13192,6 +13245,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz", + "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, "node_modules/open": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", @@ -15726,10 +15796,28 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "node_modules/regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", + "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", "license": "MIT" }, "node_modules/regexpu-core": { @@ -15958,77 +16046,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-shiki-twoslash": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/remark-shiki-twoslash/-/remark-shiki-twoslash-3.1.3.tgz", - "integrity": "sha512-4e8OH3ySOCw5wUbDcPszokOKjKuebOqlP2WlySvC7ITBOq27BiGsFlq+FNWhxppZ+JzhTWah4gQrnMjX3KDbAQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "@typescript/twoslash": "3.1.0", - "@typescript/vfs": "1.3.4", - "fenceparser": "^1.1.0", - "regenerator-runtime": "^0.13.7", - "shiki": "0.10.1", - "shiki-twoslash": "3.1.2", - "tslib": "2.1.0", - "unist-util-visit": "^2.0.0" - }, - "peerDependencies": { - "typescript": ">3" - } - }, - "node_modules/remark-shiki-twoslash/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/remark-shiki-twoslash/node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "license": "0BSD" - }, - "node_modules/remark-shiki-twoslash/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-shiki-twoslash/node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-shiki-twoslash/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-stringify": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", @@ -16704,29 +16721,19 @@ } }, "node_modules/shiki": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", - "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", - "license": "MIT", - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, - "node_modules/shiki-twoslash": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/shiki-twoslash/-/shiki-twoslash-3.1.2.tgz", - "integrity": "sha512-JBcRIIizi+exIA/OUhYkV6jtyeZco0ykCkIRd5sgwIt1Pm4pz+maoaRZpm6SkhPwvif4fCA7xOtJOykhpIV64Q==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.4.2.tgz", + "integrity": "sha512-wuxzZzQG8kvZndD7nustrNFIKYJ1jJoWIPaBpVe2+KHSvtzMi4SBjOxrigs8qeqce/l3U0cwiC+VAkLKSunHQQ==", "license": "MIT", "dependencies": { - "@typescript/twoslash": "3.1.0", - "@typescript/vfs": "1.3.4", - "fenceparser": "^1.1.0", - "shiki": "0.10.1" - }, - "peerDependencies": { - "typescript": ">3" + "@shikijs/core": "3.4.2", + "@shikijs/engine-javascript": "3.4.2", + "@shikijs/engine-oniguruma": "3.4.2", + "@shikijs/langs": "3.4.2", + "@shikijs/themes": "3.4.2", + "@shikijs/types": "3.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" } }, "node_modules/side-channel": { @@ -17470,6 +17477,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17981,18 +17989,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "license": "MIT" - }, - "node_modules/vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "license": "MIT" - }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", diff --git a/package.json b/package.json index d23298c7..bb85263a 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ "@docusaurus/core": "^3", "@docusaurus/preset-classic": "^3", "@easyops-cn/docusaurus-search-local": "^0.49.2", - "docusaurus-preset-shiki-twoslash": "^1.1.41", - "rehype-raw": "^7.0.0" + "@shikijs/rehype": "^3.2.2", + "shiki": "^3.2.2" }, "browserslist": { "production": [ diff --git a/patches/shiki-twoslash/shiki-twoslash.cjs.development.js b/patches/shiki-twoslash/shiki-twoslash.cjs.development.js deleted file mode 100644 index 4beefd15..00000000 --- a/patches/shiki-twoslash/shiki-twoslash.cjs.development.js +++ /dev/null @@ -1,791 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var shiki = require('shiki'); -var shiki__default = _interopDefault(shiki); -var twoslash = require('@typescript/twoslash'); - -function _extends() { - return _extends = Object.assign ? Object.assign.bind() : function (n) { - for (var e = 1; e < arguments.length; e++) { - var t = arguments[e]; - for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); - } - return n; - }, _extends.apply(null, arguments); -} - -var htmlForTags = function htmlForTags(tags) { - var html = ""; - tags.forEach(function (t) { - if (t.name === "annotate" && t.annotation) { - var meta = t.annotation.split(" - "); - var text = meta.pop(); - var info = (meta[0] || "").trim(); - var flipped = info.includes("right"); - var settings = { - flipped: flipped, - arrowRot: flipped ? "90deg 20px 20px" : "90deg 20px 20px", - textDegree: "0deg", - top: t.line + "em" - }; - if (info.includes("{")) { - var theInfo = "{" + info.split("{")[1]; - try { - var specificSettings = JSON.parse(theInfo); - settings = _extends({}, settings, specificSettings); - } catch (error) { - throw new twoslash.TwoslashError("Could not parse annotation", "The annotation " + JSON.stringify(t) + " could convert '" + theInfo + "' into JSON", "Look at " + error.message + "."); - } - } - var arrowSVG = arrow(settings); - html += "\n
\n " + arrowSVG + "\n

" + text + "

\n
"; - } - }); - return html; -}; -var arrow = function arrow(style) { - var leftInner = "M27 39C26.5 32.7511 21.9 17.5173 7.5 6.57333M16.5 4.04L0.999999 0.999998C3.16667 4.88444 7.5 13.16 7.5 15.1867"; - var rightInner = "M1 39C1.5 32.7511 6.1 17.5173 20.5 6.57333M11.5 4.04L27 0.999998C24.8333 4.88444 20.5 13.16 20.5 15.1867"; - var inner = style.flipped ? leftInner : rightInner; - var rot = style.arrowRot.split(" "); - return "\n \n"; -}; - -/** - * We're given the text which lives inside the token, and this function will - * annotate it with twoslash metadata - */ -function createHighlightedString(ranges, text, targetedWord) { - if (targetedWord === void 0) { - targetedWord = ""; - } - // Why the weird chars? We need to make sure that generic syntax isn't - // interpreted as html tags - to do that we need to switch out < to < - *but* - // making that transition changes the indexes because it's gone from 1 char to 4 chars - // - // So, use an obscure character to indicate a real < for HTML, then switch it after - var tag = function tag(x) { - return "\u21CD" + x + "\u21CF"; - }; - var makeTagFromRange = function makeTagFromRange(r, close) { - switch (r.classes) { - case "lsp": - // The LSP response lives inside a dom attribute, which _can_ have < inside it, so switch them ahead of time. - var lsp = htmlAttrReplacer(r.lsp || ""); - var underLineTargetedWord = r.lsp === targetedWord ? "style=⇯border-bottom: solid 2px lightgrey;⇯" : ""; - return close ? tag("/data-lsp") : tag("data-lsp lsp=\xBF" + lsp + "\xBF " + underLineTargetedWord); - case "query": - return tag((close ? "/" : "") + "data-highlight"); - // handle both unknown and err variant as error-tag - // case "err": is not required, just to be useful for others - case "err": - default: - return tag((close ? "/" : "") + "data-err"); - } - }; - ranges.sort(function (a, b) { - // Order of precedence - // if two same offset meet, the lsp will be put as innermost than err and query - var precedenceOf = function precedenceOf(x) { - return ["err", "query", "lsp"].indexOf(x != null ? x : ""); - }; - var cmp = 0; - // Can be desugared into, - // 1. compare based on smaller begin, !(cmp) means if it's 0 then - // 2. compare based on bigger end, ^ same thing again then - // 3. compare based on higher precedence - // && is so that if a step made cmp to something other than 0, it stops - /***1*/ - !(cmp = a.begin - b.begin) && /*2*/!(cmp = b.end - a.end) && /*3*/!(cmp = precedenceOf(a.classes) - precedenceOf(b.classes)); - return cmp; - }); // `Array.sort` works in place - // Marks how much of the text has been put into the output/html - var cursor = 0; - // should be maximum of O(n) where n is length of ranges - var _nest = function nest(data) { - var stack = ""; - var top = data.shift(); // I have made sure data can't be empty - // parse from cursor to top.begin to make sure - // strings on the way are parsed - stack += text.substring(cursor, top.begin); - cursor = top.begin; - // open tag - stack += makeTagFromRange(top); - // if the data still have an element that's in the top's range - if (data.some(function (x) { - return x.begin < top.end; - })) { - stack += _nest(data); - } else { - // othewise slice the text and set cursor - stack += text.substring(top.begin, top.end); - cursor = top.end; - } - // close tag - stack += makeTagFromRange(top, true); - // if the tag is complete but still have some data left in the range - if (data.length !== 0) { - stack += _nest(data); - } - return stack; - }; - // cloned because I don't feel comfortable modifying this as a side-effect from recursion - var data = JSON.parse(JSON.stringify(ranges)); - var html = _nest(data) + text.substring(cursor); // nested + leftover texts - return htmlAttrUnReplacer(replaceTripleArrow(stripHTML(html))); -} -// HTML attributes have different rules, -var htmlAttrReplacer = function htmlAttrReplacer(str) { - return str.replace(/"/g, "⃟"); -}; -var htmlAttrUnReplacer = function htmlAttrUnReplacer(str) { - return str.replace(/⃟/g, '"'); -}; -// Inline strings which are shown at HTML level -var subTripleArrow = function subTripleArrow(str) { - return str.replace(//g, "⇏").replace(/'/g, "⇯"); -}; -var replaceTripleArrow = function replaceTripleArrow(str) { - return str.replace(/⇍/g, "<").replace(/⇏/g, ">").replace(/⇯/g, "'").replace(/¿/g, "'"); -}; -var replaceTripleArrowEncoded = function replaceTripleArrowEncoded(str) { - return str.replace(/⇍/g, "<").replace(/⇏/g, ">").replace(/⇯/g, "'"); -}; -function stripHTML(text) { - var table = { - "<": "lt", - '"': "quot", - "'": "apos", - "&": "amp", - "\r": "#13", - "\n": "#10" - }; - return text.toString().replace(/[<"'\r\n&]/g, function (chr) { - return "&" + table[chr] + ";"; - }); -} -function escapeHtml(html) { - return html.replace(//g, ">"); -} -/** Does anything in the object imply that we should highlight any lines? */ -var shouldBeHighlightable = function shouldBeHighlightable(highlight) { - return !!Object.keys(highlight || {}).find(function (key) { - if (key.includes("-")) return true; - if (!isNaN(parseInt(key))) return true; - return false; - }); -}; -/** Returns a func for figuring out if this line should be highlighted */ -var shouldHighlightLine = function shouldHighlightLine(highlight) { - var lines = []; - Object.keys(highlight || {}).find(function (key) { - if (!isNaN(parseInt(key))) lines.push(parseInt(key)); - if (key.includes("-")) { - var _key$split = key.split("-"), - first = _key$split[0], - last = _key$split[1]; - var lastIndex = parseInt(last) + 1; - for (var i = parseInt(first); i < lastIndex; i++) { - lines.push(i); - } - } - }); - return function (line) { - return lines.includes(line); - }; -}; - -/** A func for setting a consistent
 */
-var preOpenerFromRenderingOptsWithExtras = function preOpenerFromRenderingOptsWithExtras(opts, meta, classes) {
-  var bg = opts.bg || "#fff";
-  var fg = opts.fg || "black";
-  var theme = opts.themeName || "";
-  // shiki + `class` from fence + with-title if title exists + classes
-  var classList = ["shiki", theme, meta["class"], meta.title ? "with-title" : ""].concat(classes || []).filter(Boolean).join(" ").trim();
-  var attributes = Object.entries(meta).filter(function (entry) {
-    // exclude types other than string, number, boolean
-    // exclude keys class, twoslash
-    // exclude falsy booleans
-    return ["string", "number", "boolean"].includes(typeof entry[1]) && !["class", "twoslash"].includes(entry[0]) && entry[1] !== false;
-  }).map(function (_ref) {
-    var key = _ref[0],
-      value = _ref[1];
-    return key + "=\"" + value + "\"";
-  }).join(" ").trim();
-  // prettier-ignore
-  return "
";
-};
-/** You don't have a language which shiki twoslash can handle, make a DOM compatible version  */
-function plainTextRenderer(code, options, meta) {
-  var html = "";
-  html += preOpenerFromRenderingOptsWithExtras(options, meta, []);
-  if (meta.title) {
-    html += "
" + meta.title + "
"; - } - if (options.langId) { - html += "
" + options.langId + "
"; - } - html += "
"; - html += escapeHtml(code); - html = html.replace(/\n*$/, ""); // Get rid of final new lines - html += "
"; - return html; -} - -// OK, so - this is just straight up complex code. -// What we're trying to do is merge two sets of information into a single tree for HTML -// 1: Syntax highlight info from shiki -// 2: Twoslash metadata like errors, identifiers etc -// Because shiki gives use a set of lines to work from, then the first thing which happens -// is converting twoslash data into the same format. -// Things which make it hard: -// -// - Twoslash results can be cut, so sometimes there is edge cases between twoslash results -// - Twoslash results can be multi-file -// - the DOM requires a flattened graph of html elements (e.g. spans can' be interspersed) -// -function twoslashRenderer(lines, options, twoslash, meta) { - var html = ""; - var hasHighlight = meta.highlight && shouldBeHighlightable(meta.highlight); - var hl = shouldHighlightLine(meta.highlight); - if (twoslash.tags && twoslash.tags.length) html += "
"; - html += preOpenerFromRenderingOptsWithExtras(options, meta, ["twoslash", "lsp"]); - if (meta.title) { - html += "
" + meta.title + "
"; - } - if (options.langId) { - html += "
" + options.langId + "
"; - } - html += "
"; - var errorsGroupedByLine = groupBy(twoslash.errors, function (e) { - return e.line; - }) || new Map(); - var staticQuickInfosGroupedByLine = groupBy(twoslash.staticQuickInfos, function (q) { - return q.line; - }) || new Map(); - // A query is always about the line above it! - var queriesGroupedByLine = groupBy(twoslash.queries, function (q) { - return q.line - 1; - }) || new Map(); - var tagsGroupedByLine = groupBy(twoslash.tags, function (q) { - return q.line - 1; - }) || new Map(); - /** - * This is the index of the original twoslash code reference, it is not - * related to the HTML output - */ - var filePos = 0; - lines.forEach(function (l, i) { - var errors = errorsGroupedByLine.get(i) || []; - var lspValues = staticQuickInfosGroupedByLine.get(i) || []; - var queries = queriesGroupedByLine.get(i) || []; - var tags = tagsGroupedByLine.get(i) || []; - var hiClass = hasHighlight ? hl(i + 1) ? " highlight" : " dim" : ""; - var prefix = "
"; - if (l.length === 0 && i === 0) { - // Skip the first newline if it's blank - filePos += 1; - } else if (l.length === 0) { - var emptyLine = prefix + " 
"; - html += emptyLine; - filePos += 1; - } else { - html += prefix; - // Keep track of the position of the current token in a line so we can match it up to the - // errors and lang serv identifiers - var tokenPos = 0; - l.forEach(function (token) { - var targetedQueryWord; - var tokenContent = ""; - // Underlining particular words - var findTokenFunc = function findTokenFunc(start) { - return function (e) { - return start <= e.character && start + token.content.length >= e.character + e.length; - }; - }; - var errorsInToken = errors.filter(findTokenFunc(tokenPos)); - var lspResponsesInToken = lspValues.filter(findTokenFunc(tokenPos)); - var queriesInToken = queries.filter(findTokenFunc(tokenPos)); - // Does this line have a word targeted by a query? - targetedQueryWord = targetedQueryWord || lspResponsesInToken.find(function (response) { - return response.text === (queries.length && queries[0].text); - }); - var allTokens = [].concat(errorsInToken, lspResponsesInToken, queriesInToken); - var allTokensByStart = allTokens.sort(function (l, r) { - return (l.start || 0) - (r.start || 0); - }); - if (allTokensByStart.length) { - var _targetedQueryWord; - var ranges = allTokensByStart.map(function (token) { - var range = { - begin: token.start - filePos, - end: token.start + token.length - filePos - }; - if ("renderedMessage" in token) range.classes = "err"; - if ("kind" in token) range.classes = token.kind; - if ("targetString" in token) { - range.classes = "lsp"; - var lspText = options.includeJSDocInHover && token.docs ? token.docs + "\n\n" + token.text : token.text; - range["lsp"] = lspText; - } - return range; - }); - tokenContent += createHighlightedString(ranges, token.content, (_targetedQueryWord = targetedQueryWord) == null ? void 0 : _targetedQueryWord.text); - } else { - tokenContent += subTripleArrow(token.content); - } - html += "" + tokenContent + ""; - tokenPos += token.content.length; - filePos += token.content.length; - }); - html += "
"; - // This is the \n which the
represents - filePos += 1; - } - // Adding error messages to the line after - if (errors.length) { - var messages = errors.map(function (e) { - return escapeHtml(e.renderedMessage); - }).join("
"); - var codes = errors.map(function (e) { - return e.code; - }).join("
"); - html += "" + messages + "" + codes + ""; - html += "" + messages + ""; - } - // Add queries to the next line - if (queries.length) { - queries.forEach(function (query) { - // This is used to wrap popovers and completions to improve styling options for users. - html += "
"; - switch (query.kind) { - case "query": - { - var queryTextWithPrefix = escapeHtml(query.text); - var _lspValues = staticQuickInfosGroupedByLine.get(i) || []; - var targetedWord = _lspValues.find(function (response) { - return response.text === (queries.length && queries[0].text); - }); - var halfWayAcrossTheTargetedWord = (targetedWord && targetedWord.character + (targetedWord == null ? void 0 : targetedWord.length) / 2) - 1 || 0; - html += "" + " ".repeat(halfWayAcrossTheTargetedWord) + "" + ("
" + queryTextWithPrefix + "
"); - break; - } - case "completions": - { - if (!query.completions) { - html += "" + ("//" + "".padStart(query.offset - 2) + "^ - No completions found") + ""; - } else { - var prefixed = query.completions.filter(function (c) { - return c.name.startsWith(query.completionsPrefix || "____"); - }); - var lis = prefixed.sort(function (l, r) { - return l.name.localeCompare(r.name); - }).map(function (c) { - var _query$completionsPre, _c$kindModifiers; - var after = c.name.substr(((_query$completionsPre = query.completionsPrefix) == null ? void 0 : _query$completionsPre.length) || 0); - var name = "" + (query.completionsPrefix || "") + "" + after + ""; - var isDeprecated = (_c$kindModifiers = c.kindModifiers) == null ? void 0 : _c$kindModifiers.split(",").includes("deprecated"); - var liClass = isDeprecated ? "deprecated" : ""; - return "
  • " + name + "
  • "; - }).join(""); - html += " ".repeat(query.offset) + ""; - } - } - } - html += "
    "; - }); - } - // Any tags (currently that's warn/error/log) - if (tags.length) { - tags.forEach(function (tag) { - if (!["error", "warn", "log"].includes(tag.name)) return; - // This is used to wrap popovers and completions to improve styling options for users. - html += "
    "; - switch (tag.name) { - case "error": - html += errorSVG + "" + (tag.annotation || "N/A") + ""; - break; - case "warn": - html += warningSVG + "" + (tag.annotation || "N/A") + ""; - break; - case "log": - html += logSVG + "" + (tag.annotation || "N/A") + ""; - break; - } - html += "
    "; - }); - } - }); - html = replaceTripleArrowEncoded(html.replace(/\n*$/, "")); // Get rid of final new lines - if (options.addTryButton) { - var playgroundLink = "Try"; - html += "
    " + playgroundLink; - } else { - html += ""; - } - html += "
    "; - // Attach annotations which live above of the code - if (twoslash.tags && twoslash.tags.length) { - html += htmlForTags(twoslash.tags); - html += ""; - } - return html; -} -/** Returns a map where all the keys are the value in keyGetter */ -function groupBy(list, keyGetter) { - var map = new Map(); - list.forEach(function (item) { - var key = keyGetter(item); - var collection = map.get(key); - if (!collection) { - map.set(key, [item]); - } else { - collection.push(item); - } - }); - return map; -} -var errorSVG = ""; -var warningSVG = ""; -var logSVG = ""; - -function defaultShikiRenderer(lines, options, meta) { - var html = ""; - var hasHighlight = meta.highlight && shouldBeHighlightable(meta.highlight); - var hl = shouldHighlightLine(meta.highlight); - html += preOpenerFromRenderingOptsWithExtras(options, meta, []); - if (meta.title) { - html += "
    " + meta.title + "
    "; - } - if (options.langId) { - html += "
    " + options.langId + "
    "; - } - html += "
    "; - lines.forEach(function (l, i) { - if (l.length === 0) { - html += "
    "; - } else { - var hiClass = hasHighlight ? hl(i) ? " highlight" : " dim" : ""; - var prefix = "
    "; - html += prefix; - l.forEach(function (token) { - var cssDeclarations = ["color: " + token.color]; - if (token.fontStyle) { - if (token.fontStyle & shiki__default.FontStyle.Italic) { - cssDeclarations.push('font-style: italic'); - } - if (token.fontStyle & shiki__default.FontStyle.Bold) { - cssDeclarations.push('font-weight: bold'); - } - if (token.fontStyle & shiki__default.FontStyle.Underline) { - cssDeclarations.push('text-decoration: underline'); - } - } - html += "" + escapeHtml(token.content) + ""; - }); - html += "
    "; - } - }); - html = html.replace(/\n*$/, ""); // Get rid of final new lines - html += "
    "; - return html; -} - -var tsconfig = { - compilerOptions: "The set of compiler options for your project", - allowJs: "Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files.", - allowSyntheticDefaultImports: "Allow 'import x from y' when a module doesn't have a default export.", - allowUmdGlobalAccess: "Allow accessing UMD globals from modules.", - allowUnreachableCode: "Disable error reporting for unreachable code.", - allowUnusedLabels: "Disable error reporting for unused labels.", - alwaysStrict: "Ensure 'use strict' is always emitted.", - assumeChangesOnlyAffectDirectDependencies: "Have recompiles in projects that use [`incremental`](#incremental) and `watch` mode assume that changes within a file will only affect files directly depending on it.", - baseUrl: "Specify the base directory to resolve non-relative module names.", - charset: "No longer supported. In early versions, manually set the text encoding for reading files.", - checkJs: "Enable error reporting in type-checked JavaScript files.", - clean: "Delete the outputs of all projects.", - composite: "Enable constraints that allow a TypeScript project to be used with project references.", - declaration: "Generate .d.ts files from TypeScript and JavaScript files in your project.", - declarationDir: "Specify the output directory for generated declaration files.", - declarationMap: "Create sourcemaps for d.ts files.", - diagnostics: "Output compiler performance information after building.", - disableFilenameBasedTypeAcquisition: "Disables inference for type acquisition by looking at filenames in a project.", - disableReferencedProjectLoad: "Reduce the number of projects loaded automatically by TypeScript.", - disableSizeLimit: "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server.", - disableSolutionSearching: "Opt a project out of multi-project reference checking when editing.", - disableSourceOfProjectReferenceRedirect: "Disable preferring source files instead of declaration files when referencing composite projects", - downlevelIteration: "Emit more compliant, but verbose and less performant JavaScript for iteration.", - emitBOM: "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.", - emitDeclarationOnly: "Only output d.ts files and not JavaScript files.", - emitDecoratorMetadata: "Emit design-type metadata for decorated declarations in source files.", - enable: "Disable the type acquisition for JavaScript projects", - esModuleInterop: "Emit additional JavaScript to ease support for importing CommonJS modules. This enables [`allowSyntheticDefaultImports`](#allowSyntheticDefaultImports) for type compatibility.", - exactOptionalPropertyTypes: "Differentiate between undefined and not present when type checking", - exclude: "Filters results from the [`include`](#include) option.", - excludeDirectories: "Remove a list of directories from the watch process.", - excludeFiles: "Remove a list of files from the watch mode's processing.", - experimentalDecorators: "Enable experimental support for TC39 stage 2 draft decorators.", - explainFiles: "Print files read during the compilation including why it was included.", - extendedDiagnostics: "Output more detailed compiler performance information after building.", - "extends": "Specify one or more path or node module references to base configuration files from which settings are inherited.", - fallbackPolling: "Specify what approach the watcher should use if the system runs out of native file watchers.", - files: "Include a list of files. This does not support glob patterns, as opposed to [`include`](#include).", - force: "Build all projects, including those that appear to be up to date", - forceConsistentCasingInFileNames: "Ensure that casing is correct in imports.", - generateCpuProfile: "Emit a v8 CPU profile of the compiler run for debugging.", - importHelpers: "Allow importing helper functions from tslib once per project, instead of including them per-file.", - importsNotUsedAsValues: "Specify emit/checking behavior for imports that are only used for types.", - include: "Specify a list of glob patterns that match files to be included in compilation.", - incremental: "Save .tsbuildinfo files to allow for incremental compilation of projects.", - inlineSourceMap: "Include sourcemap files inside the emitted JavaScript.", - inlineSources: "Include source code in the sourcemaps inside the emitted JavaScript.", - isolatedModules: "Ensure that each file can be safely transpiled without relying on other imports.", - jsx: "Specify what JSX code is generated.", - jsxFactory: "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'", - jsxFragmentFactory: "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'.", - jsxImportSource: "Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.", - keyofStringsOnly: "Make keyof only return strings instead of string, numbers or symbols. Legacy option.", - lib: "Specify a set of bundled library declaration files that describe the target runtime environment.", - listEmittedFiles: "Print the names of emitted files after a compilation.", - listFiles: "Print all of the files read during the compilation.", - locale: "Set the language of the messaging from TypeScript. This does not affect emit.", - mapRoot: "Specify the location where debugger should locate map files instead of generated locations.", - maxNodeModuleJsDepth: "Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with [`allowJs`](#allowJs).", - module: "Specify what module code is generated.", - moduleResolution: "Specify how TypeScript looks up a file from a given module specifier.", - newLine: "Set the newline character for emitting files.", - noEmit: "Disable emitting file from a compilation.", - noEmitHelpers: "Disable generating custom helper functions like `__extends` in compiled output.", - noEmitOnError: "Disable emitting files if any type checking errors are reported.", - noErrorTruncation: "Disable truncating types in error messages.", - noFallthroughCasesInSwitch: "Enable error reporting for fallthrough cases in switch statements.", - noImplicitAny: "Enable error reporting for expressions and declarations with an implied `any` type..", - noImplicitOverride: "Ensure overriding members in derived classes are marked with an override modifier.", - noImplicitReturns: "Enable error reporting for codepaths that do not explicitly return in a function.", - noImplicitThis: "Enable error reporting when `this` is given the type `any`.", - noImplicitUseStrict: "Disable adding 'use strict' directives in emitted JavaScript files.", - noLib: "Disable including any library files, including the default lib.d.ts.", - noPropertyAccessFromIndexSignature: "Enforces using indexed accessors for keys declared using an indexed type", - noResolve: "Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project.", - noStrictGenericChecks: "Disable strict checking of generic signatures in function types.", - noUncheckedIndexedAccess: "Add `undefined` to a type when accessed using an index.", - noUnusedLocals: "Enable error reporting when a local variables aren't read.", - noUnusedParameters: "Raise an error when a function parameter isn't read", - out: "Deprecated setting. Use [`outFile`](#outFile) instead.", - outDir: "Specify an output folder for all emitted files.", - outFile: "Specify a file that bundles all outputs into one JavaScript file. If [`declaration`](#declaration) is true, also designates a file that bundles all .d.ts output.", - paths: "Specify a set of entries that re-map imports to additional lookup locations.", - plugins: "Specify a list of language service plugins to include.", - preserveConstEnums: "Disable erasing `const enum` declarations in generated code.", - preserveSymlinks: "Disable resolving symlinks to their realpath. This correlates to the same flag in node.", - preserveWatchOutput: "Disable wiping the console in watch mode", - pretty: "Enable color and formatting in output to make compiler errors easier to read", - reactNamespace: "Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit.", - references: "Specify an array of objects that specify paths for projects. Used in project references.", - removeComments: "Disable emitting comments.", - resolveJsonModule: "Enable importing .json files", - rootDir: "Specify the root folder within your source files.", - rootDirs: "Allow multiple folders to be treated as one when resolving modules.", - skipDefaultLibCheck: "Skip type checking .d.ts files that are included with TypeScript.", - skipLibCheck: "Skip type checking all .d.ts files.", - sourceMap: "Create source map files for emitted JavaScript files.", - sourceRoot: "Specify the root path for debuggers to find the reference source code.", - strict: "Enable all strict type checking options.", - strictBindCallApply: "Check that the arguments for `bind`, `call`, and `apply` methods match the original function.", - strictFunctionTypes: "When assigning functions, check to ensure parameters and the return values are subtype-compatible.", - strictNullChecks: "When type checking, take into account `null` and `undefined`.", - strictPropertyInitialization: "Check for class properties that are declared but not set in the constructor.", - stripInternal: "Disable emitting declarations that have `@internal` in their JSDoc comments.", - suppressExcessPropertyErrors: "Disable reporting of excess property errors during the creation of object literals.", - suppressImplicitAnyIndexErrors: "Suppress [`noImplicitAny`](#noImplicitAny) errors when indexing objects that lack index signatures.", - synchronousWatchDirectory: "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively.", - target: "Set the JavaScript language version for emitted JavaScript and include compatible library declarations.", - traceResolution: "Log paths used during the [`moduleResolution`](#moduleResolution) process.", - tsBuildInfoFile: "Specify the folder for .tsbuildinfo incremental compilation files.", - typeAcquisition: "Specify options for automatic acquisition of declaration files.", - typeRoots: "Specify multiple folders that act like `./node_modules/@types`.", - types: "Specify type package names to be included without being referenced in a source file.", - useDefineForClassFields: "Emit ECMAScript-standard-compliant class fields.", - useUnknownInCatchVariables: "Default catch clause variables as `unknown` instead of `any`.", - verbose: "Enable verbose logging", - watchDirectory: "Specify how directories are watched on systems that lack recursive file-watching functionality.", - watchFile: "Specify how the TypeScript watch mode works." -}; - -/** Uses tmLanguage scopes to determine what the content of the token is */ -var tokenIsJSONKey = function tokenIsJSONKey(token) { - if (!token.explanation) return false; - return token.explanation.find(function (e) { - return e.scopes.find(function (s) { - return s.scopeName.includes("support.type.property-name"); - }); - }); -}; -/** Can you look up the token in the tsconfig reference? */ -var isKeyInTSConfig = function isKeyInTSConfig(token) { - if (token.content === '"') return; - var name = token.content.slice(1, token.content.length - 1); - return name in tsconfig; -}; -/** - * Renders a TSConfig JSON object with additional LSP-ish information - * @param lines the result of shiki highlighting - * @param options shiki display options - */ -function tsconfigJSONRenderer(lines, options, meta) { - var html = ""; - html += preOpenerFromRenderingOptsWithExtras(options, meta, ["tsconfig", "lsp"]); - if (meta.title) { - html += "
    " + meta.title + "
    "; - } - if (options.langId) { - html += "
    " + options.langId + "
    "; - } - html += "
    "; - lines.forEach(function (l) { - if (l.length === 0) { - html += "
    "; - } else { - html += "
    "; - l.forEach(function (token) { - // This means we're looking at a token which could be '"module"', '"', '"compilerOptions"' etc - if (tokenIsJSONKey(token) && isKeyInTSConfig(token)) { - var key = token.content.slice(1, token.content.length - 1); - var oneliner = tsconfig[key]; - // prettier-ignore - html += "\"\""; - } else { - html += "" + escapeHtml(token.content) + ""; - } - }); - html += "
    "; - } - }); - html = html.replace(/\n*$/, ""); // Get rid of final new lines - html += "
    "; - return html; -} - -/** - * This gets filled in by the promise below, then should - * hopefully be more or less synchronous access by each parse - * of the highlighter - */ -var storedHighlighter = null; -/** - * Creates a *cached singleton* Shiki highlighter, this is an async call because of the call to WASM to get - * the regex parser set up. - * - * In other functions, passing a the result of this highlighter function is kind of optional but it's the author's - * opinion that you should be in control of the highlighter, and not this library. - * - */ -var createShikiHighlighter = function createShikiHighlighter(options) { - if (storedHighlighter) return Promise.resolve(storedHighlighter); - return shiki.getHighlighter(options).then(function (newHighlighter) { - storedHighlighter = newHighlighter; - return storedHighlighter; - }); -}; -/** - * Renders a code sample to HTML, automatically taking into account: - * - * - rendering overrides for twoslash and tsconfig - * - whether the language exists in shiki - * - * @param code the source code to render - * @param lang the language to use in highlighting - * @param info additional metadata which lives after the code-fence lang (e.g. `{ twoslash: true }`) - * @param shikiOptions user settings - * @param highlighter optional, but you should use it, highlighter - * @param twoslash optional, but required when info contains 'twoslash' as a string - */ -var renderCodeToHTML = function renderCodeToHTML(code, lang, meta, shikiOptions, highlighter, twoslash) { - if (!highlighter && !storedHighlighter) { - throw new Error("The highlighter object hasn't been initialised via `setupHighLighter` yet in shiki-twoslash"); - } - // Shiki does know the lang, so tokenize - var renderHighlighter = highlighter || storedHighlighter; - var renderOpts = _extends({ - fg: renderHighlighter.getForegroundColor(), - bg: renderHighlighter.getBackgroundColor() - }, shikiOptions); - var tokens; - try { - // I'm a little unsure about why we need this, perhaps the jsx language - // upstream in shiki is broken? - var tmpLang = lang === "jsx" ? "tsx" : lang; - tokens = renderHighlighter.codeToThemedTokens(code, tmpLang); - } catch (error) { - // Shiki doesn't know this lang, so render it as plain text, but - // also add a note at the end as a HTML comment - var note = ""; - return plainTextRenderer(code, renderOpts, meta) + note; - } - // Twoslash specific renderer - if (lang && meta.twoslash && twoslash) { - return twoslashRenderer(tokens, _extends({}, renderOpts, { - langId: lang - }), twoslash, meta); - } - // TSConfig renderer - if (lang && lang.startsWith("json") && meta.tsconfig) { - return tsconfigJSONRenderer(tokens, renderOpts, meta); - } - // Otherwise just the normal shiki renderer - return defaultShikiRenderer(tokens, _extends({}, renderOpts, { - langId: lang - }), meta); -}; -/** - * Runs Twoslash over the code passed in with a particular language as the default file. - */ -var runTwoSlash = function runTwoSlash(input, lang, settings) { - if (settings === void 0) { - settings = {}; - } - var code = input; - // Shiki doesn't handle a few filetype mappings, so do that ahead of time. Oddly enough, this also - // gets re-done at remark-shiki level - var replacer = { - json5: "json", - yml: "yaml" - }; - // @ts-ignore - if (replacer[lang]) lang = replacer[lang]; - var hasReactImport = /^import\s+React(?:.*)\s+from\s+('|")react\1/gm; - // Add react import to code samples indicating they're needing react. - if (["tsx", "jsx"].includes(lang) && !settings.disableImplicitReactImport && !hasReactImport.test(code)) { - var reactImport = "import React from 'react'\n"; - var cutString = "// ---cut---\n"; - // ^ cutString taken directly from - // https://github.com/microsoft/TypeScript-Website/blob/0c8d98a69d520365c1909d536fa1323f03a8438c/packages/ts-twoslasher/src/index.ts#L694 - if (code.includes(cutString)) { - code = code.split(cutString).map(function (item, index) { - return index == 0 ? reactImport.concat(item) : item; - }).join(cutString); - } else { - code = [reactImport, cutString, code].join(""); - } - } - settings.customTags = ["annotate", "log", "warn", "error"]; - var results = twoslash.twoslasher(code, lang, settings); - return results; -}; -/** Set of renderers if you want to explicitly call one instead of using renderCodeToHTML */ -var renderers = { - plainTextRenderer: plainTextRenderer, - defaultShikiRenderer: defaultShikiRenderer, - twoslashRenderer: twoslashRenderer, - tsconfigJSONRenderer: tsconfigJSONRenderer -}; - -exports.createShikiHighlighter = createShikiHighlighter; -exports.renderCodeToHTML = renderCodeToHTML; -exports.renderers = renderers; -exports.runTwoSlash = runTwoSlash; -//# sourceMappingURL=shiki-twoslash.cjs.development.js.map diff --git a/patches/shiki-twoslash/shiki-twoslash.cjs.development.js.map b/patches/shiki-twoslash/shiki-twoslash.cjs.development.js.map deleted file mode 100644 index aa4f7167..00000000 --- a/patches/shiki-twoslash/shiki-twoslash.cjs.development.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"shiki-twoslash.cjs.development.js","sources":["../src/annotations.ts","../src/utils.ts","../src/renderers/plain.ts","../src/renderers/twoslash.ts","../src/renderers/shiki.ts","../src/tsconfig-oneliners.generated.ts","../src/renderers/tsconfig.ts","../src/index.ts"],"sourcesContent":["import { TwoslashError, TwoSlashReturn } from \"@typescript/twoslash\"\n\nexport const htmlForTags = (tags: TwoSlashReturn[\"tags\"]) => {\n let html = \"\"\n tags.forEach(t => {\n if (t.name === \"annotate\" && t.annotation) {\n const meta = t.annotation.split(\" - \")\n const text = meta.pop()\n const info = (meta[0] || \"\").trim()\n const flipped = info.includes(\"right\")\n let settings = {\n flipped,\n arrowRot: flipped ? \"90deg 20px 20px\" : \"90deg 20px 20px\",\n textDegree: \"0deg\",\n top: `${t.line}em`\n }\n \n \n if (info.includes(\"{\")) {\n const theInfo = \"{\" + info.split(\"{\")[1]\n try {\n const specificSettings = JSON.parse(theInfo)\n settings = {...settings, ...specificSettings }\n } catch (error) {\n throw new TwoslashError(\"Could not parse annotation\", `The annotation ${JSON.stringify(t)} could convert '${theInfo}' into JSON`, `Look at ${(error as any).message}.`)\n }\n }\n \n const arrowSVG = arrow(settings)\n\n html += `\n
    \n ${arrowSVG}\n

    ${text}

    \n
    `\n }\n })\n\n return html\n}\n\nconst arrow = (style: { flipped: boolean; arrowRot: string, textDegree: string, top: string }) => {\n const leftInner = `M27 39C26.5 32.7511 21.9 17.5173 7.5 6.57333M16.5 4.04L0.999999 0.999998C3.16667 4.88444 7.5 13.16 7.5 15.1867`\n const rightInner = `M1 39C1.5 32.7511 6.1 17.5173 20.5 6.57333M11.5 4.04L27 0.999998C24.8333 4.88444 20.5 13.16 20.5 15.1867`\n const inner = style.flipped ? leftInner : rightInner\n const rot = style.arrowRot.split(\" \")\n return `\n \n`\n}\n","import type { parse } from \"fenceparser\"\n\nexport type Meta = NonNullable>\n\ntype Range = {\n begin: number\n end: number\n text?: string\n count?: number\n tooltip?: string[]\n classes?: string\n lsp?: string\n}\n\n/**\n * We're given the text which lives inside the token, and this function will\n * annotate it with twoslash metadata\n */\nexport function createHighlightedString(ranges: Range[], text: string, targetedWord: string = \"\") {\n // Why the weird chars? We need to make sure that generic syntax isn't\n // interpreted as html tags - to do that we need to switch out < to < - *but*\n // making that transition changes the indexes because it's gone from 1 char to 4 chars\n //\n // So, use an obscure character to indicate a real < for HTML, then switch it after\n const tag = (x: string) => `⇍${x}⇏`\n const makeTagFromRange = (r: Range, close?: true) => {\n switch (r.classes) {\n case \"lsp\":\n // The LSP response lives inside a dom attribute, which _can_ have < inside it, so switch them ahead of time.\n const lsp = htmlAttrReplacer(r.lsp || \"\")\n const underLineTargetedWord = r.lsp === targetedWord ? \"style=⇯border-bottom: solid 2px lightgrey;⇯\" : \"\"\n return close ? tag(\"/data-lsp\") : tag(`data-lsp lsp=¿${lsp}¿ ${underLineTargetedWord}`)\n case \"query\":\n return tag(`${close ? \"/\" : \"\"}data-highlight`)\n // handle both unknown and err variant as error-tag\n // case \"err\": is not required, just to be useful for others\n case \"err\":\n default:\n return tag(`${close ? \"/\" : \"\"}data-err`)\n }\n }\n\n ranges.sort((a, b) => {\n // Order of precedence\n // if two same offset meet, the lsp will be put as innermost than err and query\n const precedenceOf = (x?: string) => [\"err\", \"query\", \"lsp\"].indexOf(x ?? \"\")\n\n let cmp = 0\n // Can be desugared into,\n // 1. compare based on smaller begin, !(cmp) means if it's 0 then\n // 2. compare based on bigger end, ^ same thing again then\n // 3. compare based on higher precedence\n // && is so that if a step made cmp to something other than 0, it stops\n /***1*/ !(cmp = a.begin - b.begin) &&\n /*2*/ !(cmp = b.end - a.end) &&\n /*3*/ !(cmp = precedenceOf(a.classes) - precedenceOf(b.classes))\n return cmp\n }) // `Array.sort` works in place\n\n // Marks how much of the text has been put into the output/html\n let cursor = 0\n // should be maximum of O(n) where n is length of ranges\n const nest = (data: typeof ranges) => {\n let stack = \"\"\n const top = data.shift()! // I have made sure data can't be empty\n\n // parse from cursor to top.begin to make sure\n // strings on the way are parsed\n stack += text.substring(cursor, top.begin)\n cursor = top.begin\n\n // open tag\n stack += makeTagFromRange(top)\n\n // if the data still have an element that's in the top's range\n if (data.some(x => x.begin < top.end)) {\n stack += nest(data)\n } else {\n // othewise slice the text and set cursor\n stack += text.substring(top.begin, top.end)\n cursor = top.end\n }\n\n // close tag\n stack += makeTagFromRange(top, true)\n\n // if the tag is complete but still have some data left in the range\n if (data.length !== 0) {\n stack += nest(data)\n }\n\n return stack\n }\n\n // cloned because I don't feel comfortable modifying this as a side-effect from recursion\n const data = JSON.parse(JSON.stringify(ranges))\n const html = nest(data) + text.substring(cursor) // nested + leftover texts\n\n return htmlAttrUnReplacer(replaceTripleArrow(stripHTML(html)))\n}\n\n// HTML attributes have different rules,\nconst htmlAttrReplacer = (str: string) => str.replace(/\"/g, \"⃟\")\nconst htmlAttrUnReplacer = (str: string) => str.replace(/⃟/g, '\"')\n\n// Inline strings which are shown at HTML level\nexport const subTripleArrow = (str: string) => str.replace(//g, \"⇏\").replace(/'/g, \"⇯\")\nexport const replaceTripleArrow = (str: string) =>\n str.replace(/⇍/g, \"<\").replace(/⇏/g, \">\").replace(/⇯/g, \"'\").replace(/¿/g, \"'\")\nexport const replaceTripleArrowEncoded = (str: string) =>\n str.replace(/⇍/g, \"<\").replace(/⇏/g, \">\").replace(/⇯/g, \"'\")\n\nexport function stripHTML(text: string) {\n var table: any = {\n \"<\": \"lt\",\n '\"': \"quot\",\n \"'\": \"apos\",\n \"&\": \"amp\",\n \"\\r\": \"#13\",\n \"\\n\": \"#10\",\n }\n\n return text.toString().replace(/[<\"'\\r\\n&]/g, function (chr) {\n return \"&\" + table[chr] + \";\"\n })\n}\n\nexport function escapeHtml(html: string) {\n return html.replace(//g, \">\")\n}\n\n/** Does anything in the object imply that we should highlight any lines? */\nexport const shouldBeHighlightable = (highlight: any) => {\n return !!Object.keys(highlight || {}).find(key => {\n if (key.includes(\"-\")) return true\n if (!isNaN(parseInt(key))) return true\n return false\n })\n}\n\n/** Returns a func for figuring out if this line should be highlighted */\nexport const shouldHighlightLine = (highlight: any) => {\n const lines: number[] = []\n Object.keys(highlight || {}).find(key => {\n if (!isNaN(parseInt(key))) lines.push(parseInt(key))\n if (key.includes(\"-\")) {\n const [first, last] = key.split(\"-\")\n const lastIndex = parseInt(last) + 1\n for (let i = parseInt(first); i < lastIndex; i++) {\n lines.push(i)\n }\n }\n })\n\n return (line: number) => lines.includes(line)\n}\n","import { escapeHtml, Meta } from \"../utils\"\n\n// C&P'd from shiki\nexport interface HtmlRendererOptions {\n langId?: string\n fg?: string\n bg?: string\n themeName?: string\n}\n\n/** A func for setting a consistent
     */\nexport const preOpenerFromRenderingOptsWithExtras = (opts: HtmlRendererOptions, meta: Meta, classes?: string[]) => {\n  const bg = opts.bg || \"#fff\"\n  const fg = opts.fg || \"black\"\n  const theme = opts.themeName || \"\"\n\n  // shiki + `class` from fence + with-title if title exists + classes\n  const classList = [\"shiki\", theme, meta.class, meta.title ? \"with-title\" : \"\", ...(classes || [])]\n    .filter(Boolean)\n    .join(\" \")\n    .trim()\n\n  const attributes = Object.entries(meta)\n    .filter(entry => {\n      // exclude types other than string, number, boolean\n      // exclude keys class, twoslash\n      // exclude falsy booleans\n      return (\n        [\"string\", \"number\", \"boolean\"].includes(typeof entry[1]) &&\n        ![\"class\", \"twoslash\"].includes(entry[0]) &&\n        entry[1] !== false\n      )\n    })\n    .map(([key, value]) => `${key}=\"${value}\"`)\n    .join(\" \")\n    .trim()\n\n  // prettier-ignore\n  return `
    `\n}\n\n/** You don't have a language which shiki twoslash can handle, make a DOM compatible version  */\nexport function plainTextRenderer(code: string, options: HtmlRendererOptions, meta: Meta) {\n  let html = \"\"\n\n  html += preOpenerFromRenderingOptsWithExtras(options, meta, [])\n  if (meta.title) {\n    html += `
    ${meta.title}
    `\n }\n\n if (options.langId) {\n html += `
    ${options.langId}
    `\n }\n\n html += `
    `\n html += escapeHtml(code)\n\n html = html.replace(/\\n*$/, \"\") // Get rid of final new lines\n html += `
    `\n return html\n}\n","type Lines = import(\"shiki\").IThemedToken[][]\ntype TwoSlash = import(\"@typescript/twoslash\").TwoSlashReturn\n\nimport { TwoslashShikiOptions } from \"..\"\nimport { htmlForTags } from \"../annotations\"\nimport {\n shouldBeHighlightable,\n shouldHighlightLine,\n createHighlightedString,\n subTripleArrow,\n replaceTripleArrowEncoded,\n escapeHtml,\n Meta,\n} from \"../utils\"\nimport { HtmlRendererOptions, preOpenerFromRenderingOptsWithExtras } from \"./plain\"\n\n// OK, so - this is just straight up complex code.\n\n// What we're trying to do is merge two sets of information into a single tree for HTML\n\n// 1: Syntax highlight info from shiki\n// 2: Twoslash metadata like errors, identifiers etc\n\n// Because shiki gives use a set of lines to work from, then the first thing which happens\n// is converting twoslash data into the same format.\n\n// Things which make it hard:\n//\n// - Twoslash results can be cut, so sometimes there is edge cases between twoslash results\n// - Twoslash results can be multi-file\n// - the DOM requires a flattened graph of html elements (e.g. spans can' be interspersed)\n//\n\nexport function twoslashRenderer(lines: Lines, options: HtmlRendererOptions & TwoslashShikiOptions, twoslash: TwoSlash, meta: Meta) {\n let html = \"\"\n\n const hasHighlight = meta.highlight && shouldBeHighlightable(meta.highlight)\n const hl = shouldHighlightLine(meta.highlight)\n\n if (twoslash.tags && twoslash.tags.length) html += \"
    \"\n \n html += preOpenerFromRenderingOptsWithExtras(options, meta, [\"twoslash\", \"lsp\"])\n if (meta.title) {\n html += `
    ${meta.title}
    `\n }\n\n if (options.langId) {\n html += `
    ${options.langId}
    `\n }\n\n html += `
    `\n\n const errorsGroupedByLine = groupBy(twoslash.errors, e => e.line) || new Map()\n const staticQuickInfosGroupedByLine = groupBy(twoslash.staticQuickInfos, q => q.line) || new Map()\n // A query is always about the line above it!\n const queriesGroupedByLine = groupBy(twoslash.queries, q => q.line - 1) || new Map()\n const tagsGroupedByLine = groupBy(twoslash.tags, q => q.line - 1) || new Map()\n\n /**\n * This is the index of the original twoslash code reference, it is not\n * related to the HTML output\n */\n let filePos = 0\n\n lines.forEach((l, i) => {\n const errors = errorsGroupedByLine.get(i) || []\n const lspValues = staticQuickInfosGroupedByLine.get(i) || []\n const queries = queriesGroupedByLine.get(i) || []\n const tags = tagsGroupedByLine.get(i) || []\n\n const hiClass = hasHighlight ? (hl(i + 1) ? \" highlight\" : \" dim\") : \"\"\n const prefix = `
    `\n\n if (l.length === 0 && i === 0) {\n // Skip the first newline if it's blank\n filePos += 1\n } else if (l.length === 0) {\n const emptyLine = `${prefix} 
    ` \n html += emptyLine\n filePos += 1\n } else {\n html += prefix\n\n // Keep track of the position of the current token in a line so we can match it up to the\n // errors and lang serv identifiers\n let tokenPos = 0\n\n l.forEach(token => {\n let targetedQueryWord: typeof twoslash.staticQuickInfos[number] | undefined\n\n let tokenContent = \"\"\n // Underlining particular words\n const findTokenFunc = (start: number) => (e: any) =>\n start <= e.character && start + token.content.length >= e.character + e.length\n\n const findTokenDebug = (start: number) => (e: any) => {\n const result = start <= e.character && start + token.content.length >= e.character + e.length\n // prettier-ignore\n console.log(result, start, '<=', e.character, '&&', start + token.content.length, '>=', e.character + e.length)\n if (result) {\n console.log(\"Found:\", e)\n console.log(\"Inside:\", token)\n }\n return result\n }\n\n const errorsInToken = errors.filter(findTokenFunc(tokenPos))\n const lspResponsesInToken = lspValues.filter(findTokenFunc(tokenPos))\n const queriesInToken = queries.filter(findTokenFunc(tokenPos))\n\n // Does this line have a word targeted by a query?\n targetedQueryWord = targetedQueryWord || lspResponsesInToken.find(response => response.text === (queries.length && queries[0].text))!\n\n const allTokens = [...errorsInToken, ...lspResponsesInToken, ...queriesInToken]\n const allTokensByStart = allTokens.sort((l, r) => {\n return (l.start || 0) - (r.start || 0)\n })\n\n if (allTokensByStart.length) {\n const ranges = allTokensByStart.map(token => {\n const range: any = {\n begin: token.start! - filePos,\n end: token.start! + token.length! - filePos,\n }\n\n // prettier-ignore\n if (range.begin < 0 || range.end < 0) {\n // prettier-ignore\n // throw new Error(`The begin range of a token is at a minus location, filePos:${filePos} current token: ${JSON.stringify(token, null, ' ')}\\n result: ${JSON.stringify(range, null, ' ')}`)\n }\n\n if (\"renderedMessage\" in token) range.classes = \"err\"\n if (\"kind\" in token) range.classes = token.kind\n if (\"targetString\" in token) {\n range.classes = \"lsp\"\n const lspText = options.includeJSDocInHover && token.docs ? `${token.docs}\\n\\n${token.text}` : token.text\n range[\"lsp\"] = lspText\n }\n return range\n })\n\n tokenContent += createHighlightedString(ranges, token.content, targetedQueryWord?.text)\n } else {\n tokenContent += subTripleArrow(token.content)\n }\n\n html += `${tokenContent}`\n tokenPos += token.content.length\n filePos += token.content.length\n })\n\n html += `
    `\n // This is the \\n which the
    represents\n filePos += 1\n }\n\n // Adding error messages to the line after\n if (errors.length) {\n const messages = errors.map(e => escapeHtml(e.renderedMessage)).join(\"
    \")\n const codes = errors.map(e => e.code).join(\"
    \")\n html += `${messages}${codes}`\n html += `${messages}`\n }\n\n // Add queries to the next line\n if (queries.length) {\n queries.forEach(query => {\n // This is used to wrap popovers and completions to improve styling options for users.\n html += `
    `\n\n switch (query.kind) {\n case \"query\": {\n const queryTextWithPrefix = escapeHtml(query.text!)\n const lspValues = staticQuickInfosGroupedByLine.get(i) || []\n const targetedWord = lspValues.find(response => response.text === (queries.length && queries[0].text))!\n const halfWayAcrossTheTargetedWord = ((targetedWord && targetedWord.character + targetedWord?.length / 2) - 1) || 0\n html +=\n `` +\n \" \".repeat(halfWayAcrossTheTargetedWord) +\n \"\" +\n `
    ${queryTextWithPrefix}
    `\n break\n }\n\n case \"completions\": {\n if (!query.completions) {\n html += `${\"//\" + \"\".padStart(query.offset - 2) + \"^ - No completions found\"}`\n } else {\n const prefixed = query.completions.filter(c => c.name.startsWith(query.completionsPrefix || \"____\"))\n\n const lis = prefixed\n .sort((l, r) => l.name.localeCompare(r.name))\n .map(c => {\n const after = c.name.substr(query.completionsPrefix?.length || 0)\n const name = `${query.completionsPrefix || \"\"}${after}`\n const isDeprecated = c.kindModifiers?.split(\",\").includes(\"deprecated\")\n const liClass = isDeprecated ? \"deprecated\" : \"\"\n return `
  • ${name}
  • `\n })\n .join(\"\")\n html += `${\" \".repeat(query.offset)}`\n }\n }\n }\n html += \"
    \"\n })\n }\n\n // Any tags (currently that's warn/error/log)\n if (tags.length) {\n tags.forEach(tag => {\n if(![\"error\", \"warn\", \"log\"].includes(tag.name)) return\n\n // This is used to wrap popovers and completions to improve styling options for users.\n html += `
    `\n switch(tag.name) {\n case \"error\": html += `${errorSVG}${tag.annotation || \"N/A\"}`; break;\n case \"warn\": html += `${warningSVG}${tag.annotation || \"N/A\"}`; break;\n case \"log\": html += `${logSVG}${tag.annotation || \"N/A\"}`; break;\n }\n html += \"
    \"\n })\n }\n })\n html = replaceTripleArrowEncoded(html.replace(/\\n*$/, \"\")) // Get rid of final new lines\n\n if (options.addTryButton) {\n const playgroundLink = `Try`\n html += `
    ${playgroundLink}`\n } else {\n html += ``\n }\n\n html += `
    `\n\n // Attach annotations which live above of the code\n if (twoslash.tags && twoslash.tags.length) {\n html += htmlForTags(twoslash.tags)\n html += \"\"\n }\n\n return html\n}\n\n/** Returns a map where all the keys are the value in keyGetter */\nfunction groupBy(list: T[], keyGetter: (obj: any) => number) {\n const map = new Map()\n list.forEach(item => {\n const key = keyGetter(item)\n const collection = map.get(key)\n if (!collection) {\n map.set(key, [item])\n } else {\n collection.push(item)\n }\n })\n return map\n}\n\n\nconst errorSVG = ``\nconst warningSVG = ``\nconst logSVG = ``","import { shouldBeHighlightable, shouldHighlightLine, escapeHtml, Meta } from \"../utils\"\nimport { HtmlRendererOptions, preOpenerFromRenderingOptsWithExtras } from \"./plain\"\nimport shiki from \"shiki\"\n\ntype Lines = shiki.IThemedToken[][]\n\nexport function defaultShikiRenderer(lines: Lines, options: HtmlRendererOptions, meta: Meta) {\n let html = \"\"\n\n const hasHighlight = meta.highlight && shouldBeHighlightable(meta.highlight)\n const hl = shouldHighlightLine(meta.highlight)\n\n html += preOpenerFromRenderingOptsWithExtras(options, meta, [])\n if (meta.title) {\n html += `
    ${meta.title}
    `\n }\n\n if (options.langId) {\n html += `
    ${options.langId}
    `\n }\n\n html += `
    `\n\n lines.forEach((l, i) => {\n if (l.length === 0) {\n html += `
    `\n } else {\n const hiClass = hasHighlight ? (hl(i) ? \" highlight\" : \" dim\") : \"\"\n const prefix = `
    `\n html += prefix\n\n l.forEach(token => {\n const cssDeclarations = [`color: ${token.color}`];\n if (token.fontStyle) {\n if (token.fontStyle & shiki.FontStyle.Italic) {\n cssDeclarations.push('font-style: italic');\n }\n if (token.fontStyle & shiki.FontStyle.Bold) {\n cssDeclarations.push('font-weight: bold');\n }\n if (token.fontStyle & shiki.FontStyle.Underline) {\n cssDeclarations.push('text-decoration: underline');\n }\n }\n html += `${escapeHtml(token.content)}`\n })\n html += `
    `\n }\n })\n\n html = html.replace(/\\n*$/, \"\") // Get rid of final new lines\n html += `
    `\n return html\n}\n","export const tsconfig = {\n compilerOptions: `The set of compiler options for your project`,\n allowJs: `Allow JavaScript files to be a part of your program. Use the \\`checkJS\\` option to get errors from these files.`,\n allowSyntheticDefaultImports: `Allow 'import x from y' when a module doesn't have a default export.`,\n allowUmdGlobalAccess: `Allow accessing UMD globals from modules.`,\n allowUnreachableCode: `Disable error reporting for unreachable code.`,\n allowUnusedLabels: `Disable error reporting for unused labels.`,\n alwaysStrict: `Ensure 'use strict' is always emitted.`,\n assumeChangesOnlyAffectDirectDependencies: `Have recompiles in projects that use [\\`incremental\\`](#incremental) and \\`watch\\` mode assume that changes within a file will only affect files directly depending on it.`,\n baseUrl: `Specify the base directory to resolve non-relative module names.`,\n charset: `No longer supported. In early versions, manually set the text encoding for reading files.`,\n checkJs: `Enable error reporting in type-checked JavaScript files.`,\n clean: `Delete the outputs of all projects.`,\n composite: `Enable constraints that allow a TypeScript project to be used with project references.`,\n declaration: `Generate .d.ts files from TypeScript and JavaScript files in your project.`,\n declarationDir: `Specify the output directory for generated declaration files.`,\n declarationMap: `Create sourcemaps for d.ts files.`,\n diagnostics: `Output compiler performance information after building.`,\n disableFilenameBasedTypeAcquisition: `Disables inference for type acquisition by looking at filenames in a project.`,\n disableReferencedProjectLoad: `Reduce the number of projects loaded automatically by TypeScript.`,\n disableSizeLimit: `Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server.`,\n disableSolutionSearching: `Opt a project out of multi-project reference checking when editing.`,\n disableSourceOfProjectReferenceRedirect: `Disable preferring source files instead of declaration files when referencing composite projects`,\n downlevelIteration: `Emit more compliant, but verbose and less performant JavaScript for iteration.`,\n emitBOM: `Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.`,\n emitDeclarationOnly: `Only output d.ts files and not JavaScript files.`,\n emitDecoratorMetadata: `Emit design-type metadata for decorated declarations in source files.`,\n enable: `Disable the type acquisition for JavaScript projects`,\n esModuleInterop: `Emit additional JavaScript to ease support for importing CommonJS modules. This enables [\\`allowSyntheticDefaultImports\\`](#allowSyntheticDefaultImports) for type compatibility.`,\n exactOptionalPropertyTypes: `Differentiate between undefined and not present when type checking`,\n exclude: `Filters results from the [\\`include\\`](#include) option.`,\n excludeDirectories: `Remove a list of directories from the watch process.`,\n excludeFiles: `Remove a list of files from the watch mode's processing.`,\n experimentalDecorators: `Enable experimental support for TC39 stage 2 draft decorators.`,\n explainFiles: `Print files read during the compilation including why it was included.`,\n extendedDiagnostics: `Output more detailed compiler performance information after building.`,\n extends: `Specify one or more path or node module references to base configuration files from which settings are inherited.`,\n fallbackPolling: `Specify what approach the watcher should use if the system runs out of native file watchers.`,\n files: `Include a list of files. This does not support glob patterns, as opposed to [\\`include\\`](#include).`,\n force: `Build all projects, including those that appear to be up to date`,\n forceConsistentCasingInFileNames: `Ensure that casing is correct in imports.`,\n generateCpuProfile: `Emit a v8 CPU profile of the compiler run for debugging.`,\n importHelpers: `Allow importing helper functions from tslib once per project, instead of including them per-file.`,\n importsNotUsedAsValues: `Specify emit/checking behavior for imports that are only used for types.`,\n include: `Specify a list of glob patterns that match files to be included in compilation.`,\n incremental: `Save .tsbuildinfo files to allow for incremental compilation of projects.`,\n inlineSourceMap: `Include sourcemap files inside the emitted JavaScript.`,\n inlineSources: `Include source code in the sourcemaps inside the emitted JavaScript.`,\n isolatedModules: `Ensure that each file can be safely transpiled without relying on other imports.`,\n jsx: `Specify what JSX code is generated.`,\n jsxFactory: `Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'`,\n jsxFragmentFactory: `Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'.`,\n jsxImportSource: `Specify module specifier used to import the JSX factory functions when using \\`jsx: react-jsx*\\`.`,\n keyofStringsOnly: `Make keyof only return strings instead of string, numbers or symbols. Legacy option.`,\n lib: `Specify a set of bundled library declaration files that describe the target runtime environment.`,\n listEmittedFiles: `Print the names of emitted files after a compilation.`,\n listFiles: `Print all of the files read during the compilation.`,\n locale: `Set the language of the messaging from TypeScript. This does not affect emit.`,\n mapRoot: `Specify the location where debugger should locate map files instead of generated locations.`,\n maxNodeModuleJsDepth: `Specify the maximum folder depth used for checking JavaScript files from \\`node_modules\\`. Only applicable with [\\`allowJs\\`](#allowJs).`,\n module: `Specify what module code is generated.`,\n moduleResolution: `Specify how TypeScript looks up a file from a given module specifier.`,\n newLine: `Set the newline character for emitting files.`,\n noEmit: `Disable emitting file from a compilation.`,\n noEmitHelpers: `Disable generating custom helper functions like \\`__extends\\` in compiled output.`,\n noEmitOnError: `Disable emitting files if any type checking errors are reported.`,\n noErrorTruncation: `Disable truncating types in error messages.`,\n noFallthroughCasesInSwitch: `Enable error reporting for fallthrough cases in switch statements.`,\n noImplicitAny: `Enable error reporting for expressions and declarations with an implied \\`any\\` type..`,\n noImplicitOverride: `Ensure overriding members in derived classes are marked with an override modifier.`,\n noImplicitReturns: `Enable error reporting for codepaths that do not explicitly return in a function.`,\n noImplicitThis: `Enable error reporting when \\`this\\` is given the type \\`any\\`.`,\n noImplicitUseStrict: `Disable adding 'use strict' directives in emitted JavaScript files.`,\n noLib: `Disable including any library files, including the default lib.d.ts.`,\n noPropertyAccessFromIndexSignature: `Enforces using indexed accessors for keys declared using an indexed type`,\n noResolve: `Disallow \\`import\\`s, \\`require\\`s or \\`\\`s from expanding the number of files TypeScript should add to a project.`,\n noStrictGenericChecks: `Disable strict checking of generic signatures in function types.`,\n noUncheckedIndexedAccess: `Add \\`undefined\\` to a type when accessed using an index.`,\n noUnusedLocals: `Enable error reporting when a local variables aren't read.`,\n noUnusedParameters: `Raise an error when a function parameter isn't read`,\n out: `Deprecated setting. Use [\\`outFile\\`](#outFile) instead.`,\n outDir: `Specify an output folder for all emitted files.`,\n outFile: `Specify a file that bundles all outputs into one JavaScript file. If [\\`declaration\\`](#declaration) is true, also designates a file that bundles all .d.ts output.`,\n paths: `Specify a set of entries that re-map imports to additional lookup locations.`,\n plugins: `Specify a list of language service plugins to include.`,\n preserveConstEnums: `Disable erasing \\`const enum\\` declarations in generated code.`,\n preserveSymlinks: `Disable resolving symlinks to their realpath. This correlates to the same flag in node.`,\n preserveWatchOutput: `Disable wiping the console in watch mode`,\n pretty: `Enable color and formatting in output to make compiler errors easier to read`,\n reactNamespace: `Specify the object invoked for \\`createElement\\`. This only applies when targeting \\`react\\` JSX emit.`,\n references: `Specify an array of objects that specify paths for projects. Used in project references.`,\n removeComments: `Disable emitting comments.`,\n resolveJsonModule: `Enable importing .json files`,\n rootDir: `Specify the root folder within your source files.`,\n rootDirs: `Allow multiple folders to be treated as one when resolving modules.`,\n skipDefaultLibCheck: `Skip type checking .d.ts files that are included with TypeScript.`,\n skipLibCheck: `Skip type checking all .d.ts files.`,\n sourceMap: `Create source map files for emitted JavaScript files.`,\n sourceRoot: `Specify the root path for debuggers to find the reference source code.`,\n strict: `Enable all strict type checking options.`,\n strictBindCallApply: `Check that the arguments for \\`bind\\`, \\`call\\`, and \\`apply\\` methods match the original function.`,\n strictFunctionTypes: `When assigning functions, check to ensure parameters and the return values are subtype-compatible.`,\n strictNullChecks: `When type checking, take into account \\`null\\` and \\`undefined\\`.`,\n strictPropertyInitialization: `Check for class properties that are declared but not set in the constructor.`,\n stripInternal: `Disable emitting declarations that have \\`@internal\\` in their JSDoc comments.`,\n suppressExcessPropertyErrors: `Disable reporting of excess property errors during the creation of object literals.`,\n suppressImplicitAnyIndexErrors: `Suppress [\\`noImplicitAny\\`](#noImplicitAny) errors when indexing objects that lack index signatures.`,\n synchronousWatchDirectory: `Synchronously call callbacks and update the state of directory watchers on platforms that don\\`t support recursive watching natively.`,\n target: `Set the JavaScript language version for emitted JavaScript and include compatible library declarations.`,\n traceResolution: `Log paths used during the [\\`moduleResolution\\`](#moduleResolution) process.`,\n tsBuildInfoFile: `Specify the folder for .tsbuildinfo incremental compilation files.`,\n typeAcquisition: `Specify options for automatic acquisition of declaration files.`,\n typeRoots: `Specify multiple folders that act like \\`./node_modules/@types\\`.`,\n types: `Specify type package names to be included without being referenced in a source file.`,\n useDefineForClassFields: `Emit ECMAScript-standard-compliant class fields.`,\n useUnknownInCatchVariables: `Default catch clause variables as \\`unknown\\` instead of \\`any\\`.`,\n verbose: `Enable verbose logging`,\n watchDirectory: `Specify how directories are watched on systems that lack recursive file-watching functionality.`,\n watchFile: `Specify how the TypeScript watch mode works.`,\n};\n","type Lines = import(\"shiki\").IThemedToken[][]\n\nimport type { IThemedToken } from \"shiki\"\nimport { escapeHtml, Meta } from \"../utils\"\nimport { tsconfig } from \"../tsconfig-oneliners.generated\"\nimport { HtmlRendererOptions, preOpenerFromRenderingOptsWithExtras } from \"./plain\"\n\n/** Uses tmLanguage scopes to determine what the content of the token is */\nconst tokenIsJSONKey = (token: IThemedToken) => {\n if (!token.explanation) return false\n return token.explanation.find(e => e.scopes.find(s => s.scopeName.includes(\"support.type.property-name\")))\n}\n\n/** Can you look up the token in the tsconfig reference? */\nconst isKeyInTSConfig = (token: IThemedToken) => {\n if (token.content === '\"') return\n const name = token.content.slice(1, token.content.length - 1)\n return name in tsconfig\n}\n\n/**\n * Renders a TSConfig JSON object with additional LSP-ish information\n * @param lines the result of shiki highlighting\n * @param options shiki display options\n */\nexport function tsconfigJSONRenderer(lines: Lines, options: HtmlRendererOptions, meta: Meta) {\n let html = \"\"\n\n html += preOpenerFromRenderingOptsWithExtras(options, meta, [\"tsconfig\", \"lsp\"])\n if (meta.title) {\n html += `
    ${meta.title}
    `\n }\n\n if (options.langId) {\n html += `
    ${options.langId}
    `\n }\n\n html += `
    `\n\n lines.forEach(l => {\n if (l.length === 0) {\n html += `
    `\n } else {\n html += `
    `\n l.forEach(token => {\n // This means we're looking at a token which could be '\"module\"', '\"', '\"compilerOptions\"' etc\n if (tokenIsJSONKey(token) && isKeyInTSConfig(token)) {\n const key = token.content.slice(1, token.content.length - 1)\n const oneliner = (tsconfig as Record)[key]\n // prettier-ignore\n html += `\"\"`\n } else {\n html += `${escapeHtml(token.content)}`\n }\n })\n html += `
    `\n }\n })\n\n html = html.replace(/\\n*$/, \"\") // Get rid of final new lines\n html += `
    `\n return html\n}\n","import { getHighlighter, Highlighter, HighlighterOptions, IThemedToken } from \"shiki\"\nimport { twoslasher, TwoSlashOptions, TwoSlashReturn } from \"@typescript/twoslash\"\nimport { twoslashRenderer } from \"./renderers/twoslash\"\nimport { HtmlRendererOptions, plainTextRenderer } from \"./renderers/plain\"\nimport { defaultShikiRenderer } from \"./renderers/shiki\"\nimport { tsconfigJSONRenderer } from \"./renderers/tsconfig\"\nimport { Meta } from \"./utils\"\n\nexport interface TwoslashShikiOptions {\n /** A way to turn on the try buttons seen on the TS website */\n addTryButton?: true\n /** A way to disable implicit React imports on tsx/jsx language codeblocks */\n disableImplicitReactImport?: true\n /** A way to add a div wrapper for multi-theme outputs */\n wrapFragments?: true\n /** Include JSDoc comments in the hovers */\n includeJSDocInHover?: true\n /** Instead of showing twoslash exceptions inline, throw the entire process like it will on CI */\n alwayRaiseForTwoslashExceptions?: true\n /** Ignore transforming certain code blocks */\n ignoreCodeblocksWithCodefenceMeta?: string[]\n}\n\n/** The possible user config, a combination of all shiki, twoslash and twoslash-shiki options */\nexport type UserConfigSettings = HighlighterOptions & TwoSlashOptions & TwoslashShikiOptions\n\n/**\n * This gets filled in by the promise below, then should\n * hopefully be more or less synchronous access by each parse\n * of the highlighter\n */\nlet storedHighlighter: Highlighter = null as any\n\n/**\n * Creates a *cached singleton* Shiki highlighter, this is an async call because of the call to WASM to get\n * the regex parser set up.\n *\n * In other functions, passing a the result of this highlighter function is kind of optional but it's the author's\n * opinion that you should be in control of the highlighter, and not this library.\n *\n */\nexport const createShikiHighlighter = (options: HighlighterOptions) => {\n if (storedHighlighter) return Promise.resolve(storedHighlighter)\n\n return getHighlighter(options).then(newHighlighter => {\n storedHighlighter = newHighlighter\n return storedHighlighter\n })\n}\n\n/**\n * Renders a code sample to HTML, automatically taking into account:\n *\n * - rendering overrides for twoslash and tsconfig\n * - whether the language exists in shiki\n *\n * @param code the source code to render\n * @param lang the language to use in highlighting\n * @param info additional metadata which lives after the code-fence lang (e.g. `{ twoslash: true }`)\n * @param shikiOptions user settings\n * @param highlighter optional, but you should use it, highlighter\n * @param twoslash optional, but required when info contains 'twoslash' as a string\n */\nexport const renderCodeToHTML = (\n code: string,\n lang: string,\n meta: Meta,\n shikiOptions?: UserConfigSettings & { themeName: string },\n highlighter?: Highlighter,\n twoslash?: TwoSlashReturn\n) => {\n if (!highlighter && !storedHighlighter) {\n throw new Error(\"The highlighter object hasn't been initialised via `setupHighLighter` yet in shiki-twoslash\")\n }\n\n // Shiki does know the lang, so tokenize\n const renderHighlighter = highlighter || storedHighlighter\n\n const renderOpts: HtmlRendererOptions = {\n fg: renderHighlighter.getForegroundColor(),\n bg: renderHighlighter.getBackgroundColor(),\n ...shikiOptions,\n }\n\n let tokens: IThemedToken[][]\n try {\n // I'm a little unsure about why we need this, perhaps the jsx language\n // upstream in shiki is broken?\n const tmpLang = lang === \"jsx\" ? \"tsx\" : lang\n\n tokens = renderHighlighter.codeToThemedTokens(code, tmpLang as any)\n } catch (error) {\n // Shiki doesn't know this lang, so render it as plain text, but\n // also add a note at the end as a HTML comment\n const note = ``\n return plainTextRenderer(code, renderOpts, meta) + note\n }\n\n // Twoslash specific renderer\n if (lang && meta.twoslash && twoslash) {\n return twoslashRenderer(tokens, { ...renderOpts, langId: lang }, twoslash, meta)\n }\n\n // TSConfig renderer\n if (lang && lang.startsWith(\"json\") && meta.tsconfig) {\n return tsconfigJSONRenderer(tokens, renderOpts, meta)\n }\n\n // Otherwise just the normal shiki renderer\n return defaultShikiRenderer(tokens, { ...renderOpts, langId: lang }, meta)\n}\n\n/**\n * Runs Twoslash over the code passed in with a particular language as the default file.\n */\nexport const runTwoSlash = (input: string, lang: string, settings: UserConfigSettings = {}): TwoSlashReturn => {\n let code = input\n\n // Shiki doesn't handle a few filetype mappings, so do that ahead of time. Oddly enough, this also\n // gets re-done at remark-shiki level\n const replacer = {\n json5: \"json\",\n yml: \"yaml\",\n }\n\n // @ts-ignore\n if (replacer[lang]) lang = replacer[lang]\n\n const hasReactImport = /^import\\s+React(?:.*)\\s+from\\s+('|\")react\\1/gm\n\n // Add react import to code samples indicating they're needing react.\n if ([\"tsx\", \"jsx\"].includes(lang) && !settings.disableImplicitReactImport && !hasReactImport.test(code)) {\n const reactImport = \"import React from 'react'\\n\"\n const cutString = \"// ---cut---\\n\"\n // ^ cutString taken directly from\n // https://github.com/microsoft/TypeScript-Website/blob/0c8d98a69d520365c1909d536fa1323f03a8438c/packages/ts-twoslasher/src/index.ts#L694\n\n if (code.includes(cutString)) {\n code = code\n .split(cutString)\n .map((item, index) => (index == 0 ? reactImport.concat(item) : item))\n .join(cutString)\n } else {\n code = [reactImport, cutString, code].join(\"\")\n }\n }\n\n settings.customTags = [\"annotate\", \"log\", \"warn\", \"error\"]\n const results = twoslasher(code, lang, settings)\n return results\n}\n\n/** Set of renderers if you want to explicitly call one instead of using renderCodeToHTML */\nexport const renderers = {\n plainTextRenderer,\n defaultShikiRenderer,\n twoslashRenderer,\n tsconfigJSONRenderer,\n}\n"],"names":["htmlForTags","tags","html","forEach","t","name","annotation","meta","split","text","pop","info","trim","flipped","includes","settings","arrowRot","textDegree","top","line","theInfo","specificSettings","JSON","parse","_extends","error","TwoslashError","stringify","message","arrowSVG","arrow","style","leftInner","rightInner","inner","rot","createHighlightedString","ranges","targetedWord","tag","x","makeTagFromRange","r","close","classes","lsp","htmlAttrReplacer","underLineTargetedWord","sort","a","b","precedenceOf","indexOf","cmp","begin","end","cursor","nest","data","stack","shift","substring","some","length","htmlAttrUnReplacer","replaceTripleArrow","stripHTML","str","replace","subTripleArrow","replaceTripleArrowEncoded","table","toString","chr","escapeHtml","shouldBeHighlightable","highlight","Object","keys","find","key","isNaN","parseInt","shouldHighlightLine","lines","push","_key$split","first","last","lastIndex","i","preOpenerFromRenderingOptsWithExtras","opts","bg","fg","theme","themeName","classList","title","concat","filter","Boolean","join","attributes","entries","entry","map","_ref","value","plainTextRenderer","code","options","langId","twoslashRenderer","twoslash","hasHighlight","hl","errorsGroupedByLine","groupBy","errors","e","Map","staticQuickInfosGroupedByLine","staticQuickInfos","q","queriesGroupedByLine","queries","tagsGroupedByLine","filePos","l","get","lspValues","hiClass","prefix","emptyLine","tokenPos","token","targetedQueryWord","tokenContent","findTokenFunc","start","character","content","errorsInToken","lspResponsesInToken","queriesInToken","response","allTokens","allTokensByStart","_targetedQueryWord","range","kind","lspText","includeJSDocInHover","docs","color","messages","renderedMessage","codes","query","queryTextWithPrefix","halfWayAcrossTheTargetedWord","repeat","completions","padStart","offset","prefixed","c","startsWith","completionsPrefix","lis","localeCompare","after","substr","_query$completionsPre","isDeprecated","_c$kindModifiers","kindModifiers","liClass","errorSVG","warningSVG","logSVG","addTryButton","playgroundLink","playgroundURL","list","keyGetter","item","collection","set","defaultShikiRenderer","cssDeclarations","fontStyle","shiki","FontStyle","Italic","Bold","Underline","tsconfig","compilerOptions","allowJs","allowSyntheticDefaultImports","allowUmdGlobalAccess","allowUnreachableCode","allowUnusedLabels","alwaysStrict","assumeChangesOnlyAffectDirectDependencies","baseUrl","charset","checkJs","clean","composite","declaration","declarationDir","declarationMap","diagnostics","disableFilenameBasedTypeAcquisition","disableReferencedProjectLoad","disableSizeLimit","disableSolutionSearching","disableSourceOfProjectReferenceRedirect","downlevelIteration","emitBOM","emitDeclarationOnly","emitDecoratorMetadata","enable","esModuleInterop","exactOptionalPropertyTypes","exclude","excludeDirectories","excludeFiles","experimentalDecorators","explainFiles","extendedDiagnostics","fallbackPolling","files","force","forceConsistentCasingInFileNames","generateCpuProfile","importHelpers","importsNotUsedAsValues","include","incremental","inlineSourceMap","inlineSources","isolatedModules","jsx","jsxFactory","jsxFragmentFactory","jsxImportSource","keyofStringsOnly","lib","listEmittedFiles","listFiles","locale","mapRoot","maxNodeModuleJsDepth","module","moduleResolution","newLine","noEmit","noEmitHelpers","noEmitOnError","noErrorTruncation","noFallthroughCasesInSwitch","noImplicitAny","noImplicitOverride","noImplicitReturns","noImplicitThis","noImplicitUseStrict","noLib","noPropertyAccessFromIndexSignature","noResolve","noStrictGenericChecks","noUncheckedIndexedAccess","noUnusedLocals","noUnusedParameters","out","outDir","outFile","paths","plugins","preserveConstEnums","preserveSymlinks","preserveWatchOutput","pretty","reactNamespace","references","removeComments","resolveJsonModule","rootDir","rootDirs","skipDefaultLibCheck","skipLibCheck","sourceMap","sourceRoot","strict","strictBindCallApply","strictFunctionTypes","strictNullChecks","strictPropertyInitialization","stripInternal","suppressExcessPropertyErrors","suppressImplicitAnyIndexErrors","synchronousWatchDirectory","target","traceResolution","tsBuildInfoFile","typeAcquisition","typeRoots","types","useDefineForClassFields","useUnknownInCatchVariables","verbose","watchDirectory","watchFile","tokenIsJSONKey","explanation","scopes","s","scopeName","isKeyInTSConfig","slice","tsconfigJSONRenderer","oneliner","storedHighlighter","createShikiHighlighter","Promise","resolve","getHighlighter","then","newHighlighter","renderCodeToHTML","lang","shikiOptions","highlighter","Error","renderHighlighter","renderOpts","getForegroundColor","getBackgroundColor","tokens","tmpLang","codeToThemedTokens","note","runTwoSlash","input","replacer","json5","yml","hasReactImport","disableImplicitReactImport","test","reactImport","cutString","index","customTags","results","twoslasher","renderers"],"mappings":"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"} \ No newline at end of file diff --git a/patches/shiki-twoslash/shiki-twoslash.cjs.production.min.js b/patches/shiki-twoslash/shiki-twoslash.cjs.production.min.js deleted file mode 100644 index f89a4cab..00000000 --- a/patches/shiki-twoslash/shiki-twoslash.cjs.production.min.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("shiki"),n=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,i=require("@typescript/twoslash");function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t\n '+d+"\n

    '+o+"

    \n"}})),t},a=function(e){var t=e.flipped?"M27 39C26.5 32.7511 21.9 17.5173 7.5 6.57333M16.5 4.04L0.999999 0.999998C3.16667 4.88444 7.5 13.16 7.5 15.1867":"M1 39C1.5 32.7511 6.1 17.5173 20.5 6.57333M11.5 4.04L27 0.999998C24.8333 4.88444 20.5 13.16 20.5 15.1867",n=e.arrowRot.split(" ");return"\n \n'};function s(e){return e.replace(//g,">")}var l=function(e){return!!Object.keys(e||{}).find((function(e){return!!e.includes("-")||!isNaN(parseInt(e))}))},c=function(e){var t=[];return Object.keys(e||{}).find((function(e){if(isNaN(parseInt(e))||t.push(parseInt(e)),e.includes("-"))for(var n=e.split("-"),i=n[0],r=parseInt(n[1])+1,o=parseInt(i);o"};function d(e,t,n){var i="";return i+=p(t,n,[]),n.title&&(i+="
    "+n.title+"
    "),t.langId&&(i+='
    '+t.langId+"
    "),i+="
    ",(i=(i+=s(e)).replace(/\n*$/,""))+"
    "}function u(e,t,n,i){var r="",a=i.highlight&&l(i.highlight),d=c(i.highlight);n.tags&&n.tags.length&&(r+="
    "),r+=p(t,i,["twoslash","lsp"]),i.title&&(r+="
    "+i.title+"
    "),t.langId&&(r+='
    '+t.langId+"
    "),r+="
    ";var u,y=f(n.errors,(function(e){return e.line}))||new Map,v=f(n.staticQuickInfos,(function(e){return e.line}))||new Map,b=f(n.queries,(function(e){return e.line-1}))||new Map,w=f(n.tags,(function(e){return e.line-1}))||new Map,S=0;return e.forEach((function(e,n){var i=y.get(n)||[],o=v.get(n)||[],l=b.get(n)||[],c=w.get(n)||[],p="
    ";if(0===e.length&&0===n)S+=1;else if(0===e.length)r+=p+" 
    ",S+=1;else{r+=p;var u=0;e.forEach((function(e){var n,a="",s=function(t){return function(n){return t<=n.character&&t+e.content.length>=n.character+n.length}},c=i.filter(s(u)),p=o.filter(s(u)),d=l.filter(s(u));n=n||p.find((function(e){return e.text===(l.length&&l[0].text)}));var f,h=[].concat(c,p,d).sort((function(e,t){return(e.start||0)-(t.start||0)}));a+=h.length?function(e,t,n){void 0===n&&(n="");var i=function(e){return"⇍"+e+"⇏"},r=function(e,t){switch(e.classes){case"lsp":var r=function(e){return e.replace(/"/g,"⃟")}(e.lsp||"");return i(t?"/data-lsp":"data-lsp lsp=¿"+r+"¿ "+(e.lsp===n?"style=⇯border-bottom: solid 2px lightgrey;⇯":""));case"query":return i((t?"/":"")+"data-highlight");case"err":default:return i((t?"/":"")+"data-err")}};e.sort((function(e,t){var n=function(e){return["err","query","lsp"].indexOf(null!=e?e:"")},i=0;return!(i=e.begin-t.begin)&&!(i=t.end-e.end)&&(i=n(e.classes)-n(t.classes)),i}));var o=0,a=function(e){var n="",i=e.shift();return n+=t.substring(o,i.begin),o=i.begin,n+=r(i),e.some((function(e){return e.begin").replace(/⇯/g,"'").replace(/¿/g,"'")}(function(e){var t={"<":"lt",'"':"quot","'":"apos","&":"amp","\r":"#13","\n":"#10"};return e.toString().replace(/[<"'\r\n&]/g,(function(e){return"&"+t[e]+";"}))}(a(s)+t.substring(o))))}(h.map((function(e){var n={begin:e.start-S,end:e.start+e.length-S};return"renderedMessage"in e&&(n.classes="err"),"kind"in e&&(n.classes=e.kind),"targetString"in e&&(n.classes="lsp",n.lsp=t.includeJSDocInHover&&e.docs?e.docs+"\n\n"+e.text:e.text),n})),e.content,null==(f=n)?void 0:f.text):e.content.replace(//g,"⇏").replace(/'/g,"⇯"),r+=''+a+"",u+=e.content.length,S+=e.content.length})),r+="
    ",S+=1}if(i.length){var f=i.map((function(e){return s(e.renderedMessage)})).join("
    "),x=i.map((function(e){return e.code})).join("
    ");r+=''+f+''+x+"",r+=''+f+""}l.length&&l.forEach((function(e){switch(r+="
    ",e.kind){case"query":var t=s(e.text),i=(v.get(n)||[]).find((function(e){return e.text===(l.length&&l[0].text)}));r+=""+" ".repeat((i&&i.character+(null==i?void 0:i.length)/2)-1||0)+"
    "+t+"
    ";break;case"completions":if(e.completions){var o=e.completions.filter((function(t){return t.name.startsWith(e.completionsPrefix||"____")})).sort((function(e,t){return e.name.localeCompare(t.name)})).map((function(t){var n,i,r=t.name.substr((null==(n=e.completionsPrefix)?void 0:n.length)||0),o=""+(e.completionsPrefix||"")+""+r+"";return"
  • "+o+"
  • "})).join("");r+=" ".repeat(e.offset)+""}else r+="//"+"".padStart(e.offset-2)+"^ - No completions found"}r+="
    "})),c.length&&c.forEach((function(e){if(["error","warn","log"].includes(e.name)){switch(r+="
    ",e.name){case"error":r+=h+""+(e.annotation||"N/A")+"";break;case"warn":r+=g+""+(e.annotation||"N/A")+"";break;case"log":r+=m+""+(e.annotation||"N/A")+""}r+="
    "}}))})),u=r.replace(/\n*$/,""),r=u.replace(/⇍/g,"<").replace(/⇏/g,">").replace(/⇯/g,"'"),r+=t.addTryButton?"
    Try":"",r+="
    ",n.tags&&n.tags.length&&(r+=o(n.tags),r+=""),r}function f(e,t){var n=new Map;return e.forEach((function(e){var i=t(e),r=n.get(i);r?r.push(e):n.set(i,[e])})),n}var h='',g='',m='';function y(e,t,i){var r="",o=i.highlight&&l(i.highlight),a=c(i.highlight);return r+=p(t,i,[]),i.title&&(r+="
    "+i.title+"
    "),t.langId&&(r+='
    '+t.langId+"
    "),r+="
    ",e.forEach((function(e,t){if(0===e.length)r+="
    ";else{var i=o?a(t)?" highlight":" dim":"";r+="
    ",e.forEach((function(e){var t=["color: "+e.color];e.fontStyle&&(e.fontStyle&n.FontStyle.Italic&&t.push("font-style: italic"),e.fontStyle&n.FontStyle.Bold&&t.push("font-weight: bold"),e.fontStyle&n.FontStyle.Underline&&t.push("text-decoration: underline")),r+=''+s(e.content)+""})),r+="
    "}})),r=r.replace(/\n*$/,""),r+="
    "}var v={compilerOptions:"The set of compiler options for your project",allowJs:"Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files.",allowSyntheticDefaultImports:"Allow 'import x from y' when a module doesn't have a default export.",allowUmdGlobalAccess:"Allow accessing UMD globals from modules.",allowUnreachableCode:"Disable error reporting for unreachable code.",allowUnusedLabels:"Disable error reporting for unused labels.",alwaysStrict:"Ensure 'use strict' is always emitted.",assumeChangesOnlyAffectDirectDependencies:"Have recompiles in projects that use [`incremental`](#incremental) and `watch` mode assume that changes within a file will only affect files directly depending on it.",baseUrl:"Specify the base directory to resolve non-relative module names.",charset:"No longer supported. In early versions, manually set the text encoding for reading files.",checkJs:"Enable error reporting in type-checked JavaScript files.",clean:"Delete the outputs of all projects.",composite:"Enable constraints that allow a TypeScript project to be used with project references.",declaration:"Generate .d.ts files from TypeScript and JavaScript files in your project.",declarationDir:"Specify the output directory for generated declaration files.",declarationMap:"Create sourcemaps for d.ts files.",diagnostics:"Output compiler performance information after building.",disableFilenameBasedTypeAcquisition:"Disables inference for type acquisition by looking at filenames in a project.",disableReferencedProjectLoad:"Reduce the number of projects loaded automatically by TypeScript.",disableSizeLimit:"Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server.",disableSolutionSearching:"Opt a project out of multi-project reference checking when editing.",disableSourceOfProjectReferenceRedirect:"Disable preferring source files instead of declaration files when referencing composite projects",downlevelIteration:"Emit more compliant, but verbose and less performant JavaScript for iteration.",emitBOM:"Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.",emitDeclarationOnly:"Only output d.ts files and not JavaScript files.",emitDecoratorMetadata:"Emit design-type metadata for decorated declarations in source files.",enable:"Disable the type acquisition for JavaScript projects",esModuleInterop:"Emit additional JavaScript to ease support for importing CommonJS modules. This enables [`allowSyntheticDefaultImports`](#allowSyntheticDefaultImports) for type compatibility.",exactOptionalPropertyTypes:"Differentiate between undefined and not present when type checking",exclude:"Filters results from the [`include`](#include) option.",excludeDirectories:"Remove a list of directories from the watch process.",excludeFiles:"Remove a list of files from the watch mode's processing.",experimentalDecorators:"Enable experimental support for TC39 stage 2 draft decorators.",explainFiles:"Print files read during the compilation including why it was included.",extendedDiagnostics:"Output more detailed compiler performance information after building.",extends:"Specify one or more path or node module references to base configuration files from which settings are inherited.",fallbackPolling:"Specify what approach the watcher should use if the system runs out of native file watchers.",files:"Include a list of files. This does not support glob patterns, as opposed to [`include`](#include).",force:"Build all projects, including those that appear to be up to date",forceConsistentCasingInFileNames:"Ensure that casing is correct in imports.",generateCpuProfile:"Emit a v8 CPU profile of the compiler run for debugging.",importHelpers:"Allow importing helper functions from tslib once per project, instead of including them per-file.",importsNotUsedAsValues:"Specify emit/checking behavior for imports that are only used for types.",include:"Specify a list of glob patterns that match files to be included in compilation.",incremental:"Save .tsbuildinfo files to allow for incremental compilation of projects.",inlineSourceMap:"Include sourcemap files inside the emitted JavaScript.",inlineSources:"Include source code in the sourcemaps inside the emitted JavaScript.",isolatedModules:"Ensure that each file can be safely transpiled without relying on other imports.",jsx:"Specify what JSX code is generated.",jsxFactory:"Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'",jsxFragmentFactory:"Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'.",jsxImportSource:"Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.",keyofStringsOnly:"Make keyof only return strings instead of string, numbers or symbols. Legacy option.",lib:"Specify a set of bundled library declaration files that describe the target runtime environment.",listEmittedFiles:"Print the names of emitted files after a compilation.",listFiles:"Print all of the files read during the compilation.",locale:"Set the language of the messaging from TypeScript. This does not affect emit.",mapRoot:"Specify the location where debugger should locate map files instead of generated locations.",maxNodeModuleJsDepth:"Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with [`allowJs`](#allowJs).",module:"Specify what module code is generated.",moduleResolution:"Specify how TypeScript looks up a file from a given module specifier.",newLine:"Set the newline character for emitting files.",noEmit:"Disable emitting file from a compilation.",noEmitHelpers:"Disable generating custom helper functions like `__extends` in compiled output.",noEmitOnError:"Disable emitting files if any type checking errors are reported.",noErrorTruncation:"Disable truncating types in error messages.",noFallthroughCasesInSwitch:"Enable error reporting for fallthrough cases in switch statements.",noImplicitAny:"Enable error reporting for expressions and declarations with an implied `any` type..",noImplicitOverride:"Ensure overriding members in derived classes are marked with an override modifier.",noImplicitReturns:"Enable error reporting for codepaths that do not explicitly return in a function.",noImplicitThis:"Enable error reporting when `this` is given the type `any`.",noImplicitUseStrict:"Disable adding 'use strict' directives in emitted JavaScript files.",noLib:"Disable including any library files, including the default lib.d.ts.",noPropertyAccessFromIndexSignature:"Enforces using indexed accessors for keys declared using an indexed type",noResolve:"Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project.",noStrictGenericChecks:"Disable strict checking of generic signatures in function types.",noUncheckedIndexedAccess:"Add `undefined` to a type when accessed using an index.",noUnusedLocals:"Enable error reporting when a local variables aren't read.",noUnusedParameters:"Raise an error when a function parameter isn't read",out:"Deprecated setting. Use [`outFile`](#outFile) instead.",outDir:"Specify an output folder for all emitted files.",outFile:"Specify a file that bundles all outputs into one JavaScript file. If [`declaration`](#declaration) is true, also designates a file that bundles all .d.ts output.",paths:"Specify a set of entries that re-map imports to additional lookup locations.",plugins:"Specify a list of language service plugins to include.",preserveConstEnums:"Disable erasing `const enum` declarations in generated code.",preserveSymlinks:"Disable resolving symlinks to their realpath. This correlates to the same flag in node.",preserveWatchOutput:"Disable wiping the console in watch mode",pretty:"Enable color and formatting in output to make compiler errors easier to read",reactNamespace:"Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit.",references:"Specify an array of objects that specify paths for projects. Used in project references.",removeComments:"Disable emitting comments.",resolveJsonModule:"Enable importing .json files",rootDir:"Specify the root folder within your source files.",rootDirs:"Allow multiple folders to be treated as one when resolving modules.",skipDefaultLibCheck:"Skip type checking .d.ts files that are included with TypeScript.",skipLibCheck:"Skip type checking all .d.ts files.",sourceMap:"Create source map files for emitted JavaScript files.",sourceRoot:"Specify the root path for debuggers to find the reference source code.",strict:"Enable all strict type checking options.",strictBindCallApply:"Check that the arguments for `bind`, `call`, and `apply` methods match the original function.",strictFunctionTypes:"When assigning functions, check to ensure parameters and the return values are subtype-compatible.",strictNullChecks:"When type checking, take into account `null` and `undefined`.",strictPropertyInitialization:"Check for class properties that are declared but not set in the constructor.",stripInternal:"Disable emitting declarations that have `@internal` in their JSDoc comments.",suppressExcessPropertyErrors:"Disable reporting of excess property errors during the creation of object literals.",suppressImplicitAnyIndexErrors:"Suppress [`noImplicitAny`](#noImplicitAny) errors when indexing objects that lack index signatures.",synchronousWatchDirectory:"Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively.",target:"Set the JavaScript language version for emitted JavaScript and include compatible library declarations.",traceResolution:"Log paths used during the [`moduleResolution`](#moduleResolution) process.",tsBuildInfoFile:"Specify the folder for .tsbuildinfo incremental compilation files.",typeAcquisition:"Specify options for automatic acquisition of declaration files.",typeRoots:"Specify multiple folders that act like `./node_modules/@types`.",types:"Specify type package names to be included without being referenced in a source file.",useDefineForClassFields:"Emit ECMAScript-standard-compliant class fields.",useUnknownInCatchVariables:"Default catch clause variables as `unknown` instead of `any`.",verbose:"Enable verbose logging",watchDirectory:"Specify how directories are watched on systems that lack recursive file-watching functionality.",watchFile:"Specify how the TypeScript watch mode works."};function b(e,t,n){var i="";return i+=p(t,n,["tsconfig","lsp"]),n.title&&(i+='
    '+n.title+"
    "),t.langId&&(i+='
    '+t.langId+"
    "),i+="
    ",e.forEach((function(e){0===e.length?i+="
    ":(i+="
    ",e.forEach((function(e){if(function(e){return!!e.explanation&&e.explanation.find((function(e){return e.scopes.find((function(e){return e.scopeName.includes("support.type.property-name")}))}))}(e)&&function(e){if('"'!==e.content)return e.content.slice(1,e.content.length-1)in v}(e)){var t=e.content.slice(1,e.content.length-1);i+='""'}else i+=''+s(e.content)+""})),i+="
    ")})),i=i.replace(/\n*$/,""),i+="
    "}var w=null,S={plainTextRenderer:d,defaultShikiRenderer:y,twoslashRenderer:u,tsconfigJSONRenderer:b};exports.createShikiHighlighter=function(e){return w?Promise.resolve(w):t.getHighlighter(e).then((function(e){return w=e}))},exports.renderCodeToHTML=function(e,t,n,i,o,a){if(!o&&!w)throw new Error("The highlighter object hasn't been initialised via `setupHighLighter` yet in shiki-twoslash");var s,l=o||w,c=r({fg:l.getForegroundColor(),bg:l.getBackgroundColor()},i);try{s=l.codeToThemedTokens(e,"jsx"===t?"tsx":t)}catch(i){var p="\x3c!-- Note from shiki-twoslash: the language "+t+" was not set up for Shiki to use, and so there is no code highlighting --\x3e";return d(e,c,n)+p}return t&&n.twoslash&&a?u(s,r({},c,{langId:t}),a,n):t&&t.startsWith("json")&&n.tsconfig?b(s,c,n):y(s,r({},c,{langId:t}),n)},exports.renderers=S,exports.runTwoSlash=function(e,t,n){void 0===n&&(n={});var r=e,o={json5:"json",yml:"yaml"};if(o[t]&&(t=o[t]),["tsx","jsx"].includes(t)&&!n.disableImplicitReactImport&&!/^import\s+React(?:.*)\s+from\s+('|")react\1/gm.test(r)){var a="import React from 'react'\n",s="// ---cut---\n";r=r.includes(s)?r.split(s).map((function(e,t){return 0==t?a.concat(e):e})).join(s):[a,s,r].join("")}return n.customTags=["annotate","log","warn","error"],i.twoslasher(r,t,n)}; -//# sourceMappingURL=shiki-twoslash.cjs.production.min.js.map diff --git a/patches/shiki-twoslash/shiki-twoslash.cjs.production.min.js.map b/patches/shiki-twoslash/shiki-twoslash.cjs.production.min.js.map deleted file mode 100644 index a2970b66..00000000 --- a/patches/shiki-twoslash/shiki-twoslash.cjs.production.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"shiki-twoslash.cjs.production.min.js","sources":["../src/annotations.ts","../src/utils.ts","../src/renderers/plain.ts","../src/renderers/twoslash.ts","../src/renderers/shiki.ts","../src/tsconfig-oneliners.generated.ts","../src/renderers/tsconfig.ts","../src/index.ts"],"sourcesContent":["import { TwoslashError, TwoSlashReturn } from \"@typescript/twoslash\"\n\nexport const htmlForTags = (tags: TwoSlashReturn[\"tags\"]) => {\n let html = \"\"\n tags.forEach(t => {\n if (t.name === \"annotate\" && t.annotation) {\n const meta = t.annotation.split(\" - \")\n const text = meta.pop()\n const info = (meta[0] || \"\").trim()\n const flipped = info.includes(\"right\")\n let settings = {\n flipped,\n arrowRot: flipped ? \"90deg 20px 20px\" : \"90deg 20px 20px\",\n textDegree: \"0deg\",\n top: `${t.line}em`\n }\n \n \n if (info.includes(\"{\")) {\n const theInfo = \"{\" + info.split(\"{\")[1]\n try {\n const specificSettings = JSON.parse(theInfo)\n settings = {...settings, ...specificSettings }\n } catch (error) {\n throw new TwoslashError(\"Could not parse annotation\", `The annotation ${JSON.stringify(t)} could convert '${theInfo}' into JSON`, `Look at ${(error as any).message}.`)\n }\n }\n \n const arrowSVG = arrow(settings)\n\n html += `\n
    \n ${arrowSVG}\n

    ${text}

    \n
    `\n }\n })\n\n return html\n}\n\nconst arrow = (style: { flipped: boolean; arrowRot: string, textDegree: string, top: string }) => {\n const leftInner = `M27 39C26.5 32.7511 21.9 17.5173 7.5 6.57333M16.5 4.04L0.999999 0.999998C3.16667 4.88444 7.5 13.16 7.5 15.1867`\n const rightInner = `M1 39C1.5 32.7511 6.1 17.5173 20.5 6.57333M11.5 4.04L27 0.999998C24.8333 4.88444 20.5 13.16 20.5 15.1867`\n const inner = style.flipped ? leftInner : rightInner\n const rot = style.arrowRot.split(\" \")\n return `\n \n`\n}\n","import type { parse } from \"fenceparser\"\n\nexport type Meta = NonNullable>\n\ntype Range = {\n begin: number\n end: number\n text?: string\n count?: number\n tooltip?: string[]\n classes?: string\n lsp?: string\n}\n\n/**\n * We're given the text which lives inside the token, and this function will\n * annotate it with twoslash metadata\n */\nexport function createHighlightedString(ranges: Range[], text: string, targetedWord: string = \"\") {\n // Why the weird chars? We need to make sure that generic syntax isn't\n // interpreted as html tags - to do that we need to switch out < to < - *but*\n // making that transition changes the indexes because it's gone from 1 char to 4 chars\n //\n // So, use an obscure character to indicate a real < for HTML, then switch it after\n const tag = (x: string) => `⇍${x}⇏`\n const makeTagFromRange = (r: Range, close?: true) => {\n switch (r.classes) {\n case \"lsp\":\n // The LSP response lives inside a dom attribute, which _can_ have < inside it, so switch them ahead of time.\n const lsp = htmlAttrReplacer(r.lsp || \"\")\n const underLineTargetedWord = r.lsp === targetedWord ? \"style=⇯border-bottom: solid 2px lightgrey;⇯\" : \"\"\n return close ? tag(\"/data-lsp\") : tag(`data-lsp lsp=¿${lsp}¿ ${underLineTargetedWord}`)\n case \"query\":\n return tag(`${close ? \"/\" : \"\"}data-highlight`)\n // handle both unknown and err variant as error-tag\n // case \"err\": is not required, just to be useful for others\n case \"err\":\n default:\n return tag(`${close ? \"/\" : \"\"}data-err`)\n }\n }\n\n ranges.sort((a, b) => {\n // Order of precedence\n // if two same offset meet, the lsp will be put as innermost than err and query\n const precedenceOf = (x?: string) => [\"err\", \"query\", \"lsp\"].indexOf(x ?? \"\")\n\n let cmp = 0\n // Can be desugared into,\n // 1. compare based on smaller begin, !(cmp) means if it's 0 then\n // 2. compare based on bigger end, ^ same thing again then\n // 3. compare based on higher precedence\n // && is so that if a step made cmp to something other than 0, it stops\n /***1*/ !(cmp = a.begin - b.begin) &&\n /*2*/ !(cmp = b.end - a.end) &&\n /*3*/ !(cmp = precedenceOf(a.classes) - precedenceOf(b.classes))\n return cmp\n }) // `Array.sort` works in place\n\n // Marks how much of the text has been put into the output/html\n let cursor = 0\n // should be maximum of O(n) where n is length of ranges\n const nest = (data: typeof ranges) => {\n let stack = \"\"\n const top = data.shift()! // I have made sure data can't be empty\n\n // parse from cursor to top.begin to make sure\n // strings on the way are parsed\n stack += text.substring(cursor, top.begin)\n cursor = top.begin\n\n // open tag\n stack += makeTagFromRange(top)\n\n // if the data still have an element that's in the top's range\n if (data.some(x => x.begin < top.end)) {\n stack += nest(data)\n } else {\n // othewise slice the text and set cursor\n stack += text.substring(top.begin, top.end)\n cursor = top.end\n }\n\n // close tag\n stack += makeTagFromRange(top, true)\n\n // if the tag is complete but still have some data left in the range\n if (data.length !== 0) {\n stack += nest(data)\n }\n\n return stack\n }\n\n // cloned because I don't feel comfortable modifying this as a side-effect from recursion\n const data = JSON.parse(JSON.stringify(ranges))\n const html = nest(data) + text.substring(cursor) // nested + leftover texts\n\n return htmlAttrUnReplacer(replaceTripleArrow(stripHTML(html)))\n}\n\n// HTML attributes have different rules,\nconst htmlAttrReplacer = (str: string) => str.replace(/\"/g, \"⃟\")\nconst htmlAttrUnReplacer = (str: string) => str.replace(/⃟/g, '\"')\n\n// Inline strings which are shown at HTML level\nexport const subTripleArrow = (str: string) => str.replace(//g, \"⇏\").replace(/'/g, \"⇯\")\nexport const replaceTripleArrow = (str: string) =>\n str.replace(/⇍/g, \"<\").replace(/⇏/g, \">\").replace(/⇯/g, \"'\").replace(/¿/g, \"'\")\nexport const replaceTripleArrowEncoded = (str: string) =>\n str.replace(/⇍/g, \"<\").replace(/⇏/g, \">\").replace(/⇯/g, \"'\")\n\nexport function stripHTML(text: string) {\n var table: any = {\n \"<\": \"lt\",\n '\"': \"quot\",\n \"'\": \"apos\",\n \"&\": \"amp\",\n \"\\r\": \"#13\",\n \"\\n\": \"#10\",\n }\n\n return text.toString().replace(/[<\"'\\r\\n&]/g, function (chr) {\n return \"&\" + table[chr] + \";\"\n })\n}\n\nexport function escapeHtml(html: string) {\n return html.replace(//g, \">\")\n}\n\n/** Does anything in the object imply that we should highlight any lines? */\nexport const shouldBeHighlightable = (highlight: any) => {\n return !!Object.keys(highlight || {}).find(key => {\n if (key.includes(\"-\")) return true\n if (!isNaN(parseInt(key))) return true\n return false\n })\n}\n\n/** Returns a func for figuring out if this line should be highlighted */\nexport const shouldHighlightLine = (highlight: any) => {\n const lines: number[] = []\n Object.keys(highlight || {}).find(key => {\n if (!isNaN(parseInt(key))) lines.push(parseInt(key))\n if (key.includes(\"-\")) {\n const [first, last] = key.split(\"-\")\n const lastIndex = parseInt(last) + 1\n for (let i = parseInt(first); i < lastIndex; i++) {\n lines.push(i)\n }\n }\n })\n\n return (line: number) => lines.includes(line)\n}\n","import { escapeHtml, Meta } from \"../utils\"\n\n// C&P'd from shiki\nexport interface HtmlRendererOptions {\n langId?: string\n fg?: string\n bg?: string\n themeName?: string\n}\n\n/** A func for setting a consistent
     */\nexport const preOpenerFromRenderingOptsWithExtras = (opts: HtmlRendererOptions, meta: Meta, classes?: string[]) => {\n  const bg = opts.bg || \"#fff\"\n  const fg = opts.fg || \"black\"\n  const theme = opts.themeName || \"\"\n\n  // shiki + `class` from fence + with-title if title exists + classes\n  const classList = [\"shiki\", theme, meta.class, meta.title ? \"with-title\" : \"\", ...(classes || [])]\n    .filter(Boolean)\n    .join(\" \")\n    .trim()\n\n  const attributes = Object.entries(meta)\n    .filter(entry => {\n      // exclude types other than string, number, boolean\n      // exclude keys class, twoslash\n      // exclude falsy booleans\n      return (\n        [\"string\", \"number\", \"boolean\"].includes(typeof entry[1]) &&\n        ![\"class\", \"twoslash\"].includes(entry[0]) &&\n        entry[1] !== false\n      )\n    })\n    .map(([key, value]) => `${key}=\"${value}\"`)\n    .join(\" \")\n    .trim()\n\n  // prettier-ignore\n  return `
    `\n}\n\n/** You don't have a language which shiki twoslash can handle, make a DOM compatible version  */\nexport function plainTextRenderer(code: string, options: HtmlRendererOptions, meta: Meta) {\n  let html = \"\"\n\n  html += preOpenerFromRenderingOptsWithExtras(options, meta, [])\n  if (meta.title) {\n    html += `
    ${meta.title}
    `\n }\n\n if (options.langId) {\n html += `
    ${options.langId}
    `\n }\n\n html += `
    `\n html += escapeHtml(code)\n\n html = html.replace(/\\n*$/, \"\") // Get rid of final new lines\n html += `
    `\n return html\n}\n","type Lines = import(\"shiki\").IThemedToken[][]\ntype TwoSlash = import(\"@typescript/twoslash\").TwoSlashReturn\n\nimport { TwoslashShikiOptions } from \"..\"\nimport { htmlForTags } from \"../annotations\"\nimport {\n shouldBeHighlightable,\n shouldHighlightLine,\n createHighlightedString,\n subTripleArrow,\n replaceTripleArrowEncoded,\n escapeHtml,\n Meta,\n} from \"../utils\"\nimport { HtmlRendererOptions, preOpenerFromRenderingOptsWithExtras } from \"./plain\"\n\n// OK, so - this is just straight up complex code.\n\n// What we're trying to do is merge two sets of information into a single tree for HTML\n\n// 1: Syntax highlight info from shiki\n// 2: Twoslash metadata like errors, identifiers etc\n\n// Because shiki gives use a set of lines to work from, then the first thing which happens\n// is converting twoslash data into the same format.\n\n// Things which make it hard:\n//\n// - Twoslash results can be cut, so sometimes there is edge cases between twoslash results\n// - Twoslash results can be multi-file\n// - the DOM requires a flattened graph of html elements (e.g. spans can' be interspersed)\n//\n\nexport function twoslashRenderer(lines: Lines, options: HtmlRendererOptions & TwoslashShikiOptions, twoslash: TwoSlash, meta: Meta) {\n let html = \"\"\n\n const hasHighlight = meta.highlight && shouldBeHighlightable(meta.highlight)\n const hl = shouldHighlightLine(meta.highlight)\n\n if (twoslash.tags && twoslash.tags.length) html += \"
    \"\n \n html += preOpenerFromRenderingOptsWithExtras(options, meta, [\"twoslash\", \"lsp\"])\n if (meta.title) {\n html += `
    ${meta.title}
    `\n }\n\n if (options.langId) {\n html += `
    ${options.langId}
    `\n }\n\n html += `
    `\n\n const errorsGroupedByLine = groupBy(twoslash.errors, e => e.line) || new Map()\n const staticQuickInfosGroupedByLine = groupBy(twoslash.staticQuickInfos, q => q.line) || new Map()\n // A query is always about the line above it!\n const queriesGroupedByLine = groupBy(twoslash.queries, q => q.line - 1) || new Map()\n const tagsGroupedByLine = groupBy(twoslash.tags, q => q.line - 1) || new Map()\n\n /**\n * This is the index of the original twoslash code reference, it is not\n * related to the HTML output\n */\n let filePos = 0\n\n lines.forEach((l, i) => {\n const errors = errorsGroupedByLine.get(i) || []\n const lspValues = staticQuickInfosGroupedByLine.get(i) || []\n const queries = queriesGroupedByLine.get(i) || []\n const tags = tagsGroupedByLine.get(i) || []\n\n const hiClass = hasHighlight ? (hl(i + 1) ? \" highlight\" : \" dim\") : \"\"\n const prefix = `
    `\n\n if (l.length === 0 && i === 0) {\n // Skip the first newline if it's blank\n filePos += 1\n } else if (l.length === 0) {\n const emptyLine = `${prefix} 
    ` \n html += emptyLine\n filePos += 1\n } else {\n html += prefix\n\n // Keep track of the position of the current token in a line so we can match it up to the\n // errors and lang serv identifiers\n let tokenPos = 0\n\n l.forEach(token => {\n let targetedQueryWord: typeof twoslash.staticQuickInfos[number] | undefined\n\n let tokenContent = \"\"\n // Underlining particular words\n const findTokenFunc = (start: number) => (e: any) =>\n start <= e.character && start + token.content.length >= e.character + e.length\n\n const findTokenDebug = (start: number) => (e: any) => {\n const result = start <= e.character && start + token.content.length >= e.character + e.length\n // prettier-ignore\n console.log(result, start, '<=', e.character, '&&', start + token.content.length, '>=', e.character + e.length)\n if (result) {\n console.log(\"Found:\", e)\n console.log(\"Inside:\", token)\n }\n return result\n }\n\n const errorsInToken = errors.filter(findTokenFunc(tokenPos))\n const lspResponsesInToken = lspValues.filter(findTokenFunc(tokenPos))\n const queriesInToken = queries.filter(findTokenFunc(tokenPos))\n\n // Does this line have a word targeted by a query?\n targetedQueryWord = targetedQueryWord || lspResponsesInToken.find(response => response.text === (queries.length && queries[0].text))!\n\n const allTokens = [...errorsInToken, ...lspResponsesInToken, ...queriesInToken]\n const allTokensByStart = allTokens.sort((l, r) => {\n return (l.start || 0) - (r.start || 0)\n })\n\n if (allTokensByStart.length) {\n const ranges = allTokensByStart.map(token => {\n const range: any = {\n begin: token.start! - filePos,\n end: token.start! + token.length! - filePos,\n }\n\n // prettier-ignore\n if (range.begin < 0 || range.end < 0) {\n // prettier-ignore\n // throw new Error(`The begin range of a token is at a minus location, filePos:${filePos} current token: ${JSON.stringify(token, null, ' ')}\\n result: ${JSON.stringify(range, null, ' ')}`)\n }\n\n if (\"renderedMessage\" in token) range.classes = \"err\"\n if (\"kind\" in token) range.classes = token.kind\n if (\"targetString\" in token) {\n range.classes = \"lsp\"\n const lspText = options.includeJSDocInHover && token.docs ? `${token.docs}\\n\\n${token.text}` : token.text\n range[\"lsp\"] = lspText\n }\n return range\n })\n\n tokenContent += createHighlightedString(ranges, token.content, targetedQueryWord?.text)\n } else {\n tokenContent += subTripleArrow(token.content)\n }\n\n html += `${tokenContent}`\n tokenPos += token.content.length\n filePos += token.content.length\n })\n\n html += `
    `\n // This is the \\n which the
    represents\n filePos += 1\n }\n\n // Adding error messages to the line after\n if (errors.length) {\n const messages = errors.map(e => escapeHtml(e.renderedMessage)).join(\"
    \")\n const codes = errors.map(e => e.code).join(\"
    \")\n html += `${messages}${codes}`\n html += `${messages}`\n }\n\n // Add queries to the next line\n if (queries.length) {\n queries.forEach(query => {\n // This is used to wrap popovers and completions to improve styling options for users.\n html += `
    `\n\n switch (query.kind) {\n case \"query\": {\n const queryTextWithPrefix = escapeHtml(query.text!)\n const lspValues = staticQuickInfosGroupedByLine.get(i) || []\n const targetedWord = lspValues.find(response => response.text === (queries.length && queries[0].text))!\n const halfWayAcrossTheTargetedWord = ((targetedWord && targetedWord.character + targetedWord?.length / 2) - 1) || 0\n html +=\n `` +\n \" \".repeat(halfWayAcrossTheTargetedWord) +\n \"\" +\n `
    ${queryTextWithPrefix}
    `\n break\n }\n\n case \"completions\": {\n if (!query.completions) {\n html += `${\"//\" + \"\".padStart(query.offset - 2) + \"^ - No completions found\"}`\n } else {\n const prefixed = query.completions.filter(c => c.name.startsWith(query.completionsPrefix || \"____\"))\n\n const lis = prefixed\n .sort((l, r) => l.name.localeCompare(r.name))\n .map(c => {\n const after = c.name.substr(query.completionsPrefix?.length || 0)\n const name = `${query.completionsPrefix || \"\"}${after}`\n const isDeprecated = c.kindModifiers?.split(\",\").includes(\"deprecated\")\n const liClass = isDeprecated ? \"deprecated\" : \"\"\n return `
  • ${name}
  • `\n })\n .join(\"\")\n html += `${\" \".repeat(query.offset)}`\n }\n }\n }\n html += \"
    \"\n })\n }\n\n // Any tags (currently that's warn/error/log)\n if (tags.length) {\n tags.forEach(tag => {\n if(![\"error\", \"warn\", \"log\"].includes(tag.name)) return\n\n // This is used to wrap popovers and completions to improve styling options for users.\n html += `
    `\n switch(tag.name) {\n case \"error\": html += `${errorSVG}${tag.annotation || \"N/A\"}`; break;\n case \"warn\": html += `${warningSVG}${tag.annotation || \"N/A\"}`; break;\n case \"log\": html += `${logSVG}${tag.annotation || \"N/A\"}`; break;\n }\n html += \"
    \"\n })\n }\n })\n html = replaceTripleArrowEncoded(html.replace(/\\n*$/, \"\")) // Get rid of final new lines\n\n if (options.addTryButton) {\n const playgroundLink = `Try`\n html += `
    ${playgroundLink}`\n } else {\n html += ``\n }\n\n html += `
    `\n\n // Attach annotations which live above of the code\n if (twoslash.tags && twoslash.tags.length) {\n html += htmlForTags(twoslash.tags)\n html += \"\"\n }\n\n return html\n}\n\n/** Returns a map where all the keys are the value in keyGetter */\nfunction groupBy(list: T[], keyGetter: (obj: any) => number) {\n const map = new Map()\n list.forEach(item => {\n const key = keyGetter(item)\n const collection = map.get(key)\n if (!collection) {\n map.set(key, [item])\n } else {\n collection.push(item)\n }\n })\n return map\n}\n\n\nconst errorSVG = ``\nconst warningSVG = ``\nconst logSVG = ``","import { shouldBeHighlightable, shouldHighlightLine, escapeHtml, Meta } from \"../utils\"\nimport { HtmlRendererOptions, preOpenerFromRenderingOptsWithExtras } from \"./plain\"\nimport shiki from \"shiki\"\n\ntype Lines = shiki.IThemedToken[][]\n\nexport function defaultShikiRenderer(lines: Lines, options: HtmlRendererOptions, meta: Meta) {\n let html = \"\"\n\n const hasHighlight = meta.highlight && shouldBeHighlightable(meta.highlight)\n const hl = shouldHighlightLine(meta.highlight)\n\n html += preOpenerFromRenderingOptsWithExtras(options, meta, [])\n if (meta.title) {\n html += `
    ${meta.title}
    `\n }\n\n if (options.langId) {\n html += `
    ${options.langId}
    `\n }\n\n html += `
    `\n\n lines.forEach((l, i) => {\n if (l.length === 0) {\n html += `
    `\n } else {\n const hiClass = hasHighlight ? (hl(i) ? \" highlight\" : \" dim\") : \"\"\n const prefix = `
    `\n html += prefix\n\n l.forEach(token => {\n const cssDeclarations = [`color: ${token.color}`];\n if (token.fontStyle) {\n if (token.fontStyle & shiki.FontStyle.Italic) {\n cssDeclarations.push('font-style: italic');\n }\n if (token.fontStyle & shiki.FontStyle.Bold) {\n cssDeclarations.push('font-weight: bold');\n }\n if (token.fontStyle & shiki.FontStyle.Underline) {\n cssDeclarations.push('text-decoration: underline');\n }\n }\n html += `${escapeHtml(token.content)}`\n })\n html += `
    `\n }\n })\n\n html = html.replace(/\\n*$/, \"\") // Get rid of final new lines\n html += `
    `\n return html\n}\n","export const tsconfig = {\n compilerOptions: `The set of compiler options for your project`,\n allowJs: `Allow JavaScript files to be a part of your program. Use the \\`checkJS\\` option to get errors from these files.`,\n allowSyntheticDefaultImports: `Allow 'import x from y' when a module doesn't have a default export.`,\n allowUmdGlobalAccess: `Allow accessing UMD globals from modules.`,\n allowUnreachableCode: `Disable error reporting for unreachable code.`,\n allowUnusedLabels: `Disable error reporting for unused labels.`,\n alwaysStrict: `Ensure 'use strict' is always emitted.`,\n assumeChangesOnlyAffectDirectDependencies: `Have recompiles in projects that use [\\`incremental\\`](#incremental) and \\`watch\\` mode assume that changes within a file will only affect files directly depending on it.`,\n baseUrl: `Specify the base directory to resolve non-relative module names.`,\n charset: `No longer supported. In early versions, manually set the text encoding for reading files.`,\n checkJs: `Enable error reporting in type-checked JavaScript files.`,\n clean: `Delete the outputs of all projects.`,\n composite: `Enable constraints that allow a TypeScript project to be used with project references.`,\n declaration: `Generate .d.ts files from TypeScript and JavaScript files in your project.`,\n declarationDir: `Specify the output directory for generated declaration files.`,\n declarationMap: `Create sourcemaps for d.ts files.`,\n diagnostics: `Output compiler performance information after building.`,\n disableFilenameBasedTypeAcquisition: `Disables inference for type acquisition by looking at filenames in a project.`,\n disableReferencedProjectLoad: `Reduce the number of projects loaded automatically by TypeScript.`,\n disableSizeLimit: `Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server.`,\n disableSolutionSearching: `Opt a project out of multi-project reference checking when editing.`,\n disableSourceOfProjectReferenceRedirect: `Disable preferring source files instead of declaration files when referencing composite projects`,\n downlevelIteration: `Emit more compliant, but verbose and less performant JavaScript for iteration.`,\n emitBOM: `Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.`,\n emitDeclarationOnly: `Only output d.ts files and not JavaScript files.`,\n emitDecoratorMetadata: `Emit design-type metadata for decorated declarations in source files.`,\n enable: `Disable the type acquisition for JavaScript projects`,\n esModuleInterop: `Emit additional JavaScript to ease support for importing CommonJS modules. This enables [\\`allowSyntheticDefaultImports\\`](#allowSyntheticDefaultImports) for type compatibility.`,\n exactOptionalPropertyTypes: `Differentiate between undefined and not present when type checking`,\n exclude: `Filters results from the [\\`include\\`](#include) option.`,\n excludeDirectories: `Remove a list of directories from the watch process.`,\n excludeFiles: `Remove a list of files from the watch mode's processing.`,\n experimentalDecorators: `Enable experimental support for TC39 stage 2 draft decorators.`,\n explainFiles: `Print files read during the compilation including why it was included.`,\n extendedDiagnostics: `Output more detailed compiler performance information after building.`,\n extends: `Specify one or more path or node module references to base configuration files from which settings are inherited.`,\n fallbackPolling: `Specify what approach the watcher should use if the system runs out of native file watchers.`,\n files: `Include a list of files. This does not support glob patterns, as opposed to [\\`include\\`](#include).`,\n force: `Build all projects, including those that appear to be up to date`,\n forceConsistentCasingInFileNames: `Ensure that casing is correct in imports.`,\n generateCpuProfile: `Emit a v8 CPU profile of the compiler run for debugging.`,\n importHelpers: `Allow importing helper functions from tslib once per project, instead of including them per-file.`,\n importsNotUsedAsValues: `Specify emit/checking behavior for imports that are only used for types.`,\n include: `Specify a list of glob patterns that match files to be included in compilation.`,\n incremental: `Save .tsbuildinfo files to allow for incremental compilation of projects.`,\n inlineSourceMap: `Include sourcemap files inside the emitted JavaScript.`,\n inlineSources: `Include source code in the sourcemaps inside the emitted JavaScript.`,\n isolatedModules: `Ensure that each file can be safely transpiled without relying on other imports.`,\n jsx: `Specify what JSX code is generated.`,\n jsxFactory: `Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'`,\n jsxFragmentFactory: `Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'.`,\n jsxImportSource: `Specify module specifier used to import the JSX factory functions when using \\`jsx: react-jsx*\\`.`,\n keyofStringsOnly: `Make keyof only return strings instead of string, numbers or symbols. Legacy option.`,\n lib: `Specify a set of bundled library declaration files that describe the target runtime environment.`,\n listEmittedFiles: `Print the names of emitted files after a compilation.`,\n listFiles: `Print all of the files read during the compilation.`,\n locale: `Set the language of the messaging from TypeScript. This does not affect emit.`,\n mapRoot: `Specify the location where debugger should locate map files instead of generated locations.`,\n maxNodeModuleJsDepth: `Specify the maximum folder depth used for checking JavaScript files from \\`node_modules\\`. Only applicable with [\\`allowJs\\`](#allowJs).`,\n module: `Specify what module code is generated.`,\n moduleResolution: `Specify how TypeScript looks up a file from a given module specifier.`,\n newLine: `Set the newline character for emitting files.`,\n noEmit: `Disable emitting file from a compilation.`,\n noEmitHelpers: `Disable generating custom helper functions like \\`__extends\\` in compiled output.`,\n noEmitOnError: `Disable emitting files if any type checking errors are reported.`,\n noErrorTruncation: `Disable truncating types in error messages.`,\n noFallthroughCasesInSwitch: `Enable error reporting for fallthrough cases in switch statements.`,\n noImplicitAny: `Enable error reporting for expressions and declarations with an implied \\`any\\` type..`,\n noImplicitOverride: `Ensure overriding members in derived classes are marked with an override modifier.`,\n noImplicitReturns: `Enable error reporting for codepaths that do not explicitly return in a function.`,\n noImplicitThis: `Enable error reporting when \\`this\\` is given the type \\`any\\`.`,\n noImplicitUseStrict: `Disable adding 'use strict' directives in emitted JavaScript files.`,\n noLib: `Disable including any library files, including the default lib.d.ts.`,\n noPropertyAccessFromIndexSignature: `Enforces using indexed accessors for keys declared using an indexed type`,\n noResolve: `Disallow \\`import\\`s, \\`require\\`s or \\`\\`s from expanding the number of files TypeScript should add to a project.`,\n noStrictGenericChecks: `Disable strict checking of generic signatures in function types.`,\n noUncheckedIndexedAccess: `Add \\`undefined\\` to a type when accessed using an index.`,\n noUnusedLocals: `Enable error reporting when a local variables aren't read.`,\n noUnusedParameters: `Raise an error when a function parameter isn't read`,\n out: `Deprecated setting. Use [\\`outFile\\`](#outFile) instead.`,\n outDir: `Specify an output folder for all emitted files.`,\n outFile: `Specify a file that bundles all outputs into one JavaScript file. If [\\`declaration\\`](#declaration) is true, also designates a file that bundles all .d.ts output.`,\n paths: `Specify a set of entries that re-map imports to additional lookup locations.`,\n plugins: `Specify a list of language service plugins to include.`,\n preserveConstEnums: `Disable erasing \\`const enum\\` declarations in generated code.`,\n preserveSymlinks: `Disable resolving symlinks to their realpath. This correlates to the same flag in node.`,\n preserveWatchOutput: `Disable wiping the console in watch mode`,\n pretty: `Enable color and formatting in output to make compiler errors easier to read`,\n reactNamespace: `Specify the object invoked for \\`createElement\\`. This only applies when targeting \\`react\\` JSX emit.`,\n references: `Specify an array of objects that specify paths for projects. Used in project references.`,\n removeComments: `Disable emitting comments.`,\n resolveJsonModule: `Enable importing .json files`,\n rootDir: `Specify the root folder within your source files.`,\n rootDirs: `Allow multiple folders to be treated as one when resolving modules.`,\n skipDefaultLibCheck: `Skip type checking .d.ts files that are included with TypeScript.`,\n skipLibCheck: `Skip type checking all .d.ts files.`,\n sourceMap: `Create source map files for emitted JavaScript files.`,\n sourceRoot: `Specify the root path for debuggers to find the reference source code.`,\n strict: `Enable all strict type checking options.`,\n strictBindCallApply: `Check that the arguments for \\`bind\\`, \\`call\\`, and \\`apply\\` methods match the original function.`,\n strictFunctionTypes: `When assigning functions, check to ensure parameters and the return values are subtype-compatible.`,\n strictNullChecks: `When type checking, take into account \\`null\\` and \\`undefined\\`.`,\n strictPropertyInitialization: `Check for class properties that are declared but not set in the constructor.`,\n stripInternal: `Disable emitting declarations that have \\`@internal\\` in their JSDoc comments.`,\n suppressExcessPropertyErrors: `Disable reporting of excess property errors during the creation of object literals.`,\n suppressImplicitAnyIndexErrors: `Suppress [\\`noImplicitAny\\`](#noImplicitAny) errors when indexing objects that lack index signatures.`,\n synchronousWatchDirectory: `Synchronously call callbacks and update the state of directory watchers on platforms that don\\`t support recursive watching natively.`,\n target: `Set the JavaScript language version for emitted JavaScript and include compatible library declarations.`,\n traceResolution: `Log paths used during the [\\`moduleResolution\\`](#moduleResolution) process.`,\n tsBuildInfoFile: `Specify the folder for .tsbuildinfo incremental compilation files.`,\n typeAcquisition: `Specify options for automatic acquisition of declaration files.`,\n typeRoots: `Specify multiple folders that act like \\`./node_modules/@types\\`.`,\n types: `Specify type package names to be included without being referenced in a source file.`,\n useDefineForClassFields: `Emit ECMAScript-standard-compliant class fields.`,\n useUnknownInCatchVariables: `Default catch clause variables as \\`unknown\\` instead of \\`any\\`.`,\n verbose: `Enable verbose logging`,\n watchDirectory: `Specify how directories are watched on systems that lack recursive file-watching functionality.`,\n watchFile: `Specify how the TypeScript watch mode works.`,\n};\n","type Lines = import(\"shiki\").IThemedToken[][]\n\nimport type { IThemedToken } from \"shiki\"\nimport { escapeHtml, Meta } from \"../utils\"\nimport { tsconfig } from \"../tsconfig-oneliners.generated\"\nimport { HtmlRendererOptions, preOpenerFromRenderingOptsWithExtras } from \"./plain\"\n\n/** Uses tmLanguage scopes to determine what the content of the token is */\nconst tokenIsJSONKey = (token: IThemedToken) => {\n if (!token.explanation) return false\n return token.explanation.find(e => e.scopes.find(s => s.scopeName.includes(\"support.type.property-name\")))\n}\n\n/** Can you look up the token in the tsconfig reference? */\nconst isKeyInTSConfig = (token: IThemedToken) => {\n if (token.content === '\"') return\n const name = token.content.slice(1, token.content.length - 1)\n return name in tsconfig\n}\n\n/**\n * Renders a TSConfig JSON object with additional LSP-ish information\n * @param lines the result of shiki highlighting\n * @param options shiki display options\n */\nexport function tsconfigJSONRenderer(lines: Lines, options: HtmlRendererOptions, meta: Meta) {\n let html = \"\"\n\n html += preOpenerFromRenderingOptsWithExtras(options, meta, [\"tsconfig\", \"lsp\"])\n if (meta.title) {\n html += `
    ${meta.title}
    `\n }\n\n if (options.langId) {\n html += `
    ${options.langId}
    `\n }\n\n html += `
    `\n\n lines.forEach(l => {\n if (l.length === 0) {\n html += `
    `\n } else {\n html += `
    `\n l.forEach(token => {\n // This means we're looking at a token which could be '\"module\"', '\"', '\"compilerOptions\"' etc\n if (tokenIsJSONKey(token) && isKeyInTSConfig(token)) {\n const key = token.content.slice(1, token.content.length - 1)\n const oneliner = (tsconfig as Record)[key]\n // prettier-ignore\n html += `\"\"`\n } else {\n html += `${escapeHtml(token.content)}`\n }\n })\n html += `
    `\n }\n })\n\n html = html.replace(/\\n*$/, \"\") // Get rid of final new lines\n html += `
    `\n return html\n}\n","import { getHighlighter, Highlighter, HighlighterOptions, IThemedToken } from \"shiki\"\nimport { twoslasher, TwoSlashOptions, TwoSlashReturn } from \"@typescript/twoslash\"\nimport { twoslashRenderer } from \"./renderers/twoslash\"\nimport { HtmlRendererOptions, plainTextRenderer } from \"./renderers/plain\"\nimport { defaultShikiRenderer } from \"./renderers/shiki\"\nimport { tsconfigJSONRenderer } from \"./renderers/tsconfig\"\nimport { Meta } from \"./utils\"\n\nexport interface TwoslashShikiOptions {\n /** A way to turn on the try buttons seen on the TS website */\n addTryButton?: true\n /** A way to disable implicit React imports on tsx/jsx language codeblocks */\n disableImplicitReactImport?: true\n /** A way to add a div wrapper for multi-theme outputs */\n wrapFragments?: true\n /** Include JSDoc comments in the hovers */\n includeJSDocInHover?: true\n /** Instead of showing twoslash exceptions inline, throw the entire process like it will on CI */\n alwayRaiseForTwoslashExceptions?: true\n /** Ignore transforming certain code blocks */\n ignoreCodeblocksWithCodefenceMeta?: string[]\n}\n\n/** The possible user config, a combination of all shiki, twoslash and twoslash-shiki options */\nexport type UserConfigSettings = HighlighterOptions & TwoSlashOptions & TwoslashShikiOptions\n\n/**\n * This gets filled in by the promise below, then should\n * hopefully be more or less synchronous access by each parse\n * of the highlighter\n */\nlet storedHighlighter: Highlighter = null as any\n\n/**\n * Creates a *cached singleton* Shiki highlighter, this is an async call because of the call to WASM to get\n * the regex parser set up.\n *\n * In other functions, passing a the result of this highlighter function is kind of optional but it's the author's\n * opinion that you should be in control of the highlighter, and not this library.\n *\n */\nexport const createShikiHighlighter = (options: HighlighterOptions) => {\n if (storedHighlighter) return Promise.resolve(storedHighlighter)\n\n return getHighlighter(options).then(newHighlighter => {\n storedHighlighter = newHighlighter\n return storedHighlighter\n })\n}\n\n/**\n * Renders a code sample to HTML, automatically taking into account:\n *\n * - rendering overrides for twoslash and tsconfig\n * - whether the language exists in shiki\n *\n * @param code the source code to render\n * @param lang the language to use in highlighting\n * @param info additional metadata which lives after the code-fence lang (e.g. `{ twoslash: true }`)\n * @param shikiOptions user settings\n * @param highlighter optional, but you should use it, highlighter\n * @param twoslash optional, but required when info contains 'twoslash' as a string\n */\nexport const renderCodeToHTML = (\n code: string,\n lang: string,\n meta: Meta,\n shikiOptions?: UserConfigSettings & { themeName: string },\n highlighter?: Highlighter,\n twoslash?: TwoSlashReturn\n) => {\n if (!highlighter && !storedHighlighter) {\n throw new Error(\"The highlighter object hasn't been initialised via `setupHighLighter` yet in shiki-twoslash\")\n }\n\n // Shiki does know the lang, so tokenize\n const renderHighlighter = highlighter || storedHighlighter\n\n const renderOpts: HtmlRendererOptions = {\n fg: renderHighlighter.getForegroundColor(),\n bg: renderHighlighter.getBackgroundColor(),\n ...shikiOptions,\n }\n\n let tokens: IThemedToken[][]\n try {\n // I'm a little unsure about why we need this, perhaps the jsx language\n // upstream in shiki is broken?\n const tmpLang = lang === \"jsx\" ? \"tsx\" : lang\n\n tokens = renderHighlighter.codeToThemedTokens(code, tmpLang as any)\n } catch (error) {\n // Shiki doesn't know this lang, so render it as plain text, but\n // also add a note at the end as a HTML comment\n const note = ``\n return plainTextRenderer(code, renderOpts, meta) + note\n }\n\n // Twoslash specific renderer\n if (lang && meta.twoslash && twoslash) {\n return twoslashRenderer(tokens, { ...renderOpts, langId: lang }, twoslash, meta)\n }\n\n // TSConfig renderer\n if (lang && lang.startsWith(\"json\") && meta.tsconfig) {\n return tsconfigJSONRenderer(tokens, renderOpts, meta)\n }\n\n // Otherwise just the normal shiki renderer\n return defaultShikiRenderer(tokens, { ...renderOpts, langId: lang }, meta)\n}\n\n/**\n * Runs Twoslash over the code passed in with a particular language as the default file.\n */\nexport const runTwoSlash = (input: string, lang: string, settings: UserConfigSettings = {}): TwoSlashReturn => {\n let code = input\n\n // Shiki doesn't handle a few filetype mappings, so do that ahead of time. Oddly enough, this also\n // gets re-done at remark-shiki level\n const replacer = {\n json5: \"json\",\n yml: \"yaml\",\n }\n\n // @ts-ignore\n if (replacer[lang]) lang = replacer[lang]\n\n const hasReactImport = /^import\\s+React(?:.*)\\s+from\\s+('|\")react\\1/gm\n\n // Add react import to code samples indicating they're needing react.\n if ([\"tsx\", \"jsx\"].includes(lang) && !settings.disableImplicitReactImport && !hasReactImport.test(code)) {\n const reactImport = \"import React from 'react'\\n\"\n const cutString = \"// ---cut---\\n\"\n // ^ cutString taken directly from\n // https://github.com/microsoft/TypeScript-Website/blob/0c8d98a69d520365c1909d536fa1323f03a8438c/packages/ts-twoslasher/src/index.ts#L694\n\n if (code.includes(cutString)) {\n code = code\n .split(cutString)\n .map((item, index) => (index == 0 ? reactImport.concat(item) : item))\n .join(cutString)\n } else {\n code = [reactImport, cutString, code].join(\"\")\n }\n }\n\n settings.customTags = [\"annotate\", \"log\", \"warn\", \"error\"]\n const results = twoslasher(code, lang, settings)\n return results\n}\n\n/** Set of renderers if you want to explicitly call one instead of using renderCodeToHTML */\nexport const renderers = {\n plainTextRenderer,\n defaultShikiRenderer,\n twoslashRenderer,\n tsconfigJSONRenderer,\n}\n"],"names":["htmlForTags","tags","html","forEach","t","name","annotation","meta","split","text","pop","info","trim","flipped","includes","settings","arrowRot","textDegree","top","line","theInfo","_extends","JSON","parse","error","TwoslashError","stringify","message","arrowSVG","arrow","style","inner","rot","escapeHtml","replace","shouldBeHighlightable","highlight","Object","keys","find","key","isNaN","parseInt","shouldHighlightLine","lines","push","_key$split","first","lastIndex","i","preOpenerFromRenderingOptsWithExtras","opts","classes","bg","fg","classList","themeName","title","concat","filter","Boolean","join","attributes","entries","entry","map","_ref","plainTextRenderer","code","options","langId","twoslashRenderer","twoslash","hasHighlight","hl","length","str","errorsGroupedByLine","groupBy","errors","e","Map","staticQuickInfosGroupedByLine","staticQuickInfos","q","queriesGroupedByLine","queries","tagsGroupedByLine","filePos","l","get","lspValues","prefix","tokenPos","token","targetedQueryWord","tokenContent","findTokenFunc","start","character","content","errorsInToken","lspResponsesInToken","queriesInToken","response","_targetedQueryWord","allTokensByStart","sort","r","ranges","targetedWord","tag","x","makeTagFromRange","close","lsp","htmlAttrReplacer","a","b","precedenceOf","indexOf","cmp","begin","end","cursor","nest","data","stack","shift","substring","some","htmlAttrUnReplacer","replaceTripleArrow","table","<","\"","'","&","\r","\n","toString","chr","stripHTML","createHighlightedString","range","kind","includeJSDocInHover","docs","color","messages","renderedMessage","codes","query","queryTextWithPrefix","repeat","completions","lis","c","startsWith","completionsPrefix","localeCompare","after","substr","_query$completionsPre","_c$kindModifiers","kindModifiers","offset","padStart","errorSVG","warningSVG","logSVG","addTryButton","playgroundURL","list","keyGetter","item","collection","set","defaultShikiRenderer","hiClass","cssDeclarations","fontStyle","shiki","FontStyle","Italic","Bold","Underline","tsconfig","compilerOptions","allowJs","allowSyntheticDefaultImports","allowUmdGlobalAccess","allowUnreachableCode","allowUnusedLabels","alwaysStrict","assumeChangesOnlyAffectDirectDependencies","baseUrl","charset","checkJs","clean","composite","declaration","declarationDir","declarationMap","diagnostics","disableFilenameBasedTypeAcquisition","disableReferencedProjectLoad","disableSizeLimit","disableSolutionSearching","disableSourceOfProjectReferenceRedirect","downlevelIteration","emitBOM","emitDeclarationOnly","emitDecoratorMetadata","enable","esModuleInterop","exactOptionalPropertyTypes","exclude","excludeDirectories","excludeFiles","experimentalDecorators","explainFiles","extendedDiagnostics","extends","fallbackPolling","files","force","forceConsistentCasingInFileNames","generateCpuProfile","importHelpers","importsNotUsedAsValues","include","incremental","inlineSourceMap","inlineSources","isolatedModules","jsx","jsxFactory","jsxFragmentFactory","jsxImportSource","keyofStringsOnly","lib","listEmittedFiles","listFiles","locale","mapRoot","maxNodeModuleJsDepth","module","moduleResolution","newLine","noEmit","noEmitHelpers","noEmitOnError","noErrorTruncation","noFallthroughCasesInSwitch","noImplicitAny","noImplicitOverride","noImplicitReturns","noImplicitThis","noImplicitUseStrict","noLib","noPropertyAccessFromIndexSignature","noResolve","noStrictGenericChecks","noUncheckedIndexedAccess","noUnusedLocals","noUnusedParameters","out","outDir","outFile","paths","plugins","preserveConstEnums","preserveSymlinks","preserveWatchOutput","pretty","reactNamespace","references","removeComments","resolveJsonModule","rootDir","rootDirs","skipDefaultLibCheck","skipLibCheck","sourceMap","sourceRoot","strict","strictBindCallApply","strictFunctionTypes","strictNullChecks","strictPropertyInitialization","stripInternal","suppressExcessPropertyErrors","suppressImplicitAnyIndexErrors","synchronousWatchDirectory","target","traceResolution","tsBuildInfoFile","typeAcquisition","typeRoots","types","useDefineForClassFields","useUnknownInCatchVariables","verbose","watchDirectory","watchFile","tsconfigJSONRenderer","explanation","scopes","s","scopeName","tokenIsJSONKey","slice","isKeyInTSConfig","storedHighlighter","renderers","Promise","resolve","getHighlighter","then","newHighlighter","lang","shikiOptions","highlighter","Error","tokens","renderHighlighter","renderOpts","getForegroundColor","getBackgroundColor","codeToThemedTokens","note","input","replacer","json5","yml","disableImplicitReactImport","test","reactImport","cutString","index","customTags","twoslasher"],"mappings":"6YAEO,IAAMA,EAAc,SAACC,GAC1B,IAAIC,EAAO,GAmCX,OAlCAD,EAAKE,SAAQ,SAAAC,GACX,GAAe,aAAXA,EAAEC,MAAuBD,EAAEE,WAAY,CACzC,IAAMC,EAAOH,EAAEE,WAAWE,MAAM,OAC1BC,EAAOF,EAAKG,MACZC,GAAQJ,EAAK,IAAM,IAAIK,OACvBC,EAAUF,EAAKG,SAAS,SAC1BC,EAAW,CACbF,QAAAA,EACAG,SAAoB,kBACpBC,WAAY,OACZC,IAAQd,EAAEe,WAIZ,GAAIR,EAAKG,SAAS,KAAM,CACtB,IAAMM,EAAW,IAAMT,EAAKH,MAAM,KAAK,GACvC,IAEEO,EAAQM,KAAON,EADUO,KAAKC,MAAMH,IAEpC,MAAOI,GACP,MAAM,IAAIC,gBAAc,+CAAgDH,KAAKI,UAAUtB,sBAAqBgB,2BAAkCI,EAAcG,cAIhK,IAAMC,EAAWC,EAAMd,GAEvBb,yCAC4BW,EAAU,QAAU,0BAAuBE,EAASG,aAClFU,uEAC6Db,EAASE,iBAAgBR,qBAKjFP,GAGH2B,EAAQ,SAACC,GACb,IAEMC,EAAQD,EAAMjB,oOACdmB,EAAMF,EAAMd,SAASR,MAAM,KACjC,2CAA4CwB,EAAI,mBAAkBA,EAAI,eAAcA,EAAI,oHAC3ED,0CCgFCE,EAAW/B,GACzB,OAAOA,EAAKgC,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAI3C,IAAMC,EAAwB,SAACC,GACpC,QAASC,OAAOC,KAAKF,GAAa,IAAIG,MAAK,SAAAC,GACzC,QAAIA,EAAI1B,SAAS,OACZ2B,MAAMC,SAASF,QAMXG,EAAsB,SAACP,GAClC,IAAMQ,EAAkB,GAYxB,OAXAP,OAAOC,KAAKF,GAAa,IAAIG,MAAK,SAAAC,GAEhC,GADKC,MAAMC,SAASF,KAAOI,EAAMC,KAAKH,SAASF,IAC3CA,EAAI1B,SAAS,KAGf,IAFA,IAAAgC,EAAsBN,EAAIhC,MAAM,KAAzBuC,EAAKD,KACNE,EAAYN,SADAI,MACiB,EAC1BG,EAAIP,SAASK,GAAQE,EAAID,EAAWC,IAC3CL,EAAMC,KAAKI,MAKV,SAAC9B,GAAY,OAAKyB,EAAM9B,SAASK,KC/I7B+B,EAAuC,SAACC,EAA2B5C,EAAY6C,GAC1F,IAAMC,EAAKF,EAAKE,IAAM,OAChBC,EAAKH,EAAKG,IAAM,QAIhBC,EAAY,CAAC,QAHLJ,EAAKK,WAAa,GAGGjD,QAAYA,EAAKkD,MAAQ,aAAe,IAAEC,OAAMN,GAAW,IAC3FO,OAAOC,SACPC,KAAK,KACLjD,OAEGkD,EAAazB,OAAO0B,QAAQxD,GAC/BoD,QAAO,SAAAK,GAIN,MACE,CAAC,SAAU,SAAU,WAAWlD,gBAAgBkD,EAAM,MACrD,CAAC,QAAS,YAAYlD,SAASkD,EAAM,MACzB,IAAbA,EAAM,MAGTC,KAAI,SAAAC,GAAY,OAAPA,UAAOA,YAChBL,KAAK,KACLjD,OAGH,qBAAsB2C,gCAAuCF,cAAcC,OAAMQ,MAAiBA,EAAc,SAIlH,SAAgBK,EAAkBC,EAAcC,EAA8B9D,GAC5E,IAAIL,EAAO,GAgBX,OAdAA,GAAQgD,EAAqCmB,EAAS9D,EAAM,IACxDA,EAAKkD,QACPvD,8BAAmCK,EAAKkD,gBAGtCY,EAAQC,SACVpE,+BAAoCmE,EAAQC,iBAG9CpE,yCAGAA,GAFAA,GAAQ+B,EAAWmC,IAEPlC,QAAQ,OAAQ,2BCxB9B,SAAgBqC,EAAiB3B,EAAcyB,EAAqDG,EAAoBjE,GACtH,IAAIL,EAAO,GAELuE,EAAelE,EAAK6B,WAAaD,EAAsB5B,EAAK6B,WAC5DsC,EAAK/B,EAAoBpC,EAAK6B,WAEhCoC,EAASvE,MAAQuE,EAASvE,KAAK0E,SAAQzE,GAAQ,+BAEnDA,GAAQgD,EAAqCmB,EAAS9D,EAAM,CAAC,WAAY,QACrEA,EAAKkD,QACPvD,8BAAmCK,EAAKkD,gBAGtCY,EAAQC,SACVpE,+BAAoCmE,EAAQC,iBAG9CpE,wCAEA,IFyDwC0E,EEzDlCC,EAAsBC,EAAQN,EAASO,QAAQ,SAAAC,GAAC,OAAIA,EAAE7D,SAAS,IAAI8D,IACnEC,EAAgCJ,EAAQN,EAASW,kBAAkB,SAAAC,GAAC,OAAIA,EAAEjE,SAAS,IAAI8D,IAEvFI,EAAuBP,EAAQN,EAASc,SAAS,SAAAF,GAAC,OAAIA,EAAEjE,KAAO,MAAM,IAAI8D,IACzEM,EAAoBT,EAAQN,EAASvE,MAAM,SAAAmF,GAAC,OAAIA,EAAEjE,KAAO,MAAM,IAAI8D,IAMrEO,EAAU,EAmLd,OAjLA5C,EAAMzC,SAAQ,SAACsF,EAAGxC,GAChB,IAAM8B,EAASF,EAAoBa,IAAIzC,IAAM,GACvC0C,EAAYT,EAA8BQ,IAAIzC,IAAM,GACpDqC,EAAUD,EAAqBK,IAAIzC,IAAM,GACzChD,EAAOsF,EAAkBG,IAAIzC,IAAM,GAGnC2C,sBADUnB,EAAgBC,EAAGzB,EAAI,GAAK,aAAe,OAAU,SAGrE,GAAiB,IAAbwC,EAAEd,QAAsB,IAAN1B,EAEpBuC,GAAW,OACN,GAAiB,IAAbC,EAAEd,OAEXzE,GADqB0F,iBAErBJ,GAAW,MACN,CACLtF,GAAQ0F,EAIR,IAAIC,EAAW,EAEfJ,EAAEtF,SAAQ,SAAA2F,GACR,IAAIC,EAEAC,EAAe,GAEbC,EAAgB,SAACC,GAAa,OAAK,SAAClB,GAAM,OAC9CkB,GAASlB,EAAEmB,WAAaD,EAAQJ,EAAMM,QAAQzB,QAAUK,EAAEmB,UAAYnB,EAAEL,SAapE0B,EAAgBtB,EAAOpB,OAAOsC,EAAcJ,IAC5CS,EAAsBX,EAAUhC,OAAOsC,EAAcJ,IACrDU,EAAiBjB,EAAQ3B,OAAOsC,EAAcJ,IAGpDE,EAAoBA,GAAqBO,EAAoB/D,MAAK,SAAAiE,GAAQ,OAAIA,EAAS/F,QAAU6E,EAAQX,QAAUW,EAAQ,GAAG7E,SAE9H,IAK6BgG,EAJvBC,KADShD,OAAO2C,EAAkBC,EAAwBC,GAC7BI,MAAK,SAAClB,EAAGmB,GAC1C,OAAQnB,EAAES,OAAS,IAAMU,EAAEV,OAAS,MA0BpCF,GAvBEU,EAAiB/B,OFpG7B,SAAwCkC,EAAiBpG,EAAcqG,YAAAA,IAAAA,EAAuB,IAM5F,IAAMC,EAAM,SAACC,GAAS,UAASA,OACzBC,EAAmB,SAACL,EAAUM,GAClC,OAAQN,EAAExD,SACR,IAAK,MAEH,IAAM+D,EAyEW,SAACvC,GAAW,OAAKA,EAAI1C,QAAQ,KAAM,KAzExCkF,CAAiBR,EAAEO,KAAO,IAEtC,OAAeJ,EAARG,EAAY,6BAAoCC,QADzBP,EAAEO,MAAQL,EAAe,8CAAgD,KAEzG,IAAK,QACH,OAAOC,GAAOG,EAAQ,IAAM,sBAG9B,IAAK,MACL,QACE,OAAOH,GAAOG,EAAQ,IAAM,kBAIlCL,EAAOF,MAAK,SAACU,EAAGC,GAGd,IAAMC,EAAe,SAACP,GAAU,MAAK,CAAC,MAAO,QAAS,OAAOQ,cAAQR,EAAAA,EAAK,KAEtES,EAAM,EASV,QAHUA,EAAMJ,EAAEK,MAAQJ,EAAEI,UAClBD,EAAMH,EAAEK,IAAMN,EAAEM,OAChBF,EAAMF,EAAaF,EAAEjE,SAAWmE,EAAaD,EAAElE,UAClDqE,KAIT,IAAIG,EAAS,EAEPC,EAAO,SAACC,GACZ,IAAIC,EAAQ,GACN7G,EAAM4G,EAAKE,QA2BjB,OAvBAD,GAAStH,EAAKwH,UAAUL,EAAQ1G,EAAIwG,OACpCE,EAAS1G,EAAIwG,MAGbK,GAASd,EAAiB/F,GAGtB4G,EAAKI,MAAK,SAAAlB,GAAC,OAAIA,EAAEU,MAAQxG,EAAIyG,OAC/BI,GAASF,EAAKC,IAGdC,GAAStH,EAAKwH,UAAU/G,EAAIwG,MAAOxG,EAAIyG,KACvCC,EAAS1G,EAAIyG,KAIfI,GAASd,EAAiB/F,GAAK,GAGX,IAAhB4G,EAAKnD,SACPoD,GAASF,EAAKC,IAGTC,GAIHD,EAAOxG,KAAKC,MAAMD,KAAKI,UAAUmF,IAGvC,OAKyB,SAACjC,GAAW,OAAKA,EAAI1C,QAAQ,KAAM,KALrDiG,CASyB,SAACvD,GAAW,OAC5CA,EAAI1C,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAVjDkG,UAcF3H,GACxB,IAAI4H,EAAa,CACfC,IAAK,KACLC,IAAK,OACLC,IAAK,OACLC,IAAK,MACLC,KAAM,MACNC,KAAM,OAGR,OAAOlI,EAAKmI,WAAW1G,QAAQ,eAAe,SAAU2G,GACtD,MAAO,IAAMR,EAAMQ,GAAO,OAzBiBC,CAFhCjB,EAAKC,GAAQrH,EAAKwH,UAAUL,ME6CjBmB,CAtBDrC,EAAiBzC,KAAI,SAAA6B,GAClC,IAAMkD,EAAa,CACjBtB,MAAO5B,EAAMI,MAASV,EACtBmC,IAAK7B,EAAMI,MAASJ,EAAMnB,OAAUa,GAgBtC,MAPI,oBAAqBM,IAAOkD,EAAM5F,QAAU,OAC5C,SAAU0C,IAAOkD,EAAM5F,QAAU0C,EAAMmD,MACvC,iBAAkBnD,IACpBkD,EAAM5F,QAAU,MAEhB4F,EAAW,IADK3E,EAAQ6E,qBAAuBpD,EAAMqD,KAAUrD,EAAMqD,YAAWrD,EAAMrF,KAASqF,EAAMrF,MAGhGuI,KAGuClD,EAAMM,eAAOK,EAAEV,UAAAU,EAAmBhG,MAEnDqF,EAAMM,QFrCIlE,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KEwC/FhC,0BAA+B4F,EAAMsD,WAAUpD,YAC/CH,GAAYC,EAAMM,QAAQzB,OAC1Ba,GAAWM,EAAMM,QAAQzB,UAG3BzE,YAEAsF,GAAW,EAIb,GAAIT,EAAOJ,OAAQ,CACjB,IAAM0E,EAAWtE,EAAOd,KAAI,SAAAe,GAAC,OAAI/C,EAAW+C,EAAEsE,oBAAkBzF,KAAK,SAC/D0F,EAAQxE,EAAOd,KAAI,SAAAe,GAAC,OAAIA,EAAEZ,QAAMP,KAAK,SAC3C3D,gCAAqCmJ,+BAAqCE,mBAC1ErJ,iCAAsCmJ,YAIpC/D,EAAQX,QACVW,EAAQnF,SAAQ,SAAAqJ,GAId,OAFAtJ,6BAEQsJ,EAAMP,MACZ,IAAK,QACH,IAAMQ,EAAsBxH,EAAWuH,EAAM/I,MAEvCqG,GADY5B,EAA8BQ,IAAIzC,IAAM,IAC3BV,MAAK,SAAAiE,GAAQ,OAAIA,EAAS/F,QAAU6E,EAAQX,QAAUW,EAAQ,GAAG7E,SAEhGP,GACE,gCACA,IAAIwJ,QAHiC5C,GAAgBA,EAAaX,iBAAYW,SAAAA,EAAcnC,QAAS,GAAK,GAAM,GAEhH,yDAGkD8E,YACpD,MAGF,IAAK,cACH,GAAKD,EAAMG,YAEJ,CACL,IAEMC,EAFWJ,EAAMG,YAAYhG,QAAO,SAAAkG,GAAC,OAAIA,EAAExJ,KAAKyJ,WAAWN,EAAMO,mBAAqB,WAGzFpD,MAAK,SAAClB,EAAGmB,GAAC,OAAKnB,EAAEpF,KAAK2J,cAAcpD,EAAEvG,SACtC4D,KAAI,SAAA4F,WACGI,EAAQJ,EAAExJ,KAAK6J,eAAOC,EAAAX,EAAMO,0BAANI,EAAyBxF,SAAU,GACzDtE,uCAA2CmJ,EAAMO,mBAAqB,cAAYE,YAGxF,6BAFkBG,EAAGP,EAAEQ,sBAAFD,EAAiB5J,MAAM,KAAKM,SAAS,eAC3B,aAAe,SACbT,aAElCwD,KAAK,IACR3D,GAAW,SAASwJ,OAAOF,EAAMc,iEAAgEV,sBAdjG1J,4BAAsC,GAAGqK,SAASf,EAAMc,OAAS,qCAkBvEpK,GAAQ,YAKRD,EAAK0E,QACP1E,EAAKE,SAAQ,SAAA4G,GACT,GAAI,CAAC,QAAS,OAAQ,OAAOjG,SAASiG,EAAI1G,MAA1C,CAIA,OADAH,mCAAwC6G,EAAI1G,cACrC0G,EAAI1G,MACT,IAAK,QAASH,GAAWsK,4BAAiCzD,EAAIzG,YAAc,iBAAgB,MAC5F,IAAK,OAAQJ,GAAWuK,4BAAmC1D,EAAIzG,YAAc,iBAAgB,MAC7F,IAAK,MAAOJ,GAAWwK,4BAA+B3D,EAAIzG,YAAc,iBAE1EJ,GAAQ,gBF/GwB0E,EEmHP1E,EAAKgC,QAAQ,OAAQ,IAAtDhC,EFlHA0E,EAAI1C,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,UEsH5DhC,GAFEmE,EAAQsG,wDACiDnG,EAASoG,oCAMtE1K,kBAGIsE,EAASvE,MAAQuE,EAASvE,KAAK0E,SACjCzE,GAAQF,EAAYwE,EAASvE,MAC7BC,GAAQ,UAGHA,EAIT,SAAS4E,EAAW+F,EAAWC,GAC7B,IAAM7G,EAAM,IAAIgB,IAUhB,OATA4F,EAAK1K,SAAQ,SAAA4K,GACX,IAAMvI,EAAMsI,EAAUC,GAChBC,EAAa/G,EAAIyB,IAAIlD,GACtBwI,EAGHA,EAAWnI,KAAKkI,GAFhB9G,EAAIgH,IAAIzI,EAAK,CAACuI,OAKX9G,EAIT,IAAMuG,grBACAC,waACAC,6vBChQUQ,EAAqBtI,EAAcyB,EAA8B9D,GAC/E,IAAIL,EAAO,GAELuE,EAAelE,EAAK6B,WAAaD,EAAsB5B,EAAK6B,WAC5DsC,EAAK/B,EAAoBpC,EAAK6B,WA0CpC,OAxCAlC,GAAQgD,EAAqCmB,EAAS9D,EAAM,IACxDA,EAAKkD,QACPvD,8BAAmCK,EAAKkD,gBAGtCY,EAAQC,SACVpE,+BAAoCmE,EAAQC,iBAG9CpE,wCAEA0C,EAAMzC,SAAQ,SAACsF,EAAGxC,GAChB,GAAiB,IAAbwC,EAAEd,OACJzE,kCACK,CACL,IAAMiL,EAAU1G,EAAgBC,EAAGzB,GAAK,aAAe,OAAU,GAEjE/C,sBADkCiL,OAGlC1F,EAAEtF,SAAQ,SAAA2F,GACR,IAAMsF,EAAkB,WAAWtF,EAAMsD,OACrCtD,EAAMuF,YACJvF,EAAMuF,UAAYC,EAAMC,UAAUC,QACpCJ,EAAgBvI,KAAK,sBAEnBiD,EAAMuF,UAAYC,EAAMC,UAAUE,MACpCL,EAAgBvI,KAAK,qBAEnBiD,EAAMuF,UAAYC,EAAMC,UAAUG,WACpCN,EAAgBvI,KAAK,+BAGzB3C,mBAAwBkL,EAAgBvH,KAAK,WAAU5B,EAAW6D,EAAMM,sBAE1ElG,gBAIJA,EAAOA,EAAKgC,QAAQ,OAAQ,IAC5BhC,6BCnDWyL,EAAW,CACtBC,+DACAC,wHACAC,oGACAC,iEACAC,qEACAC,+DACAC,sDACAC,mNACAC,2EACAC,oGACAC,mEACAC,4CACAC,mGACAC,yFACAC,+EACAC,mDACAC,sEACAC,oHACAC,iGACAC,yHACAC,+FACAC,2IACAC,oGACAC,+EACAC,uEACAC,8FACAC,8DACAC,kMACAC,gGACAC,iEACAC,0EACAC,wEACAC,wFACAC,sFACAC,4FACAC,4HACAC,+GACAC,2GACAC,yEACAC,6EACAC,8EACAC,kHACAC,kGACAC,0FACAC,wFACAC,yEACAC,qFACAC,mGACAC,0CACAC,oHACAC,8IACAC,kHACAC,wGACAC,uGACAC,yEACAC,gEACAC,uFACAC,sGACAC,4JACAC,gDACAC,yFACAC,wDACAC,mDACAC,gGACAC,iFACAC,gEACAC,gGACAC,qGACAC,wGACAC,sGACAC,6EACAC,0FACAC,6EACAC,8GACAC,oIACAC,yFACAC,mFACAC,4EACAC,yEACAC,6DACAC,yDACAC,4KACAC,qFACAC,iEACAC,kFACAC,2GACAC,+DACAC,sFACAC,oHACAC,sGACAC,4CACAC,iDACAC,4DACAC,+EACAC,wFACAC,mDACAC,kEACAC,oFACAC,kDACAC,oHACAC,yHACAC,iFACAC,4GACAC,6FACAC,mHACAC,qIACAC,iKACAC,iHACAC,6FACAC,qFACAC,kFACAC,4EACAC,6FACAC,2EACAC,2FACAC,iCACAC,iHACAC,0DC7FF,SAAgBC,EAAqBtQ,EAAcyB,EAA8B9D,GAC/E,IAAIL,EAAO,GAmCX,OAjCAA,GAAQgD,EAAqCmB,EAAS9D,EAAM,CAAC,WAAY,QACrEA,EAAKkD,QACPvD,8BAAmCK,EAAKkD,gBAGtCY,EAAQC,SACVpE,+BAAoCmE,EAAQC,iBAG9CpE,wCAEA0C,EAAMzC,SAAQ,SAAAsF,GACK,IAAbA,EAAEd,OACJzE,+BAEAA,wBACAuF,EAAEtF,SAAQ,SAAA2F,GAER,GAtCe,SAACA,GACtB,QAAKA,EAAMqN,aACJrN,EAAMqN,YAAY5Q,MAAK,SAAAyC,GAAC,OAAIA,EAAEoO,OAAO7Q,MAAK,SAAA8Q,GAAC,OAAIA,EAAEC,UAAUxS,SAAS,oCAoCjEyS,CAAezN,IAhCH,SAACA,GACvB,GAAsB,MAAlBA,EAAMM,QAEV,OADaN,EAAMM,QAAQoN,MAAM,EAAG1N,EAAMM,QAAQzB,OAAS,KAC5CgH,EA6BoB8H,CAAgB3N,GAAQ,CACnD,IAAMtD,EAAMsD,EAAMM,QAAQoN,MAAM,EAAG1N,EAAMM,QAAQzB,OAAS,GAG1DzE,0BAA+B4F,EAAMsD,6FAA2F5G,uBAF9GmJ,EAAoCnJ,QAE8GP,EAAWO,kCAE/KtC,0BAA+B4F,EAAMsD,WAAUnH,EAAW6D,EAAMM,sBAGpElG,gBAIJA,EAAOA,EAAKgC,QAAQ,OAAQ,IAC5BhC,yBC7BF,IAAIwT,EAAiC,KA0HxBC,EAAY,CACvBxP,kBAAAA,EACA+G,qBAAAA,EACA3G,iBAAAA,EACA2O,qBAAAA,kCApHoC,SAAC7O,GACrC,OAAIqP,EAA0BE,QAAQC,QAAQH,GAEvCI,iBAAezP,GAAS0P,MAAK,SAAAC,GAElC,OADAN,EAAoBM,+BAkBQ,SAC9B5P,EACA6P,EACA1T,EACA2T,EACAC,EACA3P,GAEA,IAAK2P,IAAgBT,EACnB,MAAM,IAAIU,MAAM,+FAIlB,IAQIC,EAREC,EAAoBH,GAAeT,EAEnCa,EAAUlT,GACdiC,GAAIgR,EAAkBE,qBACtBnR,GAAIiR,EAAkBG,sBACnBP,GAIL,IAKEG,EAASC,EAAkBI,mBAAmBtQ,EAFrB,QAAT6P,EAAiB,MAAQA,GAGzC,MAAOzS,GAGP,IAAMmT,oDAAsDV,kFAC5D,OAAO9P,EAAkBC,EAAMmQ,EAAYhU,GAAQoU,EAIrD,OAAIV,GAAQ1T,EAAKiE,UAAYA,EACpBD,EAAiB8P,EAAMhT,KAAOkT,GAAYjQ,OAAQ2P,IAAQzP,EAAUjE,GAIzE0T,GAAQA,EAAKnK,WAAW,SAAWvJ,EAAKoL,SACnCuH,EAAqBmB,EAAQE,EAAYhU,GAI3C2K,EAAqBmJ,EAAMhT,KAAOkT,GAAYjQ,OAAQ2P,IAAQ1T,4CAM5C,SAACqU,EAAeX,EAAclT,YAAAA,IAAAA,EAA+B,IACtF,IAAIqD,EAAOwQ,EAILC,EAAW,CACfC,MAAO,OACPC,IAAK,QASP,GALIF,EAASZ,KAAOA,EAAOY,EAASZ,IAKhC,CAAC,MAAO,OAAOnT,SAASmT,KAAUlT,EAASiU,6BAHxB,gDAGsEC,KAAK7Q,GAAO,CACvG,IAAM8Q,EAAc,8BACdC,EAAY,iBAKhB/Q,EADEA,EAAKtD,SAASqU,GACT/Q,EACJ5D,MAAM2U,GACNlR,KAAI,SAAC8G,EAAMqK,GAAK,OAAe,GAATA,EAAaF,EAAYxR,OAAOqH,GAAQA,KAC9DlH,KAAKsR,GAED,CAACD,EAAaC,EAAW/Q,GAAMP,KAAK,IAM/C,OAFA9C,EAASsU,WAAa,CAAC,WAAY,MAAO,OAAQ,SAClCC,aAAWlR,EAAM6P,EAAMlT"} \ No newline at end of file diff --git a/src/css/custom.css b/src/css/custom.css index af52cfef..b130964a 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -63,10 +63,6 @@ p, h1, h2, h3, h4, a { --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); } -.shiki.github-light { - display: none; -} - .shiki[showlinenumbers] code { counter-reset: step; counter-increment: step 0; @@ -97,3 +93,7 @@ p, h1, h2, h3, h4, a { padding: 0.4rem 0.5rem; margin-left: 0.3rem; } + +pre.theme-code-block { + background-color: #272822; +} diff --git a/src/theme/Pluto.tmLanguage.json b/src/theme/Pluto.tmLanguage.json index 92ee3183..9309e1d8 100644 --- a/src/theme/Pluto.tmLanguage.json +++ b/src/theme/Pluto.tmLanguage.json @@ -4,7 +4,7 @@ "lua" ], "firstLineMatch": "\\A#!.*?\\bpluto(\\d+(\\.\\d+)?)?\\b|\\A--\\s+-\\*-\\s*pluto\\s*-\\*-|pluto_use", - "name": "Pluto", + "name": "pluto", "patterns": [ { "include": "#pluto"