marko 5.37.5 → 6.0.0-3.11

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 (648) hide show
  1. package/dist/common/attr-tag.d.ts +8 -0
  2. package/dist/common/compat-meta.d.ts +2 -0
  3. package/dist/common/for.d.ts +5 -0
  4. package/dist/common/helpers.d.ts +7 -0
  5. package/dist/common/meta.d.ts +2 -0
  6. package/dist/common/types.d.ts +105 -0
  7. package/dist/debug/dom.js +2111 -0
  8. package/dist/debug/dom.mjs +2088 -0
  9. package/dist/debug/html.js +2740 -0
  10. package/dist/debug/html.mjs +2663 -0
  11. package/dist/dom/abort-signal.d.ts +3 -0
  12. package/dist/dom/compat.d.ts +20 -0
  13. package/dist/dom/control-flow.d.ts +14 -0
  14. package/dist/dom/controllable.d.ts +12 -0
  15. package/dist/dom/dom.d.ts +19 -0
  16. package/dist/dom/event.d.ts +4 -0
  17. package/dist/dom/parse-html.d.ts +5 -0
  18. package/dist/dom/queue.d.ts +10 -0
  19. package/dist/dom/reconcile.d.ts +2 -0
  20. package/dist/dom/renderer.d.ts +21 -0
  21. package/dist/dom/resolve-cursor-position.d.ts +1 -0
  22. package/dist/dom/resume.d.ts +9 -0
  23. package/dist/dom/schedule.d.ts +2 -0
  24. package/dist/dom/scope.d.ts +7 -0
  25. package/dist/dom/signals.d.ts +39 -0
  26. package/dist/dom/template.d.ts +3 -0
  27. package/dist/dom/walker.d.ts +4 -0
  28. package/dist/dom.d.ts +15 -0
  29. package/dist/dom.js +1370 -0
  30. package/dist/dom.mjs +1350 -0
  31. package/dist/html/attrs.d.ts +14 -0
  32. package/dist/html/compat.d.ts +14 -0
  33. package/dist/html/content.d.ts +5 -0
  34. package/dist/html/dynamic-tag.d.ts +12 -0
  35. package/dist/html/for.d.ts +4 -0
  36. package/dist/html/inlined-runtimes.d.ts +2 -0
  37. package/dist/html/serializer.d.ts +14 -0
  38. package/dist/html/template.d.ts +3 -0
  39. package/dist/html/writer.d.ts +114 -0
  40. package/dist/html.d.ts +9 -0
  41. package/dist/html.js +1818 -0
  42. package/dist/html.mjs +1744 -0
  43. package/dist/translator/core/attrs.d.ts +3 -0
  44. package/dist/translator/core/client.d.ts +14 -0
  45. package/dist/translator/core/const.d.ts +3 -0
  46. package/dist/translator/core/debug.d.ts +3 -0
  47. package/dist/translator/core/define.d.ts +3 -0
  48. package/dist/translator/core/effect.d.ts +3 -0
  49. package/dist/translator/core/export.d.ts +3 -0
  50. package/dist/translator/core/for.d.ts +67 -0
  51. package/dist/translator/core/html-comment.d.ts +12 -0
  52. package/dist/translator/core/html-script.d.ts +9 -0
  53. package/dist/translator/core/html-style.d.ts +9 -0
  54. package/dist/translator/core/id.d.ts +3 -0
  55. package/dist/translator/core/if.d.ts +53 -0
  56. package/dist/translator/core/import.d.ts +3 -0
  57. package/dist/translator/core/index.d.ts +152 -0
  58. package/dist/translator/core/let.d.ts +8 -0
  59. package/dist/translator/core/lifecycle.d.ts +10 -0
  60. package/dist/translator/core/log.d.ts +3 -0
  61. package/dist/translator/core/return.d.ts +6 -0
  62. package/dist/translator/core/script.d.ts +3 -0
  63. package/dist/translator/core/server.d.ts +14 -0
  64. package/dist/translator/core/static.d.ts +14 -0
  65. package/dist/translator/core/style.d.ts +3 -0
  66. package/dist/translator/index.d.ts +201 -0
  67. package/dist/translator/index.js +9134 -490
  68. package/dist/translator/util/assert.d.ts +3 -0
  69. package/dist/translator/util/binding-has-downstream-expressions.d.ts +2 -0
  70. package/dist/translator/util/entry-builder.d.ts +19 -0
  71. package/dist/translator/util/evaluate.d.ts +11 -0
  72. package/dist/translator/util/for-each-identifier.d.ts +2 -0
  73. package/dist/translator/util/get-defined-binding-expression.d.ts +3 -0
  74. package/dist/translator/util/get-known-attr-values.d.ts +2 -0
  75. package/dist/translator/util/get-parent-tag.d.ts +2 -0
  76. package/dist/translator/util/get-root.d.ts +7 -0
  77. package/dist/translator/util/get-tag-name.d.ts +2 -0
  78. package/dist/translator/util/is-core-tag.d.ts +10 -0
  79. package/dist/translator/util/is-stateful.d.ts +3 -0
  80. package/dist/translator/util/is-static.d.ts +2 -0
  81. package/dist/translator/util/marko-config.d.ts +4 -0
  82. package/dist/translator/util/nested-attribute-tags.d.ts +17 -0
  83. package/dist/translator/util/normalize-string-expression.d.ts +3 -0
  84. package/dist/translator/util/optional.d.ts +20 -0
  85. package/dist/translator/util/plugin-hooks.d.ts +4 -0
  86. package/dist/translator/util/references.d.ts +84 -0
  87. package/dist/translator/util/runtime-info.d.ts +5 -0
  88. package/dist/translator/util/runtime.d.ts +15 -0
  89. package/dist/translator/util/scope-read.d.ts +6 -0
  90. package/dist/translator/util/sections.d.ts +51 -0
  91. package/dist/translator/util/signals.d.ts +61 -0
  92. package/dist/translator/util/simplify-fn.d.ts +5 -0
  93. package/dist/translator/util/state.d.ts +3 -0
  94. package/dist/translator/util/tag-name-type.d.ts +16 -0
  95. package/dist/translator/util/to-first-expression-or-block.d.ts +3 -0
  96. package/dist/translator/util/to-first-statement-or-block.d.ts +2 -0
  97. package/dist/translator/util/to-property-name.d.ts +7 -0
  98. package/dist/translator/util/translate-attrs.d.ts +12 -0
  99. package/dist/translator/util/translate-var.d.ts +2 -0
  100. package/dist/translator/util/traverse.d.ts +9 -0
  101. package/dist/translator/util/visitors.d.ts +11 -0
  102. package/dist/translator/util/walks.d.ts +15 -0
  103. package/dist/translator/util/with-previous-location.d.ts +2 -0
  104. package/dist/translator/util/writer.d.ts +13 -0
  105. package/dist/translator/visitors/cdata.d.ts +7 -0
  106. package/dist/translator/visitors/comment.d.ts +7 -0
  107. package/dist/translator/visitors/declaration.d.ts +7 -0
  108. package/dist/translator/visitors/document-type.d.ts +7 -0
  109. package/dist/translator/visitors/function.d.ts +19 -0
  110. package/dist/translator/visitors/import-declaration.d.ts +8 -0
  111. package/dist/translator/visitors/placeholder.d.ts +22 -0
  112. package/dist/translator/visitors/program/dom.d.ts +7 -0
  113. package/dist/translator/visitors/program/html.d.ts +8 -0
  114. package/dist/translator/visitors/program/index.d.ts +39 -0
  115. package/dist/translator/visitors/referenced-identifier.d.ts +7 -0
  116. package/dist/translator/visitors/scriptlet.d.ts +8 -0
  117. package/dist/translator/visitors/tag/attribute-tag.d.ts +11 -0
  118. package/dist/translator/visitors/tag/custom-tag.d.ts +19 -0
  119. package/dist/translator/visitors/tag/dynamic-tag.d.ts +18 -0
  120. package/dist/translator/visitors/tag/index.d.ts +15 -0
  121. package/dist/translator/visitors/tag/native-tag.d.ts +25 -0
  122. package/dist/translator/visitors/text.d.ts +7 -0
  123. package/package.json +34 -70
  124. package/tag-types/const.d.marko +7 -0
  125. package/tag-types/debug.d.marko +5 -0
  126. package/tag-types/define.d.marko +5 -0
  127. package/tag-types/do.d.marko +5 -0
  128. package/tag-types/effect.d.marko +5 -0
  129. package/tag-types/id.d.marko +3 -0
  130. package/tag-types/let.d.marko +8 -0
  131. package/tag-types/lifecycle.d.marko +7 -0
  132. package/tag-types/log.d.marko +5 -0
  133. package/tag-types/script.d.marko +5 -0
  134. package/README.md +0 -161
  135. package/bin/markoc +0 -2
  136. package/bin/markoc.js +0 -441
  137. package/browser-refresh.js +0 -5
  138. package/compiler-browser.marko +0 -15
  139. package/compiler.js +0 -7
  140. package/components-browser.marko +0 -15
  141. package/components.js +0 -7
  142. package/dist/build.json +0 -3
  143. package/dist/compiler/config.js +0 -45
  144. package/dist/compiler/index.js +0 -164
  145. package/dist/compiler/modules.js +0 -5
  146. package/dist/core-tags/components/init-components-tag.js +0 -54
  147. package/dist/core-tags/components/preferred-script-location-tag.js +0 -25
  148. package/dist/core-tags/components/preserve-tag.js +0 -1
  149. package/dist/core-tags/core/__flush_here_and_after__.js +0 -44
  150. package/dist/core-tags/core/await/AsyncValue.js +0 -121
  151. package/dist/core-tags/core/await/client-reorder-runtime.js +0 -51
  152. package/dist/core-tags/core/await/index.d.marko +0 -10
  153. package/dist/core-tags/core/await/renderer.js +0 -249
  154. package/dist/core-tags/core/await/reorderer-renderer.js +0 -156
  155. package/dist/index.js +0 -4
  156. package/dist/node-require/browser-refresh.js +0 -1
  157. package/dist/node-require/hot-reload.js +0 -45
  158. package/dist/node-require/index.js +0 -103
  159. package/dist/node_modules/@internal/components-beginComponent/index-browser.js +0 -23
  160. package/dist/node_modules/@internal/components-beginComponent/index.js +0 -84
  161. package/dist/node_modules/@internal/components-beginComponent/package.json +0 -11
  162. package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +0 -335
  163. package/dist/node_modules/@internal/components-define-widget-legacy/index.js +0 -18
  164. package/dist/node_modules/@internal/components-define-widget-legacy/package.json +0 -11
  165. package/dist/node_modules/@internal/components-endComponent/index-browser.js +0 -5
  166. package/dist/node_modules/@internal/components-endComponent/index.js +0 -11
  167. package/dist/node_modules/@internal/components-endComponent/package.json +0 -11
  168. package/dist/node_modules/@internal/components-entry/index-browser.js +0 -11
  169. package/dist/node_modules/@internal/components-entry/index.js +0 -301
  170. package/dist/node_modules/@internal/components-entry/package.json +0 -11
  171. package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +0 -76
  172. package/dist/node_modules/@internal/components-entry-legacy/index.js +0 -16
  173. package/dist/node_modules/@internal/components-entry-legacy/package.json +0 -11
  174. package/dist/node_modules/@internal/components-registry/index-browser.js +0 -586
  175. package/dist/node_modules/@internal/components-registry/index.js +0 -44
  176. package/dist/node_modules/@internal/components-registry/package.json +0 -11
  177. package/dist/node_modules/@internal/components-util/index-browser.js +0 -152
  178. package/dist/node_modules/@internal/components-util/index.js +0 -71
  179. package/dist/node_modules/@internal/components-util/package.json +0 -11
  180. package/dist/node_modules/@internal/create-readable/index-browser.js +0 -30
  181. package/dist/node_modules/@internal/create-readable/index.js +0 -57
  182. package/dist/node_modules/@internal/create-readable/package.json +0 -11
  183. package/dist/node_modules/@internal/loader/fallback-node.js +0 -89
  184. package/dist/node_modules/@internal/loader/index-browser.js +0 -2
  185. package/dist/node_modules/@internal/loader/index.js +0 -23
  186. package/dist/node_modules/@internal/loader/package.json +0 -10
  187. package/dist/node_modules/@internal/preserve-tag/index-browser.js +0 -46
  188. package/dist/node_modules/@internal/preserve-tag/index.js +0 -34
  189. package/dist/node_modules/@internal/preserve-tag/package.json +0 -11
  190. package/dist/node_modules/@internal/require/index-browser.js +0 -15
  191. package/dist/node_modules/@internal/require/index-legacy-browser.js +0 -20
  192. package/dist/node_modules/@internal/require/index-webpack.js +0 -16
  193. package/dist/node_modules/@internal/require/index.js +0 -15
  194. package/dist/node_modules/@internal/require/package.json +0 -11
  195. package/dist/node_modules/@internal/set-immediate/index-browser.js +0 -19
  196. package/dist/node_modules/@internal/set-immediate/index-worker.js +0 -31
  197. package/dist/node_modules/@internal/set-immediate/index.js +0 -3
  198. package/dist/node_modules/@internal/set-immediate/package.json +0 -11
  199. package/dist/node_modules/@internal/set-immediate/queueMicrotask.js +0 -8
  200. package/dist/runtime/RenderResult.js +0 -112
  201. package/dist/runtime/components/Component.js +0 -663
  202. package/dist/runtime/components/ComponentDef.js +0 -169
  203. package/dist/runtime/components/ComponentsContext.js +0 -59
  204. package/dist/runtime/components/GlobalComponentsContext.js +0 -10
  205. package/dist/runtime/components/KeySequence.js +0 -16
  206. package/dist/runtime/components/ServerComponent.js +0 -73
  207. package/dist/runtime/components/State.js +0 -101
  208. package/dist/runtime/components/attach-detach.js +0 -60
  209. package/dist/runtime/components/defineComponent.js +0 -60
  210. package/dist/runtime/components/dom-data.js +0 -8
  211. package/dist/runtime/components/event-delegation.js +0 -144
  212. package/dist/runtime/components/index.js +0 -1
  213. package/dist/runtime/components/legacy/browser.json +0 -9
  214. package/dist/runtime/components/legacy/defineComponent-legacy.js +0 -27
  215. package/dist/runtime/components/legacy/defineRenderer-legacy.js +0 -171
  216. package/dist/runtime/components/legacy/defineWidget-legacy.js +0 -1
  217. package/dist/runtime/components/legacy/dependencies/html.js +0 -3
  218. package/dist/runtime/components/legacy/dependencies/index.js +0 -177
  219. package/dist/runtime/components/legacy/dependencies/vdom.js +0 -3
  220. package/dist/runtime/components/legacy/index.js +0 -1
  221. package/dist/runtime/components/legacy/jquery.js +0 -52
  222. package/dist/runtime/components/legacy/ready.js +0 -152
  223. package/dist/runtime/components/legacy/renderer-legacy.js +0 -231
  224. package/dist/runtime/components/registry.js +0 -1
  225. package/dist/runtime/components/renderer.js +0 -236
  226. package/dist/runtime/components/update-manager.js +0 -94
  227. package/dist/runtime/createOut.js +0 -13
  228. package/dist/runtime/dom-insert.js +0 -77
  229. package/dist/runtime/events.js +0 -2
  230. package/dist/runtime/helpers/_change-case.js +0 -45
  231. package/dist/runtime/helpers/assign.js +0 -21
  232. package/dist/runtime/helpers/attr-tag.js +0 -43
  233. package/dist/runtime/helpers/class-value.js +0 -30
  234. package/dist/runtime/helpers/dynamic-tag.js +0 -181
  235. package/dist/runtime/helpers/empty-component.js +0 -1
  236. package/dist/runtime/helpers/merge.js +0 -13
  237. package/dist/runtime/helpers/of-fallback.js +0 -4
  238. package/dist/runtime/helpers/render-tag.js +0 -20
  239. package/dist/runtime/helpers/serialize-noop.js +0 -5
  240. package/dist/runtime/helpers/style-value.js +0 -45
  241. package/dist/runtime/helpers/tags-compat/dom-debug.js +0 -1
  242. package/dist/runtime/helpers/tags-compat/dom-debug.mjs +0 -4
  243. package/dist/runtime/helpers/tags-compat/dom.js +0 -1
  244. package/dist/runtime/helpers/tags-compat/dom.mjs +0 -4
  245. package/dist/runtime/helpers/tags-compat/html-debug.js +0 -3
  246. package/dist/runtime/helpers/tags-compat/html-debug.mjs +0 -4
  247. package/dist/runtime/helpers/tags-compat/html.js +0 -3
  248. package/dist/runtime/helpers/tags-compat/html.mjs +0 -4
  249. package/dist/runtime/helpers/tags-compat/runtime-dom.js +0 -239
  250. package/dist/runtime/helpers/tags-compat/runtime-html.js +0 -136
  251. package/dist/runtime/helpers/to-string.js +0 -5
  252. package/dist/runtime/html/AsyncStream.js +0 -805
  253. package/dist/runtime/html/BufferedWriter.js +0 -52
  254. package/dist/runtime/html/StringWriter.js +0 -73
  255. package/dist/runtime/html/helpers/_dynamic-attr.js +0 -35
  256. package/dist/runtime/html/helpers/attr.js +0 -80
  257. package/dist/runtime/html/helpers/attrs.js +0 -26
  258. package/dist/runtime/html/helpers/class-attr.js +0 -8
  259. package/dist/runtime/html/helpers/data-marko.js +0 -36
  260. package/dist/runtime/html/helpers/escape-quotes.js +0 -35
  261. package/dist/runtime/html/helpers/escape-script-placeholder.js +0 -24
  262. package/dist/runtime/html/helpers/escape-style-placeholder.js +0 -22
  263. package/dist/runtime/html/helpers/escape-xml.js +0 -21
  264. package/dist/runtime/html/helpers/merge-attrs.js +0 -55
  265. package/dist/runtime/html/helpers/props-script.js +0 -32
  266. package/dist/runtime/html/helpers/style-attr.js +0 -8
  267. package/dist/runtime/html/hot-reload.js +0 -26
  268. package/dist/runtime/html/index.js +0 -33
  269. package/dist/runtime/html/marko-namespace.js +0 -3
  270. package/dist/runtime/renderable.js +0 -194
  271. package/dist/runtime/vdom/AsyncVDOMBuilder.js +0 -456
  272. package/dist/runtime/vdom/VComment.js +0 -24
  273. package/dist/runtime/vdom/VComponent.js +0 -17
  274. package/dist/runtime/vdom/VDocumentFragment.js +0 -34
  275. package/dist/runtime/vdom/VElement.js +0 -375
  276. package/dist/runtime/vdom/VFragment.js +0 -26
  277. package/dist/runtime/vdom/VNode.js +0 -100
  278. package/dist/runtime/vdom/VText.js +0 -25
  279. package/dist/runtime/vdom/helpers/attrs.js +0 -62
  280. package/dist/runtime/vdom/helpers/const-element.js +0 -25
  281. package/dist/runtime/vdom/helpers/merge-attrs.js +0 -16
  282. package/dist/runtime/vdom/hot-reload.js +0 -115
  283. package/dist/runtime/vdom/index.js +0 -30
  284. package/dist/runtime/vdom/is-text-only.js +0 -10
  285. package/dist/runtime/vdom/marko-namespace.js +0 -3
  286. package/dist/runtime/vdom/morphdom/fragment.js +0 -95
  287. package/dist/runtime/vdom/morphdom/helpers.js +0 -42
  288. package/dist/runtime/vdom/morphdom/index.js +0 -741
  289. package/dist/runtime/vdom/parse-html.js +0 -18
  290. package/dist/runtime/vdom/vdom.js +0 -88
  291. package/dist/taglib/index.js +0 -51
  292. package/dist/translator/cdata/index.js +0 -15
  293. package/dist/translator/cdata/index[html].js +0 -15
  294. package/dist/translator/cdata/index[vdom].js +0 -12
  295. package/dist/translator/class.js +0 -65
  296. package/dist/translator/comment/index.js +0 -15
  297. package/dist/translator/comment/index[html].js +0 -17
  298. package/dist/translator/comment/index[vdom].js +0 -3
  299. package/dist/translator/declaration/index.js +0 -15
  300. package/dist/translator/declaration/index[html].js +0 -12
  301. package/dist/translator/declaration/index[vdom].js +0 -3
  302. package/dist/translator/document-type/index.js +0 -15
  303. package/dist/translator/document-type/index[html].js +0 -12
  304. package/dist/translator/document-type/index[vdom].js +0 -3
  305. package/dist/translator/placeholder/index.js +0 -15
  306. package/dist/translator/placeholder/index[html].js +0 -93
  307. package/dist/translator/placeholder/index[vdom].js +0 -22
  308. package/dist/translator/scriptlet.js +0 -4
  309. package/dist/translator/tag/attribute/directives/class.js +0 -42
  310. package/dist/translator/tag/attribute/directives/index.js +0 -15
  311. package/dist/translator/tag/attribute/directives/no-update-body-if.js +0 -15
  312. package/dist/translator/tag/attribute/directives/no-update-body.js +0 -10
  313. package/dist/translator/tag/attribute/directives/no-update-if.js +0 -12
  314. package/dist/translator/tag/attribute/directives/no-update.js +0 -48
  315. package/dist/translator/tag/attribute/directives/style.js +0 -42
  316. package/dist/translator/tag/attribute/index.js +0 -150
  317. package/dist/translator/tag/attribute/modifiers/index.js +0 -7
  318. package/dist/translator/tag/attribute/modifiers/no-update.js +0 -14
  319. package/dist/translator/tag/attribute/modifiers/scoped.js +0 -23
  320. package/dist/translator/tag/attribute-tag.js +0 -149
  321. package/dist/translator/tag/custom-tag.js +0 -146
  322. package/dist/translator/tag/dynamic-tag.js +0 -74
  323. package/dist/translator/tag/index.js +0 -287
  324. package/dist/translator/tag/macro-tag.js +0 -7
  325. package/dist/translator/tag/native-tag.js +0 -27
  326. package/dist/translator/tag/native-tag[html]/attributes.js +0 -151
  327. package/dist/translator/tag/native-tag[html]/index.js +0 -221
  328. package/dist/translator/tag/native-tag[vdom]/attributes.js +0 -105
  329. package/dist/translator/tag/native-tag[vdom]/index.js +0 -189
  330. package/dist/translator/tag/util.js +0 -246
  331. package/dist/translator/taglib/core/conditional/translate-else-if.js +0 -20
  332. package/dist/translator/taglib/core/conditional/translate-else.js +0 -20
  333. package/dist/translator/taglib/core/conditional/translate-if.js +0 -8
  334. package/dist/translator/taglib/core/conditional/util.js +0 -41
  335. package/dist/translator/taglib/core/index.js +0 -474
  336. package/dist/translator/taglib/core/macro/parse.js +0 -17
  337. package/dist/translator/taglib/core/macro/translate.js +0 -48
  338. package/dist/translator/taglib/core/parse-class.js +0 -79
  339. package/dist/translator/taglib/core/parse-export.js +0 -14
  340. package/dist/translator/taglib/core/parse-import.js +0 -14
  341. package/dist/translator/taglib/core/parse-module-code.js +0 -18
  342. package/dist/translator/taglib/core/parse-static.js +0 -18
  343. package/dist/translator/taglib/core/transform-style.js +0 -66
  344. package/dist/translator/taglib/core/translate-await.js +0 -41
  345. package/dist/translator/taglib/core/translate-body.js +0 -17
  346. package/dist/translator/taglib/core/translate-for.js +0 -156
  347. package/dist/translator/taglib/core/translate-html-comment.js +0 -52
  348. package/dist/translator/taglib/core/translate-include-content.js +0 -53
  349. package/dist/translator/taglib/core/translate-server-only.js +0 -5
  350. package/dist/translator/taglib/core/translate-while.js +0 -32
  351. package/dist/translator/taglib/index.js +0 -6
  352. package/dist/translator/taglib/migrate/all-templates.js +0 -46
  353. package/dist/translator/taglib/migrate/index.js +0 -5
  354. package/dist/translator/text/index.js +0 -10
  355. package/dist/translator/text/index[html].js +0 -12
  356. package/dist/translator/text/index[vdom].js +0 -20
  357. package/dist/translator/util/add-dependencies.js +0 -329
  358. package/dist/translator/util/escape-regexp.js +0 -4
  359. package/dist/translator/util/get-component-files.js +0 -86
  360. package/dist/translator/util/html-out-write.js +0 -15
  361. package/dist/translator/util/key-manager.js +0 -176
  362. package/dist/translator/util/optimize-html-writes.js +0 -52
  363. package/dist/translator/util/optimize-vdom-create.js +0 -164
  364. package/dist/translator/util/plugin-hooks.js +0 -22
  365. package/dist/translator/util/runtime-flags.js +0 -3
  366. package/dist/translator/util/vdom-out-write.js +0 -10
  367. package/dist/translator/util/with-previous-location.js +0 -6
  368. package/docs/10-awesome-marko-features.md +0 -291
  369. package/docs/body-content.md +0 -355
  370. package/docs/class-components.md +0 -1001
  371. package/docs/cloudflare-workers.md +0 -32
  372. package/docs/compiler-hooks.png +0 -0
  373. package/docs/compiler.md +0 -473
  374. package/docs/component-diagram.afdesign +0 -0
  375. package/docs/component-diagram.svg +0 -87
  376. package/docs/concise.md +0 -141
  377. package/docs/conditionals-and-lists.md +0 -72
  378. package/docs/core-tags.md +0 -325
  379. package/docs/custom-tags.md +0 -201
  380. package/docs/editor-plugins.md +0 -45
  381. package/docs/events.md +0 -131
  382. package/docs/express.md +0 -66
  383. package/docs/fastify.md +0 -65
  384. package/docs/getting-started.md +0 -95
  385. package/docs/http.md +0 -34
  386. package/docs/icons/js.svg +0 -4
  387. package/docs/icons/marko.svg +0 -1
  388. package/docs/icons/ts.svg +0 -1
  389. package/docs/installing.md +0 -51
  390. package/docs/koa.md +0 -35
  391. package/docs/lasso.md +0 -196
  392. package/docs/marko-5-upgrade.md +0 -59
  393. package/docs/marko-json.md +0 -248
  394. package/docs/marko-vs-react.md +0 -854
  395. package/docs/redux.md +0 -61
  396. package/docs/rendering.md +0 -268
  397. package/docs/rollup.md +0 -352
  398. package/docs/state.md +0 -105
  399. package/docs/structure.json +0 -49
  400. package/docs/styles.md +0 -29
  401. package/docs/syntax.md +0 -601
  402. package/docs/troubleshooting-streaming.md +0 -68
  403. package/docs/typescript.md +0 -406
  404. package/docs/vite.md +0 -86
  405. package/docs/webpack.md +0 -205
  406. package/docs/why-is-marko-fast.md +0 -239
  407. package/env.js +0 -7
  408. package/helpers/README.md +0 -3
  409. package/helpers/empty.js +0 -4
  410. package/helpers/notEmpty.js +0 -11
  411. package/index-browser.marko +0 -15
  412. package/index.d.ts +0 -375
  413. package/index.js +0 -7
  414. package/legacy-components-browser.marko +0 -15
  415. package/legacy-components.js +0 -7
  416. package/node-require.js +0 -8
  417. package/src/build.json +0 -3
  418. package/src/compiler/config.js +0 -45
  419. package/src/compiler/index.js +0 -164
  420. package/src/compiler/modules.js +0 -5
  421. package/src/core-tags/.eslintrc +0 -5
  422. package/src/core-tags/components/init-components-tag.js +0 -54
  423. package/src/core-tags/components/preferred-script-location-tag.js +0 -25
  424. package/src/core-tags/components/preserve-tag.js +0 -1
  425. package/src/core-tags/core/__flush_here_and_after__.js +0 -44
  426. package/src/core-tags/core/await/AsyncValue.js +0 -121
  427. package/src/core-tags/core/await/client-reorder-runtime.js +0 -51
  428. package/src/core-tags/core/await/index.d.marko +0 -10
  429. package/src/core-tags/core/await/renderer.js +0 -249
  430. package/src/core-tags/core/await/reorderer-renderer.js +0 -156
  431. package/src/index.js +0 -4
  432. package/src/node-require/browser-refresh.js +0 -18
  433. package/src/node-require/hot-reload.js +0 -45
  434. package/src/node-require/index.js +0 -103
  435. package/src/node_modules/@internal/components-beginComponent/index-browser.js +0 -23
  436. package/src/node_modules/@internal/components-beginComponent/index.js +0 -84
  437. package/src/node_modules/@internal/components-beginComponent/package.json +0 -11
  438. package/src/node_modules/@internal/components-define-widget-legacy/index-browser.js +0 -335
  439. package/src/node_modules/@internal/components-define-widget-legacy/index.js +0 -18
  440. package/src/node_modules/@internal/components-define-widget-legacy/package.json +0 -11
  441. package/src/node_modules/@internal/components-endComponent/index-browser.js +0 -5
  442. package/src/node_modules/@internal/components-endComponent/index.js +0 -11
  443. package/src/node_modules/@internal/components-endComponent/package.json +0 -11
  444. package/src/node_modules/@internal/components-entry/index-browser.js +0 -11
  445. package/src/node_modules/@internal/components-entry/index.js +0 -301
  446. package/src/node_modules/@internal/components-entry/package.json +0 -11
  447. package/src/node_modules/@internal/components-entry-legacy/index-browser.js +0 -76
  448. package/src/node_modules/@internal/components-entry-legacy/index.js +0 -16
  449. package/src/node_modules/@internal/components-entry-legacy/package.json +0 -11
  450. package/src/node_modules/@internal/components-registry/index-browser.js +0 -586
  451. package/src/node_modules/@internal/components-registry/index.js +0 -44
  452. package/src/node_modules/@internal/components-registry/package.json +0 -11
  453. package/src/node_modules/@internal/components-util/index-browser.js +0 -152
  454. package/src/node_modules/@internal/components-util/index.js +0 -75
  455. package/src/node_modules/@internal/components-util/package.json +0 -11
  456. package/src/node_modules/@internal/create-readable/index-browser.js +0 -30
  457. package/src/node_modules/@internal/create-readable/index.js +0 -57
  458. package/src/node_modules/@internal/create-readable/package.json +0 -11
  459. package/src/node_modules/@internal/loader/fallback-node.js +0 -89
  460. package/src/node_modules/@internal/loader/index-browser.js +0 -2
  461. package/src/node_modules/@internal/loader/index.js +0 -23
  462. package/src/node_modules/@internal/loader/package.json +0 -10
  463. package/src/node_modules/@internal/preserve-tag/index-browser.js +0 -46
  464. package/src/node_modules/@internal/preserve-tag/index.js +0 -34
  465. package/src/node_modules/@internal/preserve-tag/package.json +0 -11
  466. package/src/node_modules/@internal/require/index-browser.js +0 -15
  467. package/src/node_modules/@internal/require/index-legacy-browser.js +0 -20
  468. package/src/node_modules/@internal/require/index-webpack.js +0 -16
  469. package/src/node_modules/@internal/require/index.js +0 -15
  470. package/src/node_modules/@internal/require/package.json +0 -11
  471. package/src/node_modules/@internal/set-immediate/index-browser.js +0 -19
  472. package/src/node_modules/@internal/set-immediate/index-worker.js +0 -31
  473. package/src/node_modules/@internal/set-immediate/index.js +0 -3
  474. package/src/node_modules/@internal/set-immediate/package.json +0 -11
  475. package/src/node_modules/@internal/set-immediate/queueMicrotask.js +0 -8
  476. package/src/runtime/.eslintrc +0 -5
  477. package/src/runtime/RenderResult.js +0 -112
  478. package/src/runtime/components/Component.js +0 -663
  479. package/src/runtime/components/ComponentDef.js +0 -169
  480. package/src/runtime/components/ComponentsContext.js +0 -59
  481. package/src/runtime/components/GlobalComponentsContext.js +0 -10
  482. package/src/runtime/components/KeySequence.js +0 -16
  483. package/src/runtime/components/ServerComponent.js +0 -73
  484. package/src/runtime/components/State.js +0 -101
  485. package/src/runtime/components/attach-detach.js +0 -60
  486. package/src/runtime/components/defineComponent.js +0 -60
  487. package/src/runtime/components/dom-data.js +0 -8
  488. package/src/runtime/components/event-delegation.js +0 -144
  489. package/src/runtime/components/index.js +0 -1
  490. package/src/runtime/components/legacy/browser.json +0 -9
  491. package/src/runtime/components/legacy/defineComponent-legacy.js +0 -27
  492. package/src/runtime/components/legacy/defineRenderer-legacy.js +0 -171
  493. package/src/runtime/components/legacy/defineWidget-legacy.js +0 -1
  494. package/src/runtime/components/legacy/dependencies/html.js +0 -3
  495. package/src/runtime/components/legacy/dependencies/index.js +0 -177
  496. package/src/runtime/components/legacy/dependencies/vdom.js +0 -3
  497. package/src/runtime/components/legacy/index.js +0 -1
  498. package/src/runtime/components/legacy/jquery.js +0 -52
  499. package/src/runtime/components/legacy/ready.js +0 -152
  500. package/src/runtime/components/legacy/renderer-legacy.js +0 -231
  501. package/src/runtime/components/registry.js +0 -1
  502. package/src/runtime/components/renderer.js +0 -236
  503. package/src/runtime/components/update-manager.js +0 -94
  504. package/src/runtime/createOut.js +0 -13
  505. package/src/runtime/dom-insert.js +0 -77
  506. package/src/runtime/events.js +0 -2
  507. package/src/runtime/helpers/_change-case.js +0 -45
  508. package/src/runtime/helpers/assign.js +0 -21
  509. package/src/runtime/helpers/attr-tag.js +0 -43
  510. package/src/runtime/helpers/class-value.js +0 -30
  511. package/src/runtime/helpers/dynamic-tag.js +0 -181
  512. package/src/runtime/helpers/empty-component.js +0 -1
  513. package/src/runtime/helpers/merge.js +0 -13
  514. package/src/runtime/helpers/of-fallback.js +0 -4
  515. package/src/runtime/helpers/render-tag.js +0 -20
  516. package/src/runtime/helpers/serialize-noop.js +0 -5
  517. package/src/runtime/helpers/style-value.js +0 -45
  518. package/src/runtime/helpers/tags-compat/dom-debug.js +0 -1
  519. package/src/runtime/helpers/tags-compat/dom-debug.mjs +0 -4
  520. package/src/runtime/helpers/tags-compat/dom.js +0 -1
  521. package/src/runtime/helpers/tags-compat/dom.mjs +0 -4
  522. package/src/runtime/helpers/tags-compat/html-debug.js +0 -3
  523. package/src/runtime/helpers/tags-compat/html-debug.mjs +0 -4
  524. package/src/runtime/helpers/tags-compat/html.js +0 -3
  525. package/src/runtime/helpers/tags-compat/html.mjs +0 -4
  526. package/src/runtime/helpers/tags-compat/runtime-dom.js +0 -239
  527. package/src/runtime/helpers/tags-compat/runtime-html.js +0 -136
  528. package/src/runtime/helpers/to-string.js +0 -5
  529. package/src/runtime/html/AsyncStream.js +0 -805
  530. package/src/runtime/html/BufferedWriter.js +0 -52
  531. package/src/runtime/html/StringWriter.js +0 -73
  532. package/src/runtime/html/helpers/_dynamic-attr.js +0 -35
  533. package/src/runtime/html/helpers/attr.js +0 -80
  534. package/src/runtime/html/helpers/attrs.js +0 -26
  535. package/src/runtime/html/helpers/class-attr.js +0 -8
  536. package/src/runtime/html/helpers/data-marko.js +0 -36
  537. package/src/runtime/html/helpers/escape-quotes.js +0 -35
  538. package/src/runtime/html/helpers/escape-script-placeholder.js +0 -24
  539. package/src/runtime/html/helpers/escape-style-placeholder.js +0 -22
  540. package/src/runtime/html/helpers/escape-xml.js +0 -21
  541. package/src/runtime/html/helpers/merge-attrs.js +0 -55
  542. package/src/runtime/html/helpers/props-script.js +0 -32
  543. package/src/runtime/html/helpers/style-attr.js +0 -8
  544. package/src/runtime/html/hot-reload.js +0 -26
  545. package/src/runtime/html/index.js +0 -33
  546. package/src/runtime/html/marko-namespace.js +0 -3
  547. package/src/runtime/renderable.js +0 -194
  548. package/src/runtime/vdom/AsyncVDOMBuilder.js +0 -456
  549. package/src/runtime/vdom/VComment.js +0 -24
  550. package/src/runtime/vdom/VComponent.js +0 -17
  551. package/src/runtime/vdom/VDocumentFragment.js +0 -34
  552. package/src/runtime/vdom/VElement.js +0 -375
  553. package/src/runtime/vdom/VFragment.js +0 -26
  554. package/src/runtime/vdom/VNode.js +0 -100
  555. package/src/runtime/vdom/VText.js +0 -25
  556. package/src/runtime/vdom/helpers/attrs.js +0 -62
  557. package/src/runtime/vdom/helpers/const-element.js +0 -25
  558. package/src/runtime/vdom/helpers/merge-attrs.js +0 -16
  559. package/src/runtime/vdom/hot-reload.js +0 -115
  560. package/src/runtime/vdom/index.js +0 -30
  561. package/src/runtime/vdom/is-text-only.js +0 -10
  562. package/src/runtime/vdom/marko-namespace.js +0 -3
  563. package/src/runtime/vdom/morphdom/fragment.js +0 -95
  564. package/src/runtime/vdom/morphdom/helpers.js +0 -42
  565. package/src/runtime/vdom/morphdom/index.js +0 -741
  566. package/src/runtime/vdom/parse-html.js +0 -18
  567. package/src/runtime/vdom/vdom.js +0 -88
  568. package/src/taglib/index.js +0 -51
  569. package/src/translator/cdata/index.js +0 -15
  570. package/src/translator/cdata/index[html].js +0 -15
  571. package/src/translator/cdata/index[vdom].js +0 -12
  572. package/src/translator/class.js +0 -65
  573. package/src/translator/comment/index.js +0 -15
  574. package/src/translator/comment/index[html].js +0 -17
  575. package/src/translator/comment/index[vdom].js +0 -3
  576. package/src/translator/declaration/index.js +0 -15
  577. package/src/translator/declaration/index[html].js +0 -12
  578. package/src/translator/declaration/index[vdom].js +0 -3
  579. package/src/translator/document-type/index.js +0 -15
  580. package/src/translator/document-type/index[html].js +0 -12
  581. package/src/translator/document-type/index[vdom].js +0 -3
  582. package/src/translator/index.js +0 -552
  583. package/src/translator/placeholder/index.js +0 -15
  584. package/src/translator/placeholder/index[html].js +0 -93
  585. package/src/translator/placeholder/index[vdom].js +0 -22
  586. package/src/translator/scriptlet.js +0 -4
  587. package/src/translator/tag/attribute/directives/class.js +0 -42
  588. package/src/translator/tag/attribute/directives/index.js +0 -15
  589. package/src/translator/tag/attribute/directives/no-update-body-if.js +0 -15
  590. package/src/translator/tag/attribute/directives/no-update-body.js +0 -10
  591. package/src/translator/tag/attribute/directives/no-update-if.js +0 -12
  592. package/src/translator/tag/attribute/directives/no-update.js +0 -48
  593. package/src/translator/tag/attribute/directives/style.js +0 -42
  594. package/src/translator/tag/attribute/index.js +0 -150
  595. package/src/translator/tag/attribute/modifiers/index.js +0 -7
  596. package/src/translator/tag/attribute/modifiers/no-update.js +0 -14
  597. package/src/translator/tag/attribute/modifiers/scoped.js +0 -23
  598. package/src/translator/tag/attribute-tag.js +0 -149
  599. package/src/translator/tag/custom-tag.js +0 -146
  600. package/src/translator/tag/dynamic-tag.js +0 -74
  601. package/src/translator/tag/index.js +0 -287
  602. package/src/translator/tag/macro-tag.js +0 -7
  603. package/src/translator/tag/native-tag.js +0 -27
  604. package/src/translator/tag/native-tag[html]/attributes.js +0 -151
  605. package/src/translator/tag/native-tag[html]/index.js +0 -221
  606. package/src/translator/tag/native-tag[vdom]/attributes.js +0 -105
  607. package/src/translator/tag/native-tag[vdom]/index.js +0 -189
  608. package/src/translator/tag/util.js +0 -246
  609. package/src/translator/taglib/core/conditional/translate-else-if.js +0 -20
  610. package/src/translator/taglib/core/conditional/translate-else.js +0 -20
  611. package/src/translator/taglib/core/conditional/translate-if.js +0 -8
  612. package/src/translator/taglib/core/conditional/util.js +0 -41
  613. package/src/translator/taglib/core/index.js +0 -474
  614. package/src/translator/taglib/core/macro/parse.js +0 -17
  615. package/src/translator/taglib/core/macro/translate.js +0 -48
  616. package/src/translator/taglib/core/parse-class.js +0 -79
  617. package/src/translator/taglib/core/parse-export.js +0 -14
  618. package/src/translator/taglib/core/parse-import.js +0 -14
  619. package/src/translator/taglib/core/parse-module-code.js +0 -18
  620. package/src/translator/taglib/core/parse-static.js +0 -18
  621. package/src/translator/taglib/core/transform-style.js +0 -66
  622. package/src/translator/taglib/core/translate-await.js +0 -41
  623. package/src/translator/taglib/core/translate-body.js +0 -17
  624. package/src/translator/taglib/core/translate-for.js +0 -156
  625. package/src/translator/taglib/core/translate-html-comment.js +0 -52
  626. package/src/translator/taglib/core/translate-include-content.js +0 -53
  627. package/src/translator/taglib/core/translate-server-only.js +0 -5
  628. package/src/translator/taglib/core/translate-while.js +0 -32
  629. package/src/translator/taglib/index.js +0 -7
  630. package/src/translator/taglib/migrate/all-templates.js +0 -46
  631. package/src/translator/taglib/migrate/index.js +0 -5
  632. package/src/translator/text/index.js +0 -10
  633. package/src/translator/text/index[html].js +0 -12
  634. package/src/translator/text/index[vdom].js +0 -20
  635. package/src/translator/util/add-dependencies.js +0 -329
  636. package/src/translator/util/escape-regexp.js +0 -4
  637. package/src/translator/util/get-component-files.js +0 -86
  638. package/src/translator/util/html-out-write.js +0 -15
  639. package/src/translator/util/key-manager.js +0 -176
  640. package/src/translator/util/optimize-html-writes.js +0 -52
  641. package/src/translator/util/optimize-vdom-create.js +0 -164
  642. package/src/translator/util/plugin-hooks.js +0 -22
  643. package/src/translator/util/runtime-flags.js +0 -3
  644. package/src/translator/util/vdom-out-write.js +0 -10
  645. package/src/translator/util/with-previous-location.js +0 -6
  646. package/tags-html.d.ts +0 -3855
  647. package/translator/index.d.ts +0 -7
  648. package/translator/package.json +0 -5
@@ -1,239 +0,0 @@
1
- # Why is Marko Fast?
2
-
3
- <a href="https://medium.com/@psteeleidem/why-is-marko-fast-a20796cb8ae3">
4
- <img src="https://user-images.githubusercontent.com/1958812/28104838-d0182f48-6691-11e7-808d-d1ae2d0fed6d.png" alt="Marko logo" width="100%" />
5
- </a><br />
6
-
7
- > This article was published in May 2017. You can find the original ["Why is Marko Fast?" article here](https://medium.com/@psteeleidem/why-is-marko-fast-a20796cb8ae3)!
8
-
9
- At eBay we are using [Marko](https://markojs.com/) to render over a billion
10
- requests every day and this has required us to finely tune Marko, our open
11
- source UI library. We have heavily optimized Marko for fast rendering, [advanced
12
- performance
13
- techniques](https://tech.ebayinc.com/engineering/async-fragments-rediscovering-progressive-html-rendering-with-marko/)
14
- and to achieve a minimal page weight (~10kb gzipped). Performance is only one
15
- concern because we have also had to scale Marko to support development across
16
- hundreds of teams in a way that allows developers to efficiently create
17
- maintainable and robust web apps.
18
-
19
- We have created [our own
20
- benchmarks](https://github.com/marko-js/isomorphic-ui-benchmarks) and we have
21
- [added Marko to other
22
- benchmarks](https://github.com/raxjs/server-side-rendering-comparison/pull/11),
23
- but benchmarks cannot always be trusted. While we make every effort to be fair
24
- with our benchmarks, what matters most is performance in real world applications
25
- as opposed to focusing on micro benchmarks. This is one reason that the V8 team
26
- has switched to [a new methodology to measure and understand real-world
27
- JavaScript
28
- performance](https://v8project.blogspot.com/2016/12/how-v8-measures-real-world-performance.html).
29
-
30
- Similarly, we’ve taken a look at how our developers are _actually_ writing their
31
- Marko components and have found patterns that could be further optimized.
32
- Instead of focusing on benchmarks in this article, I want to focus on the
33
- details of optimizations that we have applied to Marko.
34
-
35
- ### Multiple Compilation Outputs
36
-
37
- Marko is an isomorphic UI library that runs on both the server and in the
38
- browser. As [Michael Rawlings](https://medium.com/@mlrawlings) mentioned in
39
- “[Server-side Rendering
40
- Shootout](https://hackernoon.com/server-side-rendering-shootout-with-marko-preact-rax-react-and-vue-25e1ae17800f)”,
41
- when rendering on the server, Marko renders directly to a string representation
42
- of the document (HTML) that can be sent as the HTTP response.
43
-
44
- When rendering in the browser, an HTML string would have to be parsed in order
45
- to update the DOM. For this reason, Marko compiles a view to a program that
46
- renders directly to a virtual document (VDOM) tree that can be used to
47
- efficiently update the real DOM when targeting the browser.
48
-
49
- Given the following template:
50
-
51
- ```marko
52
- <div>Hello ${input.name}!</div>
53
- ```
54
-
55
- #### Compiled for the server
56
-
57
- The compiled output is optimized for streaming HTML output on the server:
58
-
59
- ```js
60
- var marko_template = require("marko/html").t(__filename),
61
- marko_helpers = require("marko/runtime/html/helpers"),
62
- marko_escapeXml = marko_helpers.x;
63
-
64
- function render(input, out) {
65
- out.w("<div>Hello " + marko_escapeXml(input.name) + "!</div>");
66
- }
67
- ```
68
-
69
- #### Compiled for the browser
70
-
71
- <!-- prettier-ignore -->
72
- ```js
73
- var marko_template = require("marko/vdom").t(__filename);
74
-
75
- function render(input, out) {
76
- out
77
- .e("DIV", null, 3)
78
- .t("Hello ")
79
- .t(input.name)
80
- .t("!");
81
- }
82
- ```
83
-
84
- The compiled output is optimized for virtual DOM rendering in the browser:
85
-
86
- ### Modular Runtime
87
-
88
- The Marko runtime is not distributed as a single JavaScript file. Instead, the
89
- Marko compiler generates a JavaScript module that will only import the parts of
90
- the runtime that are actually needed. This allows us to add new features to
91
- Marko without bloating existing applications. For example, given the following
92
- template:
93
-
94
- ```marko
95
- $ var color = 'red';
96
- <div style={backgroundColor: color}></div>
97
- ```
98
-
99
- In the above example, extra runtime code is needed to render the `style` attribute
100
- based on the JavaScript object that is provided. The compiled code that imports
101
- the `styleAttr` helper is shown below:
102
-
103
- ```js
104
- var marko_styleAttr = require("marko/runtime/vdom/helper-styleAttr");
105
-
106
- function render(input, out) {
107
- var color = "red";
108
- out.e(
109
- "DIV",
110
- {
111
- style: marko_styleAttr({
112
- backgroundColor: color,
113
- }),
114
- },
115
- 0,
116
- 4,
117
- );
118
- }
119
- ```
120
-
121
- ### High performance server-side rendering
122
-
123
- Compared to solutions based on JSX that exclusively do virtual DOM rendering,
124
- Marko has a huge advantage for server-side rendering. When rendering to a
125
- virtual DOM tree on the server it’s a two-step process to render HTML:
126
-
127
- - First pass to produce an entire virtual DOM tree in memory
128
- - Second pass to serialize the virtual DOM tree to an HTML string that can then be
129
- sent over the wire (this requires traversing the entire tree structure)
130
-
131
- In contrast, Marko renders directly to an HTML stream in a single pass. There is
132
- no intermediate tree data structure.
133
-
134
- ### Compile-time optimization of static sub-trees
135
-
136
- Given the following template:
137
-
138
- ```marko
139
- <div>This is a <strong>static</strong> node</div>
140
- ```
141
-
142
- Marko will recognize that the template fragment produces the same output every
143
- time and it will thus create the virtual DOM node once as shown in the following
144
- compiled output:
145
-
146
- ```js
147
- var marko_node0 = marko_createElement("DIV", null, 3, ...)
148
- .t("This is a ")
149
- .e("STRONG", null, 1)
150
- .t("static")
151
- .t(" node");
152
-
153
- function render(input, out) {
154
- out.n(marko_node0);
155
- }
156
- ```
157
-
158
- Rendering a static sub-tree has virtually zero cost. In addition, Marko will
159
- skip diffing/patching static sub-trees.
160
-
161
- Similarly, on the server, Marko will merge static parts of the template into a
162
- single string:
163
-
164
- ```js
165
- function render(input, out) {
166
- out.w("<div>This is a <strong>static</strong> node</div>");
167
- }
168
- ```
169
-
170
- ### Compile-time optimization of static attributes
171
-
172
- Marko will also optimize static attributes on dynamic elements.
173
-
174
- Given the following template:
175
-
176
- ```marko
177
- <div.hello>Hello ${input.name}!</div>
178
- ```
179
-
180
- Marko will produce the following compiled output:
181
-
182
- <!-- prettier-ignore -->
183
- ```js
184
- var marko_attrs0 = {
185
- class: "hello"
186
- };
187
-
188
- function render(input, out) {
189
- out
190
- .e("DIV", marko_attrs0, 3)
191
- .t("Hello ")
192
- .t(input.name)
193
- .t("!");
194
- }
195
- ```
196
-
197
- Notice that the attributes object is only created once and it is used for every
198
- render. In addition, no diffing/patching will happen for static attributes.
199
-
200
- ### Smart compiler
201
-
202
- With Marko we favor doing as much at compile-time as possible. This has made our
203
- compiler more complex, but it gives us significant gains at runtime. We have
204
- ~90% code coverage and over 2,000 tests to ensure that the compiler is working
205
- correctly. In addition, in many cases the Marko compiler provides hints to the
206
- runtime for a given template so that the runtime can optimize for specific
207
- patterns. For example, Marko recognizes if an HTML element only has `class`/`id`/`style` defined
208
- and the runtime optimizes for these virtual DOM nodes when doing
209
- diffing/patching (the Marko compiler generates code that flags simple virtual
210
- DOM nodes for targeted diffing/patching logic).
211
-
212
- ### Event delegation
213
-
214
- If you are building a UI component you will likely need to write code to handle
215
- various DOM events (`click`, `submit`, etc.). It is common for developers to write code that
216
- adds DOM event listeners using `dom.addEventListener(...)` or using a library such as jQuery. You can still
217
- do that when building UI components using Marko, but there is overhead in
218
- attaching listeners when lots of components are being initialized. Instead,
219
- Marko recommends using declarative event binding as shown below:
220
-
221
- ```marko
222
- <button type="button" on-click("handleClick")>
223
- Click Me
224
- </button>
225
- ```
226
-
227
- When using declarative event binding, no DOM event listeners are actually
228
- attached for events that bubble. Instead, Marko attaches a single listener on
229
- the root DOM element of the page for each DOM event that bubbles (done at
230
- startup). When Marko receives an event at the root it handles delegating the
231
- event to the appropriate components that are interested in that event. This is
232
- done by looking at the `event.target` property to see where the event originated and then
233
- walking up the tree to find components that need to be notified. As a result,
234
- there is slightly more work that is done when a DOM event is captured at the
235
- root, but this approach uses much less memory and reduces the amount of work
236
- that is done during initialization. The extra overhead of delegating events to
237
- components will not be noticeable so it is a very beneficial optimization.
238
-
239
- _Cover image credit: [Superhero by Gan Khoon Lay from the Noun Project](https://thenounproject.com/search/?q=superhero&i=690775)_
package/env.js DELETED
@@ -1,7 +0,0 @@
1
- var env = process.env || {};
2
- var NODE_ENV = env.NODE_ENV;
3
- var MARKO_DEBUG = env.MARKO_DEBUG;
4
-
5
- exports.isDebug = !(MARKO_DEBUG
6
- ? MARKO_DEBUG === "false" || MARKO_DEBUG === "0"
7
- : NODE_ENV && NODE_ENV !== "development");
package/helpers/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Marko Helpers
2
-
3
- This directory contains helpers that were deprecated in Marko v3. Marko v4/5 no longer adds these helpers to every compiled template, but you can still import them if needed.
package/helpers/empty.js DELETED
@@ -1,4 +0,0 @@
1
- var notEmpty = require("./notEmpty");
2
- module.exports = function empty(o) {
3
- return !notEmpty(o);
4
- };
@@ -1,11 +0,0 @@
1
- module.exports = function (o) {
2
- if (o == null) {
3
- return false;
4
- } else if (Array.isArray(o)) {
5
- return !!o.length;
6
- } else if (o === "") {
7
- return false;
8
- }
9
-
10
- return true;
11
- };
@@ -1,15 +0,0 @@
1
- <module-code(function(require, opts) {
2
- var file = `"./${opts.optimize ? "dist" : "src"}"`;
3
-
4
- if (opts.modules === "cjs") {
5
- return `module.exports = require(${file});\n`;
6
- } else {
7
- return `export * from ${file};\n`;
8
- }
9
- })/>
10
-
11
- // What's going on here? We are using Marko to do JavaScript code generation
12
- // during the module bundling phase to conditionally export either the
13
- // "src" or the "dist" folder based on whether or not we are doing a
14
- // debug or non-debug build. We are using Marko since we know the Marko compiler
15
- // is enabled already (no extra babel transform required).
package/index.d.ts DELETED
@@ -1,375 +0,0 @@
1
- import "./tags-html";
2
-
3
- declare module "*.marko" {
4
- const template: Marko.Template;
5
- export default template;
6
- }
7
-
8
- declare global {
9
- namespace NodeJS {
10
- interface ReadableStream {}
11
- }
12
-
13
- namespace Marko {
14
- /** A mutable global object for the current render. */
15
- export interface Global {
16
- /** A list of globals that should be serialized to the browser. */
17
- serializedGlobals?: Record<string, boolean>;
18
- /** A CSP Nonce to add to each script output from Marko. */
19
- cspNonce?: string;
20
- /** Used to uniquely identify a instance of a Marko runtime. */
21
- runtimeId?: string;
22
- /** Used for rendering multiple Marko templates in a single hydrated page. */
23
- componentIdPrefix?: string;
24
- [attr: PropertyKey]: unknown;
25
- }
26
-
27
- export type TemplateInput<Input> = Input & {
28
- $global?: Global;
29
- };
30
-
31
- export interface Out<Component extends Marko.Component = Marko.Component>
32
- extends PromiseLike<RenderResult<Component>> {
33
- /** The underlying ReadableStream Marko is writing into. */
34
- stream: unknown;
35
- /** A mutable global object for the current render. */
36
- global: Global;
37
- /** Disable all async rendering. Will error if something beings async. */
38
- sync(): void;
39
- /** Returns true if async rendering is disabled. */
40
- isSync(): boolean;
41
- /** Write unescaped text at the current stream position. */
42
- write(val: string | void): this;
43
- /** Write javascript content to be merged with the scripts Marko sends out on the next flush. */
44
- script(val: string | void): this;
45
- /** Returns the currently rendered html content. */
46
- toString(): string;
47
- /** Starts a new async/forked stream. */
48
- beginAsync(options?: {
49
- name?: string;
50
- timeout?: number;
51
- last?: boolean;
52
- }): Out;
53
- /** Marks the current stream as complete (async streams may still be executing). */
54
- end(val?: string | void): this;
55
- emit(eventName: PropertyKey, ...args: any[]): boolean;
56
- on(eventName: PropertyKey, listener: (...args: any[]) => any): this;
57
- once(eventName: PropertyKey, listener: (...args: any[]) => any): this;
58
- prependListener(
59
- eventName: PropertyKey,
60
- listener: (...args: any[]) => any,
61
- ): this;
62
- removeListener(
63
- eventName: PropertyKey,
64
- listener: (...args: any[]) => any,
65
- ): this;
66
- /** Register a callback executed when the last async out has completed. */
67
- onLast(listener: (next: () => void) => unknown): this;
68
- /** Pipe Marko's stream to another stream. */
69
- pipe(stream: unknown): this;
70
- /** Emits an error on the stream. */
71
- error(e: Error): this;
72
- /** Schedules a Marko to flush buffered html to the underlying stream. */
73
- flush(): this;
74
- /** Creates a detached out stream (used for out of order flushing). */
75
- createOut(): Out;
76
- /** Write escaped text at the current stream position. */
77
- text(val: string | void): void;
78
- }
79
-
80
- /** Body content created from by a component, typically held in an object with a renderBody property. */
81
-
82
- export interface Body<
83
- in Params extends readonly any[] = [],
84
- out Return = void,
85
- > {}
86
-
87
- /** Valid data types which can be passed in as a <${dynamic}/> tag name. */
88
- export type Renderable =
89
- | { renderBody: Body<any, any> | Template | string }
90
- | Body<any, any>
91
- | Template
92
- | string;
93
-
94
- /** Extract the return tag type from a renderBody. */
95
- export type BodyReturnType<B> =
96
- B extends Body<any, infer Return> ? Return : never;
97
-
98
- /** Extract the tag parameter types received by a renderBody. */
99
- export type BodyParameters<B> =
100
- B extends Body<infer Params, any> ? Params : never;
101
-
102
- export class Component<Input = unknown, State = unknown>
103
- implements Emitter
104
- {
105
- /** A unique id for this instance. */
106
- public readonly id: string;
107
- /** The top level element rendered by this instance. */
108
- public readonly el: Element | void;
109
- /** The attributes passed to this instance. */
110
- public readonly input: Input;
111
- /** @deprecated */
112
- public readonly els: Element[];
113
- /** Mutable state that when changed causes a rerender. */
114
- state: State;
115
-
116
- /** Returns the amount of event handlers listening to a specific event. */
117
- listenerCount(eventName: PropertyKey): number;
118
- /**
119
- * Used to wrap an existing event emitted and ensure that all events are
120
- * cleaned up once this component is destroyed
121
- * */
122
- subscribeTo(
123
- emitter: unknown,
124
- ): Omit<Emitter, "listenerCount" | "prependListener" | "emit">;
125
- /** Emits an event on the component instance. */
126
- emit(eventName: PropertyKey, ...args: any[]): boolean;
127
- /** Listen to an event on the component instance. */
128
- on(eventName: PropertyKey, listener: (...args: any[]) => any): this;
129
- /** Listen to an event on the component instance once. */
130
- once(eventName: PropertyKey, listener: (...args: any[]) => any): this;
131
- /** Listen to an event on the component instance before all other listeners. */
132
- prependListener(
133
- eventName: PropertyKey,
134
- listener: (...args: any[]) => any,
135
- ): this;
136
- /** Remove a listener from the component instance. */
137
- removeListener(
138
- eventName: PropertyKey,
139
- listener: (...args: any[]) => any,
140
- ): this;
141
- /** Remove all listeners from the component instance. */
142
- removeAllListeners(eventName?: PropertyKey): this;
143
- /** Removes the component instance from the DOM and cleans up all active event handlers including all children. */
144
- destroy(): void;
145
- /** Schedule an update (similar to if a state had been changed). */
146
- forceUpdate(): void;
147
- /** Generates a unique id derived from the current unique instance id (similar to :scoped in the template). */
148
- elId(key?: string, index?: number): string;
149
- /** @alias elId */
150
- getElId(key?: string, index?: number): string;
151
- /** Gets an element reference by its `key` attribute in the template. */
152
- getEl<T extends Element | void = Element | void>(
153
- key?: string,
154
- index?: number,
155
- ): T;
156
- /** Gets all element references by their `key` attribute in the template. */
157
- getEls<T extends Element[] = Element[]>(key: string): T;
158
- /** Gets a component reference by its `key` attribute in the template. */
159
- getComponent<T extends Component | void = Component | void>(
160
- key: string,
161
- index?: number,
162
- ): T;
163
- /** Gets all component references by their `key` attribute in the template. */
164
- getComponents<T extends Component[] = Component[]>(key: string): T;
165
- /** True if this instance has been removed from the dom. */
166
- /** True if this instance is scheduled to rerender. */
167
- isDestroyed(): boolean;
168
- /** Replace the entire state object with a new one, removing old properties. */
169
- replaceState(state: this["state"]): void;
170
- /**
171
- * Update a property on this.state (should prefer mutating this.state directly).
172
- * When passed an object as the first argument, it will be merged into the state.
173
- */
174
- setState<Key extends PropertyKey>(
175
- name: Key & keyof this["state"],
176
- value: (this["state"] & Record<PropertyKey, unknown>)[Key],
177
- ): void;
178
- setState(value: Partial<this["state"]>): void;
179
-
180
- /** Schedules an update related to a specific state property and optionally updates the value. */
181
- setStateDirty<Key extends PropertyKey>(
182
- name: Key & keyof this["state"],
183
- value?: (this["state"] & Record<PropertyKey, unknown>)[Key],
184
- ): void;
185
- /** Synchronously flush any scheduled updates. */
186
- update(): void;
187
- /** Appends the dom for the current instance to a parent DOM element. */
188
- appendTo(target: ParentNode): this;
189
- /** Inserts the dom for the current instance after a sibling DOM element. */
190
- insertAfter(target: ChildNode): this;
191
- /** Inserts the dom for the current instance before a sibling DOM element. */
192
- insertBefore(target: ChildNode): this;
193
- /** Prepends the dom for the current instance to a parent DOM element. */
194
- prependTo(target: ParentNode): this;
195
- /** Replaces an existing DOM element with the dom for the current instance. */
196
- replace(target: ChildNode): this;
197
- /** Replaces the children of an existing DOM element with the dom for the current instance. */
198
- replaceChildrenOf(target: ParentNode): this;
199
- // /** Called when the component is firsted created. */
200
- // onCreate?(input: this["input"], out: Marko.Out): void;
201
- // /** Called every time the component receives input from it's parent. */
202
- // onInput?(input: this["input"], out: Marko.Out): void | this["input"];
203
- // /** Called after a component has successfully rendered, but before it's update has been applied to the dom. */
204
- // onRender?(out: Marko.Out): void;
205
- // /** Called after the first time the component renders and is attached to the dom. */
206
- // onMount?(): void;
207
- // /** Called when a components render has been applied to the DOM (excluding when it is initially mounted). */
208
- // onUpdate?(): void;
209
- // /** Called when a component is destroyed and removed from the dom. */
210
- // onDestroy?(): void;
211
- }
212
-
213
- /** The top level api for a Marko Template. */
214
- export abstract class Template<Input = unknown, Return = unknown> {
215
- /** Creates a Marko compatible output stream. */
216
- createOut(): Out;
217
-
218
- /**
219
- * The folowing types are processed up by the @marko/language-tools
220
- * and inlined into the compiled template.
221
- *
222
- * This is done to support generics on each of these methods
223
- * until TypeScript supports higher kinded types.
224
- *
225
- * https://github.com/microsoft/TypeScript/issues/1213
226
- */
227
-
228
- /** @marko-overload-start */
229
- /** Asynchronously render the template. */
230
- abstract render(
231
- input: Marko.TemplateInput<Input>,
232
- stream?: {
233
- write: (chunk: string) => void;
234
- end: (chunk?: string) => void;
235
- },
236
- ): Marko.Out<Marko.Component>;
237
-
238
- /** Asynchronously render the template in buffered mode. */
239
- abstract render(
240
- input: Marko.TemplateInput<Input>,
241
- cb?: (
242
- err: Error | null,
243
- result: Marko.RenderResult<Marko.Component>,
244
- ) => void,
245
- ): Marko.Out<Marko.Component>;
246
-
247
- /** Synchronously render the template. */
248
- abstract renderSync(
249
- input: Marko.TemplateInput<Input>,
250
- ): Marko.RenderResult<Marko.Component>;
251
-
252
- /** Synchronously render a template to a string. */
253
- abstract renderToString(input: Marko.TemplateInput<Input>): string;
254
-
255
- /** Render a template and return a stream.Readable in nodejs or a ReadableStream in a web worker environment. */
256
- abstract stream(
257
- input: Marko.TemplateInput<Input>,
258
- ): ReadableStream<string> & NodeJS.ReadableStream;
259
- /** @marko-overload-end */
260
- }
261
-
262
- export interface RenderResult<
263
- out Component extends Marko.Component = Marko.Component,
264
- > {
265
- /** Returns the component created as a result of rendering the template. */
266
- getComponent(): Component;
267
- getComponents(selector?: any): any;
268
- /** Triggers the mount lifecycle of a component without necessarily attaching it to the DOM. */
269
- afterInsert(host?: any): this;
270
- /** Gets the DOM node rendered by a template. */
271
- getNode(host?: any): Node;
272
- /** Gets the HTML output of the rendered template. */
273
- toString(): string;
274
- /** Appends the dom of the rendered template to a parent DOM element. */
275
- appendTo(target: ParentNode): this;
276
- /** Inserts the dom of the rendered template after a sibling DOM element. */
277
- insertAfter(target: ChildNode): this;
278
- /** Inserts the dom of the rendered template before a sibling DOM element. */
279
- insertBefore(target: ChildNode): this;
280
- /** Prepends the dom of the rendered template to a parent DOM element. */
281
- prependTo(target: ParentNode): this;
282
- /** Replaces an existing DOM element with the dom of the rendered template. */
283
- replace(target: ChildNode): this;
284
- /** Replaces the children of an existing DOM element with the dom of the rendered template. */
285
- replaceChildrenOf(target: ParentNode): this;
286
- out: Out<Component>;
287
- /** @deprecated */
288
- document: any;
289
- /** @deprecated */
290
- getOutput(): string;
291
- /** @deprecated */
292
- html: string;
293
- /** @deprecated */
294
- context: Out<Component>;
295
- }
296
-
297
- export interface Emitter {
298
- listenerCount(eventName: PropertyKey): number;
299
- emit(eventName: PropertyKey, ...args: any[]): boolean;
300
- on(eventName: PropertyKey, listener: (...args: any[]) => any): this;
301
- once(eventName: PropertyKey, listener: (...args: any[]) => any): this;
302
- prependListener(
303
- eventName: PropertyKey,
304
- listener: (...args: any[]) => any,
305
- ): this;
306
- removeListener(
307
- eventName: PropertyKey,
308
- listener: (...args: any[]) => any,
309
- ): this;
310
- removeAllListeners(eventName?: PropertyKey): this;
311
- }
312
-
313
- export type AttrTag<T> = T & {
314
- [Symbol.iterator](): Iterator<T>;
315
- };
316
-
317
- /**
318
- * @deprecated Prefer to use AttrTag
319
- */
320
- export type RepeatableAttrTag<T> = AttrTag<T>;
321
-
322
- export interface NativeTag<
323
- Input extends Record<string, any>,
324
- Return extends Element,
325
- > {
326
- input: Input;
327
- return: { value: () => Return };
328
- }
329
- export interface NativeTags {
330
- [name: string]: NativeTag<Record<string, any>, Element>;
331
- }
332
-
333
- export type Input<Name> = 0 extends 1 & Name
334
- ? any
335
- : Name extends string
336
- ? Name extends keyof NativeTags
337
- ? NativeTags[Name]["input"]
338
- : Record<string, unknown>
339
- : Name extends
340
- | Template<infer Input, any>
341
- | { _(): () => (input: infer Input) => any }
342
- ? Input
343
- : Name extends Body<infer Args, any>
344
- ? Args extends {
345
- length: infer Length;
346
- }
347
- ? number extends Length
348
- ? Args[0] | undefined
349
- : 0 extends Length
350
- ? undefined
351
- : Args[0]
352
- : never
353
- : never;
354
-
355
- export type Return<Name> = 0 extends 1 & Name
356
- ? any
357
- : Name extends string
358
- ? Name extends keyof NativeTags
359
- ? NativeTags[Name]["return"]
360
- : () => Element
361
- : Name extends
362
- | { _(): () => (input: any) => { return: infer Return } }
363
- | Template<any, infer Return>
364
- | Body<any, infer Return>
365
- ? Return
366
- : never;
367
-
368
- /** @deprecated @see {@link Marko.Input} */
369
- export type NativeTagInput<Name extends keyof NativeTags> =
370
- NativeTags[Name]["input"];
371
- /** @deprecated @see {@link Marko.Return} */
372
- export type NativeTagReturn<Name extends keyof NativeTags> =
373
- NativeTags[Name]["return"];
374
- }
375
- }
package/index.js DELETED
@@ -1,7 +0,0 @@
1
- var isDebug = require("./env").isDebug;
2
-
3
- if (isDebug) {
4
- module.exports = require("./src/");
5
- } else {
6
- module.exports = require("./dist/");
7
- }
@@ -1,15 +0,0 @@
1
- <module-code(function(require, opts) {
2
- var file = `"./${opts.optimize ? "dist" : "src"}/runtime/components/legacy"`;
3
-
4
- if (opts.modules === "cjs") {
5
- return `module.exports = require(${file});\n`;
6
- } else {
7
- return `export { default } from ${file};\nexport * from ${file};\n`;
8
- }
9
- })/>
10
-
11
- // What's going on here? We are using Marko to do JavaScript code generation
12
- // during the module bundling phase to conditionally export either the
13
- // "src" or the "dist" folder based on whether or not we are doing a
14
- // debug or non-debug build. We are using Marko since we know the Marko compiler
15
- // is enabled already (no extra babel transform required).