@clazic/kordoc 2.4.14 → 2.4.15

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 CHANGED
@@ -4,12 +4,12 @@ import {
4
4
  markdownToHwpx,
5
5
  markdownToXlsx,
6
6
  parse
7
- } from "./chunk-6CADPLGJ.js";
7
+ } from "./chunk-ZER7GYXK.js";
8
8
  import "./chunk-YW5G6BCJ.js";
9
9
  import {
10
10
  VERSION,
11
11
  toArrayBuffer
12
- } from "./chunk-X6NIA6BK.js";
12
+ } from "./chunk-YHPNDX7A.js";
13
13
  import "./chunk-MOL7MDBG.js";
14
14
  import "./chunk-7FMKAV4P.js";
15
15
  import "./chunk-34WIGIQC.js";
@@ -177,7 +177,7 @@ async function runParse(files, opts) {
177
177
  saveImages(absPath);
178
178
  }
179
179
  } catch (err) {
180
- const { sanitizeError } = await import("./utils-EK3CPEZG.js");
180
+ const { sanitizeError } = await import("./utils-ZQA6RCXN.js");
181
181
  process.stderr.write(`
182
182
  [kordoc] ERROR: ${fileName} \u2014 ${sanitizeError(err)}
183
183
  `);
@@ -259,7 +259,7 @@ program.command("convert <input>").description("\uB9C8\uD06C\uB2E4\uC6B4 \uD30C\
259
259
  `));
260
260
  }
261
261
  } catch (err) {
262
- const { sanitizeError } = await import("./utils-EK3CPEZG.js");
262
+ const { sanitizeError } = await import("./utils-ZQA6RCXN.js");
263
263
  process.stderr.write(` FAIL
264
264
  `);
265
265
  process.stderr.write(` \u2192 ${sanitizeError(err)}
@@ -291,7 +291,7 @@ program.command("init-env").description("kordoc\uC6A9 .env \uD15C\uD50C\uB9BF \u
291
291
  }
292
292
  });
293
293
  program.command("watch <dir>").description("\uB514\uB809\uD1A0\uB9AC \uAC10\uC2DC \u2014 \uC0C8 \uBB38\uC11C \uC790\uB3D9 \uBCC0\uD658").option("--webhook <url>", "\uACB0\uACFC \uC804\uC1A1 \uC6F9\uD6C5 URL").option("-d, --out-dir <dir>", "\uBCC0\uD658 \uACB0\uACFC \uCD9C\uB825 \uB514\uB809\uD1A0\uB9AC").option("-p, --pages <range>", "\uD398\uC774\uC9C0/\uC139\uC158 \uBC94\uC704").option("--format <type>", "\uCD9C\uB825 \uD615\uC2DD: markdown \uB610\uB294 json", "markdown").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (dir, opts) => {
294
- const { watchDirectory } = await import("./watch-NSWBVKQZ.js");
294
+ const { watchDirectory } = await import("./watch-ULSOWHFE.js");
295
295
  await watchDirectory({
296
296
  dir,
297
297
  outDir: opts.outDir,
package/dist/index.cjs CHANGED
@@ -3138,7 +3138,7 @@ var import_jszip2 = __toESM(require("jszip"), 1);
3138
3138
  var import_xmldom = require("@xmldom/xmldom");
3139
3139
 
3140
3140
  // src/utils.ts
3141
- var VERSION = true ? "2.4.13" : "0.0.0-dev";
3141
+ var VERSION = true ? "2.4.14" : "0.0.0-dev";
3142
3142
  function toArrayBuffer(buf) {
3143
3143
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
3144
3144
  return buf.buffer;
@@ -11332,6 +11332,7 @@ var ApiKeyRotationPool = class _ApiKeyRotationPool {
11332
11332
  var import_promises2 = require("fs/promises");
11333
11333
  var import_path5 = require("path");
11334
11334
  var import_child_process4 = require("child_process");
11335
+ var import_node_perf_hooks = require("perf_hooks");
11335
11336
  var import_libreoffice_convert = __toESM(require("libreoffice-convert"), 1);
11336
11337
  init_logger();
11337
11338
  var libreConvert = import_libreoffice_convert.default.convert;
@@ -11380,6 +11381,9 @@ var PROOFREAD_PROMPT = [
11380
11381
  "- \uC624\uD0C8\uC790, \uB744\uC5B4\uC4F0\uAE30, \uC904\uBC14\uAFC8, Markdown \uAD6C\uC870\uB9CC \uAD50\uC815",
11381
11382
  "- \uACB0\uACFC\uB294 Markdown \uBCF8\uBB38\uB9CC \uCD9C\uB825"
11382
11383
  ].join("\n");
11384
+ function elapsedMs(startAt) {
11385
+ return Math.round(import_node_perf_hooks.performance.now() - startAt);
11386
+ }
11383
11387
  async function runUnifiedOcrPipeline(inputPath, options = {}) {
11384
11388
  const absInput = (0, import_path5.resolve)(inputPath);
11385
11389
  const stem = (0, import_path5.basename)(absInput, (0, import_path5.extname)(absInput));
@@ -11419,7 +11423,7 @@ async function runUnifiedOcrPipeline(inputPath, options = {}) {
11419
11423
  try {
11420
11424
  ensureSupportedInput(absInput);
11421
11425
  let workingPdfPath = absInput;
11422
- const convertStart = Date.now();
11426
+ const convertStart = import_node_perf_hooks.performance.now();
11423
11427
  currentStage = "convert";
11424
11428
  markStageStart("convert", "\uBB38\uC11C\uB97C PDF\uB85C \uBCC0\uD658 \uC911");
11425
11429
  logStage("info", "convert", "start", "\uBB38\uC11C\uB97C PDF\uB85C \uBCC0\uD658 \uC2DC\uC791", { input: absInput });
@@ -11430,10 +11434,10 @@ async function runUnifiedOcrPipeline(inputPath, options = {}) {
11430
11434
  const out = await convertWithLibreOffice(inputBuffer, ".pdf");
11431
11435
  await (0, import_promises2.writeFile)(workingPdfPath, out);
11432
11436
  }
11433
- timingsMs.convert = Date.now() - convertStart;
11437
+ timingsMs.convert = elapsedMs(convertStart);
11434
11438
  markStageDone("convert", "PDF \uBCC0\uD658 \uC644\uB8CC");
11435
11439
  logStage("info", "convert", "done", "PDF \uBCC0\uD658 \uC644\uB8CC", { elapsedMs: timingsMs.convert });
11436
- const renderStart = Date.now();
11440
+ const renderStart = import_node_perf_hooks.performance.now();
11437
11441
  currentStage = "render";
11438
11442
  markStageStart("render", "PDF \uD398\uC774\uC9C0 \uC774\uBBF8\uC9C0 \uC0DD\uC131 \uC911");
11439
11443
  logStage("info", "render", "start", "PDF \uD398\uC774\uC9C0 \uB80C\uB354\uB9C1 \uC2DC\uC791", { pdf: workingPdfPath, dpi });
@@ -11441,10 +11445,10 @@ async function runUnifiedOcrPipeline(inputPath, options = {}) {
11441
11445
  const images = await listPageImages(imagesDir);
11442
11446
  if (images.length === 0) throw new UnifiedOcrError("RENDER_FAILED", "render", "\uD398\uC774\uC9C0 \uC774\uBBF8\uC9C0 \uC0DD\uC131 \uC2E4\uD328: \uACB0\uACFC \uC774\uBBF8\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.");
11443
11447
  markStageProgress("render", 100, images.length, images.length, `\uD398\uC774\uC9C0 ${images.length}\uC7A5 \uC0DD\uC131`);
11444
- timingsMs.render = Date.now() - renderStart;
11448
+ timingsMs.render = elapsedMs(renderStart);
11445
11449
  markStageDone("render", "\uC774\uBBF8\uC9C0 \uC0DD\uC131 \uC644\uB8CC");
11446
11450
  logStage("info", "render", "done", "\uD398\uC774\uC9C0 \uC774\uBBF8\uC9C0 \uC0DD\uC131 \uC644\uB8CC", { pages: images.length, elapsedMs: timingsMs.render });
11447
- const probeStart = Date.now();
11451
+ const probeStart = import_node_perf_hooks.performance.now();
11448
11452
  currentStage = "probe";
11449
11453
  markStageStart("probe", "\uBAA8\uB378 \uC18D\uB3C4 \uD504\uB85C\uBE0C \uC218\uD589 \uC911");
11450
11454
  logStage("info", "probe", "start", "\uBAA8\uB378 \uC18D\uB3C4 \uD504\uB85C\uBE0C \uC2DC\uC791", { models, probeConcurrency });
@@ -11468,14 +11472,14 @@ async function runUnifiedOcrPipeline(inputPath, options = {}) {
11468
11472
  const selected = await probeRuns.firstSuccess;
11469
11473
  const selectedModel = selected.selectedModel;
11470
11474
  const fallbackModelOrder = [selectedModel, ...models.filter((model) => model !== selectedModel)];
11471
- timingsMs.probe = Date.now() - probeStart;
11475
+ timingsMs.probe = elapsedMs(probeStart);
11472
11476
  markStageDone("probe", `\uD504\uB85C\uBE0C \uC644\uB8CC: ${selectedModel}`);
11473
11477
  logStage("info", "probe", "done", "\uBAA8\uB378 \uD504\uB85C\uBE0C \uC644\uB8CC(\uCCAB \uC131\uACF5 \uBAA8\uB378 \uC6B0\uC120)", { selectedModel, firstDurationMs: selected.firstDurationMs, elapsedMs: timingsMs.probe });
11474
11478
  const probeResultsPromise = probeRuns.allResults.then(async (results) => {
11475
11479
  await updateModelCache(modelCachePath, results);
11476
11480
  return results;
11477
11481
  });
11478
- const ocrStart = Date.now();
11482
+ const ocrStart = import_node_perf_hooks.performance.now();
11479
11483
  currentStage = "ocr";
11480
11484
  markStageStart("ocr", `OCR \uC9C4\uD589 \uC911 (${selectedModel})`);
11481
11485
  logStage("info", "ocr", "start", "\uD398\uC774\uC9C0 OCR \uC2DC\uC791", { selectedModel, pageCount: images.length });
@@ -11499,10 +11503,10 @@ async function runUnifiedOcrPipeline(inputPath, options = {}) {
11499
11503
  markStageProgress("ocr", Math.round((i + 1) / images.length * 100), i + 1, images.length, `OCR ${i + 1}/${images.length}`);
11500
11504
  logStage("debug", "ocr", "progress", "\uD398\uC774\uC9C0 OCR \uC644\uB8CC", { page: i + 1, total: images.length });
11501
11505
  }
11502
- timingsMs.ocr = Date.now() - ocrStart;
11506
+ timingsMs.ocr = elapsedMs(ocrStart);
11503
11507
  markStageDone("ocr", "OCR \uC644\uB8CC");
11504
11508
  logStage("info", "ocr", "done", "\uD398\uC774\uC9C0 OCR \uC644\uB8CC", { elapsedMs: timingsMs.ocr });
11505
- const proofStart = Date.now();
11509
+ const proofStart = import_node_perf_hooks.performance.now();
11506
11510
  currentStage = "proofread";
11507
11511
  markStageStart("proofread", "\uBE44\uD30C\uAD34 \uAD50\uC815 \uC9C4\uD589 \uC911");
11508
11512
  logStage("info", "proofread", "start", "\uBE44\uD30C\uAD34 \uAD50\uC815 \uC2DC\uC791", { pages: rawPagePaths.length });
@@ -11538,16 +11542,16 @@ ${rawMd}
11538
11542
  markStageProgress("proofread", Math.round((i + 1) / rawPagePaths.length * 100), i + 1, rawPagePaths.length, `\uAD50\uC815 ${i + 1}/${rawPagePaths.length}`);
11539
11543
  logStage("debug", "proofread", "progress", "\uD398\uC774\uC9C0 \uAD50\uC815 \uC644\uB8CC", { page: i + 1, total: rawPagePaths.length });
11540
11544
  }
11541
- timingsMs.proofread = Date.now() - proofStart;
11545
+ timingsMs.proofread = elapsedMs(proofStart);
11542
11546
  markStageDone("proofread", "\uAD50\uC815 \uC644\uB8CC");
11543
11547
  logStage("info", "proofread", "done", "\uBE44\uD30C\uAD34 \uAD50\uC815 \uC644\uB8CC", { elapsedMs: timingsMs.proofread });
11544
- const mergeStart = Date.now();
11548
+ const mergeStart = import_node_perf_hooks.performance.now();
11545
11549
  currentStage = "merge";
11546
11550
  markStageStart("merge", "\uCD5C\uC885 Markdown \uBCD1\uD569 \uC911");
11547
11551
  logStage("info", "merge", "start", "\uCD5C\uC885 \uBCD1\uD569 \uC2DC\uC791", { pages: proofedPaths.length });
11548
11552
  const merged = await mergeMarkdownPages(proofedPaths);
11549
11553
  await (0, import_promises2.writeFile)(outputPath, merged, "utf-8");
11550
- timingsMs.merge = Date.now() - mergeStart;
11554
+ timingsMs.merge = elapsedMs(mergeStart);
11551
11555
  markStageDone("merge", "\uBCD1\uD569 \uC644\uB8CC");
11552
11556
  logStage("info", "merge", "done", "\uCD5C\uC885 \uBCD1\uD569 \uC644\uB8CC", { outputPath, elapsedMs: timingsMs.merge });
11553
11557
  const report = {
@@ -11708,7 +11712,7 @@ function startParallelProbeRuns(input) {
11708
11712
  });
11709
11713
  let lastErr = "\uC18D\uB3C4 \uD504\uB85C\uBE0C \uC2E4\uD328: \uC0AC\uC6A9 \uAC00\uB2A5\uD55C OCR \uBAA8\uB378\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.";
11710
11714
  const allResults = mapWithConcurrency(input.models, input.probeConcurrency, async (model, index) => {
11711
- const t0 = Date.now();
11715
+ const t0 = import_node_perf_hooks.performance.now();
11712
11716
  try {
11713
11717
  await ocrImageViaNim({
11714
11718
  imagePath: input.probeImage,
@@ -11722,7 +11726,7 @@ function startParallelProbeRuns(input) {
11722
11726
  logger: input.logger,
11723
11727
  stage: "probe"
11724
11728
  });
11725
- const result = { model, durationMs: Date.now() - t0, success: true };
11729
+ const result = { model, durationMs: elapsedMs(t0), success: true };
11726
11730
  input.onProbeResult?.({ index, model, result });
11727
11731
  if (!firstResolved) {
11728
11732
  firstResolved = true;
@@ -11732,7 +11736,7 @@ function startParallelProbeRuns(input) {
11732
11736
  } catch (err) {
11733
11737
  const result = {
11734
11738
  model,
11735
- durationMs: Date.now() - t0,
11739
+ durationMs: elapsedMs(t0),
11736
11740
  success: false,
11737
11741
  error: err instanceof Error ? err.message : String(err)
11738
11742
  };