react-native-nitro-markdown 0.1.2 → 0.3.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 (238) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +293 -119
  3. package/android/src/main/cpp/cpp-adapter.cpp +1 -1
  4. package/android/src/main/java/com/margelo/nitro/com/nitromarkdown/HybridMarkdownSession.kt +61 -0
  5. package/android/src/main/java/com/nitromarkdown/NitroMarkdownPackage.kt +5 -1
  6. package/cpp/bindings/HybridMarkdownParser.cpp +2 -2
  7. package/cpp/bindings/HybridMarkdownParser.hpp +2 -2
  8. package/cpp/bindings/HybridMarkdownSession.cpp +0 -0
  9. package/cpp/core/MarkdownSessionCore.cpp +0 -0
  10. package/ios/HybridMarkdownSession.swift +64 -0
  11. package/lib/commonjs/MarkdownContext.js +17 -0
  12. package/lib/commonjs/MarkdownContext.js.map +1 -0
  13. package/lib/commonjs/MarkdownSession.js +11 -0
  14. package/lib/commonjs/MarkdownSession.js.map +1 -0
  15. package/lib/commonjs/default-markdown-renderer.js +217 -0
  16. package/lib/commonjs/default-markdown-renderer.js.map +1 -0
  17. package/lib/commonjs/headless.js +61 -0
  18. package/lib/commonjs/headless.js.map +1 -0
  19. package/lib/commonjs/index.js +220 -13
  20. package/lib/commonjs/index.js.map +1 -1
  21. package/lib/commonjs/markdown-stream.js +32 -0
  22. package/lib/commonjs/markdown-stream.js.map +1 -0
  23. package/lib/commonjs/markdown.js +377 -0
  24. package/lib/commonjs/markdown.js.map +1 -0
  25. package/lib/commonjs/package.json +1 -0
  26. package/lib/commonjs/renderers/blockquote.js +36 -0
  27. package/lib/commonjs/renderers/blockquote.js.map +1 -0
  28. package/lib/commonjs/renderers/code.js +99 -0
  29. package/lib/commonjs/renderers/code.js.map +1 -0
  30. package/lib/commonjs/renderers/heading.js +63 -0
  31. package/lib/commonjs/renderers/heading.js.map +1 -0
  32. package/lib/commonjs/renderers/horizontal-rule.js +29 -0
  33. package/lib/commonjs/renderers/horizontal-rule.js.map +1 -0
  34. package/lib/commonjs/renderers/image.js +163 -0
  35. package/lib/commonjs/renderers/image.js.map +1 -0
  36. package/lib/commonjs/renderers/link.js +35 -0
  37. package/lib/commonjs/renderers/link.js.map +1 -0
  38. package/lib/commonjs/renderers/list.js +118 -0
  39. package/lib/commonjs/renderers/list.js.map +1 -0
  40. package/lib/commonjs/renderers/math.js +127 -0
  41. package/lib/commonjs/renderers/math.js.map +1 -0
  42. package/lib/commonjs/renderers/paragraph.js +39 -0
  43. package/lib/commonjs/renderers/paragraph.js.map +1 -0
  44. package/lib/commonjs/renderers/table.js +290 -0
  45. package/lib/commonjs/renderers/table.js.map +1 -0
  46. package/lib/commonjs/specs/MarkdownSession.nitro.js +6 -0
  47. package/lib/commonjs/specs/MarkdownSession.nitro.js.map +1 -0
  48. package/lib/commonjs/theme.js +191 -0
  49. package/lib/commonjs/theme.js.map +1 -0
  50. package/lib/commonjs/use-markdown-stream.js +71 -0
  51. package/lib/commonjs/use-markdown-stream.js.map +1 -0
  52. package/lib/module/MarkdownContext.js +12 -0
  53. package/lib/module/MarkdownContext.js.map +1 -0
  54. package/lib/module/MarkdownSession.js +7 -0
  55. package/lib/module/MarkdownSession.js.map +1 -0
  56. package/lib/module/default-markdown-renderer.js +212 -0
  57. package/lib/module/default-markdown-renderer.js.map +1 -0
  58. package/lib/module/headless.js +54 -0
  59. package/lib/module/headless.js.map +1 -0
  60. package/lib/module/index.js +18 -10
  61. package/lib/module/index.js.map +1 -1
  62. package/lib/module/markdown-stream.js +27 -0
  63. package/lib/module/markdown-stream.js.map +1 -0
  64. package/lib/module/markdown.js +372 -0
  65. package/lib/module/markdown.js.map +1 -0
  66. package/lib/module/package.json +1 -0
  67. package/lib/module/renderers/blockquote.js +31 -0
  68. package/lib/module/renderers/blockquote.js.map +1 -0
  69. package/lib/module/renderers/code.js +93 -0
  70. package/lib/module/renderers/code.js.map +1 -0
  71. package/lib/module/renderers/heading.js +58 -0
  72. package/lib/module/renderers/heading.js.map +1 -0
  73. package/lib/module/renderers/horizontal-rule.js +24 -0
  74. package/lib/module/renderers/horizontal-rule.js.map +1 -0
  75. package/lib/module/renderers/image.js +158 -0
  76. package/lib/module/renderers/image.js.map +1 -0
  77. package/lib/module/renderers/link.js +30 -0
  78. package/lib/module/renderers/link.js.map +1 -0
  79. package/lib/module/renderers/list.js +111 -0
  80. package/lib/module/renderers/list.js.map +1 -0
  81. package/lib/module/renderers/math.js +121 -0
  82. package/lib/module/renderers/math.js.map +1 -0
  83. package/lib/module/renderers/paragraph.js +34 -0
  84. package/lib/module/renderers/paragraph.js.map +1 -0
  85. package/lib/module/renderers/table.js +285 -0
  86. package/lib/module/renderers/table.js.map +1 -0
  87. package/lib/module/specs/MarkdownSession.nitro.js +4 -0
  88. package/lib/module/specs/MarkdownSession.nitro.js.map +1 -0
  89. package/lib/module/theme.js +186 -0
  90. package/lib/module/theme.js.map +1 -0
  91. package/lib/module/use-markdown-stream.js +66 -0
  92. package/lib/module/use-markdown-stream.js.map +1 -0
  93. package/lib/typescript/commonjs/Markdown.nitro.d.ts.map +1 -0
  94. package/lib/typescript/commonjs/MarkdownContext.d.ts +65 -0
  95. package/lib/typescript/commonjs/MarkdownContext.d.ts.map +1 -0
  96. package/lib/typescript/commonjs/MarkdownSession.d.ts +4 -0
  97. package/lib/typescript/commonjs/MarkdownSession.d.ts.map +1 -0
  98. package/lib/typescript/commonjs/default-markdown-renderer.d.ts +10 -0
  99. package/lib/typescript/commonjs/default-markdown-renderer.d.ts.map +1 -0
  100. package/lib/typescript/commonjs/headless.d.ts +57 -0
  101. package/lib/typescript/commonjs/headless.d.ts.map +1 -0
  102. package/lib/typescript/commonjs/index.d.ts +22 -0
  103. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  104. package/lib/typescript/commonjs/markdown-stream.d.ts +15 -0
  105. package/lib/typescript/commonjs/markdown-stream.d.ts.map +1 -0
  106. package/lib/typescript/commonjs/markdown.d.ts +47 -0
  107. package/lib/typescript/commonjs/markdown.d.ts.map +1 -0
  108. package/lib/typescript/commonjs/package.json +1 -0
  109. package/lib/typescript/commonjs/renderers/blockquote.d.ts +9 -0
  110. package/lib/typescript/commonjs/renderers/blockquote.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/renderers/code.d.ts +19 -0
  112. package/lib/typescript/commonjs/renderers/code.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/renderers/heading.d.ts +10 -0
  114. package/lib/typescript/commonjs/renderers/heading.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/renderers/horizontal-rule.d.ts +8 -0
  116. package/lib/typescript/commonjs/renderers/horizontal-rule.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/renderers/image.d.ts +13 -0
  118. package/lib/typescript/commonjs/renderers/image.d.ts.map +1 -0
  119. package/lib/typescript/commonjs/renderers/link.d.ts +10 -0
  120. package/lib/typescript/commonjs/renderers/link.d.ts.map +1 -0
  121. package/lib/typescript/commonjs/renderers/list.d.ts +26 -0
  122. package/lib/typescript/commonjs/renderers/list.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/renderers/math.d.ts +14 -0
  124. package/lib/typescript/commonjs/renderers/math.d.ts.map +1 -0
  125. package/lib/typescript/commonjs/renderers/paragraph.d.ts +10 -0
  126. package/lib/typescript/commonjs/renderers/paragraph.d.ts.map +1 -0
  127. package/lib/typescript/commonjs/renderers/table.d.ts +12 -0
  128. package/lib/typescript/commonjs/renderers/table.d.ts.map +1 -0
  129. package/lib/typescript/commonjs/specs/MarkdownSession.nitro.d.ts +12 -0
  130. package/lib/typescript/commonjs/specs/MarkdownSession.nitro.d.ts.map +1 -0
  131. package/lib/typescript/commonjs/theme.d.ts +65 -0
  132. package/lib/typescript/commonjs/theme.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/use-markdown-stream.d.ts +22 -0
  134. package/lib/typescript/commonjs/use-markdown-stream.d.ts.map +1 -0
  135. package/lib/typescript/module/Markdown.nitro.d.ts +13 -0
  136. package/lib/typescript/module/Markdown.nitro.d.ts.map +1 -0
  137. package/lib/typescript/module/MarkdownContext.d.ts +65 -0
  138. package/lib/typescript/module/MarkdownContext.d.ts.map +1 -0
  139. package/lib/typescript/module/MarkdownSession.d.ts +4 -0
  140. package/lib/typescript/module/MarkdownSession.d.ts.map +1 -0
  141. package/lib/typescript/module/default-markdown-renderer.d.ts +10 -0
  142. package/lib/typescript/module/default-markdown-renderer.d.ts.map +1 -0
  143. package/lib/typescript/module/headless.d.ts +57 -0
  144. package/lib/typescript/module/headless.d.ts.map +1 -0
  145. package/lib/typescript/module/index.d.ts +22 -0
  146. package/lib/typescript/module/index.d.ts.map +1 -0
  147. package/lib/typescript/module/markdown-stream.d.ts +15 -0
  148. package/lib/typescript/module/markdown-stream.d.ts.map +1 -0
  149. package/lib/typescript/module/markdown.d.ts +47 -0
  150. package/lib/typescript/module/markdown.d.ts.map +1 -0
  151. package/lib/typescript/module/package.json +1 -0
  152. package/lib/typescript/module/renderers/blockquote.d.ts +9 -0
  153. package/lib/typescript/module/renderers/blockquote.d.ts.map +1 -0
  154. package/lib/typescript/module/renderers/code.d.ts +19 -0
  155. package/lib/typescript/module/renderers/code.d.ts.map +1 -0
  156. package/lib/typescript/module/renderers/heading.d.ts +10 -0
  157. package/lib/typescript/module/renderers/heading.d.ts.map +1 -0
  158. package/lib/typescript/module/renderers/horizontal-rule.d.ts +8 -0
  159. package/lib/typescript/module/renderers/horizontal-rule.d.ts.map +1 -0
  160. package/lib/typescript/module/renderers/image.d.ts +13 -0
  161. package/lib/typescript/module/renderers/image.d.ts.map +1 -0
  162. package/lib/typescript/module/renderers/link.d.ts +10 -0
  163. package/lib/typescript/module/renderers/link.d.ts.map +1 -0
  164. package/lib/typescript/module/renderers/list.d.ts +26 -0
  165. package/lib/typescript/module/renderers/list.d.ts.map +1 -0
  166. package/lib/typescript/module/renderers/math.d.ts +14 -0
  167. package/lib/typescript/module/renderers/math.d.ts.map +1 -0
  168. package/lib/typescript/module/renderers/paragraph.d.ts +10 -0
  169. package/lib/typescript/module/renderers/paragraph.d.ts.map +1 -0
  170. package/lib/typescript/module/renderers/table.d.ts +12 -0
  171. package/lib/typescript/module/renderers/table.d.ts.map +1 -0
  172. package/lib/typescript/module/specs/MarkdownSession.nitro.d.ts +12 -0
  173. package/lib/typescript/module/specs/MarkdownSession.nitro.d.ts.map +1 -0
  174. package/lib/typescript/module/theme.d.ts +65 -0
  175. package/lib/typescript/module/theme.d.ts.map +1 -0
  176. package/lib/typescript/module/use-markdown-stream.d.ts +22 -0
  177. package/lib/typescript/module/use-markdown-stream.d.ts.map +1 -0
  178. package/nitro.json +5 -2
  179. package/nitrogen/generated/android/NitroMarkdown+autolinking.cmake +3 -2
  180. package/nitrogen/generated/android/NitroMarkdown+autolinking.gradle +1 -1
  181. package/nitrogen/generated/android/NitroMarkdownOnLoad.cpp +17 -5
  182. package/nitrogen/generated/android/NitroMarkdownOnLoad.hpp +4 -4
  183. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  184. package/nitrogen/generated/android/c++/JHybridMarkdownSessionSpec.cpp +91 -0
  185. package/nitrogen/generated/android/c++/JHybridMarkdownSessionSpec.hpp +70 -0
  186. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/Func_void.kt +80 -0
  187. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/HybridMarkdownSessionSpec.kt +78 -0
  188. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/NitroMarkdownOnLoad.kt +1 -1
  189. package/nitrogen/generated/ios/NitroMarkdown+autolinking.rb +2 -2
  190. package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Bridge.cpp +28 -4
  191. package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Bridge.hpp +72 -6
  192. package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Umbrella.hpp +11 -4
  193. package/nitrogen/generated/ios/NitroMarkdownAutolinking.mm +11 -3
  194. package/nitrogen/generated/ios/NitroMarkdownAutolinking.swift +16 -3
  195. package/nitrogen/generated/ios/c++/HybridMarkdownSessionSpecSwift.cpp +11 -0
  196. package/nitrogen/generated/ios/c++/HybridMarkdownSessionSpecSwift.hpp +108 -0
  197. package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
  198. package/nitrogen/generated/ios/swift/HybridMarkdownSessionSpec.swift +59 -0
  199. package/nitrogen/generated/ios/swift/HybridMarkdownSessionSpec_cxx.swift +190 -0
  200. package/nitrogen/generated/shared/c++/HybridMarkdownParserSpec.cpp +3 -3
  201. package/nitrogen/generated/shared/c++/HybridMarkdownParserSpec.hpp +4 -4
  202. package/nitrogen/generated/shared/c++/HybridMarkdownSessionSpec.cpp +26 -0
  203. package/nitrogen/generated/shared/c++/HybridMarkdownSessionSpec.hpp +67 -0
  204. package/nitrogen/generated/shared/c++/ParserOptions.hpp +22 -14
  205. package/package.json +45 -7
  206. package/react-native-nitro-markdown.podspec +5 -5
  207. package/src/MarkdownContext.ts +98 -0
  208. package/src/MarkdownSession.ts +8 -0
  209. package/src/default-markdown-renderer.tsx +261 -0
  210. package/src/headless.ts +116 -0
  211. package/src/index.ts +47 -60
  212. package/src/markdown-stream.tsx +32 -0
  213. package/src/markdown.tsx +497 -0
  214. package/src/renderers/blockquote.tsx +30 -0
  215. package/src/renderers/code.tsx +112 -0
  216. package/src/renderers/heading.tsx +66 -0
  217. package/src/renderers/horizontal-rule.tsx +23 -0
  218. package/src/renderers/image.tsx +175 -0
  219. package/src/renderers/link.tsx +33 -0
  220. package/src/renderers/list.tsx +131 -0
  221. package/src/renderers/math.tsx +141 -0
  222. package/src/renderers/paragraph.tsx +47 -0
  223. package/src/renderers/table.tsx +370 -0
  224. package/src/specs/MarkdownSession.nitro.ts +16 -0
  225. package/src/theme.ts +243 -0
  226. package/src/use-markdown-stream.ts +83 -0
  227. package/ios/NitroMarkdown-Bridging-Header.h +0 -14
  228. package/lib/commonjs/MarkdownJS.reference.js +0 -114
  229. package/lib/commonjs/MarkdownJS.reference.js.map +0 -1
  230. package/lib/module/MarkdownJS.reference.js +0 -107
  231. package/lib/module/MarkdownJS.reference.js.map +0 -1
  232. package/lib/typescript/Markdown.nitro.d.ts.map +0 -1
  233. package/lib/typescript/MarkdownJS.reference.d.ts +0 -33
  234. package/lib/typescript/MarkdownJS.reference.d.ts.map +0 -1
  235. package/lib/typescript/index.d.ts +0 -22
  236. package/lib/typescript/index.d.ts.map +0 -1
  237. package/src/MarkdownJS.reference.ts +0 -122
  238. /package/lib/typescript/{Markdown.nitro.d.ts → commonjs/Markdown.nitro.d.ts} +0 -0
@@ -0,0 +1,83 @@
1
+ import { useRef, useCallback, useState, useEffect } from "react";
2
+ import { createMarkdownSession } from "./MarkdownSession";
3
+
4
+ export type MarkdownSession = ReturnType<typeof createMarkdownSession>;
5
+
6
+ export function useMarkdownSession() {
7
+ const sessionRef = useRef<MarkdownSession | null>(null);
8
+ if (sessionRef.current === null) {
9
+ sessionRef.current = createMarkdownSession();
10
+ }
11
+
12
+ const [isStreaming, setIsStreaming] = useState(false);
13
+
14
+ useEffect(() => {
15
+ const session = sessionRef.current!;
16
+ return () => {
17
+ session.clear();
18
+ };
19
+ }, []);
20
+
21
+ const stop = useCallback(() => {
22
+ setIsStreaming(false);
23
+ }, []);
24
+
25
+ const clear = useCallback(() => {
26
+ stop();
27
+ sessionRef.current!.clear();
28
+ sessionRef.current!.highlightPosition = 0;
29
+ }, [stop]);
30
+
31
+ const setHighlight = useCallback((position: number) => {
32
+ sessionRef.current!.highlightPosition = position;
33
+ }, []);
34
+
35
+ const getSession = useCallback(() => sessionRef.current!, []);
36
+
37
+ return {
38
+ getSession,
39
+ isStreaming,
40
+ setIsStreaming,
41
+ stop,
42
+ clear,
43
+ setHighlight,
44
+ };
45
+ }
46
+
47
+ export function useStream(timestamps?: Record<number, number>) {
48
+ const engine = useMarkdownSession();
49
+ const [isPlaying, setIsPlaying] = useState(false);
50
+
51
+ const sortedKeys = useRef<number[]>([]);
52
+ useEffect(() => {
53
+ if (timestamps) {
54
+ sortedKeys.current = Object.keys(timestamps)
55
+ .map(Number)
56
+ .sort((a, b) => a - b);
57
+ }
58
+ }, [timestamps]);
59
+
60
+ const sync = useCallback(
61
+ (currentTimeMs: number) => {
62
+ if (!timestamps) return;
63
+
64
+ let wordIdx = 0;
65
+ for (const idx of sortedKeys.current) {
66
+ if (currentTimeMs >= timestamps[idx]) {
67
+ wordIdx = idx + 1;
68
+ } else {
69
+ break;
70
+ }
71
+ }
72
+ engine.setHighlight(wordIdx);
73
+ },
74
+ [timestamps, engine]
75
+ );
76
+
77
+ return {
78
+ ...engine,
79
+ isPlaying,
80
+ setIsPlaying,
81
+ sync,
82
+ };
83
+ }
@@ -1,14 +0,0 @@
1
- //
2
- // NitroMarkdown-Bridging-Header.h
3
- // react-native-nitro-markdown
4
- //
5
- // Bridging header for Swift/ObjC interop (if needed)
6
- //
7
-
8
- #ifndef NitroMarkdown_Bridging_Header_h
9
- #define NitroMarkdown_Bridging_Header_h
10
-
11
- // Add any headers you want to expose to Swift here
12
-
13
- #endif /* NitroMarkdown_Bridging_Header_h */
14
-
@@ -1,114 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.JSMarkdownParser = exports.JSINitroMarkdownParser = exports.HybridMarkdownParser = void 0;
7
- // Pure JavaScript implementation using JSI
8
- class JSMarkdownParser {
9
- parseImpl(text, options) {
10
- // Simple regex-based parser for comparison
11
- // This is much slower than the C++ version but demonstrates JSI usage
12
- const root = {
13
- type: "document",
14
- children: []
15
- };
16
- const lines = text.split("\n");
17
- let i = 0;
18
- while (i < lines.length) {
19
- const line = lines[i].trim();
20
- if (!line) {
21
- i++;
22
- continue;
23
- }
24
-
25
- // Headers
26
- const headerMatch = line.match(/^(#{1,6})\s+(.+)$/);
27
- if (headerMatch) {
28
- root.children.push({
29
- type: "heading",
30
- level: headerMatch[1].length,
31
- children: [{
32
- type: "text",
33
- content: headerMatch[2]
34
- }]
35
- });
36
- i++;
37
- continue;
38
- }
39
-
40
- // Bold
41
- const boldMatch = line.match(/\*\*(.+?)\*\*/);
42
- if (boldMatch) {
43
- root.children.push({
44
- type: "paragraph",
45
- children: [{
46
- type: "bold",
47
- children: [{
48
- type: "text",
49
- content: boldMatch[1]
50
- }]
51
- }]
52
- });
53
- i++;
54
- continue;
55
- }
56
-
57
- // Default paragraph
58
- root.children.push({
59
- type: "paragraph",
60
- children: [{
61
- type: "text",
62
- content: line
63
- }]
64
- });
65
- i++;
66
- }
67
- return root;
68
- }
69
- parse(text, options = {
70
- gfm: true,
71
- math: true
72
- }) {
73
- return this.parseImpl(text, options);
74
- }
75
- }
76
-
77
- // JSI-enabled version using Nitro but with JS implementation
78
- exports.JSMarkdownParser = JSMarkdownParser;
79
- class JSINitroMarkdownParser {
80
- parse(text, options = {
81
- gfm: true,
82
- math: true
83
- }) {
84
- // This would use JSI to call into JavaScriptCore
85
- // For now, we'll simulate it
86
- const parser = new JSMarkdownParser();
87
- return parser.parse(text, options);
88
- }
89
- }
90
-
91
- // Hybrid approach: C++ for complex parsing, JS for simple cases
92
- exports.JSINitroMarkdownParser = JSINitroMarkdownParser;
93
- class HybridMarkdownParser {
94
- constructor() {
95
- // In real implementation, this would be the Nitro C++ parser
96
- this.cppParser = null;
97
- this.jsParser = new JSMarkdownParser();
98
- }
99
- parse(text, options = {
100
- gfm: true,
101
- math: true
102
- }) {
103
- // Use C++ parser for complex cases, JS for simple
104
- if (text.length > 1000 || options.gfm || options.math) {
105
- // Would call C++ parser via Nitro
106
- return this.jsParser.parse(text, options);
107
- } else {
108
- // Use JS parser for simple cases
109
- return this.jsParser.parse(text, options);
110
- }
111
- }
112
- }
113
- exports.HybridMarkdownParser = HybridMarkdownParser;
114
- //# sourceMappingURL=MarkdownJS.reference.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["JSMarkdownParser","parseImpl","text","options","root","type","children","lines","split","i","length","line","trim","headerMatch","match","push","level","content","boldMatch","parse","gfm","math","exports","JSINitroMarkdownParser","parser","HybridMarkdownParser","constructor","cppParser","jsParser"],"sourceRoot":"../../src","sources":["MarkdownJS.reference.ts"],"mappings":"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","ignoreList":[]}
@@ -1,107 +0,0 @@
1
- "use strict";
2
-
3
- // Pure JavaScript implementation using JSI
4
- export class JSMarkdownParser {
5
- parseImpl(text, options) {
6
- // Simple regex-based parser for comparison
7
- // This is much slower than the C++ version but demonstrates JSI usage
8
- const root = {
9
- type: "document",
10
- children: []
11
- };
12
- const lines = text.split("\n");
13
- let i = 0;
14
- while (i < lines.length) {
15
- const line = lines[i].trim();
16
- if (!line) {
17
- i++;
18
- continue;
19
- }
20
-
21
- // Headers
22
- const headerMatch = line.match(/^(#{1,6})\s+(.+)$/);
23
- if (headerMatch) {
24
- root.children.push({
25
- type: "heading",
26
- level: headerMatch[1].length,
27
- children: [{
28
- type: "text",
29
- content: headerMatch[2]
30
- }]
31
- });
32
- i++;
33
- continue;
34
- }
35
-
36
- // Bold
37
- const boldMatch = line.match(/\*\*(.+?)\*\*/);
38
- if (boldMatch) {
39
- root.children.push({
40
- type: "paragraph",
41
- children: [{
42
- type: "bold",
43
- children: [{
44
- type: "text",
45
- content: boldMatch[1]
46
- }]
47
- }]
48
- });
49
- i++;
50
- continue;
51
- }
52
-
53
- // Default paragraph
54
- root.children.push({
55
- type: "paragraph",
56
- children: [{
57
- type: "text",
58
- content: line
59
- }]
60
- });
61
- i++;
62
- }
63
- return root;
64
- }
65
- parse(text, options = {
66
- gfm: true,
67
- math: true
68
- }) {
69
- return this.parseImpl(text, options);
70
- }
71
- }
72
-
73
- // JSI-enabled version using Nitro but with JS implementation
74
- export class JSINitroMarkdownParser {
75
- parse(text, options = {
76
- gfm: true,
77
- math: true
78
- }) {
79
- // This would use JSI to call into JavaScriptCore
80
- // For now, we'll simulate it
81
- const parser = new JSMarkdownParser();
82
- return parser.parse(text, options);
83
- }
84
- }
85
-
86
- // Hybrid approach: C++ for complex parsing, JS for simple cases
87
- export class HybridMarkdownParser {
88
- constructor() {
89
- // In real implementation, this would be the Nitro C++ parser
90
- this.cppParser = null;
91
- this.jsParser = new JSMarkdownParser();
92
- }
93
- parse(text, options = {
94
- gfm: true,
95
- math: true
96
- }) {
97
- // Use C++ parser for complex cases, JS for simple
98
- if (text.length > 1000 || options.gfm || options.math) {
99
- // Would call C++ parser via Nitro
100
- return this.jsParser.parse(text, options);
101
- } else {
102
- // Use JS parser for simple cases
103
- return this.jsParser.parse(text, options);
104
- }
105
- }
106
- }
107
- //# sourceMappingURL=MarkdownJS.reference.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["JSMarkdownParser","parseImpl","text","options","root","type","children","lines","split","i","length","line","trim","headerMatch","match","push","level","content","boldMatch","parse","gfm","math","JSINitroMarkdownParser","parser","HybridMarkdownParser","constructor","cppParser","jsParser"],"sourceRoot":"../../src","sources":["MarkdownJS.reference.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Markdown.nitro.d.ts","sourceRoot":"","sources":["../../src/Markdown.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IACpD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC;CAChE"}
@@ -1,33 +0,0 @@
1
- export interface MarkdownNode {
2
- type: string;
3
- content?: string;
4
- level?: number;
5
- href?: string;
6
- title?: string;
7
- alt?: string;
8
- language?: string;
9
- ordered?: boolean;
10
- start?: number;
11
- checked?: boolean;
12
- isHeader?: boolean;
13
- align?: string;
14
- children?: MarkdownNode[];
15
- }
16
- export interface ParserOptions {
17
- gfm?: boolean;
18
- math?: boolean;
19
- }
20
- export declare class JSMarkdownParser {
21
- private parseImpl;
22
- parse(text: string, options?: ParserOptions): MarkdownNode;
23
- }
24
- export declare class JSINitroMarkdownParser {
25
- parse(text: string, options?: ParserOptions): MarkdownNode;
26
- }
27
- export declare class HybridMarkdownParser {
28
- private cppParser;
29
- private jsParser;
30
- constructor();
31
- parse(text: string, options?: ParserOptions): MarkdownNode;
32
- }
33
- //# sourceMappingURL=MarkdownJS.reference.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarkdownJS.reference.d.ts","sourceRoot":"","sources":["../../src/MarkdownJS.reference.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAGD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS;IAqDjB,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAyC,GACjD,YAAY;CAGhB;AAGD,qBAAa,sBAAsB;IACjC,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAyC,GACjD,YAAY;CAMhB;AAGD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAmB;;IAQnC,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAyC,GACjD,YAAY;CAUhB"}
@@ -1,22 +0,0 @@
1
- import type { MarkdownParser, ParserOptions } from './Markdown.nitro';
2
- export type { ParserOptions } from './Markdown.nitro';
3
- export interface MarkdownNode {
4
- type: 'document' | 'heading' | 'paragraph' | 'text' | 'bold' | 'italic' | 'strikethrough' | 'link' | 'image' | 'code_inline' | 'code_block' | 'blockquote' | 'horizontal_rule' | 'line_break' | 'soft_break' | 'table' | 'table_head' | 'table_body' | 'table_row' | 'table_cell' | 'list' | 'list_item' | 'task_list_item' | 'math_inline' | 'math_block' | 'html_block' | 'html_inline';
5
- content?: string;
6
- level?: number;
7
- href?: string;
8
- title?: string;
9
- alt?: string;
10
- language?: string;
11
- ordered?: boolean;
12
- start?: number;
13
- checked?: boolean;
14
- isHeader?: boolean;
15
- align?: string;
16
- children?: MarkdownNode[];
17
- }
18
- export declare const MarkdownParserModule: MarkdownParser;
19
- export declare function parseMarkdown(text: string): MarkdownNode;
20
- export declare function parseMarkdownWithOptions(text: string, options: ParserOptions): MarkdownNode;
21
- export { MarkdownParser };
22
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EACA,UAAU,GACV,SAAS,GACT,WAAW,GACX,MAAM,GACN,MAAM,GACN,QAAQ,GACR,eAAe,GACf,MAAM,GACN,OAAO,GACP,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,iBAAiB,GACjB,YAAY,GACZ,YAAY,GACZ,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,MAAM,GACN,WAAW,GACX,gBAAgB,GAChB,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,aAAa,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,oBAAoB,gBACkC,CAAC;AAEpE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAGxD;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GACrB,YAAY,CAGd;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1,122 +0,0 @@
1
- export interface MarkdownNode {
2
- type: string;
3
- content?: string;
4
- level?: number;
5
- href?: string;
6
- title?: string;
7
- alt?: string;
8
- language?: string;
9
- ordered?: boolean;
10
- start?: number;
11
- checked?: boolean;
12
- isHeader?: boolean;
13
- align?: string;
14
- children?: MarkdownNode[];
15
- }
16
-
17
- export interface ParserOptions {
18
- gfm?: boolean;
19
- math?: boolean;
20
- }
21
-
22
- // Pure JavaScript implementation using JSI
23
- export class JSMarkdownParser {
24
- private parseImpl(text: string, options: ParserOptions): MarkdownNode {
25
- // Simple regex-based parser for comparison
26
- // This is much slower than the C++ version but demonstrates JSI usage
27
- const root: MarkdownNode = { type: "document", children: [] };
28
- const lines = text.split("\n");
29
- let i = 0;
30
-
31
- while (i < lines.length) {
32
- const line = lines[i].trim();
33
- if (!line) {
34
- i++;
35
- continue;
36
- }
37
-
38
- // Headers
39
- const headerMatch = line.match(/^(#{1,6})\s+(.+)$/);
40
- if (headerMatch) {
41
- root.children!.push({
42
- type: "heading",
43
- level: headerMatch[1].length,
44
- children: [{ type: "text", content: headerMatch[2] }],
45
- });
46
- i++;
47
- continue;
48
- }
49
-
50
- // Bold
51
- const boldMatch = line.match(/\*\*(.+?)\*\*/);
52
- if (boldMatch) {
53
- root.children!.push({
54
- type: "paragraph",
55
- children: [
56
- {
57
- type: "bold",
58
- children: [{ type: "text", content: boldMatch[1] }],
59
- },
60
- ],
61
- });
62
- i++;
63
- continue;
64
- }
65
-
66
- // Default paragraph
67
- root.children!.push({
68
- type: "paragraph",
69
- children: [{ type: "text", content: line }],
70
- });
71
- i++;
72
- }
73
-
74
- return root;
75
- }
76
-
77
- parse(
78
- text: string,
79
- options: ParserOptions = { gfm: true, math: true }
80
- ): MarkdownNode {
81
- return this.parseImpl(text, options);
82
- }
83
- }
84
-
85
- // JSI-enabled version using Nitro but with JS implementation
86
- export class JSINitroMarkdownParser {
87
- parse(
88
- text: string,
89
- options: ParserOptions = { gfm: true, math: true }
90
- ): MarkdownNode {
91
- // This would use JSI to call into JavaScriptCore
92
- // For now, we'll simulate it
93
- const parser = new JSMarkdownParser();
94
- return parser.parse(text, options);
95
- }
96
- }
97
-
98
- // Hybrid approach: C++ for complex parsing, JS for simple cases
99
- export class HybridMarkdownParser {
100
- private cppParser: any;
101
- private jsParser: JSMarkdownParser;
102
-
103
- constructor() {
104
- // In real implementation, this would be the Nitro C++ parser
105
- this.cppParser = null;
106
- this.jsParser = new JSMarkdownParser();
107
- }
108
-
109
- parse(
110
- text: string,
111
- options: ParserOptions = { gfm: true, math: true }
112
- ): MarkdownNode {
113
- // Use C++ parser for complex cases, JS for simple
114
- if (text.length > 1000 || options.gfm || options.math) {
115
- // Would call C++ parser via Nitro
116
- return this.jsParser.parse(text, options);
117
- } else {
118
- // Use JS parser for simple cases
119
- return this.jsParser.parse(text, options);
120
- }
121
- }
122
- }