@arach/og 0.2.1 → 0.2.4
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/viewer.d.ts.map +1 -1
- package/dist/viewer.js +87 -18
- package/dist/viewer.js.map +1 -1
- package/package.json +1 -1
package/dist/viewer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../src/viewer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../src/viewer.ts"],"names":[],"mappings":"AA0dA,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDzE"}
|
package/dist/viewer.js
CHANGED
|
@@ -11,6 +11,59 @@ const MIME_TYPES = {
|
|
|
11
11
|
'.svg': 'image/svg+xml',
|
|
12
12
|
'.json': 'application/json',
|
|
13
13
|
};
|
|
14
|
+
async function getImageDimensions(filePath) {
|
|
15
|
+
try {
|
|
16
|
+
const { createReadStream } = await import('node:fs');
|
|
17
|
+
return new Promise((resolve) => {
|
|
18
|
+
const stream = createReadStream(filePath, { start: 0, end: 29 });
|
|
19
|
+
let data = Buffer.alloc(0);
|
|
20
|
+
stream.on('data', (chunk) => {
|
|
21
|
+
data = Buffer.concat([data, Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)]);
|
|
22
|
+
});
|
|
23
|
+
stream.on('end', () => {
|
|
24
|
+
// PNG: width at bytes 16-19, height at 20-23
|
|
25
|
+
if (data[0] === 0x89 && data[1] === 0x50 && data[2] === 0x4E && data[3] === 0x47) {
|
|
26
|
+
const width = data.readUInt32BE(16);
|
|
27
|
+
const height = data.readUInt32BE(20);
|
|
28
|
+
resolve({ width, height });
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// JPEG: Need to parse markers - just return null for now, we'll check by name
|
|
32
|
+
resolve(null);
|
|
33
|
+
});
|
|
34
|
+
stream.on('error', () => resolve(null));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function isLikelyOGImage(name, width, height) {
|
|
42
|
+
const lowerName = name.toLowerCase();
|
|
43
|
+
// Exclude common non-OG image patterns
|
|
44
|
+
const excludePatterns = ['logo', 'icon', 'avatar', 'favicon', 'header', 'banner', 'thumb', 'thumbnail', 'badge', 'button', 'sprite'];
|
|
45
|
+
if (excludePatterns.some(pattern => lowerName.includes(pattern))) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// Strong match: filename explicitly mentions OG
|
|
49
|
+
if (lowerName.includes('og.') || lowerName.includes('og-') || lowerName.includes('-og.') ||
|
|
50
|
+
lowerName.includes('opengraph') || lowerName.includes('open-graph') ||
|
|
51
|
+
lowerName.includes('social-card') || lowerName.includes('social-image')) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
// Dimension match: must be close to standard OG size (1200x630)
|
|
55
|
+
if (width && height) {
|
|
56
|
+
const ratio = width / height;
|
|
57
|
+
// OG ratio is ~1.91, tight variance (1.85 to 1.95)
|
|
58
|
+
const isOGRatio = ratio >= 1.85 && ratio <= 1.95;
|
|
59
|
+
// Must be reasonably large (at least 1000px wide for proper OG)
|
|
60
|
+
const isOGSize = width >= 1000;
|
|
61
|
+
if (isOGRatio && isOGSize) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
14
67
|
async function findOGImages(dir) {
|
|
15
68
|
const images = [];
|
|
16
69
|
async function scan(currentDir, depth = 0) {
|
|
@@ -29,19 +82,18 @@ async function findOGImages(dir) {
|
|
|
29
82
|
else if (entry.isFile()) {
|
|
30
83
|
const ext = extname(entry.name).toLowerCase();
|
|
31
84
|
if (['.png', '.jpg', '.jpeg'].includes(ext)) {
|
|
32
|
-
//
|
|
33
|
-
const
|
|
34
|
-
const isOG = name
|
|
35
|
-
currentDir.includes('public') ||
|
|
36
|
-
currentDir.includes('static') ||
|
|
37
|
-
currentDir.includes('assets');
|
|
85
|
+
// Get dimensions to check if it's an OG image
|
|
86
|
+
const dimensions = await getImageDimensions(fullPath);
|
|
87
|
+
const isOG = isLikelyOGImage(entry.name, dimensions?.width, dimensions?.height);
|
|
38
88
|
if (isOG) {
|
|
39
89
|
const stats = await stat(fullPath);
|
|
40
90
|
images.push({
|
|
41
91
|
path: fullPath,
|
|
42
92
|
name: entry.name,
|
|
43
93
|
size: stats.size,
|
|
44
|
-
url: `/image?path=${encodeURIComponent(fullPath)}
|
|
94
|
+
url: `/image?path=${encodeURIComponent(fullPath)}`,
|
|
95
|
+
width: dimensions?.width,
|
|
96
|
+
height: dimensions?.height
|
|
45
97
|
});
|
|
46
98
|
}
|
|
47
99
|
}
|
|
@@ -355,6 +407,7 @@ function generateHTML(images, dir) {
|
|
|
355
407
|
<div class="card-meta">
|
|
356
408
|
<div class="card-name">${img.name}</div>
|
|
357
409
|
<div class="card-details">
|
|
410
|
+
${img.width && img.height ? `<span>${img.width}x${img.height}</span>` : ''}
|
|
358
411
|
<span>${Math.round(img.size / 1024)}KB</span>
|
|
359
412
|
<span>${img.path.replace(dir, '.')}</span>
|
|
360
413
|
</div>
|
|
@@ -419,16 +472,32 @@ export async function startViewer(dir, port = 3333) {
|
|
|
419
472
|
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
420
473
|
res.end(html);
|
|
421
474
|
});
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
475
|
+
const tryListen = (currentPort) => {
|
|
476
|
+
server.once('error', (err) => {
|
|
477
|
+
if (err.code === 'EADDRINUSE' && currentPort < port + 10) {
|
|
478
|
+
tryListen(currentPort + 1);
|
|
479
|
+
}
|
|
480
|
+
else if (err.code === 'EADDRINUSE') {
|
|
481
|
+
console.error(`\n Could not find available port (tried ${port}-${currentPort})`);
|
|
482
|
+
process.exit(1);
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
throw err;
|
|
486
|
+
}
|
|
487
|
+
});
|
|
488
|
+
server.listen(currentPort, () => {
|
|
489
|
+
console.log(`\n OG Viewer running at http://localhost:${currentPort}`);
|
|
490
|
+
console.log(` Scanning: ${dir}`);
|
|
491
|
+
console.log(` Found ${images.length} image${images.length !== 1 ? 's' : ''}\n`);
|
|
492
|
+
console.log(` Press Ctrl+C to stop\n`);
|
|
493
|
+
// Try to open in browser
|
|
494
|
+
import('node:child_process').then(m => {
|
|
495
|
+
const cmd = process.platform === 'darwin' ? 'open' :
|
|
496
|
+
process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
497
|
+
m.exec(`${cmd} http://localhost:${currentPort}`);
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
};
|
|
501
|
+
tryListen(port);
|
|
433
502
|
}
|
|
434
503
|
//# sourceMappingURL=viewer.js.map
|
package/dist/viewer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../src/viewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAY,MAAM,WAAW,CAAA;AAEnD,MAAM,UAAU,GAA2B;IACzC,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,wBAAwB;IAC/B,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,kBAAkB;CAC5B,CAAA;
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../src/viewer.ts"],"names":[],"mappings":"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"}
|