From 1fc9e01598690f75c7217dedc6c86fc815f69a70 Mon Sep 17 00:00:00 2001 From: Travis Arnold Date: Thu, 12 Oct 2023 14:01:59 -0700 Subject: [PATCH] fix: add shiki to special case list (#366) Adds shiki to the special case list so grammars and themes will be traced and loaded correctly when deploying. --------- Co-authored-by: Steven --- package.json | 1 + src/utils/special-cases.ts | 6 ++ test/integration/shiki.js | 9 ++ test/unit/shiki/input.js | 9 ++ test/unit/shiki/output.js | 214 +++++++++++++++++++++++++++++++++++++ yarn.lock | 30 ++++++ 6 files changed, 269 insertions(+) create mode 100644 test/integration/shiki.js create mode 100644 test/unit/shiki/input.js create mode 100644 test/unit/shiki/output.js diff --git a/package.json b/package.json index dfe0e027..27cdcea9 100644 --- a/package.json +++ b/package.json @@ -115,6 +115,7 @@ "semver": "^7.5.2", "sequelize": "^6.29.0", "sharp": "^0.30.5", + "shiki": "^0.14.5", "socket.io": "^2.4.0", "socket.io-client": "^2.2.0", "stripe": "^7.4.0", diff --git a/src/utils/special-cases.ts b/src/utils/special-cases.ts index 620a8225..ed8cba0f 100644 --- a/src/utils/special-cases.ts +++ b/src/utils/special-cases.ts @@ -109,6 +109,12 @@ const specialCases: Record void> = { emitAsset(resolve(id.replace('index.js', 'preload.js'))); } }, + 'shiki' ({ id, emitAssetDirectory }) { + if (id.endsWith('/dist/index.js')) { + emitAssetDirectory(resolve(dirname(id), '..', 'languages')); + emitAssetDirectory(resolve(dirname(id), '..', 'themes')); + } + }, 'socket.io': async function ({ id, ast, job }) { if (id.endsWith('socket.io/lib/index.js')) { async function replaceResolvePathStatement (statement: Node) { diff --git a/test/integration/shiki.js b/test/integration/shiki.js new file mode 100644 index 00000000..e50dd981 --- /dev/null +++ b/test/integration/shiki.js @@ -0,0 +1,9 @@ +const { getHighlighter } = require('shiki') + +async function main() { + const { codeToThemedTokens } = await getHighlighter({ theme: 'nord', langs: ['javascript'] }) + const result = codeToThemedTokens('let n=1', 'javascript'); + Array.isArray(result); +} + +main(); diff --git a/test/unit/shiki/input.js b/test/unit/shiki/input.js new file mode 100644 index 00000000..e50dd981 --- /dev/null +++ b/test/unit/shiki/input.js @@ -0,0 +1,9 @@ +const { getHighlighter } = require('shiki') + +async function main() { + const { codeToThemedTokens } = await getHighlighter({ theme: 'nord', langs: ['javascript'] }) + const result = codeToThemedTokens('let n=1', 'javascript'); + Array.isArray(result); +} + +main(); diff --git a/test/unit/shiki/output.js b/test/unit/shiki/output.js new file mode 100644 index 00000000..90a1bcb6 --- /dev/null +++ b/test/unit/shiki/output.js @@ -0,0 +1,214 @@ +[ + "node_modules/shiki/dist/index.js", + "node_modules/shiki/languages/abap.tmLanguage.json", + "node_modules/shiki/languages/actionscript-3.tmLanguage.json", + "node_modules/shiki/languages/ada.tmLanguage.json", + "node_modules/shiki/languages/apache.tmLanguage.json", + "node_modules/shiki/languages/apex.tmLanguage.json", + "node_modules/shiki/languages/apl.tmLanguage.json", + "node_modules/shiki/languages/applescript.tmLanguage.json", + "node_modules/shiki/languages/ara.tmLanguage.json", + "node_modules/shiki/languages/asm.tmLanguage.json", + "node_modules/shiki/languages/astro.tmLanguage.json", + "node_modules/shiki/languages/awk.tmLanguage.json", + "node_modules/shiki/languages/ballerina.tmLanguage.json", + "node_modules/shiki/languages/bat.tmLanguage.json", + "node_modules/shiki/languages/beancount.tmLanguage.json", + "node_modules/shiki/languages/berry.tmLanguage.json", + "node_modules/shiki/languages/bibtex.tmLanguage.json", + "node_modules/shiki/languages/bicep.tmLanguage.json", + "node_modules/shiki/languages/blade.tmLanguage.json", + "node_modules/shiki/languages/c.tmLanguage.json", + "node_modules/shiki/languages/cadence.tmLanguage.json", + "node_modules/shiki/languages/clarity.tmLanguage.json", + "node_modules/shiki/languages/clojure.tmLanguage.json", + "node_modules/shiki/languages/cmake.tmLanguage.json", + "node_modules/shiki/languages/cobol.tmLanguage.json", + "node_modules/shiki/languages/codeql.tmLanguage.json", + "node_modules/shiki/languages/coffee.tmLanguage.json", + "node_modules/shiki/languages/cpp-macro.tmLanguage.json", + "node_modules/shiki/languages/cpp.tmLanguage.json", + "node_modules/shiki/languages/crystal.tmLanguage.json", + "node_modules/shiki/languages/csharp.tmLanguage.json", + "node_modules/shiki/languages/css.tmLanguage.json", + "node_modules/shiki/languages/cue.tmLanguage.json", + "node_modules/shiki/languages/cypher.tmLanguage.json", + "node_modules/shiki/languages/d.tmLanguage.json", + "node_modules/shiki/languages/dart.tmLanguage.json", + "node_modules/shiki/languages/dax.tmLanguage.json", + "node_modules/shiki/languages/diff.tmLanguage.json", + "node_modules/shiki/languages/docker.tmLanguage.json", + "node_modules/shiki/languages/dream-maker.tmLanguage.json", + "node_modules/shiki/languages/elixir.tmLanguage.json", + "node_modules/shiki/languages/elm.tmLanguage.json", + "node_modules/shiki/languages/erb.tmLanguage.json", + "node_modules/shiki/languages/erlang.tmLanguage.json", + "node_modules/shiki/languages/fish.tmLanguage.json", + "node_modules/shiki/languages/fsharp.tmLanguage.json", + "node_modules/shiki/languages/gdresource.tmLanguage.json", + "node_modules/shiki/languages/gdscript.tmLanguage.json", + "node_modules/shiki/languages/gdshader.tmLanguage.json", + "node_modules/shiki/languages/gherkin.tmLanguage.json", + "node_modules/shiki/languages/git-commit.tmLanguage.json", + "node_modules/shiki/languages/git-rebase.tmLanguage.json", + "node_modules/shiki/languages/glimmer-js.tmLanguage.json", + "node_modules/shiki/languages/glimmer-ts.tmLanguage.json", + "node_modules/shiki/languages/glsl.tmLanguage.json", + "node_modules/shiki/languages/gnuplot.tmLanguage.json", + "node_modules/shiki/languages/go.tmLanguage.json", + "node_modules/shiki/languages/graphql.tmLanguage.json", + "node_modules/shiki/languages/groovy.tmLanguage.json", + "node_modules/shiki/languages/hack.tmLanguage.json", + "node_modules/shiki/languages/haml.tmLanguage.json", + "node_modules/shiki/languages/handlebars.tmLanguage.json", + "node_modules/shiki/languages/haskell.tmLanguage.json", + "node_modules/shiki/languages/hcl.tmLanguage.json", + "node_modules/shiki/languages/hjson.tmLanguage.json", + "node_modules/shiki/languages/hlsl.tmLanguage.json", + "node_modules/shiki/languages/html.tmLanguage.json", + "node_modules/shiki/languages/http.tmLanguage.json", + "node_modules/shiki/languages/imba.tmLanguage.json", + "node_modules/shiki/languages/ini.tmLanguage.json", + "node_modules/shiki/languages/java.tmLanguage.json", + "node_modules/shiki/languages/javascript.tmLanguage.json", + "node_modules/shiki/languages/jinja-html.tmLanguage.json", + "node_modules/shiki/languages/jinja.tmLanguage.json", + "node_modules/shiki/languages/jison.tmLanguage.json", + "node_modules/shiki/languages/json.tmLanguage.json", + "node_modules/shiki/languages/json5.tmLanguage.json", + "node_modules/shiki/languages/jsonc.tmLanguage.json", + "node_modules/shiki/languages/jsonl.tmLanguage.json", + "node_modules/shiki/languages/jsonnet.tmLanguage.json", + "node_modules/shiki/languages/jssm.tmLanguage.json", + "node_modules/shiki/languages/jsx.tmLanguage.json", + "node_modules/shiki/languages/julia.tmLanguage.json", + "node_modules/shiki/languages/kotlin.tmLanguage.json", + "node_modules/shiki/languages/kusto.tmLanguage.json", + "node_modules/shiki/languages/latex.tmLanguage.json", + "node_modules/shiki/languages/less.tmLanguage.json", + "node_modules/shiki/languages/liquid.tmLanguage.json", + "node_modules/shiki/languages/lisp.tmLanguage.json", + "node_modules/shiki/languages/logo.tmLanguage.json", + "node_modules/shiki/languages/lua.tmLanguage.json", + "node_modules/shiki/languages/make.tmLanguage.json", + "node_modules/shiki/languages/markdown.tmLanguage.json", + "node_modules/shiki/languages/marko.tmLanguage.json", + "node_modules/shiki/languages/matlab.tmLanguage.json", + "node_modules/shiki/languages/mdc.tmLanguage.json", + "node_modules/shiki/languages/mdx.tmLanguage.json", + "node_modules/shiki/languages/mermaid.tmLanguage.json", + "node_modules/shiki/languages/mojo.tmLanguage.json", + "node_modules/shiki/languages/narrat.tmLanguage.json", + "node_modules/shiki/languages/nextflow.tmLanguage.json", + "node_modules/shiki/languages/nginx.tmLanguage.json", + "node_modules/shiki/languages/nim.tmLanguage.json", + "node_modules/shiki/languages/nix.tmLanguage.json", + "node_modules/shiki/languages/objective-c.tmLanguage.json", + "node_modules/shiki/languages/objective-cpp.tmLanguage.json", + "node_modules/shiki/languages/ocaml.tmLanguage.json", + "node_modules/shiki/languages/pascal.tmLanguage.json", + "node_modules/shiki/languages/perl.tmLanguage.json", + "node_modules/shiki/languages/php-html.tmLanguage.json", + "node_modules/shiki/languages/php.tmLanguage.json", + "node_modules/shiki/languages/plsql.tmLanguage.json", + "node_modules/shiki/languages/postcss.tmLanguage.json", + "node_modules/shiki/languages/powerquery.tmLanguage.json", + "node_modules/shiki/languages/powershell.tmLanguage.json", + "node_modules/shiki/languages/prisma.tmLanguage.json", + "node_modules/shiki/languages/prolog.tmLanguage.json", + "node_modules/shiki/languages/proto.tmLanguage.json", + "node_modules/shiki/languages/pug.tmLanguage.json", + "node_modules/shiki/languages/puppet.tmLanguage.json", + "node_modules/shiki/languages/purescript.tmLanguage.json", + "node_modules/shiki/languages/python.tmLanguage.json", + "node_modules/shiki/languages/r.tmLanguage.json", + "node_modules/shiki/languages/raku.tmLanguage.json", + "node_modules/shiki/languages/razor.tmLanguage.json", + "node_modules/shiki/languages/reg.tmLanguage.json", + "node_modules/shiki/languages/rel.tmLanguage.json", + "node_modules/shiki/languages/riscv.tmLanguage.json", + "node_modules/shiki/languages/rst.tmLanguage.json", + "node_modules/shiki/languages/ruby.tmLanguage.json", + "node_modules/shiki/languages/rust.tmLanguage.json", + "node_modules/shiki/languages/sas.tmLanguage.json", + "node_modules/shiki/languages/sass.tmLanguage.json", + "node_modules/shiki/languages/scala.tmLanguage.json", + "node_modules/shiki/languages/scheme.tmLanguage.json", + "node_modules/shiki/languages/scss.tmLanguage.json", + "node_modules/shiki/languages/shaderlab.tmLanguage.json", + "node_modules/shiki/languages/shellscript.tmLanguage.json", + "node_modules/shiki/languages/shellsession.tmLanguage.json", + "node_modules/shiki/languages/smalltalk.tmLanguage.json", + "node_modules/shiki/languages/solidity.tmLanguage.json", + "node_modules/shiki/languages/sparql.tmLanguage.json", + "node_modules/shiki/languages/splunk.tmLanguage.json", + "node_modules/shiki/languages/sql.tmLanguage.json", + "node_modules/shiki/languages/ssh-config.tmLanguage.json", + "node_modules/shiki/languages/stata.tmLanguage.json", + "node_modules/shiki/languages/stylus.tmLanguage.json", + "node_modules/shiki/languages/svelte.tmLanguage.json", + "node_modules/shiki/languages/swift.tmLanguage.json", + "node_modules/shiki/languages/system-verilog.tmLanguage.json", + "node_modules/shiki/languages/tasl.tmLanguage.json", + "node_modules/shiki/languages/tcl.tmLanguage.json", + "node_modules/shiki/languages/tex.tmLanguage.json", + "node_modules/shiki/languages/toml.tmLanguage.json", + "node_modules/shiki/languages/tsx.tmLanguage.json", + "node_modules/shiki/languages/turtle.tmLanguage.json", + "node_modules/shiki/languages/twig.tmLanguage.json", + "node_modules/shiki/languages/typescript.tmLanguage.json", + "node_modules/shiki/languages/v.tmLanguage.json", + "node_modules/shiki/languages/vb.tmLanguage.json", + "node_modules/shiki/languages/verilog.tmLanguage.json", + "node_modules/shiki/languages/vhdl.tmLanguage.json", + "node_modules/shiki/languages/viml.tmLanguage.json", + "node_modules/shiki/languages/vue-html.tmLanguage.json", + "node_modules/shiki/languages/vue.tmLanguage.json", + "node_modules/shiki/languages/vyper.tmLanguage.json", + "node_modules/shiki/languages/wasm.tmLanguage.json", + "node_modules/shiki/languages/wenyan.tmLanguage.json", + "node_modules/shiki/languages/wgsl.tmLanguage.json", + "node_modules/shiki/languages/wolfram.tmLanguage.json", + "node_modules/shiki/languages/xml.tmLanguage.json", + "node_modules/shiki/languages/xsl.tmLanguage.json", + "node_modules/shiki/languages/yaml.tmLanguage.json", + "node_modules/shiki/languages/zenscript.tmLanguage.json", + "node_modules/shiki/languages/zig.tmLanguage.json", + "node_modules/shiki/package.json", + "node_modules/shiki/themes/css-variables.json", + "node_modules/shiki/themes/dark-plus.json", + "node_modules/shiki/themes/dracula-soft.json", + "node_modules/shiki/themes/dracula.json", + "node_modules/shiki/themes/github-dark-dimmed.json", + "node_modules/shiki/themes/github-dark.json", + "node_modules/shiki/themes/github-light.json", + "node_modules/shiki/themes/hc_light.json", + "node_modules/shiki/themes/light-plus.json", + "node_modules/shiki/themes/material-theme-darker.json", + "node_modules/shiki/themes/material-theme-lighter.json", + "node_modules/shiki/themes/material-theme-ocean.json", + "node_modules/shiki/themes/material-theme-palenight.json", + "node_modules/shiki/themes/material-theme.json", + "node_modules/shiki/themes/min-dark.json", + "node_modules/shiki/themes/min-light.json", + "node_modules/shiki/themes/monokai.json", + "node_modules/shiki/themes/nord.json", + "node_modules/shiki/themes/one-dark-pro.json", + "node_modules/shiki/themes/poimandres.json", + "node_modules/shiki/themes/rose-pine-dawn.json", + "node_modules/shiki/themes/rose-pine-moon.json", + "node_modules/shiki/themes/rose-pine.json", + "node_modules/shiki/themes/slack-dark.json", + "node_modules/shiki/themes/slack-ochin.json", + "node_modules/shiki/themes/solarized-dark.json", + "node_modules/shiki/themes/solarized-light.json", + "node_modules/shiki/themes/vitesse-dark.json", + "node_modules/shiki/themes/vitesse-light.json", + "node_modules/vscode-oniguruma/package.json", + "node_modules/vscode-oniguruma/release/main.js", + "node_modules/vscode-oniguruma/release/onig.wasm", + "node_modules/vscode-textmate/package.json", + "node_modules/vscode-textmate/release/main.js", + "package.json", + "test/unit/shiki/input.js" +] \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 5196db84..dfd6307c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2682,6 +2682,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-sequence-parser@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" + integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -9409,6 +9414,11 @@ json5@^2.1.2: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -14473,6 +14483,16 @@ shell-quote@^1.4.2, shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== +shiki@^0.14.5: + version "0.14.5" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.5.tgz#375dd214e57eccb04f0daf35a32aa615861deb93" + integrity sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw== + dependencies: + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" + shortid@^2.2.6: version "2.2.16" resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.16.tgz#b742b8f0cb96406fd391c76bfc18a67a57fe5608" @@ -16555,6 +16575,16 @@ void-elements@^3.1.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + vue-server-renderer@^2.6.10: version "2.6.12" resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.12.tgz#a8cb9c49439ef205293cb41c35d0d2b0541653a5"