dembrandt 0.8.1 → 0.8.2
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/index.js +14 -7
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -23,7 +23,7 @@ import { join } from "path";
|
|
|
23
23
|
program
|
|
24
24
|
.name("dembrandt")
|
|
25
25
|
.description("Extract design tokens from any website")
|
|
26
|
-
.version("0.8.
|
|
26
|
+
.version("0.8.2")
|
|
27
27
|
.argument("<url>")
|
|
28
28
|
.option("--browser <type>", "Browser to use (chromium|firefox)", "chromium")
|
|
29
29
|
.option("--json-only", "Output raw JSON")
|
|
@@ -48,7 +48,13 @@ program
|
|
|
48
48
|
url = "https://" + url;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
// In --json-only mode, redirect all status output to stderr so stdout is clean JSON
|
|
52
|
+
const originalConsoleLog = console.log;
|
|
53
|
+
if (opts.jsonOnly) {
|
|
54
|
+
console.log = (...args) => console.error(...args);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const spinner = ora({ text: "Starting extraction...", stream: opts.jsonOnly ? process.stderr : process.stdout }).start();
|
|
52
58
|
let browser = null;
|
|
53
59
|
|
|
54
60
|
try {
|
|
@@ -88,7 +94,7 @@ program
|
|
|
88
94
|
|
|
89
95
|
// Multi-page crawl
|
|
90
96
|
if (isMultiPage && maxPages > 0) {
|
|
91
|
-
spinner.start("Discovering pages...");
|
|
97
|
+
if (!opts.jsonOnly) spinner.start("Discovering pages...");
|
|
92
98
|
|
|
93
99
|
let additionalUrls;
|
|
94
100
|
if (opts.sitemap) {
|
|
@@ -106,17 +112,17 @@ program
|
|
|
106
112
|
delete result._discoveredLinks;
|
|
107
113
|
|
|
108
114
|
if (additionalUrls.length === 0) {
|
|
109
|
-
spinner.warn("No additional pages discovered");
|
|
115
|
+
if (!opts.jsonOnly) spinner.warn("No additional pages discovered");
|
|
110
116
|
} else {
|
|
111
117
|
spinner.stop();
|
|
112
|
-
console.log(chalk.dim(` Found ${additionalUrls.length} page(s) to analyze`));
|
|
118
|
+
if (!opts.jsonOnly) console.log(chalk.dim(` Found ${additionalUrls.length} page(s) to analyze`));
|
|
113
119
|
|
|
114
120
|
const allResults = [result];
|
|
115
121
|
for (let i = 0; i < additionalUrls.length; i++) {
|
|
116
122
|
const pageUrl = additionalUrls[i];
|
|
117
123
|
const pageNum = i + 2;
|
|
118
124
|
const total = additionalUrls.length + 1;
|
|
119
|
-
spinner.start(`Extracting page ${pageNum}/${total}: ${new URL(pageUrl).pathname}`);
|
|
125
|
+
if (!opts.jsonOnly) spinner.start(`Extracting page ${pageNum}/${total}: ${new URL(pageUrl).pathname}`);
|
|
120
126
|
|
|
121
127
|
// Polite delay between pages
|
|
122
128
|
await new Promise(r => setTimeout(r, 2000 + Math.random() * 3000));
|
|
@@ -131,7 +137,7 @@ program
|
|
|
131
137
|
delete pageResult._discoveredLinks;
|
|
132
138
|
allResults.push(pageResult);
|
|
133
139
|
} catch (err) {
|
|
134
|
-
spinner.warn(`Skipping ${pageUrl}: ${String(err?.message || err).slice(0, 80)}`);
|
|
140
|
+
if (!opts.jsonOnly) spinner.warn(`Skipping ${pageUrl}: ${String(err?.message || err).slice(0, 80)}`);
|
|
135
141
|
}
|
|
136
142
|
}
|
|
137
143
|
|
|
@@ -238,6 +244,7 @@ program
|
|
|
238
244
|
|
|
239
245
|
// Output to terminal
|
|
240
246
|
if (opts.jsonOnly) {
|
|
247
|
+
console.log = originalConsoleLog;
|
|
241
248
|
console.log(JSON.stringify(outputData, null, 2));
|
|
242
249
|
} else {
|
|
243
250
|
console.log();
|