@clazic/kordoc 2.1.1 → 2.1.3

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/README.md CHANGED
@@ -2,14 +2,11 @@
2
2
 
3
3
  **모두 파싱해버리겠다.**
4
4
 
5
- [![npm version](https://img.shields.io/npm/v/kordoc.svg)](https://www.npmjs.com/package/kordoc)
6
- [![license](https://img.shields.io/npm/l/kordoc.svg)](https://github.com/chrisryugj/kordoc/blob/main/LICENSE)
5
+ [![npm version](https://img.shields.io/npm/v/@clazic/kordoc.svg)](https://www.npmjs.com/package/@clazic/kordoc)
6
+ [![license](https://img.shields.io/npm/l/@clazic/kordoc.svg)](https://github.com/clazic/kordoc/blob/main/LICENSE)
7
7
 
8
8
  HWP, HWPX, PDF, XLSX, DOCX — 관공서에서 쏟아지는 모든 문서를 파싱하고, 비교하고, 분석하고, 생성합니다.
9
9
 
10
- [English](./README-EN.md)
11
-
12
- ![kordoc 데모](./demo.gif)
13
10
 
14
11
  ---
15
12
 
@@ -108,10 +105,7 @@ HWP, HWPX, PDF, XLSX, DOCX — 관공서에서 쏟아지는 모든 문서를 파
108
105
  ## 설치
109
106
 
110
107
  ```bash
111
- npm install kordoc
112
-
113
- # PDF 파싱이 필요하면 (선택)
114
- npm install pdfjs-dist
108
+ npm install @clazic/kordoc
115
109
  ```
116
110
 
117
111
  ## 빠른 시작
@@ -119,7 +113,7 @@ npm install pdfjs-dist
119
113
  ### 문서 파싱
120
114
 
121
115
  ```typescript
122
- import { parse } from "kordoc"
116
+ import { parse } from "@clazic/kordoc"
123
117
  import { readFileSync } from "fs"
124
118
 
125
119
  const buffer = readFileSync("사업계획서.hwpx")
@@ -135,7 +129,7 @@ if (result.success) {
135
129
  ### 문서 비교 (신구대조표)
136
130
 
137
131
  ```typescript
138
- import { compare } from "kordoc"
132
+ import { compare } from "@clazic/kordoc"
139
133
 
140
134
  const diff = await compare(구버전Buffer, 신버전Buffer)
141
135
  // diff.stats → { added: 3, removed: 1, modified: 5, unchanged: 42 }
@@ -147,7 +141,7 @@ HWP vs HWPX 크로스 포맷 비교도 가능합니다.
147
141
  ### 양식 필드 추출
148
142
 
149
143
  ```typescript
150
- import { parse, extractFormFields } from "kordoc"
144
+ import { parse, extractFormFields } from "@clazic/kordoc"
151
145
 
152
146
  const result = await parse(buffer)
153
147
  if (result.success) {
@@ -160,7 +154,7 @@ if (result.success) {
160
154
  ### HWPX 생성 (역변환)
161
155
 
162
156
  ```typescript
163
- import { markdownToHwpx } from "kordoc"
157
+ import { markdownToHwpx } from "@clazic/kordoc"
164
158
 
165
159
  const hwpxBuffer = await markdownToHwpx("# 제목\n\n본문 텍스트\n\n| 이름 | 직급 |\n| --- | --- |\n| 홍길동 | 과장 |")
166
160
  writeFileSync("출력.hwpx", Buffer.from(hwpxBuffer))
@@ -186,23 +180,45 @@ const result = await parse(buffer, {
186
180
  ## CLI
187
181
 
188
182
  ```bash
189
- npx kordoc 사업계획서.hwpx # 터미널 출력
190
- npx kordoc 보고서.hwp -o 보고서.md # 파일 저장
191
- npx kordoc *.pdf -d ./변환결과/ # 일괄 변환
192
- npx kordoc 검토서.hwpx --format json # JSON (blocks + metadata 포함)
193
- npx kordoc 보고서.hwpx --pages 1-3 # 페이지 범위
194
- npx kordoc watch ./수신함 -d ./변환결과 # 폴더 감시 모드
195
- npx kordoc watch ./문서 --webhook https://api/hook # 웹훅 알림
183
+ # 전역 설치 (권장)
184
+ npm install -g @clazic/kordoc
185
+
186
+ kordoc 사업계획서.hwpx # 터미널 출력
187
+ kordoc 보고서.hwp -o 보고서.md # 파일 저장
188
+ kordoc *.pdf -d ./변환결과/ # 일괄 변환
189
+ kordoc 검토서.hwpx --format json # JSON (blocks + metadata 포함)
190
+ kordoc 보고서.hwpx --pages 1-3 # 페이지 범위
191
+ kordoc watch ./수신함 -d ./변환결과 # 폴더 감시 모드
192
+ kordoc watch ./문서 --webhook https://api/hook # 웹훅 알림
196
193
  ```
197
194
 
198
195
  ## MCP 서버 (Claude / Cursor / Windsurf)
199
196
 
197
+ ### 원격 MCP (설치 불필요 — 파일을 base64로 전송)
198
+
199
+ ```json
200
+ {
201
+ "mcpServers": {
202
+ "kordoc": {
203
+ "serverUrl": "https://kordoc-mcp.clazic.workers.dev"
204
+ }
205
+ }
206
+ }
207
+ ```
208
+
209
+ > HWPX, XLSX, DOCX, PDF 지원. HWP 5.x는 로컬 MCP 사용.
210
+
211
+ ### 로컬 MCP (HWP 5.x 포함 전 포맷, 파일 경로 직접 접근)
212
+
213
+ ```bash
214
+ npm install -g @clazic/kordoc
215
+ ```
216
+
200
217
  ```json
201
218
  {
202
219
  "mcpServers": {
203
220
  "kordoc": {
204
- "command": "npx",
205
- "args": ["-y", "kordoc-mcp"]
221
+ "command": "kordoc-mcp"
206
222
  }
207
223
  }
208
224
  }
@@ -253,7 +269,7 @@ import type {
253
269
  DiffResult, BlockDiff, CellDiff, DiffChangeType,
254
270
  FormField, FormResult,
255
271
  OcrProvider, WatchOptions,
256
- } from "kordoc"
272
+ } from "@clazic/kordoc"
257
273
  ```
258
274
 
259
275
  ## 지원 포맷
@@ -272,8 +288,8 @@ import type {
272
288
 
273
289
  ## 만든 사람
274
290
 
275
- 대한민국 지방공무원. 광진구청에서 7년간 HWP 파일과 싸우다가 이걸 만들었습니다.
276
- 5개 공공 프로젝트에서 수천 건의 실제 관공서 문서를 파싱하며 검증했습니다.
291
+ chrisryugj님의 kordoc을 fork해서 수정하고 사용하고 있습니다.
292
+
277
293
 
278
294
  ## 라이선스
279
295
 
@@ -6,7 +6,7 @@ import {
6
6
  precheckZipSize,
7
7
  sanitizeHref,
8
8
  toArrayBuffer
9
- } from "./chunk-PKIJLEV6.js";
9
+ } from "./chunk-WQNXZXC4.js";
10
10
  import {
11
11
  parsePageRange
12
12
  } from "./chunk-MOL7MDBG.js";
@@ -5491,4 +5491,4 @@ export {
5491
5491
  extractFormFields,
5492
5492
  parse
5493
5493
  };
5494
- //# sourceMappingURL=chunk-R6J5ZSDL.js.map
5494
+ //# sourceMappingURL=chunk-P7ZKUWEP.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/utils.ts
4
- var VERSION = true ? "2.1.0" : "0.0.0-dev";
4
+ var VERSION = true ? "2.1.3" : "0.0.0-dev";
5
5
  function toArrayBuffer(buf) {
6
6
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
7
7
  return buf.buffer;
@@ -90,4 +90,4 @@ export {
90
90
  sanitizeHref,
91
91
  classifyError
92
92
  };
93
- //# sourceMappingURL=chunk-PKIJLEV6.js.map
93
+ //# sourceMappingURL=chunk-WQNXZXC4.js.map
package/dist/cli.js CHANGED
@@ -2,11 +2,11 @@
2
2
  import {
3
3
  detectFormat,
4
4
  parse
5
- } from "./chunk-R6J5ZSDL.js";
5
+ } from "./chunk-P7ZKUWEP.js";
6
6
  import {
7
7
  VERSION,
8
8
  toArrayBuffer
9
- } from "./chunk-PKIJLEV6.js";
9
+ } from "./chunk-WQNXZXC4.js";
10
10
  import "./chunk-MOL7MDBG.js";
11
11
 
12
12
  // src/cli.ts
@@ -92,7 +92,7 @@ program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\
92
92
  process.stdout.write(output + "\n");
93
93
  }
94
94
  } catch (err) {
95
- const { sanitizeError } = await import("./utils-BWQ2RGUD.js");
95
+ const { sanitizeError } = await import("./utils-G5QGECZV.js");
96
96
  process.stderr.write(`
97
97
  [kordoc] ERROR: ${fileName} \u2014 ${sanitizeError(err)}
98
98
  `);
@@ -101,7 +101,7 @@ program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\
101
101
  }
102
102
  });
103
103
  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) => {
104
- const { watchDirectory } = await import("./watch-U4AVI5RY.js");
104
+ const { watchDirectory } = await import("./watch-F4ZAMRJ2.js");
105
105
  await watchDirectory({
106
106
  dir,
107
107
  outDir: opts.outDir,
package/dist/index.cjs CHANGED
@@ -181,7 +181,7 @@ var import_jszip2 = __toESM(require("jszip"), 1);
181
181
  var import_xmldom = require("@xmldom/xmldom");
182
182
 
183
183
  // src/utils.ts
184
- var VERSION = true ? "2.1.0" : "0.0.0-dev";
184
+ var VERSION = true ? "2.1.3" : "0.0.0-dev";
185
185
  function toArrayBuffer(buf) {
186
186
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
187
187
  return buf.buffer;
package/dist/index.js CHANGED
@@ -137,7 +137,7 @@ import JSZip2 from "jszip";
137
137
  import { DOMParser } from "@xmldom/xmldom";
138
138
 
139
139
  // src/utils.ts
140
- var VERSION = true ? "2.1.0" : "0.0.0-dev";
140
+ var VERSION = true ? "2.1.3" : "0.0.0-dev";
141
141
  function toArrayBuffer(buf) {
142
142
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
143
143
  return buf.buffer;
package/dist/mcp.js CHANGED
@@ -8,13 +8,13 @@ import {
8
8
  extractHwpxMetadataOnly,
9
9
  extractPdfMetadataOnly,
10
10
  parse
11
- } from "./chunk-R6J5ZSDL.js";
11
+ } from "./chunk-P7ZKUWEP.js";
12
12
  import {
13
13
  KordocError,
14
14
  VERSION,
15
15
  sanitizeError,
16
16
  toArrayBuffer
17
- } from "./chunk-PKIJLEV6.js";
17
+ } from "./chunk-WQNXZXC4.js";
18
18
  import "./chunk-MOL7MDBG.js";
19
19
 
20
20
  // src/mcp.ts
@@ -8,7 +8,7 @@ import {
8
8
  sanitizeError,
9
9
  sanitizeHref,
10
10
  toArrayBuffer
11
- } from "./chunk-PKIJLEV6.js";
11
+ } from "./chunk-WQNXZXC4.js";
12
12
  export {
13
13
  KordocError,
14
14
  VERSION,
@@ -19,4 +19,4 @@ export {
19
19
  sanitizeHref,
20
20
  toArrayBuffer
21
21
  };
22
- //# sourceMappingURL=utils-BWQ2RGUD.js.map
22
+ //# sourceMappingURL=utils-G5QGECZV.js.map
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  detectFormat,
4
4
  parse
5
- } from "./chunk-R6J5ZSDL.js";
5
+ } from "./chunk-P7ZKUWEP.js";
6
6
  import {
7
7
  toArrayBuffer
8
- } from "./chunk-PKIJLEV6.js";
8
+ } from "./chunk-WQNXZXC4.js";
9
9
  import "./chunk-MOL7MDBG.js";
10
10
 
11
11
  // src/watch.ts
@@ -125,4 +125,4 @@ async function sendWebhook(url, payload) {
125
125
  export {
126
126
  watchDirectory
127
127
  };
128
- //# sourceMappingURL=watch-U4AVI5RY.js.map
128
+ //# sourceMappingURL=watch-F4ZAMRJ2.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clazic/kordoc",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "Parse Korean documents (HWP, HWPX, PDF, XLSX, DOCX) to Markdown",
5
5
  "type": "module",
6
6
  "exports": {
@@ -59,16 +59,9 @@
59
59
  "cfb": "1.2.2",
60
60
  "commander": "^13.0.0",
61
61
  "jszip": "^3.10.1",
62
+ "pdfjs-dist": "^4.10.38",
62
63
  "zod": "^3.23.0"
63
64
  },
64
- "peerDependencies": {
65
- "pdfjs-dist": ">=4.0.0"
66
- },
67
- "peerDependenciesMeta": {
68
- "pdfjs-dist": {
69
- "optional": true
70
- }
71
- },
72
65
  "devDependencies": {
73
66
  "@types/node": "^18.19.130",
74
67
  "pdfjs-dist": "^4.10.38",