@podlite/editor-react 0.0.72 → 0.0.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.podlite +14 -0
- package/esm/Editor.css +19 -0
- package/esm/Editor.d.ts +3 -0
- package/esm/Editor.js +40 -9
- package/esm/Editor.js.map +1 -1
- package/esm/imageDecorations.d.ts +17 -0
- package/esm/imageDecorations.js +91 -0
- package/esm/imageDecorations.js.map +1 -0
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/podliteMarkdown.d.ts +2 -0
- package/esm/podliteMarkdown.js +33 -0
- package/esm/podliteMarkdown.js.map +1 -1
- package/lib/Editor.css +19 -0
- package/lib/Editor.d.ts +3 -0
- package/lib/Editor.js +40 -9
- package/lib/Editor.js.map +1 -1
- package/lib/imageDecorations.d.ts +17 -0
- package/lib/imageDecorations.js +97 -0
- package/lib/imageDecorations.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/podliteMarkdown.d.ts +2 -0
- package/lib/podliteMarkdown.js +36 -1
- package/lib/podliteMarkdown.js.map +1 -1
- package/package.json +8 -3
- package/esm/HighlightedCode.d.ts +0 -21
- package/esm/HighlightedCode.js +0 -97
- package/esm/HighlightedCode.js.map +0 -1
- package/esm/shiki.d.ts +0 -15
- package/esm/shiki.js +0 -147
- package/esm/shiki.js.map +0 -1
- package/lib/HighlightedCode.d.ts +0 -21
- package/lib/HighlightedCode.js +0 -102
- package/lib/HighlightedCode.js.map +0 -1
- package/lib/shiki.d.ts +0 -15
- package/lib/shiki.js +0 -188
- package/lib/shiki.js.map +0 -1
package/esm/HighlightedCode.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { makeAttrs } from '@podlite/schema';
|
|
3
|
-
import { codeToThemedHtml } from './shiki';
|
|
4
|
-
const fcodeToTag = {
|
|
5
|
-
B: 'strong',
|
|
6
|
-
I: 'em',
|
|
7
|
-
C: 'code',
|
|
8
|
-
U: 'u',
|
|
9
|
-
K: 'kbd',
|
|
10
|
-
};
|
|
11
|
-
export const extractPlainAndDecorations = (nodes) => {
|
|
12
|
-
const decorations = [];
|
|
13
|
-
let plain = '';
|
|
14
|
-
const walk = (input) => {
|
|
15
|
-
if (input == null)
|
|
16
|
-
return;
|
|
17
|
-
if (typeof input === 'string') {
|
|
18
|
-
plain += input;
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (Array.isArray(input)) {
|
|
22
|
-
for (const child of input)
|
|
23
|
-
walk(child);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
const node = input;
|
|
27
|
-
if (node.type === 'text' && typeof node.value === 'string') {
|
|
28
|
-
plain += node.value;
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
if (node.type === 'verbatim' && typeof node.value === 'string') {
|
|
32
|
-
plain += node.value;
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
if (node.type === 'fcode' && typeof node.name === 'string') {
|
|
36
|
-
const tagName = fcodeToTag[node.name] || 'span';
|
|
37
|
-
const start = plain.length;
|
|
38
|
-
walk(node.content);
|
|
39
|
-
const end = plain.length;
|
|
40
|
-
if (end > start) {
|
|
41
|
-
decorations.push({
|
|
42
|
-
start,
|
|
43
|
-
end,
|
|
44
|
-
tagName,
|
|
45
|
-
properties: { class: `fc-${node.name}` },
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
if (node.content !== undefined) {
|
|
51
|
-
walk(node.content);
|
|
52
|
-
}
|
|
53
|
-
else if (typeof node.text === 'string') {
|
|
54
|
-
plain += node.text;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
walk(nodes);
|
|
58
|
-
return { plain, decorations };
|
|
59
|
-
};
|
|
60
|
-
const HighlightedCode = React.memo(({ node, children, keyProp, ctx }) => {
|
|
61
|
-
const conf = makeAttrs(node, ctx);
|
|
62
|
-
const caption = conf.exists('caption') ? conf.getFirstValue('caption') : null;
|
|
63
|
-
const lang = conf.getFirstValue('lang') || 'txt';
|
|
64
|
-
const [html, setHtml] = useState(null);
|
|
65
|
-
useEffect(() => {
|
|
66
|
-
let cancelled = false;
|
|
67
|
-
const highlight = async () => {
|
|
68
|
-
try {
|
|
69
|
-
const isDark = document.body.className.toLowerCase().includes('dark');
|
|
70
|
-
const { plain, decorations } = extractPlainAndDecorations(node.content);
|
|
71
|
-
const result = await codeToThemedHtml({
|
|
72
|
-
code: plain,
|
|
73
|
-
language: lang,
|
|
74
|
-
theme: isDark ? 'dark' : 'light',
|
|
75
|
-
decorations,
|
|
76
|
-
});
|
|
77
|
-
if (!cancelled)
|
|
78
|
-
setHtml(result);
|
|
79
|
-
}
|
|
80
|
-
catch (e) {
|
|
81
|
-
console.error('[podlite] shiki highlight error:', e);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
highlight();
|
|
85
|
-
return () => {
|
|
86
|
-
cancelled = true;
|
|
87
|
-
};
|
|
88
|
-
}, [lang, node.content]);
|
|
89
|
-
return html ? (React.createElement(React.Fragment, null,
|
|
90
|
-
React.createElement("code", { key: keyProp, className: "shiki", dangerouslySetInnerHTML: { __html: html } }),
|
|
91
|
-
caption && React.createElement("div", { className: "caption" }, caption))) : (React.createElement(React.Fragment, null,
|
|
92
|
-
React.createElement("pre", null,
|
|
93
|
-
React.createElement("code", { key: keyProp }, children)),
|
|
94
|
-
caption && React.createElement("div", { className: "caption" }, caption)));
|
|
95
|
-
});
|
|
96
|
-
export default HighlightedCode;
|
|
97
|
-
//# sourceMappingURL=HighlightedCode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HighlightedCode.js","sourceRoot":"","sources":["../src/HighlightedCode.tsx"],"names":[],"mappings":"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"}
|
package/esm/shiki.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { BundledLanguage, DecorationItem, Highlighter } from 'shiki';
|
|
2
|
-
export type ExtendedLanguage = BundledLanguage | 'txt';
|
|
3
|
-
export declare function normalizeLanguage(language?: string): Promise<ExtendedLanguage>;
|
|
4
|
-
export declare function getHighlighter(language?: string): Promise<Highlighter>;
|
|
5
|
-
export declare function codeToHtml({ code, language }: {
|
|
6
|
-
code: string;
|
|
7
|
-
language: string;
|
|
8
|
-
}): Promise<string>;
|
|
9
|
-
export declare function codeToThemedHtml({ code, language, theme, decorations, }: {
|
|
10
|
-
code: string;
|
|
11
|
-
language: string;
|
|
12
|
-
theme?: 'light' | 'dark' | 'auto';
|
|
13
|
-
decorations?: DecorationItem[];
|
|
14
|
-
}): Promise<string>;
|
|
15
|
-
export declare const isLanguageLoaded: (language: ExtendedLanguage) => boolean;
|
package/esm/shiki.js
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
const loadShiki = () => import('shiki');
|
|
2
|
-
// Configuration
|
|
3
|
-
const CONFIG = {
|
|
4
|
-
themes: {
|
|
5
|
-
light: 'one-light',
|
|
6
|
-
dark: 'github-dark',
|
|
7
|
-
},
|
|
8
|
-
initialLanguages: ['shell', 'txt'],
|
|
9
|
-
};
|
|
10
|
-
// Language aliases mapping
|
|
11
|
-
const languageAliases = {
|
|
12
|
-
text: 'txt',
|
|
13
|
-
plaintext: 'txt',
|
|
14
|
-
plain: 'txt',
|
|
15
|
-
sh: 'shell',
|
|
16
|
-
bash: 'shell',
|
|
17
|
-
zsh: 'shell',
|
|
18
|
-
shellscript: 'shell',
|
|
19
|
-
'shell-script': 'shell',
|
|
20
|
-
console: 'shell',
|
|
21
|
-
terminal: 'shell',
|
|
22
|
-
js: 'javascript',
|
|
23
|
-
node: 'javascript',
|
|
24
|
-
nodejs: 'javascript',
|
|
25
|
-
ts: 'typescript',
|
|
26
|
-
py: 'python',
|
|
27
|
-
python3: 'python',
|
|
28
|
-
py3: 'python',
|
|
29
|
-
rb: 'ruby',
|
|
30
|
-
md: 'markdown',
|
|
31
|
-
cpp: 'c++',
|
|
32
|
-
cc: 'c++',
|
|
33
|
-
cs: 'c#',
|
|
34
|
-
csharp: 'c#',
|
|
35
|
-
htm: 'html',
|
|
36
|
-
yml: 'yaml',
|
|
37
|
-
dockerfile: 'docker',
|
|
38
|
-
styles: 'css',
|
|
39
|
-
style: 'css',
|
|
40
|
-
jsonc: 'json',
|
|
41
|
-
json5: 'json',
|
|
42
|
-
xaml: 'xml',
|
|
43
|
-
xhtml: 'xml',
|
|
44
|
-
svg: 'xml',
|
|
45
|
-
mysql: 'sql',
|
|
46
|
-
postgresql: 'sql',
|
|
47
|
-
postgres: 'sql',
|
|
48
|
-
pgsql: 'sql',
|
|
49
|
-
plsql: 'sql',
|
|
50
|
-
oracle: 'sql',
|
|
51
|
-
};
|
|
52
|
-
// Singleton state
|
|
53
|
-
const state = {
|
|
54
|
-
instance: null,
|
|
55
|
-
initPromise: null,
|
|
56
|
-
loadedLanguages: new Set(['txt']),
|
|
57
|
-
pendingLoads: new Map(),
|
|
58
|
-
warnedLanguages: new Set(),
|
|
59
|
-
};
|
|
60
|
-
// Normalize language to valid Shiki language
|
|
61
|
-
export async function normalizeLanguage(language) {
|
|
62
|
-
if (!language)
|
|
63
|
-
return 'txt';
|
|
64
|
-
const normalized = language.toLowerCase();
|
|
65
|
-
const { bundledLanguages } = await loadShiki();
|
|
66
|
-
if (normalized in bundledLanguages) {
|
|
67
|
-
return normalized;
|
|
68
|
-
}
|
|
69
|
-
if (normalized in languageAliases) {
|
|
70
|
-
return languageAliases[normalized];
|
|
71
|
-
}
|
|
72
|
-
if (!state.warnedLanguages.has(language)) {
|
|
73
|
-
console.warn(`[podlite] shiki unrecognized language '${language}', defaulting to [txt]`);
|
|
74
|
-
state.warnedLanguages.add(language);
|
|
75
|
-
}
|
|
76
|
-
return 'txt';
|
|
77
|
-
}
|
|
78
|
-
// Get or create highlighter instance
|
|
79
|
-
async function getHighlighterInstance() {
|
|
80
|
-
if (!state.initPromise) {
|
|
81
|
-
state.initPromise = (async () => {
|
|
82
|
-
const { createHighlighter } = await loadShiki();
|
|
83
|
-
const instance = await createHighlighter({
|
|
84
|
-
themes: Object.values(CONFIG.themes),
|
|
85
|
-
langs: CONFIG.initialLanguages,
|
|
86
|
-
});
|
|
87
|
-
state.instance = instance;
|
|
88
|
-
CONFIG.initialLanguages.forEach(lang => state.loadedLanguages.add(lang));
|
|
89
|
-
return instance;
|
|
90
|
-
})();
|
|
91
|
-
}
|
|
92
|
-
return state.initPromise;
|
|
93
|
-
}
|
|
94
|
-
// Load a language if not already loaded
|
|
95
|
-
async function ensureLanguageLoaded(instance, lang) {
|
|
96
|
-
if (state.loadedLanguages.has(lang))
|
|
97
|
-
return;
|
|
98
|
-
let pending = state.pendingLoads.get(lang);
|
|
99
|
-
if (!pending) {
|
|
100
|
-
pending = instance
|
|
101
|
-
.loadLanguage(lang)
|
|
102
|
-
.then(() => {
|
|
103
|
-
state.loadedLanguages.add(lang);
|
|
104
|
-
})
|
|
105
|
-
.finally(() => state.pendingLoads.delete(lang));
|
|
106
|
-
state.pendingLoads.set(lang, pending);
|
|
107
|
-
}
|
|
108
|
-
await pending;
|
|
109
|
-
}
|
|
110
|
-
// Main API: get highlighter with language loaded
|
|
111
|
-
export async function getHighlighter(language) {
|
|
112
|
-
const lang = await normalizeLanguage(language);
|
|
113
|
-
const instance = await getHighlighterInstance();
|
|
114
|
-
await ensureLanguageLoaded(instance, lang);
|
|
115
|
-
return instance;
|
|
116
|
-
}
|
|
117
|
-
// Convenience: convert code to HTML with dual themes (CSS-based switching)
|
|
118
|
-
export async function codeToHtml({ code, language }) {
|
|
119
|
-
const lang = await normalizeLanguage(language);
|
|
120
|
-
const highlighter = await getHighlighter(language);
|
|
121
|
-
return highlighter.codeToHtml(code, {
|
|
122
|
-
lang,
|
|
123
|
-
themes: CONFIG.themes,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
// Convert code to HTML with explicit theme selection (for runtime theme detection)
|
|
127
|
-
export async function codeToThemedHtml({ code, language, theme, decorations, }) {
|
|
128
|
-
const lang = await normalizeLanguage(language);
|
|
129
|
-
const highlighter = await getHighlighter(language);
|
|
130
|
-
if (theme === 'light' || theme === 'dark') {
|
|
131
|
-
return highlighter.codeToHtml(code, {
|
|
132
|
-
lang,
|
|
133
|
-
theme: CONFIG.themes[theme],
|
|
134
|
-
decorations,
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
return highlighter.codeToHtml(code, {
|
|
138
|
-
lang,
|
|
139
|
-
themes: CONFIG.themes,
|
|
140
|
-
decorations,
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
// Check if a language is loaded (sync — only meaningful after a prior async normalize)
|
|
144
|
-
export const isLanguageLoaded = (language) => {
|
|
145
|
-
return state.loadedLanguages.has(language);
|
|
146
|
-
};
|
|
147
|
-
//# sourceMappingURL=shiki.js.map
|
package/esm/shiki.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shiki.js","sourceRoot":"","sources":["../src/shiki.tsx"],"names":[],"mappings":"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"}
|
package/lib/HighlightedCode.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
type Decoration = {
|
|
3
|
-
start: number;
|
|
4
|
-
end: number;
|
|
5
|
-
tagName: string;
|
|
6
|
-
properties?: {
|
|
7
|
-
class?: string;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
export declare const extractPlainAndDecorations: (nodes: unknown) => {
|
|
11
|
-
plain: string;
|
|
12
|
-
decorations: Decoration[];
|
|
13
|
-
};
|
|
14
|
-
export interface HighlightedCodeProps {
|
|
15
|
-
node: any;
|
|
16
|
-
children: React.ReactNode;
|
|
17
|
-
keyProp: string;
|
|
18
|
-
ctx: any;
|
|
19
|
-
}
|
|
20
|
-
declare const HighlightedCode: React.FC<HighlightedCodeProps>;
|
|
21
|
-
export default HighlightedCode;
|
package/lib/HighlightedCode.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.extractPlainAndDecorations = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
-
const schema_1 = require("@podlite/schema");
|
|
7
|
-
const shiki_1 = require("./shiki");
|
|
8
|
-
const fcodeToTag = {
|
|
9
|
-
B: 'strong',
|
|
10
|
-
I: 'em',
|
|
11
|
-
C: 'code',
|
|
12
|
-
U: 'u',
|
|
13
|
-
K: 'kbd',
|
|
14
|
-
};
|
|
15
|
-
const extractPlainAndDecorations = (nodes) => {
|
|
16
|
-
const decorations = [];
|
|
17
|
-
let plain = '';
|
|
18
|
-
const walk = (input) => {
|
|
19
|
-
if (input == null)
|
|
20
|
-
return;
|
|
21
|
-
if (typeof input === 'string') {
|
|
22
|
-
plain += input;
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
if (Array.isArray(input)) {
|
|
26
|
-
for (const child of input)
|
|
27
|
-
walk(child);
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const node = input;
|
|
31
|
-
if (node.type === 'text' && typeof node.value === 'string') {
|
|
32
|
-
plain += node.value;
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
if (node.type === 'verbatim' && typeof node.value === 'string') {
|
|
36
|
-
plain += node.value;
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (node.type === 'fcode' && typeof node.name === 'string') {
|
|
40
|
-
const tagName = fcodeToTag[node.name] || 'span';
|
|
41
|
-
const start = plain.length;
|
|
42
|
-
walk(node.content);
|
|
43
|
-
const end = plain.length;
|
|
44
|
-
if (end > start) {
|
|
45
|
-
decorations.push({
|
|
46
|
-
start,
|
|
47
|
-
end,
|
|
48
|
-
tagName,
|
|
49
|
-
properties: { class: `fc-${node.name}` },
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (node.content !== undefined) {
|
|
55
|
-
walk(node.content);
|
|
56
|
-
}
|
|
57
|
-
else if (typeof node.text === 'string') {
|
|
58
|
-
plain += node.text;
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
walk(nodes);
|
|
62
|
-
return { plain, decorations };
|
|
63
|
-
};
|
|
64
|
-
exports.extractPlainAndDecorations = extractPlainAndDecorations;
|
|
65
|
-
const HighlightedCode = react_1.default.memo(({ node, children, keyProp, ctx }) => {
|
|
66
|
-
const conf = (0, schema_1.makeAttrs)(node, ctx);
|
|
67
|
-
const caption = conf.exists('caption') ? conf.getFirstValue('caption') : null;
|
|
68
|
-
const lang = conf.getFirstValue('lang') || 'txt';
|
|
69
|
-
const [html, setHtml] = (0, react_1.useState)(null);
|
|
70
|
-
(0, react_1.useEffect)(() => {
|
|
71
|
-
let cancelled = false;
|
|
72
|
-
const highlight = async () => {
|
|
73
|
-
try {
|
|
74
|
-
const isDark = document.body.className.toLowerCase().includes('dark');
|
|
75
|
-
const { plain, decorations } = (0, exports.extractPlainAndDecorations)(node.content);
|
|
76
|
-
const result = await (0, shiki_1.codeToThemedHtml)({
|
|
77
|
-
code: plain,
|
|
78
|
-
language: lang,
|
|
79
|
-
theme: isDark ? 'dark' : 'light',
|
|
80
|
-
decorations,
|
|
81
|
-
});
|
|
82
|
-
if (!cancelled)
|
|
83
|
-
setHtml(result);
|
|
84
|
-
}
|
|
85
|
-
catch (e) {
|
|
86
|
-
console.error('[podlite] shiki highlight error:', e);
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
highlight();
|
|
90
|
-
return () => {
|
|
91
|
-
cancelled = true;
|
|
92
|
-
};
|
|
93
|
-
}, [lang, node.content]);
|
|
94
|
-
return html ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
95
|
-
react_1.default.createElement("code", { key: keyProp, className: "shiki", dangerouslySetInnerHTML: { __html: html } }),
|
|
96
|
-
caption && react_1.default.createElement("div", { className: "caption" }, caption))) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
97
|
-
react_1.default.createElement("pre", null,
|
|
98
|
-
react_1.default.createElement("code", { key: keyProp }, children)),
|
|
99
|
-
caption && react_1.default.createElement("div", { className: "caption" }, caption)));
|
|
100
|
-
});
|
|
101
|
-
exports.default = HighlightedCode;
|
|
102
|
-
//# sourceMappingURL=HighlightedCode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HighlightedCode.js","sourceRoot":"","sources":["../src/HighlightedCode.tsx"],"names":[],"mappings":"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"}
|
package/lib/shiki.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { BundledLanguage, DecorationItem, Highlighter } from 'shiki';
|
|
2
|
-
export type ExtendedLanguage = BundledLanguage | 'txt';
|
|
3
|
-
export declare function normalizeLanguage(language?: string): Promise<ExtendedLanguage>;
|
|
4
|
-
export declare function getHighlighter(language?: string): Promise<Highlighter>;
|
|
5
|
-
export declare function codeToHtml({ code, language }: {
|
|
6
|
-
code: string;
|
|
7
|
-
language: string;
|
|
8
|
-
}): Promise<string>;
|
|
9
|
-
export declare function codeToThemedHtml({ code, language, theme, decorations, }: {
|
|
10
|
-
code: string;
|
|
11
|
-
language: string;
|
|
12
|
-
theme?: 'light' | 'dark' | 'auto';
|
|
13
|
-
decorations?: DecorationItem[];
|
|
14
|
-
}): Promise<string>;
|
|
15
|
-
export declare const isLanguageLoaded: (language: ExtendedLanguage) => boolean;
|
package/lib/shiki.js
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.isLanguageLoaded = void 0;
|
|
37
|
-
exports.normalizeLanguage = normalizeLanguage;
|
|
38
|
-
exports.getHighlighter = getHighlighter;
|
|
39
|
-
exports.codeToHtml = codeToHtml;
|
|
40
|
-
exports.codeToThemedHtml = codeToThemedHtml;
|
|
41
|
-
const loadShiki = () => Promise.resolve().then(() => __importStar(require('shiki')));
|
|
42
|
-
// Configuration
|
|
43
|
-
const CONFIG = {
|
|
44
|
-
themes: {
|
|
45
|
-
light: 'one-light',
|
|
46
|
-
dark: 'github-dark',
|
|
47
|
-
},
|
|
48
|
-
initialLanguages: ['shell', 'txt'],
|
|
49
|
-
};
|
|
50
|
-
// Language aliases mapping
|
|
51
|
-
const languageAliases = {
|
|
52
|
-
text: 'txt',
|
|
53
|
-
plaintext: 'txt',
|
|
54
|
-
plain: 'txt',
|
|
55
|
-
sh: 'shell',
|
|
56
|
-
bash: 'shell',
|
|
57
|
-
zsh: 'shell',
|
|
58
|
-
shellscript: 'shell',
|
|
59
|
-
'shell-script': 'shell',
|
|
60
|
-
console: 'shell',
|
|
61
|
-
terminal: 'shell',
|
|
62
|
-
js: 'javascript',
|
|
63
|
-
node: 'javascript',
|
|
64
|
-
nodejs: 'javascript',
|
|
65
|
-
ts: 'typescript',
|
|
66
|
-
py: 'python',
|
|
67
|
-
python3: 'python',
|
|
68
|
-
py3: 'python',
|
|
69
|
-
rb: 'ruby',
|
|
70
|
-
md: 'markdown',
|
|
71
|
-
cpp: 'c++',
|
|
72
|
-
cc: 'c++',
|
|
73
|
-
cs: 'c#',
|
|
74
|
-
csharp: 'c#',
|
|
75
|
-
htm: 'html',
|
|
76
|
-
yml: 'yaml',
|
|
77
|
-
dockerfile: 'docker',
|
|
78
|
-
styles: 'css',
|
|
79
|
-
style: 'css',
|
|
80
|
-
jsonc: 'json',
|
|
81
|
-
json5: 'json',
|
|
82
|
-
xaml: 'xml',
|
|
83
|
-
xhtml: 'xml',
|
|
84
|
-
svg: 'xml',
|
|
85
|
-
mysql: 'sql',
|
|
86
|
-
postgresql: 'sql',
|
|
87
|
-
postgres: 'sql',
|
|
88
|
-
pgsql: 'sql',
|
|
89
|
-
plsql: 'sql',
|
|
90
|
-
oracle: 'sql',
|
|
91
|
-
};
|
|
92
|
-
// Singleton state
|
|
93
|
-
const state = {
|
|
94
|
-
instance: null,
|
|
95
|
-
initPromise: null,
|
|
96
|
-
loadedLanguages: new Set(['txt']),
|
|
97
|
-
pendingLoads: new Map(),
|
|
98
|
-
warnedLanguages: new Set(),
|
|
99
|
-
};
|
|
100
|
-
// Normalize language to valid Shiki language
|
|
101
|
-
async function normalizeLanguage(language) {
|
|
102
|
-
if (!language)
|
|
103
|
-
return 'txt';
|
|
104
|
-
const normalized = language.toLowerCase();
|
|
105
|
-
const { bundledLanguages } = await loadShiki();
|
|
106
|
-
if (normalized in bundledLanguages) {
|
|
107
|
-
return normalized;
|
|
108
|
-
}
|
|
109
|
-
if (normalized in languageAliases) {
|
|
110
|
-
return languageAliases[normalized];
|
|
111
|
-
}
|
|
112
|
-
if (!state.warnedLanguages.has(language)) {
|
|
113
|
-
console.warn(`[podlite] shiki unrecognized language '${language}', defaulting to [txt]`);
|
|
114
|
-
state.warnedLanguages.add(language);
|
|
115
|
-
}
|
|
116
|
-
return 'txt';
|
|
117
|
-
}
|
|
118
|
-
// Get or create highlighter instance
|
|
119
|
-
async function getHighlighterInstance() {
|
|
120
|
-
if (!state.initPromise) {
|
|
121
|
-
state.initPromise = (async () => {
|
|
122
|
-
const { createHighlighter } = await loadShiki();
|
|
123
|
-
const instance = await createHighlighter({
|
|
124
|
-
themes: Object.values(CONFIG.themes),
|
|
125
|
-
langs: CONFIG.initialLanguages,
|
|
126
|
-
});
|
|
127
|
-
state.instance = instance;
|
|
128
|
-
CONFIG.initialLanguages.forEach(lang => state.loadedLanguages.add(lang));
|
|
129
|
-
return instance;
|
|
130
|
-
})();
|
|
131
|
-
}
|
|
132
|
-
return state.initPromise;
|
|
133
|
-
}
|
|
134
|
-
// Load a language if not already loaded
|
|
135
|
-
async function ensureLanguageLoaded(instance, lang) {
|
|
136
|
-
if (state.loadedLanguages.has(lang))
|
|
137
|
-
return;
|
|
138
|
-
let pending = state.pendingLoads.get(lang);
|
|
139
|
-
if (!pending) {
|
|
140
|
-
pending = instance
|
|
141
|
-
.loadLanguage(lang)
|
|
142
|
-
.then(() => {
|
|
143
|
-
state.loadedLanguages.add(lang);
|
|
144
|
-
})
|
|
145
|
-
.finally(() => state.pendingLoads.delete(lang));
|
|
146
|
-
state.pendingLoads.set(lang, pending);
|
|
147
|
-
}
|
|
148
|
-
await pending;
|
|
149
|
-
}
|
|
150
|
-
// Main API: get highlighter with language loaded
|
|
151
|
-
async function getHighlighter(language) {
|
|
152
|
-
const lang = await normalizeLanguage(language);
|
|
153
|
-
const instance = await getHighlighterInstance();
|
|
154
|
-
await ensureLanguageLoaded(instance, lang);
|
|
155
|
-
return instance;
|
|
156
|
-
}
|
|
157
|
-
// Convenience: convert code to HTML with dual themes (CSS-based switching)
|
|
158
|
-
async function codeToHtml({ code, language }) {
|
|
159
|
-
const lang = await normalizeLanguage(language);
|
|
160
|
-
const highlighter = await getHighlighter(language);
|
|
161
|
-
return highlighter.codeToHtml(code, {
|
|
162
|
-
lang,
|
|
163
|
-
themes: CONFIG.themes,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
// Convert code to HTML with explicit theme selection (for runtime theme detection)
|
|
167
|
-
async function codeToThemedHtml({ code, language, theme, decorations, }) {
|
|
168
|
-
const lang = await normalizeLanguage(language);
|
|
169
|
-
const highlighter = await getHighlighter(language);
|
|
170
|
-
if (theme === 'light' || theme === 'dark') {
|
|
171
|
-
return highlighter.codeToHtml(code, {
|
|
172
|
-
lang,
|
|
173
|
-
theme: CONFIG.themes[theme],
|
|
174
|
-
decorations,
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
return highlighter.codeToHtml(code, {
|
|
178
|
-
lang,
|
|
179
|
-
themes: CONFIG.themes,
|
|
180
|
-
decorations,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
// Check if a language is loaded (sync — only meaningful after a prior async normalize)
|
|
184
|
-
const isLanguageLoaded = (language) => {
|
|
185
|
-
return state.loadedLanguages.has(language);
|
|
186
|
-
};
|
|
187
|
-
exports.isLanguageLoaded = isLanguageLoaded;
|
|
188
|
-
//# sourceMappingURL=shiki.js.map
|
package/lib/shiki.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shiki.js","sourceRoot":"","sources":["../src/shiki.tsx"],"names":[],"mappings":"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"}
|