omni-viewer-core 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 (387) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/THIRD_PARTY_NOTICES.md +49 -0
  4. package/dist/assets/audio-engine/audio_engine.mjs +2 -0
  5. package/dist/assets/audio-engine/audio_engine.wasm +0 -0
  6. package/dist/assets/pdfjs/pdf.worker.min.mjs +21 -0
  7. package/dist/host/index.d.ts +133 -0
  8. package/dist/host/index.js +10 -0
  9. package/dist/i18n/catalog.en.d.ts +1 -0
  10. package/dist/i18n/catalog.en.js +411 -0
  11. package/dist/i18n/catalog.ko.d.ts +1 -0
  12. package/dist/i18n/catalog.ko.js +68 -0
  13. package/dist/i18n/index.d.ts +18 -0
  14. package/dist/i18n/index.js +41 -0
  15. package/dist/licenses/emscripten.txt +101 -0
  16. package/dist/licenses/kissfft.txt +28 -0
  17. package/dist/licenses/pdfjs-dist.txt +177 -0
  18. package/dist/parsers/a2l/index.d.ts +1 -0
  19. package/dist/parsers/a2l/index.js +1 -0
  20. package/dist/parsers/archive/index.d.ts +22 -0
  21. package/dist/parsers/archive/index.js +46 -0
  22. package/dist/parsers/archive/model.d.ts +29 -0
  23. package/dist/parsers/archive/model.js +1 -0
  24. package/dist/parsers/archive/worker.d.ts +21 -0
  25. package/dist/parsers/archive/worker.js +1 -0
  26. package/dist/parsers/arxml/index.d.ts +1 -0
  27. package/dist/parsers/arxml/index.js +1 -0
  28. package/dist/parsers/asc/index.d.ts +1 -0
  29. package/dist/parsers/asc/index.js +1 -0
  30. package/dist/parsers/audio/index.d.ts +9 -0
  31. package/dist/parsers/audio/index.js +46 -0
  32. package/dist/parsers/automotive/index.d.ts +33 -0
  33. package/dist/parsers/automotive/index.js +973 -0
  34. package/dist/parsers/blf/index.d.ts +1 -0
  35. package/dist/parsers/blf/index.js +1 -0
  36. package/dist/parsers/csv/delimiter.d.ts +31 -0
  37. package/dist/parsers/csv/delimiter.js +151 -0
  38. package/dist/parsers/csv/index.d.ts +30 -0
  39. package/dist/parsers/csv/index.js +108 -0
  40. package/dist/parsers/csv/parseText.d.ts +20 -0
  41. package/dist/parsers/csv/parseText.js +108 -0
  42. package/dist/parsers/csv/sort.d.ts +26 -0
  43. package/dist/parsers/csv/sort.js +224 -0
  44. package/dist/parsers/csv/statistics.d.ts +49 -0
  45. package/dist/parsers/csv/statistics.js +150 -0
  46. package/dist/parsers/dbc/index.d.ts +56 -0
  47. package/dist/parsers/dbc/index.js +94 -0
  48. package/dist/parsers/doc-binary/index.d.ts +35 -0
  49. package/dist/parsers/doc-binary/index.js +267 -0
  50. package/dist/parsers/doc-binary/vscode-parser.d.ts +142 -0
  51. package/dist/parsers/doc-binary/vscode-parser.js +3747 -0
  52. package/dist/parsers/excel/index.d.ts +17 -0
  53. package/dist/parsers/excel/index.js +406 -0
  54. package/dist/parsers/excel/model.d.ts +80 -0
  55. package/dist/parsers/excel/model.js +48 -0
  56. package/dist/parsers/excel/serialize.d.ts +3 -0
  57. package/dist/parsers/excel/serialize.js +78 -0
  58. package/dist/parsers/hdf5/index.d.ts +75 -0
  59. package/dist/parsers/hdf5/index.js +658 -0
  60. package/dist/parsers/hdf5/node.d.ts +21 -0
  61. package/dist/parsers/hdf5/node.js +95 -0
  62. package/dist/parsers/json/index.d.ts +15 -0
  63. package/dist/parsers/json/index.js +102 -0
  64. package/dist/parsers/json/model.d.ts +42 -0
  65. package/dist/parsers/json/model.js +140 -0
  66. package/dist/parsers/json/parse.d.ts +22 -0
  67. package/dist/parsers/json/parse.js +279 -0
  68. package/dist/parsers/json/tokenizer.d.ts +17 -0
  69. package/dist/parsers/json/tokenizer.js +175 -0
  70. package/dist/parsers/jsonl/index.d.ts +14 -0
  71. package/dist/parsers/jsonl/index.js +18 -0
  72. package/dist/parsers/jsonl/model.d.ts +23 -0
  73. package/dist/parsers/jsonl/model.js +1 -0
  74. package/dist/parsers/jsonl/parse.d.ts +7 -0
  75. package/dist/parsers/jsonl/parse.js +34 -0
  76. package/dist/parsers/markdown/index.d.ts +37 -0
  77. package/dist/parsers/markdown/index.js +59 -0
  78. package/dist/parsers/mat/index.d.ts +31 -0
  79. package/dist/parsers/mat/index.js +426 -0
  80. package/dist/parsers/mermaid/index.d.ts +5 -0
  81. package/dist/parsers/mermaid/index.js +3 -0
  82. package/dist/parsers/mf4/index.d.ts +1 -0
  83. package/dist/parsers/mf4/index.js +1 -0
  84. package/dist/parsers/parquet/index.d.ts +21 -0
  85. package/dist/parsers/parquet/index.js +68 -0
  86. package/dist/parsers/pcap/index.d.ts +1 -0
  87. package/dist/parsers/pcap/index.js +1 -0
  88. package/dist/parsers/pcapng/index.d.ts +1 -0
  89. package/dist/parsers/pcapng/index.js +1 -0
  90. package/dist/parsers/plantuml/index.d.ts +5 -0
  91. package/dist/parsers/plantuml/index.js +4 -0
  92. package/dist/parsers/ppt-binary/index.d.ts +5 -0
  93. package/dist/parsers/ppt-binary/index.js +62 -0
  94. package/dist/parsers/ppt-binary/pptBinaryBuildContext.d.ts +12 -0
  95. package/dist/parsers/ppt-binary/pptBinaryBuildContext.js +40 -0
  96. package/dist/parsers/ppt-binary/pptBinaryContainer.d.ts +4 -0
  97. package/dist/parsers/ppt-binary/pptBinaryContainer.js +174 -0
  98. package/dist/parsers/ppt-binary/pptBinaryTypes.d.ts +125 -0
  99. package/dist/parsers/ppt-binary/pptBinaryTypes.js +1 -0
  100. package/dist/parsers/ppt-binary/pptSlideLayouts.d.ts +9 -0
  101. package/dist/parsers/ppt-binary/pptSlideLayouts.js +510 -0
  102. package/dist/parsers/ppt-binary/vscode-parser.d.ts +116 -0
  103. package/dist/parsers/ppt-binary/vscode-parser.js +2853 -0
  104. package/dist/parsers/ppt-binary/vscode.d.ts +4 -0
  105. package/dist/parsers/ppt-binary/vscode.js +12 -0
  106. package/dist/parsers/pptx/index.d.ts +15 -0
  107. package/dist/parsers/pptx/index.js +88 -0
  108. package/dist/parsers/pptx/vscode-parser.d.ts +167 -0
  109. package/dist/parsers/pptx/vscode-parser.js +1503 -0
  110. package/dist/parsers/pptx/vscode.d.ts +4 -0
  111. package/dist/parsers/pptx/vscode.js +18 -0
  112. package/dist/parsers/pptx/zip-reader.d.ts +3 -0
  113. package/dist/parsers/pptx/zip-reader.js +20 -0
  114. package/dist/parsers/proto/index.d.ts +90 -0
  115. package/dist/parsers/proto/index.js +197 -0
  116. package/dist/parsers/psd/index.d.ts +16 -0
  117. package/dist/parsers/psd/index.js +10 -0
  118. package/dist/parsers/shapefile/dbf.d.ts +23 -0
  119. package/dist/parsers/shapefile/dbf.js +112 -0
  120. package/dist/parsers/shapefile/index.d.ts +44 -0
  121. package/dist/parsers/shapefile/index.js +119 -0
  122. package/dist/parsers/shapefile/reproject.d.ts +10 -0
  123. package/dist/parsers/shapefile/reproject.js +41 -0
  124. package/dist/parsers/slide-model.d.ts +106 -0
  125. package/dist/parsers/slide-model.js +1 -0
  126. package/dist/parsers/toml/index.d.ts +15 -0
  127. package/dist/parsers/toml/index.js +18 -0
  128. package/dist/parsers/toml/model.d.ts +15 -0
  129. package/dist/parsers/toml/model.js +1 -0
  130. package/dist/parsers/toml/parse.d.ts +16 -0
  131. package/dist/parsers/toml/parse.js +266 -0
  132. package/dist/parsers/types.d.ts +103 -0
  133. package/dist/parsers/types.js +106 -0
  134. package/dist/parsers/video/index.d.ts +6 -0
  135. package/dist/parsers/video/index.js +2 -0
  136. package/dist/parsers/yaml/index.d.ts +16 -0
  137. package/dist/parsers/yaml/index.js +58 -0
  138. package/dist/parsers/yaml/model.d.ts +22 -0
  139. package/dist/parsers/yaml/model.js +1 -0
  140. package/dist/parsers/yaml/self-loading.d.ts +3 -0
  141. package/dist/parsers/yaml/self-loading.js +19 -0
  142. package/dist/parsers/zip-scan.d.ts +8 -0
  143. package/dist/parsers/zip-scan.js +80 -0
  144. package/dist/registry/container.d.ts +17 -0
  145. package/dist/registry/container.js +49 -0
  146. package/dist/registry/index.d.ts +133 -0
  147. package/dist/registry/index.js +348 -0
  148. package/dist/registry/probe.d.ts +3 -0
  149. package/dist/registry/probe.js +177 -0
  150. package/dist/registry/sniff.d.ts +17 -0
  151. package/dist/registry/sniff.js +57 -0
  152. package/dist/styles/archive.css +10 -0
  153. package/dist/styles/audio.css +66 -0
  154. package/dist/styles/automotive.css +1 -0
  155. package/dist/styles/csv.css +262 -0
  156. package/dist/styles/excel.css +212 -0
  157. package/dist/styles/fallback.css +48 -0
  158. package/dist/styles/hdf5.css +3 -0
  159. package/dist/styles/hwp.css +12 -0
  160. package/dist/styles/image.css +115 -0
  161. package/dist/styles/json.css +342 -0
  162. package/dist/styles/jsonl.css +1 -0
  163. package/dist/styles/markdown.css +10 -0
  164. package/dist/styles/mat.css +2 -0
  165. package/dist/styles/mermaid.css +1 -0
  166. package/dist/styles/parquet.css +2 -0
  167. package/dist/styles/pdf.css +551 -0
  168. package/dist/styles/plantuml.css +1 -0
  169. package/dist/styles/ppt.css +1 -0
  170. package/dist/styles/proto.css +2 -0
  171. package/dist/styles/psd.css +1 -0
  172. package/dist/styles/shapefile.css +25 -0
  173. package/dist/styles/toml.css +1 -0
  174. package/dist/styles/video.css +74 -0
  175. package/dist/styles/word.css +685 -0
  176. package/dist/styles/yaml.css +1 -0
  177. package/dist/viewers/a2l/index.d.ts +15 -0
  178. package/dist/viewers/a2l/index.js +5 -0
  179. package/dist/viewers/archive/archive-preview-decoder.d.ts +4 -0
  180. package/dist/viewers/archive/archive-preview-decoder.js +223 -0
  181. package/dist/viewers/archive/controller.d.ts +24 -0
  182. package/dist/viewers/archive/controller.js +18 -0
  183. package/dist/viewers/archive/index.d.ts +25 -0
  184. package/dist/viewers/archive/index.js +230 -0
  185. package/dist/viewers/archive/preview.d.ts +2 -0
  186. package/dist/viewers/archive/preview.js +2 -0
  187. package/dist/viewers/archive/styles.d.ts +1 -0
  188. package/dist/viewers/archive/styles.js +11 -0
  189. package/dist/viewers/arxml/index.d.ts +15 -0
  190. package/dist/viewers/arxml/index.js +5 -0
  191. package/dist/viewers/asc/index.d.ts +15 -0
  192. package/dist/viewers/asc/index.js +5 -0
  193. package/dist/viewers/audio/controller.d.ts +33 -0
  194. package/dist/viewers/audio/controller.js +49 -0
  195. package/dist/viewers/audio/engine.d.ts +44 -0
  196. package/dist/viewers/audio/engine.js +108 -0
  197. package/dist/viewers/audio/index.d.ts +92 -0
  198. package/dist/viewers/audio/index.js +448 -0
  199. package/dist/viewers/audio/self-loading.d.ts +7 -0
  200. package/dist/viewers/audio/self-loading.js +42 -0
  201. package/dist/viewers/audio/styles.d.ts +1 -0
  202. package/dist/viewers/audio/styles.js +73 -0
  203. package/dist/viewers/automotive/index.d.ts +8 -0
  204. package/dist/viewers/automotive/index.js +152 -0
  205. package/dist/viewers/automotive/styles.d.ts +1 -0
  206. package/dist/viewers/automotive/styles.js +1 -0
  207. package/dist/viewers/avro/index.d.ts +15 -0
  208. package/dist/viewers/avro/index.js +5 -0
  209. package/dist/viewers/bag/index.d.ts +15 -0
  210. package/dist/viewers/bag/index.js +5 -0
  211. package/dist/viewers/blf/index.d.ts +15 -0
  212. package/dist/viewers/blf/index.js +5 -0
  213. package/dist/viewers/csv/controller.d.ts +126 -0
  214. package/dist/viewers/csv/controller.js +598 -0
  215. package/dist/viewers/csv/index.d.ts +48 -0
  216. package/dist/viewers/csv/index.js +846 -0
  217. package/dist/viewers/csv/styles.d.ts +1 -0
  218. package/dist/viewers/csv/styles.js +267 -0
  219. package/dist/viewers/db3/index.d.ts +15 -0
  220. package/dist/viewers/db3/index.js +5 -0
  221. package/dist/viewers/dbc/index.d.ts +15 -0
  222. package/dist/viewers/dbc/index.js +5 -0
  223. package/dist/viewers/diagram.d.ts +14 -0
  224. package/dist/viewers/diagram.js +95 -0
  225. package/dist/viewers/excel/controller.d.ts +108 -0
  226. package/dist/viewers/excel/controller.js +548 -0
  227. package/dist/viewers/excel/grid.d.ts +28 -0
  228. package/dist/viewers/excel/grid.js +99 -0
  229. package/dist/viewers/excel/index.d.ts +37 -0
  230. package/dist/viewers/excel/index.js +620 -0
  231. package/dist/viewers/excel/self-loading.d.ts +6 -0
  232. package/dist/viewers/excel/self-loading.js +13 -0
  233. package/dist/viewers/excel/styles.d.ts +1 -0
  234. package/dist/viewers/excel/styles.js +216 -0
  235. package/dist/viewers/fallback/index.d.ts +17 -0
  236. package/dist/viewers/fallback/index.js +130 -0
  237. package/dist/viewers/fallback/styles.d.ts +1 -0
  238. package/dist/viewers/fallback/styles.js +49 -0
  239. package/dist/viewers/hdf5/index.d.ts +19 -0
  240. package/dist/viewers/hdf5/index.js +170 -0
  241. package/dist/viewers/hdf5/styles.d.ts +1 -0
  242. package/dist/viewers/hdf5/styles.js +4 -0
  243. package/dist/viewers/hwp/controller.d.ts +19 -0
  244. package/dist/viewers/hwp/controller.js +22 -0
  245. package/dist/viewers/hwp/index.d.ts +39 -0
  246. package/dist/viewers/hwp/index.js +271 -0
  247. package/dist/viewers/hwp/self-loading.d.ts +2 -0
  248. package/dist/viewers/hwp/self-loading.js +6 -0
  249. package/dist/viewers/hwp/styles.d.ts +1 -0
  250. package/dist/viewers/hwp/styles.js +13 -0
  251. package/dist/viewers/image/controller.d.ts +210 -0
  252. package/dist/viewers/image/controller.js +336 -0
  253. package/dist/viewers/image/decode.d.ts +54 -0
  254. package/dist/viewers/image/decode.js +150 -0
  255. package/dist/viewers/image/index.d.ts +38 -0
  256. package/dist/viewers/image/index.js +749 -0
  257. package/dist/viewers/image/limits.d.ts +18 -0
  258. package/dist/viewers/image/limits.js +20 -0
  259. package/dist/viewers/image/styles.d.ts +1 -0
  260. package/dist/viewers/image/styles.js +119 -0
  261. package/dist/viewers/json/controller.d.ts +89 -0
  262. package/dist/viewers/json/controller.js +411 -0
  263. package/dist/viewers/json/index.d.ts +25 -0
  264. package/dist/viewers/json/index.js +503 -0
  265. package/dist/viewers/json/styles.d.ts +1 -0
  266. package/dist/viewers/json/styles.js +346 -0
  267. package/dist/viewers/json/transforms.d.ts +27 -0
  268. package/dist/viewers/json/transforms.js +253 -0
  269. package/dist/viewers/jsonl/controller.d.ts +48 -0
  270. package/dist/viewers/jsonl/controller.js +136 -0
  271. package/dist/viewers/jsonl/index.d.ts +22 -0
  272. package/dist/viewers/jsonl/index.js +184 -0
  273. package/dist/viewers/jsonl/styles.d.ts +1 -0
  274. package/dist/viewers/jsonl/styles.js +1 -0
  275. package/dist/viewers/markdown/controller.d.ts +50 -0
  276. package/dist/viewers/markdown/controller.js +62 -0
  277. package/dist/viewers/markdown/index.d.ts +64 -0
  278. package/dist/viewers/markdown/index.js +425 -0
  279. package/dist/viewers/markdown/math.d.ts +21 -0
  280. package/dist/viewers/markdown/math.js +100 -0
  281. package/dist/viewers/markdown/self-loading.d.ts +5 -0
  282. package/dist/viewers/markdown/self-loading.js +48 -0
  283. package/dist/viewers/markdown/styles.d.ts +1 -0
  284. package/dist/viewers/markdown/styles.js +11 -0
  285. package/dist/viewers/mat/index.d.ts +19 -0
  286. package/dist/viewers/mat/index.js +113 -0
  287. package/dist/viewers/mat/styles.d.ts +1 -0
  288. package/dist/viewers/mat/styles.js +3 -0
  289. package/dist/viewers/media.d.ts +9 -0
  290. package/dist/viewers/media.js +77 -0
  291. package/dist/viewers/mermaid/index.d.ts +17 -0
  292. package/dist/viewers/mermaid/index.js +6 -0
  293. package/dist/viewers/mermaid/self-loading.d.ts +2 -0
  294. package/dist/viewers/mermaid/self-loading.js +2 -0
  295. package/dist/viewers/mf4/index.d.ts +15 -0
  296. package/dist/viewers/mf4/index.js +5 -0
  297. package/dist/viewers/parquet/controller.d.ts +37 -0
  298. package/dist/viewers/parquet/controller.js +26 -0
  299. package/dist/viewers/parquet/index.d.ts +23 -0
  300. package/dist/viewers/parquet/index.js +134 -0
  301. package/dist/viewers/parquet/styles.d.ts +1 -0
  302. package/dist/viewers/parquet/styles.js +3 -0
  303. package/dist/viewers/pcap/index.d.ts +15 -0
  304. package/dist/viewers/pcap/index.js +5 -0
  305. package/dist/viewers/pcapng/index.d.ts +15 -0
  306. package/dist/viewers/pcapng/index.js +5 -0
  307. package/dist/viewers/pdf/controller.d.ts +120 -0
  308. package/dist/viewers/pdf/controller.js +191 -0
  309. package/dist/viewers/pdf/editing.d.ts +26 -0
  310. package/dist/viewers/pdf/editing.js +265 -0
  311. package/dist/viewers/pdf/index.d.ts +88 -0
  312. package/dist/viewers/pdf/index.js +1400 -0
  313. package/dist/viewers/pdf/self-loading.d.ts +6 -0
  314. package/dist/viewers/pdf/self-loading.js +14 -0
  315. package/dist/viewers/pdf/styles.d.ts +1 -0
  316. package/dist/viewers/pdf/styles.js +555 -0
  317. package/dist/viewers/plantuml/index.d.ts +17 -0
  318. package/dist/viewers/plantuml/index.js +6 -0
  319. package/dist/viewers/plantuml/self-loading.d.ts +2 -0
  320. package/dist/viewers/plantuml/self-loading.js +2 -0
  321. package/dist/viewers/ppt/chart.d.ts +8 -0
  322. package/dist/viewers/ppt/chart.js +83 -0
  323. package/dist/viewers/ppt/controller.d.ts +34 -0
  324. package/dist/viewers/ppt/controller.js +27 -0
  325. package/dist/viewers/ppt/index.d.ts +33 -0
  326. package/dist/viewers/ppt/index.js +101 -0
  327. package/dist/viewers/ppt/render.d.ts +5 -0
  328. package/dist/viewers/ppt/render.js +144 -0
  329. package/dist/viewers/ppt/self-loading.d.ts +9 -0
  330. package/dist/viewers/ppt/self-loading.js +4 -0
  331. package/dist/viewers/ppt/styles.d.ts +1 -0
  332. package/dist/viewers/ppt/styles.js +1 -0
  333. package/dist/viewers/proto/index.d.ts +17 -0
  334. package/dist/viewers/proto/index.js +170 -0
  335. package/dist/viewers/proto/styles.d.ts +1 -0
  336. package/dist/viewers/proto/styles.js +2 -0
  337. package/dist/viewers/psd/index.d.ts +27 -0
  338. package/dist/viewers/psd/index.js +39 -0
  339. package/dist/viewers/psd/self-loading.d.ts +10 -0
  340. package/dist/viewers/psd/self-loading.js +20 -0
  341. package/dist/viewers/psd/styles.d.ts +1 -0
  342. package/dist/viewers/psd/styles.js +1 -0
  343. package/dist/viewers/reqif/index.d.ts +15 -0
  344. package/dist/viewers/reqif/index.js +5 -0
  345. package/dist/viewers/shapefile/index.d.ts +35 -0
  346. package/dist/viewers/shapefile/index.js +336 -0
  347. package/dist/viewers/shapefile/self-loading.d.ts +7 -0
  348. package/dist/viewers/shapefile/self-loading.js +32 -0
  349. package/dist/viewers/shapefile/styles.d.ts +1 -0
  350. package/dist/viewers/shapefile/styles.js +28 -0
  351. package/dist/viewers/stp/index.d.ts +15 -0
  352. package/dist/viewers/stp/index.js +5 -0
  353. package/dist/viewers/structured-styles.d.ts +1 -0
  354. package/dist/viewers/structured-styles.js +1 -0
  355. package/dist/viewers/structured.d.ts +36 -0
  356. package/dist/viewers/structured.js +138 -0
  357. package/dist/viewers/toml/controller.d.ts +38 -0
  358. package/dist/viewers/toml/controller.js +61 -0
  359. package/dist/viewers/toml/index.d.ts +18 -0
  360. package/dist/viewers/toml/index.js +34 -0
  361. package/dist/viewers/types.d.ts +36 -0
  362. package/dist/viewers/types.js +9 -0
  363. package/dist/viewers/video/controller.d.ts +29 -0
  364. package/dist/viewers/video/controller.js +54 -0
  365. package/dist/viewers/video/index.d.ts +18 -0
  366. package/dist/viewers/video/index.js +305 -0
  367. package/dist/viewers/video/styles.d.ts +1 -0
  368. package/dist/viewers/video/styles.js +79 -0
  369. package/dist/viewers/word/controller.d.ts +19 -0
  370. package/dist/viewers/word/controller.js +22 -0
  371. package/dist/viewers/word/docx-preprocess.d.ts +63 -0
  372. package/dist/viewers/word/docx-preprocess.js +136 -0
  373. package/dist/viewers/word/index.d.ts +32 -0
  374. package/dist/viewers/word/index.js +187 -0
  375. package/dist/viewers/word/normalize-docx.d.ts +2 -0
  376. package/dist/viewers/word/normalize-docx.js +50 -0
  377. package/dist/viewers/word/paginate.d.ts +1 -0
  378. package/dist/viewers/word/paginate.js +1035 -0
  379. package/dist/viewers/word/self-loading.d.ts +2 -0
  380. package/dist/viewers/word/self-loading.js +7 -0
  381. package/dist/viewers/word/styles.d.ts +1 -0
  382. package/dist/viewers/word/styles.js +686 -0
  383. package/dist/viewers/yaml/controller.d.ts +42 -0
  384. package/dist/viewers/yaml/controller.js +41 -0
  385. package/dist/viewers/yaml/index.d.ts +21 -0
  386. package/dist/viewers/yaml/index.js +20 -0
  387. package/package.json +375 -0
@@ -0,0 +1,346 @@
1
+ // JSON viewer stylesheet. Single source for both delivery forms (DESIGN.md §6):
2
+ // the build emits dist/styles/json.css from this constant, and the renderer
3
+ // injects it into the shadow root. Only --omni-* tokens (with fallbacks).
4
+ export const jsonViewerCss = `
5
+ /* Reverse-contamination guard (DESIGN.md §6): neutralize host global element
6
+ styles in 'scoped' mode; harmless in shadow mode. Custom properties are
7
+ exempt from 'all', so --omni-* theme tokens still pierce. */
8
+ .omni-viewer--json {
9
+ all: initial;
10
+ }
11
+ .omni-viewer--json :where(button, select, option, input, label, textarea,
12
+ pre, code, ul, li, span, div) {
13
+ all: revert;
14
+ }
15
+
16
+ :host, .omni-viewer--json {
17
+ display: block;
18
+ height: 100%;
19
+ box-sizing: border-box;
20
+ color: var(--omni-fg, #d4d4d4);
21
+ background: var(--omni-bg, #1e1e1e);
22
+ font-family: var(--omni-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);
23
+ font-size: var(--omni-font-size, 13px);
24
+ }
25
+ .omni-json {
26
+ display: flex;
27
+ flex-direction: column;
28
+ height: 100%;
29
+ box-sizing: border-box;
30
+ }
31
+ .omni-json__toolbar {
32
+ display: flex;
33
+ flex-wrap: wrap;
34
+ gap: 4px;
35
+ align-items: center;
36
+ padding: 6px;
37
+ border-bottom: 1px solid var(--omni-border, #333);
38
+ }
39
+ .omni-json__toolbar button,
40
+ .omni-json__toolbar select {
41
+ background: var(--omni-button-bg, #2d2d2d);
42
+ color: inherit;
43
+ border: 1px solid var(--omni-border, #333);
44
+ border-radius: 3px;
45
+ padding: 3px 8px;
46
+ cursor: pointer;
47
+ font: inherit;
48
+ }
49
+ .omni-json__toolbar button[aria-pressed="true"] {
50
+ background: var(--omni-accent, #0e639c);
51
+ color: #fff;
52
+ }
53
+ .omni-json__toolbar button:disabled {
54
+ opacity: 0.5;
55
+ cursor: not-allowed;
56
+ }
57
+ .omni-json__tool-group {
58
+ margin-left: auto;
59
+ display: inline-flex;
60
+ flex-wrap: wrap;
61
+ gap: 6px;
62
+ }
63
+ .omni-json__save-actions {
64
+ display: inline-flex;
65
+ gap: 6px;
66
+ }
67
+ .omni-json__search {
68
+ background: var(--omni-input-bg, #3c3c3c);
69
+ color: inherit;
70
+ border: 1px solid var(--omni-border, #333);
71
+ border-radius: 3px;
72
+ padding: 3px 6px;
73
+ font: inherit;
74
+ }
75
+ .omni-json__meta,
76
+ .omni-json__matchinfo,
77
+ .omni-json__status {
78
+ color: var(--omni-fg-muted, #999);
79
+ padding: 0 6px;
80
+ white-space: nowrap;
81
+ }
82
+ .omni-json__status {
83
+ padding: 4px 8px;
84
+ border-bottom: 1px solid var(--omni-border, #333);
85
+ }
86
+ .omni-json__diagnostics {
87
+ padding: 4px 8px;
88
+ border-bottom: 1px solid var(--omni-border, #333);
89
+ }
90
+ .omni-json__diag-error {
91
+ color: var(--omni-error, #f48771);
92
+ }
93
+ .omni-json__body {
94
+ flex: 1 1 auto;
95
+ overflow: hidden;
96
+ padding: 12px;
97
+ min-height: 0;
98
+ }
99
+ .omni-json__source-workspace {
100
+ display: grid;
101
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
102
+ gap: 12px;
103
+ height: 100%;
104
+ min-height: 360px;
105
+ }
106
+ .omni-json__pane {
107
+ display: flex;
108
+ flex-direction: column;
109
+ min-width: 0;
110
+ overflow: hidden;
111
+ border: 1px solid var(--omni-border, #333);
112
+ border-radius: 10px;
113
+ background: var(--omni-input-bg, #1e1e1e);
114
+ }
115
+ .omni-json__pane-header {
116
+ display: flex;
117
+ justify-content: space-between;
118
+ gap: 12px;
119
+ align-items: center;
120
+ padding: 12px 14px;
121
+ border-bottom: 1px solid var(--omni-border, #333);
122
+ font-family: var(--omni-font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);
123
+ font-size: 1.05em;
124
+ }
125
+ .omni-json__pane-header span {
126
+ color: var(--omni-fg-muted, #999);
127
+ text-align: right;
128
+ }
129
+ .omni-json__pane-header button {
130
+ margin-left: auto;
131
+ background: var(--omni-button-bg, #2d2d2d);
132
+ color: inherit;
133
+ border: 1px solid var(--omni-border, #333);
134
+ border-radius: 3px;
135
+ padding: 3px 8px;
136
+ cursor: pointer;
137
+ font: inherit;
138
+ }
139
+ .omni-json__pane-header button[aria-pressed="true"] {
140
+ background: var(--omni-accent, #0e639c);
141
+ color: #fff;
142
+ }
143
+ .omni-json__editor-surface,
144
+ .omni-json__preview-content {
145
+ position: relative;
146
+ flex: 1 1 auto;
147
+ min-height: 0;
148
+ }
149
+ .omni-json__editor-surface {
150
+ overflow: hidden;
151
+ }
152
+ .omni-json__preview-content {
153
+ overflow: auto;
154
+ }
155
+ .omni-json__source {
156
+ margin: 0;
157
+ white-space: pre;
158
+ font-family: var(--omni-font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);
159
+ overflow: auto;
160
+ padding: 28px;
161
+ flex: 1 1 auto;
162
+ }
163
+ .omni-json__editor {
164
+ position: absolute;
165
+ inset: 0;
166
+ width: 100%;
167
+ height: 100%;
168
+ box-sizing: border-box;
169
+ resize: none;
170
+ background: transparent;
171
+ color: transparent;
172
+ -webkit-text-fill-color: transparent;
173
+ caret-color: var(--omni-fg, #d4d4d4);
174
+ border: none;
175
+ outline: none;
176
+ padding: 28px;
177
+ font-family: var(--omni-font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);
178
+ font-size: inherit;
179
+ line-height: 1.5;
180
+ }
181
+ .omni-json__editor-highlight {
182
+ position: absolute;
183
+ inset: 0;
184
+ box-sizing: border-box;
185
+ min-width: 100%;
186
+ margin: 0;
187
+ padding: 28px;
188
+ white-space: pre;
189
+ overflow: hidden;
190
+ pointer-events: none;
191
+ font-family: var(--omni-font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);
192
+ font-size: inherit;
193
+ line-height: 1.5;
194
+ }
195
+ .omni-json__tree,
196
+ .omni-json__tree ul {
197
+ list-style: none;
198
+ margin: 0;
199
+ padding: 0;
200
+ font-family: var(--omni-font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);
201
+ }
202
+ .omni-json__tree ul {
203
+ padding-left: 16px;
204
+ }
205
+ .omni-json__row {
206
+ display: flex;
207
+ align-items: baseline;
208
+ gap: 6px;
209
+ padding: 1px 0;
210
+ }
211
+ .omni-json__row.is-matched {
212
+ background: var(--omni-match-bg, rgba(255, 214, 0, 0.25));
213
+ }
214
+ .omni-json__row.is-current {
215
+ outline: 1px solid var(--omni-accent, #0e639c);
216
+ }
217
+ .omni-json__toggle {
218
+ cursor: pointer;
219
+ width: 1.2em;
220
+ box-sizing: border-box;
221
+ user-select: none;
222
+ color: var(--omni-fg-muted, #999);
223
+ background: none;
224
+ border: none;
225
+ padding: 0;
226
+ font: inherit;
227
+ text-align: left;
228
+ }
229
+ .omni-json__toggle:focus-visible {
230
+ outline: 1px solid var(--omni-accent, #0e639c);
231
+ }
232
+ .omni-json__key { color: var(--omni-json-key, #9cdcfe); }
233
+ .omni-json__type { color: var(--omni-fg-muted, #808080); font-size: 0.85em; }
234
+ .omni-json__val-string { color: var(--omni-json-string, #ce9178); }
235
+ .omni-json__val-number { color: var(--omni-json-number, #b5cea8); }
236
+ .omni-json__val-boolean { color: var(--omni-json-boolean, #569cd6); }
237
+ .omni-json__val-null { color: var(--omni-json-null, #569cd6); }
238
+ /* Kept in layout (not display:none) so the copy buttons stay in the tab order
239
+ for keyboard users; revealed on hover or when a child is focused (P2b). */
240
+ .omni-json__node-actions {
241
+ display: inline-flex;
242
+ gap: 2px;
243
+ opacity: 0;
244
+ }
245
+ .omni-json__row:hover .omni-json__node-actions,
246
+ .omni-json__row:focus-within .omni-json__node-actions {
247
+ opacity: 1;
248
+ }
249
+ .omni-json__result {
250
+ border-top: 1px solid var(--omni-border, #333);
251
+ padding: 10px 12px;
252
+ display: flex;
253
+ flex-direction: column;
254
+ gap: 8px;
255
+ min-height: 220px;
256
+ max-height: 40%;
257
+ overflow: hidden;
258
+ }
259
+ .omni-json__result-output {
260
+ width: 100%;
261
+ min-height: 120px;
262
+ box-sizing: border-box;
263
+ background: var(--omni-input-bg, #1e1e1e);
264
+ color: inherit;
265
+ border: 1px solid var(--omni-border, #333);
266
+ font-family: var(--omni-font-mono, ui-monospace, Menlo, monospace);
267
+ font-size: inherit;
268
+ }
269
+ .omni-json__result-markup {
270
+ width: 100%;
271
+ min-height: 120px;
272
+ box-sizing: border-box;
273
+ margin: 0;
274
+ padding: 8px;
275
+ overflow: auto;
276
+ background: var(--omni-input-bg, #1e1e1e);
277
+ border: 1px solid var(--omni-border, #333);
278
+ font-family: var(--omni-font-mono, ui-monospace, Menlo, monospace);
279
+ font-size: inherit;
280
+ white-space: pre-wrap;
281
+ }
282
+ .omni-json__result-tag { color: #569cd6; }
283
+ .omni-json__result-key { color: #9cdcfe; }
284
+ .omni-json__result-value { color: #ce9178; }
285
+ .omni-json__result-table-wrap {
286
+ flex: 1 1 auto;
287
+ min-height: 160px;
288
+ overflow: auto;
289
+ border: 1px solid var(--omni-border, #333);
290
+ }
291
+ .omni-json__result-table {
292
+ border-collapse: collapse;
293
+ width: max-content;
294
+ min-width: 100%;
295
+ font-family: var(--omni-font-mono, ui-monospace, Menlo, monospace);
296
+ }
297
+ .omni-json__result-table th,
298
+ .omni-json__result-table td {
299
+ padding: 6px 10px;
300
+ border-right: 1px solid var(--omni-border, #333);
301
+ border-bottom: 1px solid var(--omni-border, #333);
302
+ text-align: left;
303
+ white-space: pre-wrap;
304
+ vertical-align: top;
305
+ }
306
+ .omni-json__result-table th {
307
+ position: sticky;
308
+ top: 0;
309
+ background: var(--omni-button-bg, #2d2d2d);
310
+ }
311
+ .omni-json__result-actions {
312
+ display: flex;
313
+ flex-wrap: wrap;
314
+ gap: 8px;
315
+ }
316
+ .omni-json__result-actions button {
317
+ background: var(--omni-button-bg, #2d2d2d);
318
+ color: inherit;
319
+ border: 1px solid var(--omni-border, #333);
320
+ border-radius: 3px;
321
+ padding: 3px 8px;
322
+ cursor: pointer;
323
+ font: inherit;
324
+ }
325
+ .jv-tok-key { color: var(--omni-json-key, #9cdcfe); }
326
+ .jv-tok-string { color: var(--omni-json-string, #ce9178); }
327
+ .jv-tok-number { color: var(--omni-json-number, #b5cea8); }
328
+ .jv-tok-bool { color: var(--omni-json-boolean, #569cd6); }
329
+ .jv-tok-null { color: var(--omni-json-null, #569cd6); }
330
+ .jv-tok-unknown { color: var(--omni-error, #f48771); }
331
+ .omni-json__search-hit {
332
+ color: inherit;
333
+ background: var(--omni-match-bg, rgba(255, 214, 0, 0.35));
334
+ border-radius: 2px;
335
+ padding: 0;
336
+ }
337
+ @media (max-width: 760px) {
338
+ .omni-json__source-workspace {
339
+ grid-template-columns: 1fr;
340
+ height: auto;
341
+ }
342
+ .omni-json__pane {
343
+ min-height: 320px;
344
+ }
345
+ }
346
+ `;
@@ -0,0 +1,27 @@
1
+ import { type JsonNode } from '../../parsers/json/index.js';
2
+ export type TransformResult = {
3
+ ok: true;
4
+ output: string;
5
+ } | {
6
+ ok: false;
7
+ error: string;
8
+ };
9
+ /**
10
+ * Serialize a JsonNode tree. `pretty` uses 2-space indentation (JSON.stringify
11
+ * `null, 2` shape); `sortKeys` orders object keys by code unit — a deterministic
12
+ * compare, not vscode's locale-dependent localeCompare (ADR 41).
13
+ */
14
+ export declare function serialize(node: JsonNode, pretty: boolean, sortKeys?: boolean): string;
15
+ /** Project the fidelity model to a plain JS value (converters use this for
16
+ * vscode parity — duplicate keys collapse last-wins, as JSON semantics). */
17
+ export declare function toPlainValue(node: JsonNode): unknown;
18
+ /** vscode escapeText: JSON-escape then strip the outer quotes. */
19
+ export declare function escapeText(text: string): string;
20
+ /** vscode unescapeText: unwrap matching quotes, then resolve escapes. */
21
+ export declare function unescapeText(text: string): TransformResult;
22
+ export declare function base64Encode(text: string): string;
23
+ export declare function base64Decode(text: string): TransformResult;
24
+ /** JSON→CSV. Requires an object or an array of objects (else error). */
25
+ export declare function jsonToCsv(value: unknown): TransformResult;
26
+ export declare function jsonToXml(value: unknown): TransformResult;
27
+ export declare function jsonToYaml(value: unknown, depth?: number): TransformResult;
@@ -0,0 +1,253 @@
1
+ // Pure JSON toolbox transforms (docs/viewers/json.md 부록 B, vscode 기준).
2
+ // DOM-free and deterministic. Serialization (pretty/minify/sort) runs on the
3
+ // fidelity model (rawNumber / duplicate keys preserved, J1); converters and
4
+ // escape/base64 follow the vscode rules (J15/J19). Input-caused failures
5
+ // return an { error } marker instead of throwing (ADR 11).
6
+ import { encodeJsonString } from '../../parsers/json/index.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Serialization from the fidelity model (pretty / minify / sort-keys).
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * Serialize a JsonNode tree. `pretty` uses 2-space indentation (JSON.stringify
12
+ * `null, 2` shape); `sortKeys` orders object keys by code unit — a deterministic
13
+ * compare, not vscode's locale-dependent localeCompare (ADR 41).
14
+ */
15
+ export function serialize(node, pretty, sortKeys = false) {
16
+ const nl = pretty ? '\n' : '';
17
+ const sp = pretty ? ' ' : '';
18
+ const pad = (d) => (pretty ? ' '.repeat(d) : '');
19
+ const walk = (n, depth) => {
20
+ switch (n.kind) {
21
+ case 'string':
22
+ return encodeJsonString(n.value);
23
+ case 'number':
24
+ return n.rawNumber ?? '0';
25
+ case 'boolean':
26
+ return n.value ? 'true' : 'false';
27
+ case 'null':
28
+ return 'null';
29
+ case 'array': {
30
+ const items = n.children ?? [];
31
+ if (items.length === 0)
32
+ return '[]';
33
+ const inner = items
34
+ .map((c) => pad(depth + 1) + walk(c, depth + 1))
35
+ .join(',' + nl);
36
+ return '[' + nl + inner + nl + pad(depth) + ']';
37
+ }
38
+ case 'object': {
39
+ let entries = n.children ?? [];
40
+ if (sortKeys) {
41
+ entries = [...entries].sort((a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0);
42
+ }
43
+ if (entries.length === 0)
44
+ return '{}';
45
+ const inner = entries
46
+ .map((c) => pad(depth + 1) +
47
+ encodeJsonString(c.key) +
48
+ ':' +
49
+ sp +
50
+ walk(c, depth + 1))
51
+ .join(',' + nl);
52
+ return '{' + nl + inner + nl + pad(depth) + '}';
53
+ }
54
+ }
55
+ };
56
+ return walk(node, 0);
57
+ }
58
+ /** Project the fidelity model to a plain JS value (converters use this for
59
+ * vscode parity — duplicate keys collapse last-wins, as JSON semantics). */
60
+ export function toPlainValue(node) {
61
+ switch (node.kind) {
62
+ case 'object': {
63
+ const obj = {};
64
+ for (const child of node.children ?? [])
65
+ obj[child.key] = toPlainValue(child);
66
+ return obj;
67
+ }
68
+ case 'array':
69
+ return (node.children ?? []).map(toPlainValue);
70
+ case 'number':
71
+ return Number(node.rawNumber);
72
+ case 'string':
73
+ case 'boolean':
74
+ case 'null':
75
+ return node.value ?? null;
76
+ }
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // escape / unescape / base64 (부록 B-2, vscode). Operate on raw text.
80
+ // ---------------------------------------------------------------------------
81
+ /** vscode escapeText: JSON-escape then strip the outer quotes. */
82
+ export function escapeText(text) {
83
+ return encodeJsonString(text).slice(1, -1);
84
+ }
85
+ /** vscode unescapeText: unwrap matching quotes, then resolve escapes. */
86
+ export function unescapeText(text) {
87
+ const trimmed = text.trim();
88
+ let body = text;
89
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"') && trimmed.length >= 2) ||
90
+ (trimmed.startsWith("'") && trimmed.endsWith("'") && trimmed.length >= 2)) {
91
+ body = trimmed.slice(1, -1);
92
+ }
93
+ let result = '';
94
+ for (let i = 0; i < body.length; i++) {
95
+ const ch = body[i];
96
+ if (ch !== '\\') {
97
+ result += ch;
98
+ continue;
99
+ }
100
+ const next = body[i + 1];
101
+ if (next === undefined)
102
+ return { ok: false, error: 'trailing' };
103
+ if (next === 'n')
104
+ result += '\n';
105
+ else if (next === 'r')
106
+ result += '\r';
107
+ else if (next === 't')
108
+ result += '\t';
109
+ else if (next === 'b')
110
+ result += '\b';
111
+ else if (next === 'f')
112
+ result += '\f';
113
+ else if (next === '\\')
114
+ result += '\\';
115
+ else if (next === '"')
116
+ result += '"';
117
+ else if (next === "'")
118
+ result += "'";
119
+ else if (next === 'u') {
120
+ const hex = body.slice(i + 2, i + 6);
121
+ if (!/^[0-9a-fA-F]{4}$/.test(hex))
122
+ return { ok: false, error: 'invalid-unicode' };
123
+ result += String.fromCharCode(parseInt(hex, 16));
124
+ i += 4;
125
+ }
126
+ else if (next === 'x') {
127
+ const hex = body.slice(i + 2, i + 4);
128
+ if (!/^[0-9a-fA-F]{2}$/.test(hex))
129
+ return { ok: false, error: 'invalid-hex' };
130
+ result += String.fromCharCode(parseInt(hex, 16));
131
+ i += 2;
132
+ }
133
+ else {
134
+ result += next;
135
+ }
136
+ i += 1;
137
+ }
138
+ return { ok: true, output: result };
139
+ }
140
+ export function base64Encode(text) {
141
+ const bytes = new TextEncoder().encode(text);
142
+ let binary = '';
143
+ bytes.forEach((byte) => {
144
+ binary += String.fromCharCode(byte);
145
+ });
146
+ return btoa(binary);
147
+ }
148
+ export function base64Decode(text) {
149
+ try {
150
+ const binary = atob(text.trim());
151
+ const bytes = Uint8Array.from(binary, (ch) => ch.charCodeAt(0));
152
+ return { ok: true, output: new TextDecoder().decode(bytes) };
153
+ }
154
+ catch {
155
+ return { ok: false, error: 'invalid-base64' };
156
+ }
157
+ }
158
+ // ---------------------------------------------------------------------------
159
+ // Converters (부록 B-3/4/5, vscode). Operate on the plain-value projection.
160
+ // ---------------------------------------------------------------------------
161
+ /** JSON→CSV. Requires an object or an array of objects (else error). */
162
+ export function jsonToCsv(value) {
163
+ const rows = Array.isArray(value) ? value : [value];
164
+ if (!rows.every((r) => r != null && typeof r === 'object' && !Array.isArray(r))) {
165
+ return { ok: false, error: 'csv-requires-objects' };
166
+ }
167
+ const headers = Array.from(new Set(rows.flatMap((r) => Object.keys(r))));
168
+ const cell = (v) => {
169
+ if (v === null || v === undefined)
170
+ return '';
171
+ const text = typeof v === 'object' ? JSON.stringify(v) : String(v);
172
+ return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
173
+ };
174
+ // B-3 fix: the header row is quoted like data cells (vscode leaves it raw).
175
+ const lines = [
176
+ headers.map(cell).join(','),
177
+ ...rows.map((row) => headers.map((h) => cell(row[h])).join(','))
178
+ ];
179
+ return { ok: true, output: lines.join('\n') };
180
+ }
181
+ export function jsonToXml(value) {
182
+ return {
183
+ ok: true,
184
+ output: `<?xml version="1.0" encoding="UTF-8"?>\n${toXmlNode('root', value, 0)}`
185
+ };
186
+ }
187
+ function toXmlNode(key, value, depth) {
188
+ const indent = ' '.repeat(depth);
189
+ const tag = sanitizeXmlTag(key);
190
+ if (Array.isArray(value)) {
191
+ const items = value.map((item) => toXmlNode('item', item, depth + 1)).join('\n');
192
+ return `${indent}<${tag}>\n${items}\n${indent}</${tag}>`;
193
+ }
194
+ if (value && typeof value === 'object') {
195
+ const children = Object.entries(value)
196
+ .map(([k, v]) => toXmlNode(k, v, depth + 1))
197
+ .join('\n');
198
+ return `${indent}<${tag}>\n${children}\n${indent}</${tag}>`;
199
+ }
200
+ return `${indent}<${tag}>${escapeXml(String(value ?? ''))}</${tag}>`;
201
+ }
202
+ function sanitizeXmlTag(tag) {
203
+ const normalized = tag.replace(/[^a-zA-Z0-9_.-]/g, '_');
204
+ return /^[A-Za-z_]/.test(normalized) ? normalized : `node_${normalized}`;
205
+ }
206
+ function escapeXml(text) {
207
+ return text
208
+ .replace(/&/g, '&amp;')
209
+ .replace(/</g, '&lt;')
210
+ .replace(/>/g, '&gt;')
211
+ .replace(/"/g, '&quot;')
212
+ .replace(/'/g, '&apos;');
213
+ }
214
+ export function jsonToYaml(value, depth = 0) {
215
+ return { ok: true, output: yamlNode(value, depth) };
216
+ }
217
+ function yamlNode(value, depth) {
218
+ const indent = ' '.repeat(depth);
219
+ if (Array.isArray(value)) {
220
+ if (value.length === 0)
221
+ return `${indent}[]`;
222
+ return value
223
+ .map((item) => item && typeof item === 'object'
224
+ ? `${indent}- ${yamlNode(item, depth + 1).trimStart()}`
225
+ : `${indent}- ${yamlScalar(item)}`)
226
+ .join('\n');
227
+ }
228
+ if (value && typeof value === 'object') {
229
+ const entries = Object.entries(value);
230
+ if (entries.length === 0)
231
+ return `${indent}{}`;
232
+ return entries
233
+ .map(([key, item]) => item && typeof item === 'object'
234
+ ? `${indent}${key}:\n${yamlNode(item, depth + 1)}`
235
+ : `${indent}${key}: ${yamlScalar(item)}`)
236
+ .join('\n');
237
+ }
238
+ return `${indent}${yamlScalar(value)}`;
239
+ }
240
+ function yamlScalar(value) {
241
+ if (value === null || value === undefined)
242
+ return 'null';
243
+ if (typeof value === 'number' || typeof value === 'boolean')
244
+ return String(value);
245
+ const text = String(value);
246
+ if (text === '' ||
247
+ /[:{}[\],&*#?|\-<>=!%@`]/.test(text) ||
248
+ /^\s|\s$/.test(text) ||
249
+ text.includes('\n')) {
250
+ return encodeJsonString(text);
251
+ }
252
+ return text;
253
+ }
@@ -0,0 +1,48 @@
1
+ import { type JsonlEntry, type JsonlPagedInput } from '../../parsers/jsonl/index.js';
2
+ import type { Diagnostic } from '../../parsers/types.js';
3
+ export type JsonlAction = {
4
+ type: 'load-more';
5
+ } | {
6
+ type: 'load-all';
7
+ } | {
8
+ type: 'set-search';
9
+ search: string;
10
+ } | {
11
+ type: 'select';
12
+ id: string;
13
+ additive?: boolean;
14
+ range?: boolean;
15
+ } | {
16
+ type: 'edit';
17
+ id: string;
18
+ raw: string;
19
+ } | {
20
+ type: 'insert';
21
+ raw?: string;
22
+ } | {
23
+ type: 'delete-selected';
24
+ } | {
25
+ type: 'move';
26
+ from: string;
27
+ to: string;
28
+ } | {
29
+ type: 'save';
30
+ };
31
+ export interface JsonlViewState {
32
+ status: 'ok' | 'partial' | 'failed';
33
+ loadState: 'preview' | 'complete' | 'loading';
34
+ entries: readonly JsonlEntry[];
35
+ search: string;
36
+ selected: ReadonlySet<string>;
37
+ dirty: boolean;
38
+ visibleCount: number;
39
+ diagnostics: readonly Diagnostic[];
40
+ }
41
+ export interface JsonlController {
42
+ readonly state: JsonlViewState;
43
+ dispatch(action: JsonlAction): void | Promise<void>;
44
+ subscribe(listener: (state: JsonlViewState) => void): () => void;
45
+ serialize(): string;
46
+ canSave(): boolean;
47
+ }
48
+ export declare function createJsonlController(input: Uint8Array | string | JsonlPagedInput): JsonlController;