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.
Files changed (2) hide show
  1. package/index.js +14 -7
  2. 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.1")
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
- const spinner = ora("Starting extraction...").start();
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();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dembrandt",
3
- "version": "0.8.1",
3
+ "version": "0.8.2",
4
4
  "description": "Extract design tokens and brand assets from any website",
5
5
  "main": "index.js",
6
6
  "type": "module",