source: node_modules/react-syntax-highlighter/scripts/build-languages-highlightjs.js@ e48199a

main
Last change on this file since e48199a was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 3.2 KB
RevLine 
[d24f17c]1'use strict';
2/*
3 * Build javascript passthrough modules for highlight.js languages
4 */
5const path = require('path');
6const fs = require('fs');
7const camel = require('to-camel-case');
8const autogenMessage =
9 '//\n// This file has been auto-generated by the `npm run build-languages-hljs` task\n//\n\n';
10
11function makeImportName(name) {
12 if (name === '1c') {
13 return 'oneC';
14 }
15 return camel(name);
16}
17
18function createAsyncLanguageLoaderLine(file) {
19 const fileWithoutJS = file.split('.js')[0];
20 const importName = makeImportName(fileWithoutJS);
21
22 return ` ${importName}: createLanguageAsyncLoader("${importName}", () => import(/* webpackChunkName: "react-syntax-highlighter_languages_highlight_${importName}" */ "highlight.js/lib/languages/${fileWithoutJS}")),`;
23}
24
25function createAsyncLanguageLoadersIndex(files) {
26 let lines = [
27 `import createLanguageAsyncLoader from "./create-language-async-loader"`,
28 `export default {`
29 ];
30
31 lines = lines.concat(files.map(file => createAsyncLanguageLoaderLine(file)));
32 lines.push(`}`);
33
34 fs.writeFile(
35 path.join(__dirname, `../src/async-languages/hljs.js`),
36 lines.join('\n'),
37 err => {
38 if (err) {
39 throw err;
40 }
41 }
42 );
43}
44
45function createSupportedLanguagesArray(files) {
46 let lines = [autogenMessage, `export default [`];
47 lines = lines.concat(files.map(file => `\n '${file.split('.js')[0]}',`));
48 lines.push(`\n];\n`);
49
50 fs.writeFile(
51 path.join(__dirname, `../src/languages/hljs/supported-languages.js`),
52 lines.join(''),
53 err => {
54 if (err) {
55 throw err;
56 }
57 }
58 );
59}
60
61function createLanguagePassthroughModule(file) {
62 const fileWithoutJS = file.split('.js')[0];
63 const importName = makeImportName(fileWithoutJS);
64 const lines = [
65 `import ${importName} from "highlight.js/lib/languages/${fileWithoutJS}"`,
66 `export default ${importName}`,
67 ''
68 ];
69
70 fs.writeFile(
71 path.join(__dirname, `../src/languages/hljs/${file}`),
72 lines.join(';\n'),
73 err => {
74 if (err) {
75 throw err;
76 }
77 }
78 );
79}
80
81fs.readdir(
82 path.join(__dirname, '../node_modules/highlight.js/lib/languages'),
83 (err, files) => {
84 if (err) {
85 throw err;
86 }
87
88 files.forEach(createLanguagePassthroughModule);
89
90 createAsyncLanguageLoadersIndex(files);
91 createSupportedLanguagesArray(files);
92
93 const availableLanguageNames = files.map(file => file.split('.js')[0]);
94 const languagesLi = availableLanguageNames.map(
95 name =>
96 `\n* ${makeImportName(name)}${
97 makeImportName(name) !== name ? ` (${name})` : ''
98 }`
99 );
100 const languageMD = `## Available \`language\` imports ${languagesLi.join(
101 ''
102 )}`;
103 fs.writeFile(
104 path.join(__dirname, '../AVAILABLE_LANGUAGES_HLJS.MD'),
105 languageMD,
106 err => {
107 if (err) {
108 throw err;
109 }
110 }
111 );
112
113 const defaultExports = availableLanguageNames.map(
114 name =>
115 `export { default as ${makeImportName(name)} } from './${name}';\n`
116 );
117 fs.writeFile(
118 path.join(__dirname, '../src/languages/hljs/index.js'),
119 defaultExports.join(''),
120 err => {
121 if (err) {
122 throw err;
123 }
124 }
125 );
126 }
127);
Note: See TracBrowser for help on using the repository browser.