fix(code_highlight): make Prisma language working properly@@ -1,10 +1,10 @@
{
- "_generatedAtUnix": 1665173644819,
+ "_generatedAtUnix": 1665177333861,
"_hashAlgorithm": "sha1",
"_version": 2,
"islands": {
"Code": {
- "hash": "33a6daff70fa161a3031d82e22db9206e08006bf",
+ "hash": "e5b854e7eae3fdc06195e320f09da33a5ff7a42b",
"pathSource": "./app/islands/Code.tsx",
"pathBundle": "./public/.islands/Code.bundle.js",
"pathSourceMap": "./public/.islands/Code.bundle.js.map"
@@ -8,6 +8,22 @@ import type { AppThemeScheme } from "../../types";
import { AppRoute, AppRoutesParams } from "../../routes";
import { escapeHtmlCode } from "../../utils/shared/escapeHtmlCode";
+Prism.languages.prisma = Prism.languages.extend("javascript", {
+ keyword: /\b(?:datasource|enum|generator|model|type)\b/,
+});
+
+Prism.languages.insertBefore("prisma", "function", {
+ annotation: {
+ pattern: /(^|[^.])@+\w+/,
+ lookbehind: true,
+ alias: "punctuation",
+ },
+});
+
+Prism.languages.insertBefore("prisma", "punctuation", {
+ "type-args": /\b(?:references|fields):/,
+});
+
const syntaxHighlightThemes: Record<AppThemeScheme, string> = {
light: `code[class*="language-"],pre[class*="language-"]{color:#000;background:0 0;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;padding-left:3.5em;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*="language-"]::-moz-selection,code[class*="language-"]::-moz-selection,pre[class*="language-"] ::-moz-selection,pre[class*="language-"]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*="language-"]::selection,code[class*="language-"]::selection,pre[class*="language-"] ::selection,pre[class*="language-"]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*="language-"],pre[class*="language-"]{text-shadow:none}}pre[class*="language-"]{padding:1em;margin:0.5em 0;overflow-y:hidden;overflow-x:auto}:not(pre) > code[class*="language-"],pre[class*="language-"]{background:#f5f2f0}:not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:0.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0, 0%, 100%, 0.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}`,
dark: `code[class*="language-"],pre[class*="language-"]{color:#fff;background:0 0;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;padding-left:3.5em;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}@media print{code[class*="language-"],pre[class*="language-"]{text-shadow:none}}:not(pre) > code[class*="language-"],pre[class*="language-"]{background:#4c3f33}pre[class*="language-"]{padding:1em;margin:0.5em 0;overflow-y:hidden;overflow-x:auto;border:0.3em solid #7a6651;border-radius:0.5em;box-shadow:1px 1px 0.5em #000 inset}:not(pre) > code[class*="language-"]{padding:0.15em 0.2em 0.05em;border-radius:0.3em;border:0.13em solid #7a6651;box-shadow:1px 1px 0.3em -0.1em #000 inset;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#997f66}.token.punctuation{opacity:0.7}.token.namespace{opacity:0.7}.token.boolean,.token.constant,.token.number,.token.property,.token.symbol,.token.tag{color:#d1939e}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#bce051}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f4b73d}.token.atrule,.token.attr-value,.token.keyword{color:#d1939e}.token.important,.token.regex{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.deleted{color:red}`,
@@ -18,6 +18,24 @@ interface CodeProps {
[x: string]: unknown;
}
+if (typeof window === "undefined") {
+ Prism.languages.prisma = Prism.languages.extend("javascript", {
+ keyword: /\b(?:datasource|enum|generator|model|type)\b/,
+ });
+
+ Prism.languages.insertBefore("prisma", "function", {
+ annotation: {
+ pattern: /(^|[^.])@+\w+/,
+ lookbehind: true,
+ alias: "punctuation",
+ },
+ });
+
+ Prism.languages.insertBefore("prisma", "punctuation", {
+ "type-args": /\b(?:references|fields):/,
+ });
+}
+
const Code: ReactIsland<CodeProps & WithThemeSchemeProp> = ({
code,
language,
@@ -39,17 +39,22 @@ const makeGetLinguistFileInfos: ServiceMethodFactory<
throw new Error(`Invalid language: not in languages map.`);
}
+ const langFromTmScope = languageInfos.tmScope.replace(/^source./i, "");
const languageResults: LinguistFileInfos = {
color: languageInfos.color || "gray",
extensions: languageInfos.extensions || [],
languageDisplayName: language,
- language: languageInfos.aceMode,
+ language: langFromTmScope || languageInfos.aceMode,
languageId: languageInfos.languageId,
mimeType:
- languageInfos.codemirrorMimeType || `text/${languageInfos.aceMode}`,
+ languageInfos.codemirrorMimeType ||
+ `text/${langFromTmScope || languageInfos.aceMode}`,
type: languageInfos.type,
};
+ console.log("path:", path);
+ console.log("languageResults:", languageResults);
+
return Promise.resolve(languageResults);
};
};
@@ -1,8 +1,16 @@
diff --git a/node_modules/language-detect/vendor/extensions.json b/node_modules/language-detect/vendor/extensions.json
-index 903ba4e..ac2dd82 100644
+index 903ba4e..d70f21b 100644
--- a/node_modules/language-detect/vendor/extensions.json
+++ b/node_modules/language-detect/vendor/extensions.json
-@@ -696,7 +696,8 @@
+@@ -555,6 +555,7 @@
+ ".qml": "QML",
+ ".qbs": "QML",
+ ".pri": "QMake",
++ ".prisma": "Prisma",
+ ".r": "Rebol",
+ ".rd": "R",
+ ".rsx": "R",
+@@ -696,7 +697,8 @@
".tu": "Turing",
".ttl": "Turtle",
".twig": "Twig",
@@ -13,7 +21,7 @@ index 903ba4e..ac2dd82 100644
".anim": "Unity3D Asset",
".asset": "Unity3D Asset",
diff --git a/node_modules/language-detect/vendor/filenames.json b/node_modules/language-detect/vendor/filenames.json
-index 18b7307..8000059 100644
+index 18b7307..eec6f90 100644
--- a/node_modules/language-detect/vendor/filenames.json
+++ b/node_modules/language-detect/vendor/filenames.json
@@ -1,4 +1,5 @@
@@ -0,0 +1,13 @@
+diff --git a/node_modules/language-map/languages.json b/node_modules/language-map/languages.json
+index ee70d36..94457d8 100644
+--- a/node_modules/language-map/languages.json
++++ b/node_modules/language-map/languages.json
+@@ -5565,7 +5565,7 @@
+ ".prisma"
+ ],
+ "tmScope": "source.prisma",
+- "aceMode": "text",
++ "aceMode": "prisma",
+ "languageId": 499933428
+ },
+ "Processing": {
@@ -0,0 +1,17 @@
+(function (Prism) {
+ Prism.languages.prisma = Prism.languages.extend("javascript", {
+ keyword: /\b(?:datasource|enum|generator|model|type)\b/,
+ });
+
+ Prism.languages.insertBefore("prisma", "function", {
+ annotation: {
+ pattern: /(^|[^.])@+\w+/,
+ lookbehind: true,
+ alias: "punctuation",
+ },
+ });
+
+ Prism.languages.insertBefore("prisma", "punctuation", {
+ "type-args": /\b(?:references|fields):/,
+ });
+});
@@ -0,0 +1,17 @@
+(function (Prism) {
+ Prism.languages.prisma = Prism.languages.extend("javascript", {
+ keyword: /\b(?:datasource|enum|generator|model|type)\b/,
+ });
+
+ Prism.languages.insertBefore("prisma", "function", {
+ annotation: {
+ pattern: /(^|[^.])@+\w+/,
+ lookbehind: true,
+ alias: "punctuation",
+ },
+ });
+
+ Prism.languages.insertBefore("prisma", "punctuation", {
+ "type-args": /\b(?:references|fields):/,
+ });
+});