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