Skip to content

Latest commit

ย 

History

History
138 lines (98 loc) ยท 3.65 KB

File metadata and controls

138 lines (98 loc) ยท 3.65 KB

HWPJS

ํ•œ๊ธ€๊ณผ์ปดํ“จํ„ฐ์˜ ํ•œ/๊ธ€ ๋ฌธ์„œ ํŒŒ์ผ(.hwp)์„ ์ฝ๊ณ  ํŒŒ์‹ฑํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋ณธ ์ œํ’ˆ์€ ํ•œ๊ธ€๊ณผ์ปดํ“จํ„ฐ์˜ ํ•œ/๊ธ€ ๋ฌธ์„œ ํŒŒ์ผ(.hwp) ๊ณต๊ฐœ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐœ ๋ฌธ์„œ ๋‹ค์šด๋กœ๋“œ

์ฃผ์š” ๊ธฐ๋Šฅ

  • JSON ๋ณ€ํ™˜: HWP ๋ฌธ์„œ ๊ตฌ์กฐ๋ฅผ JSON์œผ๋กœ ์ถ”์ถœ
  • Markdown ๋ณ€ํ™˜: ํ…์ŠคํŠธ, ํ…Œ์ด๋ธ”, ์ด๋ฏธ์ง€๋ฅผ ํฌํ•จํ•œ Markdown ๋ณ€ํ™˜
  • HTML ๋ณ€ํ™˜: CSS ์Šคํƒ€์ผ๋ง์ด ์ ์šฉ๋œ ์™„์ „ํ•œ HTML ๋ฌธ์„œ ์ƒ์„ฑ
  • CLI ๋„๊ตฌ: ๋‹จ์ผ ํŒŒ์ผ ๋ณ€ํ™˜, ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ, ์ด๋ฏธ์ง€ ์ถ”์ถœ
  • ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ: Node.js, Web(WASM), React Native ์ง€์›

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

์ด ํ”„๋กœ์ ํŠธ๋Š” Bun ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

hwpjs/
โ”œโ”€โ”€ crates/
โ”‚   โ””โ”€โ”€ hwp-core/          # ๊ณต์œ  Rust ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (ํ•ต์‹ฌ HWP ํŒŒ์‹ฑ ๋กœ์ง)
โ”œโ”€โ”€ packages/
โ”‚   โ””โ”€โ”€ hwpjs/             # ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ํŒจํ‚ค์ง€ (Node.js, Web, React Native)
โ”œโ”€โ”€ examples/              # ์‚ฌ์šฉ ์˜ˆ์ œ
โ”‚   โ”œโ”€โ”€ node/              # Node.js ์˜ˆ์ œ
โ”‚   โ”œโ”€โ”€ web/               # Web ์˜ˆ์ œ (React + Vite)
โ”‚   โ”œโ”€โ”€ react-native/      # React Native ์˜ˆ์ œ
โ”‚   โ””โ”€โ”€ cli/               # CLI ์‚ฌ์šฉ ์˜ˆ์ œ
โ”œโ”€โ”€ documents/             # ๋ฌธ์„œ ์‚ฌ์ดํŠธ (Rspress)
โ””โ”€โ”€ e2e/                   # E2E ํ…Œ์ŠคํŠธ (Playwright)

๊ธฐ์ˆ  ์Šคํƒ

  • Rust: ํ•ต์‹ฌ ํŒŒ์‹ฑ/๋ณ€ํ™˜ ๋กœ์ง
  • NAPI-RS: Node.js ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ
  • Craby: React Native ๋ฐ”์ธ๋”ฉ
  • Bun: ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ
  • Rspress: ๋ฌธ์„œ ์‚ฌ์ดํŠธ

์‚ฌ์šฉ๋ฒ•

์„ค์น˜

npm install @ohah/hwpjs

API ์‚ฌ์šฉ

import { toJson, toMarkdown, toHtml, fileHeader } from '@ohah/hwpjs';
import { readFileSync } from 'fs';

const data = readFileSync('./document.hwp');

// JSON ๋ณ€ํ™˜
const json = toJson(data);

// Markdown ๋ณ€ํ™˜
const { markdown, images } = toMarkdown(data, {
  image: 'base64',
  useHtml: true,
});

// HTML ๋ณ€ํ™˜
const html = toHtml(data, {
  includeVersion: true,
});

// ํŒŒ์ผ ํ—ค๋” ์ถ”์ถœ
const header = fileHeader(data);

CLI ์‚ฌ์šฉ

# ์ „์—ญ ์„ค์น˜
npm install -g @ohah/hwpjs

# JSON ๋ณ€ํ™˜
hwpjs to-json document.hwp -o output.json --pretty

# Markdown ๋ณ€ํ™˜
hwpjs to-markdown document.hwp -o output.md --include-images

# HTML ๋ณ€ํ™˜
hwpjs to-html document.hwp -o output.html

# ํŒŒ์ผ ์ •๋ณด ํ™•์ธ
hwpjs info document.hwp

# ์ด๋ฏธ์ง€ ์ถ”์ถœ
hwpjs extract-images document.hwp -o ./images

# ๋ฐฐ์น˜ ๋ณ€ํ™˜
hwpjs batch ./documents -o ./output --format json --recursive

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ CLI ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ

ํ™˜๊ฒฝ ์„ค์ •

mise(๋ฏธ์ฆˆ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

mise install

์Šคํฌ๋ฆฝํŠธ

  • bun run test:rust - Rust ํ…Œ์ŠคํŠธ ์‹คํ–‰
  • bun run test:node - Node.js ํ…Œ์ŠคํŠธ ์‹คํ–‰
  • bun run dev:docs - ๋ฌธ์„œ ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ์„œ๋ฒ„
  • bun run dev:web - Web ์˜ˆ์ œ ๊ฐœ๋ฐœ ์„œ๋ฒ„
  • bun run lint - ๋ฆฐํŠธ ๊ฒ€์‚ฌ
  • bun run format - ์ฝ”๋“œ ํฌ๋งทํŒ…
  • bun run build - ์ „์ฒด ๋นŒ๋“œ

์ฐธ๊ณ ํ•œ ํ”„๋กœ์ ํŠธ

์ด์Šˆ ์ œ์•ˆ ๋ฐ ๊ฑด์˜

ํ•ด๋‹น ๊นƒํ—ˆ๋ธŒ์— ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

๋ผ์ด์„ผ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.