marko 5.37.0 → 6.0.0-3.4
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 +2112 -0
- package/dist/debug/dom.mjs +2089 -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 +9143 -489
- 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 +33 -74
- 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 -18
- 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 -75
- 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 -551
- 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
@@ -1,164 +0,0 @@
|
|
1
|
-
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.analyzeStaticVDOM = analyzeStaticVDOM;exports.optimizeStaticVDOM = optimizeStaticVDOM;var _compiler = require("@marko/compiler");
|
2
|
-
var _babelUtils = require("@marko/compiler/babel-utils");
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
var _he = require("he");
|
10
|
-
|
11
|
-
var _attributes = _interopRequireDefault(require("../tag/native-tag[vdom]/attributes"));
|
12
|
-
var _keyManager = require("./key-manager");
|
13
|
-
var _vdomOutWrite = _interopRequireDefault(require("./vdom-out-write"));
|
14
|
-
|
15
|
-
const skipDirectives = new Set([
|
16
|
-
"key",
|
17
|
-
"w-bind",
|
18
|
-
"no-update",
|
19
|
-
"no-update-if",
|
20
|
-
"no-update-body",
|
21
|
-
"no-update-body-if"]
|
22
|
-
);
|
23
|
-
const staticNodes = new WeakSet();
|
24
|
-
|
25
|
-
const mergeStaticCreateVisitor = {
|
26
|
-
MarkoText(path, state) {
|
27
|
-
const { node } = path;
|
28
|
-
state.currentRoot = _compiler.types.callExpression(
|
29
|
-
_compiler.types.memberExpression(state.currentRoot, _compiler.types.identifier("t")),
|
30
|
-
[_compiler.types.stringLiteral((0, _he.decode)(node.value))]
|
31
|
-
);
|
32
|
-
},
|
33
|
-
MarkoPlaceholder(path, state) {
|
34
|
-
const computed = (0, _babelUtils.computeNode)(path.node.value);
|
35
|
-
state.currentRoot = _compiler.types.callExpression(
|
36
|
-
_compiler.types.memberExpression(state.currentRoot, _compiler.types.identifier("t")),
|
37
|
-
[
|
38
|
-
_compiler.types.stringLiteral(
|
39
|
-
computed && computed.value != null ? `${computed.value}` : ""
|
40
|
-
)]
|
41
|
-
|
42
|
-
);
|
43
|
-
},
|
44
|
-
MarkoTag(path, state) {
|
45
|
-
(0, _keyManager.getKeyManager)(path).resolveKey(path);
|
46
|
-
state.currentRoot = _compiler.types.callExpression(
|
47
|
-
_compiler.types.memberExpression(state.currentRoot, _compiler.types.identifier("e")),
|
48
|
-
getConstElementArgs(path)
|
49
|
-
);
|
50
|
-
}
|
51
|
-
};
|
52
|
-
|
53
|
-
const analyzeStaticVisitor = {
|
54
|
-
MarkoText(path) {
|
55
|
-
staticNodes.add(path.node);
|
56
|
-
},
|
57
|
-
MarkoPlaceholder(path) {
|
58
|
-
if (path.node.escape) {
|
59
|
-
const computed = (0, _babelUtils.computeNode)(path.node.value);
|
60
|
-
if (computed) {
|
61
|
-
staticNodes.add(path.node);
|
62
|
-
}
|
63
|
-
}
|
64
|
-
},
|
65
|
-
MarkoTag: {
|
66
|
-
enter(path) {
|
67
|
-
// needed to handle global keys on elements that don't have specific key attributes
|
68
|
-
if ((0, _babelUtils.isLoopTag)(path)) path.skip();
|
69
|
-
},
|
70
|
-
exit(path) {
|
71
|
-
// check name
|
72
|
-
let isStatic =
|
73
|
-
(0, _babelUtils.isNativeTag)(path) &&
|
74
|
-
!path.node.attributeTags.length &&
|
75
|
-
!path.node.body.attributeTags &&
|
76
|
-
!path.node.body.params.length &&
|
77
|
-
!path.node.arguments &&
|
78
|
-
!(0, _keyManager.hasUserKey)(path);
|
79
|
-
|
80
|
-
const tagDef = (0, _babelUtils.getTagDef)(path);
|
81
|
-
isStatic = isStatic && !tagDef.translator;
|
82
|
-
|
83
|
-
// check attributes
|
84
|
-
isStatic =
|
85
|
-
isStatic &&
|
86
|
-
path.
|
87
|
-
get("attributes").
|
88
|
-
every(
|
89
|
-
(attr) =>
|
90
|
-
_compiler.types.isMarkoAttribute(attr) &&
|
91
|
-
!(
|
92
|
-
attr.node.arguments ||
|
93
|
-
attr.node.modifier ||
|
94
|
-
skipDirectives.has(attr.node.name) ||
|
95
|
-
!(0, _babelUtils.computeNode)(attr.node.value))
|
96
|
-
|
97
|
-
);
|
98
|
-
|
99
|
-
// check children
|
100
|
-
isStatic =
|
101
|
-
isStatic &&
|
102
|
-
path.
|
103
|
-
get("body").
|
104
|
-
get("body").
|
105
|
-
every((t) => staticNodes.has(t.node));
|
106
|
-
|
107
|
-
if (isStatic) staticNodes.add(path.node);
|
108
|
-
}
|
109
|
-
}
|
110
|
-
};
|
111
|
-
|
112
|
-
function optimizeStaticVDOM(path) {
|
113
|
-
const {
|
114
|
-
hub: { file }
|
115
|
-
} = path;
|
116
|
-
|
117
|
-
if (
|
118
|
-
!shouldRun(file.markoOpts) ||
|
119
|
-
!staticNodes.has(path.node) ||
|
120
|
-
staticNodes.has(path.parentPath.parentPath.node))
|
121
|
-
{
|
122
|
-
return;
|
123
|
-
}
|
124
|
-
|
125
|
-
const identifier = path.scope.generateUidIdentifier("marko_node");
|
126
|
-
const state = {
|
127
|
-
currentRoot: _compiler.types.callExpression(
|
128
|
-
(0, _babelUtils.importDefault)(
|
129
|
-
file,
|
130
|
-
"marko/src/runtime/vdom/helpers/const-element.js",
|
131
|
-
"marko_constElement"
|
132
|
-
),
|
133
|
-
getConstElementArgs(path)
|
134
|
-
)
|
135
|
-
};
|
136
|
-
|
137
|
-
path.traverse(mergeStaticCreateVisitor, state);
|
138
|
-
|
139
|
-
const d = _compiler.types.variableDeclaration("const", [
|
140
|
-
_compiler.types.variableDeclarator(identifier, state.currentRoot)]
|
141
|
-
);
|
142
|
-
file.path.node.body.push(d);
|
143
|
-
path.replaceWith((0, _vdomOutWrite.default)("n", identifier, file._componentInstanceIdentifier));
|
144
|
-
path.skip();
|
145
|
-
}
|
146
|
-
|
147
|
-
function analyzeStaticVDOM(path) {
|
148
|
-
if (shouldRun(path.hub.file.markoOpts)) {
|
149
|
-
path.traverse(analyzeStaticVisitor);
|
150
|
-
}
|
151
|
-
}
|
152
|
-
|
153
|
-
function shouldRun(markoOpts) {
|
154
|
-
return markoOpts.optimize && markoOpts.output !== "html";
|
155
|
-
}
|
156
|
-
|
157
|
-
function getConstElementArgs(path) {
|
158
|
-
const { node } = path;
|
159
|
-
return [
|
160
|
-
node.name,
|
161
|
-
(0, _attributes.default)(path, path.get("attributes")),
|
162
|
-
_compiler.types.numericLiteral(node.body.body.length)];
|
163
|
-
|
164
|
-
}
|
@@ -1,22 +0,0 @@
|
|
1
|
-
"use strict";exports.__esModule = true;exports.enter = enter;exports.exit = exit; // Utilities for executing multi step compiler hooks (code generators in this package).
|
2
|
-
|
3
|
-
function enter(plugin, ...args) {
|
4
|
-
const fn =
|
5
|
-
plugin && (
|
6
|
-
plugin.enter ||
|
7
|
-
plugin.default && plugin.default.enter ||
|
8
|
-
plugin.default) ||
|
9
|
-
plugin;
|
10
|
-
if (typeof fn === "function") {
|
11
|
-
fn(...args);
|
12
|
-
}
|
13
|
-
}
|
14
|
-
|
15
|
-
function exit(plugin, ...args) {
|
16
|
-
const fn =
|
17
|
-
plugin && (
|
18
|
-
plugin.exit || (plugin.default ? plugin.default.exit : undefined));
|
19
|
-
if (typeof fn === "function") {
|
20
|
-
fn(...args);
|
21
|
-
}
|
22
|
-
}
|
@@ -1,3 +0,0 @@
|
|
1
|
-
"use strict";exports.__esModule = true;exports.SPREAD_ATTRS = exports.IS_CUSTOM_ELEMENT = exports.HAS_SIMPLE_ATTRS = void 0;const HAS_SIMPLE_ATTRS = exports.HAS_SIMPLE_ATTRS = 1;
|
2
|
-
const IS_CUSTOM_ELEMENT = exports.IS_CUSTOM_ELEMENT = 2; // TODO: impl custom elements.
|
3
|
-
const SPREAD_ATTRS = exports.SPREAD_ATTRS = 4; // TODO: impl custom elements.
|
@@ -1,10 +0,0 @@
|
|
1
|
-
"use strict";exports.__esModule = true;exports.default = write;var _compiler = require("@marko/compiler");
|
2
|
-
|
3
|
-
function write(method, ...args) {
|
4
|
-
return _compiler.types.expressionStatement(
|
5
|
-
_compiler.types.callExpression(
|
6
|
-
_compiler.types.memberExpression(_compiler.types.identifier("out"), _compiler.types.identifier(method)),
|
7
|
-
args
|
8
|
-
)
|
9
|
-
);
|
10
|
-
}
|
@@ -1,291 +0,0 @@
|
|
1
|
-
<a href="#">
|
2
|
-
<img src="https://cdn-images-1.medium.com/max/1000/1*Cmy6UutD5-ogL8dr1DySMQ.png" alt="Marko logo" width="100%" />
|
3
|
-
</a><br />
|
4
|
-
|
5
|
-
> This article was published in August 2017. You can find the original ["10 Awesome Marko Features" article here](https://medium.com/@austinkelleher/10-awesome-marko-features-afba9d094d42)!
|
6
|
-
|
7
|
-
# 10 Awesome Marko Features
|
8
|
-
|
9
|
-
[Marko](https://markojs.com/) is a friendly and super fast UI library that makes
|
10
|
-
building web apps<br> fun! In celebration of rapidly approaching [5,000 stars on
|
11
|
-
GitHub](https://github.com/marko-js/marko) (the ultimate open source vanity
|
12
|
-
metric), here are 10 features that will make you more productive in no
|
13
|
-
particular order...
|
14
|
-
|
15
|
-
#### 1. Shorthand Attributes
|
16
|
-
|
17
|
-
Tired of constantly typing out `class` and `id` attributes? No need with Marko.
|
18
|
-
Simply utilize the shorthand based on CSS selectors:
|
19
|
-
|
20
|
-
```marko
|
21
|
-
style {
|
22
|
-
.count {
|
23
|
-
color:#09c;
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
// Equivalent to <div class="count"/>
|
28
|
-
<div.count/>
|
29
|
-
|
30
|
-
// Equivalent to <span id="my-id"/>
|
31
|
-
<span#my-id/>
|
32
|
-
|
33
|
-
// Combined
|
34
|
-
<button#submit.primary/>
|
35
|
-
```
|
36
|
-
|
37
|
-
#### 2. All attribute values are Just JavaScript™
|
38
|
-
|
39
|
-
Unlike with HTML, you are not limited to string attribute values when using
|
40
|
-
Marko. Attributes can have types, which makes it really easy to pass data to
|
41
|
-
custom tags and it works for standard HTML tags too:
|
42
|
-
|
43
|
-
```marko
|
44
|
-
<div class=input.myClassName/>
|
45
|
-
<input type="checkbox" checked=input.isChecked/>
|
46
|
-
<awesome-component myString="Hello"/>
|
47
|
-
<awesome-component myNumber=1/>
|
48
|
-
<awesome-component myTemplateString=`Hello ${name}`/>
|
49
|
-
<awesome-component myBoolean=true/>
|
50
|
-
<awesome-component myArray=[1, 2, 3]/>
|
51
|
-
<awesome-component myObject={hello: 'world'}/>
|
52
|
-
<awesome-component myVariable=name/>
|
53
|
-
<awesome-component myFunctionCall=input.foo()/>
|
54
|
-
```
|
55
|
-
|
56
|
-
#### 3. Isomorphic UI components made easy
|
57
|
-
|
58
|
-
Tired of boilerplate code and trouble managing component input and state? Marko
|
59
|
-
makes it a breeze to develop self-contained and individually testable
|
60
|
-
components. Changing state is completely synchronous, so there won’t be any
|
61
|
-
headaches. You can also use inline styles making it very easy to develop small
|
62
|
-
components quickly.
|
63
|
-
|
64
|
-
```marko
|
65
|
-
class {
|
66
|
-
onInput(input) {
|
67
|
-
this.state = {
|
68
|
-
count: input.count || 0
|
69
|
-
};
|
70
|
-
}
|
71
|
-
increment() {
|
72
|
-
this.state.count++;
|
73
|
-
}
|
74
|
-
}
|
75
|
-
|
76
|
-
style {
|
77
|
-
.count {
|
78
|
-
color:#09c;
|
79
|
-
}
|
80
|
-
}
|
81
|
-
|
82
|
-
<div.count>${state.count}</div>
|
83
|
-
<button on-click('increment')>
|
84
|
-
Click me!
|
85
|
-
</button>
|
86
|
-
```
|
87
|
-
|
88
|
-
Do you see references to “Marko” in the snippet above? Yeah, me neither.
|
89
|
-
|
90
|
-
Is your component becoming too large? Do you prefer separating your CSS,
|
91
|
-
JavaScript, and markup code? No problem. You can easily [rip out your code into
|
92
|
-
multiple files](https://markojs.com/docs/class-components/#multi-file-components):
|
93
|
-
|
94
|
-
```
|
95
|
-
components/
|
96
|
-
click-counter/
|
97
|
-
component.js
|
98
|
-
index.marko
|
99
|
-
style.css
|
100
|
-
```
|
101
|
-
|
102
|
-
#### 4. Concise syntax
|
103
|
-
|
104
|
-
The DOM is just a tree structure. Indentation is a great way to describe a DOM
|
105
|
-
tree without having to worry about matching up beginning and ending tags. Marko
|
106
|
-
lets you choose between a concise, indentation-based syntax, and a familiar HTML
|
107
|
-
syntax:
|
108
|
-
|
109
|
-
```marko
|
110
|
-
<!-- Count our clicks! -->
|
111
|
-
<div.count>
|
112
|
-
<p>Count: ${state.count}</p>
|
113
|
-
</div>
|
114
|
-
<button.example-button on-click('increment')>
|
115
|
-
Click me!
|
116
|
-
</button>
|
117
|
-
```
|
118
|
-
|
119
|
-
Here’s the same thing with the concise syntax:
|
120
|
-
|
121
|
-
```marko
|
122
|
-
// Count our clicks!
|
123
|
-
div.count
|
124
|
-
p -- Count: ${state.count}
|
125
|
-
button.example-button on-click('increment') -- Click me!
|
126
|
-
```
|
127
|
-
|
128
|
-
Can’t make up your mind or just want to paste in that code snippet from
|
129
|
-
StackOverflow? HTML syntax can be used within in the concise syntax. You’ll come
|
130
|
-
back and make it consistent…_one day_.
|
131
|
-
|
132
|
-
#### 5. Import JavaScript modules
|
133
|
-
|
134
|
-
Do you have some helper JavaScript functions that you need to use in your views?
|
135
|
-
Marko lets you import any JavaScript module into your template using the same
|
136
|
-
syntax as the JavaScript `import` statement without using Babel or any other
|
137
|
-
build tool. No need for problematic globals (you could do that too, but please
|
138
|
-
don’t or your coworkers will hate you).
|
139
|
-
|
140
|
-
```marko
|
141
|
-
import sum from './utils/sum';
|
142
|
-
|
143
|
-
<div>The sum of 2 + 3 is ${sum(2, 3)}</div>
|
144
|
-
```
|
145
|
-
|
146
|
-
#### 6. No need to import custom tags (it’s a good thing, trust me)
|
147
|
-
|
148
|
-
Marko uses your directory structure as a method for automatically registering
|
149
|
-
custom tags. This means that Marko can implicitly import tags based on where the
|
150
|
-
template is located on disk. Marko will search up the directory looking for
|
151
|
-
custom tags in `components/`directories similar to how Node.js discovers modules
|
152
|
-
in `node_modules/` directories.
|
153
|
-
|
154
|
-
Given the following directory structure:
|
155
|
-
|
156
|
-
```
|
157
|
-
components/
|
158
|
-
fancy-button/
|
159
|
-
index.marko
|
160
|
-
fancy-container/
|
161
|
-
index.marko
|
162
|
-
```
|
163
|
-
|
164
|
-
If `fancy-button` is used inside of `fancy-container`, it will be implicitly<br>
|
165
|
-
imported:
|
166
|
-
|
167
|
-
```marko
|
168
|
-
<!-- No need to use `require` or `import` because it will implicitly import custom tags -->
|
169
|
-
<div>
|
170
|
-
<fancy-button color=input.buttonColor/>
|
171
|
-
</div>
|
172
|
-
```
|
173
|
-
|
174
|
-
#### 7. Use JavaScript to set CSS classes and styles
|
175
|
-
|
176
|
-
Setting CSS classes and styles is made easy using JavaScript! Marko will happily
|
177
|
-
accept simple strings, JavaScript objects and arrays (_falsy values will be
|
178
|
-
ignored)._
|
179
|
-
|
180
|
-
```marko
|
181
|
-
$ const fontColor = input.color || 'blue';
|
182
|
-
$ const isActive = input.active === true;
|
183
|
-
|
184
|
-
<div class=['person', isActive && 'active']
|
185
|
-
style={color: fontColor} />
|
186
|
-
```
|
187
|
-
|
188
|
-
#### 8. Inline JavaScript Statements
|
189
|
-
|
190
|
-
Marko takes HTML and makes it more like JavaScript. You can exit out of HTML
|
191
|
-
mode to embed a JavaScript statement by starting the line with a `$`. You can
|
192
|
-
use this feature to embed JavaScript variables, functions, etc. where they are
|
193
|
-
needed (take that, “separation of concerns”).
|
194
|
-
|
195
|
-
```marko
|
196
|
-
$ const randomNumber = Math.random();
|
197
|
-
$ const person = {
|
198
|
-
name: 'Frank',
|
199
|
-
age: 32
|
200
|
-
};
|
201
|
-
|
202
|
-
<div>Random number: ${randomNumber}</div>
|
203
|
-
<div>${person.name} is ${person.age} years old</div>
|
204
|
-
```
|
205
|
-
|
206
|
-
If you want to combine multiple JavaScript statements you can do that too:
|
207
|
-
|
208
|
-
```marko
|
209
|
-
$ {
|
210
|
-
const randomNumber = Math.random();
|
211
|
-
const person = {
|
212
|
-
name: 'Frank',
|
213
|
-
age: 32
|
214
|
-
};
|
215
|
-
}
|
216
|
-
|
217
|
-
<div>Random number: ${randomNumber}</div>
|
218
|
-
<div>${person.name} is ${person.age} years old</div>
|
219
|
-
```
|
220
|
-
|
221
|
-
#### 9. Async rendering with the `<await>` tag
|
222
|
-
|
223
|
-
Node.js is asynchronous. Browsers are asynchronous. Why should rendering be
|
224
|
-
synchronous? Pass your promise along to your template and Marko will
|
225
|
-
asynchronously render parts of your view. Turns out, [this is good for
|
226
|
-
performance](https://tech.ebayinc.com/engineering/async-fragments-rediscovering-progressive-html-rendering-with-marko/).
|
227
|
-
|
228
|
-
```marko
|
229
|
-
$ const searchResultsPromise = searchService.performSearch(keywords);
|
230
|
-
|
231
|
-
<await(searchResultsPromise)>
|
232
|
-
<@then|person|>
|
233
|
-
Hello ${person.name}!
|
234
|
-
</@then>
|
235
|
-
<@catch|err|>
|
236
|
-
The error was: ${err.message}.
|
237
|
-
</@catch>
|
238
|
-
</await>
|
239
|
-
```
|
240
|
-
|
241
|
-
#### 10. Server side rendering is easy
|
242
|
-
|
243
|
-
Can’t decide if you want to do server-side rendering or client-side rendering?
|
244
|
-
Why are we even talking about this in 2017? It doesn’t matter. Seriously, just
|
245
|
-
do both. Marko makes this a no-brainer since you can render a Marko template
|
246
|
-
directly to a stream (oh, and Marko will automatically mount UI
|
247
|
-
components rendered on the server when the page loads in the browser):
|
248
|
-
|
249
|
-
```js
|
250
|
-
require("@marko/compiler/register"); // require .marko files!
|
251
|
-
|
252
|
-
const http = require("http");
|
253
|
-
const template = require("./template");
|
254
|
-
|
255
|
-
http
|
256
|
-
.createServer()
|
257
|
-
.on("request", (req, res) => {
|
258
|
-
template.render(
|
259
|
-
{
|
260
|
-
name: "Frank",
|
261
|
-
count: 30,
|
262
|
-
colors: ["red", "green", "blue"],
|
263
|
-
},
|
264
|
-
res,
|
265
|
-
);
|
266
|
-
})
|
267
|
-
.listen(8080);
|
268
|
-
```
|
269
|
-
|
270
|
-
#### Bonus: Friendly compile-time errors
|
271
|
-
|
272
|
-
We all make mistakes _every now and then_. Typo in your custom tag? Forgot an
|
273
|
-
ending tag? No worries! Marko will give you a friendly error message and point
|
274
|
-
you right to the problematic code.
|
275
|
-
|
276
|
-
```marko
|
277
|
-
<!-- Ahhhh typo! This should be <fancy-button/> -->
|
278
|
-
<fancy-buttn/>
|
279
|
-
```
|
280
|
-
|
281
|
-
You may have missed it, but it was obvious to Marko:
|
282
|
-
|
283
|
-
```
|
284
|
-
Unrecognized tag: fancy-buttn — More details: https://github.com/marko-js/marko/wiki/Error:-Unrecognized-Tag at line 2 col 1
|
285
|
-
```
|
286
|
-
|
287
|
-
Coming soon: auto correction and autonomous coding
|
288
|
-
|
289
|
-
---
|
290
|
-
|
291
|
-
[_Cover image from Wikipedia_](https://commons.wikimedia.org/wiki/File:Amanhecer_no_Hercules_--.jpg)
|