source: node_modules/react-syntax-highlighter/scripts/build-languages-refractor.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-prism` task\n//\n\n';
10
11function makeImportName(name) {
12 if (name === '1c') {
13 return 'oneC';
14 }
15 if (name === 'false') {
16 return 'falselang';
17 }
18 return camel(name);
19}
20
21function createLanguagePassthroughModule(file) {
22 const importName = makeImportName(file.split('.js')[0]);
23 const lines = [
24 `import ${importName} from "refractor/lang/${file}";`,
25 `export default ${importName}`,
26 ''
27 ];
28
29 fs.writeFile(
30 path.join(__dirname, `../src/languages/prism/${file}`),
31 lines.join(';\n'),
32 err => {
33 if (err) {
34 process.exit(1);
35 }
36 }
37 );
38}
39
40function createAsyncLanguageLoaderLine(file) {
41 const fileWithoutJS = file.split('.js')[0];
42 const importName = makeImportName(fileWithoutJS);
43
44 return ` ${importName}: createLanguageAsyncLoader("${importName}", () => import(/* webpackChunkName: "react-syntax-highlighter_languages_refractor_${importName}" */ "refractor/lang/${file}")),`;
45}
46
47function createSupportedLanguagesArray(files) {
48 let lines = [autogenMessage, `export default [`];
49 lines = lines.concat(files.map(file => `\n '${file.split('.js')[0]}',`));
50 lines.push(`\n];\n`);
51
52 fs.writeFile(
53 path.join(__dirname, `../src/languages/prism/supported-languages.js`),
54 lines.join(''),
55 err => {
56 if (err) {
57 throw err;
58 }
59 }
60 );
61}
62
63function createAsyncLanguageLoadersIndex(files) {
64 let lines = [
65 `import createLanguageAsyncLoader from "./create-language-async-loader"`,
66 `export default {`
67 ];
68
69 lines = lines.concat(files.map(file => createAsyncLanguageLoaderLine(file)));
70 lines.push(`}`);
71
72 fs.writeFile(
73 path.join(__dirname, `../src/async-languages/prism.js`),
74 lines.join('\n'),
75 err => {
76 if (err) {
77 throw err;
78 }
79 }
80 );
81}
82
83fs.readdir(
84 path.join(__dirname, '../node_modules/refractor/lang'),
85 (err, files) => {
86 console.log(files);
87 if (err) {
88 process.exit(1);
89 }
90 files.forEach(createLanguagePassthroughModule);
91
92 createAsyncLanguageLoadersIndex(files);
93 createSupportedLanguagesArray(files);
94
95 const availableLanguageNames = files.map(file => file.split('.js')[0]);
96 console.log(availableLanguageNames.join('\n'));
97 const languagesLi = availableLanguageNames.map(
98 name =>
99 `\n* ${makeImportName(name)}${
100 makeImportName(name) !== name ? ` (${name})` : ''
101 }`
102 );
103 const languageMD = `## Available \`language\` imports ${languagesLi.join(
104 ''
105 )}`;
106 fs.writeFile(
107 path.join(__dirname, '../AVAILABLE_LANGUAGES_PRISM.MD'),
108 languageMD,
109 err => {
110 if (err) {
111 process.exit(1);
112 }
113 }
114 );
115
116 const defaultExports = availableLanguageNames.map(
117 name =>
118 `export { default as ${makeImportName(name)} } from './${name}';\n`
119 );
120 fs.writeFile(
121 path.join(__dirname, '../src/languages/prism/index.js'),
122 defaultExports.join(''),
123 err => {
124 if (err) {
125 process.exit(1);
126 }
127 }
128 );
129 }
130);
Note: See TracBrowser for help on using the repository browser.