screenitshot 0.5.0 → 0.6.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.
- package/dist/cli.js +3 -2
- package/dist/cli.js.map +1 -1
- package/dist/detector.d.ts.map +1 -1
- package/dist/detector.js +88 -0
- package/dist/detector.js.map +1 -1
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +46 -6
- package/dist/renderer.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/cli.ts +3 -2
- package/src/detector.ts +88 -0
- package/src/renderer.ts +53 -6
- package/src/types.ts +2 -1
package/dist/cli.js
CHANGED
|
@@ -15,8 +15,8 @@ program
|
|
|
15
15
|
.argument('<input>', 'Input file path')
|
|
16
16
|
.argument('[output]', 'Output image path')
|
|
17
17
|
.option('-f, --format <format>', 'Output image format (png, jpeg, webp)', 'png')
|
|
18
|
-
.option('-w, --width <width>', 'Viewport width', '
|
|
19
|
-
.option('-h, --height <height>', 'Viewport height', '
|
|
18
|
+
.option('-w, --width <width>', 'Viewport width', '1280')
|
|
19
|
+
.option('-h, --height <height>', 'Viewport height', '960')
|
|
20
20
|
.option('-p, --page <page>', 'Page number for multi-page documents', '1')
|
|
21
21
|
.action(async (input, output, options) => {
|
|
22
22
|
try {
|
|
@@ -29,6 +29,7 @@ program
|
|
|
29
29
|
page: parseInt(options.page),
|
|
30
30
|
});
|
|
31
31
|
console.log(`✓ Screenshot saved to ${result.path}`);
|
|
32
|
+
console.log(` Renderer: ${result.renderer}`);
|
|
32
33
|
console.log(` Format: ${result.format}`);
|
|
33
34
|
console.log(` Size: ${result.width}x${result.height}`);
|
|
34
35
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC/D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;KACtC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;KACzC,MAAM,CAAC,uBAAuB,EAAE,uCAAuC,EAAE,KAAK,CAAC;KAC/E,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/detector.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAoHxE"}
|
package/dist/detector.js
CHANGED
|
@@ -9,6 +9,94 @@ export async function detectFormat(filePath) {
|
|
|
9
9
|
'.docx': 'docx',
|
|
10
10
|
'.xlsx': 'xlsx',
|
|
11
11
|
'.pptx': 'pptx',
|
|
12
|
+
'.md': 'md',
|
|
13
|
+
'.markdown': 'md',
|
|
14
|
+
'.html': 'html',
|
|
15
|
+
'.htm': 'html',
|
|
16
|
+
'.csv': 'csv',
|
|
17
|
+
'.tsv': 'csv',
|
|
18
|
+
'.rtf': 'rtf',
|
|
19
|
+
'.ipynb': 'ipynb',
|
|
20
|
+
'.tex': 'tex',
|
|
21
|
+
'.latex': 'tex',
|
|
22
|
+
// Source code extensions
|
|
23
|
+
'.js': 'code',
|
|
24
|
+
'.jsx': 'code',
|
|
25
|
+
'.ts': 'code',
|
|
26
|
+
'.tsx': 'code',
|
|
27
|
+
'.py': 'code',
|
|
28
|
+
'.rb': 'code',
|
|
29
|
+
'.java': 'code',
|
|
30
|
+
'.c': 'code',
|
|
31
|
+
'.cpp': 'code',
|
|
32
|
+
'.cc': 'code',
|
|
33
|
+
'.cxx': 'code',
|
|
34
|
+
'.h': 'code',
|
|
35
|
+
'.hpp': 'code',
|
|
36
|
+
'.cs': 'code',
|
|
37
|
+
'.go': 'code',
|
|
38
|
+
'.rs': 'code',
|
|
39
|
+
'.swift': 'code',
|
|
40
|
+
'.kt': 'code',
|
|
41
|
+
'.kts': 'code',
|
|
42
|
+
'.scala': 'code',
|
|
43
|
+
'.php': 'code',
|
|
44
|
+
'.sh': 'code',
|
|
45
|
+
'.bash': 'code',
|
|
46
|
+
'.zsh': 'code',
|
|
47
|
+
'.fish': 'code',
|
|
48
|
+
'.ps1': 'code',
|
|
49
|
+
'.sql': 'code',
|
|
50
|
+
'.json': 'code',
|
|
51
|
+
'.yaml': 'code',
|
|
52
|
+
'.yml': 'code',
|
|
53
|
+
'.xml': 'code',
|
|
54
|
+
'.css': 'code',
|
|
55
|
+
'.scss': 'code',
|
|
56
|
+
'.sass': 'code',
|
|
57
|
+
'.less': 'code',
|
|
58
|
+
'.vue': 'code',
|
|
59
|
+
'.svelte': 'code',
|
|
60
|
+
'.r': 'code',
|
|
61
|
+
'.lua': 'code',
|
|
62
|
+
'.perl': 'code',
|
|
63
|
+
'.pl': 'code',
|
|
64
|
+
'.ex': 'code',
|
|
65
|
+
'.exs': 'code',
|
|
66
|
+
'.erl': 'code',
|
|
67
|
+
'.hs': 'code',
|
|
68
|
+
'.ml': 'code',
|
|
69
|
+
'.fs': 'code',
|
|
70
|
+
'.fsx': 'code',
|
|
71
|
+
'.clj': 'code',
|
|
72
|
+
'.cljs': 'code',
|
|
73
|
+
'.dart': 'code',
|
|
74
|
+
'.zig': 'code',
|
|
75
|
+
'.nim': 'code',
|
|
76
|
+
'.v': 'code',
|
|
77
|
+
'.toml': 'code',
|
|
78
|
+
'.ini': 'code',
|
|
79
|
+
'.conf': 'code',
|
|
80
|
+
'.graphql': 'code',
|
|
81
|
+
'.gql': 'code',
|
|
82
|
+
'.proto': 'code',
|
|
83
|
+
'.tf': 'code',
|
|
84
|
+
'.hcl': 'code',
|
|
85
|
+
'.asm': 'code',
|
|
86
|
+
'.s': 'code',
|
|
87
|
+
'.diff': 'code',
|
|
88
|
+
'.patch': 'code',
|
|
89
|
+
'.mdx': 'code',
|
|
90
|
+
'.astro': 'code',
|
|
91
|
+
// URL file extension
|
|
92
|
+
'.url': 'url',
|
|
93
|
+
// Mermaid diagram extension
|
|
94
|
+
'.mmd': 'mmd',
|
|
95
|
+
'.mermaid': 'mmd',
|
|
96
|
+
// GeoJSON extension
|
|
97
|
+
'.geojson': 'geojson',
|
|
98
|
+
// GPX extension
|
|
99
|
+
'.gpx': 'gpx',
|
|
12
100
|
};
|
|
13
101
|
if (ext in extensionMap) {
|
|
14
102
|
return extensionMap[ext];
|
package/dist/detector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5C,kCAAkC;IAClC,MAAM,YAAY,GAA+B;QAC/C,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"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"}
|
package/dist/renderer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKlF,qBAAa,QAAQ;IACnB,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKlF,qBAAa,QAAQ;IACnB,OAAO,CAAC,eAAe;YA4BT,kBAAkB;IAe1B,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC;CAqJ7B"}
|
package/dist/renderer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { chromium } from 'playwright';
|
|
2
2
|
import { readFile } from 'fs/promises';
|
|
3
|
-
import { resolve, dirname } from 'path';
|
|
3
|
+
import { resolve, dirname, basename } from 'path';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = dirname(__filename);
|
|
@@ -12,6 +12,17 @@ export class Renderer {
|
|
|
12
12
|
docx: resolve(__dirname, '../templates/docx.html'),
|
|
13
13
|
xlsx: resolve(__dirname, '../templates/xlsx.html'),
|
|
14
14
|
pptx: resolve(__dirname, '../templates/pptx.html'),
|
|
15
|
+
md: resolve(__dirname, '../templates/md.html'),
|
|
16
|
+
html: resolve(__dirname, '../templates/html.html'),
|
|
17
|
+
csv: resolve(__dirname, '../templates/csv.html'),
|
|
18
|
+
rtf: resolve(__dirname, '../templates/rtf.html'),
|
|
19
|
+
ipynb: resolve(__dirname, '../templates/ipynb.html'),
|
|
20
|
+
tex: resolve(__dirname, '../templates/tex.html'),
|
|
21
|
+
code: resolve(__dirname, '../templates/code.html'),
|
|
22
|
+
url: resolve(__dirname, '../templates/url.html'),
|
|
23
|
+
mmd: resolve(__dirname, '../templates/mmd.html'),
|
|
24
|
+
geojson: resolve(__dirname, '../templates/geojson.html'),
|
|
25
|
+
gpx: resolve(__dirname, '../templates/gpx.html'),
|
|
15
26
|
unknown: '',
|
|
16
27
|
};
|
|
17
28
|
const path = templateMap[format];
|
|
@@ -20,13 +31,14 @@ export class Renderer {
|
|
|
20
31
|
}
|
|
21
32
|
return path;
|
|
22
33
|
}
|
|
23
|
-
async injectDataIntoPage(page, fileBase64, pageNumber = 1) {
|
|
34
|
+
async injectDataIntoPage(page, fileBase64, pageNumber = 1, fileName = '') {
|
|
24
35
|
// Inject data into page globals before template loads
|
|
25
|
-
await page.addInitScript(({ fileBase64: fb64, pageNum }) => {
|
|
36
|
+
await page.addInitScript(({ fileBase64: fb64, pageNum, fName }) => {
|
|
26
37
|
// Override the placeholder values
|
|
27
38
|
globalThis.fileBase64 = fb64;
|
|
28
39
|
globalThis.pageNumber = pageNum;
|
|
29
|
-
|
|
40
|
+
globalThis.fileName = fName;
|
|
41
|
+
}, { fileBase64, pageNum: pageNumber, fName: fileName });
|
|
30
42
|
}
|
|
31
43
|
async render(inputPath, format, options = {}) {
|
|
32
44
|
const { output, format: imageFormat = 'png', width, height, page: pageNumber = 1, } = options;
|
|
@@ -46,11 +58,38 @@ export class Renderer {
|
|
|
46
58
|
viewport: { width: initialWidth, height: initialHeight },
|
|
47
59
|
deviceScaleFactor,
|
|
48
60
|
});
|
|
61
|
+
// Special handling for URL format - navigate directly to the URL
|
|
62
|
+
if (format === 'url') {
|
|
63
|
+
// Read URL from file (file contains just the URL string)
|
|
64
|
+
const fileData = await readFile(inputPath);
|
|
65
|
+
const url = fileData.toString('utf-8').trim();
|
|
66
|
+
// Set a reasonable viewport for webpage screenshots
|
|
67
|
+
const webWidth = width || 1280;
|
|
68
|
+
const webHeight = height || 800;
|
|
69
|
+
await page.setViewportSize({ width: webWidth, height: webHeight });
|
|
70
|
+
// Navigate to URL and wait for network idle
|
|
71
|
+
await page.goto(url, { waitUntil: 'networkidle' });
|
|
72
|
+
// Take screenshot
|
|
73
|
+
await page.screenshot({
|
|
74
|
+
path: outputPath,
|
|
75
|
+
type: imageFormat,
|
|
76
|
+
fullPage: false,
|
|
77
|
+
});
|
|
78
|
+
await browser.close();
|
|
79
|
+
return {
|
|
80
|
+
path: outputPath,
|
|
81
|
+
format: imageFormat,
|
|
82
|
+
width: webWidth * deviceScaleFactor,
|
|
83
|
+
height: webHeight * deviceScaleFactor,
|
|
84
|
+
renderer: format,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
49
87
|
// Read and encode file as base64
|
|
50
88
|
const fileData = await readFile(inputPath);
|
|
51
89
|
const fileBase64 = fileData.toString('base64');
|
|
52
|
-
// Inject data before loading template
|
|
53
|
-
|
|
90
|
+
// Inject data before loading template (include filename for code format)
|
|
91
|
+
const fileName = basename(inputPath);
|
|
92
|
+
await this.injectDataIntoPage(page, fileBase64, pageNumber, fileName);
|
|
54
93
|
// Load template
|
|
55
94
|
const templatePath = this.getTemplatePath(format);
|
|
56
95
|
await page.goto(`file://${templatePath}`);
|
|
@@ -112,6 +151,7 @@ export class Renderer {
|
|
|
112
151
|
format: imageFormat,
|
|
113
152
|
width: actualWidth,
|
|
114
153
|
height: actualHeight,
|
|
154
|
+
renderer: format,
|
|
115
155
|
};
|
|
116
156
|
}
|
|
117
157
|
catch (error) {
|
package/dist/renderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface ScreenshotResult {
|
|
|
10
10
|
format: string;
|
|
11
11
|
width: number;
|
|
12
12
|
height: number;
|
|
13
|
+
renderer: string;
|
|
13
14
|
}
|
|
14
15
|
export interface RenderMetadata {
|
|
15
16
|
width: number;
|
|
@@ -18,5 +19,5 @@ export interface RenderMetadata {
|
|
|
18
19
|
pageNumber: number;
|
|
19
20
|
scale: number;
|
|
20
21
|
}
|
|
21
|
-
export type FileFormat = 'pdf' | 'epub' | 'docx' | 'xlsx' | 'pptx' | 'unknown';
|
|
22
|
+
export type FileFormat = 'pdf' | 'epub' | 'docx' | 'xlsx' | 'pptx' | 'md' | 'html' | 'csv' | 'rtf' | 'ipynb' | 'tex' | 'code' | 'url' | 'mmd' | 'geojson' | 'gpx' | 'unknown';
|
|
22
23
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "screenitshot",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Convert various file formats to high-quality screenshots",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"type": "module",
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "tsc && npm run copy-templates",
|
|
13
|
-
"copy-templates": "mkdir -p templates && cp ../render/dist
|
|
13
|
+
"copy-templates": "mkdir -p templates && cp ../render/dist/*.html templates/",
|
|
14
14
|
"dev": "tsc --watch",
|
|
15
15
|
"start": "npm run build && node dist/cli.js",
|
|
16
16
|
"lint": "eslint \"src/**/*.ts\"",
|
package/src/cli.ts
CHANGED
|
@@ -22,8 +22,8 @@ program
|
|
|
22
22
|
.argument('<input>', 'Input file path')
|
|
23
23
|
.argument('[output]', 'Output image path')
|
|
24
24
|
.option('-f, --format <format>', 'Output image format (png, jpeg, webp)', 'png')
|
|
25
|
-
.option('-w, --width <width>', 'Viewport width', '
|
|
26
|
-
.option('-h, --height <height>', 'Viewport height', '
|
|
25
|
+
.option('-w, --width <width>', 'Viewport width', '1280')
|
|
26
|
+
.option('-h, --height <height>', 'Viewport height', '960')
|
|
27
27
|
.option('-p, --page <page>', 'Page number for multi-page documents', '1')
|
|
28
28
|
.action(async (input: string, output: string | undefined, options: any) => {
|
|
29
29
|
try {
|
|
@@ -38,6 +38,7 @@ program
|
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
console.log(`✓ Screenshot saved to ${result.path}`);
|
|
41
|
+
console.log(` Renderer: ${result.renderer}`);
|
|
41
42
|
console.log(` Format: ${result.format}`);
|
|
42
43
|
console.log(` Size: ${result.width}x${result.height}`);
|
|
43
44
|
} catch (error) {
|
package/src/detector.ts
CHANGED
|
@@ -12,6 +12,94 @@ export async function detectFormat(filePath: string): Promise<FileFormat> {
|
|
|
12
12
|
'.docx': 'docx',
|
|
13
13
|
'.xlsx': 'xlsx',
|
|
14
14
|
'.pptx': 'pptx',
|
|
15
|
+
'.md': 'md',
|
|
16
|
+
'.markdown': 'md',
|
|
17
|
+
'.html': 'html',
|
|
18
|
+
'.htm': 'html',
|
|
19
|
+
'.csv': 'csv',
|
|
20
|
+
'.tsv': 'csv',
|
|
21
|
+
'.rtf': 'rtf',
|
|
22
|
+
'.ipynb': 'ipynb',
|
|
23
|
+
'.tex': 'tex',
|
|
24
|
+
'.latex': 'tex',
|
|
25
|
+
// Source code extensions
|
|
26
|
+
'.js': 'code',
|
|
27
|
+
'.jsx': 'code',
|
|
28
|
+
'.ts': 'code',
|
|
29
|
+
'.tsx': 'code',
|
|
30
|
+
'.py': 'code',
|
|
31
|
+
'.rb': 'code',
|
|
32
|
+
'.java': 'code',
|
|
33
|
+
'.c': 'code',
|
|
34
|
+
'.cpp': 'code',
|
|
35
|
+
'.cc': 'code',
|
|
36
|
+
'.cxx': 'code',
|
|
37
|
+
'.h': 'code',
|
|
38
|
+
'.hpp': 'code',
|
|
39
|
+
'.cs': 'code',
|
|
40
|
+
'.go': 'code',
|
|
41
|
+
'.rs': 'code',
|
|
42
|
+
'.swift': 'code',
|
|
43
|
+
'.kt': 'code',
|
|
44
|
+
'.kts': 'code',
|
|
45
|
+
'.scala': 'code',
|
|
46
|
+
'.php': 'code',
|
|
47
|
+
'.sh': 'code',
|
|
48
|
+
'.bash': 'code',
|
|
49
|
+
'.zsh': 'code',
|
|
50
|
+
'.fish': 'code',
|
|
51
|
+
'.ps1': 'code',
|
|
52
|
+
'.sql': 'code',
|
|
53
|
+
'.json': 'code',
|
|
54
|
+
'.yaml': 'code',
|
|
55
|
+
'.yml': 'code',
|
|
56
|
+
'.xml': 'code',
|
|
57
|
+
'.css': 'code',
|
|
58
|
+
'.scss': 'code',
|
|
59
|
+
'.sass': 'code',
|
|
60
|
+
'.less': 'code',
|
|
61
|
+
'.vue': 'code',
|
|
62
|
+
'.svelte': 'code',
|
|
63
|
+
'.r': 'code',
|
|
64
|
+
'.lua': 'code',
|
|
65
|
+
'.perl': 'code',
|
|
66
|
+
'.pl': 'code',
|
|
67
|
+
'.ex': 'code',
|
|
68
|
+
'.exs': 'code',
|
|
69
|
+
'.erl': 'code',
|
|
70
|
+
'.hs': 'code',
|
|
71
|
+
'.ml': 'code',
|
|
72
|
+
'.fs': 'code',
|
|
73
|
+
'.fsx': 'code',
|
|
74
|
+
'.clj': 'code',
|
|
75
|
+
'.cljs': 'code',
|
|
76
|
+
'.dart': 'code',
|
|
77
|
+
'.zig': 'code',
|
|
78
|
+
'.nim': 'code',
|
|
79
|
+
'.v': 'code',
|
|
80
|
+
'.toml': 'code',
|
|
81
|
+
'.ini': 'code',
|
|
82
|
+
'.conf': 'code',
|
|
83
|
+
'.graphql': 'code',
|
|
84
|
+
'.gql': 'code',
|
|
85
|
+
'.proto': 'code',
|
|
86
|
+
'.tf': 'code',
|
|
87
|
+
'.hcl': 'code',
|
|
88
|
+
'.asm': 'code',
|
|
89
|
+
'.s': 'code',
|
|
90
|
+
'.diff': 'code',
|
|
91
|
+
'.patch': 'code',
|
|
92
|
+
'.mdx': 'code',
|
|
93
|
+
'.astro': 'code',
|
|
94
|
+
// URL file extension
|
|
95
|
+
'.url': 'url',
|
|
96
|
+
// Mermaid diagram extension
|
|
97
|
+
'.mmd': 'mmd',
|
|
98
|
+
'.mermaid': 'mmd',
|
|
99
|
+
// GeoJSON extension
|
|
100
|
+
'.geojson': 'geojson',
|
|
101
|
+
// GPX extension
|
|
102
|
+
'.gpx': 'gpx',
|
|
15
103
|
};
|
|
16
104
|
|
|
17
105
|
if (ext in extensionMap) {
|
package/src/renderer.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { chromium, type Page } from 'playwright';
|
|
2
2
|
import { readFile } from 'fs/promises';
|
|
3
|
-
import { resolve, dirname } from 'path';
|
|
3
|
+
import { resolve, dirname, basename } from 'path';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
import type { FileFormat, ScreenshotOptions, ScreenshotResult } from './types.js';
|
|
6
6
|
|
|
@@ -15,6 +15,17 @@ export class Renderer {
|
|
|
15
15
|
docx: resolve(__dirname, '../templates/docx.html'),
|
|
16
16
|
xlsx: resolve(__dirname, '../templates/xlsx.html'),
|
|
17
17
|
pptx: resolve(__dirname, '../templates/pptx.html'),
|
|
18
|
+
md: resolve(__dirname, '../templates/md.html'),
|
|
19
|
+
html: resolve(__dirname, '../templates/html.html'),
|
|
20
|
+
csv: resolve(__dirname, '../templates/csv.html'),
|
|
21
|
+
rtf: resolve(__dirname, '../templates/rtf.html'),
|
|
22
|
+
ipynb: resolve(__dirname, '../templates/ipynb.html'),
|
|
23
|
+
tex: resolve(__dirname, '../templates/tex.html'),
|
|
24
|
+
code: resolve(__dirname, '../templates/code.html'),
|
|
25
|
+
url: resolve(__dirname, '../templates/url.html'),
|
|
26
|
+
mmd: resolve(__dirname, '../templates/mmd.html'),
|
|
27
|
+
geojson: resolve(__dirname, '../templates/geojson.html'),
|
|
28
|
+
gpx: resolve(__dirname, '../templates/gpx.html'),
|
|
18
29
|
unknown: '',
|
|
19
30
|
};
|
|
20
31
|
|
|
@@ -28,14 +39,16 @@ export class Renderer {
|
|
|
28
39
|
private async injectDataIntoPage(
|
|
29
40
|
page: Page,
|
|
30
41
|
fileBase64: string,
|
|
31
|
-
pageNumber: number = 1
|
|
42
|
+
pageNumber: number = 1,
|
|
43
|
+
fileName: string = ''
|
|
32
44
|
): Promise<void> {
|
|
33
45
|
// Inject data into page globals before template loads
|
|
34
|
-
await page.addInitScript(({ fileBase64: fb64, pageNum }: { fileBase64: string; pageNum: number }) => {
|
|
46
|
+
await page.addInitScript(({ fileBase64: fb64, pageNum, fName }: { fileBase64: string; pageNum: number; fName: string }) => {
|
|
35
47
|
// Override the placeholder values
|
|
36
48
|
(globalThis as any).fileBase64 = fb64;
|
|
37
49
|
(globalThis as any).pageNumber = pageNum;
|
|
38
|
-
|
|
50
|
+
(globalThis as any).fileName = fName;
|
|
51
|
+
}, { fileBase64, pageNum: pageNumber, fName: fileName });
|
|
39
52
|
}
|
|
40
53
|
|
|
41
54
|
async render(
|
|
@@ -72,12 +85,45 @@ export class Renderer {
|
|
|
72
85
|
deviceScaleFactor,
|
|
73
86
|
});
|
|
74
87
|
|
|
88
|
+
// Special handling for URL format - navigate directly to the URL
|
|
89
|
+
if (format === 'url') {
|
|
90
|
+
// Read URL from file (file contains just the URL string)
|
|
91
|
+
const fileData = await readFile(inputPath);
|
|
92
|
+
const url = fileData.toString('utf-8').trim();
|
|
93
|
+
|
|
94
|
+
// Set a reasonable viewport for webpage screenshots
|
|
95
|
+
const webWidth = width || 1280;
|
|
96
|
+
const webHeight = height || 800;
|
|
97
|
+
await page.setViewportSize({ width: webWidth, height: webHeight });
|
|
98
|
+
|
|
99
|
+
// Navigate to URL and wait for network idle
|
|
100
|
+
await page.goto(url, { waitUntil: 'networkidle' });
|
|
101
|
+
|
|
102
|
+
// Take screenshot
|
|
103
|
+
await page.screenshot({
|
|
104
|
+
path: outputPath,
|
|
105
|
+
type: imageFormat as 'png' | 'jpeg',
|
|
106
|
+
fullPage: false,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
await browser.close();
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
path: outputPath,
|
|
113
|
+
format: imageFormat,
|
|
114
|
+
width: webWidth * deviceScaleFactor,
|
|
115
|
+
height: webHeight * deviceScaleFactor,
|
|
116
|
+
renderer: format,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
75
120
|
// Read and encode file as base64
|
|
76
121
|
const fileData = await readFile(inputPath);
|
|
77
122
|
const fileBase64 = fileData.toString('base64');
|
|
78
123
|
|
|
79
|
-
// Inject data before loading template
|
|
80
|
-
|
|
124
|
+
// Inject data before loading template (include filename for code format)
|
|
125
|
+
const fileName = basename(inputPath);
|
|
126
|
+
await this.injectDataIntoPage(page, fileBase64, pageNumber, fileName);
|
|
81
127
|
|
|
82
128
|
// Load template
|
|
83
129
|
const templatePath = this.getTemplatePath(format);
|
|
@@ -151,6 +197,7 @@ export class Renderer {
|
|
|
151
197
|
format: imageFormat,
|
|
152
198
|
width: actualWidth,
|
|
153
199
|
height: actualHeight,
|
|
200
|
+
renderer: format,
|
|
154
201
|
};
|
|
155
202
|
} catch (error) {
|
|
156
203
|
await browser.close();
|
package/src/types.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface ScreenshotResult {
|
|
|
11
11
|
format: string;
|
|
12
12
|
width: number;
|
|
13
13
|
height: number;
|
|
14
|
+
renderer: string;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export interface RenderMetadata {
|
|
@@ -21,4 +22,4 @@ export interface RenderMetadata {
|
|
|
21
22
|
scale: number;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
export type FileFormat = 'pdf' | 'epub' | 'docx' | 'xlsx' | 'pptx' | 'unknown';
|
|
25
|
+
export type FileFormat = 'pdf' | 'epub' | 'docx' | 'xlsx' | 'pptx' | 'md' | 'html' | 'csv' | 'rtf' | 'ipynb' | 'tex' | 'code' | 'url' | 'mmd' | 'geojson' | 'gpx' | 'unknown';
|