marko 5.37.6 → 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.
- 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/package.json +34 -70
- 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/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.d.ts +0 -375
- 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/tags-html.d.ts +0 -3855
- package/translator/index.d.ts +0 -7
- package/translator/package.json +0 -5
package/docs/syntax.md
DELETED
@@ -1,601 +0,0 @@
|
|
1
|
-
# Syntax
|
2
|
-
|
3
|
-
Marko is HTML _re-imagined_ as a language for building dynamic and reactive user interfaces.
|
4
|
-
Just about any valid HTML is valid Marko, but Marko extends the HTML language to allow building modern applications in a declarative way.
|
5
|
-
|
6
|
-
> **ProTip:** Marko also supports a [beautiful concise syntax](./concise.md). If you'd prefer to see the documentation using this syntax, just click the `switch syntax` button in the corner of any Marko code sample.
|
7
|
-
|
8
|
-
> **Note:** Text at the root of a template (outside any tags) must be prefixed with the [concise syntax's `--`](./concise.md#text) to denote it is text. The parser starts in concise mode and would otherwise try to parse what you meant to be text as a concise tag declaration.
|
9
|
-
>
|
10
|
-
> ```marko
|
11
|
-
> -- Root level text
|
12
|
-
> ```
|
13
|
-
|
14
|
-
## Tags
|
15
|
-
|
16
|
-
As you might expect, Marko supports all native HTML/SVG/whatever tags and attributes. In addition to these, it also comes with a set of useful [core tags](./core-tags.md). Beyond this, you can also build your own [custom tags](./custom-tags.md) and [install third-party tags](./custom-tags.md#using-tags-from-npm) from `npm`.
|
17
|
-
|
18
|
-
All of these types of tags use the same syntax:
|
19
|
-
|
20
|
-
```marko
|
21
|
-
<my-tag-name/>
|
22
|
-
```
|
23
|
-
|
24
|
-
You don't need to import tags. Marko discovers them based on the folder structure—similar to how you don't specify a full path when referencing a module in `node_modules/`. Marko looks in [`components/`](./custom-tags.md#how-tags-are-discovered) by default and this directory can be configured in [`marko.json`](./marko-json.md).
|
25
|
-
|
26
|
-
## Dynamic text
|
27
|
-
|
28
|
-
You can use placeholders (`${}`) to insert a value into the template:
|
29
|
-
Placeholders accept any JavaScript expression and the result of the expression will be inserted into the HTML output:
|
30
|
-
|
31
|
-
```marko
|
32
|
-
<div>
|
33
|
-
Hello ${"world".toUpperCase()}
|
34
|
-
</div>
|
35
|
-
```
|
36
|
-
|
37
|
-
These values are automatically escaped so you don't accidentally insert malicious code. If you do need to pass unescaped HTML, you can use `$!{}`:
|
38
|
-
|
39
|
-
```marko
|
40
|
-
<div>
|
41
|
-
Hello $!{"<b>World</b>"}
|
42
|
-
</div>
|
43
|
-
```
|
44
|
-
|
45
|
-
> **ProTip:** If necessary, you can escape `$` using a backslash to have it be treated as text instead of a placeholder token:
|
46
|
-
>
|
47
|
-
> ```marko
|
48
|
-
> <div>
|
49
|
-
> Placeholder example: <code>\${someValue}</code>
|
50
|
-
> </div>
|
51
|
-
> ```
|
52
|
-
|
53
|
-
## Attributes
|
54
|
-
|
55
|
-
In marko attributes are parsed as JavaScript expressions (instead of just strings).
|
56
|
-
|
57
|
-
```marko
|
58
|
-
<div class=myClassName/>
|
59
|
-
<input type="checkbox" checked=isChecked/>
|
60
|
-
|
61
|
-
<custom-tag string="Hello"/>
|
62
|
-
<custom-tag number=1/>
|
63
|
-
<custom-tag template-string=`Hello ${name}`/>
|
64
|
-
<custom-tag boolean=true/>
|
65
|
-
<custom-tag array=[1, 2, 3]/>
|
66
|
-
<custom-tag object={ hello: "world" }/>
|
67
|
-
<custom-tag variable=name/>
|
68
|
-
<custom-tag function-call=user.getName()/>
|
69
|
-
```
|
70
|
-
|
71
|
-
Attributes that are passed to a custom tag are received as it's [`input`](https://markojs.com/docs/class-components/#input).
|
72
|
-
|
73
|
-
> **Note:** Although in most cases you won't see a difference, strings are parsed as JavaScript strings, not HTML strings. Where this comes up most often is using the `pattern` attribute with the `<input>` tag: you need to "double escape" your regex escape sequences much like you were passing a string to the [`RegExp` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) (or you can use a literal `/regex/`).
|
74
|
-
>
|
75
|
-
> _Marko Source:_
|
76
|
-
>
|
77
|
-
> ```marko
|
78
|
-
> <input pattern="\\w+" type="text"/>
|
79
|
-
> <input pattern=/\w+/ type="text"/>
|
80
|
-
> ```
|
81
|
-
>
|
82
|
-
> _HTML Output:_
|
83
|
-
>
|
84
|
-
> ```html
|
85
|
-
> <input pattern="\w+" type="text" />
|
86
|
-
> ```
|
87
|
-
|
88
|
-
### Complex expressions
|
89
|
-
|
90
|
-
Any JavaScript expression is a valid attribute value, provided it meets the following criteria:
|
91
|
-
|
92
|
-
_It does not contain any spaces_
|
93
|
-
|
94
|
-
_It does not contain any right angle brackets (`>`)_
|
95
|
-
|
96
|
-
```marko
|
97
|
-
<custom-tag sum=1+2 difference=3-4/>
|
98
|
-
```
|
99
|
-
|
100
|
-
```marko
|
101
|
-
custom-tag sum=1+2 difference=3-4
|
102
|
-
```
|
103
|
-
|
104
|
-
_Spaces and `>` are contained within matching `()`, `[]`, `{}`, strings and regexps_
|
105
|
-
|
106
|
-
```marko
|
107
|
-
<custom-tag sum=(1 + 2) difference=(3 - 4) greater=(1 > 2)/>
|
108
|
-
```
|
109
|
-
|
110
|
-
```marko
|
111
|
-
custom-tag sum=(1 + 2) difference=(3 - 4) greater=(1 > 2)
|
112
|
-
```
|
113
|
-
|
114
|
-
### Boolean attributes
|
115
|
-
|
116
|
-
HTML defines the following rules for [boolean attributes](https://www.w3.org/TR/2008/WD-html5-20080610/semantics.html#boolean):
|
117
|
-
|
118
|
-
> The presence of a boolean attribute on an element represents the true value, and the absence of the attribute represents the false value.
|
119
|
-
|
120
|
-
In Marko when an attribute value evaluates to `false`, `null`, or `undefined`, the attribute is not included in the output. If an attribute value is `true`, only the attribute name is included in the output.
|
121
|
-
|
122
|
-
_Marko Source:_
|
123
|
-
|
124
|
-
```marko
|
125
|
-
<input type="checkbox" checked=true>
|
126
|
-
<input type="checkbox" checked=false>
|
127
|
-
```
|
128
|
-
|
129
|
-
Renders the following HTML:
|
130
|
-
|
131
|
-
_HTML Output:_
|
132
|
-
|
133
|
-
```html
|
134
|
-
<input type="checkbox" checked /> <input type="checkbox" />
|
135
|
-
```
|
136
|
-
|
137
|
-
Similarly, when only an attribute name is defined, it is equivalent to specifying the attribute with a value of `true`:
|
138
|
-
|
139
|
-
```marko
|
140
|
-
<!-- These are equivalent -->
|
141
|
-
<custom-menu expanded/>
|
142
|
-
<custom-menu expanded=true/>
|
143
|
-
```
|
144
|
-
|
145
|
-
> **ProTip:**
|
146
|
-
> You can take advantage of the way Marko handles boolean attributes to conditionally render attributes:
|
147
|
-
>
|
148
|
-
> _Marko Source:_
|
149
|
-
>
|
150
|
-
> ```marko
|
151
|
-
> <div class=(active && "tab-active")>Hello</div>
|
152
|
-
> ```
|
153
|
-
>
|
154
|
-
> With a value of `true` for `active`, the output would be the following:
|
155
|
-
>
|
156
|
-
> _HTML Output:_
|
157
|
-
>
|
158
|
-
> ```html
|
159
|
-
> <div class="tab-active">Hello</div>
|
160
|
-
> ```
|
161
|
-
>
|
162
|
-
> With a value of `false` for `active`, the output would be the following:
|
163
|
-
>
|
164
|
-
> _HTML Output:_
|
165
|
-
>
|
166
|
-
> ```html
|
167
|
-
> <div>Hello</div>
|
168
|
-
> ```
|
169
|
-
|
170
|
-
### Dynamic attributes
|
171
|
-
|
172
|
-
The spread syntax (`...`) can be used to merge in an object as attributes to a tag:
|
173
|
-
|
174
|
-
_Marko Source:_
|
175
|
-
|
176
|
-
```marko
|
177
|
-
<a ...attrs target="_blank">eBay</a>
|
178
|
-
```
|
179
|
-
|
180
|
-
With `attrs` as the following value:
|
181
|
-
|
182
|
-
```js
|
183
|
-
{
|
184
|
-
class: "active",
|
185
|
-
href: "https://ebay.com/"
|
186
|
-
}
|
187
|
-
```
|
188
|
-
|
189
|
-
would output the following HTML:
|
190
|
-
|
191
|
-
_HTML Output:_
|
192
|
-
|
193
|
-
```html
|
194
|
-
<a class="active" href="https://ebay.com/" target="_blank">eBay</a>
|
195
|
-
```
|
196
|
-
|
197
|
-
> **ProTip:**
|
198
|
-
> With spread attributes order matters.
|
199
|
-
> You can take advantage of this to implement both default attributes, and enforced attributes.
|
200
|
-
>
|
201
|
-
> ```marko
|
202
|
-
> <custom-tag ...defaults ...userSupplied class="overridden"/>
|
203
|
-
> ```
|
204
|
-
|
205
|
-
> **ProTip:**
|
206
|
-
> You can provide `undefined` to a spread attribute which will output nothing.
|
207
|
-
|
208
|
-
### Style attribute
|
209
|
-
|
210
|
-
You can pass a string as the value of `style` just as you would in HTML, in addition Marko supports passing an object or array as the value of the `style` attribute:
|
211
|
-
|
212
|
-
_Marko Source:_
|
213
|
-
|
214
|
-
```marko
|
215
|
-
<!-- string: -->
|
216
|
-
<div style="display:block;margin-right:16px"/>
|
217
|
-
|
218
|
-
<!-- object: -->
|
219
|
-
<div style={ display: "block", color: false, marginRight: 16 }/>
|
220
|
-
|
221
|
-
<!-- array: -->
|
222
|
-
<div style=["display:block", null, { marginRight: 16 }]/>
|
223
|
-
```
|
224
|
-
|
225
|
-
In all cases, the output will be the same:
|
226
|
-
|
227
|
-
_HTML Output:_
|
228
|
-
|
229
|
-
```html
|
230
|
-
<div style="display:block;margin-right:16px;"></div>
|
231
|
-
```
|
232
|
-
|
233
|
-
### Class attribute
|
234
|
-
|
235
|
-
The `class` attribute also supports receiving an object or array (in addition to a string) as shown below:
|
236
|
-
|
237
|
-
_Marko Source:_
|
238
|
-
|
239
|
-
```marko
|
240
|
-
<!-- string: -->
|
241
|
-
<div class="a c"/>
|
242
|
-
|
243
|
-
<!-- object: -->
|
244
|
-
<div class={ a:true, b:false, c:true }/>
|
245
|
-
|
246
|
-
<!-- array: -->
|
247
|
-
<div class=["a", null, { c:true }]/>
|
248
|
-
```
|
249
|
-
|
250
|
-
In all cases, the output will be the same:
|
251
|
-
|
252
|
-
_HTML Output:_
|
253
|
-
|
254
|
-
```html
|
255
|
-
<div class="a c"></div>
|
256
|
-
```
|
257
|
-
|
258
|
-
### Shorthand attributes
|
259
|
-
|
260
|
-
Marko provides a shorthand for declaring classes and ids on an element, including interpolation. Given `size` is the string `small`:
|
261
|
-
|
262
|
-
_Marko Source:_
|
263
|
-
|
264
|
-
```marko
|
265
|
-
<div.my-class/>
|
266
|
-
<span#my-id/>
|
267
|
-
<button#submit.primary.large/>
|
268
|
-
<button.button--${size}></button>
|
269
|
-
```
|
270
|
-
|
271
|
-
Renders the following HTML:
|
272
|
-
|
273
|
-
_HTML Output:_
|
274
|
-
|
275
|
-
<!-- prettier-ignore -->
|
276
|
-
```html
|
277
|
-
<div class="my-class"></div>
|
278
|
-
<span id="my-id"></span>
|
279
|
-
<button id="submit" class="primary large"></button>
|
280
|
-
<button class="button--small"></button>
|
281
|
-
```
|
282
|
-
|
283
|
-
## Parameters
|
284
|
-
|
285
|
-
When a tag renders its body content, it may provide data which can be received by defining parameters after the tagname. Parameters are available to the tag's body content.
|
286
|
-
|
287
|
-
This is a powerful feature that allows components to provide functionality and data while giving you full control over what gets rendered.
|
288
|
-
|
289
|
-
In the following example, `<mouse>` provides a parameter which we have named `position`:
|
290
|
-
|
291
|
-
```marko
|
292
|
-
<mouse|position|>
|
293
|
-
The mouse is at ${position.x}, ${position.y}!
|
294
|
-
</mouse>
|
295
|
-
```
|
296
|
-
|
297
|
-
> `<mouse>` would [render its body](./body-content.md) and provide the position similar to this: `<${input.renderBody} x=0 y=0/>`.
|
298
|
-
|
299
|
-
> **ProTip:** Tag `|parameters|` are treated as regular JavaScript function parameters. This means you can destructure, set default values, etc.
|
300
|
-
>
|
301
|
-
> ```marko
|
302
|
-
> <mouse|{ x, y }|>
|
303
|
-
> The mouse is at ${x}, ${y}!
|
304
|
-
> </mouse>
|
305
|
-
> ```
|
306
|
-
|
307
|
-
> **Note:** Parameters are not available to attributes, only to the tag body.
|
308
|
-
>
|
309
|
-
> ```marko
|
310
|
-
> <mouse|position| something=position>
|
311
|
-
> ReferenceError when setting the "something" attribute
|
312
|
-
> </mouse>
|
313
|
-
> ```
|
314
|
-
|
315
|
-
Parameters are used by some of Marko's [core tags](./core-tags.md) like the [`<for>`](./core-tags.md#for) and [`<await>`](./core-tags.md#await) tags.
|
316
|
-
|
317
|
-
## Arguments
|
318
|
-
|
319
|
-
Some tags and attributes accept javascript style `arguments`. Arguments are denoted by parenthesis following the tag or attribute name. Arguments provide a way to pass unnamed data to a tag.
|
320
|
-
|
321
|
-
```marko
|
322
|
-
<if(true)>
|
323
|
-
<strong>Marko is awesome</strong>
|
324
|
-
</if>
|
325
|
-
|
326
|
-
<h1 body-only-if(skipHeading)>
|
327
|
-
Conditional display heading, but always show content!
|
328
|
-
</h1>
|
329
|
-
```
|
330
|
-
|
331
|
-
Arguments are used by some of Marko's [core tags](./core-tags.md) like the [`<if>`](./core-tags.md#if-else-if-else) tag and [`body-only-if`](./core-tags.md#body-only-if) attribute displayed above.
|
332
|
-
|
333
|
-
Previously you could also use them in your own [custom tags](./custom-tags.md) however it is now recommended to use [dynamic attributes](#dynamic-attributes).
|
334
|
-
|
335
|
-
## Dynamic tagname
|
336
|
-
|
337
|
-
The `<${dynamic}>` syntax is used to render a tag or component that isn't determined until runtime. It can also be used within a [custom tag](./custom-tags.md) to render body content that was passed to that tag.
|
338
|
-
|
339
|
-
_Marko Source:_
|
340
|
-
|
341
|
-
```marko
|
342
|
-
<${href ? 'a' : 'button'} href=href>
|
343
|
-
Click me!
|
344
|
-
</>
|
345
|
-
```
|
346
|
-
|
347
|
-
With `href` as `https://ebay.com` would output the following HTML:
|
348
|
-
|
349
|
-
_HTML Output:_
|
350
|
-
|
351
|
-
```html
|
352
|
-
<a href="https://ebay.com">Click me!</a>
|
353
|
-
```
|
354
|
-
|
355
|
-
And with `href` as `undefined` would output the following HTML:
|
356
|
-
|
357
|
-
_HTML Output:_
|
358
|
-
|
359
|
-
```html
|
360
|
-
<button>Click me!</button>
|
361
|
-
```
|
362
|
-
|
363
|
-
As a shorthand if there is a variable in scope and [no other matching tag is discovered](#how-tags-are-discovered) the wrapping `${}` is unnecessary.
|
364
|
-
|
365
|
-
For example the following are equivalent:
|
366
|
-
|
367
|
-
```marko
|
368
|
-
$ const MyTag = href ? 'a' : 'button';
|
369
|
-
<${MyTag}/>
|
370
|
-
<MyTag/>
|
371
|
-
```
|
372
|
-
|
373
|
-
> **ProTip:**
|
374
|
-
> If you find that you have a wrapper element that is conditional, but whose body should always be rendered then you can use a null dynamic tag. For example, to only render a wrapping `<a>` tag if there is a valid URL then you could do the following:
|
375
|
-
>
|
376
|
-
> _Marko Source:_
|
377
|
-
>
|
378
|
-
> ```marko
|
379
|
-
> <${input.linkUrl ? "a" : null} href=input.linkUrl >
|
380
|
-
> Some body content
|
381
|
-
> </>
|
382
|
-
> ```
|
383
|
-
>
|
384
|
-
> Given a value of `"http://localhost/"` for the `input.linkUrl` variable: , the output would be the following:
|
385
|
-
>
|
386
|
-
> _HTML Output:_
|
387
|
-
>
|
388
|
-
> ```html
|
389
|
-
> <a href="http://localhost/"> Some body content </a>
|
390
|
-
> ```
|
391
|
-
>
|
392
|
-
> Given a value of `undefined` for the `input.linkUrl` variable: , the output would be the following:
|
393
|
-
>
|
394
|
-
> _HTML Output:_
|
395
|
-
>
|
396
|
-
> ```html
|
397
|
-
> Some body content
|
398
|
-
> ```
|
399
|
-
|
400
|
-
### Dynamic components
|
401
|
-
|
402
|
-
Instead of just strings, the dynamic tagname can also be a component:
|
403
|
-
|
404
|
-
```marko
|
405
|
-
import componentA from "<component-a>";
|
406
|
-
import componentB from "<component-b>";
|
407
|
-
|
408
|
-
<${useA ? componentA : componentB}/>
|
409
|
-
```
|
410
|
-
|
411
|
-
> **ProTip:**
|
412
|
-
> You can also switch between a normal HTML tag and a component:
|
413
|
-
>
|
414
|
-
> ```marko
|
415
|
-
> import FancyButton from "<fancy-button>";
|
416
|
-
>
|
417
|
-
> <${isFancy ? FancyButton : 'button'}>
|
418
|
-
> Button text
|
419
|
-
> </>
|
420
|
-
> ```
|
421
|
-
|
422
|
-
> **Note:** You **cannot** reference a Marko custom tag or macro using a name string:
|
423
|
-
>
|
424
|
-
> _Marko Source:_
|
425
|
-
>
|
426
|
-
> ```marko
|
427
|
-
> <${isFancy ? 'fancy-button' : 'button'}>
|
428
|
-
> Button text
|
429
|
-
> </>
|
430
|
-
> ```
|
431
|
-
>
|
432
|
-
> With `isFancy` as `true` would output the following HTML:
|
433
|
-
>
|
434
|
-
> _HTML Output:_
|
435
|
-
>
|
436
|
-
> ```html
|
437
|
-
> <fancy-button>Button text</fancy-button>
|
438
|
-
> ```
|
439
|
-
|
440
|
-
### Dynamic body content
|
441
|
-
|
442
|
-
When a custom tag receives [body content](./body-content.md), it is passed as a `renderBody` property. To render this content you can pass the `renderBody` as the dynamic tagname.
|
443
|
-
|
444
|
-
```marko
|
445
|
-
<div class="container">
|
446
|
-
<${input.renderBody}/>
|
447
|
-
</div>
|
448
|
-
```
|
449
|
-
|
450
|
-
## Attribute Tag
|
451
|
-
|
452
|
-
As the name implies, `<@attribute-tags>` are special attributes that take the form of tags. They allow you to pass named body sections to a [custom tag](./custom-tags.md).
|
453
|
-
|
454
|
-
The core `<await>` tag allows you to pass multiple body sections that it will conditionally render based on the state of the promise.
|
455
|
-
|
456
|
-
```marko
|
457
|
-
<await(somePromise)>
|
458
|
-
<@then|result|>
|
459
|
-
The promise resolved: ${result}
|
460
|
-
</@then>
|
461
|
-
<@catch|error|>
|
462
|
-
The promise rejected: ${error.message}
|
463
|
-
</@catch>
|
464
|
-
</await>
|
465
|
-
```
|
466
|
-
|
467
|
-
These body sections are also commonly used to create layouts:
|
468
|
-
|
469
|
-
```marko
|
470
|
-
<page-layout>
|
471
|
-
<@heading>
|
472
|
-
<h1>Hello</h1>
|
473
|
-
</@heading>
|
474
|
-
<@body>
|
475
|
-
<p>Lorem ipsum....</p>
|
476
|
-
</@body>
|
477
|
-
</page-layout>
|
478
|
-
```
|
479
|
-
|
480
|
-
These tags are passed to the custom tag as objects with a `renderBody`, it can then [render its body content](./body-content.md).
|
481
|
-
|
482
|
-
> **Note:**
|
483
|
-
> Attribute tags can have their own parameters, but like attributes, they cannot access the parameters of their parent tag:
|
484
|
-
>
|
485
|
-
> ```marko
|
486
|
-
> <list|item|>
|
487
|
-
> ${item.name}
|
488
|
-
> <@separator>${item} (oops, ReferenceError)</@separator>
|
489
|
-
> </list>
|
490
|
-
> ```
|
491
|
-
|
492
|
-
## Inline JavaScript
|
493
|
-
|
494
|
-
To execute JavaScript in your template you can insert a Javascript statement using the `$ <code>` syntax.
|
495
|
-
|
496
|
-
A line that starts with a `$` followed by a space will execute the code that follows.
|
497
|
-
|
498
|
-
```marko
|
499
|
-
$ const name = "World";
|
500
|
-
|
501
|
-
<div>
|
502
|
-
Hello, ${name}
|
503
|
-
$ console.log("The value rendered was", name);
|
504
|
-
</div>
|
505
|
-
```
|
506
|
-
|
507
|
-
A statement may continue onto subsequent lines if new lines are bounded by `{}`, `[]`, `()`, ` `` `, or `/**/`:
|
508
|
-
|
509
|
-
```marko
|
510
|
-
$ const person = {
|
511
|
-
name: "Frank",
|
512
|
-
age: 32
|
513
|
-
};
|
514
|
-
```
|
515
|
-
|
516
|
-
Multiple statements or an unbounded statement may be used by wrapping the statement(s) in a block:
|
517
|
-
|
518
|
-
```marko
|
519
|
-
$ {
|
520
|
-
const bgColor = getRandomColor();
|
521
|
-
const textColor = isLight(bgColor)
|
522
|
-
? "black"
|
523
|
-
: "white";
|
524
|
-
}
|
525
|
-
```
|
526
|
-
|
527
|
-
> **ProTip:** Any JavaScript statement can be used here, even `debugger`:
|
528
|
-
>
|
529
|
-
> ```marko
|
530
|
-
> <div>
|
531
|
-
> ${textColor}
|
532
|
-
> $ debugger; // Quickly debug `textColor`
|
533
|
-
> </div>
|
534
|
-
> ```
|
535
|
-
|
536
|
-
> **ProTip:** If necessary, you can escape `$` using a backslash to have it be treated as text instead of a placeholder token:
|
537
|
-
>
|
538
|
-
> ```marko
|
539
|
-
> <p>You can run JS in a Marko template like this:</p>
|
540
|
-
> <code>
|
541
|
-
> \$ var num = 123;
|
542
|
-
> </code>
|
543
|
-
> ```
|
544
|
-
|
545
|
-
> **ProTip:** If you find yourself writing a lot of inline JS, consider moving it out to an external file and then [`import`](#importing-external-files) it.
|
546
|
-
|
547
|
-
### Static JavaScript
|
548
|
-
|
549
|
-
Inline JavaScript will run each time your template is rendered, but the JavaScript code that follows `static` will only run once when the template is loaded. It must be declared at the top level and does not have access to values passed in at render time.
|
550
|
-
|
551
|
-
```marko
|
552
|
-
static var count = 0;
|
553
|
-
static var formatter = new Formatter();
|
554
|
-
|
555
|
-
static function sum(a, b) {
|
556
|
-
return a + b;
|
557
|
-
};
|
558
|
-
|
559
|
-
<div>${formatter.format(sum(2, 3))}</div>
|
560
|
-
```
|
561
|
-
|
562
|
-
Like inline Javascript, multiple statements or an unbounded statement may be used by wrapping the statement(s) in a block:
|
563
|
-
|
564
|
-
```marko
|
565
|
-
static {
|
566
|
-
var base = 2;
|
567
|
-
function sum(a, b) {
|
568
|
-
return base + a + b;
|
569
|
-
};
|
570
|
-
}
|
571
|
-
```
|
572
|
-
|
573
|
-
### Importing external files
|
574
|
-
|
575
|
-
The `import` statement is used to access data and functions from external files. It follows the same syntax as the [JavaScript `import` statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import).
|
576
|
-
|
577
|
-
```marko
|
578
|
-
import sum from './utils/sum';
|
579
|
-
<div>The sum of 2 + 3 is ${sum(2, 3)}</div>
|
580
|
-
```
|
581
|
-
|
582
|
-
As a shorthand you can also import components by providing it's html tag name wrapped in angle brackets, eg:
|
583
|
-
|
584
|
-
```marko
|
585
|
-
import MyComponent from "<my-component>"
|
586
|
-
```
|
587
|
-
|
588
|
-
This is especially useful with the [dynamic tag name syntax](./syntax.md#dynamic-tagname) and uses the same [component discovery](./custom-tags.md#how-tags-are-discovered) as if the tag was used in the template.
|
589
|
-
|
590
|
-
## Comments
|
591
|
-
|
592
|
-
Standard HTML comments can be used and will be stripped out of the rendered output.
|
593
|
-
At the top level of the template JavaScript comments (`// comment` and `/** comment */`) can also be used.
|
594
|
-
|
595
|
-
```marko
|
596
|
-
<!-- This is a comment that will not be rendered -->
|
597
|
-
|
598
|
-
<h1>Hello</h1>
|
599
|
-
```
|
600
|
-
|
601
|
-
If you would like for your HTML comment to show up in the final output then you can use the [`html-comment` core tag](./core-tags.md#html-comment).
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# Troubleshooting HTTP Streams
|
2
|
-
|
3
|
-
[The way Marko streams HTML](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding) is old and well-supported, but default configurations and assumptions by other software can foil it. This page describes some known culprits that may buffer your Node server’s output HTTP streams.
|
4
|
-
|
5
|
-
## Reverse proxies/load balancers
|
6
|
-
|
7
|
-
- Turn off proxy buffering, or if you can’t, set the proxy buffer sizes to be reasonably small.
|
8
|
-
|
9
|
-
- Make sure the “upstream” HTTP version is 1.1 or higher; HTTP/1.0 and lower do not support streaming.
|
10
|
-
|
11
|
-
- Some software doesn’t support HTTP/2 or higher “upstream” connections at all or very well — if your Node server uses HTTP/2, you may need to downgrade.
|
12
|
-
|
13
|
-
- Check if “upstream” connections are `keep-alive`: overhead from closing and reopening connections may delay responses.
|
14
|
-
|
15
|
-
- For typical modern webpage filesizes, the following bullet points probably won’t matter. But if you want to stream **small chunks of data with the lowest latency**, investigate these sources of buffering:
|
16
|
-
|
17
|
-
- Automatic gzip/brotli compression may have their buffer sizes set too high; you can tune their buffers to be smaller for faster streaming in exchange for slightly worse compression.
|
18
|
-
|
19
|
-
- You can [tune HTTPS record sizes for lower latency, as described in High Performance Browser Networking](https://hpbn.co/transport-layer-security-tls/#optimize-tls-record-size).
|
20
|
-
|
21
|
-
- Turning off MIME sniffing with [the `X-Content-Type-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) header eliminates browser buffering at the very beginning of HTTP responses
|
22
|
-
|
23
|
-
### NGiNX
|
24
|
-
|
25
|
-
Most of NGiNX’s relevant parameters are inside [its builtin `http_proxy` module](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering):
|
26
|
-
|
27
|
-
```nginx
|
28
|
-
proxy_http_version 1.1; # 1.0 by default
|
29
|
-
proxy_buffering off; # on by default
|
30
|
-
```
|
31
|
-
|
32
|
-
### Apache
|
33
|
-
|
34
|
-
Apache’s default configuration works fine with streaming, but your host may have it configured differently. The relevant Apache configuration is inside [its `mod_proxy` and `mod_proxy_*` modules](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html) and their [associated environment variables](https://httpd.apache.org/docs/2.4/env.html).
|
35
|
-
|
36
|
-
## CDNs
|
37
|
-
|
38
|
-
Content Delivery Networks (CDNs) consider efficient streaming one of their best features, but it may be off by default or if certain features are enabled.
|
39
|
-
|
40
|
-
- For Fastly or another provider that uses VCL configuration, check [if backend responses have `beresp.do_stream = true` set](https://developer.fastly.com/reference/vcl/variables/backend-response/beresp-do-stream/).
|
41
|
-
|
42
|
-
- Some [Akamai features designed to mitigate slow backends can ironically slow down fast chunked responses](https://community.akamai.com/customers/s/question/0D50f00006n975d/enabling-chunked-transfer-encoding-responses). Try toggling off Adaptive Acceleration, Ion, mPulse, Prefetch, and/or similar performance features. Also check for the following in the configuration:
|
43
|
-
|
44
|
-
```xml
|
45
|
-
<network:http.buffer-response-v2>off</network:http.buffer-response-v2>
|
46
|
-
```
|
47
|
-
|
48
|
-
## Node.js itself
|
49
|
-
|
50
|
-
For extreme cases where [Node streams very small HTML chunks with its built-in compression modules](https://github.com/marko-js/marko/pull/1641), you may need to tweak the compressor stream settings. Here’s an example with `createGzip` and its `Z_PARTIAL_FLUSH` flag:
|
51
|
-
|
52
|
-
```js
|
53
|
-
import http from "http";
|
54
|
-
import zlib from "zlib";
|
55
|
-
|
56
|
-
import MarkoTemplate from "./something.marko";
|
57
|
-
|
58
|
-
http
|
59
|
-
.createServer(function (request, response) {
|
60
|
-
response.writeHead(200, { "content-type": "text/html;charset=utf-8" });
|
61
|
-
const templateStream = MarkoTemplate.stream({});
|
62
|
-
const gzipStream = zlib.createGzip({
|
63
|
-
flush: zlib.constants.Z_PARTIAL_FLUSH,
|
64
|
-
});
|
65
|
-
templateStream.pipe(outputStream).pipe(response);
|
66
|
-
})
|
67
|
-
.listen(80);
|
68
|
-
```
|