@clazic/kordoc 2.2.0 → 2.2.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/dist/index.js CHANGED
@@ -1962,13 +1962,11 @@ var require_cfb = __commonJS({
1962
1962
 
1963
1963
  // src/ocr/auto-detect.ts
1964
1964
  import { execSync } from "child_process";
1965
- import { createRequire } from "module";
1966
1965
  function detectAvailableOcr() {
1967
1966
  for (const cli of CLI_PRIORITY) {
1968
1967
  if (isCliInstalled(cli)) return cli;
1969
1968
  }
1970
- if (isTesseractAvailable()) return "tesseract";
1971
- return null;
1969
+ return "tesseract";
1972
1970
  }
1973
1971
  function isCliInstalled(name) {
1974
1972
  try {
@@ -1979,25 +1977,8 @@ function isCliInstalled(name) {
1979
1977
  return false;
1980
1978
  }
1981
1979
  }
1982
- function isTesseractAvailable() {
1983
- try {
1984
- const require2 = createRequire(import.meta.url);
1985
- require2.resolve("tesseract.js");
1986
- return true;
1987
- } catch {
1988
- return false;
1989
- }
1990
- }
1991
1980
  function validateOcrMode(mode) {
1992
- if (mode === "auto" || mode === "off") return;
1993
- if (mode === "tesseract") {
1994
- if (!isTesseractAvailable()) {
1995
- throw new Error(
1996
- "tesseract.js\uAC00 \uC124\uCE58\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.\n\uC124\uCE58: npm install tesseract.js"
1997
- );
1998
- }
1999
- return;
2000
- }
1981
+ if (mode === "auto" || mode === "off" || mode === "tesseract") return;
2001
1982
  if (!isCliInstalled(mode)) {
2002
1983
  throw new Error(`'${mode}' CLI\uAC00 \uC124\uCE58\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
2003
1984
  ${getInstallGuide(mode)}`);
@@ -2012,6 +1993,17 @@ function getInstallGuide(mode) {
2012
1993
  };
2013
1994
  return guides[mode] || `'${mode}'\uC744(\uB97C) \uC124\uCE58\uD574\uC8FC\uC138\uC694.`;
2014
1995
  }
1996
+ function getTesseractFallbackMessage() {
1997
+ return [
1998
+ "\uC124\uCE58\uB41C AI CLI\uAC00 \uC5C6\uC5B4 \uB0B4\uC7A5 tesseract.js\uB85C OCR\uC744 \uC218\uD589\uD569\uB2C8\uB2E4.",
1999
+ "\uB354 \uB098\uC740 \uD488\uC9C8(\uD14C\uC774\uBE14/\uD5E4\uB529 \uAD6C\uC870 \uBCF4\uC874)\uC744 \uC704\uD574 AI CLI \uC124\uCE58\uB97C \uAD8C\uC7A5\uD569\uB2C8\uB2E4:",
2000
+ "",
2001
+ " [\uAD8C\uC7A5] Gemini CLI: https://ai.google.dev/gemini-api/docs/cli",
2002
+ " Claude CLI: npm install -g @anthropic-ai/claude-code",
2003
+ " Codex CLI: npm install -g @openai/codex",
2004
+ " Ollama: brew install ollama (+ ollama pull gemma4:27b)"
2005
+ ].join("\n");
2006
+ }
2015
2007
  var CLI_PRIORITY;
2016
2008
  var init_auto_detect = __esm({
2017
2009
  "src/ocr/auto-detect.ts"() {
@@ -2124,16 +2116,9 @@ var tesseract_provider_exports = {};
2124
2116
  __export(tesseract_provider_exports, {
2125
2117
  createTesseractProvider: () => createTesseractProvider
2126
2118
  });
2119
+ import { createWorker } from "tesseract.js";
2127
2120
  async function createTesseractProvider() {
2128
- let tesseract;
2129
- try {
2130
- tesseract = await import("tesseract.js");
2131
- } catch {
2132
- throw new Error(
2133
- "tesseract.js\uAC00 \uC124\uCE58\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.\n\uC124\uCE58: npm install tesseract.js"
2134
- );
2135
- }
2136
- const worker = await tesseract.createWorker("kor+eng");
2121
+ const worker = await createWorker("kor+eng");
2137
2122
  let terminated = false;
2138
2123
  const provider = async (pageImage, _pageNumber, _mimeType) => {
2139
2124
  const { data } = await worker.recognize(pageImage);
@@ -2171,20 +2156,20 @@ async function resolveOcrProvider(mode, warnings) {
2171
2156
  return createCliOcrProvider(mode);
2172
2157
  }
2173
2158
  const detected = detectAvailableOcr();
2174
- if (!detected) {
2175
- throw new Error("\uC0AC\uC6A9 \uAC00\uB2A5\uD55C OCR \uB3C4\uAD6C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");
2176
- }
2177
2159
  if (detected !== "gemini") {
2178
- warnings?.push({
2179
- message: `OCR: '${detected}' \uC0AC\uC6A9 \uC911 (gemini CLI\uAC00 \uC5C6\uC5B4 fallback). \uB354 \uB098\uC740 \uD488\uC9C8\uC744 \uC704\uD574 gemini CLI \uC124\uCE58\uB97C \uAD8C\uC7A5\uD569\uB2C8\uB2E4.`,
2180
- code: "OCR_CLI_FALLBACK"
2181
- });
2160
+ if (detected === "tesseract") {
2161
+ warnings?.push({
2162
+ message: getTesseractFallbackMessage(),
2163
+ code: "OCR_CLI_FALLBACK"
2164
+ });
2165
+ } else {
2166
+ warnings?.push({
2167
+ message: `OCR: '${detected}' \uC0AC\uC6A9 \uC911 (gemini CLI\uAC00 \uC5C6\uC5B4 fallback). \uB354 \uB098\uC740 \uD488\uC9C8\uC744 \uC704\uD574 gemini CLI \uC124\uCE58\uB97C \uAD8C\uC7A5\uD569\uB2C8\uB2E4.`,
2168
+ code: "OCR_CLI_FALLBACK"
2169
+ });
2170
+ }
2182
2171
  }
2183
2172
  if (detected === "tesseract") {
2184
- warnings?.push({
2185
- message: "tesseract.js\uB294 \uD14C\uC774\uBE14 \uAD6C\uC870\uB97C \uBCF5\uC6D0\uD558\uC9C0 \uBABB\uD569\uB2C8\uB2E4. Vision LLM CLI(gemini/claude/codex) \uC124\uCE58\uB97C \uAD8C\uC7A5\uD569\uB2C8\uB2E4.",
2186
- code: "OCR_CLI_FALLBACK"
2187
- });
2188
2173
  const { createTesseractProvider: createTesseractProvider2 } = await Promise.resolve().then(() => (init_tesseract_provider(), tesseract_provider_exports));
2189
2174
  return createTesseractProvider2();
2190
2175
  }
@@ -2353,13 +2338,7 @@ async function ocrPages(doc, provider, pageFilter, effectivePageCount, warnings)
2353
2338
  return blocks;
2354
2339
  }
2355
2340
  async function renderPageToPng(page) {
2356
- let createCanvas;
2357
- try {
2358
- const canvasModule = await import("canvas");
2359
- createCanvas = canvasModule.createCanvas;
2360
- } catch {
2361
- throw new Error("OCR\uC744 \uC0AC\uC6A9\uD558\uB824\uBA74 'canvas' \uD328\uD0A4\uC9C0\uB97C \uC124\uCE58\uD558\uC138\uC694: npm install canvas");
2362
- }
2341
+ const { createCanvas } = await import("@napi-rs/canvas");
2363
2342
  const scale = 2;
2364
2343
  const viewport = page.getViewport({ scale });
2365
2344
  const canvas = createCanvas(Math.floor(viewport.width), Math.floor(viewport.height));
@@ -2423,7 +2402,7 @@ import JSZip2 from "jszip";
2423
2402
  import { DOMParser } from "@xmldom/xmldom";
2424
2403
 
2425
2404
  // src/utils.ts
2426
- var VERSION = true ? "2.2.0" : "0.0.0-dev";
2405
+ var VERSION = true ? "2.2.2" : "0.0.0-dev";
2427
2406
  function toArrayBuffer(buf) {
2428
2407
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
2429
2408
  return buf.buffer;