netscape-bookmark-parser 1.1.4 → 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 +108 -98
  3. package/README.md +108 -98
  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 -130
  94. package/esm/src/BookmarksParser/BookmarksParser.d.ts.map +0 -1
  95. package/esm/src/BookmarksParser/BookmarksParser.js +0 -142
  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 -118
  100. package/esm/src/BookmarksTree/BookmarksTree.d.ts.map +0 -1
  101. package/esm/src/BookmarksTree/BookmarksTree.js +0 -225
  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 -130
  109. package/esm/src/web/BookmarksParser/BookmarksParser.d.ts.map +0 -1
  110. package/esm/src/web/BookmarksParser/BookmarksParser.js +0 -142
  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 -118
  115. package/esm/src/web/BookmarksTree/BookmarksTree.d.ts.map +0 -1
  116. package/esm/src/web/BookmarksTree/BookmarksTree.js +0 -225
  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
package/dist/web.js ADDED
@@ -0,0 +1,330 @@
1
+ //#region src/web-dom.ts
2
+ /**
3
+ * Copyright (c) 2025-2026 kurage(@umitsukidev)
4
+ *
5
+ * This software is released under the MIT License.
6
+ * https://opensource.org/licenses/MIT
7
+ */
8
+ const DOMParser = globalThis.DOMParser;
9
+
10
+ //#endregion
11
+ //#region src/BookmarksTree/BookmarksTree.ts
12
+ /**
13
+ * A class representing a bookmark tree in Netscape Bookmark format
14
+ *
15
+ * This class extends Map and manages folders (BookmarksTree) and bookmarks (URL strings)
16
+ * in a hierarchical structure.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const tree = new BookmarksTree();
21
+ * tree.set("Google", "https://google.com");
22
+ *
23
+ * const folder = new BookmarksTree();
24
+ * folder.set("GitHub", "https://github.com");
25
+ * tree.set("Development", folder);
26
+ * ```
27
+ */
28
+ var BookmarksTree = class BookmarksTree extends Map {
29
+ /**
30
+ * Creates a new BookmarksTree instance
31
+ */
32
+ constructor() {
33
+ super();
34
+ }
35
+ /**
36
+ * Converts the BookmarksTree to a JSON object
37
+ *
38
+ * Folders are recursively converted to objects, and bookmarks are preserved as strings.
39
+ *
40
+ * @returns JSON object representation of the bookmark data
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const tree = new BookmarksTree();
45
+ * tree.set("Google", "https://google.com");
46
+ * const json = tree.toJSON();
47
+ * // { "Google": "https://google.com" }
48
+ * ```
49
+ */
50
+ toJSON() {
51
+ const json = {};
52
+ for (const [key, value] of this.entries()) if (typeof value === "string") json[key] = value;
53
+ else if (value instanceof BookmarksTree) json[key] = value.toJSON();
54
+ return json;
55
+ }
56
+ /**
57
+ * Creates a BookmarksTree from a JSON object
58
+ *
59
+ * String properties are treated as bookmarks, and object properties are
60
+ * recursively processed as folders.
61
+ *
62
+ * @param json The source JSON object to convert
63
+ * @returns A new BookmarksTree instance
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const json = { "Google": "https://google.com", "Development": { "GitHub": "https://github.com" } };
68
+ * const tree = BookmarksTree.fromJSON(json);
69
+ * ```
70
+ */
71
+ static fromJSON(json) {
72
+ const tree = new BookmarksTree();
73
+ if (typeof json === "object" && json !== null) {
74
+ for (const [key, value] of Object.entries(json)) if (typeof value === "string") tree.set(key, value);
75
+ else if (typeof value === "object" && value !== null) tree.set(key, BookmarksTree.fromJSON(value));
76
+ }
77
+ return tree;
78
+ }
79
+ /**
80
+ * Creates a BookmarksTree from an HTML document (Netscape Bookmark format)
81
+ *
82
+ * Parses Netscape Bookmark format HTML and generates a BookmarksTree that preserves
83
+ * the hierarchical structure. H3 elements within DT elements are treated as folders,
84
+ * and A elements are treated as bookmarks.
85
+ *
86
+ * @param dom The HTML document to parse
87
+ * @returns A new BookmarksTree instance
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const parser = new DOMParser();
92
+ * const dom = parser.parseFromString(bookmarkHtml, "text/html");
93
+ * const tree = BookmarksTree.fromDOM(dom);
94
+ * ```
95
+ */
96
+ static fromDOM(dom) {
97
+ const tree = new BookmarksTree();
98
+ const document = dom;
99
+ const processElement = (element, currentTree) => {
100
+ const children = Array.from(element.children);
101
+ for (let i = 0; i < children.length; i++) {
102
+ const child = children[i];
103
+ if (child.tagName === "DT") {
104
+ const h3 = child.querySelector("h3");
105
+ const link = child.querySelector("a");
106
+ if (h3) {
107
+ const folderName = h3.textContent?.trim() || "";
108
+ if (folderName) {
109
+ const folderTree = new BookmarksTree();
110
+ currentTree.set(folderName, folderTree);
111
+ processElement(child, folderTree);
112
+ }
113
+ } else if (link) {
114
+ const href = link.getAttribute("href");
115
+ const title = link.textContent?.trim() || "";
116
+ if (href && title) currentTree.set(title, href);
117
+ }
118
+ } else if (child.tagName === "DL") processElement(child, currentTree);
119
+ }
120
+ };
121
+ const body = document.body;
122
+ if (body) processElement(body, tree);
123
+ return tree;
124
+ }
125
+ /**
126
+ * Converts the BookmarksTree to an HTML document
127
+ *
128
+ * Generates an HTML document in Netscape Bookmark format.
129
+ *
130
+ * @returns HTML document in Netscape Bookmark format
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * const tree = new BookmarksTree();
135
+ * tree.set("Google", "https://google.com");
136
+ * const dom = tree.toDOM();
137
+ * ```
138
+ */
139
+ toDOM() {
140
+ return new DOMParser().parseFromString(this.HTMLString, "text/html");
141
+ }
142
+ /**
143
+ * Gets the BookmarksTree as an HTML string in Netscape Bookmark format
144
+ *
145
+ * Generates a complete HTML document string including DOCTYPE, metadata, and body
146
+ * in Netscape Bookmark format.
147
+ *
148
+ * @returns HTML string in Netscape Bookmark format
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const tree = new BookmarksTree();
153
+ * tree.set("Google", "https://google.com");
154
+ * const html = tree.HTMLString;
155
+ * console.log(html); // <!DOCTYPE NETSCAPE-Bookmark-file-1>...
156
+ * ```
157
+ */
158
+ get HTMLString() {
159
+ const escapeHtml = (text) => {
160
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
161
+ };
162
+ const createBookmarkList = (tree, indent = "") => {
163
+ let html = `${indent}<DL><p>\n`;
164
+ for (const [key, value] of tree.entries()) if (typeof value === "string") html += `${indent} <DT><A HREF="${escapeHtml(value)}">${escapeHtml(key)}</A>\n`;
165
+ else if (value instanceof BookmarksTree) {
166
+ html += `${indent} <DT><H3>${escapeHtml(key)}</H3>\n`;
167
+ html += createBookmarkList(value, indent + " ");
168
+ html += `${indent} </DL><p>\n`;
169
+ }
170
+ if (indent === "") html += `</DL>\n`;
171
+ return html;
172
+ };
173
+ return `<!DOCTYPE NETSCAPE-Bookmark-file-1>
174
+ <HTML>
175
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
176
+ <TITLE>Bookmark</TITLE>
177
+ <H1>Bookmark</H1>
178
+ <BODY>
179
+ ${createBookmarkList(this)}</BODY>
180
+ </HTML>`;
181
+ }
182
+ /**
183
+ * @deprecated Use {@link HTMLString} instead.
184
+ *
185
+ * Gets the BookmarksTree as an HTML string in Netscape Bookmark format.
186
+ */
187
+ get HTMLText() {
188
+ return this.HTMLString;
189
+ }
190
+ };
191
+
192
+ //#endregion
193
+ //#region src/BookmarksParser/BookmarksParser.ts
194
+ /**
195
+ * A parser for Netscape Bookmark format files
196
+ *
197
+ * This class provides static methods to parse Netscape Bookmark format HTML strings
198
+ * and convert them into BookmarksTree instances for easier manipulation.
199
+ *
200
+ * @example
201
+ * ```typescript
202
+ * const bookmarkHtml = `<!DOCTYPE NETSCAPE-Bookmark-file-1>
203
+ * <HTML>
204
+ * <BODY>
205
+ * <DL><p>
206
+ * <DT><A HREF="https://google.com">Google</A>
207
+ * <DT><H3>Development</H3>
208
+ * <DL><p>
209
+ * <DT><A HREF="https://github.com">GitHub</A>
210
+ * </DL><p>
211
+ * </DL>
212
+ * </BODY>
213
+ * </HTML>`;
214
+ *
215
+ * const tree = BookmarksParser.parse(bookmarkHtml);
216
+ * ```
217
+ */
218
+ var BookmarksParser = class {
219
+ /**
220
+ * Alias for the {@link parseFromHTMLString} method.
221
+ *
222
+ * @param htmlString HTML string in Netscape Bookmark format
223
+ * @returns The parsed BookmarksTree
224
+ *
225
+ * @example
226
+ * ```typescript
227
+ * const bookmarkHtml = `<!DOCTYPE NETSCAPE-Bookmark-file-1>
228
+ * <HTML>
229
+ * <BODY>
230
+ * <DL><p>
231
+ * <DT><A HREF="https://google.com">Google</A>
232
+ * <DT><H3>Development</H3>
233
+ * <DL><p>
234
+ * <DT><A HREF="https://github.com">GitHub</A>
235
+ * </DL><p>
236
+ * </DL>
237
+ * </BODY>
238
+ * </HTML>`;
239
+ *
240
+ * const tree = BookmarksParser.parse(bookmarkHtml);
241
+ * ```
242
+ */
243
+ static parse(htmlString) {
244
+ return this.parseFromHTMLString(htmlString);
245
+ }
246
+ /**
247
+ * Parses a Netscape Bookmark format HTML string and returns a BookmarksTree.
248
+ *
249
+ * @param htmlString HTML string in Netscape Bookmark format
250
+ * @returns The parsed BookmarksTree
251
+ *
252
+ * @example
253
+ * ```typescript
254
+ * const bookmarkHtml = `<!DOCTYPE NETSCAPE-Bookmark-file-1>
255
+ * <HTML>
256
+ * <BODY>
257
+ * <DL><p>
258
+ * <DT><A HREF="https://google.com">Google</A>
259
+ * <DT><H3>Development</H3>
260
+ * <DL><p>
261
+ * <DT><A HREF="https://github.com">GitHub</A>
262
+ * </DL><p>
263
+ * </DL>
264
+ * </BODY>
265
+ * </HTML>`;
266
+ *
267
+ * const tree = BookmarksParser.parseFromHTMLString(bookmarkHtml);
268
+ * ```
269
+ */
270
+ static parseFromHTMLString(htmlString) {
271
+ const dom = new DOMParser().parseFromString(htmlString, "text/html");
272
+ return BookmarksTree.fromDOM(dom);
273
+ }
274
+ /**
275
+ * Creates a BookmarksTree from an existing HTMLDocument.
276
+ *
277
+ * This is an alias for {@link BookmarksTree.fromDOM}.
278
+ *
279
+ * Use this when you already have a parsed HTMLDocument and want to convert it to a BookmarksTree.
280
+ *
281
+ * @param dom An HTMLDocument instance
282
+ * @returns The parsed BookmarksTree
283
+ *
284
+ * @example
285
+ * ```typescript
286
+ * const dom = new DOMParser().parseFromString(bookmarkHtml, "text/html");
287
+ * const tree = BookmarksParser.parseFromDOM(dom);
288
+ * ```
289
+ */
290
+ static parseFromDOM(dom) {
291
+ return BookmarksTree.fromDOM(dom);
292
+ }
293
+ /**
294
+ * Parses a JSON string and returns a BookmarksTree.
295
+ *
296
+ * @param jsonString JSON string representing the bookmark structure
297
+ * @returns The parsed BookmarksTree
298
+ *
299
+ * @example
300
+ * ```typescript
301
+ * const json = '{"Google":"https://google.com","Development":{"GitHub":"https://github.com"}}';
302
+ * const tree = BookmarksParser.parseFromJSONString(json);
303
+ * ```
304
+ */
305
+ static parseFromJSONString(jsonString) {
306
+ const obj = JSON.parse(jsonString);
307
+ return BookmarksTree.fromJSON(obj);
308
+ }
309
+ /**
310
+ * Parses a JSON object and returns a BookmarksTree.
311
+ *
312
+ * This is an alias for {@link BookmarksTree.fromJSON}.
313
+ *
314
+ * @param jsonObj JSON object representing the bookmark structure
315
+ * @returns The parsed BookmarksTree
316
+ *
317
+ * @example
318
+ * ```typescript
319
+ * const obj = { "Google": "https://google.com", "Development": { "GitHub": "https://github.com" } };
320
+ * const tree = BookmarksParser.parseFromJSON(obj);
321
+ * ```
322
+ */
323
+ static parseFromJSON(jsonObj) {
324
+ return BookmarksTree.fromJSON(jsonObj);
325
+ }
326
+ };
327
+
328
+ //#endregion
329
+ export { BookmarksParser, BookmarksTree };
330
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","names":["json: Record<string, unknown>"],"sources":["../src/web-dom.ts","../src/BookmarksTree/BookmarksTree.ts","../src/BookmarksParser/BookmarksParser.ts"],"sourcesContent":["/**\n * Copyright (c) 2025-2026 kurage(@umitsukidev)\n *\n * This software is released under the MIT License.\n * https://opensource.org/licenses/MIT\n */\n\nexport const DOMParser = globalThis.DOMParser;\n","/**\n * Copyright (c) 2025-2026 kurage(@umitsukidev)\n *\n * This software is released under the MIT License.\n * https://opensource.org/licenses/MIT\n */\n\nimport { DOMParser } from \"../dom.ts\";\nimport type { Element, HTMLDocument } from \"#dom-types\";\n\n/**\n * A class representing a bookmark tree in Netscape Bookmark format\n *\n * This class extends Map and manages folders (BookmarksTree) and bookmarks (URL strings)\n * in a hierarchical structure.\n *\n * @example\n * ```typescript\n * const tree = new BookmarksTree();\n * tree.set(\"Google\", \"https://google.com\");\n *\n * const folder = new BookmarksTree();\n * folder.set(\"GitHub\", \"https://github.com\");\n * tree.set(\"Development\", folder);\n * ```\n */\nexport class BookmarksTree extends Map<string, string | BookmarksTree> {\n\t/**\n\t * Creates a new BookmarksTree instance\n\t */\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Converts the BookmarksTree to a JSON object\n\t *\n\t * Folders are recursively converted to objects, and bookmarks are preserved as strings.\n\t *\n\t * @returns JSON object representation of the bookmark data\n\t *\n\t * @example\n\t * ```typescript\n\t * const tree = new BookmarksTree();\n\t * tree.set(\"Google\", \"https://google.com\");\n\t * const json = tree.toJSON();\n\t * // { \"Google\": \"https://google.com\" }\n\t * ```\n\t */\n\ttoJSON(): Record<string, unknown> {\n\t\tconst json: Record<string, unknown> = {};\n\n\t\tfor (const [key, value] of this.entries()) {\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tjson[key] = value;\n\t\t\t} else if (value instanceof BookmarksTree) {\n\t\t\t\tjson[key] = value.toJSON();\n\t\t\t}\n\t\t}\n\n\t\treturn json;\n\t}\n\n\t/**\n\t * Creates a BookmarksTree from a JSON object\n\t *\n\t * String properties are treated as bookmarks, and object properties are\n\t * recursively processed as folders.\n\t *\n\t * @param json The source JSON object to convert\n\t * @returns A new BookmarksTree instance\n\t *\n\t * @example\n\t * ```typescript\n\t * const json = { \"Google\": \"https://google.com\", \"Development\": { \"GitHub\": \"https://github.com\" } };\n\t * const tree = BookmarksTree.fromJSON(json);\n\t * ```\n\t */\n\tstatic fromJSON(json: Record<string, unknown>): BookmarksTree {\n\t\tconst tree = new BookmarksTree();\n\n\t\tif (typeof json === \"object\" && json !== null) {\n\t\t\tfor (const [key, value] of Object.entries(json)) {\n\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\ttree.set(key, value);\n\t\t\t\t} else if (typeof value === \"object\" && value !== null) {\n\t\t\t\t\ttree.set(key, BookmarksTree.fromJSON(value as Record<string, unknown>));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn tree;\n\t}\n\n\t/**\n\t * Creates a BookmarksTree from an HTML document (Netscape Bookmark format)\n\t *\n\t * Parses Netscape Bookmark format HTML and generates a BookmarksTree that preserves\n\t * the hierarchical structure. H3 elements within DT elements are treated as folders,\n\t * and A elements are treated as bookmarks.\n\t *\n\t * @param dom The HTML document to parse\n\t * @returns A new BookmarksTree instance\n\t *\n\t * @example\n\t * ```typescript\n\t * const parser = new DOMParser();\n\t * const dom = parser.parseFromString(bookmarkHtml, \"text/html\");\n\t * const tree = BookmarksTree.fromDOM(dom);\n\t * ```\n\t */\n\tstatic fromDOM(dom: HTMLDocument): BookmarksTree {\n\t\tconst tree = new BookmarksTree();\n\t\tconst document = dom;\n\n\t\tconst processElement = (element: Element, currentTree: BookmarksTree) => {\n\t\t\tconst children = Array.from(element.children) as Element[];\n\n\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\tconst child = children[i];\n\n\t\t\t\tif (child.tagName === \"DT\") {\n\t\t\t\t\tconst h3 = child.querySelector(\"h3\");\n\t\t\t\t\tconst link = child.querySelector(\"a\");\n\n\t\t\t\t\tif (h3) {\n\t\t\t\t\t\t// フォルダの場合\n\t\t\t\t\t\tconst folderName = h3.textContent?.trim() || \"\";\n\t\t\t\t\t\tif (folderName) {\n\t\t\t\t\t\t\tconst folderTree = new BookmarksTree();\n\t\t\t\t\t\t\tcurrentTree.set(folderName, folderTree);\n\t\t\t\t\t\t\tprocessElement(child, folderTree);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (link) {\n\t\t\t\t\t\t// リンクの場合\n\t\t\t\t\t\tconst href = link.getAttribute(\"href\");\n\t\t\t\t\t\tconst title = link.textContent?.trim() || \"\";\n\t\t\t\t\t\tif (href && title) {\n\t\t\t\t\t\t\tcurrentTree.set(title, href);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (child.tagName === \"DL\") {\n\t\t\t\t\t// ネストしたDLタグの場合も処理\n\t\t\t\t\tprocessElement(child, currentTree);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// HTMLのBODY全体から処理を開始\n\t\tconst body = document.body;\n\t\tif (body) {\n\t\t\tprocessElement(body, tree);\n\t\t}\n\n\t\treturn tree;\n\t}\n\n\t/**\n\t * Converts the BookmarksTree to an HTML document\n\t *\n\t * Generates an HTML document in Netscape Bookmark format.\n\t *\n\t * @returns HTML document in Netscape Bookmark format\n\t *\n\t * @example\n\t * ```typescript\n\t * const tree = new BookmarksTree();\n\t * tree.set(\"Google\", \"https://google.com\");\n\t * const dom = tree.toDOM();\n\t * ```\n\t */\n\ttoDOM(): HTMLDocument {\n\t\treturn new DOMParser().parseFromString(this.HTMLString, \"text/html\");\n\t}\n\n\t/**\n\t * Gets the BookmarksTree as an HTML string in Netscape Bookmark format\n\t *\n\t * Generates a complete HTML document string including DOCTYPE, metadata, and body\n\t * in Netscape Bookmark format.\n\t *\n\t * @returns HTML string in Netscape Bookmark format\n\t *\n\t * @example\n\t * ```typescript\n\t * const tree = new BookmarksTree();\n\t * tree.set(\"Google\", \"https://google.com\");\n\t * const html = tree.HTMLString;\n\t * console.log(html); // <!DOCTYPE NETSCAPE-Bookmark-file-1>...\n\t * ```\n\t */\n\tget HTMLString(): string {\n\t\tconst escapeHtml = (text: string): string => {\n\t\t\treturn text\n\t\t\t\t.replace(/&/g, \"&amp;\")\n\t\t\t\t.replace(/</g, \"&lt;\")\n\t\t\t\t.replace(/>/g, \"&gt;\")\n\t\t\t\t.replace(/\"/g, \"&quot;\")\n\t\t\t\t.replace(/'/g, \"&#39;\");\n\t\t};\n\n\t\tconst createBookmarkList = (tree: BookmarksTree, indent: string = \"\"): string => {\n\t\t\tlet html = `${indent}<DL><p>\\n`;\n\n\t\t\tfor (const [key, value] of tree.entries()) {\n\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t// ブックマークの場合: <DT><A HREF=\"url\">タイトル</A>\n\t\t\t\t\thtml += `${indent} <DT><A HREF=\"${escapeHtml(value)}\">${escapeHtml(key)}</A>\\n`;\n\t\t\t\t} else if (value instanceof BookmarksTree) {\n\t\t\t\t\t// フォルダの場合: <DT><H3>フォルダ名</H3>\n\t\t\t\t\thtml += `${indent} <DT><H3>${escapeHtml(key)}</H3>\\n`;\n\t\t\t\t\thtml += createBookmarkList(value, indent + \" \");\n\t\t\t\t\thtml += `${indent} </DL><p>\\n`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (indent === \"\") {\n\t\t\t\t// ルートレベルの場合は閉じタグを追加\n\t\t\t\thtml += `</DL>\\n`;\n\t\t\t}\n\n\t\t\treturn html;\n\t\t};\n\n\t\tconst htmlTemplate = `<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<HTML>\n<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">\n<TITLE>Bookmark</TITLE>\n<H1>Bookmark</H1>\n<BODY>\n${createBookmarkList(this)}</BODY>\n</HTML>`;\n\t\treturn htmlTemplate;\n\t}\n\n\t/**\n\t * @deprecated Use {@link HTMLString} instead.\n\t *\n\t * Gets the BookmarksTree as an HTML string in Netscape Bookmark format.\n\t */\n\tget HTMLText(): string {\n\t\treturn this.HTMLString;\n\t}\n}\n","/**\n * Copyright (c) 2025-2026 kurage(@umitsukidev)\n *\n * This software is released under the MIT License.\n * https://opensource.org/licenses/MIT\n */\n\nimport { DOMParser } from \"../dom.ts\";\nimport type { HTMLDocument } from \"#dom-types\";\nimport { BookmarksTree } from \"../BookmarksTree/index.ts\";\n\n/**\n * A parser for Netscape Bookmark format files\n *\n * This class provides static methods to parse Netscape Bookmark format HTML strings\n * and convert them into BookmarksTree instances for easier manipulation.\n *\n * @example\n * ```typescript\n * const bookmarkHtml = `<!DOCTYPE NETSCAPE-Bookmark-file-1>\n * <HTML>\n * <BODY>\n * <DL><p>\n * <DT><A HREF=\"https://google.com\">Google</A>\n * <DT><H3>Development</H3>\n * <DL><p>\n * <DT><A HREF=\"https://github.com\">GitHub</A>\n * </DL><p>\n * </DL>\n * </BODY>\n * </HTML>`;\n *\n * const tree = BookmarksParser.parse(bookmarkHtml);\n * ```\n */\nexport class BookmarksParser {\n\t/**\n\t * Alias for the {@link parseFromHTMLString} method.\n\t *\n\t * @param htmlString HTML string in Netscape Bookmark format\n\t * @returns The parsed BookmarksTree\n\t *\n\t * @example\n\t * ```typescript\n\t * const bookmarkHtml = `<!DOCTYPE NETSCAPE-Bookmark-file-1>\n\t * <HTML>\n\t * <BODY>\n\t * <DL><p>\n\t * <DT><A HREF=\"https://google.com\">Google</A>\n\t * <DT><H3>Development</H3>\n\t * <DL><p>\n\t * <DT><A HREF=\"https://github.com\">GitHub</A>\n\t * </DL><p>\n\t * </DL>\n\t * </BODY>\n\t * </HTML>`;\n\t *\n\t * const tree = BookmarksParser.parse(bookmarkHtml);\n\t * ```\n\t */\n\tstatic parse(htmlString: string): BookmarksTree {\n\t\treturn this.parseFromHTMLString(htmlString);\n\t}\n\n\t/**\n\t * Parses a Netscape Bookmark format HTML string and returns a BookmarksTree.\n\t *\n\t * @param htmlString HTML string in Netscape Bookmark format\n\t * @returns The parsed BookmarksTree\n\t *\n\t * @example\n\t * ```typescript\n\t * const bookmarkHtml = `<!DOCTYPE NETSCAPE-Bookmark-file-1>\n\t * <HTML>\n\t * <BODY>\n\t * <DL><p>\n\t * <DT><A HREF=\"https://google.com\">Google</A>\n\t * <DT><H3>Development</H3>\n\t * <DL><p>\n\t * <DT><A HREF=\"https://github.com\">GitHub</A>\n\t * </DL><p>\n\t * </DL>\n\t * </BODY>\n\t * </HTML>`;\n\t *\n\t * const tree = BookmarksParser.parseFromHTMLString(bookmarkHtml);\n\t * ```\n\t */\n\tstatic parseFromHTMLString(htmlString: string): BookmarksTree {\n\t\tconst dom = new DOMParser().parseFromString(htmlString, \"text/html\");\n\t\tconst tree = BookmarksTree.fromDOM(dom);\n\t\treturn tree;\n\t}\n\n\t/**\n\t * Creates a BookmarksTree from an existing HTMLDocument.\n\t *\n\t * This is an alias for {@link BookmarksTree.fromDOM}.\n\t *\n\t * Use this when you already have a parsed HTMLDocument and want to convert it to a BookmarksTree.\n\t *\n\t * @param dom An HTMLDocument instance\n\t * @returns The parsed BookmarksTree\n\t *\n\t * @example\n\t * ```typescript\n\t * const dom = new DOMParser().parseFromString(bookmarkHtml, \"text/html\");\n\t * const tree = BookmarksParser.parseFromDOM(dom);\n\t * ```\n\t */\n\tstatic parseFromDOM(dom: HTMLDocument): BookmarksTree {\n\t\treturn BookmarksTree.fromDOM(dom);\n\t}\n\n\t/**\n\t * Parses a JSON string and returns a BookmarksTree.\n\t *\n\t * @param jsonString JSON string representing the bookmark structure\n\t * @returns The parsed BookmarksTree\n\t *\n\t * @example\n\t * ```typescript\n\t * const json = '{\"Google\":\"https://google.com\",\"Development\":{\"GitHub\":\"https://github.com\"}}';\n\t * const tree = BookmarksParser.parseFromJSONString(json);\n\t * ```\n\t */\n\tstatic parseFromJSONString(jsonString: string): BookmarksTree {\n\t\tconst obj = JSON.parse(jsonString);\n\t\treturn BookmarksTree.fromJSON(obj);\n\t}\n\n\t/**\n\t * Parses a JSON object and returns a BookmarksTree.\n\t *\n\t * This is an alias for {@link BookmarksTree.fromJSON}.\n\t *\n\t * @param jsonObj JSON object representing the bookmark structure\n\t * @returns The parsed BookmarksTree\n\t *\n\t * @example\n\t * ```typescript\n\t * const obj = { \"Google\": \"https://google.com\", \"Development\": { \"GitHub\": \"https://github.com\" } };\n\t * const tree = BookmarksParser.parseFromJSON(obj);\n\t * ```\n\t */\n\tstatic parseFromJSON(jsonObj: Record<string, unknown>): BookmarksTree {\n\t\treturn BookmarksTree.fromJSON(jsonObj);\n\t}\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,32 +1,75 @@
1
1
  {
2
2
  "name": "netscape-bookmark-parser",
3
- "version": "1.1.4",
3
+ "version": "1.2.0",
4
+ "description": "Parse Netscape bookmark HTML files and manipulate them as structured data.",
4
5
  "keywords": [
5
6
  "bookmark",
6
- "parser",
7
- "netscape"
7
+ "netscape",
8
+ "parser"
8
9
  ],
9
- "author": "grakeice",
10
- "repository": "https://github.com/grakeice/netscape-bookmark-parser",
10
+ "homepage": "https://github.com/umitsukidev/netscape-bookmark-parser#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/umitsukidev/netscape-bookmark-parser/issues"
13
+ },
11
14
  "license": "MIT",
12
- "module": "./esm/mod.js",
15
+ "author": "kurage(@umitsukidev)",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/umitsukidev/netscape-bookmark-parser.git"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "LICENSE",
23
+ "README.md",
24
+ "README-ja.md"
25
+ ],
26
+ "type": "module",
13
27
  "exports": {
14
28
  ".": {
15
- "import": "./esm/mod.js"
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.js"
16
31
  },
17
32
  "./web": {
18
- "import": "./esm/mod_web.js"
33
+ "types": "./dist/web.d.ts",
34
+ "import": "./dist/web.js"
19
35
  }
20
36
  },
21
- "scripts": {},
22
37
  "publishConfig": {
23
- "access": "public"
24
- },
25
- "dependencies": {
26
- "@deno/shim-deno": "~0.18.0"
38
+ "access": "public",
39
+ "provenance": true
27
40
  },
28
41
  "devDependencies": {
29
- "@types/node": "^20.9.0"
42
+ "@changesets/cli": "^3.0.3",
43
+ "@changesets/config": "^4.0.1",
44
+ "@types/node": "^24.0.0",
45
+ "lefthook": "^2.1.14",
46
+ "oxfmt": "^0.68.0",
47
+ "oxlint": "^1.83.0",
48
+ "oxlint-tsgolint": "^7.0.2002",
49
+ "tsdown": "^0.15.0",
50
+ "typescript": "^5.9.0",
51
+ "vitest": "^3.2.4"
52
+ },
53
+ "devEngines": {
54
+ "packageManager": {
55
+ "name": "pnpm",
56
+ "version": "12.5.1",
57
+ "onFail": "download"
58
+ },
59
+ "runtime": {
60
+ "name": "node",
61
+ "version": "26.10.0",
62
+ "onFail": "download"
63
+ }
30
64
  },
31
- "_generatedBy": "dnt@dev"
65
+ "scripts": {
66
+ "build": "tsdown --config tsdown.config.ts && tsdown --config tsdown.web.config.ts",
67
+ "typecheck": "tsc --noEmit",
68
+ "test": "vitest run",
69
+ "test:watch": "vitest",
70
+ "changeset": "changeset",
71
+ "check": "oxfmt --check && oxlint && pnpm typecheck",
72
+ "version-packages": "changeset version && pnpm sync:jsr-version",
73
+ "sync:jsr-version": "node scripts/sync-jsr-version.mjs"
74
+ }
32
75
  }
@@ -1,101 +0,0 @@
1
- /**
2
- * Based on [import-meta-ponyfill](https://github.com/gaubee/import-meta-ponyfill),
3
- * but instead of using npm to install additional dependencies,
4
- * this approach manually consolidates cjs/mjs/d.ts into a single file.
5
- *
6
- * Note that this code might be imported multiple times
7
- * (for example, both dnt.test.polyfills.ts and dnt.polyfills.ts contain this code;
8
- * or Node.js might dynamically clear the cache and then force a require).
9
- * Therefore, it's important to avoid redundant writes to global objects.
10
- * Additionally, consider that commonjs is used alongside esm,
11
- * so the two ponyfill functions are stored independently in two separate global objects.
12
- */
13
- import { createRequire } from "node:module";
14
- import { type URL } from "node:url";
15
- declare global {
16
- interface ImportMeta {
17
- /** A string representation of the fully qualified module URL. When the
18
- * module is loaded locally, the value will be a file URL (e.g.
19
- * `file:///path/module.ts`).
20
- *
21
- * You can also parse the string as a URL to determine more information about
22
- * how the current module was loaded. For example to determine if a module was
23
- * local or not:
24
- *
25
- * ```ts
26
- * const url = new URL(import.meta.url);
27
- * if (url.protocol === "file:") {
28
- * console.log("this module was loaded locally");
29
- * }
30
- * ```
31
- */
32
- url: string;
33
- /**
34
- * A function that returns resolved specifier as if it would be imported
35
- * using `import(specifier)`.
36
- *
37
- * ```ts
38
- * console.log(import.meta.resolve("./foo.js"));
39
- * // file:///dev/foo.js
40
- * ```
41
- *
42
- * @param specifier The module specifier to resolve relative to `parent`.
43
- * @param parent The absolute parent module URL to resolve from.
44
- * @returns The absolute (`file:`) URL string for the resolved module.
45
- */
46
- resolve(specifier: string, parent?: string | URL | undefined): string;
47
- /** A flag that indicates if the current module is the main module that was
48
- * called when starting the program under Deno.
49
- *
50
- * ```ts
51
- * if (import.meta.main) {
52
- * // this was loaded as the main module, maybe do some bootstrapping
53
- * }
54
- * ```
55
- */
56
- main: boolean;
57
- /** The absolute path of the current module.
58
- *
59
- * This property is only provided for local modules (ie. using `file://` URLs).
60
- *
61
- * Example:
62
- * ```
63
- * // Unix
64
- * console.log(import.meta.filename); // /home/alice/my_module.ts
65
- *
66
- * // Windows
67
- * console.log(import.meta.filename); // C:\alice\my_module.ts
68
- * ```
69
- */
70
- filename: string;
71
- /** The absolute path of the directory containing the current module.
72
- *
73
- * This property is only provided for local modules (ie. using `file://` URLs).
74
- *
75
- * * Example:
76
- * ```
77
- * // Unix
78
- * console.log(import.meta.dirname); // /home/alice
79
- *
80
- * // Windows
81
- * console.log(import.meta.dirname); // C:\alice
82
- * ```
83
- */
84
- dirname: string;
85
- }
86
- }
87
- type NodeRequest = ReturnType<typeof createRequire>;
88
- type NodeModule = NonNullable<NodeRequest["main"]>;
89
- interface ImportMetaPonyfillCommonjs {
90
- (require: NodeRequest, module: NodeModule): ImportMeta;
91
- }
92
- interface ImportMetaPonyfillEsmodule {
93
- (importMeta: ImportMeta): ImportMeta;
94
- }
95
- interface ImportMetaPonyfill extends ImportMetaPonyfillCommonjs, ImportMetaPonyfillEsmodule {
96
- }
97
- export declare let import_meta_ponyfill_commonjs: ImportMetaPonyfillCommonjs;
98
- export declare let import_meta_ponyfill_esmodule: ImportMetaPonyfillEsmodule;
99
- export declare let import_meta_ponyfill: ImportMetaPonyfill;
100
- export {};
101
- //# sourceMappingURL=_dnt.polyfills.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_dnt.polyfills.d.ts","sourceRoot":"","sources":["../src/_dnt.polyfills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAgC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB;;;;;;;;;;;;;;WAcG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;;;;;;;;;;;WAYG;QACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC;QACtE;;;;;;;;WAQG;QACH,IAAI,EAAE,OAAO,CAAC;QAEd;;;;;;;;;;;;WAYG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;;;;;;;;;;;WAYG;QACH,OAAO,EAAE,MAAM,CAAC;KACjB;CACF;AAED,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,KAAK,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,UAAU,0BAA0B;IAClC,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACxD;AACD,UAAU,0BAA0B;IAClC,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;CACtC;AACD,UAAU,kBACR,SAAQ,0BAA0B,EAAE,0BAA0B;CAC/D;AAiBD,eAAO,IAAI,6BAA6B,EA2BnC,0BAA0B,CAAC;AAMhC,eAAO,IAAI,6BAA6B,EA4DnC,0BAA0B,CAAC;AAMhC,eAAO,IAAI,oBAAoB,EAoB1B,kBAAkB,CAAC"}