netscape-bookmark-parser 1.1.2 → 1.1.4

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-ja.md CHANGED
@@ -1,18 +1,19 @@
1
1
  # Netscape Bookmark Parser
2
2
 
3
- > **注意:**
4
- > この README は AI 生成されたドキュメントです。詳細はほぼ正確ですが、不正確な説明が含まれる可能性があります。
3
+ ブラウザのブックマークファイル(HTML 形式)を解析し、構造化データとして操作できる TypeScript/JavaScript ライブラリです。Deno と Node.js の両方のランタイムに対応しています。
5
4
 
6
- ブラウザのブックマークファイル(HTML 形式)を解析し、構造化データとして操作するための TypeScript/JavaScript ライブラリです。Deno と Node.js の両方のランタイムに対応しています。
5
+ > **注意:**
6
+ > この README は AI による自動生成です。内容はほぼ正確ですが、不正確な説明が含まれる場合があります。
7
+ > 英語版ドキュメント: [`./README.md`](./README.md)
7
8
 
8
- ## 機能
9
+ ## 特徴
9
10
 
10
- - **HTML ブックマークファイルの解析**: Chrome、Firefox、Safari、その他のブラウザからエクスポートされた HTML ブックマークファイルを解析
11
- - **階層構造の保持**: フォルダとブックマークの階層構造を完全に保持
12
- - **双方向変換**: HTML からデータ構造への変換とその逆の変換をサポート
13
- - **JSON シリアライゼーション**: ブックマークツリーを JSON として保存・復元
14
- - **Deno & Node.js 対応**: Deno と Node.js の両方のランタイムで動作
15
- - **型安全性**: 包括的な型定義によるフル TypeScript サポート
11
+ - **HTML ブックマークファイルの解析**: Chrome、Firefox、Safari など各種ブラウザからエクスポートされた HTML ブックマークファイルを解析
12
+ - **階層構造の完全保持**: フォルダやブックマークの階層構造を忠実に再現
13
+ - **双方向変換**: HTML データ構造の相互変換に対応
14
+ - **JSON シリアライズ**: ブックマークツリーを JSON として保存・復元可能
15
+ - **Deno & Node.js 両対応**: どちらのランタイムでも動作
16
+ - **型安全**: TypeScript による型定義を完備
16
17
 
17
18
  ## インストール
18
19
 
@@ -22,6 +23,10 @@
22
23
  npm install netscape-bookmark-parser
23
24
  ```
24
25
 
26
+ ```typescript
27
+ import { BookmarksParser, BookmarksTree } from "netscape-bookmark-parser";
28
+ ```
29
+
25
30
  ### Deno
26
31
 
27
32
  ```typescript
@@ -31,16 +36,16 @@ import {
31
36
  } from "jsr:@grakeice/netscape-bookmark-parser";
32
37
  ```
33
38
 
34
- > **注意:** JSR 版は Node.js/Deno ランタイム版のみを含んでいます。ブラウザサポートが必要な場合は、npm パッケージをご使用ください。
39
+ > **注意:** JSR 版は Node.js/Deno ランタイムのみ対応です。ブラウザで利用する場合は npm パッケージをご利用ください。
35
40
 
36
41
  ### ブラウザ
37
42
 
38
- #### オプション 1: ビルドツールの使用(推奨)
43
+ #### オプション 1: ビルドツール利用(推奨)
39
44
 
40
- **WebpackViteRollupParcel など:**
45
+ **Webpack, Vite, Rollup, Parcel 等:**
41
46
 
42
47
  ```typescript
43
- // ブラウザ環境では、Web最適化版を使用
48
+ // ブラウザ環境ではweb最適化版を利用
44
49
  import { BookmarksParser, BookmarksTree } from "netscape-bookmark-parser/web";
45
50
 
46
51
  // 例: アップロードされたブックマークファイルの解析
@@ -58,76 +63,59 @@ function handleFileUpload(event: Event) {
58
63
  }
59
64
  ```
60
65
 
61
- #### オプション 2: 直接 ES モジュールインポート
62
-
63
- ```html
64
- <script type="module">
65
- import {
66
- BookmarksParser,
67
- BookmarksTree,
68
- } from "./node_modules/netscape-bookmark-parser/esm/mod_web.js";
69
-
70
- // ブックマーク処理コードをここに...
71
- </script>
72
- ```
73
-
74
- #### オプション 3: Import Maps を使用した CDN
66
+ #### オプション 2: CDN + Import Maps
75
67
 
76
68
  ```html
77
69
  <script type="importmap">
78
70
  {
79
71
  "imports": {
80
- "netscape-bookmark-parser/web": "https://cdn.jsdelivr.net/npm/netscape-bookmark-parser@1.1.2/esm/mod_web.js"
72
+ "netscape-bookmark-parser/web": "https://cdn.jsdelivr.net/npm/netscape-bookmark-parser@1.1.4/esm/mod_web.js"
81
73
  }
82
74
  }
83
75
  </script>
84
76
  <script type="module">
85
77
  import { BookmarksParser, BookmarksTree } from "netscape-bookmark-parser/web";
86
-
87
- // ローカルインポートと同じように動作
88
78
  const tree = BookmarksParser.parse(htmlContent);
89
79
  </script>
90
80
  ```
91
81
 
92
- #### オプション 4: CDN を直接インポート
82
+ #### オプション 3: CDN 直接インポート
93
83
 
94
84
  ```html
95
85
  <script type="module">
96
86
  import {
97
87
  BookmarksParser,
98
88
  BookmarksTree,
99
- } from "https://cdn.jsdelivr.net/npm/netscape-bookmark-parser@1.1.2/esm/mod_web.js";
100
-
101
- // import maps なしでの直接 CDN インポート
89
+ } from "https://cdn.jsdelivr.net/npm/netscape-bookmark-parser@1.1.4/esm/mod_web.js";
102
90
  </script>
103
91
  ```
104
92
 
105
- > **ブラウザサポート:** ブラウザ互換性は npm パッケージを通してのみ利用可能です。JSR パッケージは、プラットフォーム固有の依存関係のため、Web 最適化版を含んでいません。
93
+ > **ブラウザサポート:** ブラウザ互換は npm パッケージ経由のみ。JSR パッケージには web 最適化版は含まれません。
106
94
 
107
- > **注意:** Web 最適化版は、ネイティブブラウザ API(DOMParser など)を使用し、Node.js ポリフィルを含まないため、ブラウザ環境でより軽量で高速に動作します。
95
+ > **注意:** web 最適化版は DOMParser 等のネイティブ API を利用し、Node.js 用ポリフィルを含まないため、ブラウザで軽量かつ高速です。
108
96
 
109
- ## 使用方法
97
+ ## 使い方
110
98
 
111
- ### 基本的な例
99
+ ### 基本例
112
100
 
113
101
  ```typescript
114
102
  import { BookmarksParser, BookmarksTree } from "netscape-bookmark-parser";
115
103
 
116
- // HTMLブックマークファイルを読み込み
104
+ // HTMLブックマークファイルを読み込む
117
105
  const htmlContent = `<!DOCTYPE NETSCAPE-Bookmark-file-1>
118
106
  <HTML>
119
107
  <BODY>
120
108
  <DL><p>
121
- <DT><H3>フォルダ 1</H3>
109
+ <DT><H3>Folder 1</H3>
122
110
  <DL><p>
123
- <DT><A HREF="https://example.com">例</A>
111
+ <DT><A HREF="https://example.com">Example</A>
124
112
  </DL><p>
125
113
  <DT><A HREF="https://google.com">Google</A>
126
114
  </DL><p>
127
115
  </BODY>
128
116
  </HTML>`;
129
117
 
130
- // HTMLを解析してBookmarksTreeに変換
118
+ // 解析してBookmarksTreeに変換
131
119
  const bookmarksTree = BookmarksParser.parse(htmlContent);
132
120
 
133
121
  // JSONとして出力
@@ -144,7 +132,6 @@ console.log(bookmarksTree.HTMLText);
144
132
  // 新しいブックマークツリーを作成
145
133
  const tree = new BookmarksTree();
146
134
 
147
- // ブックマークを追加
148
135
  tree.set("Google", "https://google.com");
149
136
  tree.set("GitHub", "https://github.com");
150
137
 
@@ -157,8 +144,8 @@ const toolsFolder = new BookmarksTree();
157
144
  toolsFolder.set("GitHub", "https://github.com");
158
145
  toolsFolder.set("VS Code", "https://code.visualstudio.com");
159
146
 
160
- devFolder.set("ツール", toolsFolder);
161
- tree.set("開発", devFolder);
147
+ devFolder.set("Tools", toolsFolder);
148
+ tree.set("Development", devFolder);
162
149
 
163
150
  // JSONに変換
164
151
  const json = tree.toJSON();
@@ -167,9 +154,9 @@ const json = tree.toJSON();
167
154
  const restoredTree = BookmarksTree.fromJSON(json);
168
155
 
169
156
  // ツリー構造を確認
170
- console.log(tree.size); // トップレベルアイテムの数
171
- console.log(tree.has("開発")); // true
172
- console.log(tree.get("開発") instanceof BookmarksTree); // true
157
+ console.log(tree.size); // トップレベルのアイテム数
158
+ console.log(tree.has("Development")); // true
159
+ console.log(tree.get("Development") instanceof BookmarksTree); // true
173
160
  ```
174
161
 
175
162
  ### 複雑な構造の処理
@@ -180,16 +167,16 @@ const complexHtml = `<!DOCTYPE NETSCAPE-Bookmark-file-1>
180
167
  <HTML>
181
168
  <BODY>
182
169
  <DL><p>
183
- <DT><H3>仕事</H3>
170
+ <DT><H3>Work</H3>
184
171
  <DL><p>
185
- <DT><H3>開発</H3>
172
+ <DT><H3>Development</H3>
186
173
  <DL><p>
187
174
  <DT><A HREF="https://github.com">GitHub</A>
188
175
  <DT><A HREF="https://stackoverflow.com">Stack Overflow</A>
189
176
  </DL><p>
190
177
  <DT><A HREF="https://docs.google.com">Google Docs</A>
191
178
  </DL><p>
192
- <DT><H3>個人</H3>
179
+ <DT><H3>Personal</H3>
193
180
  <DL><p>
194
181
  <DT><A HREF="https://youtube.com">YouTube</A>
195
182
  <DT><A HREF="https://twitter.com">Twitter</A>
@@ -201,9 +188,9 @@ const complexHtml = `<!DOCTYPE NETSCAPE-Bookmark-file-1>
201
188
 
202
189
  const tree = BookmarksParser.parse(complexHtml);
203
190
 
204
- // ツリー構造をナビゲート
205
- const workFolder = tree.get("仕事") as BookmarksTree;
206
- const devFolder = workFolder.get("開発") as BookmarksTree;
191
+ // ツリー構造をたどる
192
+ const workFolder = tree.get("Work") as BookmarksTree;
193
+ const devFolder = workFolder.get("Development") as BookmarksTree;
207
194
  console.log(devFolder.get("GitHub")); // "https://github.com"
208
195
  ```
209
196
 
@@ -211,126 +198,151 @@ console.log(devFolder.get("GitHub")); // "https://github.com"
211
198
 
212
199
  ### Web 最適化版
213
200
 
214
- > **重要:** ブラウザサポートは npm インストールを通してのみ利用可能です。JSR 版にはブラウザ互換ビルドが含まれていません。
201
+ > **重要:** ブラウザサポートは npm インストールのみ。JSR 版にはブラウザ互換ビルドは含まれません。
215
202
 
216
- ライブラリは、Node.js 依存関係を排除し、ネイティブブラウザ API を使用するブラウザ最適化版を提供しています:
203
+ このライブラリは Node.js 依存を排除し、ネイティブブラウザ API を利用する web 最適化版を提供します:
217
204
 
218
205
  ```typescript
219
- // ブラウザ最適化版をインポート(npm のみ)
206
+ // npmのみで利用可能なweb最適化版
220
207
  import { BookmarksParser, BookmarksTree } from "netscape-bookmark-parser/web";
221
208
  ```
222
209
 
223
210
  ### BookmarksParser クラス
224
211
 
225
- [`BookmarksParser`](src/BookmarksParser/BookmarksParser.ts)クラスは、HTML ブックマークファイルを解析するための静的メソッドを提供します。
212
+ `BookmarksParser`は Netscape Bookmark 形式の HTML や JSON を解析し、`BookmarksTree`インスタンスに変換する静的メソッドを提供します。
226
213
 
227
- #### `BookmarksParser.parse(htmlContent: string): BookmarksTree`
214
+ #### 静的メソッド
228
215
 
229
- HTML ブックマークファイルのコンテンツを解析し、[`BookmarksTree`](src/BookmarksTree/BookmarksTree.ts)インスタンスを返します。
216
+ - [`static parse(htmlString: string): BookmarksTree`](#static-parsehtmlstring-string-bookmarkstree)
230
217
 
231
- - **パラメータ**: `htmlContent` - 文字列としての HTML ブックマークファイル
232
- - **戻り値**: 解析されたブックマークツリー
218
+ - Netscape Bookmark 形式の HTML 文字列を解析し、`BookmarksTree`を返します。
219
+ - [`parseFromHTMLString`](#static-parsefromhtmlstringhtmlstring-string-bookmarkstree)のエイリアス。
233
220
 
234
- **例:**
221
+ **例:**
235
222
 
236
- ```typescript
237
- const htmlContent = "<!DOCTYPE NETSCAPE-Bookmark-file-1>...";
238
- const tree = BookmarksParser.parse(htmlContent);
239
- ```
223
+ ```typescript
224
+ const html = `<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<HTML><BODY><DL><p>\n <DT><A HREF=\"https://example.com\">Example</A>\n</DL><p></BODY></HTML>`;
225
+ const tree = BookmarksParser.parse(html);
226
+ console.log(tree.toJSON());
227
+ ```
228
+
229
+ - [`static parseFromHTMLString(htmlString: string): BookmarksTree`](#static-parsefromhtmlstringhtmlstring-string-bookmarkstree)
230
+
231
+ - HTML 文字列を解析し、`BookmarksTree`を返します。
232
+
233
+ **例:**
234
+
235
+ ```typescript
236
+ const html = `<!DOCTYPE NETSCAPE-Bookmark-file-1>...`;
237
+ const tree = BookmarksParser.parseFromHTMLString(html);
238
+ ```
239
+
240
+ - [`static parseFromDOM(dom: HTMLDocument): BookmarksTree`](#static-parsefromdomdom-htmldocument-bookmarkstree)
241
+
242
+ - 既存の`HTMLDocument`から`BookmarksTree`を生成します。
243
+
244
+ **例:**
245
+
246
+ ```typescript
247
+ const dom = new DOMParser().parseFromString(html, "text/html");
248
+ const tree = BookmarksParser.parseFromDOM(dom);
249
+ ```
250
+
251
+ - [`static parseFromJSON(jsonString: string): BookmarksTree`](#static-parsefromjsonjsonstring-string-bookmarkstree)
252
+
253
+ - JSON 文字列を解析し、`BookmarksTree`を返します。
254
+
255
+ **例:**
256
+
257
+ ```typescript
258
+ const json = '{"Google": "https://google.com"}';
259
+ const tree = BookmarksParser.parseFromJSON(json);
260
+ ```
261
+
262
+ ---
240
263
 
241
264
  ### BookmarksTree クラス
242
265
 
243
- [`BookmarksTree`](src/BookmarksTree/BookmarksTree.ts)は、`Map<string, string | BookmarksTree>`を拡張してブックマークの階層構造を表現するクラスです。
266
+ `BookmarksTree`は`Map`を継承し、フォルダ(`BookmarksTree`)やブックマーク(URL 文字列)を階層構造で管理します。
244
267
 
245
268
  #### コンストラクタ
246
269
 
247
- ```typescript
248
- const tree = new BookmarksTree();
249
- ```
270
+ - [`new BookmarksTree()`](#constructor)
271
+
272
+ **例:**
273
+
274
+ ```typescript
275
+ const tree = new BookmarksTree();
276
+ tree.set("Google", "https://google.com");
277
+ ```
250
278
 
251
279
  #### インスタンスメソッド
252
280
 
253
- ##### `toJSON(): Record<string, unknown>`
281
+ - [`toJSON(): Record<string, unknown>`](#tojson-recordstring-unknown)
254
282
 
255
- ツリーを JSON オブジェクト表現に変換します。
283
+ - ツリーを JSON オブジェクトに変換します。
256
284
 
257
- ```typescript
258
- const json = tree.toJSON();
259
- console.log(JSON.stringify(json, null, 2));
260
- ```
285
+ **例:**
261
286
 
262
- ##### `toDOM(): HTMLDocument`
287
+ ```typescript
288
+ const json = tree.toJSON();
289
+ console.log(json);
290
+ ```
263
291
 
264
- ツリーを HTML ドキュメントオブジェクトに変換します。
292
+ - [`toDOM(): HTMLDocument`](#todom-htmldocument)
265
293
 
266
- ```typescript
267
- const htmlDocument = tree.toDOM();
268
- ```
294
+ - ツリーを Netscape Bookmark 形式の HTML ドキュメントに変換します。
269
295
 
270
- ##### `get HTMLText(): string`
296
+ **例:**
271
297
 
272
- ブックマークツリーの HTML 文字列表現を取得します。
298
+ ```typescript
299
+ const dom = tree.toDOM();
300
+ ```
273
301
 
274
- ```typescript
275
- const htmlString = tree.HTMLText;
276
- console.log(htmlString); // 完全なHTMLブックマークファイル
277
- ```
302
+ - [`get HTMLString(): string`](#get-htmlstring-string)
278
303
 
279
- #### 静的メソッド
304
+ - Netscape Bookmark 形式の完全な HTML 文字列を取得します。
280
305
 
281
- ##### `fromJSON(json: Record<string, unknown>): BookmarksTree`
306
+ **例:**
282
307
 
283
- JSON オブジェクトからツリーを復元します。
308
+ ```typescript
309
+ const html = tree.HTMLString;
310
+ console.log(html);
311
+ ```
284
312
 
285
- ```typescript
286
- const json = { Google: "https://google.com" };
287
- const tree = BookmarksTree.fromJSON(json);
288
- ```
313
+ - [`get HTMLText(): string`](#get-htmltext-string)
314
+ - `HTMLString`のエイリアス(非推奨)。
289
315
 
290
- ##### `fromDOM(dom: HTMLDocument): BookmarksTree`
316
+ #### 静的メソッド
291
317
 
292
- DOM ドキュメントからツリーを作成します。
318
+ - [`static fromJSON(json: Record<string, unknown>): BookmarksTree`](#static-fromjsonjson-recordstring-unknown-bookmarkstree)
293
319
 
294
- ```typescript
295
- const dom = new DOMParser().parseFromString(htmlContent, "text/html");
296
- const tree = BookmarksTree.fromDOM(dom);
297
- ```
320
+ - JSON オブジェクトからツリーを生成します。
298
321
 
299
- #### Map インターフェース
322
+ **例:**
300
323
 
301
- `BookmarksTree`は`Map`を拡張しているため、すべての標準 Map メソッドを使用できます:
324
+ ```typescript
325
+ const json = { Google: "https://google.com" };
326
+ const tree = BookmarksTree.fromJSON(json);
327
+ ```
302
328
 
303
- ```typescript
304
- // ブックマークとフォルダを設定
305
- tree.set("bookmark", "https://example.com");
306
- tree.set("folder", new BookmarksTree());
307
-
308
- // 値を取得
309
- const url = tree.get("bookmark"); // string
310
- const folder = tree.get("folder"); // BookmarksTree
311
-
312
- // 存在確認
313
- tree.has("bookmark"); // true
314
-
315
- // アイテムを削除
316
- tree.delete("bookmark");
317
-
318
- // 繰り返し処理
319
- for (const [name, value] of tree) {
320
- if (typeof value === "string") {
321
- console.log(`ブックマーク: ${name} -> ${value}`);
322
- } else {
323
- console.log(`フォルダ: ${name} (${value.size} アイテム)`);
324
- }
325
- }
326
- ```
329
+ - [`static fromDOM(dom: HTMLDocument): BookmarksTree`](#static-fromdomdom-htmldocument-bookmarkstree)
330
+
331
+ - HTML ドキュメントからツリーを生成します。
332
+
333
+ **例:**
327
334
 
328
- ## プロジェクト構造
335
+ ```typescript
336
+ const dom = new DOMParser().parseFromString(html, "text/html");
337
+ const tree = BookmarksTree.fromDOM(dom);
338
+ ```
339
+
340
+ ## プロジェクト構成
329
341
 
330
342
  ```
331
343
  src/
332
344
  ├── BookmarksTree/
333
- │ ├── BookmarksTree.ts # メインブックマークツリークラス
345
+ │ ├── BookmarksTree.ts # メインのブックマークツリークラス
334
346
  │ ├── BookmarksTree.test.ts # 包括的テスト
335
347
  │ └── index.ts # エクスポート定義
336
348
  └── BookmarksParser/
@@ -353,136 +365,29 @@ npm/ # Node.jsビルド成果物
353
365
  ### 入力形式
354
366
 
355
367
  - **Netscape Bookmark File Format**: 標準 HTML ブックマークファイル形式
356
- - **Chrome エクスポート形式**: Chrome ブラウザからエクスポートされた HTML ファイル
357
- - **Firefox エクスポート形式**: Firefox ブラウザからエクスポートされた HTML ファイル
358
- - **Safari エクスポート形式**: Safari ブラウザからエクスポートされた HTML ファイル
359
- - **Edge エクスポート形式**: Microsoft Edge からエクスポートされた HTML ファイル
360
- - **汎用 HTML**: Netscape ブックマーク構造に従った任意の HTML
368
+ - **Chrome エクスポート形式**: Chrome からエクスポートされた HTML
369
+ - **Firefox エクスポート形式**: Firefox からエクスポートされた HTML
370
+ - **Safari エクスポート形式**: Safari からエクスポートされた HTML
371
+ - **Edge エクスポート形式**: Microsoft Edge からエクスポートされた HTML
372
+ - **汎用 HTML**: Netscape ブックマーク構造に準拠した任意の HTML
361
373
 
362
374
  ### 出力形式
363
375
 
364
- - **JSON**: プログラムからの簡単なアクセスのための構造化 JSON データ
365
- - **HTML**: 全ブラウザ互換の標準 Netscape Bookmark File Format
376
+ - **JSON**: プログラムから扱いやすい構造化 JSON データ
377
+ - **HTML**: 全ブラウザ互換の Netscape Bookmark File Format
366
378
  - **DOM**: ブラウザ互換の HTMLDocument オブジェクト
367
379
 
368
380
  ### 特別な機能
369
381
 
370
- - **Unicode 対応**: 国際文字と絵文字のフルサポート
371
- - **URL 検証**: 様々な URL 形式(http、https、ftpfile、相対)の処理
372
- - **HTML エンティティ処理**: HTML エンティティの適切なエスケープ・アンエスケープ
373
- - **空フォルダサポート**: ブックマーク構造内の空フォルダを保持
374
- - **重複処理**: 重複するブックマーク名は最後の値が優先
375
-
376
- ## 出力例
377
-
378
- ### JSON 形式
379
-
380
- ```json
381
- {
382
- "開発": {
383
- "MDN": "https://developer.mozilla.org",
384
- "ツール": {
385
- "GitHub": "https://github.com",
386
- "Stack Overflow": "https://stackoverflow.com"
387
- }
388
- },
389
- "Google": "https://google.com"
390
- }
391
- ```
392
-
393
- ### HTML 形式
394
-
395
- ```html
396
- <!DOCTYPE NETSCAPE-Bookmark-file-1>
397
- <HTML>
398
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
399
- <TITLE>Bookmark</TITLE>
400
- <H1>Bookmark</H1>
401
- <BODY>
402
- <DL><p>
403
- <DT><H3>開発</H3>
404
- <DL><p>
405
- <DT><A HREF="https://developer.mozilla.org">MDN</A>
406
- <DT><H3>ツール</H3>
407
- <DL><p>
408
- <DT><A HREF="https://github.com">GitHub</A>
409
- <DT><A HREF="https://stackoverflow.com">Stack Overflow</A>
410
- </DL><p>
411
- </DL><p>
412
- <DT><A HREF="https://google.com">Google</A>
413
- </DL>
414
- </BODY>
415
- </HTML>
416
- ```
382
+ - **Unicode 対応**: 国際文字や絵文字も完全サポート
383
+ - **URL バリデーション**: http, https, ftp, file, 相対パス等多様な URL 形式に対応
384
+ - **HTML エンティティ処理**: HTML エンティティの適切なエスケープ/アンエスケープ
385
+ - **空フォルダサポート**: 空のフォルダも構造として保持
386
+ - **重複処理**: 同名ブックマークは後勝ち
417
387
 
418
388
  ## 依存関係
419
389
 
420
- - [`@b-fuze/deno-dom`](https://jsr.io/@b-fuze/deno-dom): DenoNode.js 環境の両方での DOM 解析・操作
421
-
422
- ## 開発
423
-
424
- ### 前提条件
425
-
426
- - [Deno](https://deno.land/) 1.x 以降
427
-
428
- ### セットアップ
429
-
430
- ```bash
431
- git clone https://github.com/grakeice/netscape-bookmark-parser.git
432
- cd netscape-bookmark-parser
433
- ```
434
-
435
- ### 開発コマンド
436
-
437
- ```bash
438
- # ファイル監視付きの開発サーバーを実行
439
- deno task dev
440
-
441
- # 全テストを実行
442
- deno test
443
-
444
- # カバレッジ付きテストを実行
445
- deno test --coverage
446
-
447
- # コードをフォーマット
448
- deno fmt
449
-
450
- # コードをリント
451
- deno lint
452
-
453
- # Node.js用にビルド
454
- deno task build:npm
455
-
456
- # 特定のバージョンでビルド
457
- deno task build:npm 1.0.0
458
- ```
459
-
460
- ### テストの実行
461
-
462
- プロジェクトには全機能の包括的なテストスイートが含まれています:
463
-
464
- ```bash
465
- # 全テストを実行
466
- deno test
467
-
468
- # 特定のテストファイルを実行
469
- deno test src/BookmarksTree/BookmarksTree.test.ts
470
-
471
- # 詳細出力でテストを実行
472
- deno test --verbose
473
-
474
- # テストを実行してカバレッジレポートを生成
475
- deno test --coverage=coverage_dir
476
- deno coverage coverage_dir
477
- ```
478
-
479
- ### パブリッシュ
480
-
481
- プロジェクトは GitHub Actions による自動パブリッシュを使用しています:
482
-
483
- 1. バージョンタグを作成: `git tag v1.0.0`
484
- 2. タグをプッシュ: `git push origin v1.0.0`
485
- 3. GitHub Actions が自動的にビルドして NPM と JSR の両方にパブリッシュ
390
+ - [`@b-fuze/deno-dom`](https://jsr.io/@b-fuze/deno-dom): Deno/Node.js 両対応の DOM パーサ・操作
486
391
 
487
392
  ## ブラウザ互換性
488
393
 
@@ -495,9 +400,9 @@ deno coverage coverage_dir
495
400
  - **Opera**: 全バージョン
496
401
  - **Internet Explorer**: 6+(レガシーサポート)
497
402
 
498
- ### エクスポートファイルの例
403
+ ### エクスポートファイル例
499
404
 
500
- ライブラリは以下からエクスポートされたブックマークファイルを解析できます:
405
+ ライブラリは以下のようなブックマークファイルを解析できます:
501
406
 
502
407
  ```html
503
408
  <!-- Chrome/Edge形式 -->
@@ -507,9 +412,9 @@ deno coverage coverage_dir
507
412
  <TITLE>Bookmarks</TITLE>
508
413
  <H1>Bookmarks</H1>
509
414
  <DL><p>
510
- <DT><H3 ADD_DATE="1640995200">ブックマークバー</H3>
415
+ <DT><H3 ADD_DATE="1640995200">Bookmarks bar</H3>
511
416
  <DL><p>
512
- <DT><A HREF="https://example.com" ADD_DATE="1640995200">例</A>
417
+ <DT><A HREF="https://example.com" ADD_DATE="1640995200">Example</A>
513
418
  </DL><p>
514
419
  </DL>
515
420
 
@@ -517,102 +422,18 @@ deno coverage coverage_dir
517
422
  <!DOCTYPE NETSCAPE-Bookmark-file-1>
518
423
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
519
424
  <TITLE>Bookmarks</TITLE>
520
- <H1>ブックマークメニュー</H1>
425
+ <H1>Bookmarks Menu</H1>
521
426
  <DL><p>
522
- <DT><H3>ブックマークツールバー</H3>
427
+ <DT><H3>Bookmarks Toolbar</H3>
523
428
  <DL><p>
524
- <DT><A HREF="https://example.com">例のサイト</A>
429
+ <DT><A HREF="https://example.com">Example Site</A>
525
430
  </DL><p>
526
431
  </DL>
527
432
  ```
528
433
 
529
- ## エラーハンドリング
530
-
531
- ライブラリは様々なエラー条件を適切に処理します:
532
-
533
- ```typescript
534
- // 無効なHTML
535
- const invalidHtml =
536
- "<html><body>ブックマークファイルではありません</body></html>";
537
- const tree = BookmarksParser.parse(invalidHtml);
538
- console.log(tree.size); // 0 - 空のツリー
539
-
540
- // 空のコンテンツ
541
- const emptyTree = BookmarksParser.parse("");
542
- console.log(emptyTree.size); // 0
543
-
544
- // 不正なURLはスキップされる
545
- const htmlWithBadUrls = `<!DOCTYPE NETSCAPE-Bookmark-file-1>
546
- <HTML><BODY><DL><p>
547
- <DT><A HREF="">空のURL</A>
548
- <DT><A>HREF属性なし</A>
549
- <DT><A HREF="https://valid.com">有効なリンク</A>
550
- </DL><p></BODY></HTML>`;
551
-
552
- const parsedTree = BookmarksParser.parse(htmlWithBadUrls);
553
- console.log(parsedTree.size); // 1 - 有効なリンクのみ含まれる
554
- ```
555
-
556
- ## パフォーマンス
557
-
558
- ライブラリはパフォーマンスに最適化されています:
559
-
560
- - **メモリ効率**: O(1)検索のためのネイティブ Map 構造を使用
561
- - **ストリーミング対応**: 大きなブックマークファイル(1000+ブックマーク)を処理可能
562
- - **高速解析**: 効率的なツリー走査を伴う DOM ベース解析
563
- - **JSON 変換**: 最適化されたシリアライゼーション/デシリアライゼーション
564
-
565
- ## TypeScript サポート
566
-
567
- 完全な TypeScript 定義が含まれています:
568
-
569
- ```typescript
570
- interface BookmarkValue extends Map<string, string | BookmarksTree> {
571
- toJSON(): Record<string, unknown>;
572
- toDOM(): HTMLDocument;
573
- readonly HTMLText: string;
574
- }
575
-
576
- class BookmarksParser {
577
- static parse(htmlContent: string): BookmarksTree;
578
- }
579
-
580
- class BookmarksTree extends Map<string, string | BookmarksTree> {
581
- toJSON(): Record<string, unknown>;
582
- static fromJSON(json: Record<string, unknown>): BookmarksTree;
583
- static fromDOM(dom: HTMLDocument): BookmarksTree;
584
- toDOM(): HTMLDocument;
585
- get HTMLText(): string;
586
- }
587
- ```
588
-
589
434
  ## ライセンス
590
435
 
591
- MIT License - 詳細は[LICENSE](LICENSE)ファイルを参照してください。
592
-
593
- ## コントリビューション
594
-
595
- プルリクエストとイシューレポートを歓迎します!
596
-
597
- ### コントリビューション方法
598
-
599
- 1. このリポジトリをフォーク
600
- 2. 機能ブランチを作成(`git checkout -b feature/amazing-feature`)
601
- 3. テストと共に変更を実装
602
- 4. 全テストが通ることを確認(`deno test`)
603
- 5. コードをフォーマット(`deno fmt`)
604
- 6. 変更をコミット(`git commit -m 'Add some amazing feature'`)
605
- 7. ブランチにプッシュ(`git push origin feature/amazing-feature`)
606
- 8. プルリクエストを作成
607
-
608
- ### イシューの報告
609
-
610
- イシューを報告する際は、以下を含めてください:
611
-
612
- - ブラウザ/環境情報
613
- - サンプルブックマーク HTML(該当する場合)
614
- - 期待される動作と実際の動作
615
- - 再現手順
436
+ MIT License - 詳細は[LICENSE](LICENSE)を参照してください。
616
437
 
617
438
  ## 作者
618
439
 
@@ -622,44 +443,56 @@ MIT License - 詳細は[LICENSE](LICENSE)ファイルを参照してください
622
443
 
623
444
  ## 変更履歴
624
445
 
625
- ### v1.1.2(最新)
446
+ ### v1.1.4(最新)
447
+
448
+ - 🛠️ **パーサ改良**(多様なブックマーク HTML 形式への互換性向上・安定性向上)
449
+ - 🧹 **コードリファクタリング・追加テスト**
450
+ - 🐞 **マイナーバグ修正**
451
+ - 📚 **ドキュメント更新**: API リファレンス刷新・説明統一・使用例追加・各種セクション復活
452
+
453
+ ### v1.1.3
454
+
455
+ - 📝 **JSDoc コメント追加**: 主要クラス・メソッドに JSDoc 形式のコメントを追加し型情報と API 自動ドキュメント生成を強化
456
+ - 📚 **ドキュメント更新**: Node.js/npm インストール手順に TypeScript インポート例を追加
457
+
458
+ ### v1.1.2
626
459
 
627
- - 📝 **ドキュメント強化**: 最新バージョン参照と改善された例を含む包括的な README ドキュメントの更新
628
- - 🔧 **バージョン一貫性**: 全ドキュメントとコード例でのバージョン番号の同期
629
- - 📚 **コンテンツ更新**: より明確性のためのインストール手順、使用例、API ドキュメントの改良
460
+ - 📝 **ドキュメント強化**: 最新バージョン参照と改善例を含む README ドキュメント更新
461
+ - 🔧 **バージョン一貫性**: 全ドキュメント・コード例でバージョン番号を統一
462
+ - 📚 **内容更新**: インストール手順・使用例・API ドキュメントの明確化
630
463
 
631
464
  ### v1.1.1
632
465
 
633
- - 🛡️ **セキュリティ強化**: [`BookmarksTree.prototype.HTMLText`](src/BookmarksTree/BookmarksTree.ts) がブックマークのタイトルと URL の HTML エンティティを適切にエスケープするように修正
634
- - 🔧 **コード一貫性**: Node.js とブラウザ版間で HTML エスケープ動作を統一
635
- - 📝 **ドキュメント更新**: セキュリティ考慮事項を含む API ドキュメントの強化
636
- - 🐛 **バグ修正**: マイナーな安定性改善とエッジケース処理
466
+ - 🛡️ **セキュリティ強化**: [`BookmarksTree.prototype.HTMLText`](src/BookmarksTree/BookmarksTree.ts)がブックマークタイトル・URL の HTML エンティティを適切にエスケープ
467
+ - 🔧 **コード一貫性**: Node.js/ブラウザ版間で HTML エスケープ動作を統一
468
+ - 📝 **ドキュメント更新**: セキュリティ考慮事項を含む API ドキュメント強化
469
+ - 🐛 **バグ修正**: 安定性向上・エッジケース対応
637
470
 
638
471
  ### v1.1.0
639
472
 
640
- - 🌐 **ブラウザサポート**: ブラウザ環境用の Web 最適化版を追加
641
- - 📦 **デュアルエントリーポイント**: Node.js/Deno 用(`./mod.ts`)とブラウザ用(`./mod_web.ts`)の分離ビルド
642
- - ⚡ **ネイティブ DOM API**: ブラウザ版はネイティブ DOMParser DOM API を使用してパフォーマンス向上
643
- - 🔧 **ビルド最適化**: ブラウザ互換性のためのポリフィル除去を含む強化されたビルドプロセス
644
- - 📚 **ドキュメント更新**: ブラウザ使用例と API リファレンスを追加
473
+ - 🌐 **ブラウザサポート**: ブラウザ用 web 最適化版を追加
474
+ - 📦 **デュアルエントリーポイント**: Node.js/Deno 用(`./mod.ts`)とブラウザ用(`./mod_web.ts`)を分離
475
+ - ⚡ **ネイティブ DOM API**: ブラウザ版は DOMParser 等のネイティブ API で高速化
476
+ - 🔧 **ビルド最適化**: ポリフィル除去等によるビルド強化
477
+ - 📚 **ドキュメント更新**: ブラウザ利用例・API リファレンス追加
645
478
 
646
479
  ### v1.0.1
647
480
 
648
- - ✨ **コア機能**: 完全な HTML ブックマークファイル解析機能
649
- - 🏗️ **BookmarksTree クラス**: Map インターフェースを持つ階層構造管理
650
- - 🔄 **双方向変換**: JSON HTML DOM 変換サポート
651
- - 🧪 **包括的テスト**: エッジケースハンドリングを含む完全なテストカバレッジ
652
- - 📦 **マルチランタイムサポート**: ネイティブ DenoNode.js 互換性
653
- - 🔧 **TypeScript サポート**: 完全な型定義と IntelliSense
654
- - 🤖 **CI/CD パイプライン**: GitHub Actions による自動テストと公開
655
- - 📚 **ドキュメント**: 例と API リファレンスを含む包括的な README
656
- - 🌐 **国際化サポート**: Unicode と多言語ブックマークハンドリング
657
- - ⚡ **パフォーマンス最適化**: 大規模ブックマークコレクションの効率的解析
658
- - 🛡️ **エラーハンドリング**: 不正な HTML と無効な URL の適切な処理
481
+ - ✨ **コア機能**: HTML ブックマークファイルの完全解析
482
+ - 🏗️ **BookmarksTree クラス**: Map インターフェースによる階層構造管理
483
+ - 🔄 **双方向変換**: JSON↔HTML↔DOM 変換サポート
484
+ - 🧪 **包括的テスト**: エッジケース対応含む完全テストカバレッジ
485
+ - 📦 **マルチランタイム対応**: Deno/Node.js 両対応
486
+ - 🔧 **TypeScript サポート**: 型定義・IntelliSense 完備
487
+ - 🤖 **CI/CD パイプライン**: GitHub Actions による自動テスト・公開
488
+ - 📚 **ドキュメント**: 例・API リファレンス含む README
489
+ - 🌐 **国際化対応**: Unicode・多言語ブックマーク対応
490
+ - ⚡ **パフォーマンス最適化**: 大規模ブックマークも効率的に解析
491
+ - 🛡️ **エラーハンドリング**: 不正 HTML・無効 URL も安全に処理
659
492
 
660
493
  ### v0.0.1-pre4
661
494
 
662
- - 初期のプレリリース版
663
- - コア機能の概念実証
495
+ - 初期プレリリース
496
+ - コア機能の PoC
664
497
  - 基本的な解析実装
665
- - 初期テスト設定
498
+ - 初期テストセットアップ