convpdf 0.2.0

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.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -0
  3. package/dist/bin/convpdf.d.ts +3 -0
  4. package/dist/bin/convpdf.d.ts.map +1 -0
  5. package/dist/bin/convpdf.js +297 -0
  6. package/dist/bin/convpdf.js.map +1 -0
  7. package/dist/src/html/template.d.ts +10 -0
  8. package/dist/src/html/template.d.ts.map +1 -0
  9. package/dist/src/html/template.js +57 -0
  10. package/dist/src/html/template.js.map +1 -0
  11. package/dist/src/markdown/frontmatter.d.ts +3 -0
  12. package/dist/src/markdown/frontmatter.d.ts.map +1 -0
  13. package/dist/src/markdown/frontmatter.js +48 -0
  14. package/dist/src/markdown/frontmatter.js.map +1 -0
  15. package/dist/src/markdown/marked.d.ts +4 -0
  16. package/dist/src/markdown/marked.d.ts.map +1 -0
  17. package/dist/src/markdown/marked.js +82 -0
  18. package/dist/src/markdown/marked.js.map +1 -0
  19. package/dist/src/markdown/math.d.ts +7 -0
  20. package/dist/src/markdown/math.d.ts.map +1 -0
  21. package/dist/src/markdown/math.js +42 -0
  22. package/dist/src/markdown/math.js.map +1 -0
  23. package/dist/src/markdown/toc.d.ts +3 -0
  24. package/dist/src/markdown/toc.d.ts.map +1 -0
  25. package/dist/src/markdown/toc.js +29 -0
  26. package/dist/src/markdown/toc.js.map +1 -0
  27. package/dist/src/renderer.d.ts +17 -0
  28. package/dist/src/renderer.d.ts.map +1 -0
  29. package/dist/src/renderer.js +181 -0
  30. package/dist/src/renderer.js.map +1 -0
  31. package/dist/src/styles/default.css +147 -0
  32. package/dist/src/styles/github.css +118 -0
  33. package/dist/src/types.d.ts +40 -0
  34. package/dist/src/types.d.ts.map +1 -0
  35. package/dist/src/types.js +14 -0
  36. package/dist/src/types.js.map +1 -0
  37. package/dist/src/utils/html.d.ts +3 -0
  38. package/dist/src/utils/html.d.ts.map +1 -0
  39. package/dist/src/utils/html.js +24 -0
  40. package/dist/src/utils/html.js.map +1 -0
  41. package/dist/src/utils/validation.d.ts +6 -0
  42. package/dist/src/utils/validation.d.ts.map +1 -0
  43. package/dist/src/utils/validation.js +49 -0
  44. package/dist/src/utils/validation.js.map +1 -0
  45. package/package.json +82 -0
@@ -0,0 +1,118 @@
1
+ pre code.hljs {
2
+ display: block;
3
+ overflow-x: auto;
4
+ padding: 1em
5
+ }
6
+ code.hljs {
7
+ padding: 3px 5px
8
+ }
9
+ /*!
10
+ Theme: GitHub
11
+ Description: Light theme as seen on github.com
12
+ Author: github.com
13
+ Maintainer: @Hirse
14
+ Updated: 2021-05-15
15
+
16
+ Outdated base version: https://github.com/primer/github-syntax-light
17
+ Current colors taken from GitHub's CSS
18
+ */
19
+ .hljs {
20
+ color: #24292e;
21
+ background: #ffffff
22
+ }
23
+ .hljs-doctag,
24
+ .hljs-keyword,
25
+ .hljs-meta .hljs-keyword,
26
+ .hljs-template-tag,
27
+ .hljs-template-variable,
28
+ .hljs-type,
29
+ .hljs-variable.language_ {
30
+ /* prettylights-syntax-keyword */
31
+ color: #d73a49
32
+ }
33
+ .hljs-title,
34
+ .hljs-title.class_,
35
+ .hljs-title.class_.inherited__,
36
+ .hljs-title.function_ {
37
+ /* prettylights-syntax-entity */
38
+ color: #6f42c1
39
+ }
40
+ .hljs-attr,
41
+ .hljs-attribute,
42
+ .hljs-literal,
43
+ .hljs-meta,
44
+ .hljs-number,
45
+ .hljs-operator,
46
+ .hljs-variable,
47
+ .hljs-selector-attr,
48
+ .hljs-selector-class,
49
+ .hljs-selector-id {
50
+ /* prettylights-syntax-constant */
51
+ color: #005cc5
52
+ }
53
+ .hljs-regexp,
54
+ .hljs-string,
55
+ .hljs-meta .hljs-string {
56
+ /* prettylights-syntax-string */
57
+ color: #032f62
58
+ }
59
+ .hljs-built_in,
60
+ .hljs-symbol {
61
+ /* prettylights-syntax-variable */
62
+ color: #e36209
63
+ }
64
+ .hljs-comment,
65
+ .hljs-code,
66
+ .hljs-formula {
67
+ /* prettylights-syntax-comment */
68
+ color: #6a737d
69
+ }
70
+ .hljs-name,
71
+ .hljs-quote,
72
+ .hljs-selector-tag,
73
+ .hljs-selector-pseudo {
74
+ /* prettylights-syntax-entity-tag */
75
+ color: #22863a
76
+ }
77
+ .hljs-subst {
78
+ /* prettylights-syntax-storage-modifier-import */
79
+ color: #24292e
80
+ }
81
+ .hljs-section {
82
+ /* prettylights-syntax-markup-heading */
83
+ color: #005cc5;
84
+ font-weight: bold
85
+ }
86
+ .hljs-bullet {
87
+ /* prettylights-syntax-markup-list */
88
+ color: #735c0f
89
+ }
90
+ .hljs-emphasis {
91
+ /* prettylights-syntax-markup-italic */
92
+ color: #24292e;
93
+ font-style: italic
94
+ }
95
+ .hljs-strong {
96
+ /* prettylights-syntax-markup-bold */
97
+ color: #24292e;
98
+ font-weight: bold
99
+ }
100
+ .hljs-addition {
101
+ /* prettylights-syntax-markup-inserted */
102
+ color: #22863a;
103
+ background-color: #f0fff4
104
+ }
105
+ .hljs-deletion {
106
+ /* prettylights-syntax-markup-deleted */
107
+ color: #b31d28;
108
+ background-color: #ffeef0
109
+ }
110
+ .hljs-char.escape_,
111
+ .hljs-link,
112
+ .hljs-params,
113
+ .hljs-property,
114
+ .hljs-punctuation,
115
+ .hljs-tag {
116
+ /* purposely ignored */
117
+
118
+ }
@@ -0,0 +1,40 @@
1
+ import type { Tokens } from 'marked';
2
+ export declare const PAPER_FORMATS: readonly ["Letter", "Legal", "Tabloid", "Ledger", "A0", "A1", "A2", "A3", "A4", "A5", "A6"];
3
+ export type PaperFormat = (typeof PAPER_FORMATS)[number];
4
+ export type PaperFormatInput = PaperFormat | Lowercase<PaperFormat>;
5
+ export interface RendererOptions {
6
+ margin?: string;
7
+ format?: PaperFormatInput;
8
+ toc?: boolean;
9
+ tocDepth?: number;
10
+ math?: boolean;
11
+ customCss?: string | null;
12
+ template?: string | null;
13
+ headerTemplate?: string | null;
14
+ footerTemplate?: string | null;
15
+ basePath?: string;
16
+ title?: string;
17
+ }
18
+ export interface Frontmatter {
19
+ title?: string;
20
+ toc?: boolean;
21
+ tocDepth?: number;
22
+ [key: string]: unknown;
23
+ }
24
+ export interface FrontmatterParseResult {
25
+ data: Frontmatter;
26
+ content: string;
27
+ warnings: string[];
28
+ }
29
+ export interface TocHeading {
30
+ level: number;
31
+ text: string;
32
+ id: string;
33
+ }
34
+ export type CustomToken = Tokens.Generic & {
35
+ id?: string;
36
+ tokens?: CustomToken[];
37
+ depth?: number;
38
+ text?: string;
39
+ };
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,eAAO,MAAM,aAAa,6FAYhB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,GAAG;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const PAPER_FORMATS = [
2
+ 'Letter',
3
+ 'Legal',
4
+ 'Tabloid',
5
+ 'Ledger',
6
+ 'A0',
7
+ 'A1',
8
+ 'A2',
9
+ 'A3',
10
+ 'A4',
11
+ 'A5',
12
+ 'A6'
13
+ ];
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ;IACR,OAAO;IACP,SAAS;IACT,QAAQ;IACR,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACI,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const escapeHtml: (value: string) => string;
2
+ export declare const sanitizeHref: (href: string) => string;
3
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/utils/html.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MACyB,CAAC;AAErE,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAW3C,CAAC"}
@@ -0,0 +1,24 @@
1
+ const HTML_ESCAPE_MAP = {
2
+ '&': '&amp;',
3
+ '<': '&lt;',
4
+ '>': '&gt;',
5
+ '"': '&quot;',
6
+ "'": '&#39;'
7
+ };
8
+ export const escapeHtml = (value) => value.replace(/[&<>"']/g, (char) => HTML_ESCAPE_MAP[char] ?? char);
9
+ export const sanitizeHref = (href) => {
10
+ const trimmed = href.trim();
11
+ if (!trimmed)
12
+ return '#';
13
+ if (trimmed.startsWith('#'))
14
+ return trimmed;
15
+ // Allow relative links and common safe protocols only.
16
+ if (/^(\/|\.\/|\.\.\/)/.test(trimmed))
17
+ return trimmed;
18
+ if (/^(https?:|mailto:|tel:|file:)/i.test(trimmed))
19
+ return trimmed;
20
+ if (!/^[a-z][a-z\d+\-.]*:/i.test(trimmed))
21
+ return trimmed;
22
+ return '#';
23
+ };
24
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/utils/html.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAA2B;IAC9C,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,OAAO;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAClD,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IACzB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAE5C,uDAAuD;IACvD,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACtD,IAAI,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACnE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAE1D,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PDFMargin } from 'puppeteer';
2
+ import { type PaperFormat } from '../types.js';
3
+ export declare const parseMargin: (rawMargin?: string) => PDFMargin;
4
+ export declare const normalizePaperFormat: (input?: string) => PaperFormat;
5
+ export declare const normalizeTocDepth: (input?: number) => number;
6
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAO9D,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,SAkChD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,KAAG,WASrD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MASlD,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { PAPER_FORMATS } from '../types.js';
2
+ const VALID_MARGIN = /^\d*\.?\d+(px|in|cm|mm|pc|pt)?$/i;
3
+ const FORMAT_LOOKUP = new Map(PAPER_FORMATS.map((value) => [value.toLowerCase(), value]));
4
+ export const parseMargin = (rawMargin) => {
5
+ const margin = rawMargin?.trim() || '20mm';
6
+ const parts = margin.split(/\s+/).filter(Boolean);
7
+ if (parts.length < 1 || parts.length > 4) {
8
+ throw new Error(`Invalid margin value "${rawMargin}". Use 1 to 4 CSS length values, e.g. "20mm" or "10mm 12mm".`);
9
+ }
10
+ for (const part of parts) {
11
+ if (!VALID_MARGIN.test(part)) {
12
+ throw new Error(`Invalid margin token "${part}". Expected numeric value with optional unit (mm, cm, in, px, pt, pc).`);
13
+ }
14
+ }
15
+ if (parts.length === 1) {
16
+ const [all] = parts;
17
+ return { top: all, right: all, bottom: all, left: all };
18
+ }
19
+ if (parts.length === 2) {
20
+ const [vertical, horizontal] = parts;
21
+ return { top: vertical, right: horizontal, bottom: vertical, left: horizontal };
22
+ }
23
+ if (parts.length === 3) {
24
+ const [top, horizontal, bottom] = parts;
25
+ return { top, right: horizontal, bottom, left: horizontal };
26
+ }
27
+ const [top, right, bottom, left] = parts;
28
+ return { top, right, bottom, left };
29
+ };
30
+ export const normalizePaperFormat = (input) => {
31
+ const value = input?.trim() || 'A4';
32
+ const normalized = FORMAT_LOOKUP.get(value.toLowerCase());
33
+ if (!normalized) {
34
+ throw new Error(`Invalid paper format "${value}". Allowed formats: ${PAPER_FORMATS.join(', ')}.`);
35
+ }
36
+ return normalized;
37
+ };
38
+ export const normalizeTocDepth = (input) => {
39
+ if (input === undefined)
40
+ return 6;
41
+ if (!Number.isInteger(input)) {
42
+ throw new Error(`Invalid TOC depth "${String(input)}". Expected an integer from 1 to 6.`);
43
+ }
44
+ if (input < 1 || input > 6) {
45
+ throw new Error(`Invalid TOC depth "${input}". Expected a value between 1 and 6.`);
46
+ }
47
+ return input;
48
+ };
49
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "convpdf",
3
+ "version": "0.2.0",
4
+ "license": "MIT",
5
+ "description": "Convert Markdown to high-quality PDF",
6
+ "type": "module",
7
+ "engines": {
8
+ "node": ">=20"
9
+ },
10
+ "bin": {
11
+ "convpdf": "./dist/bin/convpdf.js"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "import": "./dist/src/renderer.js",
16
+ "types": "./dist/src/renderer.d.ts"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "keywords": [
25
+ "markdown",
26
+ "pdf",
27
+ "converter",
28
+ "puppeteer",
29
+ "cli"
30
+ ],
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/mohamed-chs/convpdf.git"
34
+ },
35
+ "homepage": "https://github.com/mohamed-chs/convpdf#readme",
36
+ "scripts": {
37
+ "clean": "node scripts/clean.mjs",
38
+ "typecheck": "tsc -p tsconfig.json",
39
+ "build": "npm run clean && tsc -p tsconfig.build.json && node scripts/copy-styles.mjs",
40
+ "test": "vitest run",
41
+ "test:unit": "vitest run tests/unit.test.ts",
42
+ "test:cli": "vitest run tests/cli.test.ts",
43
+ "test:coverage": "vitest run --coverage",
44
+ "lint": "eslint .",
45
+ "lint:fix": "eslint . --fix",
46
+ "format": "prettier --write .",
47
+ "format:check": "prettier --check .",
48
+ "ci": "npm run typecheck && npm run lint && npm run format:check && npm run build && npm test",
49
+ "release": "bash scripts/release.sh",
50
+ "release:dry-run": "bash scripts/release-dry-run.sh",
51
+ "prepublishOnly": "npm run ci",
52
+ "dev": "tsx bin/convpdf.ts"
53
+ },
54
+ "dependencies": {
55
+ "chalk": "^5.6.2",
56
+ "chokidar": "^5.0.0",
57
+ "commander": "^14.0.3",
58
+ "github-slugger": "^2.0.0",
59
+ "glob": "^13.0.2",
60
+ "highlight.js": "^11.11.1",
61
+ "js-yaml": "^4.1.1",
62
+ "marked": "^17.0.1",
63
+ "marked-footnote": "^1.4.0",
64
+ "marked-gfm-heading-id": "^4.1.3",
65
+ "marked-highlight": "^2.2.3",
66
+ "puppeteer": "^24.37.2"
67
+ },
68
+ "devDependencies": {
69
+ "@eslint/js": "^9.39.2",
70
+ "@types/js-yaml": "^4.0.9",
71
+ "@types/node": "^25.2.3",
72
+ "@vitest/coverage-v8": "^4.0.18",
73
+ "eslint": "^9.39.2",
74
+ "eslint-config-prettier": "^10.1.8",
75
+ "globals": "^17.3.0",
76
+ "prettier": "^3.8.1",
77
+ "tsx": "^4.21.0",
78
+ "typescript": "^5.9.3",
79
+ "typescript-eslint": "^8.55.0",
80
+ "vitest": "^4.0.18"
81
+ }
82
+ }