marko 5.37.6 → 6.0.0-3.12
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.
- package/dist/common/attr-tag.d.ts +8 -0
- package/dist/common/compat-meta.d.ts +2 -0
- package/dist/common/for.d.ts +5 -0
- package/dist/common/helpers.d.ts +7 -0
- package/dist/common/meta.d.ts +2 -0
- package/dist/common/types.d.ts +105 -0
- package/dist/debug/dom.js +2111 -0
- package/dist/debug/dom.mjs +2088 -0
- package/dist/debug/html.js +2740 -0
- package/dist/debug/html.mjs +2663 -0
- package/dist/dom/abort-signal.d.ts +3 -0
- package/dist/dom/compat.d.ts +20 -0
- package/dist/dom/control-flow.d.ts +14 -0
- package/dist/dom/controllable.d.ts +12 -0
- package/dist/dom/dom.d.ts +19 -0
- package/dist/dom/event.d.ts +4 -0
- package/dist/dom/parse-html.d.ts +5 -0
- package/dist/dom/queue.d.ts +10 -0
- package/dist/dom/reconcile.d.ts +2 -0
- package/dist/dom/renderer.d.ts +21 -0
- package/dist/dom/resolve-cursor-position.d.ts +1 -0
- package/dist/dom/resume.d.ts +9 -0
- package/dist/dom/schedule.d.ts +2 -0
- package/dist/dom/scope.d.ts +7 -0
- package/dist/dom/signals.d.ts +39 -0
- package/dist/dom/template.d.ts +3 -0
- package/dist/dom/walker.d.ts +4 -0
- package/dist/dom.d.ts +15 -0
- package/dist/dom.js +1370 -0
- package/dist/dom.mjs +1350 -0
- package/dist/html/attrs.d.ts +14 -0
- package/dist/html/compat.d.ts +14 -0
- package/dist/html/content.d.ts +5 -0
- package/dist/html/dynamic-tag.d.ts +12 -0
- package/dist/html/for.d.ts +4 -0
- package/dist/html/inlined-runtimes.d.ts +2 -0
- package/dist/html/serializer.d.ts +14 -0
- package/dist/html/template.d.ts +3 -0
- package/dist/html/writer.d.ts +114 -0
- package/dist/html.d.ts +9 -0
- package/dist/html.js +1818 -0
- package/dist/html.mjs +1744 -0
- package/dist/translator/core/attrs.d.ts +3 -0
- package/dist/translator/core/client.d.ts +14 -0
- package/dist/translator/core/const.d.ts +3 -0
- package/dist/translator/core/debug.d.ts +3 -0
- package/dist/translator/core/define.d.ts +3 -0
- package/dist/translator/core/effect.d.ts +3 -0
- package/dist/translator/core/export.d.ts +3 -0
- package/dist/translator/core/for.d.ts +67 -0
- package/dist/translator/core/html-comment.d.ts +12 -0
- package/dist/translator/core/html-script.d.ts +9 -0
- package/dist/translator/core/html-style.d.ts +9 -0
- package/dist/translator/core/id.d.ts +3 -0
- package/dist/translator/core/if.d.ts +53 -0
- package/dist/translator/core/import.d.ts +3 -0
- package/dist/translator/core/index.d.ts +152 -0
- package/dist/translator/core/let.d.ts +8 -0
- package/dist/translator/core/lifecycle.d.ts +10 -0
- package/dist/translator/core/log.d.ts +3 -0
- package/dist/translator/core/return.d.ts +6 -0
- package/dist/translator/core/script.d.ts +3 -0
- package/dist/translator/core/server.d.ts +14 -0
- package/dist/translator/core/static.d.ts +14 -0
- package/dist/translator/core/style.d.ts +3 -0
- package/dist/translator/index.d.ts +201 -0
- package/dist/translator/index.js +9134 -490
- package/dist/translator/util/assert.d.ts +3 -0
- package/dist/translator/util/binding-has-downstream-expressions.d.ts +2 -0
- package/dist/translator/util/entry-builder.d.ts +19 -0
- package/dist/translator/util/evaluate.d.ts +11 -0
- package/dist/translator/util/for-each-identifier.d.ts +2 -0
- package/dist/translator/util/get-defined-binding-expression.d.ts +3 -0
- package/dist/translator/util/get-known-attr-values.d.ts +2 -0
- package/dist/translator/util/get-parent-tag.d.ts +2 -0
- package/dist/translator/util/get-root.d.ts +7 -0
- package/dist/translator/util/get-tag-name.d.ts +2 -0
- package/dist/translator/util/is-core-tag.d.ts +10 -0
- package/dist/translator/util/is-stateful.d.ts +3 -0
- package/dist/translator/util/is-static.d.ts +2 -0
- package/dist/translator/util/marko-config.d.ts +4 -0
- package/dist/translator/util/nested-attribute-tags.d.ts +17 -0
- package/dist/translator/util/normalize-string-expression.d.ts +3 -0
- package/dist/translator/util/optional.d.ts +20 -0
- package/dist/translator/util/plugin-hooks.d.ts +4 -0
- package/dist/translator/util/references.d.ts +84 -0
- package/dist/translator/util/runtime-info.d.ts +5 -0
- package/dist/translator/util/runtime.d.ts +15 -0
- package/dist/translator/util/scope-read.d.ts +6 -0
- package/dist/translator/util/sections.d.ts +51 -0
- package/dist/translator/util/signals.d.ts +61 -0
- package/dist/translator/util/simplify-fn.d.ts +5 -0
- package/dist/translator/util/state.d.ts +3 -0
- package/dist/translator/util/tag-name-type.d.ts +16 -0
- package/dist/translator/util/to-first-expression-or-block.d.ts +3 -0
- package/dist/translator/util/to-first-statement-or-block.d.ts +2 -0
- package/dist/translator/util/to-property-name.d.ts +7 -0
- package/dist/translator/util/translate-attrs.d.ts +12 -0
- package/dist/translator/util/translate-var.d.ts +2 -0
- package/dist/translator/util/traverse.d.ts +9 -0
- package/dist/translator/util/visitors.d.ts +11 -0
- package/dist/translator/util/walks.d.ts +15 -0
- package/dist/translator/util/with-previous-location.d.ts +2 -0
- package/dist/translator/util/writer.d.ts +13 -0
- package/dist/translator/visitors/cdata.d.ts +7 -0
- package/dist/translator/visitors/comment.d.ts +7 -0
- package/dist/translator/visitors/declaration.d.ts +7 -0
- package/dist/translator/visitors/document-type.d.ts +7 -0
- package/dist/translator/visitors/function.d.ts +19 -0
- package/dist/translator/visitors/import-declaration.d.ts +8 -0
- package/dist/translator/visitors/placeholder.d.ts +22 -0
- package/dist/translator/visitors/program/dom.d.ts +7 -0
- package/dist/translator/visitors/program/html.d.ts +8 -0
- package/dist/translator/visitors/program/index.d.ts +39 -0
- package/dist/translator/visitors/referenced-identifier.d.ts +7 -0
- package/dist/translator/visitors/scriptlet.d.ts +8 -0
- package/dist/translator/visitors/tag/attribute-tag.d.ts +11 -0
- package/dist/translator/visitors/tag/custom-tag.d.ts +19 -0
- package/dist/translator/visitors/tag/dynamic-tag.d.ts +18 -0
- package/dist/translator/visitors/tag/index.d.ts +15 -0
- package/dist/translator/visitors/tag/native-tag.d.ts +25 -0
- package/dist/translator/visitors/text.d.ts +7 -0
- package/index.d.ts +30 -261
- package/package.json +40 -67
- package/tag-types/const.d.marko +7 -0
- package/tag-types/debug.d.marko +5 -0
- package/tag-types/define.d.marko +5 -0
- package/tag-types/do.d.marko +5 -0
- package/tag-types/effect.d.marko +5 -0
- package/tag-types/id.d.marko +3 -0
- package/tag-types/let.d.marko +8 -0
- package/tag-types/lifecycle.d.marko +7 -0
- package/tag-types/log.d.marko +5 -0
- package/tag-types/script.d.marko +5 -0
- package/tags-html.d.ts +85 -5
- package/README.md +0 -161
- package/bin/markoc +0 -2
- package/bin/markoc.js +0 -441
- package/browser-refresh.js +0 -5
- package/compiler-browser.marko +0 -15
- package/compiler.js +0 -7
- package/components-browser.marko +0 -15
- package/components.js +0 -7
- package/dist/build.json +0 -3
- package/dist/compiler/config.js +0 -45
- package/dist/compiler/index.js +0 -164
- package/dist/compiler/modules.js +0 -5
- package/dist/core-tags/components/init-components-tag.js +0 -54
- package/dist/core-tags/components/preferred-script-location-tag.js +0 -25
- package/dist/core-tags/components/preserve-tag.js +0 -1
- package/dist/core-tags/core/__flush_here_and_after__.js +0 -44
- package/dist/core-tags/core/await/AsyncValue.js +0 -121
- package/dist/core-tags/core/await/client-reorder-runtime.js +0 -51
- package/dist/core-tags/core/await/index.d.marko +0 -10
- package/dist/core-tags/core/await/renderer.js +0 -249
- package/dist/core-tags/core/await/reorderer-renderer.js +0 -156
- package/dist/index.js +0 -4
- package/dist/node-require/browser-refresh.js +0 -1
- package/dist/node-require/hot-reload.js +0 -45
- package/dist/node-require/index.js +0 -103
- package/dist/node_modules/@internal/components-beginComponent/index-browser.js +0 -23
- package/dist/node_modules/@internal/components-beginComponent/index.js +0 -84
- package/dist/node_modules/@internal/components-beginComponent/package.json +0 -11
- package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +0 -335
- package/dist/node_modules/@internal/components-define-widget-legacy/index.js +0 -18
- package/dist/node_modules/@internal/components-define-widget-legacy/package.json +0 -11
- package/dist/node_modules/@internal/components-endComponent/index-browser.js +0 -5
- package/dist/node_modules/@internal/components-endComponent/index.js +0 -11
- package/dist/node_modules/@internal/components-endComponent/package.json +0 -11
- package/dist/node_modules/@internal/components-entry/index-browser.js +0 -11
- package/dist/node_modules/@internal/components-entry/index.js +0 -301
- package/dist/node_modules/@internal/components-entry/package.json +0 -11
- package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +0 -76
- package/dist/node_modules/@internal/components-entry-legacy/index.js +0 -16
- package/dist/node_modules/@internal/components-entry-legacy/package.json +0 -11
- package/dist/node_modules/@internal/components-registry/index-browser.js +0 -586
- package/dist/node_modules/@internal/components-registry/index.js +0 -44
- package/dist/node_modules/@internal/components-registry/package.json +0 -11
- package/dist/node_modules/@internal/components-util/index-browser.js +0 -152
- package/dist/node_modules/@internal/components-util/index.js +0 -71
- package/dist/node_modules/@internal/components-util/package.json +0 -11
- package/dist/node_modules/@internal/create-readable/index-browser.js +0 -30
- package/dist/node_modules/@internal/create-readable/index.js +0 -57
- package/dist/node_modules/@internal/create-readable/package.json +0 -11
- package/dist/node_modules/@internal/loader/fallback-node.js +0 -89
- package/dist/node_modules/@internal/loader/index-browser.js +0 -2
- package/dist/node_modules/@internal/loader/index.js +0 -23
- package/dist/node_modules/@internal/loader/package.json +0 -10
- package/dist/node_modules/@internal/preserve-tag/index-browser.js +0 -46
- package/dist/node_modules/@internal/preserve-tag/index.js +0 -34
- package/dist/node_modules/@internal/preserve-tag/package.json +0 -11
- package/dist/node_modules/@internal/require/index-browser.js +0 -15
- package/dist/node_modules/@internal/require/index-legacy-browser.js +0 -20
- package/dist/node_modules/@internal/require/index-webpack.js +0 -16
- package/dist/node_modules/@internal/require/index.js +0 -15
- package/dist/node_modules/@internal/require/package.json +0 -11
- package/dist/node_modules/@internal/set-immediate/index-browser.js +0 -19
- package/dist/node_modules/@internal/set-immediate/index-worker.js +0 -31
- package/dist/node_modules/@internal/set-immediate/index.js +0 -3
- package/dist/node_modules/@internal/set-immediate/package.json +0 -11
- package/dist/node_modules/@internal/set-immediate/queueMicrotask.js +0 -8
- package/dist/runtime/RenderResult.js +0 -112
- package/dist/runtime/components/Component.js +0 -663
- package/dist/runtime/components/ComponentDef.js +0 -169
- package/dist/runtime/components/ComponentsContext.js +0 -59
- package/dist/runtime/components/GlobalComponentsContext.js +0 -10
- package/dist/runtime/components/KeySequence.js +0 -16
- package/dist/runtime/components/ServerComponent.js +0 -73
- package/dist/runtime/components/State.js +0 -101
- package/dist/runtime/components/attach-detach.js +0 -60
- package/dist/runtime/components/defineComponent.js +0 -60
- package/dist/runtime/components/dom-data.js +0 -8
- package/dist/runtime/components/event-delegation.js +0 -144
- package/dist/runtime/components/index.js +0 -1
- package/dist/runtime/components/legacy/browser.json +0 -9
- package/dist/runtime/components/legacy/defineComponent-legacy.js +0 -27
- package/dist/runtime/components/legacy/defineRenderer-legacy.js +0 -171
- package/dist/runtime/components/legacy/defineWidget-legacy.js +0 -1
- package/dist/runtime/components/legacy/dependencies/html.js +0 -3
- package/dist/runtime/components/legacy/dependencies/index.js +0 -177
- package/dist/runtime/components/legacy/dependencies/vdom.js +0 -3
- package/dist/runtime/components/legacy/index.js +0 -1
- package/dist/runtime/components/legacy/jquery.js +0 -52
- package/dist/runtime/components/legacy/ready.js +0 -152
- package/dist/runtime/components/legacy/renderer-legacy.js +0 -231
- package/dist/runtime/components/registry.js +0 -1
- package/dist/runtime/components/renderer.js +0 -236
- package/dist/runtime/components/update-manager.js +0 -94
- package/dist/runtime/createOut.js +0 -13
- package/dist/runtime/dom-insert.js +0 -77
- package/dist/runtime/events.js +0 -2
- package/dist/runtime/helpers/_change-case.js +0 -45
- package/dist/runtime/helpers/assign.js +0 -21
- package/dist/runtime/helpers/attr-tag.js +0 -43
- package/dist/runtime/helpers/class-value.js +0 -30
- package/dist/runtime/helpers/dynamic-tag.js +0 -181
- package/dist/runtime/helpers/empty-component.js +0 -1
- package/dist/runtime/helpers/merge.js +0 -13
- package/dist/runtime/helpers/of-fallback.js +0 -4
- package/dist/runtime/helpers/render-tag.js +0 -20
- package/dist/runtime/helpers/serialize-noop.js +0 -5
- package/dist/runtime/helpers/style-value.js +0 -45
- package/dist/runtime/helpers/tags-compat/dom-debug.js +0 -1
- package/dist/runtime/helpers/tags-compat/dom-debug.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/dom.js +0 -1
- package/dist/runtime/helpers/tags-compat/dom.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/html-debug.js +0 -3
- package/dist/runtime/helpers/tags-compat/html-debug.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/html.js +0 -3
- package/dist/runtime/helpers/tags-compat/html.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/runtime-dom.js +0 -239
- package/dist/runtime/helpers/tags-compat/runtime-html.js +0 -136
- package/dist/runtime/helpers/to-string.js +0 -5
- package/dist/runtime/html/AsyncStream.js +0 -805
- package/dist/runtime/html/BufferedWriter.js +0 -52
- package/dist/runtime/html/StringWriter.js +0 -73
- package/dist/runtime/html/helpers/_dynamic-attr.js +0 -35
- package/dist/runtime/html/helpers/attr.js +0 -80
- package/dist/runtime/html/helpers/attrs.js +0 -26
- package/dist/runtime/html/helpers/class-attr.js +0 -8
- package/dist/runtime/html/helpers/data-marko.js +0 -36
- package/dist/runtime/html/helpers/escape-quotes.js +0 -35
- package/dist/runtime/html/helpers/escape-script-placeholder.js +0 -24
- package/dist/runtime/html/helpers/escape-style-placeholder.js +0 -22
- package/dist/runtime/html/helpers/escape-xml.js +0 -21
- package/dist/runtime/html/helpers/merge-attrs.js +0 -55
- package/dist/runtime/html/helpers/props-script.js +0 -32
- package/dist/runtime/html/helpers/style-attr.js +0 -8
- package/dist/runtime/html/hot-reload.js +0 -26
- package/dist/runtime/html/index.js +0 -33
- package/dist/runtime/html/marko-namespace.js +0 -3
- package/dist/runtime/renderable.js +0 -194
- package/dist/runtime/vdom/AsyncVDOMBuilder.js +0 -456
- package/dist/runtime/vdom/VComment.js +0 -24
- package/dist/runtime/vdom/VComponent.js +0 -17
- package/dist/runtime/vdom/VDocumentFragment.js +0 -34
- package/dist/runtime/vdom/VElement.js +0 -375
- package/dist/runtime/vdom/VFragment.js +0 -26
- package/dist/runtime/vdom/VNode.js +0 -100
- package/dist/runtime/vdom/VText.js +0 -25
- package/dist/runtime/vdom/helpers/attrs.js +0 -62
- package/dist/runtime/vdom/helpers/const-element.js +0 -25
- package/dist/runtime/vdom/helpers/merge-attrs.js +0 -16
- package/dist/runtime/vdom/hot-reload.js +0 -115
- package/dist/runtime/vdom/index.js +0 -30
- package/dist/runtime/vdom/is-text-only.js +0 -10
- package/dist/runtime/vdom/marko-namespace.js +0 -3
- package/dist/runtime/vdom/morphdom/fragment.js +0 -95
- package/dist/runtime/vdom/morphdom/helpers.js +0 -42
- package/dist/runtime/vdom/morphdom/index.js +0 -741
- package/dist/runtime/vdom/parse-html.js +0 -18
- package/dist/runtime/vdom/vdom.js +0 -88
- package/dist/taglib/index.js +0 -51
- package/dist/translator/cdata/index.js +0 -15
- package/dist/translator/cdata/index[html].js +0 -15
- package/dist/translator/cdata/index[vdom].js +0 -12
- package/dist/translator/class.js +0 -65
- package/dist/translator/comment/index.js +0 -15
- package/dist/translator/comment/index[html].js +0 -17
- package/dist/translator/comment/index[vdom].js +0 -3
- package/dist/translator/declaration/index.js +0 -15
- package/dist/translator/declaration/index[html].js +0 -12
- package/dist/translator/declaration/index[vdom].js +0 -3
- package/dist/translator/document-type/index.js +0 -15
- package/dist/translator/document-type/index[html].js +0 -12
- package/dist/translator/document-type/index[vdom].js +0 -3
- package/dist/translator/placeholder/index.js +0 -15
- package/dist/translator/placeholder/index[html].js +0 -93
- package/dist/translator/placeholder/index[vdom].js +0 -22
- package/dist/translator/scriptlet.js +0 -4
- package/dist/translator/tag/attribute/directives/class.js +0 -42
- package/dist/translator/tag/attribute/directives/index.js +0 -15
- package/dist/translator/tag/attribute/directives/no-update-body-if.js +0 -15
- package/dist/translator/tag/attribute/directives/no-update-body.js +0 -10
- package/dist/translator/tag/attribute/directives/no-update-if.js +0 -12
- package/dist/translator/tag/attribute/directives/no-update.js +0 -48
- package/dist/translator/tag/attribute/directives/style.js +0 -42
- package/dist/translator/tag/attribute/index.js +0 -150
- package/dist/translator/tag/attribute/modifiers/index.js +0 -7
- package/dist/translator/tag/attribute/modifiers/no-update.js +0 -14
- package/dist/translator/tag/attribute/modifiers/scoped.js +0 -23
- package/dist/translator/tag/attribute-tag.js +0 -149
- package/dist/translator/tag/custom-tag.js +0 -146
- package/dist/translator/tag/dynamic-tag.js +0 -74
- package/dist/translator/tag/index.js +0 -287
- package/dist/translator/tag/macro-tag.js +0 -7
- package/dist/translator/tag/native-tag.js +0 -27
- package/dist/translator/tag/native-tag[html]/attributes.js +0 -151
- package/dist/translator/tag/native-tag[html]/index.js +0 -221
- package/dist/translator/tag/native-tag[vdom]/attributes.js +0 -105
- package/dist/translator/tag/native-tag[vdom]/index.js +0 -189
- package/dist/translator/tag/util.js +0 -246
- package/dist/translator/taglib/core/conditional/translate-else-if.js +0 -20
- package/dist/translator/taglib/core/conditional/translate-else.js +0 -20
- package/dist/translator/taglib/core/conditional/translate-if.js +0 -8
- package/dist/translator/taglib/core/conditional/util.js +0 -41
- package/dist/translator/taglib/core/index.js +0 -474
- package/dist/translator/taglib/core/macro/parse.js +0 -17
- package/dist/translator/taglib/core/macro/translate.js +0 -48
- package/dist/translator/taglib/core/parse-class.js +0 -79
- package/dist/translator/taglib/core/parse-export.js +0 -14
- package/dist/translator/taglib/core/parse-import.js +0 -14
- package/dist/translator/taglib/core/parse-module-code.js +0 -18
- package/dist/translator/taglib/core/parse-static.js +0 -18
- package/dist/translator/taglib/core/transform-style.js +0 -66
- package/dist/translator/taglib/core/translate-await.js +0 -41
- package/dist/translator/taglib/core/translate-body.js +0 -17
- package/dist/translator/taglib/core/translate-for.js +0 -156
- package/dist/translator/taglib/core/translate-html-comment.js +0 -52
- package/dist/translator/taglib/core/translate-include-content.js +0 -53
- package/dist/translator/taglib/core/translate-server-only.js +0 -5
- package/dist/translator/taglib/core/translate-while.js +0 -32
- package/dist/translator/taglib/index.js +0 -6
- package/dist/translator/taglib/migrate/all-templates.js +0 -46
- package/dist/translator/taglib/migrate/index.js +0 -5
- package/dist/translator/text/index.js +0 -10
- package/dist/translator/text/index[html].js +0 -12
- package/dist/translator/text/index[vdom].js +0 -20
- package/dist/translator/util/add-dependencies.js +0 -329
- package/dist/translator/util/escape-regexp.js +0 -4
- package/dist/translator/util/get-component-files.js +0 -86
- package/dist/translator/util/html-out-write.js +0 -15
- package/dist/translator/util/key-manager.js +0 -176
- package/dist/translator/util/optimize-html-writes.js +0 -52
- package/dist/translator/util/optimize-vdom-create.js +0 -164
- package/dist/translator/util/plugin-hooks.js +0 -22
- package/dist/translator/util/runtime-flags.js +0 -3
- package/dist/translator/util/vdom-out-write.js +0 -10
- package/dist/translator/util/with-previous-location.js +0 -6
- package/docs/10-awesome-marko-features.md +0 -291
- package/docs/body-content.md +0 -355
- package/docs/class-components.md +0 -1001
- package/docs/cloudflare-workers.md +0 -32
- package/docs/compiler-hooks.png +0 -0
- package/docs/compiler.md +0 -473
- package/docs/component-diagram.afdesign +0 -0
- package/docs/component-diagram.svg +0 -87
- package/docs/concise.md +0 -141
- package/docs/conditionals-and-lists.md +0 -72
- package/docs/core-tags.md +0 -325
- package/docs/custom-tags.md +0 -201
- package/docs/editor-plugins.md +0 -45
- package/docs/events.md +0 -131
- package/docs/express.md +0 -66
- package/docs/fastify.md +0 -65
- package/docs/getting-started.md +0 -95
- package/docs/http.md +0 -34
- package/docs/icons/js.svg +0 -4
- package/docs/icons/marko.svg +0 -1
- package/docs/icons/ts.svg +0 -1
- package/docs/installing.md +0 -51
- package/docs/koa.md +0 -35
- package/docs/lasso.md +0 -196
- package/docs/marko-5-upgrade.md +0 -59
- package/docs/marko-json.md +0 -248
- package/docs/marko-vs-react.md +0 -854
- package/docs/redux.md +0 -61
- package/docs/rendering.md +0 -268
- package/docs/rollup.md +0 -352
- package/docs/state.md +0 -105
- package/docs/structure.json +0 -49
- package/docs/styles.md +0 -29
- package/docs/syntax.md +0 -601
- package/docs/troubleshooting-streaming.md +0 -68
- package/docs/typescript.md +0 -406
- package/docs/vite.md +0 -86
- package/docs/webpack.md +0 -205
- package/docs/why-is-marko-fast.md +0 -239
- package/env.js +0 -7
- package/helpers/README.md +0 -3
- package/helpers/empty.js +0 -4
- package/helpers/notEmpty.js +0 -11
- package/index-browser.marko +0 -15
- package/index.js +0 -7
- package/legacy-components-browser.marko +0 -15
- package/legacy-components.js +0 -7
- package/node-require.js +0 -8
- package/src/build.json +0 -3
- package/src/compiler/config.js +0 -45
- package/src/compiler/index.js +0 -164
- package/src/compiler/modules.js +0 -5
- package/src/core-tags/.eslintrc +0 -5
- package/src/core-tags/components/init-components-tag.js +0 -54
- package/src/core-tags/components/preferred-script-location-tag.js +0 -25
- package/src/core-tags/components/preserve-tag.js +0 -1
- package/src/core-tags/core/__flush_here_and_after__.js +0 -44
- package/src/core-tags/core/await/AsyncValue.js +0 -121
- package/src/core-tags/core/await/client-reorder-runtime.js +0 -51
- package/src/core-tags/core/await/index.d.marko +0 -10
- package/src/core-tags/core/await/renderer.js +0 -249
- package/src/core-tags/core/await/reorderer-renderer.js +0 -156
- package/src/index.js +0 -4
- package/src/node-require/browser-refresh.js +0 -18
- package/src/node-require/hot-reload.js +0 -45
- package/src/node-require/index.js +0 -103
- package/src/node_modules/@internal/components-beginComponent/index-browser.js +0 -23
- package/src/node_modules/@internal/components-beginComponent/index.js +0 -84
- package/src/node_modules/@internal/components-beginComponent/package.json +0 -11
- package/src/node_modules/@internal/components-define-widget-legacy/index-browser.js +0 -335
- package/src/node_modules/@internal/components-define-widget-legacy/index.js +0 -18
- package/src/node_modules/@internal/components-define-widget-legacy/package.json +0 -11
- package/src/node_modules/@internal/components-endComponent/index-browser.js +0 -5
- package/src/node_modules/@internal/components-endComponent/index.js +0 -11
- package/src/node_modules/@internal/components-endComponent/package.json +0 -11
- package/src/node_modules/@internal/components-entry/index-browser.js +0 -11
- package/src/node_modules/@internal/components-entry/index.js +0 -301
- package/src/node_modules/@internal/components-entry/package.json +0 -11
- package/src/node_modules/@internal/components-entry-legacy/index-browser.js +0 -76
- package/src/node_modules/@internal/components-entry-legacy/index.js +0 -16
- package/src/node_modules/@internal/components-entry-legacy/package.json +0 -11
- package/src/node_modules/@internal/components-registry/index-browser.js +0 -586
- package/src/node_modules/@internal/components-registry/index.js +0 -44
- package/src/node_modules/@internal/components-registry/package.json +0 -11
- package/src/node_modules/@internal/components-util/index-browser.js +0 -152
- package/src/node_modules/@internal/components-util/index.js +0 -75
- package/src/node_modules/@internal/components-util/package.json +0 -11
- package/src/node_modules/@internal/create-readable/index-browser.js +0 -30
- package/src/node_modules/@internal/create-readable/index.js +0 -57
- package/src/node_modules/@internal/create-readable/package.json +0 -11
- package/src/node_modules/@internal/loader/fallback-node.js +0 -89
- package/src/node_modules/@internal/loader/index-browser.js +0 -2
- package/src/node_modules/@internal/loader/index.js +0 -23
- package/src/node_modules/@internal/loader/package.json +0 -10
- package/src/node_modules/@internal/preserve-tag/index-browser.js +0 -46
- package/src/node_modules/@internal/preserve-tag/index.js +0 -34
- package/src/node_modules/@internal/preserve-tag/package.json +0 -11
- package/src/node_modules/@internal/require/index-browser.js +0 -15
- package/src/node_modules/@internal/require/index-legacy-browser.js +0 -20
- package/src/node_modules/@internal/require/index-webpack.js +0 -16
- package/src/node_modules/@internal/require/index.js +0 -15
- package/src/node_modules/@internal/require/package.json +0 -11
- package/src/node_modules/@internal/set-immediate/index-browser.js +0 -19
- package/src/node_modules/@internal/set-immediate/index-worker.js +0 -31
- package/src/node_modules/@internal/set-immediate/index.js +0 -3
- package/src/node_modules/@internal/set-immediate/package.json +0 -11
- package/src/node_modules/@internal/set-immediate/queueMicrotask.js +0 -8
- package/src/runtime/.eslintrc +0 -5
- package/src/runtime/RenderResult.js +0 -112
- package/src/runtime/components/Component.js +0 -663
- package/src/runtime/components/ComponentDef.js +0 -169
- package/src/runtime/components/ComponentsContext.js +0 -59
- package/src/runtime/components/GlobalComponentsContext.js +0 -10
- package/src/runtime/components/KeySequence.js +0 -16
- package/src/runtime/components/ServerComponent.js +0 -73
- package/src/runtime/components/State.js +0 -101
- package/src/runtime/components/attach-detach.js +0 -60
- package/src/runtime/components/defineComponent.js +0 -60
- package/src/runtime/components/dom-data.js +0 -8
- package/src/runtime/components/event-delegation.js +0 -144
- package/src/runtime/components/index.js +0 -1
- package/src/runtime/components/legacy/browser.json +0 -9
- package/src/runtime/components/legacy/defineComponent-legacy.js +0 -27
- package/src/runtime/components/legacy/defineRenderer-legacy.js +0 -171
- package/src/runtime/components/legacy/defineWidget-legacy.js +0 -1
- package/src/runtime/components/legacy/dependencies/html.js +0 -3
- package/src/runtime/components/legacy/dependencies/index.js +0 -177
- package/src/runtime/components/legacy/dependencies/vdom.js +0 -3
- package/src/runtime/components/legacy/index.js +0 -1
- package/src/runtime/components/legacy/jquery.js +0 -52
- package/src/runtime/components/legacy/ready.js +0 -152
- package/src/runtime/components/legacy/renderer-legacy.js +0 -231
- package/src/runtime/components/registry.js +0 -1
- package/src/runtime/components/renderer.js +0 -236
- package/src/runtime/components/update-manager.js +0 -94
- package/src/runtime/createOut.js +0 -13
- package/src/runtime/dom-insert.js +0 -77
- package/src/runtime/events.js +0 -2
- package/src/runtime/helpers/_change-case.js +0 -45
- package/src/runtime/helpers/assign.js +0 -21
- package/src/runtime/helpers/attr-tag.js +0 -43
- package/src/runtime/helpers/class-value.js +0 -30
- package/src/runtime/helpers/dynamic-tag.js +0 -181
- package/src/runtime/helpers/empty-component.js +0 -1
- package/src/runtime/helpers/merge.js +0 -13
- package/src/runtime/helpers/of-fallback.js +0 -4
- package/src/runtime/helpers/render-tag.js +0 -20
- package/src/runtime/helpers/serialize-noop.js +0 -5
- package/src/runtime/helpers/style-value.js +0 -45
- package/src/runtime/helpers/tags-compat/dom-debug.js +0 -1
- package/src/runtime/helpers/tags-compat/dom-debug.mjs +0 -4
- package/src/runtime/helpers/tags-compat/dom.js +0 -1
- package/src/runtime/helpers/tags-compat/dom.mjs +0 -4
- package/src/runtime/helpers/tags-compat/html-debug.js +0 -3
- package/src/runtime/helpers/tags-compat/html-debug.mjs +0 -4
- package/src/runtime/helpers/tags-compat/html.js +0 -3
- package/src/runtime/helpers/tags-compat/html.mjs +0 -4
- package/src/runtime/helpers/tags-compat/runtime-dom.js +0 -239
- package/src/runtime/helpers/tags-compat/runtime-html.js +0 -136
- package/src/runtime/helpers/to-string.js +0 -5
- package/src/runtime/html/AsyncStream.js +0 -805
- package/src/runtime/html/BufferedWriter.js +0 -52
- package/src/runtime/html/StringWriter.js +0 -73
- package/src/runtime/html/helpers/_dynamic-attr.js +0 -35
- package/src/runtime/html/helpers/attr.js +0 -80
- package/src/runtime/html/helpers/attrs.js +0 -26
- package/src/runtime/html/helpers/class-attr.js +0 -8
- package/src/runtime/html/helpers/data-marko.js +0 -36
- package/src/runtime/html/helpers/escape-quotes.js +0 -35
- package/src/runtime/html/helpers/escape-script-placeholder.js +0 -24
- package/src/runtime/html/helpers/escape-style-placeholder.js +0 -22
- package/src/runtime/html/helpers/escape-xml.js +0 -21
- package/src/runtime/html/helpers/merge-attrs.js +0 -55
- package/src/runtime/html/helpers/props-script.js +0 -32
- package/src/runtime/html/helpers/style-attr.js +0 -8
- package/src/runtime/html/hot-reload.js +0 -26
- package/src/runtime/html/index.js +0 -33
- package/src/runtime/html/marko-namespace.js +0 -3
- package/src/runtime/renderable.js +0 -194
- package/src/runtime/vdom/AsyncVDOMBuilder.js +0 -456
- package/src/runtime/vdom/VComment.js +0 -24
- package/src/runtime/vdom/VComponent.js +0 -17
- package/src/runtime/vdom/VDocumentFragment.js +0 -34
- package/src/runtime/vdom/VElement.js +0 -375
- package/src/runtime/vdom/VFragment.js +0 -26
- package/src/runtime/vdom/VNode.js +0 -100
- package/src/runtime/vdom/VText.js +0 -25
- package/src/runtime/vdom/helpers/attrs.js +0 -62
- package/src/runtime/vdom/helpers/const-element.js +0 -25
- package/src/runtime/vdom/helpers/merge-attrs.js +0 -16
- package/src/runtime/vdom/hot-reload.js +0 -115
- package/src/runtime/vdom/index.js +0 -30
- package/src/runtime/vdom/is-text-only.js +0 -10
- package/src/runtime/vdom/marko-namespace.js +0 -3
- package/src/runtime/vdom/morphdom/fragment.js +0 -95
- package/src/runtime/vdom/morphdom/helpers.js +0 -42
- package/src/runtime/vdom/morphdom/index.js +0 -741
- package/src/runtime/vdom/parse-html.js +0 -18
- package/src/runtime/vdom/vdom.js +0 -88
- package/src/taglib/index.js +0 -51
- package/src/translator/cdata/index.js +0 -15
- package/src/translator/cdata/index[html].js +0 -15
- package/src/translator/cdata/index[vdom].js +0 -12
- package/src/translator/class.js +0 -65
- package/src/translator/comment/index.js +0 -15
- package/src/translator/comment/index[html].js +0 -17
- package/src/translator/comment/index[vdom].js +0 -3
- package/src/translator/declaration/index.js +0 -15
- package/src/translator/declaration/index[html].js +0 -12
- package/src/translator/declaration/index[vdom].js +0 -3
- package/src/translator/document-type/index.js +0 -15
- package/src/translator/document-type/index[html].js +0 -12
- package/src/translator/document-type/index[vdom].js +0 -3
- package/src/translator/index.js +0 -552
- package/src/translator/placeholder/index.js +0 -15
- package/src/translator/placeholder/index[html].js +0 -93
- package/src/translator/placeholder/index[vdom].js +0 -22
- package/src/translator/scriptlet.js +0 -4
- package/src/translator/tag/attribute/directives/class.js +0 -42
- package/src/translator/tag/attribute/directives/index.js +0 -15
- package/src/translator/tag/attribute/directives/no-update-body-if.js +0 -15
- package/src/translator/tag/attribute/directives/no-update-body.js +0 -10
- package/src/translator/tag/attribute/directives/no-update-if.js +0 -12
- package/src/translator/tag/attribute/directives/no-update.js +0 -48
- package/src/translator/tag/attribute/directives/style.js +0 -42
- package/src/translator/tag/attribute/index.js +0 -150
- package/src/translator/tag/attribute/modifiers/index.js +0 -7
- package/src/translator/tag/attribute/modifiers/no-update.js +0 -14
- package/src/translator/tag/attribute/modifiers/scoped.js +0 -23
- package/src/translator/tag/attribute-tag.js +0 -149
- package/src/translator/tag/custom-tag.js +0 -146
- package/src/translator/tag/dynamic-tag.js +0 -74
- package/src/translator/tag/index.js +0 -287
- package/src/translator/tag/macro-tag.js +0 -7
- package/src/translator/tag/native-tag.js +0 -27
- package/src/translator/tag/native-tag[html]/attributes.js +0 -151
- package/src/translator/tag/native-tag[html]/index.js +0 -221
- package/src/translator/tag/native-tag[vdom]/attributes.js +0 -105
- package/src/translator/tag/native-tag[vdom]/index.js +0 -189
- package/src/translator/tag/util.js +0 -246
- package/src/translator/taglib/core/conditional/translate-else-if.js +0 -20
- package/src/translator/taglib/core/conditional/translate-else.js +0 -20
- package/src/translator/taglib/core/conditional/translate-if.js +0 -8
- package/src/translator/taglib/core/conditional/util.js +0 -41
- package/src/translator/taglib/core/index.js +0 -474
- package/src/translator/taglib/core/macro/parse.js +0 -17
- package/src/translator/taglib/core/macro/translate.js +0 -48
- package/src/translator/taglib/core/parse-class.js +0 -79
- package/src/translator/taglib/core/parse-export.js +0 -14
- package/src/translator/taglib/core/parse-import.js +0 -14
- package/src/translator/taglib/core/parse-module-code.js +0 -18
- package/src/translator/taglib/core/parse-static.js +0 -18
- package/src/translator/taglib/core/transform-style.js +0 -66
- package/src/translator/taglib/core/translate-await.js +0 -41
- package/src/translator/taglib/core/translate-body.js +0 -17
- package/src/translator/taglib/core/translate-for.js +0 -156
- package/src/translator/taglib/core/translate-html-comment.js +0 -52
- package/src/translator/taglib/core/translate-include-content.js +0 -53
- package/src/translator/taglib/core/translate-server-only.js +0 -5
- package/src/translator/taglib/core/translate-while.js +0 -32
- package/src/translator/taglib/index.js +0 -7
- package/src/translator/taglib/migrate/all-templates.js +0 -46
- package/src/translator/taglib/migrate/index.js +0 -5
- package/src/translator/text/index.js +0 -10
- package/src/translator/text/index[html].js +0 -12
- package/src/translator/text/index[vdom].js +0 -20
- package/src/translator/util/add-dependencies.js +0 -329
- package/src/translator/util/escape-regexp.js +0 -4
- package/src/translator/util/get-component-files.js +0 -86
- package/src/translator/util/html-out-write.js +0 -15
- package/src/translator/util/key-manager.js +0 -176
- package/src/translator/util/optimize-html-writes.js +0 -52
- package/src/translator/util/optimize-vdom-create.js +0 -164
- package/src/translator/util/plugin-hooks.js +0 -22
- package/src/translator/util/runtime-flags.js +0 -3
- package/src/translator/util/vdom-out-write.js +0 -10
- package/src/translator/util/with-previous-location.js +0 -6
- package/translator/index.d.ts +0 -7
- 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
package/helpers/README.md
DELETED
package/helpers/empty.js
DELETED
package/helpers/notEmpty.js
DELETED
package/index-browser.marko
DELETED
@@ -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.js
DELETED
@@ -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).
|
package/legacy-components.js
DELETED
package/node-require.js
DELETED
package/src/build.json
DELETED
package/src/compiler/config.js
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
var config;
|
2
|
-
|
3
|
-
var g = typeof window === "undefined" ? global : window;
|
4
|
-
|
5
|
-
if (g.__MARKO_CONFIG) {
|
6
|
-
config = g.__MARKO_CONFIG;
|
7
|
-
} else {
|
8
|
-
config = g.__MARKO_CONFIG = {
|
9
|
-
// The default output mode for compiled templates
|
10
|
-
output: "html",
|
11
|
-
|
12
|
-
/**
|
13
|
-
* Whether the version should be written to the template as a comment e.g.
|
14
|
-
* // Compiled using marko@4.0.0 - DO NOT EDIT
|
15
|
-
*/
|
16
|
-
writeVersionComment: true,
|
17
|
-
|
18
|
-
/**
|
19
|
-
* Whether unrecognized tags should be ignored or not. This flag will
|
20
|
-
* be enabled by default when compiling XML.
|
21
|
-
*/
|
22
|
-
ignoreUnrecognizedTags: false,
|
23
|
-
|
24
|
-
/**
|
25
|
-
* Whether source maps should be output with the compiled templates.
|
26
|
-
* When `true` a `map` property will be available on the compile result.
|
27
|
-
* When `"inline"` the sourcemap will be inlined as a comment in the output code.
|
28
|
-
* When `"both"` both of the above will be used.
|
29
|
-
*/
|
30
|
-
sourceMaps: false,
|
31
|
-
|
32
|
-
/**
|
33
|
-
* This option inlines all of the meta data in the template.
|
34
|
-
* You can also access this metadata via `compile(...).meta`.
|
35
|
-
* This API is sticking around for compatibility purposes.
|
36
|
-
*/
|
37
|
-
meta: true,
|
38
|
-
};
|
39
|
-
|
40
|
-
if (process.env.MARKO_CONFIG) {
|
41
|
-
Object.assign(config, JSON.parse(process.env.MARKO_CONFIG));
|
42
|
-
}
|
43
|
-
}
|
44
|
-
|
45
|
-
module.exports = config;
|
package/src/compiler/index.js
DELETED
@@ -1,164 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
var ok = require("assert").ok;
|
4
|
-
var fs = require("fs");
|
5
|
-
|
6
|
-
// eslint-disable-next-line no-constant-binary-expression
|
7
|
-
var complain = "MARKO_DEBUG" && require("complain");
|
8
|
-
var compiler = require("@marko/compiler");
|
9
|
-
var extend = require("raptor-util/extend");
|
10
|
-
var taglib = require("../taglib");
|
11
|
-
var globalConfig = require("./config");
|
12
|
-
var defaults = extend({}, globalConfig);
|
13
|
-
|
14
|
-
// eslint-disable-next-line no-constant-condition
|
15
|
-
if ("MARKO_DEBUG") {
|
16
|
-
if (
|
17
|
-
require.main &&
|
18
|
-
require.main.filename !== require.resolve("../../bin/markoc")
|
19
|
-
) {
|
20
|
-
complain(
|
21
|
-
"Using `marko/compiler` has been deprecated, please upgrade to the `@marko/compiler` module.",
|
22
|
-
);
|
23
|
-
}
|
24
|
-
}
|
25
|
-
|
26
|
-
var defaultOptionsExportDefinition = {
|
27
|
-
get: function () {
|
28
|
-
return globalConfig;
|
29
|
-
},
|
30
|
-
enumerable: true,
|
31
|
-
configurable: false,
|
32
|
-
};
|
33
|
-
|
34
|
-
Object.defineProperties(exports, {
|
35
|
-
defaultOptions: defaultOptionsExportDefinition,
|
36
|
-
config: defaultOptionsExportDefinition,
|
37
|
-
});
|
38
|
-
|
39
|
-
function configure(newConfig) {
|
40
|
-
if (!newConfig) {
|
41
|
-
newConfig = {};
|
42
|
-
}
|
43
|
-
|
44
|
-
globalConfig = extend({}, defaults);
|
45
|
-
extend(globalConfig, newConfig);
|
46
|
-
|
47
|
-
compiler.configure(newConfig);
|
48
|
-
}
|
49
|
-
|
50
|
-
function resultCompat({ code, meta, map }, options = {}) {
|
51
|
-
if (options.sourceOnly !== false) {
|
52
|
-
return code;
|
53
|
-
} else {
|
54
|
-
return { code, meta, map };
|
55
|
-
}
|
56
|
-
}
|
57
|
-
|
58
|
-
function _compile(src, filename, userConfig, callback) {
|
59
|
-
ok(filename, '"filename" argument is required');
|
60
|
-
ok(typeof filename === "string", '"filename" argument should be a string');
|
61
|
-
var options = {};
|
62
|
-
|
63
|
-
extend(options, globalConfig);
|
64
|
-
|
65
|
-
if (userConfig) {
|
66
|
-
extend(options, userConfig);
|
67
|
-
}
|
68
|
-
|
69
|
-
if (callback) {
|
70
|
-
compiler.compile(src, filename, options).then(
|
71
|
-
(result) => callback(null, resultCompat(result, options)),
|
72
|
-
(error) => callback(error),
|
73
|
-
);
|
74
|
-
} else {
|
75
|
-
return resultCompat(compiler.compileSync(src, filename, options), options);
|
76
|
-
}
|
77
|
-
}
|
78
|
-
|
79
|
-
function compile(src, filename, options, callback) {
|
80
|
-
if (typeof options === "function") {
|
81
|
-
callback = options;
|
82
|
-
options = null;
|
83
|
-
}
|
84
|
-
|
85
|
-
options = options || {};
|
86
|
-
options.sourceOnly = options.sourceOnly !== false;
|
87
|
-
|
88
|
-
return _compile(src, filename, options, callback);
|
89
|
-
}
|
90
|
-
|
91
|
-
function compileForBrowser(src, filename, options, callback) {
|
92
|
-
if (typeof options === "function") {
|
93
|
-
callback = options;
|
94
|
-
options = null;
|
95
|
-
}
|
96
|
-
|
97
|
-
options = extend(
|
98
|
-
{
|
99
|
-
output: "dom",
|
100
|
-
meta: false,
|
101
|
-
sourceOnly: false,
|
102
|
-
},
|
103
|
-
options,
|
104
|
-
);
|
105
|
-
|
106
|
-
return compile(src, filename, options, callback);
|
107
|
-
}
|
108
|
-
|
109
|
-
function compileFile(filename, options, callback) {
|
110
|
-
if (typeof options === "function") {
|
111
|
-
callback = options;
|
112
|
-
options = null;
|
113
|
-
}
|
114
|
-
|
115
|
-
options = options || {};
|
116
|
-
options.sourceOnly = options.sourceOnly !== false;
|
117
|
-
|
118
|
-
if (callback) {
|
119
|
-
fs.readFile(filename, { encoding: "utf8" }, function (err, templateSrc) {
|
120
|
-
if (err) {
|
121
|
-
return callback(err);
|
122
|
-
}
|
123
|
-
|
124
|
-
_compile(templateSrc, filename, options, callback);
|
125
|
-
});
|
126
|
-
} else {
|
127
|
-
let templateSrc = fs.readFileSync(filename, { encoding: "utf8" });
|
128
|
-
return _compile(templateSrc, filename, options, callback);
|
129
|
-
}
|
130
|
-
}
|
131
|
-
|
132
|
-
function compileFileForBrowser(filename, options, callback) {
|
133
|
-
if (typeof options === "function") {
|
134
|
-
callback = options;
|
135
|
-
options = null;
|
136
|
-
}
|
137
|
-
|
138
|
-
options = extend({ output: "dom", meta: false, sourceOnly: false }, options);
|
139
|
-
return compileFile(filename, options, callback);
|
140
|
-
}
|
141
|
-
|
142
|
-
exports.compileFile = compileFile;
|
143
|
-
exports.compile = compile;
|
144
|
-
exports.compileForBrowser = compileForBrowser;
|
145
|
-
exports.compileFileForBrowser = compileFileForBrowser;
|
146
|
-
|
147
|
-
exports.configure = configure;
|
148
|
-
|
149
|
-
exports.taglibLookup = taglib.lookup;
|
150
|
-
exports.taglibLoader = taglib.loader;
|
151
|
-
exports.taglibFinder = taglib.finder;
|
152
|
-
exports.buildTaglibLookup = taglib.lookup.buildLookup;
|
153
|
-
exports.clearCaches = function clearCaches() {
|
154
|
-
compiler._clearDefaults();
|
155
|
-
taglib.clearCache();
|
156
|
-
};
|
157
|
-
|
158
|
-
exports.registerTaglib = function (filePath) {
|
159
|
-
ok(typeof filePath === "string", '"filePath" should be a string');
|
160
|
-
taglib.registerFromFile(filePath);
|
161
|
-
exports.clearCaches();
|
162
|
-
};
|
163
|
-
|
164
|
-
exports.isVDOMSupported = true;
|
package/src/compiler/modules.js
DELETED
package/src/core-tags/.eslintrc
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
const INIT_COMPONENTS_KEY = Symbol();
|
4
|
-
|
5
|
-
const addComponentsFromContext =
|
6
|
-
require("../../runtime/components").___addComponentsFromContext;
|
7
|
-
const getInitComponentsCode =
|
8
|
-
require("../../runtime/components").___getInitComponentsCode;
|
9
|
-
|
10
|
-
function addComponentsFromOut(source, target) {
|
11
|
-
const sourceOut = source.out || source;
|
12
|
-
const targetOut = target || sourceOut;
|
13
|
-
const componentsContext = sourceOut.___components;
|
14
|
-
const componentDefs = targetOut.writer.get("componentDefs");
|
15
|
-
addComponentsFromContext(componentsContext, componentDefs);
|
16
|
-
}
|
17
|
-
|
18
|
-
function addInitScript(writer) {
|
19
|
-
const out = writer.state.root;
|
20
|
-
const componentDefs = writer.get("componentDefs");
|
21
|
-
writer.script(getInitComponentsCode(out, componentDefs));
|
22
|
-
}
|
23
|
-
|
24
|
-
module.exports = function render(input, out) {
|
25
|
-
const $global = out.global;
|
26
|
-
if ($global[INIT_COMPONENTS_KEY] === undefined) {
|
27
|
-
$global[INIT_COMPONENTS_KEY] = true;
|
28
|
-
|
29
|
-
out.on("await:finish", addComponentsFromOut);
|
30
|
-
out.on("___toString", addInitScript);
|
31
|
-
|
32
|
-
if (out.isSync() === true) {
|
33
|
-
// Generate initialization code for any of the UI components that were
|
34
|
-
// rendered synchronously
|
35
|
-
addComponentsFromOut(out);
|
36
|
-
} else {
|
37
|
-
// Generate initialization code for any of the UI components that were
|
38
|
-
// rendered asynchronously, but were outside an `<await>` tag
|
39
|
-
// (each `<await>` tag will have its own component initialization block)
|
40
|
-
const asyncOut = out.beginAsync({ last: true, timeout: -1 });
|
41
|
-
out.onLast(function (next) {
|
42
|
-
// Ensure we're getting init code starting from the root
|
43
|
-
let rootOut = out;
|
44
|
-
while (rootOut._parentOut) {
|
45
|
-
rootOut = rootOut._parentOut;
|
46
|
-
}
|
47
|
-
// Write out all of the component init code from the main out
|
48
|
-
addComponentsFromOut(rootOut, asyncOut);
|
49
|
-
asyncOut.end();
|
50
|
-
next();
|
51
|
-
});
|
52
|
-
}
|
53
|
-
}
|
54
|
-
};
|
@@ -1,25 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
function forceScriptTagAtThisPoint(out) {
|
4
|
-
const writer = out.writer;
|
5
|
-
|
6
|
-
out.global.___isLastFlush = true;
|
7
|
-
const htmlSoFar = writer.toString();
|
8
|
-
out.global.___isLastFlush = undefined;
|
9
|
-
|
10
|
-
writer.clear();
|
11
|
-
writer.write(htmlSoFar);
|
12
|
-
}
|
13
|
-
|
14
|
-
module.exports = function render(input, out) {
|
15
|
-
if (out.isSync() === true) {
|
16
|
-
forceScriptTagAtThisPoint(out);
|
17
|
-
} else {
|
18
|
-
const asyncOut = out.beginAsync({ last: true, timeout: -1 });
|
19
|
-
out.onLast(function (next) {
|
20
|
-
forceScriptTagAtThisPoint(asyncOut);
|
21
|
-
asyncOut.end();
|
22
|
-
next();
|
23
|
-
});
|
24
|
-
}
|
25
|
-
};
|
@@ -1 +0,0 @@
|
|
1
|
-
module.exports = require("@internal/preserve-tag");
|
@@ -1,44 +0,0 @@
|
|
1
|
-
const BufferedWriter = require("../../runtime/html/BufferedWriter");
|
2
|
-
|
3
|
-
module.exports = function __flushHereAndAfter__(input, out) {
|
4
|
-
if (out.isSync()) {
|
5
|
-
// We create an async out that we pinky promise is going to be sync in order to postpone execution of the renderBody.
|
6
|
-
out._sync = false;
|
7
|
-
const asyncOut = out.beginAsync({ last: true });
|
8
|
-
out._sync = true;
|
9
|
-
asyncOut.sync();
|
10
|
-
out.onLast(() => {
|
11
|
-
input.renderBody(asyncOut);
|
12
|
-
asyncOut.end();
|
13
|
-
});
|
14
|
-
} else {
|
15
|
-
let flushed = false;
|
16
|
-
const asyncOut = out.beginAsync({ last: true });
|
17
|
-
const nextWriter = out.writer;
|
18
|
-
|
19
|
-
out.on("___toString", (writer) => {
|
20
|
-
if (writer instanceof BufferedWriter) {
|
21
|
-
if (flushed) {
|
22
|
-
const detachedOut = out.createOut();
|
23
|
-
detachedOut.sync();
|
24
|
-
input.renderBody(detachedOut);
|
25
|
-
writer._content = detachedOut.toString() + writer._content;
|
26
|
-
} else if (writer.next === nextWriter) {
|
27
|
-
asyncOut.sync();
|
28
|
-
input.renderBody(asyncOut);
|
29
|
-
asyncOut.end();
|
30
|
-
flushed = true;
|
31
|
-
}
|
32
|
-
}
|
33
|
-
});
|
34
|
-
|
35
|
-
out.onLast(() => {
|
36
|
-
if (!flushed) {
|
37
|
-
asyncOut.sync();
|
38
|
-
input.renderBody(asyncOut);
|
39
|
-
asyncOut.end();
|
40
|
-
flushed = true;
|
41
|
-
}
|
42
|
-
});
|
43
|
-
}
|
44
|
-
};
|