@markitdownjs/xml 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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=xml-converter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-converter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/xml-converter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { XmlConverter } from '../xml-converter.js';
3
+ describe('XmlConverter', () => {
4
+ const converter = new XmlConverter();
5
+ it('should detect XML by MIME type', async () => {
6
+ expect(await converter.canConvert({ data: '', mimeType: 'application/xml' })).toBe(true);
7
+ expect(await converter.canConvert({ data: '', mimeType: 'text/xml' })).toBe(true);
8
+ });
9
+ it('should detect XML by extension', async () => {
10
+ expect(await converter.canConvert({ data: '', fileName: 'test.xml' })).toBe(true);
11
+ expect(await converter.canConvert({ data: '', fileName: 'feed.rss' })).toBe(true);
12
+ expect(await converter.canConvert({ data: '', fileName: 'feed.atom' })).toBe(true);
13
+ });
14
+ it('should detect XML by content', async () => {
15
+ expect(await converter.canConvert({ data: '<?xml version="1.0"?>\n<root/>' })).toBe(true);
16
+ expect(await converter.canConvert({ data: '<root><child/></root>' })).toBe(true);
17
+ });
18
+ it('should reject non-XML content', async () => {
19
+ expect(await converter.canConvert({ data: 'Hello world', fileName: 'test.txt' })).toBe(false);
20
+ });
21
+ it('should convert simple XML to markdown', async () => {
22
+ const result = await converter.convert({
23
+ data: '<root><name>Test</name></root>',
24
+ mimeType: 'application/xml',
25
+ });
26
+ expect(result.markdown).toBeDefined();
27
+ expect(result.ast).toBeDefined();
28
+ expect(result.ast.type).toBe('document');
29
+ });
30
+ it('should convert RSS feed to markdown with entries', async () => {
31
+ const rss = `<?xml version="1.0"?>
32
+ <rss version="2.0">
33
+ <channel>
34
+ <title>My Blog</title>
35
+ <item>
36
+ <title>First Post</title>
37
+ <link>https://example.com/1</link>
38
+ <description>This is the first post</description>
39
+ </item>
40
+ <item>
41
+ <title>Second Post</title>
42
+ <link>https://example.com/2</link>
43
+ <description>Another post</description>
44
+ </item>
45
+ </channel>
46
+ </rss>`;
47
+ const result = await converter.convert({ data: rss, mimeType: 'application/rss+xml' });
48
+ expect(result.markdown).toContain('My Blog');
49
+ expect(result.markdown).toContain('First Post');
50
+ expect(result.markdown).toContain('Second Post');
51
+ expect(result.markdown).toContain('https://example.com/1');
52
+ expect(result.headings.length).toBeGreaterThan(0);
53
+ });
54
+ it('should convert Atom feed', async () => {
55
+ const atom = `<?xml version="1.0"?>
56
+ <feed xmlns="http://www.w3.org/2005/Atom">
57
+ <title>Atom Feed</title>
58
+ <entry>
59
+ <title>Entry 1</title>
60
+ <link href="https://example.com/e1"/>
61
+ <summary>Summary of entry 1</summary>
62
+ </entry>
63
+ </feed>`;
64
+ const result = await converter.convert({ data: atom, mimeType: 'application/atom+xml' });
65
+ expect(result.markdown).toContain('Atom Feed');
66
+ expect(result.markdown).toContain('Entry 1');
67
+ });
68
+ it('should include XML source code block', async () => {
69
+ const result = await converter.convert({
70
+ data: '<root><child>value</child></root>',
71
+ mimeType: 'application/xml',
72
+ });
73
+ expect(result.markdown).toContain('```xml');
74
+ });
75
+ it('should throw on invalid XML', async () => {
76
+ await expect(converter.convert({ data: '<unclosed>', mimeType: 'application/xml' })).rejects.toThrow('XML parse error');
77
+ });
78
+ });
79
+ //# sourceMappingURL=xml-converter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-converter.test.js","sourceRoot":"","sources":["../../src/__tests__/xml-converter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { XmlConverter } from "./xml-converter.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { XmlConverter } from "./xml-converter.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Converter, ConversionInput, ConversionResult } from "@markitdownjs/shared";
2
+ export declare class XmlConverter implements Converter {
3
+ readonly id: "xml";
4
+ readonly supportedMimeTypes: string[];
5
+ readonly supportedExtensions: string[];
6
+ canConvert(input: ConversionInput): Promise<boolean>;
7
+ convert(input: ConversionInput): Promise<ConversionResult>;
8
+ private readString;
9
+ private getExtension;
10
+ private extractFeedTitle;
11
+ private extractFeedEntries;
12
+ private prettifyXml;
13
+ private renderMarkdown;
14
+ private renderNode;
15
+ private getTextContent;
16
+ }
17
+ //# sourceMappingURL=xml-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-converter.d.ts","sourceRoot":"","sources":["../src/xml-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EAGjB,MAAM,sBAAsB,CAAC;AAa9B,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,EAAE,EAAG,KAAK,CAAU;IAC7B,QAAQ,CAAC,kBAAkB,WAKzB;IACF,QAAQ,CAAC,mBAAmB,WAA6B;IAEnD,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAepD,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAkHlD,UAAU;IAUxB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,cAAc;CASvB"}
@@ -0,0 +1,233 @@
1
+ import { createNode, parseXML, serializeXML, } from "@markitdownjs/shared";
2
+ export class XmlConverter {
3
+ id = "xml";
4
+ supportedMimeTypes = [
5
+ "application/xml",
6
+ "text/xml",
7
+ "application/rss+xml",
8
+ "application/atom+xml",
9
+ ];
10
+ supportedExtensions = [".xml", ".rss", ".atom"];
11
+ async canConvert(input) {
12
+ if (input.mimeType) {
13
+ if (this.supportedMimeTypes.includes(input.mimeType))
14
+ return true;
15
+ }
16
+ if (input.fileName) {
17
+ const ext = this.getExtension(input.fileName);
18
+ if (this.supportedExtensions.includes(ext))
19
+ return true;
20
+ }
21
+ if (typeof input.data === "string") {
22
+ const trimmed = input.data.trimStart();
23
+ if (trimmed.startsWith("<?xml") || trimmed.startsWith("<"))
24
+ return true;
25
+ }
26
+ return false;
27
+ }
28
+ async convert(input) {
29
+ const startTime = performance.now();
30
+ const text = await this.readString(input);
31
+ const inputSize = new TextEncoder().encode(text).byteLength;
32
+ const document = await parseXML(text);
33
+ const parseError = document.querySelector("parsererror");
34
+ if (parseError) {
35
+ throw new Error(`XML parse error: ${parseError.textContent ?? "unknown error"}`);
36
+ }
37
+ const children = [];
38
+ const rootTag = document.documentElement?.tagName.toLowerCase() ?? "";
39
+ const isFeed = rootTag === "rss" || rootTag === "feed" || rootTag === "rdf";
40
+ if (isFeed) {
41
+ children.push(createNode({
42
+ type: "heading",
43
+ level: 2,
44
+ children: [createNode({ type: "text", value: this.extractFeedTitle(document, rootTag) })],
45
+ }));
46
+ const entries = this.extractFeedEntries(document, rootTag);
47
+ for (const entry of entries) {
48
+ children.push(createNode({
49
+ type: "heading",
50
+ level: 3,
51
+ children: [createNode({ type: "text", value: entry.title })],
52
+ }));
53
+ if (entry.link) {
54
+ children.push(createNode({
55
+ type: "paragraph",
56
+ children: [
57
+ createNode({ type: "text", value: `Link: ${entry.link}` }),
58
+ ],
59
+ }));
60
+ }
61
+ if (entry.description) {
62
+ children.push(createNode({
63
+ type: "paragraph",
64
+ children: [
65
+ createNode({ type: "text", value: entry.description }),
66
+ ],
67
+ }));
68
+ }
69
+ }
70
+ }
71
+ const serialized = serializeXML(document);
72
+ const prettyXml = this.prettifyXml(serialized);
73
+ children.push(createNode({
74
+ type: "heading",
75
+ level: 2,
76
+ children: [createNode({ type: "text", value: "XML Source" })],
77
+ }));
78
+ children.push(createNode({
79
+ type: "code",
80
+ language: "xml",
81
+ value: prettyXml,
82
+ }));
83
+ const documentNode = createNode({
84
+ type: "document",
85
+ children,
86
+ });
87
+ const markdown = this.renderMarkdown(children);
88
+ const endTime = performance.now();
89
+ const stats = {
90
+ startTime,
91
+ endTime,
92
+ duration: endTime - startTime,
93
+ inputSize,
94
+ outputSize: new TextEncoder().encode(markdown).byteLength,
95
+ };
96
+ const metadata = {
97
+ wordCount: markdown.split(/\s+/).filter(Boolean).length,
98
+ };
99
+ return {
100
+ markdown,
101
+ metadata,
102
+ assets: [],
103
+ tables: [],
104
+ images: [],
105
+ headings: children
106
+ .filter((n) => n.type === "heading")
107
+ .map((h) => ({
108
+ level: h.level,
109
+ text: this.getTextContent(h.children),
110
+ })),
111
+ ast: documentNode,
112
+ format: "markdown",
113
+ converterId: this.id,
114
+ stats,
115
+ };
116
+ }
117
+ async readString(input) {
118
+ if (typeof input.data === "string")
119
+ return input.data;
120
+ const bytes = input.data instanceof Uint8Array
121
+ ? input.data
122
+ : input.data instanceof ArrayBuffer
123
+ ? new Uint8Array(input.data)
124
+ : new Uint8Array(await input.data.arrayBuffer());
125
+ return new TextDecoder().decode(bytes);
126
+ }
127
+ getExtension(fileName) {
128
+ const idx = fileName.lastIndexOf(".");
129
+ return idx === -1 ? "" : fileName.slice(idx).toLowerCase();
130
+ }
131
+ extractFeedTitle(doc, rootTag) {
132
+ if (rootTag === "rss") {
133
+ return doc.querySelector("channel > title")?.textContent ?? "RSS Feed";
134
+ }
135
+ if (rootTag === "feed") {
136
+ return doc.querySelector("feed > title")?.textContent ?? "Atom Feed";
137
+ }
138
+ return doc.documentElement?.getAttribute("rdf:about") ?? "XML Feed";
139
+ }
140
+ extractFeedEntries(doc, rootTag) {
141
+ const entries = [];
142
+ if (rootTag === "rss") {
143
+ const items = doc.querySelectorAll("item");
144
+ for (const item of Array.from(items)) {
145
+ entries.push({
146
+ title: item.querySelector("title")?.textContent ?? "Untitled",
147
+ link: item.querySelector("link")?.textContent ?? "",
148
+ description: item.querySelector("description")?.textContent ?? "",
149
+ });
150
+ }
151
+ }
152
+ else if (rootTag === "feed") {
153
+ const entries_els = doc.querySelectorAll("entry");
154
+ for (const entry of Array.from(entries_els)) {
155
+ const linkEl = entry.querySelector("link");
156
+ entries.push({
157
+ title: entry.querySelector("title")?.textContent ?? "Untitled",
158
+ link: linkEl?.getAttribute("href") ?? linkEl?.textContent ?? "",
159
+ description: entry.querySelector("summary, content")?.textContent ?? "",
160
+ });
161
+ }
162
+ }
163
+ else if (rootTag === "rdf") {
164
+ const items = doc.querySelectorAll("item");
165
+ for (const item of Array.from(items)) {
166
+ entries.push({
167
+ title: item.querySelector("title")?.textContent ?? "Untitled",
168
+ link: item.querySelector("link")?.textContent ?? "",
169
+ description: item.querySelector("description")?.textContent ?? "",
170
+ });
171
+ }
172
+ }
173
+ return entries;
174
+ }
175
+ prettifyXml(xml) {
176
+ let formatted = "";
177
+ let indent = 0;
178
+ const parts = xml.replace(/(>)(<)(\/*)/g, "$1\n$2$3").split("\n");
179
+ for (const part of parts) {
180
+ const trimmed = part.trim();
181
+ if (!trimmed)
182
+ continue;
183
+ if (trimmed.startsWith("</")) {
184
+ indent = Math.max(0, indent - 1);
185
+ }
186
+ formatted += " ".repeat(indent) + trimmed + "\n";
187
+ if (trimmed.startsWith("<") &&
188
+ !trimmed.startsWith("</") &&
189
+ !trimmed.startsWith("<?") &&
190
+ !trimmed.endsWith("/>") &&
191
+ !/<[^/][^>]*>/.test(trimmed)) {
192
+ indent++;
193
+ }
194
+ }
195
+ return formatted.trim();
196
+ }
197
+ renderMarkdown(nodes) {
198
+ return nodes.map((n) => this.renderNode(n)).join("\n\n").replace(/\n{3,}/g, "\n\n").trim();
199
+ }
200
+ renderNode(node) {
201
+ switch (node.type) {
202
+ case "heading": {
203
+ const n = node;
204
+ return "#".repeat(n.level) + " " + this.getTextContent(n.children);
205
+ }
206
+ case "paragraph": {
207
+ const n = node;
208
+ return this.getTextContent(n.children);
209
+ }
210
+ case "code": {
211
+ const n = node;
212
+ return "```" + (n.language ?? "") + "\n" + n.value + "\n```";
213
+ }
214
+ case "text": {
215
+ return node.value;
216
+ }
217
+ default:
218
+ return "";
219
+ }
220
+ }
221
+ getTextContent(nodes) {
222
+ return nodes
223
+ .map((n) => {
224
+ if (n.type === "text")
225
+ return n.value;
226
+ if ("children" in n && n.children)
227
+ return this.getTextContent(n.children);
228
+ return "";
229
+ })
230
+ .join("");
231
+ }
232
+ }
233
+ //# sourceMappingURL=xml-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-converter.js","sourceRoot":"","sources":["../src/xml-converter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@markitdownjs/xml",
3
+ "version": "0.1.0",
4
+ "description": "XML converter for MarkItDownJS",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "dependencies": {
20
+ "@markitdownjs/shared": "0.1.0"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.5.0"
24
+ },
25
+ "scripts": {
26
+ "build": "tsc --project tsconfig.json",
27
+ "dev": "tsc --watch --project tsconfig.json",
28
+ "typecheck": "tsc --noEmit",
29
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
30
+ }
31
+ }