mirror of
https://github.com/Funkoala14/knowledgebase_law.git
synced 2025-06-09 00:28:15 +08:00
128 lines
3.2 KiB
JavaScript
128 lines
3.2 KiB
JavaScript
'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;
|
|
}
|
|
}
|
|
);
|
|
}
|
|
);
|