Skip to content

Commit 63a4e31

Browse files
authored
feat: convert source code to TypeScript (#209)
* chore(deps-dev): add svelte-preprocess * build: set up typescript * feat: convert source code to TypeScript * build: include src files in tsconfig.json
1 parent 236e9f8 commit 63a4e31

File tree

8 files changed

+134
-44
lines changed

8 files changed

+134
-44
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,10 @@
3535
"svelte": "^3.48.0",
3636
"svelte-check": "^2.7.1",
3737
"svelte-focus-key": "^0.3.2",
38+
"svelte-preprocess": "^4.10.7",
3839
"svelte2tsx": "^0.5.10",
3940
"totalist": "^3.0.0",
40-
"typescript": "^4.7.2",
41+
"typescript": "^4.7.3",
4142
"vitest": "^0.13.1"
4243
},
4344
"repository": {

src/Highlight.svelte

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,61 @@
1-
<script>
2-
/** @type {{ name?: string; register: (hljs: any) => Record<string, any>; }} */
3-
export let language = { name: undefined, register: undefined };
4-
5-
/**
6-
* Source code to highlight
7-
* @type {string}
8-
*/
1+
<script context="module" lang="ts">
2+
import type { LanguageFn } from "highlight.js";
3+
4+
export type HighlightedCode = undefined | string;
5+
6+
export interface Language {
7+
name?: string;
8+
register: LanguageFn;
9+
}
10+
11+
export interface Events {
12+
highlight: {
13+
highlighted?: HighlightedCode;
14+
};
15+
}
16+
</script>
17+
18+
<script lang="ts">
19+
interface $$Props extends Partial<HTMLPreElement> {
20+
/**
21+
* Specify the source code to highlight.
22+
*/
23+
code?: any;
24+
25+
/**
26+
* Provide the language to highlight the code.
27+
* Import languages from `svelte-highlight/languages/*`.
28+
*/
29+
language?: Language;
30+
31+
/**
32+
* Set to `true` for the language name to be
33+
* displayed at the top right of the code block.
34+
*/
35+
langtag?: boolean;
36+
}
37+
38+
interface $$Slots {
39+
default: {
40+
highlighted: HighlightedCode;
41+
};
42+
}
43+
44+
export let language: Language = {
45+
name: undefined,
46+
register: undefined,
47+
};
48+
949
export let code = undefined;
1050
11-
/**
12-
* Add a language tag to the top-right
13-
* of the code block
14-
* @type {boolean}
15-
*/
1651
export let langtag = false;
1752
1853
import hljs from "highlight.js/lib/core";
1954
import { createEventDispatcher, afterUpdate } from "svelte";
2055
21-
const dispatch = createEventDispatcher();
56+
const dispatch = createEventDispatcher<Events>();
2257
23-
let highlighted = undefined;
58+
let highlighted: HighlightedCode = undefined;
2459
2560
afterUpdate(() => {
2661
if (highlighted) dispatch("highlight", { highlighted });

src/HighlightAuto.svelte

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,43 @@
1-
<script>
2-
/**
3-
* Source code to highlight
4-
* @type {string}
5-
*/
1+
<script context="module" lang="ts">
2+
import type { HighlightedCode, Language, Events } from "./Highlight.svelte";
3+
</script>
4+
5+
<script lang="ts">
6+
interface $$Props extends Partial<HTMLPreElement> {
7+
/**
8+
* Specify the source code to highlight.
9+
*/
10+
code?: any;
11+
12+
/**
13+
* Provide the language to highlight the code.
14+
* Import languages from `svelte-highlight/languages/*`.
15+
*/
16+
language?: Language;
17+
18+
/**
19+
* Set to `true` for the language name to be
20+
* displayed at the top right of the code block.
21+
*/
22+
langtag?: boolean;
23+
}
24+
25+
interface $$Slots {
26+
default: {
27+
highlighted: HighlightedCode;
28+
};
29+
}
30+
631
export let code = undefined;
732
8-
/**
9-
* Add a language tag to the top-right
10-
* of the code block
11-
* @type {boolean}
12-
*/
1333
export let langtag = false;
1434
1535
import hljs from "highlight.js";
1636
import { createEventDispatcher, afterUpdate } from "svelte";
1737
18-
const dispatch = createEventDispatcher();
38+
const dispatch = createEventDispatcher<Events>();
1939
20-
let highlighted = undefined;
40+
let highlighted: HighlightedCode = undefined;
2141
let language = undefined;
2242
2343
afterUpdate(() => {

src/HighlightSvelte.svelte

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,29 @@
1-
<script>
2-
/**
3-
* Source code to highlight
4-
* @type {string}
5-
*/
1+
<script context="module" lang="ts">
2+
import type { HighlightedCode, Language, Events } from "./Highlight.svelte";
3+
</script>
4+
5+
<script lang="ts">
6+
interface $$Props extends Partial<HTMLPreElement> {
7+
/**
8+
* Specify the source code to highlight.
9+
*/
10+
code?: any;
11+
12+
/**
13+
* Set to `true` for the language name to be
14+
* displayed at the top right of the code block.
15+
*/
16+
langtag?: boolean;
17+
}
18+
19+
interface $$Slots {
20+
default: {
21+
highlighted: HighlightedCode;
22+
};
23+
}
24+
625
export let code = undefined;
726
8-
/**
9-
* Add a language tag to the top-right
10-
* of the code block
11-
* @type {boolean}
12-
*/
1327
export let langtag = false;
1428
1529
import hljs from "highlight.js/lib/core";
@@ -18,7 +32,7 @@
1832
import css from "highlight.js/lib/languages/css";
1933
import { createEventDispatcher, afterUpdate } from "svelte";
2034
21-
const dispatch = createEventDispatcher();
35+
const dispatch = createEventDispatcher<Events>();
2236
2337
hljs.registerLanguage("xml", xml);
2438
hljs.registerLanguage("javascript", javascript);
File renamed without changes.

svelte.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import adapter from "@sveltejs/adapter-static";
22
import fs from "fs";
3+
import preprocess from "svelte-preprocess"
34
import { optimizeImports } from "carbon-preprocess-svelte";
45

56
const pkg = JSON.parse(
@@ -16,6 +17,7 @@ const CONTENT = {
1617
/** @type {import('@sveltejs/kit').Config} */
1718
const config = {
1819
preprocess: [
20+
preprocess(),
1921
optimizeImports(),
2022
{
2123
script: ({ content }) => {

tsconfig.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
{
22
"extends": "./.svelte-kit/tsconfig.json",
3-
"include": ["demo/**/*.js", "demo/**/*.svelte", "tests/*.svelte"]
3+
"include": [
4+
"src/**/*.svelte",
5+
"src/**/*.ts",
6+
"demo/**/*.js",
7+
"demo/**/*.svelte",
8+
"tests/*.svelte"
9+
]
410
}

yarn.lock

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1378,6 +1378,18 @@ svelte-preprocess@^4.10.5:
13781378
sorcery "^0.10.0"
13791379
strip-indent "^3.0.0"
13801380

1381+
svelte-preprocess@^4.10.7:
1382+
version "4.10.7"
1383+
resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz#3626de472f51ffe20c9bc71eff5a3da66797c362"
1384+
integrity sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==
1385+
dependencies:
1386+
"@types/pug" "^2.0.4"
1387+
"@types/sass" "^1.16.0"
1388+
detect-indent "^6.0.0"
1389+
magic-string "^0.25.7"
1390+
sorcery "^0.10.0"
1391+
strip-indent "^3.0.0"
1392+
13811393
svelte2tsx@^0.5.10:
13821394
version "0.5.10"
13831395
resolved "https://registry.yarnpkg.com/svelte2tsx/-/svelte2tsx-0.5.10.tgz#32f244534361325e40f8976173ce2569c7e71fdb"
@@ -1464,10 +1476,10 @@ typescript@*, typescript@^4.6.3:
14641476
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c"
14651477
integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==
14661478

1467-
typescript@^4.7.2:
1468-
version "4.7.2"
1469-
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.2.tgz#1f9aa2ceb9af87cca227813b4310fff0b51593c4"
1470-
integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==
1479+
typescript@^4.7.3:
1480+
version "4.7.3"
1481+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d"
1482+
integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==
14711483

14721484
universalify@^0.1.2:
14731485
version "0.1.2"

0 commit comments

Comments
 (0)