knowledgebase_law/node_modules/react-syntax-highlighter/scripts/build-languages-highlightjs.js

128 lines
3.2 KiB
JavaScript
Raw Normal View History

2025-04-11 23:47:09 +08:00
'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 createAsyncLanguageLoaderLine(file) {
const fileWithoutJS = file.split('.js')[0];
const importName = makeImportName(fileWithoutJS);
return ` ${importName}: createLanguageAsyncLoader("${importName}", () => import(/* webpackChunkName: "react-syntax-highlighter_languages_highlight_${importName}" */ "highlight.js/lib/languages/${fileWithoutJS}")),`;
}
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 '${file.split('.js')[0]}',`));
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 fileWithoutJS = file.split('.js')[0];
const importName = makeImportName(fileWithoutJS);
const lines = [
`import ${importName} from "highlight.js/lib/languages/${fileWithoutJS}"`,
`export default ${importName}`,
''
];
fs.writeFile(
path.join(__dirname, `../src/languages/hljs/${file}`),
lines.join(';\n'),
err => {
if (err) {
throw err;
}
}
);
}
fs.readdir(
path.join(__dirname, '../node_modules/highlight.js/lib/languages'),
(err, files) => {
if (err) {
throw err;
}
files.forEach(createLanguagePassthroughModule);
createAsyncLanguageLoadersIndex(files);
createSupportedLanguagesArray(files);
const availableLanguageNames = files.map(file => file.split('.js')[0]);
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;
}
}
);
}
);