Prechádzať zdrojové kódy

feat: add default language registration check

Timothy Lin 2 rokov pred
rodič
commit
3413cbb65c
2 zmenil súbory, kde vykonal 26 pridanie a 4 odobranie
  1. 13 4
      src/generator.js
  2. 13 0
      test.js

+ 13 - 4
src/generator.js

@@ -16,11 +16,8 @@ import { visit } from 'unist-util-visit'
 import { toString } from 'hast-util-to-string'
 import { filter } from 'unist-util-filter'
 import rangeParser from 'parse-numeric-range'
+import { refractor } from 'refractor'
 
-/**
- * @param {Element} node
- * @return {string|null}
- */
 const getLanguage = (node) => {
   const className = node.properties.className
   //@ts-ignore
@@ -32,6 +29,17 @@ const getLanguage = (node) => {
   return null
 }
 
+/**
+ * @param {import('refractor/lib/core').Refractor} refractor
+ * @param {string} defaultLanguage
+ * @return {void}
+ */
+const checkIfLanguageIsRegistered = (refractor, defaultLanguage) => {
+  if (defaultLanguage && !refractor.registered(defaultLanguage)) {
+    throw new Error(`The default language "${defaultLanguage}" is not registered with refractor.`)
+  }
+}
+
 /**
  * Create a closure that determines if we have to highlight the given index
  *
@@ -165,6 +173,7 @@ const addNodePositionClosure = () => {
  */
 const rehypePrismGenerator = (refractor) => {
   return (options = {}) => {
+    checkIfLanguageIsRegistered(refractor, options.defaultLanguage)
     return (tree) => {
       visit(tree, 'element', visitor)
     }

+ 13 - 0
test.js

@@ -357,6 +357,19 @@ test('with options.defaultLanguage, it adds the correct language class tag', ()
   assert.is(result, expected)
 })
 
+test('throws error if options.defaultLanguage is not registered with refractor', () => {
+  assert.throws(
+    () =>
+      processHtml(
+        dedent`
+    <pre><code>x = 6</code></pre>
+  `,
+        { defaultLanguage: 'pyzqt' }
+      ),
+    /"pyzqt" is not registered with refractor/
+  )
+})
+
 test('should work with multiline code / comments', () => {
   const result = processHtml(
     dedent`