UNPKG

react-syntax-highlighter

Version:

syntax highlighting component for react with prismjs or highlightjs ast using inline styles

136 lines (118 loc) • 3.38 kB
'use strict'; /* * Build javascript passthrough modules for highlight.js languages */ const path = require('path'); const fs = require('fs'); const camel = require('to-camel-case'); const autogenMessage = '//\n// This file has been auto-generated by the `npm run build-languages-hljs` task\n//\n\n'; function makeImportName(name) { if (name === '1c') { return 'oneC'; } return camel(name); } function languageName(file) { return path.basename(file, '.js'); } function createAsyncLanguageLoaderLine(file) { const importName = makeImportName(languageName(file)); return ` ${importName}: createLanguageAsyncLoader("${importName}", () => import(/* webpackChunkName: "react-syntax-highlighter_languages_highlight_${importName}" */ "highlight.js/lib/languages/${languageName( file )}.js")),`; } function createAsyncLanguageLoadersIndex(files) { let lines = [ `import createLanguageAsyncLoader from "./create-language-async-loader"`, `export default {` ]; lines = lines.concat(files.map(file => createAsyncLanguageLoaderLine(file))); lines.push(`}`); fs.writeFile( path.join(__dirname, `../src/async-languages/hljs.js`), lines.join('\n'), err => { if (err) { throw err; } } ); } function createSupportedLanguagesArray(files) { let lines = [autogenMessage, `export default [`]; lines = lines.concat(files.map(file => `\n '${languageName(file)}',`)); lines.push(`\n];\n`); fs.writeFile( path.join(__dirname, `../src/languages/hljs/supported-languages.js`), lines.join(''), err => { if (err) { throw err; } } ); } function createLanguagePassthroughModule(file) { const name = languageName(file); const importName = makeImportName(name); const lines = [ `import ${importName} from "highlight.js/lib/languages/${name}.js"`, `export default ${importName}`, '' ]; fs.writeFile( path.join(__dirname, `../src/languages/hljs/${name}.js`), lines.join(';\n'), err => { if (err) { throw err; } } ); } fs.readdir( path.join(__dirname, '../node_modules/highlight.js/lib/languages'), (err, entries) => { if (err) { throw err; } // Only language modules; skip type definitions, source maps, etc. const files = entries.filter(file => path.extname(file) === '.js'); files.forEach(createLanguagePassthroughModule); createAsyncLanguageLoadersIndex(files); createSupportedLanguagesArray(files); const availableLanguageNames = files.map(languageName); const languagesLi = availableLanguageNames.map( name => `\n* ${makeImportName(name)}${ makeImportName(name) !== name ? ` (${name})` : '' }` ); const languageMD = `## Available \`language\` imports ${languagesLi.join( '' )}`; fs.writeFile( path.join(__dirname, '../AVAILABLE_LANGUAGES_HLJS.MD'), languageMD, err => { if (err) { throw err; } } ); const defaultExports = availableLanguageNames.map( name => `export { default as ${makeImportName(name)} } from './${name}';\n` ); fs.writeFile( path.join(__dirname, '../src/languages/hljs/index.js'), defaultExports.join(''), err => { if (err) { throw err; } } ); } );