mirror of
https://github.com/Funkoala14/knowledgebase_law.git
synced 2025-06-09 00:28:15 +08:00
131 lines
3.2 KiB
JavaScript
131 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-prism` task\n//\n\n';
|
||
|
|
||
|
function makeImportName(name) {
|
||
|
if (name === '1c') {
|
||
|
return 'oneC';
|
||
|
}
|
||
|
if (name === 'false') {
|
||
|
return 'falselang';
|
||
|
}
|
||
|
return camel(name);
|
||
|
}
|
||
|
|
||
|
function createLanguagePassthroughModule(file) {
|
||
|
const importName = makeImportName(file.split('.js')[0]);
|
||
|
const lines = [
|
||
|
`import ${importName} from "refractor/lang/${file}";`,
|
||
|
`export default ${importName}`,
|
||
|
''
|
||
|
];
|
||
|
|
||
|
fs.writeFile(
|
||
|
path.join(__dirname, `../src/languages/prism/${file}`),
|
||
|
lines.join(';\n'),
|
||
|
err => {
|
||
|
if (err) {
|
||
|
process.exit(1);
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function createAsyncLanguageLoaderLine(file) {
|
||
|
const fileWithoutJS = file.split('.js')[0];
|
||
|
const importName = makeImportName(fileWithoutJS);
|
||
|
|
||
|
return ` ${importName}: createLanguageAsyncLoader("${importName}", () => import(/* webpackChunkName: "react-syntax-highlighter_languages_refractor_${importName}" */ "refractor/lang/${file}")),`;
|
||
|
}
|
||
|
|
||
|
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/prism/supported-languages.js`),
|
||
|
lines.join(''),
|
||
|
err => {
|
||
|
if (err) {
|
||
|
throw err;
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
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/prism.js`),
|
||
|
lines.join('\n'),
|
||
|
err => {
|
||
|
if (err) {
|
||
|
throw err;
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
fs.readdir(
|
||
|
path.join(__dirname, '../node_modules/refractor/lang'),
|
||
|
(err, files) => {
|
||
|
console.log(files);
|
||
|
if (err) {
|
||
|
process.exit(1);
|
||
|
}
|
||
|
files.forEach(createLanguagePassthroughModule);
|
||
|
|
||
|
createAsyncLanguageLoadersIndex(files);
|
||
|
createSupportedLanguagesArray(files);
|
||
|
|
||
|
const availableLanguageNames = files.map(file => file.split('.js')[0]);
|
||
|
console.log(availableLanguageNames.join('\n'));
|
||
|
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_PRISM.MD'),
|
||
|
languageMD,
|
||
|
err => {
|
||
|
if (err) {
|
||
|
process.exit(1);
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
|
||
|
const defaultExports = availableLanguageNames.map(
|
||
|
name =>
|
||
|
`export { default as ${makeImportName(name)} } from './${name}';\n`
|
||
|
);
|
||
|
fs.writeFile(
|
||
|
path.join(__dirname, '../src/languages/prism/index.js'),
|
||
|
defaultExports.join(''),
|
||
|
err => {
|
||
|
if (err) {
|
||
|
process.exit(1);
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
);
|