repl-sdk 1.0.0 → 1.0.1

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 (272) hide show
  1. package/dist/apl-fqmucPXA.js +141 -0
  2. package/dist/apl-fqmucPXA.js.map +1 -0
  3. package/dist/asciiarmor-DucZyvP0.js +57 -0
  4. package/dist/asciiarmor-DucZyvP0.js.map +1 -0
  5. package/dist/asn1-BnOEsgAm.js +145 -0
  6. package/dist/asn1-BnOEsgAm.js.map +1 -0
  7. package/dist/assets/{tar-worker-kdkltuRC.js → tar-worker-CxTcoQcr.js} +1 -6
  8. package/dist/assets/{tar-worker-kdkltuRC.js.map → tar-worker-CxTcoQcr.js.map} +1 -1
  9. package/dist/asterisk-QAlztEwS.js +346 -0
  10. package/dist/asterisk-QAlztEwS.js.map +1 -0
  11. package/dist/brainfuck-DZVCuF_t.js +54 -0
  12. package/dist/brainfuck-DZVCuF_t.js.map +1 -0
  13. package/dist/clike-CTYGlS6x.js +800 -0
  14. package/dist/clike-CTYGlS6x.js.map +1 -0
  15. package/dist/clojure-BhXMqnxz.js +850 -0
  16. package/dist/clojure-BhXMqnxz.js.map +1 -0
  17. package/dist/cmake-BGaNd9E7.js +72 -0
  18. package/dist/cmake-BGaNd9E7.js.map +1 -0
  19. package/dist/cobol-4yqQntpt.js +121 -0
  20. package/dist/cobol-4yqQntpt.js.map +1 -0
  21. package/dist/codemirror-De3S70Np.js +2912 -0
  22. package/dist/codemirror-De3S70Np.js.map +1 -0
  23. package/dist/coffeescript-D2dXvhEc.js +309 -0
  24. package/dist/coffeescript-D2dXvhEc.js.map +1 -0
  25. package/dist/commonlisp-CF_VNHQR.js +131 -0
  26. package/dist/commonlisp-CF_VNHQR.js.map +1 -0
  27. package/dist/crystal-DyuLTqLs.js +399 -0
  28. package/dist/crystal-DyuLTqLs.js.map +1 -0
  29. package/dist/css-DkSyTW67.js +1773 -0
  30. package/dist/css-DkSyTW67.js.map +1 -0
  31. package/dist/cypher-Dlu_3r4V.js +122 -0
  32. package/dist/cypher-Dlu_3r4V.js.map +1 -0
  33. package/dist/d-UURgV0Ux.js +180 -0
  34. package/dist/d-UURgV0Ux.js.map +1 -0
  35. package/dist/diff-B_Bi2Crb.js +26 -0
  36. package/dist/diff-B_Bi2Crb.js.map +1 -0
  37. package/dist/dockerfile-Bvk733Ga.js +202 -0
  38. package/dist/dockerfile-Bvk733Ga.js.map +1 -0
  39. package/dist/dtd-Dy74G54E.js +115 -0
  40. package/dist/dtd-Dy74G54E.js.map +1 -0
  41. package/dist/dylan-TSb-Nfix.js +315 -0
  42. package/dist/dylan-TSb-Nfix.js.map +1 -0
  43. package/dist/ebnf-4fKAGW3a.js +141 -0
  44. package/dist/ebnf-4fKAGW3a.js.map +1 -0
  45. package/dist/ecl-B59qGGVg.js +179 -0
  46. package/dist/ecl-B59qGGVg.js.map +1 -0
  47. package/dist/eiffel-Dze7nlu3.js +135 -0
  48. package/dist/eiffel-Dze7nlu3.js.map +1 -0
  49. package/dist/elm-DG7jkhNZ.js +177 -0
  50. package/dist/elm-DG7jkhNZ.js.map +1 -0
  51. package/dist/erlang-BO6gOnGA.js +675 -0
  52. package/dist/erlang-BO6gOnGA.js.map +1 -0
  53. package/dist/factor-CMxFHDqz.js +66 -0
  54. package/dist/factor-CMxFHDqz.js.map +1 -0
  55. package/dist/fcl-CDDUNjTj.js +142 -0
  56. package/dist/fcl-CDDUNjTj.js.map +1 -0
  57. package/dist/forth-B9D2JCeE.js +117 -0
  58. package/dist/forth-B9D2JCeE.js.map +1 -0
  59. package/dist/fortran-CAG2BFbe.js +468 -0
  60. package/dist/fortran-CAG2BFbe.js.map +1 -0
  61. package/dist/gas-0Aw8zDr5.js +294 -0
  62. package/dist/gas-0Aw8zDr5.js.map +1 -0
  63. package/dist/gherkin-DhZlEZiy.js +116 -0
  64. package/dist/gherkin-DhZlEZiy.js.map +1 -0
  65. package/dist/{gjs-CzFzkEFv.js → gjs-DfguZDLq.js} +4 -4
  66. package/dist/gjs-DfguZDLq.js.map +1 -0
  67. package/dist/{gmd-D9OXs2v3.js → gmd-Yas-Oo8k.js} +3 -6
  68. package/dist/gmd-Yas-Oo8k.js.map +1 -0
  69. package/dist/groovy-CpwJiBl7.js +224 -0
  70. package/dist/groovy-CpwJiBl7.js.map +1 -0
  71. package/dist/haskell-ySd-OUo8.js +460 -0
  72. package/dist/haskell-ySd-OUo8.js.map +1 -0
  73. package/dist/haxe-7MlzfeYV.js +515 -0
  74. package/dist/haxe-7MlzfeYV.js.map +1 -0
  75. package/dist/{hbs-CuhWjffM.js → hbs-CxcmWxSJ.js} +2 -2
  76. package/dist/{hbs-CuhWjffM.js.map → hbs-CxcmWxSJ.js.map} +1 -1
  77. package/dist/http-BqypyemW.js +80 -0
  78. package/dist/http-BqypyemW.js.map +1 -0
  79. package/dist/idl-4HIGJlDI.js +986 -0
  80. package/dist/idl-4HIGJlDI.js.map +1 -0
  81. package/dist/index-B3Meoznj.js +118 -0
  82. package/dist/index-B3Meoznj.js.map +1 -0
  83. package/dist/index-BQyfDUUx.js +692 -0
  84. package/dist/index-BQyfDUUx.js.map +1 -0
  85. package/dist/index-BRDroAD8.js +305 -0
  86. package/dist/index-BRDroAD8.js.map +1 -0
  87. package/dist/index-BRMAzRyM.js +179 -0
  88. package/dist/index-BRMAzRyM.js.map +1 -0
  89. package/dist/index-Bb8uYQgv.js +927 -0
  90. package/dist/index-Bb8uYQgv.js.map +1 -0
  91. package/dist/index-BlOjO66K.js +17618 -0
  92. package/dist/index-BlOjO66K.js.map +1 -0
  93. package/dist/index-BoGWnSNL.js +706 -0
  94. package/dist/index-BoGWnSNL.js.map +1 -0
  95. package/dist/index-BsRrEiOu.js +98 -0
  96. package/dist/index-BsRrEiOu.js.map +1 -0
  97. package/dist/index-C2sFZMth.js +391 -0
  98. package/dist/index-C2sFZMth.js.map +1 -0
  99. package/dist/index-C7xwOjmS.js +291 -0
  100. package/dist/index-C7xwOjmS.js.map +1 -0
  101. package/dist/index-CA3lFUx6.js +315 -0
  102. package/dist/index-CA3lFUx6.js.map +1 -0
  103. package/dist/index-CB-pPTIf.js +98 -0
  104. package/dist/index-CB-pPTIf.js.map +1 -0
  105. package/dist/index-CCa6x1FE.js +386 -0
  106. package/dist/index-CCa6x1FE.js.map +1 -0
  107. package/dist/index-CD4DINI1.js +158 -0
  108. package/dist/index-CD4DINI1.js.map +1 -0
  109. package/dist/index-CE0B_fcG.js +328 -0
  110. package/dist/index-CE0B_fcG.js.map +1 -0
  111. package/dist/{index-CUWCqMoD.js → index-CVGAEPMV.js} +33 -27
  112. package/dist/index-CVGAEPMV.js.map +1 -0
  113. package/dist/index-CmaT2afn.js +332 -0
  114. package/dist/index-CmaT2afn.js.map +1 -0
  115. package/dist/index-D8sUxXp5.js +83 -0
  116. package/dist/index-D8sUxXp5.js.map +1 -0
  117. package/dist/index-DIz8Vpn-.js +737 -0
  118. package/dist/index-DIz8Vpn-.js.map +1 -0
  119. package/dist/index-DNP1xT-S.js +408 -0
  120. package/dist/index-DNP1xT-S.js.map +1 -0
  121. package/dist/index-DOAqdvnQ.js +862 -0
  122. package/dist/index-DOAqdvnQ.js.map +1 -0
  123. package/dist/index-DVUMFbgi.js +152 -0
  124. package/dist/index-DVUMFbgi.js.map +1 -0
  125. package/dist/index-VeTBKRVd.js +83 -0
  126. package/dist/index-VeTBKRVd.js.map +1 -0
  127. package/dist/index-dXZeR7Bx.js +1767 -0
  128. package/dist/index-dXZeR7Bx.js.map +1 -0
  129. package/dist/index-gtqbIb6T.js +62 -0
  130. package/dist/index-gtqbIb6T.js.map +1 -0
  131. package/dist/index-pN_pUAQ7.js +2426 -0
  132. package/dist/index-pN_pUAQ7.js.map +1 -0
  133. package/dist/index-wasu5VX0.js +1150 -0
  134. package/dist/index-wasu5VX0.js.map +1 -0
  135. package/dist/javascript-Bt8B7yTi.js +993 -0
  136. package/dist/javascript-Bt8B7yTi.js.map +1 -0
  137. package/dist/julia-Bs6JJhYG.js +408 -0
  138. package/dist/julia-Bs6JJhYG.js.map +1 -0
  139. package/dist/livescript-DmzgM3Yt.js +297 -0
  140. package/dist/livescript-DmzgM3Yt.js.map +1 -0
  141. package/dist/lua-8cJgIlqe.js +257 -0
  142. package/dist/lua-8cJgIlqe.js.map +1 -0
  143. package/dist/mathematica-DNLOL9PQ.js +111 -0
  144. package/dist/mathematica-DNLOL9PQ.js.map +1 -0
  145. package/dist/mbox-Ga7d4MMN.js +118 -0
  146. package/dist/mbox-Ga7d4MMN.js.map +1 -0
  147. package/dist/mirc-Dma3B8rS.js +108 -0
  148. package/dist/mirc-Dma3B8rS.js.map +1 -0
  149. package/dist/mllike-DHn7xckP.js +335 -0
  150. package/dist/mllike-DHn7xckP.js.map +1 -0
  151. package/dist/modelica-0d55jYY0.js +148 -0
  152. package/dist/modelica-0d55jYY0.js.map +1 -0
  153. package/dist/mscgen-DdqZYINH.js +136 -0
  154. package/dist/mscgen-DdqZYINH.js.map +1 -0
  155. package/dist/mumps-Btr8VblO.js +94 -0
  156. package/dist/mumps-Btr8VblO.js.map +1 -0
  157. package/dist/nginx-DTDtBDVN.js +142 -0
  158. package/dist/nginx-DTDtBDVN.js.map +1 -0
  159. package/dist/nsis-3zG7tgur.js +63 -0
  160. package/dist/nsis-3zG7tgur.js.map +1 -0
  161. package/dist/ntriples-CvgOYMpL.js +154 -0
  162. package/dist/ntriples-CvgOYMpL.js.map +1 -0
  163. package/dist/octave-DYBj3-tl.js +201 -0
  164. package/dist/octave-DYBj3-tl.js.map +1 -0
  165. package/dist/oz-R_e8WMIi.js +232 -0
  166. package/dist/oz-R_e8WMIi.js.map +1 -0
  167. package/dist/parse-CAqQaKsh.js +21685 -0
  168. package/dist/parse-CAqQaKsh.js.map +1 -0
  169. package/dist/pascal-GD8iposT.js +106 -0
  170. package/dist/pascal-GD8iposT.js.map +1 -0
  171. package/dist/perl-DL9mHpoi.js +1106 -0
  172. package/dist/perl-DL9mHpoi.js.map +1 -0
  173. package/dist/pig-C_4T4YIV.js +102 -0
  174. package/dist/pig-C_4T4YIV.js.map +1 -0
  175. package/dist/powershell-B0suO7Vd.js +329 -0
  176. package/dist/powershell-B0suO7Vd.js.map +1 -0
  177. package/dist/properties-BR-vP1aU.js +59 -0
  178. package/dist/properties-BR-vP1aU.js.map +1 -0
  179. package/dist/protobuf-BxgpyhoW.js +78 -0
  180. package/dist/protobuf-BxgpyhoW.js.map +1 -0
  181. package/dist/pug-vHnWR0UE.js +406 -0
  182. package/dist/pug-vHnWR0UE.js.map +1 -0
  183. package/dist/puppet-Bdao66PW.js +138 -0
  184. package/dist/puppet-Bdao66PW.js.map +1 -0
  185. package/dist/python-BFGRmuZ9.js +427 -0
  186. package/dist/python-BFGRmuZ9.js.map +1 -0
  187. package/dist/q-CrbCVq4a.js +132 -0
  188. package/dist/q-CrbCVq4a.js.map +1 -0
  189. package/dist/r-V7nswm59.js +171 -0
  190. package/dist/r-V7nswm59.js.map +1 -0
  191. package/dist/repl-sdk.js +7 -0
  192. package/dist/repl-sdk.js.map +1 -0
  193. package/dist/rpm-C-DLY-If.js +110 -0
  194. package/dist/rpm-C-DLY-If.js.map +1 -0
  195. package/dist/ruby-JDKLJNK0.js +331 -0
  196. package/dist/ruby-JDKLJNK0.js.map +1 -0
  197. package/dist/sas-D2UG-yhZ.js +208 -0
  198. package/dist/sas-D2UG-yhZ.js.map +1 -0
  199. package/dist/scheme-BKzrkGJD.js +223 -0
  200. package/dist/scheme-BKzrkGJD.js.map +1 -0
  201. package/dist/shell-BlsXDxCn.js +223 -0
  202. package/dist/shell-BlsXDxCn.js.map +1 -0
  203. package/dist/sieve-CjwBwOY5.js +136 -0
  204. package/dist/sieve-CjwBwOY5.js.map +1 -0
  205. package/dist/simple-mode-DMneyfDu.js +131 -0
  206. package/dist/simple-mode-DMneyfDu.js.map +1 -0
  207. package/dist/smalltalk-BOIGQuhN.js +122 -0
  208. package/dist/smalltalk-BOIGQuhN.js.map +1 -0
  209. package/dist/solr-CwD7U71z.js +70 -0
  210. package/dist/solr-CwD7U71z.js.map +1 -0
  211. package/dist/sparql-DYskk2vE.js +250 -0
  212. package/dist/sparql-DYskk2vE.js.map +1 -0
  213. package/dist/spreadsheet-Bgtt3oLP.js +88 -0
  214. package/dist/spreadsheet-Bgtt3oLP.js.map +1 -0
  215. package/dist/sql-Cei9CMfk.js +343 -0
  216. package/dist/sql-Cei9CMfk.js.map +1 -0
  217. package/dist/stex-C1nZSzAw.js +231 -0
  218. package/dist/stex-C1nZSzAw.js.map +1 -0
  219. package/dist/stylus-BkS-boTH.js +566 -0
  220. package/dist/stylus-BkS-boTH.js.map +1 -0
  221. package/dist/swift-FRZi1uvB.js +292 -0
  222. package/dist/swift-FRZi1uvB.js.map +1 -0
  223. package/dist/tcl-CUcaCdmq.js +115 -0
  224. package/dist/tcl-CUcaCdmq.js.map +1 -0
  225. package/dist/textile-BnFpjsrl.js +415 -0
  226. package/dist/textile-BnFpjsrl.js.map +1 -0
  227. package/dist/tiddlywiki-CjprD-Qp.js +219 -0
  228. package/dist/tiddlywiki-CjprD-Qp.js.map +1 -0
  229. package/dist/tiki-DK9DOeWn.js +269 -0
  230. package/dist/tiki-DK9DOeWn.js.map +1 -0
  231. package/dist/toml-BOuWGMcf.js +77 -0
  232. package/dist/toml-BOuWGMcf.js.map +1 -0
  233. package/dist/troff-E1bJ0PPL.js +62 -0
  234. package/dist/troff-E1bJ0PPL.js.map +1 -0
  235. package/dist/ttcn-cfg-Dc39-fIP.js +134 -0
  236. package/dist/ttcn-cfg-Dc39-fIP.js.map +1 -0
  237. package/dist/ttcn-tKd4HLu4.js +193 -0
  238. package/dist/ttcn-tKd4HLu4.js.map +1 -0
  239. package/dist/turtle-Dq7-1WAf.js +125 -0
  240. package/dist/turtle-Dq7-1WAf.js.map +1 -0
  241. package/dist/vb-Dp90gtsv.js +197 -0
  242. package/dist/vb-Dp90gtsv.js.map +1 -0
  243. package/dist/vbscript-Bfn8O8I7.js +479 -0
  244. package/dist/vbscript-Bfn8O8I7.js.map +1 -0
  245. package/dist/velocity-BwIZK1TH.js +150 -0
  246. package/dist/velocity-BwIZK1TH.js.map +1 -0
  247. package/dist/verilog-CnT9bMk0.js +430 -0
  248. package/dist/verilog-CnT9bMk0.js.map +1 -0
  249. package/dist/vhdl-DCkMIyT9.js +159 -0
  250. package/dist/vhdl-DCkMIyT9.js.map +1 -0
  251. package/dist/webidl-BTLTThCm.js +205 -0
  252. package/dist/webidl-BTLTThCm.js.map +1 -0
  253. package/dist/xquery-BrBUuxMR.js +526 -0
  254. package/dist/xquery-BrBUuxMR.js.map +1 -0
  255. package/dist/yacas-b5lAVEIl.js +131 -0
  256. package/dist/yacas-b5lAVEIl.js.map +1 -0
  257. package/dist/z80-ClgwfNdB.js +93 -0
  258. package/dist/z80-ClgwfNdB.js.map +1 -0
  259. package/package.json +10 -11
  260. package/src/compilers/ember/gjs.js +2 -2
  261. package/src/compilers/ember/gmd.js +1 -1
  262. package/src/compilers/markdown.js +1 -1
  263. package/src/compilers/react.js +15 -3
  264. package/dist/codemirror-D4aIVflZ.js +0 -110
  265. package/dist/codemirror-D4aIVflZ.js.map +0 -1
  266. package/dist/gjs-CzFzkEFv.js.map +0 -1
  267. package/dist/gmd-D9OXs2v3.js.map +0 -1
  268. package/dist/index-CUWCqMoD.js.map +0 -1
  269. package/dist/index.js +0 -7
  270. package/dist/index.js.map +0 -1
  271. package/dist/parse-aBKk9rfS.js +0 -328
  272. package/dist/parse-aBKk9rfS.js.map +0 -1
@@ -1,328 +0,0 @@
1
- import rehypeRaw from "rehype-raw";
2
- import rehypeStringify from "rehype-stringify";
3
- import remarkGfm from "remark-gfm";
4
- import remarkParse from "remark-parse";
5
- import remarkRehype from "remark-rehype";
6
- import { unified } from "unified";
7
- import { visit } from "unist-util-visit";
8
- import { kebabCase } from "change-case";
9
- import { n as nextId } from "./index-CUWCqMoD.js";
10
- const GLIMDOWN_PREVIEW = Symbol("__GLIMDOWN_PREVIEW__");
11
- const GLIMDOWN_RENDER = Symbol("__GLIMDOWN_RENDER__");
12
- function getDefaultId(children) {
13
- return formatDefaultId(extractText(children));
14
- }
15
- function extractText(children) {
16
- return children.map(
17
- /**
18
- * @param {any} child
19
- */
20
- (child) => {
21
- const isEmpty = !child.value?.trim();
22
- if (!isEmpty) {
23
- return child.value;
24
- } else if (child.children && child.children.length > 0) {
25
- return extractText(child.children);
26
- } else {
27
- return "";
28
- }
29
- }
30
- ).join(" ");
31
- }
32
- function formatDefaultId(value) {
33
- return kebabCase(value.replaceAll(/\\s+/g, " ").trim());
34
- }
35
- function setNodeId(node, id) {
36
- if (!node.data) node.data = {};
37
- if (!node.data.hProperties) node.data.hProperties = {};
38
- node.data.id = node.data.hProperties.id = id;
39
- }
40
- function headingId(options = { defaults: false }) {
41
- return function(node) {
42
- visit(node, "heading", (node2) => {
43
- const lastChild = node2.children[node2.children.length - 1];
44
- if (lastChild && lastChild.type === "text") {
45
- const string = lastChild.value.replace(/ +$/, "");
46
- const matched = string.match(/ {#([^]+?)}$/);
47
- if (matched) {
48
- return;
49
- }
50
- }
51
- setNodeId(node2, getDefaultId(node2.children));
52
- });
53
- };
54
- }
55
- function liveCodeExtraction(options) {
56
- const { code, demo, isLive, ALLOWED_FORMATS, isPreview, isBelow, needsLive, getFlavorFromMeta } = options;
57
- let { classList: snippetClasses } = code || {};
58
- let { classList: demoClasses } = demo || {};
59
- snippetClasses ??= [];
60
- demoClasses ??= [];
61
- function isRelevantCode(node) {
62
- if (node.type !== "code") return false;
63
- let { meta, lang } = node;
64
- if (!lang) {
65
- return false;
66
- }
67
- meta = meta?.trim() ?? "";
68
- if (!isLive(meta, lang)) {
69
- return false;
70
- }
71
- if (!ALLOWED_FORMATS.includes(lang)) {
72
- return false;
73
- }
74
- return true;
75
- }
76
- function enhance(code2, classes = []) {
77
- code2.data ??= {};
78
- code2.data["hProperties"] ??= {};
79
- code2.data["hProperties"][
80
- /** @type {string} */
81
- /** @type {unknown} */
82
- GLIMDOWN_PREVIEW
83
- ] = true;
84
- return {
85
- data: {
86
- hProperties: { className: classes, "data-repl-output": true }
87
- },
88
- type: "div",
89
- hProperties: { className: classes },
90
- children: [code2]
91
- };
92
- }
93
- function flatReplaceAt(array, index, replacement) {
94
- array.splice(index, 1, ...replacement);
95
- }
96
- const seen = /* @__PURE__ */ new Set();
97
- return function transformer(tree, file) {
98
- visit(tree, ["code"], function(node, index, parent) {
99
- if (parent === null || parent === void 0) return;
100
- if (index === null || index === void 0) return;
101
- if (node.type !== "code") return;
102
- const codeNode = node;
103
- const isRelevant = isRelevantCode(codeNode);
104
- if (!isRelevant) {
105
- const enhanced = enhance(codeNode, snippetClasses);
106
- parent.children[index] = /** @type {unknown} */
107
- enhanced;
108
- return "skip";
109
- }
110
- if (seen.has(codeNode)) {
111
- return "skip";
112
- }
113
- seen.add(codeNode);
114
- const { meta, lang, value } = codeNode;
115
- if (!lang) {
116
- return "skip";
117
- }
118
- if (!meta) {
119
- if (needsLive(lang)) {
120
- return "skip";
121
- }
122
- }
123
- file.data.liveCode ??= [];
124
- const code2 = value.trim();
125
- const id = nextId();
126
- const invokeNode = (
127
- /** @type {import('mdast').Html} */
128
- {
129
- type: "html",
130
- data: {
131
- hProperties: {
132
- [
133
- /** @type {string} */
134
- /** @type {unknown} */
135
- GLIMDOWN_RENDER
136
- ]: true
137
- }
138
- },
139
- value: `<div id="${id}" class="${demoClasses}"></div>`
140
- }
141
- );
142
- const wrapper = enhance(codeNode, snippetClasses);
143
- file.data.liveCode.push({
144
- format: lang,
145
- flavor: getFlavorFromMeta(meta ?? "", lang),
146
- code: code2,
147
- placeholderId: id,
148
- meta
149
- });
150
- const live = isLive(meta || "", lang);
151
- const preview = isPreview(meta || "");
152
- const below = isBelow(meta || "");
153
- if (live && preview && below) {
154
- flatReplaceAt(
155
- /** @type {unknown[]} */
156
- parent.children,
157
- index,
158
- [
159
- /** @type {unknown} */
160
- wrapper,
161
- /** @type {unknown} */
162
- invokeNode
163
- ]
164
- );
165
- return "skip";
166
- }
167
- if (live && preview) {
168
- flatReplaceAt(
169
- /** @type {unknown[]} */
170
- parent.children,
171
- index,
172
- [
173
- /** @type {unknown} */
174
- invokeNode,
175
- /** @type {unknown} */
176
- wrapper
177
- ]
178
- );
179
- return "skip";
180
- }
181
- if (live) {
182
- parent.children[index] = /** @type {unknown} */
183
- invokeNode;
184
- return "skip";
185
- }
186
- parent.children[index] = /** @type {unknown} */
187
- wrapper;
188
- return;
189
- });
190
- };
191
- }
192
- function sanitizeForGlimmer() {
193
- return function transformer(tree) {
194
- visit(tree, "element", function visitor(node) {
195
- if (node.type === "element" && "tagName" in node) {
196
- const element = (
197
- /** @type {import('hast').Element} */
198
- node
199
- );
200
- if (!["pre", "code"].includes(element.tagName)) return;
201
- visit(node, "text", function textVisitor(textNode) {
202
- if (textNode.type === "text") {
203
- const text = (
204
- /** @type {import('hast').Text} */
205
- textNode
206
- );
207
- text.value = text.value.replace(/{{/g, "\\{{");
208
- }
209
- });
210
- return "skip";
211
- }
212
- });
213
- };
214
- }
215
- function buildCompiler(options) {
216
- let compiler = unified().use(remarkParse).use(remarkGfm, { singleTilde: true }).use(headingId);
217
- if (options.remarkPlugins) {
218
- options.remarkPlugins.forEach((plugin) => {
219
- if (Array.isArray(plugin)) {
220
- compiler = compiler.use(plugin[0], ...plugin.slice(1));
221
- } else {
222
- compiler = compiler.use(plugin);
223
- }
224
- });
225
- }
226
- compiler = compiler.use(liveCodeExtraction, {
227
- code: {
228
- classList: ["repl-sdk__snippet"],
229
- ...options.code
230
- },
231
- demo: {
232
- classList: ["repl-sdk__demo"],
233
- ...options.code
234
- },
235
- isLive: options.isLive,
236
- isPreview: options.isPreview,
237
- isBelow: options.isBelow,
238
- needsLive: options.needsLive,
239
- ALLOWED_FORMATS: options.ALLOWED_FORMATS,
240
- getFlavorFromMeta: options.getFlavorFromMeta
241
- });
242
- compiler = compiler.use(remarkRehype, { allowDangerousHtml: true });
243
- compiler = compiler.use(() => (tree) => {
244
- visit(
245
- /** @type {import('hast').Root} */
246
- tree,
247
- function(node) {
248
- const nodeObj = (
249
- /** @type {Record<string, unknown>} */
250
- /** @type {unknown} */
251
- node
252
- );
253
- const properties = (
254
- /** @type {Record<string, unknown>} */
255
- typeof node === "object" && node !== null && "properties" in node ? node.properties : {}
256
- );
257
- if (properties?.[
258
- /** @type {string} */
259
- /** @type {unknown} */
260
- GLIMDOWN_PREVIEW
261
- ]) {
262
- return "skip";
263
- }
264
- if (nodeObj.type === "element" || "tagName" in nodeObj && nodeObj.tagName === "code") {
265
- if (properties?.[
266
- /** @type {string} */
267
- /** @type {unknown} */
268
- GLIMDOWN_RENDER
269
- ]) {
270
- nodeObj.type = "glimmer_raw";
271
- return;
272
- }
273
- return "skip";
274
- }
275
- if (nodeObj.type === "text" || nodeObj.type === "raw") {
276
- if ("value" in nodeObj && typeof nodeObj.value === "string" && nodeObj.value.match(/<\/?[_A-Z:0-9].*>/g)) {
277
- nodeObj.type = "glimmer_raw";
278
- }
279
- nodeObj.type = "glimmer_raw";
280
- return "skip";
281
- }
282
- return;
283
- }
284
- );
285
- });
286
- if (options.rehypePlugins) {
287
- options.rehypePlugins.forEach((plugin) => {
288
- if (Array.isArray(plugin)) {
289
- compiler = compiler.use(plugin[0], ...plugin.slice(1));
290
- } else {
291
- compiler = compiler.use(plugin);
292
- }
293
- });
294
- }
295
- compiler = compiler.use(rehypeRaw, { passThrough: ["glimmer_raw", "raw"] }).use(() => (tree) => {
296
- visit(
297
- /** @type {import('hast').Root} */
298
- tree,
299
- "glimmer_raw",
300
- (node) => {
301
- node.type = "raw";
302
- }
303
- );
304
- });
305
- compiler = compiler.use(sanitizeForGlimmer);
306
- compiler = compiler.use(rehypeStringify, {
307
- collapseEmptyAttributes: true,
308
- closeSelfClosing: true,
309
- allowParseErrors: true,
310
- allowDangerousCharacters: true,
311
- allowDangerousHtml: true
312
- });
313
- return compiler;
314
- }
315
- async function parseMarkdown(input, options) {
316
- const markdownCompiler = buildCompiler(options);
317
- const processed = await markdownCompiler.process(input);
318
- const liveCode = (
319
- /** @type {{ lang: string; format: string; code: string; name: string }[]} */
320
- processed.data.liveCode || []
321
- );
322
- const templateOnly = processed.toString();
323
- return { text: templateOnly, codeBlocks: liveCode };
324
- }
325
- export {
326
- parseMarkdown
327
- };
328
- //# sourceMappingURL=parse-aBKk9rfS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-aBKk9rfS.js","sources":["../src/compilers/markdown/const.js","../src/compilers/markdown/heading-id.js","../src/compilers/markdown/live-code-extraction.js","../src/compilers/markdown/sanitize-for-glimmer.js","../src/compilers/markdown/build-compiler.js","../src/compilers/markdown/parse.js"],"sourcesContent":["export const GLIMDOWN_PREVIEW = Symbol('__GLIMDOWN_PREVIEW__');\nexport const GLIMDOWN_RENDER = Symbol('__GLIMDOWN_RENDER__');\n","import { kebabCase } from 'change-case';\nimport { visit } from 'unist-util-visit';\n\n/**\n * @param {import('mdast').PhrasingContent[]} children\n * @return {string}\n */\nfunction getDefaultId(children) {\n return formatDefaultId(extractText(children));\n}\n\n/**\n * @param {import('mdast').PhrasingContent[]} children\n * @return {string}\n */\nfunction extractText(children) {\n return children\n .map(\n /**\n * @param {any} child\n */\n (child) => {\n const isEmpty = !child.value?.trim();\n\n if (!isEmpty) {\n return child.value;\n } else if (child.children && child.children.length > 0) {\n return extractText(child.children);\n } else {\n return '';\n }\n }\n )\n .join(' ');\n}\n\n/**\n * @param {string} value\n */\nfunction formatDefaultId(value) {\n return kebabCase(value.replaceAll(/\\\\s+/g, ' ').trim());\n}\n\n/**\n * @param {import('mdast').Heading} node\n * @param {string} id\n */\nfunction setNodeId(node, id) {\n if (!node.data) node.data = {};\n if (!node.data.hProperties) node.data.hProperties = {};\n\n /** @type {any} */ (node.data).id = node.data.hProperties.id = id;\n}\n\nexport function headingId(options = { defaults: false }) {\n /**\n * @param {import('mdast').Root} node\n */\n return function (node) {\n visit(node, 'heading', (node) => {\n const lastChild = node.children[node.children.length - 1];\n\n if (lastChild && lastChild.type === 'text') {\n const string = lastChild.value.replace(/ +$/, '');\n const matched = string.match(/ {#([^]+?)}$/);\n\n if (matched) {\n return;\n }\n }\n\n setNodeId(node, getDefaultId(node.children));\n });\n };\n}\n","import { visit } from 'unist-util-visit';\n\nimport { nextId } from '../../utils.js';\nimport { GLIMDOWN_PREVIEW, GLIMDOWN_RENDER } from './const.js';\n\n/**\n * Swaps live codeblocks with placeholders that the compiler can then\n * use to insert compiled-from-other-sources' code into those placeholders.\n *\n * @type {import('unified').Plugin<[\n * {\n * demo: {\n * classList: string[]\n * },\n * code: {\n * classList: string[]\n * },\n * isLive: (meta: string, lang: string) => boolean,\n * ALLOWED_FORMATS: string[],\n * isPreview: (meta: string) => boolean,\n * isBelow: (meta: string) => boolean,\n * needsLive: (lang: string) => boolean\n * getFlavorFromMeta: (meta: string, lang: string) => string | undefined\n * },\n * ], import('mdast').Root>}\n */\nexport function liveCodeExtraction(options) {\n const { code, demo, isLive, ALLOWED_FORMATS, isPreview, isBelow, needsLive, getFlavorFromMeta } =\n options;\n let { classList: snippetClasses } = code || {};\n let { classList: demoClasses } = demo || {};\n\n snippetClasses ??= [];\n demoClasses ??= [];\n\n /**\n * @param {import('mdast').Code} node\n */\n function isRelevantCode(node) {\n if (node.type !== 'code') return false;\n\n let { meta, lang } = node;\n\n if (!lang) {\n return false;\n }\n\n meta = meta?.trim() ?? '';\n\n if (!isLive(meta, lang)) {\n return false;\n }\n\n if (!ALLOWED_FORMATS.includes(lang)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * @param {import('mdast').Code} code\n * @param {string[]} [classes]\n */\n function enhance(code, classes = []) {\n code.data ??= {};\n code.data['hProperties'] ??= {};\n // This is secret-to-us-only API, so we don't really care about the type\n code.data['hProperties'][/** @type {string} */ (/** @type {unknown} */ (GLIMDOWN_PREVIEW))] =\n true;\n\n return {\n data: {\n hProperties: { className: classes, 'data-repl-output': true },\n },\n type: 'div',\n hProperties: { className: classes },\n children: [code],\n };\n }\n\n /**\n * @template T\n * @param {T[]} array\n * @param {number} index\n * @param {T[]} replacement\n */\n function flatReplaceAt(array, index, replacement) {\n array.splice(index, 1, ...replacement);\n }\n\n // because we mutate the tree as we iterate,\n // we need to make sure we don't loop forever\n const seen = new Set();\n\n return function transformer(tree, file) {\n visit(tree, ['code'], function (node, index, parent) {\n if (parent === null || parent === undefined) return;\n if (index === null || index === undefined) return;\n if (node.type !== 'code') return;\n\n /** @type {import('mdast').Code} */\n const codeNode = node;\n\n const isRelevant = isRelevantCode(codeNode);\n\n if (!isRelevant) {\n const enhanced = enhance(codeNode, snippetClasses);\n\n /** @type {unknown[]} */ (parent.children)[index] = /** @type {unknown} */ (enhanced);\n\n return 'skip';\n }\n\n if (seen.has(codeNode)) {\n return 'skip';\n }\n\n seen.add(codeNode);\n\n const { meta, lang, value } = codeNode;\n\n if (!lang) {\n return 'skip';\n }\n\n /**\n * Sometimes, meta is not required,\n * like with the `mermaid` language\n *\n * NOTE: that if a flavor is required, meta is present\n * if the flavor is provided\n */\n if (!meta) {\n if (needsLive(lang)) {\n return 'skip';\n }\n }\n\n file.data.liveCode ??= [];\n\n const code = value.trim();\n const id = nextId();\n\n const invokeNode = /** @type {import('mdast').Html} */ ({\n type: 'html',\n data: {\n hProperties: {\n [/** @type {string} */ (/** @type {unknown} */ (GLIMDOWN_RENDER))]: true,\n },\n },\n value: `<div id=\"${id}\" class=\"${demoClasses}\"></div>`,\n });\n\n const wrapper = enhance(codeNode, snippetClasses);\n\n /** @type {unknown[]} */ (file.data.liveCode).push({\n format: lang,\n flavor: getFlavorFromMeta(meta ?? '', lang),\n code,\n placeholderId: id,\n meta,\n });\n\n const live = isLive(meta || '', lang);\n const preview = isPreview(meta || '');\n const below = isBelow(meta || '');\n\n if (live && preview && below) {\n flatReplaceAt(/** @type {unknown[]} */ (parent.children), index, [\n /** @type {unknown} */ (wrapper),\n /** @type {unknown} */ (invokeNode),\n ]);\n\n return 'skip';\n }\n\n if (live && preview) {\n flatReplaceAt(/** @type {unknown[]} */ (parent.children), index, [\n /** @type {unknown} */ (invokeNode),\n /** @type {unknown} */ (wrapper),\n ]);\n\n return 'skip';\n }\n\n if (live) {\n /** @type {unknown[]} */ (parent.children)[index] = /** @type {unknown} */ (invokeNode);\n\n return 'skip';\n }\n\n /** @type {unknown[]} */ (parent.children)[index] = /** @type {unknown} */ (wrapper);\n\n return;\n });\n };\n}\n","import { visit } from 'unist-util-visit';\n\n/**\n * @type {import('unified').Plugin<[], import('hast').Root>}\n */\nexport function sanitizeForGlimmer(/* options */) {\n return function transformer(tree) {\n visit(tree, 'element', function visitor(node) {\n if (node.type === 'element' && 'tagName' in node) {\n const element = /** @type {import('hast').Element} */ (node);\n\n if (!['pre', 'code'].includes(element.tagName)) return;\n\n visit(node, 'text', function textVisitor(textNode) {\n if (textNode.type === 'text') {\n const text = /** @type {import('hast').Text} */ (textNode);\n\n text.value = text.value.replace(/{{/g, '\\\\{{');\n }\n });\n\n return 'skip';\n }\n });\n };\n}\n","/**\n * @typedef {import('unified').Plugin} UPlugin\n */\nimport rehypeRaw from 'rehype-raw';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport { unified } from 'unified';\nimport { visit } from 'unist-util-visit';\n\nimport { GLIMDOWN_PREVIEW, GLIMDOWN_RENDER } from './const.js';\nimport { headingId } from './heading-id.js';\nimport { liveCodeExtraction } from './live-code-extraction.js';\nimport { sanitizeForGlimmer } from './sanitize-for-glimmer.js';\n\n/**\n * @param {import('./types').InternalOptions} options\n *\n * @returns {import('unified').Processor<import('hast').Root>}\n */\nexport function buildCompiler(options) {\n let compiler = unified().use(remarkParse).use(remarkGfm, { singleTilde: true }).use(headingId);\n\n /**\n * If this were \"use\"d after `remarkRehype`,\n * remark is gone, and folks would need to work with rehype trees\n */\n if (options.remarkPlugins) {\n options.remarkPlugins.forEach((plugin) => {\n // Arrays are how plugins are passed options (for some reason?)\n // why not just invoke the the function?\n if (Array.isArray(plugin)) {\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(plugin[0], ...plugin.slice(1));\n } else {\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(plugin);\n }\n });\n }\n\n // TODO: we only want to do this when we have pre > code.\n // code can exist inline.\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(liveCodeExtraction, {\n code: {\n classList: ['repl-sdk__snippet'],\n ...options.code,\n },\n demo: {\n classList: ['repl-sdk__demo'],\n ...options.code,\n },\n isLive: options.isLive,\n isPreview: options.isPreview,\n isBelow: options.isBelow,\n needsLive: options.needsLive,\n ALLOWED_FORMATS: options.ALLOWED_FORMATS,\n getFlavorFromMeta: options.getFlavorFromMeta,\n });\n\n // .use(() => (tree) => visit(tree, (node) => console.log('i', node)))\n // remark rehype is needed to convert markdown to HTML\n // However, it also changes all the nodes, so we need another pass\n // to make sure our Glimmer-aware nodes are in tact\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(remarkRehype, { allowDangerousHtml: true });\n\n // Convert invocables to raw format, so Glimmer can invoke them\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(() => (/** @type {unknown} */ tree) => {\n visit(/** @type {import('hast').Root} */ (tree), function (node) {\n // We rely on an implicit transformation of data.hProperties => properties\n const nodeObj = /** @type {Record<string, unknown>} */ (/** @type {unknown} */ (node));\n const properties = /** @type {Record<string, unknown>} */ (\n typeof node === 'object' && node !== null && 'properties' in node ? node.properties : {}\n );\n\n if (properties?.[/** @type {string} */ (/** @type {unknown} */ (GLIMDOWN_PREVIEW))]) {\n return 'skip';\n }\n\n if (nodeObj.type === 'element' || ('tagName' in nodeObj && nodeObj.tagName === 'code')) {\n if (properties?.[/** @type {string} */ (/** @type {unknown} */ (GLIMDOWN_RENDER))]) {\n nodeObj.type = 'glimmer_raw';\n\n return;\n }\n\n return 'skip';\n }\n\n if (nodeObj.type === 'text' || nodeObj.type === 'raw') {\n // definitively not the better way, but this is supposed to detect \"glimmer\" nodes\n if (\n 'value' in nodeObj &&\n typeof nodeObj.value === 'string' &&\n nodeObj.value.match(/<\\/?[_A-Z:0-9].*>/g)\n ) {\n nodeObj.type = 'glimmer_raw';\n }\n\n nodeObj.type = 'glimmer_raw';\n\n return 'skip';\n }\n\n return;\n });\n });\n\n if (options.rehypePlugins) {\n options.rehypePlugins.forEach((plugin) => {\n // Arrays are how plugins are passed options (for some reason?)\n // why not just invoke the the function?\n if (Array.isArray(plugin)) {\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(plugin[0], ...plugin.slice(1));\n } else {\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(plugin);\n }\n });\n }\n\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler\n .use(rehypeRaw, { passThrough: ['glimmer_raw', 'raw'] })\n .use(() => (/** @type {unknown} */ tree) => {\n visit(/** @type {import('hast').Root} */ (tree), 'glimmer_raw', (node) => {\n /** @type {Record<string, unknown>} */ (node).type = 'raw';\n });\n });\n\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(sanitizeForGlimmer);\n\n // Finally convert to string! oofta!\n // @ts-ignore - unified processor types are complex and change as plugins are added\n compiler = compiler.use(rehypeStringify, {\n collapseEmptyAttributes: true,\n closeSelfClosing: true,\n allowParseErrors: true,\n allowDangerousCharacters: true,\n allowDangerousHtml: true,\n });\n\n // @ts-ignore\n return compiler;\n}\n","/**\n * @typedef {import('unified').Plugin} UPlugin\n */\nimport { buildCompiler } from './build-compiler.js';\n\n/**\n * @param {string} input\n * @param {import('./types').InternalOptions} options\n *\n * @returns {Promise<{ text: string; codeBlocks: { lang: string; format: string; code: string; name: string }[] }>}\n */\nexport async function parseMarkdown(input, options) {\n const markdownCompiler = buildCompiler(options);\n const processed = await markdownCompiler.process(input);\n const liveCode = /** @type {{ lang: string; format: string; code: string; name: string }[]} */ (\n processed.data.liveCode || []\n );\n // @ts-ignore - processed is typed as unknown due to unified processor complexity\n const templateOnly = processed.toString();\n\n return { text: templateOnly, codeBlocks: liveCode };\n}\n"],"names":["node","code"],"mappings":"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"}