Skip to content

Commit 5ea7dbd

Browse files
authored
fix(types): generate types for svelte-highlight/languages/* and svelte-highlight/styles/* (#231)
* fix(types): generate types for languages, styles * test: assert language/style types copied to package * build: ensure "build:lib" script is run before package
1 parent bb2b074 commit 5ea7dbd

File tree

4 files changed

+26
-6
lines changed

4 files changed

+26
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"dev": "vite dev",
1313
"build": "vite build",
1414
"build:lib": "node scripts",
15-
"package": "svelte-kit package",
15+
"package": "yarn build:lib && svelte-kit package",
1616
"check": "svelte-check --workspace tests",
1717
"test": "vitest",
1818
"format": "prettier --ignore-path .gitignore --write ."

scripts/build-languages.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ export async function buildLanguages() {
99

1010
let languages = hljs.listLanguages();
1111
let markdown = createMarkdown("Languages", languages.length);
12-
let types = `interface HljsLanguage {
13-
register: (hljs: any) => Record<string, any>;
14-
}\n\n`;
1512
let base = "";
13+
let baseTs = `
14+
import type { LanguageFn } from "highlight.js";
15+
16+
interface LanguageType<TName extends string> {
17+
name?: TName;
18+
register: LanguageFn;
19+
}\n\n`;
1620

1721
/** @type {import("./build-styles").ModuleNames} */
1822
let lang = [];
@@ -23,8 +27,8 @@ export async function buildLanguages() {
2327
if (/^[0-9]/.test(name)) moduleName = `_${name}`;
2428
if (/-/.test(name)) moduleName = toCamelCase(name);
2529

26-
types += `export const ${moduleName}: HljsLanguage & { name: "${name}"; };\n\n`;
2730
base += `export { default as ${moduleName} } from './${name}';\n`;
31+
baseTs += `export const ${moduleName}: LanguageType<"${name}">;\n`;
2832
lang.push({ name, moduleName });
2933
markdown += `## ${name} (\`${moduleName}\`)
3034
@@ -43,9 +47,16 @@ export async function buildLanguages() {
4347
export const ${moduleName} = { name: "${name}", register };
4448
export default ${moduleName};\n`
4549
);
50+
51+
await writeTo(
52+
`src/languages/${name}.d.ts`,
53+
`export { ${moduleName} } from "./";
54+
export { ${moduleName} as default } from "./";\n`
55+
);
4656
});
4757

4858
await writeTo("src/languages/index.js", base);
59+
await writeTo("src/languages/index.d.ts", baseTs);
4960
await writeTo("SUPPORTED_LANGUAGES.md", markdown);
5061
await writeTo("demo/lib/languages.json", lang);
5162
}

scripts/build-styles.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ export async function buildStyles() {
4444
export default ${moduleName};\n`;
4545

4646
await writeTo(`src/styles/${name}.js`, exportee);
47+
await writeTo(
48+
`src/styles/${name}.d.ts`,
49+
`export { ${moduleName} as default } from "./";\n`
50+
);
4751
await writeTo(`src/styles/${name}.css`, content);
4852
} else {
4953
await copyFile(absPath, `src/styles/${file}`);
@@ -95,6 +99,7 @@ export async function buildStyles() {
9599
.join("");
96100

97101
await writeTo("src/styles/index.js", base);
102+
await writeTo("src/styles/index.d.ts", types);
98103
await writeTo("SUPPORTED_STYLES.md", markdown);
99104
await writeTo("demo/lib/styles.json", styles);
100105
}

tests/SvelteHighlightPackage.test.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22
import Highlight from "../package";
33
import Highlight2 from "../package/Highlight.svelte";
44
import { typescript } from "../package/languages";
5+
import typescriptDefault from "../package/languages/typescript";
6+
import { typescript as ts } from "../package/languages/typescript";
57
import javascript from "../package/languages/javascript";
68
import { github, purebasic, _3024 } from "../package/styles/index";
9+
import githubStyles from "../package/styles/github";
710
import "../package/styles/3024.css";
811
</script>
912

1013
<Highlight
1114
code=""
12-
language={javascript || typescript}
15+
language={javascript || typescript || typescriptDefault || ts}
1316
on:highlight={(e) => {
1417
console.log(e.detail);
1518
}}
@@ -21,4 +24,5 @@
2124
<svelte:component this={Highlight2} />
2225

2326
{github}
27+
{githubStyles}
2428
{purebasic}

0 commit comments

Comments
 (0)