@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 +41 -25
- package/dist/{chunk-R6J5ZSDL.js → chunk-P7ZKUWEP.js} +2 -2
- package/dist/{chunk-PKIJLEV6.js → chunk-WQNXZXC4.js} +2 -2
- package/dist/cli.js +4 -4
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/mcp.js +2 -2
- package/dist/{utils-BWQ2RGUD.js → utils-G5QGECZV.js} +2 -2
- package/dist/{watch-U4AVI5RY.js → watch-F4ZAMRJ2.js} +3 -3
- package/package.json +2 -9
- /package/dist/{chunk-R6J5ZSDL.js.map → chunk-P7ZKUWEP.js.map} +0 -0
- /package/dist/{chunk-PKIJLEV6.js.map → chunk-WQNXZXC4.js.map} +0 -0
- /package/dist/{utils-BWQ2RGUD.js.map → utils-G5QGECZV.js.map} +0 -0
- /package/dist/{watch-U4AVI5RY.js.map → watch-F4ZAMRJ2.js.map} +0 -0
package/README.md
CHANGED
|
@@ -2,14 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
**모두 파싱해버리겠다.**
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/kordoc)
|
|
6
|
-
[](https://github.com/
|
|
5
|
+
[](https://www.npmjs.com/package/@clazic/kordoc)
|
|
6
|
+
[](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
|
-

|
|
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
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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": "
|
|
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
|
-
|
|
276
|
-
|
|
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-
|
|
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-
|
|
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.
|
|
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-
|
|
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-
|
|
5
|
+
} from "./chunk-P7ZKUWEP.js";
|
|
6
6
|
import {
|
|
7
7
|
VERSION,
|
|
8
8
|
toArrayBuffer
|
|
9
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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.
|
|
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.
|
|
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-
|
|
11
|
+
} from "./chunk-P7ZKUWEP.js";
|
|
12
12
|
import {
|
|
13
13
|
KordocError,
|
|
14
14
|
VERSION,
|
|
15
15
|
sanitizeError,
|
|
16
16
|
toArrayBuffer
|
|
17
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
22
|
+
//# sourceMappingURL=utils-G5QGECZV.js.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
detectFormat,
|
|
4
4
|
parse
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-P7ZKUWEP.js";
|
|
6
6
|
import {
|
|
7
7
|
toArrayBuffer
|
|
8
|
-
} from "./chunk-
|
|
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-
|
|
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.
|
|
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",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|