@jared-ye/markdown-tex 1.0.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,110 @@
1
+ "use strict";
2
+ /**
3
+ * AST normalization for round-trip comparison.
4
+ * - Merges adjacent text nodes in inline sequences
5
+ * - Trims whitespace in text nodes
6
+ * - Normalizes empty paragraphs/lists for consistent comparison
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.normalizeAST = normalizeAST;
10
+ function normalizeAST(ast) {
11
+ return {
12
+ type: 'document',
13
+ children: ast.children.map(normalizeBlock).filter((b) => b != null)
14
+ };
15
+ }
16
+ function normalizeBlock(node) {
17
+ if (node.type === 'document') {
18
+ return node;
19
+ }
20
+ if (node.type === 'heading') {
21
+ return {
22
+ type: 'heading',
23
+ level: node.level,
24
+ children: normalizeInlineSequence(node.children)
25
+ };
26
+ }
27
+ if (node.type === 'paragraph') {
28
+ const normalized = normalizeInlineSequence(node.children);
29
+ if (normalized.length === 0)
30
+ return null;
31
+ return { type: 'paragraph', children: normalized };
32
+ }
33
+ if (node.type === 'list') {
34
+ const items = node.items
35
+ .map((item) => ({
36
+ type: 'list_item',
37
+ children: item.children.map(normalizeBlock).filter((b) => b != null)
38
+ }))
39
+ .filter((item) => item.children.length > 0);
40
+ if (items.length === 0)
41
+ return null;
42
+ return { type: 'list', ordered: node.ordered, items };
43
+ }
44
+ if (node.type === 'list_item') {
45
+ const children = node.children.map(normalizeBlock).filter((b) => b != null);
46
+ if (children.length === 0)
47
+ return null;
48
+ return { type: 'list_item', children };
49
+ }
50
+ if (node.type === 'code_block') {
51
+ return {
52
+ type: 'code_block',
53
+ content: node.content.trimEnd(),
54
+ lang: node.lang?.trim() || undefined
55
+ };
56
+ }
57
+ if (node.type === 'math_block') {
58
+ return { type: 'math_block', content: node.content.trim() };
59
+ }
60
+ if (node.type === 'blockquote') {
61
+ const children = node.children.map(normalizeBlock).filter((b) => b != null);
62
+ if (children.length === 0)
63
+ return null;
64
+ return { type: 'blockquote', children };
65
+ }
66
+ if (node.type === 'thematic_break' || node.type === 'unknown') {
67
+ return node;
68
+ }
69
+ if (node.type === 'table') {
70
+ return {
71
+ type: 'table',
72
+ headerRow: node.headerRow.map((c) => c.trim()),
73
+ rows: node.rows.map((row) => row.map((c) => c.trim()))
74
+ };
75
+ }
76
+ return node;
77
+ }
78
+ function normalizeInlineSequence(nodes) {
79
+ const merged = [];
80
+ let textAcc = '';
81
+ const flushText = () => {
82
+ const trimmed = textAcc.trim();
83
+ if (trimmed.length > 0) {
84
+ merged.push({ type: 'text', value: trimmed });
85
+ }
86
+ textAcc = '';
87
+ };
88
+ for (const n of nodes) {
89
+ if (n.type === 'text') {
90
+ textAcc += n.value;
91
+ continue;
92
+ }
93
+ flushText();
94
+ if (n.type === 'strong' || n.type === 'emphasis' || n.type === 'link' || n.type === 'strikethrough') {
95
+ merged.push({
96
+ ...n,
97
+ children: normalizeInlineSequence(n.children)
98
+ });
99
+ }
100
+ else if (n.type === 'image') {
101
+ merged.push({ type: 'image', url: n.url });
102
+ }
103
+ else {
104
+ merged.push(n);
105
+ }
106
+ }
107
+ flushText();
108
+ return merged;
109
+ }
110
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/transform/normalize.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@jared-ye/markdown-tex",
3
+ "version": "1.0.0",
4
+ "description": "Markdown ⇄ LaTeX conversion library with unified AST",
5
+ "author": "JaredYe04",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/JaredYe04/markdown-tex.git"
9
+ },
10
+ "main": "dist/index.js",
11
+ "module": "dist/index.js",
12
+ "types": "dist/index.d.ts",
13
+ "files": [
14
+ "dist",
15
+ "README.md"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "test": "vitest run",
20
+ "lint": "eslint src tests --ext .ts"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "^20.10.0",
24
+ "typescript": "^5.3.0",
25
+ "vitest": "^1.0.0",
26
+ "eslint": "^8.0.0",
27
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
28
+ "@typescript-eslint/parser": "^6.0.0"
29
+ },
30
+ "engines": {
31
+ "node": ">=18"
32
+ }
33
+ }