mdrip 0.1.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 (74) hide show
  1. package/README.md +137 -0
  2. package/dist/commands/clean.d.ts +6 -0
  3. package/dist/commands/clean.d.ts.map +1 -0
  4. package/dist/commands/clean.js +49 -0
  5. package/dist/commands/clean.js.map +1 -0
  6. package/dist/commands/fetch.d.ts +9 -0
  7. package/dist/commands/fetch.d.ts.map +1 -0
  8. package/dist/commands/fetch.js +163 -0
  9. package/dist/commands/fetch.js.map +1 -0
  10. package/dist/commands/list.d.ts +6 -0
  11. package/dist/commands/list.d.ts.map +1 -0
  12. package/dist/commands/list.js +55 -0
  13. package/dist/commands/list.js.map +1 -0
  14. package/dist/commands/remove.d.ts +5 -0
  15. package/dist/commands/remove.d.ts.map +1 -0
  16. package/dist/commands/remove.js +53 -0
  17. package/dist/commands/remove.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +74 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/lib/agents.d.ts +10 -0
  23. package/dist/lib/agents.d.ts.map +1 -0
  24. package/dist/lib/agents.js +129 -0
  25. package/dist/lib/agents.js.map +1 -0
  26. package/dist/lib/cloudflare.d.ts +17 -0
  27. package/dist/lib/cloudflare.d.ts.map +1 -0
  28. package/dist/lib/cloudflare.js +74 -0
  29. package/dist/lib/cloudflare.js.map +1 -0
  30. package/dist/lib/cloudflare.test.d.ts +2 -0
  31. package/dist/lib/cloudflare.test.d.ts.map +1 -0
  32. package/dist/lib/cloudflare.test.js +59 -0
  33. package/dist/lib/cloudflare.test.js.map +1 -0
  34. package/dist/lib/gitignore.d.ts +3 -0
  35. package/dist/lib/gitignore.d.ts.map +1 -0
  36. package/dist/lib/gitignore.js +42 -0
  37. package/dist/lib/gitignore.js.map +1 -0
  38. package/dist/lib/html-to-markdown.d.ts +3 -0
  39. package/dist/lib/html-to-markdown.d.ts.map +1 -0
  40. package/dist/lib/html-to-markdown.js +312 -0
  41. package/dist/lib/html-to-markdown.js.map +1 -0
  42. package/dist/lib/html-to-markdown.test.d.ts +2 -0
  43. package/dist/lib/html-to-markdown.test.d.ts.map +1 -0
  44. package/dist/lib/html-to-markdown.test.js +54 -0
  45. package/dist/lib/html-to-markdown.test.js.map +1 -0
  46. package/dist/lib/prompt.d.ts +5 -0
  47. package/dist/lib/prompt.d.ts.map +1 -0
  48. package/dist/lib/prompt.js +47 -0
  49. package/dist/lib/prompt.js.map +1 -0
  50. package/dist/lib/settings.d.ts +9 -0
  51. package/dist/lib/settings.d.ts.map +1 -0
  52. package/dist/lib/settings.js +42 -0
  53. package/dist/lib/settings.js.map +1 -0
  54. package/dist/lib/storage.d.ts +11 -0
  55. package/dist/lib/storage.d.ts.map +1 -0
  56. package/dist/lib/storage.js +87 -0
  57. package/dist/lib/storage.js.map +1 -0
  58. package/dist/lib/tsconfig.d.ts +4 -0
  59. package/dist/lib/tsconfig.d.ts.map +1 -0
  60. package/dist/lib/tsconfig.js +49 -0
  61. package/dist/lib/tsconfig.js.map +1 -0
  62. package/dist/lib/url.d.ts +5 -0
  63. package/dist/lib/url.d.ts.map +1 -0
  64. package/dist/lib/url.js +73 -0
  65. package/dist/lib/url.js.map +1 -0
  66. package/dist/lib/url.test.d.ts +2 -0
  67. package/dist/lib/url.test.d.ts.map +1 -0
  68. package/dist/lib/url.test.js +41 -0
  69. package/dist/lib/url.test.js.map +1 -0
  70. package/dist/types.d.ts +28 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +2 -0
  73. package/dist/types.js.map +1 -0
  74. package/package.json +58 -0
@@ -0,0 +1,312 @@
1
+ import { parseDocument } from "htmlparser2";
2
+ const SKIP_TAGS = new Set([
3
+ "script",
4
+ "style",
5
+ "noscript",
6
+ "svg",
7
+ "canvas",
8
+ "iframe",
9
+ "form",
10
+ "input",
11
+ "button",
12
+ ]);
13
+ const BLOCK_TAGS = new Set([
14
+ "article",
15
+ "section",
16
+ "main",
17
+ "div",
18
+ "p",
19
+ "header",
20
+ "footer",
21
+ "aside",
22
+ "figure",
23
+ "figcaption",
24
+ "details",
25
+ "summary",
26
+ "dl",
27
+ "dt",
28
+ "dd",
29
+ ]);
30
+ function isElement(node) {
31
+ return node.type === "tag" || node.type === "script" || node.type === "style";
32
+ }
33
+ function isText(node) {
34
+ return node.type === "text";
35
+ }
36
+ function getChildren(node) {
37
+ return "children" in node && Array.isArray(node.children) ? node.children : [];
38
+ }
39
+ function collapseWhitespace(value) {
40
+ return value.replace(/\s+/g, " ");
41
+ }
42
+ function resolveHref(value, baseUrl) {
43
+ if (!baseUrl) {
44
+ return value;
45
+ }
46
+ try {
47
+ return new URL(value, baseUrl).toString();
48
+ }
49
+ catch {
50
+ return value;
51
+ }
52
+ }
53
+ function getTextContent(node) {
54
+ if (isText(node)) {
55
+ return node.data;
56
+ }
57
+ return getChildren(node).map((child) => getTextContent(child)).join("");
58
+ }
59
+ function normalizeMarkdown(markdown) {
60
+ const cleaned = markdown
61
+ .replace(/\r\n/g, "\n")
62
+ .replace(/[ \t]+\n/g, "\n")
63
+ .replace(/\n{3,}/g, "\n\n")
64
+ .trim();
65
+ return cleaned ? `${cleaned}\n` : "";
66
+ }
67
+ function renderInlineChildren(children, ctx) {
68
+ const rendered = children.map((child) => renderNode(child, ctx)).join("");
69
+ return rendered.replace(/\s+/g, " ");
70
+ }
71
+ function block(text) {
72
+ const trimmed = text.trim();
73
+ if (!trimmed) {
74
+ return "";
75
+ }
76
+ return `\n\n${trimmed}\n\n`;
77
+ }
78
+ function renderListItem(node, ordered, index, ctx) {
79
+ const marker = ordered ? `${index + 1}. ` : "- ";
80
+ const indent = " ".repeat(ctx.listDepth);
81
+ const contentNodes = [];
82
+ const nestedLists = [];
83
+ for (const child of getChildren(node)) {
84
+ if (isElement(child) && (child.name === "ul" || child.name === "ol")) {
85
+ nestedLists.push(renderList(child, child.name === "ol", {
86
+ ...ctx,
87
+ listDepth: ctx.listDepth + 1,
88
+ }));
89
+ continue;
90
+ }
91
+ contentNodes.push(child);
92
+ }
93
+ const text = renderInlineChildren(contentNodes, ctx).trim();
94
+ let output = `${indent}${marker}${text}`.trimEnd();
95
+ if (nestedLists.length > 0) {
96
+ output += `\n${nestedLists.join("\n")}`;
97
+ }
98
+ return output;
99
+ }
100
+ function renderList(node, ordered, ctx) {
101
+ const items = getChildren(node).filter((child) => isElement(child) && child.name === "li");
102
+ if (items.length === 0) {
103
+ return "";
104
+ }
105
+ const lines = items.map((item, index) => renderListItem(item, ordered, index, ctx));
106
+ return block(lines.join("\n"));
107
+ }
108
+ function renderBlockquote(node, ctx) {
109
+ const content = renderChildren(node, ctx).trim();
110
+ if (!content) {
111
+ return "";
112
+ }
113
+ const lines = content
114
+ .split("\n")
115
+ .map((line) => (line.trim() ? `> ${line}` : ">"))
116
+ .join("\n");
117
+ return `\n\n${lines}\n\n`;
118
+ }
119
+ function renderTable(node, ctx) {
120
+ const rows = [];
121
+ const pushRow = (row) => {
122
+ const cells = getChildren(row).filter((child) => isElement(child) && (child.name === "th" || child.name === "td"));
123
+ if (cells.length === 0) {
124
+ return;
125
+ }
126
+ rows.push(cells.map((cell) => renderInlineChildren(getChildren(cell), ctx).trim()));
127
+ };
128
+ const visit = (current) => {
129
+ if (current.name === "tr") {
130
+ pushRow(current);
131
+ return;
132
+ }
133
+ for (const child of getChildren(current)) {
134
+ if (isElement(child)) {
135
+ visit(child);
136
+ }
137
+ }
138
+ };
139
+ visit(node);
140
+ if (rows.length === 0) {
141
+ return "";
142
+ }
143
+ const colCount = Math.max(...rows.map((row) => row.length));
144
+ const normalizedRows = rows.map((row) => {
145
+ const out = [...row];
146
+ while (out.length < colCount) {
147
+ out.push("");
148
+ }
149
+ return out;
150
+ });
151
+ const header = normalizedRows[0];
152
+ const body = normalizedRows.slice(1);
153
+ const separator = new Array(colCount).fill("---");
154
+ const markdownRows = [header, separator, ...body].map((row) => `| ${row.join(" | ")} |`);
155
+ return block(markdownRows.join("\n"));
156
+ }
157
+ function renderPre(node) {
158
+ const className = node.attribs.class || "";
159
+ const languageMatch = className.match(/(?:language|lang)-([a-zA-Z0-9+-]+)/);
160
+ const language = languageMatch ? languageMatch[1] : "";
161
+ const raw = getTextContent(node).replace(/\r\n/g, "\n").trimEnd();
162
+ if (!raw) {
163
+ return "";
164
+ }
165
+ return `\n\n\`\`\`${language}\n${raw}\n\`\`\`\n\n`;
166
+ }
167
+ function renderChildren(node, ctx) {
168
+ return getChildren(node).map((child) => renderNode(child, ctx)).join("");
169
+ }
170
+ function renderNode(node, ctx) {
171
+ if (isText(node)) {
172
+ return ctx.inPre ? node.data : collapseWhitespace(node.data);
173
+ }
174
+ if (!isElement(node)) {
175
+ return renderChildren(node, ctx);
176
+ }
177
+ const tag = node.name.toLowerCase();
178
+ if (SKIP_TAGS.has(tag)) {
179
+ return "";
180
+ }
181
+ switch (tag) {
182
+ case "br":
183
+ return " \n";
184
+ case "hr":
185
+ return "\n\n---\n\n";
186
+ case "h1":
187
+ case "h2":
188
+ case "h3":
189
+ case "h4":
190
+ case "h5":
191
+ case "h6": {
192
+ const level = Number.parseInt(tag.slice(1), 10);
193
+ const text = renderInlineChildren(getChildren(node), ctx).trim();
194
+ return block(`${"#".repeat(level)} ${text}`);
195
+ }
196
+ case "p": {
197
+ const text = renderInlineChildren(getChildren(node), ctx).trim();
198
+ return block(text);
199
+ }
200
+ case "strong":
201
+ case "b": {
202
+ const text = renderInlineChildren(getChildren(node), ctx).trim();
203
+ return text ? `**${text}**` : "";
204
+ }
205
+ case "em":
206
+ case "i": {
207
+ const text = renderInlineChildren(getChildren(node), ctx).trim();
208
+ return text ? `*${text}*` : "";
209
+ }
210
+ case "code": {
211
+ const text = renderInlineChildren(getChildren(node), { ...ctx, inPre: true }).trim();
212
+ if (!text) {
213
+ return "";
214
+ }
215
+ return ctx.inPre ? text : `\`${text}\``;
216
+ }
217
+ case "pre":
218
+ return renderPre(node);
219
+ case "a": {
220
+ const href = node.attribs.href;
221
+ const text = renderInlineChildren(getChildren(node), ctx).trim();
222
+ if (!href) {
223
+ return text;
224
+ }
225
+ const resolvedHref = resolveHref(href, ctx.baseUrl);
226
+ const label = text || resolvedHref;
227
+ return `[${label}](${resolvedHref})`;
228
+ }
229
+ case "img": {
230
+ const src = node.attribs.src;
231
+ const alt = (node.attribs.alt || "image").trim();
232
+ if (!src) {
233
+ return alt;
234
+ }
235
+ const resolvedSrc = resolveHref(src, ctx.baseUrl);
236
+ return `![${alt}](${resolvedSrc})`;
237
+ }
238
+ case "ul":
239
+ return renderList(node, false, ctx);
240
+ case "ol":
241
+ return renderList(node, true, ctx);
242
+ case "blockquote":
243
+ return renderBlockquote(node, ctx);
244
+ case "table":
245
+ return renderTable(node, ctx);
246
+ default: {
247
+ const content = renderChildren(node, ctx);
248
+ if (BLOCK_TAGS.has(tag)) {
249
+ return block(content);
250
+ }
251
+ return content;
252
+ }
253
+ }
254
+ }
255
+ function findFirstByTag(node, tagName) {
256
+ if (isElement(node) && node.name.toLowerCase() === tagName) {
257
+ return node;
258
+ }
259
+ for (const child of getChildren(node)) {
260
+ const found = findFirstByTag(child, tagName);
261
+ if (found) {
262
+ return found;
263
+ }
264
+ }
265
+ return null;
266
+ }
267
+ function findBestRoot(document) {
268
+ const main = findFirstByTag(document, "main");
269
+ if (main) {
270
+ return main;
271
+ }
272
+ const article = findFirstByTag(document, "article");
273
+ if (article) {
274
+ return article;
275
+ }
276
+ const body = findFirstByTag(document, "body");
277
+ if (body) {
278
+ return body;
279
+ }
280
+ return document;
281
+ }
282
+ function getDocumentTitle(document) {
283
+ const titleElement = findFirstByTag(document, "title");
284
+ if (!titleElement) {
285
+ return null;
286
+ }
287
+ const title = getTextContent(titleElement).trim();
288
+ return title || null;
289
+ }
290
+ export function estimateTokenCount(markdown) {
291
+ const compact = markdown.trim();
292
+ if (!compact) {
293
+ return 0;
294
+ }
295
+ return Math.ceil(compact.length / 4);
296
+ }
297
+ export function convertHtmlToMarkdown(html, baseUrl) {
298
+ const document = parseDocument(html, { decodeEntities: true });
299
+ const root = findBestRoot(document);
300
+ const content = renderChildren(root, {
301
+ baseUrl,
302
+ inPre: false,
303
+ listDepth: 0,
304
+ });
305
+ let markdown = normalizeMarkdown(content);
306
+ const title = getDocumentTitle(document);
307
+ if (title && !markdown.startsWith("# ")) {
308
+ markdown = normalizeMarkdown(`# ${title}\n\n${markdown}`);
309
+ }
310
+ return markdown;
311
+ }
312
+ //# sourceMappingURL=html-to-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-to-markdown.js","sourceRoot":"","sources":["../../src/lib/html-to-markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=html-to-markdown.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-to-markdown.test.d.ts","sourceRoot":"","sources":["../../src/lib/html-to-markdown.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { convertHtmlToMarkdown, estimateTokenCount } from "./html-to-markdown.js";
3
+ describe("convertHtmlToMarkdown", () => {
4
+ it("converts common HTML content into markdown", () => {
5
+ const html = `
6
+ <html>
7
+ <head><title>Example Page</title></head>
8
+ <body>
9
+ <main>
10
+ <h2>Intro</h2>
11
+ <p>Hello <strong>world</strong> and <a href="/docs">docs</a>.</p>
12
+ <ul>
13
+ <li>one</li>
14
+ <li>two</li>
15
+ </ul>
16
+ <pre class="language-ts"><code>const n = 1;</code></pre>
17
+ </main>
18
+ </body>
19
+ </html>
20
+ `;
21
+ const markdown = convertHtmlToMarkdown(html, "https://example.com/base");
22
+ expect(markdown).toContain("# Example Page");
23
+ expect(markdown).toContain("## Intro");
24
+ expect(markdown).toContain("Hello **world** and [docs](https://example.com/docs).");
25
+ expect(markdown).toContain("- one");
26
+ expect(markdown).toContain("- two");
27
+ expect(markdown).toContain("```ts");
28
+ expect(markdown).toContain("const n = 1;");
29
+ });
30
+ it("skips scripts and styles", () => {
31
+ const html = `
32
+ <html>
33
+ <body>
34
+ <main>
35
+ <script>window.secret = 1;</script>
36
+ <style>body { display: none; }</style>
37
+ <p>Visible text</p>
38
+ </main>
39
+ </body>
40
+ </html>
41
+ `;
42
+ const markdown = convertHtmlToMarkdown(html);
43
+ expect(markdown).toContain("Visible text");
44
+ expect(markdown).not.toContain("window.secret");
45
+ expect(markdown).not.toContain("display: none");
46
+ });
47
+ });
48
+ describe("estimateTokenCount", () => {
49
+ it("returns 0 for empty markdown and estimate for text", () => {
50
+ expect(estimateTokenCount(" ")).toBe(0);
51
+ expect(estimateTokenCount("12345678")).toBe(2);
52
+ });
53
+ });
54
+ //# sourceMappingURL=html-to-markdown.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-to-markdown.test.js","sourceRoot":"","sources":["../../src/lib/html-to-markdown.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAElF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;KAeZ,CAAC;QAEF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;QAEzE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;QACpF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG;;;;;;;;;;KAUZ,CAAC;QAEF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Prompt the user with a yes/no question (responds on keypress)
3
+ */
4
+ export declare function confirm(question: string): Promise<boolean>;
5
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+ChE"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Prompt the user with a yes/no question (responds on keypress)
3
+ */
4
+ export async function confirm(question) {
5
+ process.stdout.write(`${question} (y/n): `);
6
+ return new Promise((resolve) => {
7
+ if (!process.stdin.isTTY) {
8
+ process.stdin.resume();
9
+ process.stdin.setEncoding("utf8");
10
+ process.stdin.once("data", (data) => {
11
+ process.stdin.pause();
12
+ const normalized = data.toString().trim().toLowerCase();
13
+ resolve(normalized === "y" || normalized === "yes");
14
+ });
15
+ return;
16
+ }
17
+ process.stdin.setRawMode(true);
18
+ process.stdin.resume();
19
+ process.stdin.setEncoding("utf8");
20
+ const onKeypress = (key) => {
21
+ if (key === "\u0003") {
22
+ process.stdout.write("\n");
23
+ process.stdin.setRawMode(false);
24
+ process.stdin.pause();
25
+ process.stdin.removeListener("data", onKeypress);
26
+ process.exit(130);
27
+ }
28
+ const lower = key.toLowerCase();
29
+ if (lower === "y") {
30
+ process.stdout.write("y\n");
31
+ process.stdin.setRawMode(false);
32
+ process.stdin.pause();
33
+ process.stdin.removeListener("data", onKeypress);
34
+ resolve(true);
35
+ }
36
+ else if (lower === "n") {
37
+ process.stdout.write("n\n");
38
+ process.stdin.setRawMode(false);
39
+ process.stdin.pause();
40
+ process.stdin.removeListener("data", onKeypress);
41
+ resolve(false);
42
+ }
43
+ };
44
+ process.stdin.on("data", onKeypress);
45
+ });
46
+ }
47
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAgB;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,UAAU,CAAC,CAAC;IAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACxD,OAAO,CAAC,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE;YACjC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YAEhC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface MdripSettings {
2
+ allowFileModifications?: boolean;
3
+ }
4
+ export declare function ensureMdripDir(cwd: string): Promise<void>;
5
+ export declare function readSettings(cwd?: string): Promise<MdripSettings>;
6
+ export declare function writeSettings(settings: MdripSettings, cwd?: string): Promise<void>;
7
+ export declare function getFileModificationPermission(cwd?: string): Promise<boolean | undefined>;
8
+ export declare function setFileModificationPermission(allowed: boolean, cwd?: string): Promise<void>;
9
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/lib/settings.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAMD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/D;AAED,wBAAsB,YAAY,CAChC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAaxB;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,aAAa,EACvB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,6BAA6B,CACjD,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAG9B;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,OAAO,EAChB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -0,0 +1,42 @@
1
+ import { readFile, writeFile, mkdir } from "fs/promises";
2
+ import { join } from "path";
3
+ import { existsSync } from "fs";
4
+ const MDRIP_DIR = "mdrip";
5
+ const SETTINGS_FILE = "settings.json";
6
+ function getSettingsPath(cwd) {
7
+ return join(cwd, MDRIP_DIR, SETTINGS_FILE);
8
+ }
9
+ export async function ensureMdripDir(cwd) {
10
+ const mdripDir = join(cwd, MDRIP_DIR);
11
+ if (!existsSync(mdripDir)) {
12
+ await mkdir(mdripDir, { recursive: true });
13
+ }
14
+ }
15
+ export async function readSettings(cwd = process.cwd()) {
16
+ const settingsPath = getSettingsPath(cwd);
17
+ if (!existsSync(settingsPath)) {
18
+ return {};
19
+ }
20
+ try {
21
+ const content = await readFile(settingsPath, "utf-8");
22
+ return JSON.parse(content);
23
+ }
24
+ catch {
25
+ return {};
26
+ }
27
+ }
28
+ export async function writeSettings(settings, cwd = process.cwd()) {
29
+ await ensureMdripDir(cwd);
30
+ const settingsPath = getSettingsPath(cwd);
31
+ await writeFile(settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
32
+ }
33
+ export async function getFileModificationPermission(cwd = process.cwd()) {
34
+ const settings = await readSettings(cwd);
35
+ return settings.allowFileModifications;
36
+ }
37
+ export async function setFileModificationPermission(allowed, cwd = process.cwd()) {
38
+ const settings = await readSettings(cwd);
39
+ settings.allowFileModifications = allowed;
40
+ await writeSettings(settings, cwd);
41
+ }
42
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/lib/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,MAAM,SAAS,GAAG,OAAO,CAAC;AAC1B,MAAM,aAAa,GAAG,eAAe,CAAC;AAMtC,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAuB,EACvB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,sBAAsB,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAgB,EAChB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,CAAC,sBAAsB,GAAG,OAAO,CAAC;IAC1C,MAAM,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { PageEntry } from "../types.js";
2
+ export declare function getMdripDir(cwd?: string): string;
3
+ export declare function getPagesDir(cwd?: string): string;
4
+ export declare function listSources(cwd?: string): Promise<{
5
+ pages: PageEntry[];
6
+ }>;
7
+ export declare function getPageInfo(url: string, cwd?: string): Promise<PageEntry | null>;
8
+ export declare function savePageMarkdown(url: string, markdown: string, cwd?: string): Promise<string>;
9
+ export declare function removeStoredPage(relativePath: string, cwd?: string): Promise<boolean>;
10
+ export declare function cleanupEmptyPageDirs(cwd?: string): Promise<void>;
11
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAY7C,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAE/D;AAED,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAE/D;AAqBD,wBAAsB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC;IACtE,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,CAAC,CAMD;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAS3B;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,OAAO,CAAC,CASlB;AAwBD,wBAAsB,oBAAoB,CACxC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,87 @@
1
+ import { readFile, writeFile, mkdir, rm, readdir } from "fs/promises";
2
+ import { join, dirname } from "path";
3
+ import { existsSync } from "fs";
4
+ import { getPageRelativePath, normalizeUrl } from "./url.js";
5
+ import { ensureMdripDir } from "./settings.js";
6
+ const MDRIP_DIR = "mdrip";
7
+ const PAGES_DIR = "pages";
8
+ const SOURCES_FILE = "sources.json";
9
+ export function getMdripDir(cwd = process.cwd()) {
10
+ return join(cwd, MDRIP_DIR);
11
+ }
12
+ export function getPagesDir(cwd = process.cwd()) {
13
+ return join(getMdripDir(cwd), PAGES_DIR);
14
+ }
15
+ function getSourcesPath(cwd) {
16
+ return join(getMdripDir(cwd), SOURCES_FILE);
17
+ }
18
+ async function readSourcesData(cwd) {
19
+ const sourcesPath = getSourcesPath(cwd);
20
+ if (!existsSync(sourcesPath)) {
21
+ return null;
22
+ }
23
+ try {
24
+ const content = await readFile(sourcesPath, "utf-8");
25
+ return JSON.parse(content);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ export async function listSources(cwd = process.cwd()) {
32
+ const sources = await readSourcesData(cwd);
33
+ return {
34
+ pages: sources?.pages || [],
35
+ };
36
+ }
37
+ export async function getPageInfo(url, cwd = process.cwd()) {
38
+ const normalized = normalizeUrl(url);
39
+ const sources = await listSources(cwd);
40
+ return (sources.pages.find((page) => page.url === normalized || page.resolvedUrl === normalized) || null);
41
+ }
42
+ export async function savePageMarkdown(url, markdown, cwd = process.cwd()) {
43
+ await ensureMdripDir(cwd);
44
+ const relativePath = getPageRelativePath(url);
45
+ const fullPath = join(getMdripDir(cwd), relativePath);
46
+ const parentDir = dirname(fullPath);
47
+ if (!existsSync(parentDir)) {
48
+ await mkdir(parentDir, { recursive: true });
49
+ }
50
+ await writeFile(fullPath, markdown, "utf-8");
51
+ return relativePath;
52
+ }
53
+ export async function removeStoredPage(relativePath, cwd = process.cwd()) {
54
+ const fullPath = join(getMdripDir(cwd), relativePath);
55
+ if (!existsSync(fullPath)) {
56
+ return false;
57
+ }
58
+ await rm(fullPath, { force: true });
59
+ return true;
60
+ }
61
+ async function cleanupEmptyDirs(dir) {
62
+ try {
63
+ const entries = await readdir(dir, { withFileTypes: true });
64
+ for (const entry of entries) {
65
+ if (entry.isDirectory()) {
66
+ await cleanupEmptyDirs(join(dir, entry.name));
67
+ }
68
+ }
69
+ const remaining = await readdir(dir);
70
+ if (remaining.length === 0) {
71
+ await rm(dir, { recursive: true, force: true });
72
+ return true;
73
+ }
74
+ }
75
+ catch {
76
+ // Ignore cleanup errors.
77
+ }
78
+ return false;
79
+ }
80
+ export async function cleanupEmptyPageDirs(cwd = process.cwd()) {
81
+ const pagesDir = getPagesDir(cwd);
82
+ if (!existsSync(pagesDir)) {
83
+ return;
84
+ }
85
+ await cleanupEmptyDirs(pagesDir);
86
+ }
87
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function hasTsConfig(cwd?: string): boolean;
2
+ export declare function hasMdripExclude(cwd?: string): Promise<boolean>;
3
+ export declare function ensureTsconfigExclude(cwd?: string): Promise<boolean>;
4
+ //# sourceMappingURL=tsconfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig.d.ts","sourceRoot":"","sources":["../../src/lib/tsconfig.ts"],"names":[],"mappings":"AAWA,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAEhE;AAED,wBAAsB,eAAe,CACnC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,OAAO,CAAC,CAwBlB;AAED,wBAAsB,qBAAqB,CACzC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,OAAO,CAAC,CA0BlB"}