-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathbuild-languages.js
57 lines (47 loc) · 1.8 KB
/
build-languages.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import hljs from "highlight.js";
import { writeTo } from "./utils/write-to.js";
import { toCamelCase } from "./utils/to-pascal-case.js";
import { createMarkdown } from "./utils/create-markdown.js";
import { mkdir } from "./utils/fs.js";
export async function buildLanguages() {
mkdir("src/languages");
let languages = hljs.listLanguages();
let markdown = createMarkdown("Languages", languages.length);
let types = `interface HljsLanguage {
register: (hljs: any) => Record<string, any>;
}\n\n`;
let base = "";
/** @type {import("./build-styles").ModuleNames} */
let lang = [];
languages.forEach(async (name) => {
let moduleName = name;
if (/^[0-9]/.test(name)) moduleName = `_${name}`;
if (/-/.test(name)) moduleName = toCamelCase(name);
types += `export const ${moduleName}: HljsLanguage & { name: "${name}"; };\n\n`;
base += `export { default as ${moduleName} } from './${name}';\n`;
lang.push({ name, moduleName });
markdown += `## ${name} (\`${moduleName}\`)
\`\`\`html
<script>
// direct import (recommended)
import ${moduleName} from "svelte-highlight/src/languages/${name}";
// base import
import { ${moduleName} } from "svelte-highlight/src/languages";
<\/script>
\`\`\`\n\n`;
await writeTo(
`src/languages/${moduleName}.d.ts`,
`export { ${moduleName} } from "./";\nexport { ${moduleName} as default } from "./";\n`
);
await writeTo(
`src/languages/${name}.js`,
`import register from "highlight.js/lib/languages/${name}";\n
export const ${moduleName} = { name: "${name}", register };
export default ${moduleName};\n`
);
});
await writeTo("src/languages/index.js", base);
await writeTo("src/languages/index.d.ts", types);
await writeTo("SUPPORTED_LANGUAGES.md", markdown);
await writeTo("demo/lib/languages.json", lang);
}