manhuagui-cli 1.0.0 → 1.0.1

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/lib/cli.js CHANGED
@@ -3,25 +3,20 @@ import { intro, isCancel, outro, spinner } from "@clack/prompts";
3
3
  import { defineCommand } from "citty";
4
4
  import { Listr } from "listr2";
5
5
  import { chromium } from "playwright";
6
+ import { createBrowserContext } from "./browser.js";
6
7
  import { extractChapterImages } from "./chapter.js";
7
8
  import { parseComicPage } from "./comic.js";
8
- import { CHAPTER_DELAY_MAX, CHAPTER_DELAY_MIN, OUTPUT_BASE, pickUserAgent, VIEWPORT_MAX_HEIGHT, VIEWPORT_MAX_WIDTH, VIEWPORT_MIN_HEIGHT, VIEWPORT_MIN_WIDTH, } from "./config.js";
9
+ import { config, initConfig } from "./config.js";
9
10
  import { CancelledError } from "./errors.js";
10
11
  import { logger } from "./logger.js";
11
12
  import { chapterKey, createProgress, filterPending, loadProgress, markChapter, saveProgress, } from "./progress.js";
12
13
  import { promptConfirm, promptResume, promptSections, promptUrl } from "./prompts.js";
13
- import { atomicSaveJSON, humanDelay, randInt, slugify } from "./utils.js";
14
+ import { atomicSaveJSON, humanDelay, slugify } from "./utils.js";
14
15
  async function launchBrowser() {
15
16
  return chromium.launch({ headless: true });
16
17
  }
17
18
  async function parseComicWithSpinner(browser, url) {
18
- const ctx = await browser.newContext({
19
- userAgent: pickUserAgent(),
20
- viewport: {
21
- width: randInt(VIEWPORT_MIN_WIDTH, VIEWPORT_MAX_WIDTH),
22
- height: randInt(VIEWPORT_MIN_HEIGHT, VIEWPORT_MAX_HEIGHT),
23
- },
24
- });
19
+ const ctx = await createBrowserContext(browser);
25
20
  const page = await ctx.newPage();
26
21
  const s = spinner();
27
22
  s.start("Parsing comic page");
@@ -30,7 +25,7 @@ async function parseComicWithSpinner(browser, url) {
30
25
  s.stop(comic.title);
31
26
  return comic;
32
27
  }
33
- function applyFilters(sections, sectionFilter, chapterFilter) {
28
+ export function applyFilters(sections, sectionFilter, chapterFilter) {
34
29
  let result = sections;
35
30
  if (sectionFilter) {
36
31
  result = result.filter((s) => s.name === sectionFilter || s.name.includes(sectionFilter));
@@ -45,6 +40,20 @@ function applyFilters(sections, sectionFilter, chapterFilter) {
45
40
  }
46
41
  return result;
47
42
  }
43
+ function logSectionSummary(sections) {
44
+ const total = sections.reduce((sum, s) => sum + s.chapters.length, 0);
45
+ logger.info(`Sections: ${sections.map((s) => `${s.name}(${s.chapters.length})`).join(", ")}`);
46
+ logger.info(`Total chapters: ${total}`);
47
+ return total;
48
+ }
49
+ function displayDryRun(sections) {
50
+ for (const section of sections) {
51
+ for (const ch of section.chapters) {
52
+ logger.info(` [${section.name}] ${ch.title}`);
53
+ }
54
+ }
55
+ logger.info("Dry run complete. No files downloaded.");
56
+ }
48
57
  function reportResults(collected, errors, totalChapters) {
49
58
  if (Object.keys(collected).length > 0) {
50
59
  logger.info(`Downloaded ${Object.keys(collected).length}/${totalChapters} chapters`);
@@ -58,7 +67,7 @@ function reportResults(collected, errors, totalChapters) {
58
67
  }
59
68
  async function processChapter(chapter, sectionName, comicTitle, browser) {
60
69
  const dirName = slugify(chapter.title);
61
- const outputDir = join(OUTPUT_BASE, slugify(comicTitle), slugify(sectionName), dirName);
70
+ const outputDir = join(config.outputBase, slugify(comicTitle), slugify(sectionName), dirName);
62
71
  const urls = await extractChapterImages(chapter.url, browser, outputDir);
63
72
  if (urls.length === 0)
64
73
  return null;
@@ -67,7 +76,7 @@ async function processChapter(chapter, sectionName, comicTitle, browser) {
67
76
  function createDownloadTasks(sections, comicTitle, comicUrl, browser, resume) {
68
77
  const collected = {};
69
78
  const errors = [];
70
- const comicDir = join(OUTPUT_BASE, slugify(comicTitle));
79
+ const comicDir = join(config.outputBase, slugify(comicTitle));
71
80
  const progress = resume
72
81
  ? (loadProgress(comicDir) ?? createProgress(comicTitle, comicUrl))
73
82
  : createProgress(comicTitle, comicUrl);
@@ -105,7 +114,7 @@ function createDownloadTasks(sections, comicTitle, comicUrl, browser, resume) {
105
114
  });
106
115
  }
107
116
  if (i < section.chapters.length - 1) {
108
- await humanDelay(CHAPTER_DELAY_MIN, CHAPTER_DELAY_MAX);
117
+ await humanDelay(config.chapterDelayMin, config.chapterDelayMax);
109
118
  }
110
119
  }
111
120
  task.title = label;
@@ -116,6 +125,35 @@ function createDownloadTasks(sections, comicTitle, comicUrl, browser, resume) {
116
125
  }),
117
126
  };
118
127
  }
128
+ async function executeAndReport(sections, comic, url, browser, resume, totalChapters) {
129
+ const { collected, errors, tasks: dl, } = createDownloadTasks(sections, comic.title, url, browser, resume);
130
+ await dl.run();
131
+ if (Object.keys(collected).length > 0) {
132
+ atomicSaveJSON(join(config.outputBase, slugify(comic.title), "urls.json"), collected);
133
+ }
134
+ reportResults(collected, errors, totalChapters);
135
+ }
136
+ // interactive mode only
137
+ async function promptResumeCheck(_comic, sections, resume, comicDir) {
138
+ if (resume)
139
+ return true;
140
+ const progress = loadProgress(comicDir);
141
+ if (!progress)
142
+ return false;
143
+ let done = 0;
144
+ let total = 0;
145
+ for (const s of sections) {
146
+ for (const c of s.chapters) {
147
+ total++;
148
+ if (progress.chapters[chapterKey(s.name, c.title)]?.status === "done")
149
+ done++;
150
+ }
151
+ }
152
+ if (total > 0 && done > 0) {
153
+ return promptResume(done, total);
154
+ }
155
+ return false;
156
+ }
119
157
  async function runDirect(url, sectionFilter, chapterFilter, resume, dryRun) {
120
158
  const browser = await launchBrowser();
121
159
  try {
@@ -125,7 +163,7 @@ async function runDirect(url, sectionFilter, chapterFilter, resume, dryRun) {
125
163
  throw new Error("No chapters found matching filters");
126
164
  }
127
165
  if (resume) {
128
- const comicDir = join(OUTPUT_BASE, slugify(comic.title));
166
+ const comicDir = join(config.outputBase, slugify(comic.title));
129
167
  const progress = loadProgress(comicDir);
130
168
  if (progress) {
131
169
  sections = filterPending(progress, sections);
@@ -135,24 +173,12 @@ async function runDirect(url, sectionFilter, chapterFilter, resume, dryRun) {
135
173
  }
136
174
  }
137
175
  }
138
- const totalChapters = sections.reduce((sum, s) => sum + s.chapters.length, 0);
139
- logger.info(`Sections: ${sections.map((s) => `${s.name}(${s.chapters.length})`).join(", ")}`);
140
- logger.info(`Total chapters: ${totalChapters}`);
176
+ const totalChapters = logSectionSummary(sections);
141
177
  if (dryRun) {
142
- for (const section of sections) {
143
- for (const ch of section.chapters) {
144
- logger.info(` [${section.name}] ${ch.title}`);
145
- }
146
- }
147
- logger.info("Dry run complete. No files downloaded.");
178
+ displayDryRun(sections);
148
179
  return;
149
180
  }
150
- const { collected, errors, tasks: dl, } = createDownloadTasks(sections, comic.title, url, browser, resume);
151
- await dl.run();
152
- if (Object.keys(collected).length > 0) {
153
- atomicSaveJSON(join(OUTPUT_BASE, slugify(comic.title), "urls.json"), collected);
154
- }
155
- reportResults(collected, errors, totalChapters);
181
+ await executeAndReport(sections, comic, url, browser, resume, totalChapters);
156
182
  }
157
183
  finally {
158
184
  await browser.close();
@@ -164,52 +190,31 @@ async function runInteractive(resume, dryRun) {
164
190
  const browser = await launchBrowser();
165
191
  try {
166
192
  const comic = await parseComicWithSpinner(browser, url);
167
- let shouldResume = resume;
168
- const comicDir = join(OUTPUT_BASE, slugify(comic.title));
169
- const progress = loadProgress(comicDir);
170
- if (progress && !resume) {
171
- let done = 0;
172
- let total = 0;
173
- for (const s of comic.sections) {
174
- for (const c of s.chapters) {
175
- total++;
176
- if (progress.chapters[chapterKey(s.name, c.title)]?.status === "done")
177
- done++;
178
- }
179
- }
180
- if (total > 0 && done > 0) {
181
- shouldResume = await promptResume(done, total);
182
- }
183
- }
193
+ const comicDir = join(config.outputBase, slugify(comic.title));
194
+ const shouldResume = await promptResumeCheck(comic, comic.sections, resume, comicDir);
184
195
  let selected = await promptSections(comic.sections);
185
- if (shouldResume && progress) {
186
- selected = filterPending(progress, selected);
187
- if (selected.length === 0) {
188
- outro("All chapters already downloaded.");
189
- return;
196
+ if (shouldResume) {
197
+ const progress = loadProgress(comicDir);
198
+ if (progress) {
199
+ selected = filterPending(progress, selected);
200
+ if (selected.length === 0) {
201
+ outro("All chapters already downloaded.");
202
+ return;
203
+ }
190
204
  }
191
205
  }
192
- const totalChapters = selected.reduce((sum, s) => sum + s.chapters.length, 0);
206
+ const totalChapters = logSectionSummary(selected);
193
207
  const confirmed = await promptConfirm(totalChapters);
194
208
  if (!confirmed || isCancel(confirmed)) {
195
209
  outro("Cancelled.");
196
210
  return;
197
211
  }
198
212
  if (dryRun) {
199
- for (const section of selected) {
200
- for (const ch of section.chapters) {
201
- logger.info(` [${section.name}] ${ch.title}`);
202
- }
203
- }
213
+ displayDryRun(selected);
204
214
  outro(`Dry run complete. ${totalChapters} chapters would be downloaded.`);
205
215
  return;
206
216
  }
207
- const { collected, errors, tasks: dl, } = createDownloadTasks(selected, comic.title, url, browser, shouldResume);
208
- await dl.run();
209
- if (Object.keys(collected).length > 0) {
210
- atomicSaveJSON(join(OUTPUT_BASE, slugify(comic.title), "urls.json"), collected);
211
- }
212
- reportResults(collected, errors, totalChapters);
217
+ await executeAndReport(selected, comic, url, browser, shouldResume, totalChapters);
213
218
  }
214
219
  finally {
215
220
  await browser.close();
@@ -249,8 +254,37 @@ export const command = defineCommand({
249
254
  alias: "d",
250
255
  default: false,
251
256
  },
257
+ output: {
258
+ type: "string",
259
+ description: "下载输出目录 / Output directory for downloads",
260
+ alias: "o",
261
+ },
262
+ concurrency: {
263
+ type: "string",
264
+ description: "章节内图片并发下载数 / Concurrent image downloads per chapter",
265
+ alias: "C",
266
+ },
267
+ retry: {
268
+ type: "string",
269
+ description: "图片下载重试次数 / Retry count per image",
270
+ },
271
+ "log-level": {
272
+ type: "string",
273
+ description: "日志级别: debug | info | warn | error / Log level",
274
+ },
252
275
  },
253
276
  async run({ args }) {
277
+ const cliOverrides = {};
278
+ if (args.output)
279
+ cliOverrides.outputBase = args.output;
280
+ if (args.concurrency)
281
+ cliOverrides.imageConcurrency = Number(args.concurrency);
282
+ if (args.retry)
283
+ cliOverrides.retryCount = Number(args.retry);
284
+ if (args["log-level"] && ["debug", "info", "warn", "error"].includes(args["log-level"])) {
285
+ cliOverrides.logLevel = args["log-level"];
286
+ }
287
+ initConfig(cliOverrides);
254
288
  try {
255
289
  if (args.url) {
256
290
  await runDirect(args.url, args.section, args.chapter, args.resume, args["dry-run"]);
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/lib/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/lib/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"comic.d.ts","sourceRoot":"","sources":["../../src/lib/comic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAW,MAAM,YAAY,CAAC;AAE9D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAgBxE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CA6BvE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAkBhF"}
1
+ {"version":3,"file":"comic.d.ts","sourceRoot":"","sources":["../../src/lib/comic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAW,MAAM,YAAY,CAAC;AA6B9D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAgBxE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAoBvE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAYhF"}
package/dist/lib/comic.js CHANGED
@@ -1,5 +1,26 @@
1
1
  import * as cheerio from "cheerio";
2
- import { ADULT_CLICK_SETTLE_DELAY, ADULT_SELECTOR_TIMEOUT, PAGE_LOAD_TIMEOUT } from "./config.js";
2
+ import { handleAdultCheck } from "./browser.js";
3
+ import { config } from "./config.js";
4
+ function extractComicId(url) {
5
+ const match = url.match(/\/comic\/(\d+)\//);
6
+ return match?.[1] ?? "0";
7
+ }
8
+ function parseSectionChapters($, h4, baseUrl) {
9
+ const chapters = [];
10
+ const directUl = $(h4).next("ul");
11
+ if (directUl.length) {
12
+ chapters.push(...parseChapters(directUl.html() ?? "", baseUrl));
13
+ }
14
+ else {
15
+ const chapterList = $(h4).nextAll(".chapter-list").first();
16
+ if (!chapterList.length)
17
+ return chapters;
18
+ chapterList.find("ul").each((_, ulEl) => {
19
+ chapters.push(...parseChapters($(ulEl).html() ?? "", baseUrl));
20
+ });
21
+ }
22
+ return chapters;
23
+ }
3
24
  export function parseChapters(ulHTML, baseUrl) {
4
25
  const $ = cheerio.load(ulHTML);
5
26
  const chapters = [];
@@ -18,8 +39,7 @@ export function parseChapters(ulHTML, baseUrl) {
18
39
  export function parseComicHTML(html, baseUrl) {
19
40
  const $ = cheerio.load(html);
20
41
  const title = $("h1").first().text().trim() || "unknown";
21
- const idMatch = baseUrl.match(/\/comic\/(\d+)\//);
22
- const id = idMatch?.[1] ?? "0";
42
+ const id = extractComicId(baseUrl);
23
43
  const sections = [];
24
44
  const chapterDiv = $(".chapter.cf").first();
25
45
  if (!chapterDiv.length)
@@ -28,13 +48,7 @@ export function parseComicHTML(html, baseUrl) {
28
48
  const sectionName = $(h4).find("span").text().trim();
29
49
  if (!sectionName)
30
50
  return;
31
- let ul = $(h4).next("ul");
32
- if (!ul.length) {
33
- ul = $(h4).next(".chapter-list").find("ul").first();
34
- if (!ul.length)
35
- return;
36
- }
37
- const chapters = parseChapters(ul.html() ?? "", baseUrl);
51
+ const chapters = parseSectionChapters($, h4, baseUrl);
38
52
  if (chapters.length > 0) {
39
53
  sections.push({ name: sectionName, chapters });
40
54
  }
@@ -44,17 +58,12 @@ export function parseComicHTML(html, baseUrl) {
44
58
  export async function parseComicPage(page, url) {
45
59
  const response = await page.goto(url, {
46
60
  waitUntil: "domcontentloaded",
47
- timeout: PAGE_LOAD_TIMEOUT,
61
+ timeout: config.pageLoadTimeout,
48
62
  });
49
63
  if (!response?.ok()) {
50
64
  throw new Error(`Failed to load comic page: ${response?.status()}`);
51
65
  }
52
- const checkAdult = await page.$("#checkAdult");
53
- if (checkAdult) {
54
- await checkAdult.click();
55
- await page.waitForSelector(".chapter h4", { timeout: ADULT_SELECTOR_TIMEOUT });
56
- await page.waitForTimeout(ADULT_CLICK_SETTLE_DELAY);
57
- }
66
+ await handleAdultCheck(page, ".chapter h4");
58
67
  const html = await page.content();
59
68
  return parseComicHTML(html, url);
60
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"comic.js","sourceRoot":"","sources":["../../src/lib/comic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comic.js","sourceRoot":"","sources":["../../src/lib/comic.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,28 @@
1
- export declare const OUTPUT_BASE: string;
2
- export declare const IMAGE_CONCURRENCY: number;
3
- export declare const DOWNLOAD_DELAY: number;
4
- export declare const CHAPTER_DELAY_MIN: number;
5
- export declare const CHAPTER_DELAY_MAX: number;
6
- export declare const RETRY_COUNT: number;
7
- export declare const RETRY_BACKOFF_BASE: number;
8
- export declare const IMAGE_LOAD_DELAY: number;
9
- export declare const PAD_MIN_LENGTH = 3;
10
- export declare const PAGE_LOAD_TIMEOUT = 30000;
11
- export declare const CHAPTER_SELECTOR_TIMEOUT = 30000;
12
- export declare const ADULT_SELECTOR_TIMEOUT = 10000;
13
- export declare const ADULT_CLICK_SETTLE_DELAY = 300;
14
- export declare const NEXT_PAGE_TIMEOUT = 15000;
15
- export declare const USER_AGENTS: string[];
1
+ export interface Config {
2
+ outputBase: string;
3
+ imageConcurrency: number;
4
+ downloadDelay: number;
5
+ chapterDelayMin: number;
6
+ chapterDelayMax: number;
7
+ retryCount: number;
8
+ retryBackoffBase: number;
9
+ imageLoadDelay: number;
10
+ logLevel: string;
11
+ userAgents: string[];
12
+ padMinLength: number;
13
+ pageLoadTimeout: number;
14
+ chapterSelectorTimeout: number;
15
+ adultSelectorTimeout: number;
16
+ tabLoadTimeout: number;
17
+ adultClickSettleDelay: number;
18
+ nextPageTimeout: number;
19
+ viewportMinWidth: number;
20
+ viewportMaxWidth: number;
21
+ viewportMinHeight: number;
22
+ viewportMaxHeight: number;
23
+ }
24
+ export type UserConfigOverrides = Partial<Pick<Config, "outputBase" | "imageConcurrency" | "downloadDelay" | "chapterDelayMin" | "chapterDelayMax" | "retryCount" | "retryBackoffBase" | "imageLoadDelay" | "logLevel" | "userAgents">>;
25
+ export declare let config: Config;
26
+ export declare function initConfig(cliOverrides?: UserConfigOverrides): void;
16
27
  export declare function pickUserAgent(): string;
17
- export declare const VIEWPORT_MIN_WIDTH = 1200;
18
- export declare const VIEWPORT_MAX_WIDTH = 1600;
19
- export declare const VIEWPORT_MIN_HEIGHT = 800;
20
- export declare const VIEWPORT_MAX_HEIGHT = 1000;
21
28
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,WAAW,QAAwC,CAAC;AAEjE,eAAO,MAAM,iBAAiB,QAA6C,CAAC;AAE5E,eAAO,MAAM,cAAc,QAA6C,CAAC;AAEzE,eAAO,MAAM,iBAAiB,QAAgD,CAAC;AAC/E,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAEhF,eAAO,MAAM,WAAW,QAAuC,CAAC;AAChE,eAAO,MAAM,kBAAkB,QAAiD,CAAC;AACjF,eAAO,MAAM,gBAAgB,QAA8C,CAAC;AAC5E,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAC9C,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAC5C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAGvC,eAAO,MAAM,WAAW,UAWnB,CAAC;AAEN,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,mBAAmB,OAAO,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,IAAI,CACF,MAAM,EACJ,YAAY,GACZ,kBAAkB,GAClB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,YAAY,GACZ,kBAAkB,GAClB,gBAAgB,GAChB,UAAU,GACV,YAAY,CACf,CACF,CAAC;AAoFF,eAAO,IAAI,MAAM,EAAE,MAAsB,CAAC;AAE1C,wBAAgB,UAAU,CAAC,YAAY,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAGnE;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -1,42 +1,101 @@
1
- import { logger } from "./logger.js";
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { logger, setLogLevel } from "./logger.js";
2
5
  try {
3
6
  process.loadEnvFile?.();
4
7
  }
5
8
  catch {
6
9
  logger.warn("Failed to load .env file");
7
10
  }
8
- export const OUTPUT_BASE = process.env.OUTPUT_BASE || "./output";
9
- export const IMAGE_CONCURRENCY = Number(process.env.IMAGE_CONCURRENCY) || 2;
10
- export const DOWNLOAD_DELAY = Number(process.env.DOWNLOAD_DELAY) || 3000;
11
- export const CHAPTER_DELAY_MIN = Number(process.env.CHAPTER_DELAY_MIN) || 5000;
12
- export const CHAPTER_DELAY_MAX = Number(process.env.CHAPTER_DELAY_MAX) || 15000;
13
- export const RETRY_COUNT = Number(process.env.RETRY_COUNT) || 3;
14
- export const RETRY_BACKOFF_BASE = Number(process.env.RETRY_BACKOFF_BASE) || 1000;
15
- export const IMAGE_LOAD_DELAY = Number(process.env.IMAGE_LOAD_DELAY) || 200;
16
- export const PAD_MIN_LENGTH = 3;
17
- export const PAGE_LOAD_TIMEOUT = 30000;
18
- export const CHAPTER_SELECTOR_TIMEOUT = 30000;
19
- export const ADULT_SELECTOR_TIMEOUT = 10000;
20
- export const ADULT_CLICK_SETTLE_DELAY = 300;
21
- export const NEXT_PAGE_TIMEOUT = 15000;
22
- const _AGENTS_RAW = process.env.USER_AGENTS;
23
- export const USER_AGENTS = _AGENTS_RAW
24
- ? _AGENTS_RAW
25
- .split("\n")
26
- .map((s) => s.trim())
27
- .filter(Boolean)
28
- : [
29
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
30
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
31
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
32
- "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
33
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0",
34
- ];
11
+ const BUILTIN_USER_AGENTS = [
12
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
13
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
14
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
15
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
16
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0",
17
+ ];
18
+ const DEFAULTS = {
19
+ outputBase: "./output",
20
+ imageConcurrency: 2,
21
+ downloadDelay: 3000,
22
+ chapterDelayMin: 5000,
23
+ chapterDelayMax: 15000,
24
+ retryCount: 3,
25
+ retryBackoffBase: 1000,
26
+ imageLoadDelay: 200,
27
+ logLevel: "info",
28
+ userAgents: BUILTIN_USER_AGENTS,
29
+ padMinLength: 3,
30
+ pageLoadTimeout: 30000,
31
+ chapterSelectorTimeout: 30000,
32
+ adultSelectorTimeout: 10000,
33
+ adultClickSettleDelay: 300,
34
+ tabLoadTimeout: 5000,
35
+ nextPageTimeout: 15000,
36
+ viewportMinWidth: 1200,
37
+ viewportMaxWidth: 1600,
38
+ viewportMinHeight: 800,
39
+ viewportMaxHeight: 1000,
40
+ };
41
+ function loadFromEnv() {
42
+ const overrides = {};
43
+ if (process.env.OUTPUT_BASE)
44
+ overrides.outputBase = process.env.OUTPUT_BASE;
45
+ if (process.env.IMAGE_CONCURRENCY)
46
+ overrides.imageConcurrency = Number(process.env.IMAGE_CONCURRENCY);
47
+ if (process.env.DOWNLOAD_DELAY)
48
+ overrides.downloadDelay = Number(process.env.DOWNLOAD_DELAY);
49
+ if (process.env.CHAPTER_DELAY_MIN)
50
+ overrides.chapterDelayMin = Number(process.env.CHAPTER_DELAY_MIN);
51
+ if (process.env.CHAPTER_DELAY_MAX)
52
+ overrides.chapterDelayMax = Number(process.env.CHAPTER_DELAY_MAX);
53
+ if (process.env.RETRY_COUNT)
54
+ overrides.retryCount = Number(process.env.RETRY_COUNT);
55
+ if (process.env.RETRY_BACKOFF_BASE)
56
+ overrides.retryBackoffBase = Number(process.env.RETRY_BACKOFF_BASE);
57
+ if (process.env.IMAGE_LOAD_DELAY)
58
+ overrides.imageLoadDelay = Number(process.env.IMAGE_LOAD_DELAY);
59
+ if (process.env.LOG_LEVEL) {
60
+ const level = process.env.LOG_LEVEL.toLowerCase();
61
+ if (["debug", "info", "warn", "error"].includes(level))
62
+ overrides.logLevel = level;
63
+ }
64
+ if (process.env.USER_AGENTS) {
65
+ overrides.userAgents = process.env.USER_AGENTS.split("\n")
66
+ .map((s) => s.trim())
67
+ .filter(Boolean);
68
+ }
69
+ return overrides;
70
+ }
71
+ function readJSONFile(filePath) {
72
+ try {
73
+ if (existsSync(filePath)) {
74
+ const content = readFileSync(filePath, "utf-8");
75
+ return JSON.parse(content);
76
+ }
77
+ }
78
+ catch {
79
+ /* ignore invalid config files */
80
+ }
81
+ return null;
82
+ }
83
+ function loadConfigFile() {
84
+ const globalFile = readJSONFile(join(homedir(), ".config", "manhuagui-cli", "config.json"));
85
+ const projectFile = readJSONFile(join(process.cwd(), ".manhuaguirc.json"));
86
+ return { ...globalFile, ...projectFile };
87
+ }
88
+ function buildConfig(overrides) {
89
+ const file = loadConfigFile();
90
+ const env = loadFromEnv();
91
+ return { ...DEFAULTS, ...env, ...file, ...overrides };
92
+ }
93
+ export let config = buildConfig();
94
+ export function initConfig(cliOverrides) {
95
+ config = buildConfig(cliOverrides);
96
+ setLogLevel(config.logLevel);
97
+ }
35
98
  export function pickUserAgent() {
36
- return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)];
99
+ return config.userAgents[Math.floor(Math.random() * config.userAgents.length)];
37
100
  }
38
- export const VIEWPORT_MIN_WIDTH = 1200;
39
- export const VIEWPORT_MAX_WIDTH = 1600;
40
- export const VIEWPORT_MIN_HEIGHT = 800;
41
- export const VIEWPORT_MAX_HEIGHT = 1000;
42
101
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,IAAI,CAAC;IACH,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAC1B,CAAC;AAAC,MAAM,CAAC;IACP,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,CAAC;AAEjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;AAEzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC;AAEhF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AACvC,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEvC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW;IACpC,CAAC,CAAC,WAAW;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC;IACpB,CAAC,CAAC;QACE,iHAAiH;QACjH,iHAAiH;QACjH,uHAAuH;QACvH,uGAAuG;QACvG,kFAAkF;KACnF,CAAC;AAEN,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
+ type LogLevel = "debug" | "info" | "warn" | "error";
2
+ export declare function setLogLevel(level: LogLevel): void;
1
3
  export declare const logger: {
2
4
  debug: (msg: string) => false | void;
3
5
  info: (msg: string) => false | void;
4
6
  warn: (msg: string) => false | void;
5
7
  error: (msg: string) => false | void;
6
8
  };
9
+ export {};
7
10
  //# sourceMappingURL=logger.d.ts.map