markdown-to-html-cli 3.9.0 → 3.10.1
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/README.md +1 -0
- package/lib/create.js +5 -1
- package/lib/create.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +11 -6
- package/lib/index.js.map +1 -1
- package/lib/nodes/imgBase64.d.ts +1 -0
- package/lib/nodes/imgBase64.js +16 -0
- package/lib/nodes/imgBase64.js.map +1 -0
- package/package.json +2 -1
- package/src/create.ts +5 -1
- package/src/index.ts +17 -6
- package/src/nodes/imgBase64.ts +17 -0
package/README.md
CHANGED
|
@@ -142,6 +142,7 @@ Options:
|
|
|
142
142
|
--keywords Define keywords for search engines.
|
|
143
143
|
--no-dark-mode Disable light and dark theme styles button.
|
|
144
144
|
--markdown Markdown string.
|
|
145
|
+
--img-base64 Convert images in HTML to base64.
|
|
145
146
|
--style Override default styles. css file path or css string.
|
|
146
147
|
--markdown-style-theme Setting markdown-style light/dark theme.
|
|
147
148
|
--markdown-style Markdown wrapper style
|
package/lib/create.js
CHANGED
|
@@ -10,11 +10,12 @@ import rehypeFormat from 'rehype-format';
|
|
|
10
10
|
import { githubCorners } from './nodes/github-corners.js';
|
|
11
11
|
import { githubCornersFork } from './nodes/github-corners-fork.js';
|
|
12
12
|
import { octiconLink } from './nodes/octiconLink.js';
|
|
13
|
+
import { imgBase64 as toBase64 } from './nodes/imgBase64.js';
|
|
13
14
|
import { markdownStyle } from './nodes/markdown-style.js';
|
|
14
15
|
import { copyElement, copyStyle, copyScript } from './nodes/copy.js';
|
|
15
16
|
import { darkMode } from './nodes/dark-mode.js';
|
|
16
17
|
export function create(options = {}) {
|
|
17
|
-
const { markdown: string, document, corners = true, rewrite, reurls = {}, 'markdown-style-theme': markdownStyleTheme, 'dark-mode': darkModeTheme = true, 'markdown-style': wrapperStyle } = options;
|
|
18
|
+
const { markdown: string, document, 'img-base64': imgBase64 = false, corners = true, rewrite, reurls = {}, 'markdown-style-theme': markdownStyleTheme, 'dark-mode': darkModeTheme = true, 'markdown-style': wrapperStyle } = options;
|
|
18
19
|
const mdOptions = {
|
|
19
20
|
hastNode: false,
|
|
20
21
|
remarkPlugins: [remarkGemoji],
|
|
@@ -53,6 +54,9 @@ export function create(options = {}) {
|
|
|
53
54
|
});
|
|
54
55
|
}
|
|
55
56
|
}
|
|
57
|
+
if (node.type == 'element' && node.tagName === 'img' && imgBase64) {
|
|
58
|
+
node.properties = { ...node.properties, src: toBase64(node.properties.src) };
|
|
59
|
+
}
|
|
56
60
|
if (node.type == 'element' && /h(1|2|3|4|5|6)/.test(node.tagName) && node.children && Array.isArray(node.children) && node.children.length > 0) {
|
|
57
61
|
const child = node.children[0];
|
|
58
62
|
if (child && child.type === 'element' && child.properties) {
|
package/lib/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,QAAqB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,aAAa;AACb,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAU7C,MAAM,UAAU,MAAM,CAAC,UAA2B,EAAE;IAClD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export interface RunArgvs extends Omit<ParsedArgs, '_'> {
|
|
|
37
37
|
style?: string;
|
|
38
38
|
/** @example `(node_modules)` */
|
|
39
39
|
ignoreFile?: string;
|
|
40
|
+
/** Convert images in HTML to base64. @default `false` */
|
|
41
|
+
'img-base64'?: boolean;
|
|
40
42
|
}
|
|
41
43
|
export interface MDToHTMLOptions extends RunArgvs {
|
|
42
44
|
/** [rehype-document](https://github.com/rehypejs/rehype-document#options) options */
|
package/lib/index.js
CHANGED
|
@@ -19,12 +19,13 @@ export function run(opts = {}) {
|
|
|
19
19
|
version: opts.v || opts.version || false,
|
|
20
20
|
help: opts.h || opts.help || false,
|
|
21
21
|
ignoreFile: opts.ignoreFile || '(node_modules)',
|
|
22
|
+
'img-base64': opts.imgBase64 ?? false,
|
|
22
23
|
source: opts.s || opts.source || 'README.md',
|
|
23
24
|
markdown: opts.markdown || '',
|
|
24
25
|
'markdown-style': 'max-width: 960px;',
|
|
25
26
|
description: opts.description || '',
|
|
26
27
|
corners: opts.corners || true,
|
|
27
|
-
output: opts.o || opts.output
|
|
28
|
+
output: opts.o || opts.output,
|
|
28
29
|
},
|
|
29
30
|
});
|
|
30
31
|
if (argvs.h || argvs.help) {
|
|
@@ -49,7 +50,7 @@ export function run(opts = {}) {
|
|
|
49
50
|
argvs.markdown = fs.readFileSync(path.resolve(argvs.source)).toString();
|
|
50
51
|
}
|
|
51
52
|
const options = formatConfig({ ...opts, ...argvs });
|
|
52
|
-
const output = path.resolve(argvs.output);
|
|
53
|
+
const output = path.resolve(argvs.output || 'index.html');
|
|
53
54
|
if (!Array.isArray(options.document.style))
|
|
54
55
|
options.document.style = [options.document.style].flat().filter(Boolean);
|
|
55
56
|
if (options.style) {
|
|
@@ -70,11 +71,14 @@ export function run(opts = {}) {
|
|
|
70
71
|
}
|
|
71
72
|
if (mdFilesPath.length > 0) {
|
|
72
73
|
mdFilesPath.forEach((mdFile) => {
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
options.markdown = fs.readFileSync(path.resolve(mdFile)).toString();
|
|
75
|
+
const htmlPath = path.resolve(mdFile.replace(/\.md$/i, '.html').replace(/README\.html$/i, 'index.html').replace(/README-(.*)\.html$/i, 'index-$1.html'));
|
|
76
|
+
const mdFilePath = path.resolve(process.cwd(), (argvs.output || 'dist') + htmlPath.replace(process.cwd(), ''));
|
|
77
|
+
options.output = mdFilePath;
|
|
75
78
|
const strMarkdown = create({ ...argvs, ...options });
|
|
76
|
-
fs.
|
|
77
|
-
|
|
79
|
+
fs.ensureDirSync(path.dirname(options.output));
|
|
80
|
+
fs.writeFileSync(options.output, strMarkdown);
|
|
81
|
+
console.log(`\nmarkdown-to-html: \x1b[32;1m${path.relative(process.cwd(), options.output)}\x1b[0m\n`);
|
|
78
82
|
});
|
|
79
83
|
}
|
|
80
84
|
}
|
|
@@ -91,6 +95,7 @@ export const cliHelp = `\n Usage: markdown-to-html [options] [--help|h]
|
|
|
91
95
|
--keywords Define keywords for search engines.
|
|
92
96
|
--no-dark-mode Disable light and dark theme styles button.
|
|
93
97
|
--markdown Markdown string.
|
|
98
|
+
--img-base64 Convert images in HTML to base64.
|
|
94
99
|
--style Override default styles. css file path or css string.
|
|
95
100
|
--markdown-style-theme Setting markdown-style light/dark theme.
|
|
96
101
|
--markdown-style Markdown wrapper style.
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAA6B,MAAM,UAAU,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAA6B,MAAM,UAAU,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AAiDxB,MAAM,UAAU,GAAG,CAAC,OAAO,EAAyB;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAW,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACtD,KAAK,EAAE;YACL,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,GAAG;SACZ;QACD,OAAO,EAAE;YACP,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK;YACxC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK;YAClC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,gBAAgB;YAC/C,YAAY,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK;YACrC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW;YAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,gBAAgB,EAAE,mBAAmB;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;YAC7B,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM;SAC9B;KACF,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,WAAW,EAAE,CAAC,CAAC;QACxC,OAAO;KACR;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;QACzC,MAAM,EAAE;YACN,OAAO,EAAE,CAAC,CAAC,EAAE;gBACX,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC/F,CAAC;SACF;KACF,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnF,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACxD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,2CAA2C,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QACxE,OAAO,GAAG,CAAC,OAAO,CAAC;KACpB;IACD,WAAW;IACX,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;QACnC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;KACzE;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAK,YAAY,CAAC,CAAC;IAE3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrH,IAAI,OAAO,CAAC,KAAK,EAAE;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC5B,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxC;aAAM;YACL,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC5C;KACF;IACD,WAAW;IACX,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;KAC/F;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAEpE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC,CAAC;YACzJ,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAC7B,OAAO,CAAC,GAAG,EAAE,EACb,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAC/D,CAAC;YACF,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;YAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YACrD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxG,CAAC,CAAC,CAAC;KACJ;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAW;;;;;;;;;;;;;;;;;;;;;;;CAuB9B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAU;;;;;;;;;;;;;;;;;CAiBjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function imgBase64(src?: string): string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import image2uri, { validUrl } from "image2uri";
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
export function imgBase64(src) {
|
|
5
|
+
if (src && !validUrl(src) && /(png|apng|gif|jpg|jpeg|bm|bmp|webp|ico|svg)/i.test(src)) {
|
|
6
|
+
const imgPath = path.resolve(src);
|
|
7
|
+
if (fs.existsSync(imgPath)) {
|
|
8
|
+
const base64 = image2uri(imgPath);
|
|
9
|
+
if (base64 && typeof base64 === 'string') {
|
|
10
|
+
return base64;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return src;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=imgBase64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imgBase64.js","sourceRoot":"","sources":["../../src/nodes/imgBase64.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,MAAM,UAAU,CAAA;AAGzB,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBACxC,OAAO,MAAM,CAAC;aACf;SACF;KACF;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "markdown-to-html-cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.10.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Command line tool generates markdown as html.",
|
|
6
6
|
"homepage": "https://jaywcjlove.github.io/markdown-to-html-cli",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"@wcj/markdown-to-html": "~2.2.0",
|
|
45
45
|
"fs-extra": "~11.1.0",
|
|
46
46
|
"glob": "^10.3.10",
|
|
47
|
+
"image2uri": "^2.0.2",
|
|
47
48
|
"minimist": "~1.2.5",
|
|
48
49
|
"rehype-autolink-headings": "~6.1.0",
|
|
49
50
|
"rehype-document": "~6.1.0",
|
package/src/create.ts
CHANGED
|
@@ -10,6 +10,7 @@ import rehypeFormat from 'rehype-format';
|
|
|
10
10
|
import { githubCorners } from './nodes/github-corners';
|
|
11
11
|
import { githubCornersFork } from './nodes/github-corners-fork';
|
|
12
12
|
import { octiconLink } from './nodes/octiconLink';
|
|
13
|
+
import { imgBase64 as toBase64 } from './nodes/imgBase64';
|
|
13
14
|
import { markdownStyle } from './nodes/markdown-style';
|
|
14
15
|
import { copyElement, copyStyle, copyScript } from './nodes/copy';
|
|
15
16
|
import { darkMode } from './nodes/dark-mode';
|
|
@@ -23,7 +24,7 @@ import { MDToHTMLOptions } from './index';
|
|
|
23
24
|
export interface CreateOptions extends MDToHTMLOptions { }
|
|
24
25
|
|
|
25
26
|
export function create(options: MDToHTMLOptions = {}) {
|
|
26
|
-
const { markdown: string, document, corners = true, rewrite, reurls = {}, 'markdown-style-theme': markdownStyleTheme, 'dark-mode': darkModeTheme = true, 'markdown-style': wrapperStyle } = options;
|
|
27
|
+
const { markdown: string, document, 'img-base64': imgBase64 = false, corners = true, rewrite, reurls = {}, 'markdown-style-theme': markdownStyleTheme, 'dark-mode': darkModeTheme = true, 'markdown-style': wrapperStyle } = options;
|
|
27
28
|
const mdOptions: Options = {
|
|
28
29
|
hastNode: false,
|
|
29
30
|
remarkPlugins: [remarkGemoji],
|
|
@@ -61,6 +62,9 @@ export function create(options: MDToHTMLOptions = {}) {
|
|
|
61
62
|
});
|
|
62
63
|
}
|
|
63
64
|
}
|
|
65
|
+
if (node.type == 'element' && node.tagName === 'img' && imgBase64) {
|
|
66
|
+
node.properties = { ...node.properties, src: toBase64(node.properties.src as string) };
|
|
67
|
+
}
|
|
64
68
|
if (node.type == 'element' && /h(1|2|3|4|5|6)/.test(node.tagName) && node.children && Array.isArray(node.children) && node.children.length > 0) {
|
|
65
69
|
const child = node.children[0];
|
|
66
70
|
if (child && child.type === 'element' && child.properties) {
|
package/src/index.ts
CHANGED
|
@@ -44,6 +44,8 @@ export interface RunArgvs extends Omit<ParsedArgs, '_'> {
|
|
|
44
44
|
style?: string;
|
|
45
45
|
/** @example `(node_modules)` */
|
|
46
46
|
ignoreFile?: string;
|
|
47
|
+
/** Convert images in HTML to base64. @default `false` */
|
|
48
|
+
'img-base64'?: boolean;
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
export interface MDToHTMLOptions extends RunArgvs {
|
|
@@ -68,12 +70,13 @@ export function run(opts = {} as Omit<RunArgvs, '_'>) {
|
|
|
68
70
|
version: opts.v || opts.version || false,
|
|
69
71
|
help: opts.h || opts.help || false,
|
|
70
72
|
ignoreFile: opts.ignoreFile || '(node_modules)',
|
|
73
|
+
'img-base64': opts.imgBase64 ?? false,
|
|
71
74
|
source: opts.s || opts.source || 'README.md',
|
|
72
75
|
markdown: opts.markdown || '',
|
|
73
76
|
'markdown-style': 'max-width: 960px;',
|
|
74
77
|
description: opts.description || '',
|
|
75
78
|
corners: opts.corners || true,
|
|
76
|
-
output: opts.o || opts.output
|
|
79
|
+
output: opts.o || opts.output,
|
|
77
80
|
},
|
|
78
81
|
});
|
|
79
82
|
if (argvs.h || argvs.help) {
|
|
@@ -99,7 +102,7 @@ export function run(opts = {} as Omit<RunArgvs, '_'>) {
|
|
|
99
102
|
argvs.markdown = fs.readFileSync(path.resolve(argvs.source)).toString();
|
|
100
103
|
}
|
|
101
104
|
const options = formatConfig({ ...opts, ...argvs });
|
|
102
|
-
const output = path.resolve(argvs.output);
|
|
105
|
+
const output = path.resolve(argvs.output || 'index.html');
|
|
103
106
|
|
|
104
107
|
if (!Array.isArray(options.document.style)) options.document.style = [options.document.style].flat().filter(Boolean);
|
|
105
108
|
if (options.style) {
|
|
@@ -119,11 +122,18 @@ export function run(opts = {} as Omit<RunArgvs, '_'>) {
|
|
|
119
122
|
}
|
|
120
123
|
if (mdFilesPath.length > 0) {
|
|
121
124
|
mdFilesPath.forEach((mdFile) => {
|
|
122
|
-
|
|
123
|
-
|
|
125
|
+
options.markdown = fs.readFileSync(path.resolve(mdFile)).toString();
|
|
126
|
+
|
|
127
|
+
const htmlPath = path.resolve(mdFile.replace(/\.md$/i, '.html').replace(/README\.html$/i, 'index.html').replace(/README-(.*)\.html$/i, 'index-$1.html'));
|
|
128
|
+
const mdFilePath = path.resolve(
|
|
129
|
+
process.cwd(),
|
|
130
|
+
(argvs.output || 'dist') + htmlPath.replace(process.cwd(), '')
|
|
131
|
+
);
|
|
132
|
+
options.output = mdFilePath;
|
|
124
133
|
const strMarkdown = create({ ...argvs, ...options });
|
|
125
|
-
fs.
|
|
126
|
-
|
|
134
|
+
fs.ensureDirSync(path.dirname(options.output));
|
|
135
|
+
fs.writeFileSync(options.output, strMarkdown);
|
|
136
|
+
console.log(`\nmarkdown-to-html: \x1b[32;1m${path.relative(process.cwd(), options.output)}\x1b[0m\n`);
|
|
127
137
|
});
|
|
128
138
|
}
|
|
129
139
|
}
|
|
@@ -141,6 +151,7 @@ export const cliHelp: string = `\n Usage: markdown-to-html [options] [--help|h]
|
|
|
141
151
|
--keywords Define keywords for search engines.
|
|
142
152
|
--no-dark-mode Disable light and dark theme styles button.
|
|
143
153
|
--markdown Markdown string.
|
|
154
|
+
--img-base64 Convert images in HTML to base64.
|
|
144
155
|
--style Override default styles. css file path or css string.
|
|
145
156
|
--markdown-style-theme Setting markdown-style light/dark theme.
|
|
146
157
|
--markdown-style Markdown wrapper style.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import image2uri, { validUrl } from "image2uri";
|
|
3
|
+
import fs from 'fs-extra'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export function imgBase64(src?: string): string {
|
|
7
|
+
if (src && !validUrl(src) && /(png|apng|gif|jpg|jpeg|bm|bmp|webp|ico|svg)/i.test(src)) {
|
|
8
|
+
const imgPath = path.resolve(src);
|
|
9
|
+
if (fs.existsSync(imgPath)) {
|
|
10
|
+
const base64 = image2uri(imgPath);
|
|
11
|
+
if (base64 && typeof base64 === 'string') {
|
|
12
|
+
return base64;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return src;
|
|
17
|
+
}
|