netscape-bookmark-parser 1.1.3 → 1.2.0

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.
Files changed (122) hide show
  1. package/LICENSE +2 -2
  2. package/README-ja.md +233 -386
  3. package/README.md +152 -302
  4. package/dist/index.d.ts +240 -0
  5. package/dist/index.js +333 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/web.d.ts +241 -0
  8. package/dist/web.js +330 -0
  9. package/dist/web.js.map +1 -0
  10. package/package.json +58 -15
  11. package/esm/_dnt.polyfills.d.ts +0 -101
  12. package/esm/_dnt.polyfills.d.ts.map +0 -1
  13. package/esm/_dnt.polyfills.js +0 -127
  14. package/esm/_dnt.shims.d.ts +0 -6
  15. package/esm/_dnt.shims.d.ts.map +0 -1
  16. package/esm/_dnt.shims.js +0 -61
  17. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/build/deno-wasm/deno-wasm.d.ts +0 -14
  18. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/build/deno-wasm/deno-wasm.d.ts.map +0 -1
  19. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/build/deno-wasm/deno-wasm.js +0 -151
  20. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/deno-dom-wasm.d.ts +0 -23
  21. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/deno-dom-wasm.d.ts.map +0 -1
  22. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/deno-dom-wasm.js +0 -26
  23. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/api.d.ts +0 -24
  24. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/api.d.ts.map +0 -1
  25. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/api.js +0 -48
  26. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/constructor-lock.d.ts +0 -5
  27. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/constructor-lock.d.ts.map +0 -1
  28. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/constructor-lock.js +0 -4
  29. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/deserialize.d.ts +0 -4
  30. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/deserialize.d.ts.map +0 -1
  31. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/deserialize.js +0 -61
  32. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/document-fragment.d.ts +0 -19
  33. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/document-fragment.d.ts.map +0 -1
  34. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/document-fragment.js +0 -110
  35. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/document.d.ts +0 -68
  36. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/document.d.ts.map +0 -1
  37. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/document.js +0 -322
  38. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/dom-parser.d.ts +0 -6
  39. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/dom-parser.d.ts.map +0 -1
  40. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/dom-parser.js +0 -46
  41. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/element.d.ts +0 -127
  42. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/element.d.ts.map +0 -1
  43. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/element.js +0 -1068
  44. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/elements/html-template-element.d.ts +0 -29
  45. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/elements/html-template-element.d.ts.map +0 -1
  46. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/elements/html-template-element.js +0 -94
  47. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/html-collection.d.ts +0 -21
  48. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/html-collection.d.ts.map +0 -1
  49. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/html-collection.js +0 -80
  50. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/node-list.d.ts +0 -23
  51. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/node-list.d.ts.map +0 -1
  52. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/node-list.js +0 -159
  53. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/node.d.ts +0 -127
  54. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/node.d.ts.map +0 -1
  55. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/node.js +0 -629
  56. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/custom-api.d.ts +0 -6
  57. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/custom-api.d.ts.map +0 -1
  58. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/custom-api.js +0 -5
  59. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/nwsapi-types.d.ts +0 -12
  60. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/nwsapi-types.d.ts.map +0 -1
  61. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/nwsapi-types.js +0 -2
  62. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/nwsapi.d.ts +0 -90
  63. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/nwsapi.d.ts.map +0 -1
  64. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/nwsapi.js +0 -1611
  65. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/selectors.d.ts +0 -16
  66. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/selectors.d.ts.map +0 -1
  67. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/selectors.js +0 -28
  68. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/sizzle-types.d.ts +0 -8
  69. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/sizzle-types.d.ts.map +0 -1
  70. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/sizzle-types.js +0 -2
  71. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/sizzle.d.ts +0 -7
  72. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/sizzle.d.ts.map +0 -1
  73. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/selectors/sizzle.js +0 -2061
  74. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/string-cache.d.ts +0 -3
  75. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/string-cache.d.ts.map +0 -1
  76. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/string-cache.js +0 -10
  77. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/utils-types.d.ts +0 -13
  78. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/utils-types.d.ts.map +0 -1
  79. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/utils-types.js +0 -8
  80. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/utils.d.ts +0 -31
  81. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/utils.d.ts.map +0 -1
  82. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/dom/utils.js +0 -239
  83. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/parser.d.ts +0 -5
  84. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/parser.d.ts.map +0 -1
  85. package/esm/deps/jsr.io/@b-fuze/deno-dom/0.1.49/src/parser.js +0 -20
  86. package/esm/mod.d.ts +0 -10
  87. package/esm/mod.d.ts.map +0 -1
  88. package/esm/mod.js +0 -9
  89. package/esm/mod_web.d.ts +0 -9
  90. package/esm/mod_web.d.ts.map +0 -1
  91. package/esm/mod_web.js +0 -8
  92. package/esm/package.json +0 -3
  93. package/esm/src/BookmarksParser/BookmarksParser.d.ts +0 -66
  94. package/esm/src/BookmarksParser/BookmarksParser.d.ts.map +0 -1
  95. package/esm/src/BookmarksParser/BookmarksParser.js +0 -70
  96. package/esm/src/BookmarksParser/index.d.ts +0 -8
  97. package/esm/src/BookmarksParser/index.d.ts.map +0 -1
  98. package/esm/src/BookmarksParser/index.js +0 -7
  99. package/esm/src/BookmarksTree/BookmarksTree.d.ts +0 -112
  100. package/esm/src/BookmarksTree/BookmarksTree.d.ts.map +0 -1
  101. package/esm/src/BookmarksTree/BookmarksTree.js +0 -217
  102. package/esm/src/BookmarksTree/index.d.ts +0 -8
  103. package/esm/src/BookmarksTree/index.d.ts.map +0 -1
  104. package/esm/src/BookmarksTree/index.js +0 -7
  105. package/esm/src/deps.d.ts +0 -9
  106. package/esm/src/deps.d.ts.map +0 -1
  107. package/esm/src/deps.js +0 -7
  108. package/esm/src/web/BookmarksParser/BookmarksParser.d.ts +0 -66
  109. package/esm/src/web/BookmarksParser/BookmarksParser.d.ts.map +0 -1
  110. package/esm/src/web/BookmarksParser/BookmarksParser.js +0 -70
  111. package/esm/src/web/BookmarksParser/index.d.ts +0 -8
  112. package/esm/src/web/BookmarksParser/index.d.ts.map +0 -1
  113. package/esm/src/web/BookmarksParser/index.js +0 -7
  114. package/esm/src/web/BookmarksTree/BookmarksTree.d.ts +0 -112
  115. package/esm/src/web/BookmarksTree/BookmarksTree.d.ts.map +0 -1
  116. package/esm/src/web/BookmarksTree/BookmarksTree.js +0 -217
  117. package/esm/src/web/BookmarksTree/index.d.ts +0 -8
  118. package/esm/src/web/BookmarksTree/index.d.ts.map +0 -1
  119. package/esm/src/web/BookmarksTree/index.js +0 -7
  120. package/esm/src/web/deps.d.ts +0 -10
  121. package/esm/src/web/deps.d.ts.map +0 -1
  122. package/esm/src/web/deps.js +0 -9
@@ -1,217 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 grakeice
3
- *
4
- * This software is released under the MIT License.
5
- * https://opensource.org/licenses/MIT
6
- */
7
- import { DOMParser } from "../deps.js";
8
- /**
9
- * A class representing a bookmark tree in Netscape Bookmark format
10
- *
11
- * This class extends Map and manages folders (BookmarksTree) and bookmarks (URL strings)
12
- * in a hierarchical structure.
13
- *
14
- * @example
15
- * ```typescript
16
- * const tree = new BookmarksTree();
17
- * tree.set("Google", "https://google.com");
18
- *
19
- * const folder = new BookmarksTree();
20
- * folder.set("GitHub", "https://github.com");
21
- * tree.set("Development", folder);
22
- * ```
23
- */
24
- export class BookmarksTree extends Map {
25
- /**
26
- * Creates a new BookmarksTree instance
27
- */
28
- constructor() {
29
- super();
30
- }
31
- /**
32
- * Converts the BookmarksTree to a JSON object
33
- *
34
- * Folders are recursively converted to objects, and bookmarks are preserved as strings.
35
- *
36
- * @returns JSON object representation of the bookmark data
37
- *
38
- * @example
39
- * ```typescript
40
- * const tree = new BookmarksTree();
41
- * tree.set("Google", "https://google.com");
42
- * const json = tree.toJSON();
43
- * // { "Google": "https://google.com" }
44
- * ```
45
- */
46
- toJSON() {
47
- const json = {};
48
- for (const [key, value] of this.entries()) {
49
- if (typeof value === "string") {
50
- json[key] = value;
51
- }
52
- else if (value instanceof BookmarksTree) {
53
- json[key] = value.toJSON();
54
- }
55
- }
56
- return json;
57
- }
58
- /**
59
- * Creates a BookmarksTree from a JSON object
60
- *
61
- * String properties are treated as bookmarks, and object properties are
62
- * recursively processed as folders.
63
- *
64
- * @param json The source JSON object to convert
65
- * @returns A new BookmarksTree instance
66
- *
67
- * @example
68
- * ```typescript
69
- * const json = { "Google": "https://google.com", "Development": { "GitHub": "https://github.com" } };
70
- * const tree = BookmarksTree.fromJSON(json);
71
- * ```
72
- */
73
- static fromJSON(json) {
74
- const tree = new BookmarksTree();
75
- if (typeof json === "object" && json !== null) {
76
- for (const [key, value] of Object.entries(json)) {
77
- if (typeof value === "string") {
78
- tree.set(key, value);
79
- }
80
- else if (typeof value === "object" && value !== null) {
81
- tree.set(key, BookmarksTree.fromJSON(value));
82
- }
83
- }
84
- }
85
- return tree;
86
- }
87
- /**
88
- * Creates a BookmarksTree from an HTML document (Netscape Bookmark format)
89
- *
90
- * Parses Netscape Bookmark format HTML and generates a BookmarksTree that preserves
91
- * the hierarchical structure. H3 elements within DT elements are treated as folders,
92
- * and A elements are treated as bookmarks.
93
- *
94
- * @param dom The HTML document to parse
95
- * @returns A new BookmarksTree instance
96
- *
97
- * @example
98
- * ```typescript
99
- * const parser = new DOMParser();
100
- * const dom = parser.parseFromString(bookmarkHtml, "text/html");
101
- * const tree = BookmarksTree.fromDOM(dom);
102
- * ```
103
- */
104
- static fromDOM(dom) {
105
- const tree = new BookmarksTree();
106
- const document = dom;
107
- const processElement = (element, currentTree) => {
108
- const children = Array.from(element.children);
109
- for (let i = 0; i < children.length; i++) {
110
- const child = children[i];
111
- if (child.tagName === "DT") {
112
- const h3 = child.querySelector("h3");
113
- const link = child.querySelector("a");
114
- if (h3) {
115
- // フォルダの場合
116
- const folderName = h3.textContent?.trim() || "";
117
- if (folderName) {
118
- const folderTree = new BookmarksTree();
119
- currentTree.set(folderName, folderTree);
120
- processElement(child, folderTree);
121
- }
122
- }
123
- else if (link) {
124
- // リンクの場合
125
- const href = link.getAttribute("href");
126
- const title = link.textContent?.trim() || "";
127
- if (href && title) {
128
- currentTree.set(title, href);
129
- }
130
- }
131
- }
132
- else if (child.tagName === "DL") {
133
- // ネストしたDLタグの場合も処理
134
- processElement(child, currentTree);
135
- }
136
- }
137
- };
138
- // HTMLのBODY全体から処理を開始
139
- const body = document.body;
140
- if (body) {
141
- processElement(body, tree);
142
- }
143
- return tree;
144
- }
145
- /**
146
- * Converts the BookmarksTree to an HTML document
147
- *
148
- * Generates an HTML document in Netscape Bookmark format.
149
- *
150
- * @returns HTML document in Netscape Bookmark format
151
- *
152
- * @example
153
- * ```typescript
154
- * const tree = new BookmarksTree();
155
- * tree.set("Google", "https://google.com");
156
- * const dom = tree.toDOM();
157
- * ```
158
- */
159
- toDOM() {
160
- return new DOMParser().parseFromString(this.HTMLText, "text/html");
161
- }
162
- /**
163
- * Gets the BookmarksTree as an HTML string in Netscape Bookmark format
164
- *
165
- * Generates a complete HTML document string including DOCTYPE, metadata, and body
166
- * in Netscape Bookmark format.
167
- *
168
- * @returns HTML string in Netscape Bookmark format
169
- *
170
- * @example
171
- * ```typescript
172
- * const tree = new BookmarksTree();
173
- * tree.set("Google", "https://google.com");
174
- * const html = tree.HTMLText;
175
- * console.log(html); // <!DOCTYPE NETSCAPE-Bookmark-file-1>...
176
- * ```
177
- */
178
- get HTMLText() {
179
- const escapeHtml = (text) => {
180
- return text
181
- .replace(/&/g, "&amp;")
182
- .replace(/</g, "&lt;")
183
- .replace(/>/g, "&gt;")
184
- .replace(/"/g, "&quot;")
185
- .replace(/'/g, "&#39;");
186
- };
187
- const createBookmarkList = (tree, indent = "") => {
188
- let html = `${indent}<DL><p>\n`;
189
- for (const [key, value] of tree.entries()) {
190
- if (typeof value === "string") {
191
- // ブックマークの場合: <DT><A HREF="url">タイトル</A>
192
- html += `${indent} <DT><A HREF="${escapeHtml(value)}">${escapeHtml(key)}</A>\n`;
193
- }
194
- else if (value instanceof BookmarksTree) {
195
- // フォルダの場合: <DT><H3>フォルダ名</H3>
196
- html += `${indent} <DT><H3>${escapeHtml(key)}</H3>\n`;
197
- html += createBookmarkList(value, indent + " ");
198
- html += `${indent} </DL><p>\n`;
199
- }
200
- }
201
- if (indent === "") {
202
- // ルートレベルの場合は閉じタグを追加
203
- html += `</DL>\n`;
204
- }
205
- return html;
206
- };
207
- const htmlTemplate = `<!DOCTYPE NETSCAPE-Bookmark-file-1>
208
- <HTML>
209
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
210
- <TITLE>Bookmark</TITLE>
211
- <H1>Bookmark</H1>
212
- <BODY>
213
- ${createBookmarkList(this)}</BODY>
214
- </HTML>`;
215
- return htmlTemplate;
216
- }
217
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 grakeice
3
- *
4
- * This software is released under the MIT License.
5
- * https://opensource.org/licenses/MIT
6
- */
7
- export { BookmarksTree } from "./BookmarksTree.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/web/BookmarksTree/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 grakeice
3
- *
4
- * This software is released under the MIT License.
5
- * https://opensource.org/licenses/MIT
6
- */
7
- export { BookmarksTree } from "./BookmarksTree.js";
@@ -1,10 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 grakeice
3
- *
4
- * This software is released under the MIT License.
5
- * https://opensource.org/licenses/MIT
6
- */
7
- export declare const DOMParser: any;
8
- export type Element = globalThis.Element;
9
- export type HTMLDocument = globalThis.HTMLDocument;
10
- //# sourceMappingURL=deps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../../src/src/web/deps.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,SAAS,KAAuB,CAAC;AAC9C,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;AACzC,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 grakeice
3
- *
4
- * This software is released under the MIT License.
5
- * https://opensource.org/licenses/MIT
6
- */
7
- // deno-lint-ignore ban-ts-comment
8
- // @ts-nocheck
9
- export const DOMParser = globalThis.DOMParser;