marko 5.37.6 → 6.0.0-3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/attr-tag.d.ts +8 -0
- package/dist/common/compat-meta.d.ts +2 -0
- package/dist/common/for.d.ts +5 -0
- package/dist/common/helpers.d.ts +7 -0
- package/dist/common/meta.d.ts +2 -0
- package/dist/common/types.d.ts +105 -0
- package/dist/debug/dom.js +2111 -0
- package/dist/debug/dom.mjs +2088 -0
- package/dist/debug/html.js +2740 -0
- package/dist/debug/html.mjs +2663 -0
- package/dist/dom/abort-signal.d.ts +3 -0
- package/dist/dom/compat.d.ts +20 -0
- package/dist/dom/control-flow.d.ts +14 -0
- package/dist/dom/controllable.d.ts +12 -0
- package/dist/dom/dom.d.ts +19 -0
- package/dist/dom/event.d.ts +4 -0
- package/dist/dom/parse-html.d.ts +5 -0
- package/dist/dom/queue.d.ts +10 -0
- package/dist/dom/reconcile.d.ts +2 -0
- package/dist/dom/renderer.d.ts +21 -0
- package/dist/dom/resolve-cursor-position.d.ts +1 -0
- package/dist/dom/resume.d.ts +9 -0
- package/dist/dom/schedule.d.ts +2 -0
- package/dist/dom/scope.d.ts +7 -0
- package/dist/dom/signals.d.ts +39 -0
- package/dist/dom/template.d.ts +3 -0
- package/dist/dom/walker.d.ts +4 -0
- package/dist/dom.d.ts +15 -0
- package/dist/dom.js +1370 -0
- package/dist/dom.mjs +1350 -0
- package/dist/html/attrs.d.ts +14 -0
- package/dist/html/compat.d.ts +14 -0
- package/dist/html/content.d.ts +5 -0
- package/dist/html/dynamic-tag.d.ts +12 -0
- package/dist/html/for.d.ts +4 -0
- package/dist/html/inlined-runtimes.d.ts +2 -0
- package/dist/html/serializer.d.ts +14 -0
- package/dist/html/template.d.ts +3 -0
- package/dist/html/writer.d.ts +114 -0
- package/dist/html.d.ts +9 -0
- package/dist/html.js +1818 -0
- package/dist/html.mjs +1744 -0
- package/dist/translator/core/attrs.d.ts +3 -0
- package/dist/translator/core/client.d.ts +14 -0
- package/dist/translator/core/const.d.ts +3 -0
- package/dist/translator/core/debug.d.ts +3 -0
- package/dist/translator/core/define.d.ts +3 -0
- package/dist/translator/core/effect.d.ts +3 -0
- package/dist/translator/core/export.d.ts +3 -0
- package/dist/translator/core/for.d.ts +67 -0
- package/dist/translator/core/html-comment.d.ts +12 -0
- package/dist/translator/core/html-script.d.ts +9 -0
- package/dist/translator/core/html-style.d.ts +9 -0
- package/dist/translator/core/id.d.ts +3 -0
- package/dist/translator/core/if.d.ts +53 -0
- package/dist/translator/core/import.d.ts +3 -0
- package/dist/translator/core/index.d.ts +152 -0
- package/dist/translator/core/let.d.ts +8 -0
- package/dist/translator/core/lifecycle.d.ts +10 -0
- package/dist/translator/core/log.d.ts +3 -0
- package/dist/translator/core/return.d.ts +6 -0
- package/dist/translator/core/script.d.ts +3 -0
- package/dist/translator/core/server.d.ts +14 -0
- package/dist/translator/core/static.d.ts +14 -0
- package/dist/translator/core/style.d.ts +3 -0
- package/dist/translator/index.d.ts +201 -0
- package/dist/translator/index.js +9134 -490
- package/dist/translator/util/assert.d.ts +3 -0
- package/dist/translator/util/binding-has-downstream-expressions.d.ts +2 -0
- package/dist/translator/util/entry-builder.d.ts +19 -0
- package/dist/translator/util/evaluate.d.ts +11 -0
- package/dist/translator/util/for-each-identifier.d.ts +2 -0
- package/dist/translator/util/get-defined-binding-expression.d.ts +3 -0
- package/dist/translator/util/get-known-attr-values.d.ts +2 -0
- package/dist/translator/util/get-parent-tag.d.ts +2 -0
- package/dist/translator/util/get-root.d.ts +7 -0
- package/dist/translator/util/get-tag-name.d.ts +2 -0
- package/dist/translator/util/is-core-tag.d.ts +10 -0
- package/dist/translator/util/is-stateful.d.ts +3 -0
- package/dist/translator/util/is-static.d.ts +2 -0
- package/dist/translator/util/marko-config.d.ts +4 -0
- package/dist/translator/util/nested-attribute-tags.d.ts +17 -0
- package/dist/translator/util/normalize-string-expression.d.ts +3 -0
- package/dist/translator/util/optional.d.ts +20 -0
- package/dist/translator/util/plugin-hooks.d.ts +4 -0
- package/dist/translator/util/references.d.ts +84 -0
- package/dist/translator/util/runtime-info.d.ts +5 -0
- package/dist/translator/util/runtime.d.ts +15 -0
- package/dist/translator/util/scope-read.d.ts +6 -0
- package/dist/translator/util/sections.d.ts +51 -0
- package/dist/translator/util/signals.d.ts +61 -0
- package/dist/translator/util/simplify-fn.d.ts +5 -0
- package/dist/translator/util/state.d.ts +3 -0
- package/dist/translator/util/tag-name-type.d.ts +16 -0
- package/dist/translator/util/to-first-expression-or-block.d.ts +3 -0
- package/dist/translator/util/to-first-statement-or-block.d.ts +2 -0
- package/dist/translator/util/to-property-name.d.ts +7 -0
- package/dist/translator/util/translate-attrs.d.ts +12 -0
- package/dist/translator/util/translate-var.d.ts +2 -0
- package/dist/translator/util/traverse.d.ts +9 -0
- package/dist/translator/util/visitors.d.ts +11 -0
- package/dist/translator/util/walks.d.ts +15 -0
- package/dist/translator/util/with-previous-location.d.ts +2 -0
- package/dist/translator/util/writer.d.ts +13 -0
- package/dist/translator/visitors/cdata.d.ts +7 -0
- package/dist/translator/visitors/comment.d.ts +7 -0
- package/dist/translator/visitors/declaration.d.ts +7 -0
- package/dist/translator/visitors/document-type.d.ts +7 -0
- package/dist/translator/visitors/function.d.ts +19 -0
- package/dist/translator/visitors/import-declaration.d.ts +8 -0
- package/dist/translator/visitors/placeholder.d.ts +22 -0
- package/dist/translator/visitors/program/dom.d.ts +7 -0
- package/dist/translator/visitors/program/html.d.ts +8 -0
- package/dist/translator/visitors/program/index.d.ts +39 -0
- package/dist/translator/visitors/referenced-identifier.d.ts +7 -0
- package/dist/translator/visitors/scriptlet.d.ts +8 -0
- package/dist/translator/visitors/tag/attribute-tag.d.ts +11 -0
- package/dist/translator/visitors/tag/custom-tag.d.ts +19 -0
- package/dist/translator/visitors/tag/dynamic-tag.d.ts +18 -0
- package/dist/translator/visitors/tag/index.d.ts +15 -0
- package/dist/translator/visitors/tag/native-tag.d.ts +25 -0
- package/dist/translator/visitors/text.d.ts +7 -0
- package/index.d.ts +30 -261
- package/package.json +40 -67
- package/tag-types/const.d.marko +7 -0
- package/tag-types/debug.d.marko +5 -0
- package/tag-types/define.d.marko +5 -0
- package/tag-types/do.d.marko +5 -0
- package/tag-types/effect.d.marko +5 -0
- package/tag-types/id.d.marko +3 -0
- package/tag-types/let.d.marko +8 -0
- package/tag-types/lifecycle.d.marko +7 -0
- package/tag-types/log.d.marko +5 -0
- package/tag-types/script.d.marko +5 -0
- package/tags-html.d.ts +85 -5
- package/README.md +0 -161
- package/bin/markoc +0 -2
- package/bin/markoc.js +0 -441
- package/browser-refresh.js +0 -5
- package/compiler-browser.marko +0 -15
- package/compiler.js +0 -7
- package/components-browser.marko +0 -15
- package/components.js +0 -7
- package/dist/build.json +0 -3
- package/dist/compiler/config.js +0 -45
- package/dist/compiler/index.js +0 -164
- package/dist/compiler/modules.js +0 -5
- package/dist/core-tags/components/init-components-tag.js +0 -54
- package/dist/core-tags/components/preferred-script-location-tag.js +0 -25
- package/dist/core-tags/components/preserve-tag.js +0 -1
- package/dist/core-tags/core/__flush_here_and_after__.js +0 -44
- package/dist/core-tags/core/await/AsyncValue.js +0 -121
- package/dist/core-tags/core/await/client-reorder-runtime.js +0 -51
- package/dist/core-tags/core/await/index.d.marko +0 -10
- package/dist/core-tags/core/await/renderer.js +0 -249
- package/dist/core-tags/core/await/reorderer-renderer.js +0 -156
- package/dist/index.js +0 -4
- package/dist/node-require/browser-refresh.js +0 -1
- package/dist/node-require/hot-reload.js +0 -45
- package/dist/node-require/index.js +0 -103
- package/dist/node_modules/@internal/components-beginComponent/index-browser.js +0 -23
- package/dist/node_modules/@internal/components-beginComponent/index.js +0 -84
- package/dist/node_modules/@internal/components-beginComponent/package.json +0 -11
- package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +0 -335
- package/dist/node_modules/@internal/components-define-widget-legacy/index.js +0 -18
- package/dist/node_modules/@internal/components-define-widget-legacy/package.json +0 -11
- package/dist/node_modules/@internal/components-endComponent/index-browser.js +0 -5
- package/dist/node_modules/@internal/components-endComponent/index.js +0 -11
- package/dist/node_modules/@internal/components-endComponent/package.json +0 -11
- package/dist/node_modules/@internal/components-entry/index-browser.js +0 -11
- package/dist/node_modules/@internal/components-entry/index.js +0 -301
- package/dist/node_modules/@internal/components-entry/package.json +0 -11
- package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +0 -76
- package/dist/node_modules/@internal/components-entry-legacy/index.js +0 -16
- package/dist/node_modules/@internal/components-entry-legacy/package.json +0 -11
- package/dist/node_modules/@internal/components-registry/index-browser.js +0 -586
- package/dist/node_modules/@internal/components-registry/index.js +0 -44
- package/dist/node_modules/@internal/components-registry/package.json +0 -11
- package/dist/node_modules/@internal/components-util/index-browser.js +0 -152
- package/dist/node_modules/@internal/components-util/index.js +0 -71
- package/dist/node_modules/@internal/components-util/package.json +0 -11
- package/dist/node_modules/@internal/create-readable/index-browser.js +0 -30
- package/dist/node_modules/@internal/create-readable/index.js +0 -57
- package/dist/node_modules/@internal/create-readable/package.json +0 -11
- package/dist/node_modules/@internal/loader/fallback-node.js +0 -89
- package/dist/node_modules/@internal/loader/index-browser.js +0 -2
- package/dist/node_modules/@internal/loader/index.js +0 -23
- package/dist/node_modules/@internal/loader/package.json +0 -10
- package/dist/node_modules/@internal/preserve-tag/index-browser.js +0 -46
- package/dist/node_modules/@internal/preserve-tag/index.js +0 -34
- package/dist/node_modules/@internal/preserve-tag/package.json +0 -11
- package/dist/node_modules/@internal/require/index-browser.js +0 -15
- package/dist/node_modules/@internal/require/index-legacy-browser.js +0 -20
- package/dist/node_modules/@internal/require/index-webpack.js +0 -16
- package/dist/node_modules/@internal/require/index.js +0 -15
- package/dist/node_modules/@internal/require/package.json +0 -11
- package/dist/node_modules/@internal/set-immediate/index-browser.js +0 -19
- package/dist/node_modules/@internal/set-immediate/index-worker.js +0 -31
- package/dist/node_modules/@internal/set-immediate/index.js +0 -3
- package/dist/node_modules/@internal/set-immediate/package.json +0 -11
- package/dist/node_modules/@internal/set-immediate/queueMicrotask.js +0 -8
- package/dist/runtime/RenderResult.js +0 -112
- package/dist/runtime/components/Component.js +0 -663
- package/dist/runtime/components/ComponentDef.js +0 -169
- package/dist/runtime/components/ComponentsContext.js +0 -59
- package/dist/runtime/components/GlobalComponentsContext.js +0 -10
- package/dist/runtime/components/KeySequence.js +0 -16
- package/dist/runtime/components/ServerComponent.js +0 -73
- package/dist/runtime/components/State.js +0 -101
- package/dist/runtime/components/attach-detach.js +0 -60
- package/dist/runtime/components/defineComponent.js +0 -60
- package/dist/runtime/components/dom-data.js +0 -8
- package/dist/runtime/components/event-delegation.js +0 -144
- package/dist/runtime/components/index.js +0 -1
- package/dist/runtime/components/legacy/browser.json +0 -9
- package/dist/runtime/components/legacy/defineComponent-legacy.js +0 -27
- package/dist/runtime/components/legacy/defineRenderer-legacy.js +0 -171
- package/dist/runtime/components/legacy/defineWidget-legacy.js +0 -1
- package/dist/runtime/components/legacy/dependencies/html.js +0 -3
- package/dist/runtime/components/legacy/dependencies/index.js +0 -177
- package/dist/runtime/components/legacy/dependencies/vdom.js +0 -3
- package/dist/runtime/components/legacy/index.js +0 -1
- package/dist/runtime/components/legacy/jquery.js +0 -52
- package/dist/runtime/components/legacy/ready.js +0 -152
- package/dist/runtime/components/legacy/renderer-legacy.js +0 -231
- package/dist/runtime/components/registry.js +0 -1
- package/dist/runtime/components/renderer.js +0 -236
- package/dist/runtime/components/update-manager.js +0 -94
- package/dist/runtime/createOut.js +0 -13
- package/dist/runtime/dom-insert.js +0 -77
- package/dist/runtime/events.js +0 -2
- package/dist/runtime/helpers/_change-case.js +0 -45
- package/dist/runtime/helpers/assign.js +0 -21
- package/dist/runtime/helpers/attr-tag.js +0 -43
- package/dist/runtime/helpers/class-value.js +0 -30
- package/dist/runtime/helpers/dynamic-tag.js +0 -181
- package/dist/runtime/helpers/empty-component.js +0 -1
- package/dist/runtime/helpers/merge.js +0 -13
- package/dist/runtime/helpers/of-fallback.js +0 -4
- package/dist/runtime/helpers/render-tag.js +0 -20
- package/dist/runtime/helpers/serialize-noop.js +0 -5
- package/dist/runtime/helpers/style-value.js +0 -45
- package/dist/runtime/helpers/tags-compat/dom-debug.js +0 -1
- package/dist/runtime/helpers/tags-compat/dom-debug.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/dom.js +0 -1
- package/dist/runtime/helpers/tags-compat/dom.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/html-debug.js +0 -3
- package/dist/runtime/helpers/tags-compat/html-debug.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/html.js +0 -3
- package/dist/runtime/helpers/tags-compat/html.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/runtime-dom.js +0 -239
- package/dist/runtime/helpers/tags-compat/runtime-html.js +0 -136
- package/dist/runtime/helpers/to-string.js +0 -5
- package/dist/runtime/html/AsyncStream.js +0 -805
- package/dist/runtime/html/BufferedWriter.js +0 -52
- package/dist/runtime/html/StringWriter.js +0 -73
- package/dist/runtime/html/helpers/_dynamic-attr.js +0 -35
- package/dist/runtime/html/helpers/attr.js +0 -80
- package/dist/runtime/html/helpers/attrs.js +0 -26
- package/dist/runtime/html/helpers/class-attr.js +0 -8
- package/dist/runtime/html/helpers/data-marko.js +0 -36
- package/dist/runtime/html/helpers/escape-quotes.js +0 -35
- package/dist/runtime/html/helpers/escape-script-placeholder.js +0 -24
- package/dist/runtime/html/helpers/escape-style-placeholder.js +0 -22
- package/dist/runtime/html/helpers/escape-xml.js +0 -21
- package/dist/runtime/html/helpers/merge-attrs.js +0 -55
- package/dist/runtime/html/helpers/props-script.js +0 -32
- package/dist/runtime/html/helpers/style-attr.js +0 -8
- package/dist/runtime/html/hot-reload.js +0 -26
- package/dist/runtime/html/index.js +0 -33
- package/dist/runtime/html/marko-namespace.js +0 -3
- package/dist/runtime/renderable.js +0 -194
- package/dist/runtime/vdom/AsyncVDOMBuilder.js +0 -456
- package/dist/runtime/vdom/VComment.js +0 -24
- package/dist/runtime/vdom/VComponent.js +0 -17
- package/dist/runtime/vdom/VDocumentFragment.js +0 -34
- package/dist/runtime/vdom/VElement.js +0 -375
- package/dist/runtime/vdom/VFragment.js +0 -26
- package/dist/runtime/vdom/VNode.js +0 -100
- package/dist/runtime/vdom/VText.js +0 -25
- package/dist/runtime/vdom/helpers/attrs.js +0 -62
- package/dist/runtime/vdom/helpers/const-element.js +0 -25
- package/dist/runtime/vdom/helpers/merge-attrs.js +0 -16
- package/dist/runtime/vdom/hot-reload.js +0 -115
- package/dist/runtime/vdom/index.js +0 -30
- package/dist/runtime/vdom/is-text-only.js +0 -10
- package/dist/runtime/vdom/marko-namespace.js +0 -3
- package/dist/runtime/vdom/morphdom/fragment.js +0 -95
- package/dist/runtime/vdom/morphdom/helpers.js +0 -42
- package/dist/runtime/vdom/morphdom/index.js +0 -741
- package/dist/runtime/vdom/parse-html.js +0 -18
- package/dist/runtime/vdom/vdom.js +0 -88
- package/dist/taglib/index.js +0 -51
- package/dist/translator/cdata/index.js +0 -15
- package/dist/translator/cdata/index[html].js +0 -15
- package/dist/translator/cdata/index[vdom].js +0 -12
- package/dist/translator/class.js +0 -65
- package/dist/translator/comment/index.js +0 -15
- package/dist/translator/comment/index[html].js +0 -17
- package/dist/translator/comment/index[vdom].js +0 -3
- package/dist/translator/declaration/index.js +0 -15
- package/dist/translator/declaration/index[html].js +0 -12
- package/dist/translator/declaration/index[vdom].js +0 -3
- package/dist/translator/document-type/index.js +0 -15
- package/dist/translator/document-type/index[html].js +0 -12
- package/dist/translator/document-type/index[vdom].js +0 -3
- package/dist/translator/placeholder/index.js +0 -15
- package/dist/translator/placeholder/index[html].js +0 -93
- package/dist/translator/placeholder/index[vdom].js +0 -22
- package/dist/translator/scriptlet.js +0 -4
- package/dist/translator/tag/attribute/directives/class.js +0 -42
- package/dist/translator/tag/attribute/directives/index.js +0 -15
- package/dist/translator/tag/attribute/directives/no-update-body-if.js +0 -15
- package/dist/translator/tag/attribute/directives/no-update-body.js +0 -10
- package/dist/translator/tag/attribute/directives/no-update-if.js +0 -12
- package/dist/translator/tag/attribute/directives/no-update.js +0 -48
- package/dist/translator/tag/attribute/directives/style.js +0 -42
- package/dist/translator/tag/attribute/index.js +0 -150
- package/dist/translator/tag/attribute/modifiers/index.js +0 -7
- package/dist/translator/tag/attribute/modifiers/no-update.js +0 -14
- package/dist/translator/tag/attribute/modifiers/scoped.js +0 -23
- package/dist/translator/tag/attribute-tag.js +0 -149
- package/dist/translator/tag/custom-tag.js +0 -146
- package/dist/translator/tag/dynamic-tag.js +0 -74
- package/dist/translator/tag/index.js +0 -287
- package/dist/translator/tag/macro-tag.js +0 -7
- package/dist/translator/tag/native-tag.js +0 -27
- package/dist/translator/tag/native-tag[html]/attributes.js +0 -151
- package/dist/translator/tag/native-tag[html]/index.js +0 -221
- package/dist/translator/tag/native-tag[vdom]/attributes.js +0 -105
- package/dist/translator/tag/native-tag[vdom]/index.js +0 -189
- package/dist/translator/tag/util.js +0 -246
- package/dist/translator/taglib/core/conditional/translate-else-if.js +0 -20
- package/dist/translator/taglib/core/conditional/translate-else.js +0 -20
- package/dist/translator/taglib/core/conditional/translate-if.js +0 -8
- package/dist/translator/taglib/core/conditional/util.js +0 -41
- package/dist/translator/taglib/core/index.js +0 -474
- package/dist/translator/taglib/core/macro/parse.js +0 -17
- package/dist/translator/taglib/core/macro/translate.js +0 -48
- package/dist/translator/taglib/core/parse-class.js +0 -79
- package/dist/translator/taglib/core/parse-export.js +0 -14
- package/dist/translator/taglib/core/parse-import.js +0 -14
- package/dist/translator/taglib/core/parse-module-code.js +0 -18
- package/dist/translator/taglib/core/parse-static.js +0 -18
- package/dist/translator/taglib/core/transform-style.js +0 -66
- package/dist/translator/taglib/core/translate-await.js +0 -41
- package/dist/translator/taglib/core/translate-body.js +0 -17
- package/dist/translator/taglib/core/translate-for.js +0 -156
- package/dist/translator/taglib/core/translate-html-comment.js +0 -52
- package/dist/translator/taglib/core/translate-include-content.js +0 -53
- package/dist/translator/taglib/core/translate-server-only.js +0 -5
- package/dist/translator/taglib/core/translate-while.js +0 -32
- package/dist/translator/taglib/index.js +0 -6
- package/dist/translator/taglib/migrate/all-templates.js +0 -46
- package/dist/translator/taglib/migrate/index.js +0 -5
- package/dist/translator/text/index.js +0 -10
- package/dist/translator/text/index[html].js +0 -12
- package/dist/translator/text/index[vdom].js +0 -20
- package/dist/translator/util/add-dependencies.js +0 -329
- package/dist/translator/util/escape-regexp.js +0 -4
- package/dist/translator/util/get-component-files.js +0 -86
- package/dist/translator/util/html-out-write.js +0 -15
- package/dist/translator/util/key-manager.js +0 -176
- package/dist/translator/util/optimize-html-writes.js +0 -52
- package/dist/translator/util/optimize-vdom-create.js +0 -164
- package/dist/translator/util/plugin-hooks.js +0 -22
- package/dist/translator/util/runtime-flags.js +0 -3
- package/dist/translator/util/vdom-out-write.js +0 -10
- package/dist/translator/util/with-previous-location.js +0 -6
- package/docs/10-awesome-marko-features.md +0 -291
- package/docs/body-content.md +0 -355
- package/docs/class-components.md +0 -1001
- package/docs/cloudflare-workers.md +0 -32
- package/docs/compiler-hooks.png +0 -0
- package/docs/compiler.md +0 -473
- package/docs/component-diagram.afdesign +0 -0
- package/docs/component-diagram.svg +0 -87
- package/docs/concise.md +0 -141
- package/docs/conditionals-and-lists.md +0 -72
- package/docs/core-tags.md +0 -325
- package/docs/custom-tags.md +0 -201
- package/docs/editor-plugins.md +0 -45
- package/docs/events.md +0 -131
- package/docs/express.md +0 -66
- package/docs/fastify.md +0 -65
- package/docs/getting-started.md +0 -95
- package/docs/http.md +0 -34
- package/docs/icons/js.svg +0 -4
- package/docs/icons/marko.svg +0 -1
- package/docs/icons/ts.svg +0 -1
- package/docs/installing.md +0 -51
- package/docs/koa.md +0 -35
- package/docs/lasso.md +0 -196
- package/docs/marko-5-upgrade.md +0 -59
- package/docs/marko-json.md +0 -248
- package/docs/marko-vs-react.md +0 -854
- package/docs/redux.md +0 -61
- package/docs/rendering.md +0 -268
- package/docs/rollup.md +0 -352
- package/docs/state.md +0 -105
- package/docs/structure.json +0 -49
- package/docs/styles.md +0 -29
- package/docs/syntax.md +0 -601
- package/docs/troubleshooting-streaming.md +0 -68
- package/docs/typescript.md +0 -406
- package/docs/vite.md +0 -86
- package/docs/webpack.md +0 -205
- package/docs/why-is-marko-fast.md +0 -239
- package/env.js +0 -7
- package/helpers/README.md +0 -3
- package/helpers/empty.js +0 -4
- package/helpers/notEmpty.js +0 -11
- package/index-browser.marko +0 -15
- package/index.js +0 -7
- package/legacy-components-browser.marko +0 -15
- package/legacy-components.js +0 -7
- package/node-require.js +0 -8
- package/src/build.json +0 -3
- package/src/compiler/config.js +0 -45
- package/src/compiler/index.js +0 -164
- package/src/compiler/modules.js +0 -5
- package/src/core-tags/.eslintrc +0 -5
- package/src/core-tags/components/init-components-tag.js +0 -54
- package/src/core-tags/components/preferred-script-location-tag.js +0 -25
- package/src/core-tags/components/preserve-tag.js +0 -1
- package/src/core-tags/core/__flush_here_and_after__.js +0 -44
- package/src/core-tags/core/await/AsyncValue.js +0 -121
- package/src/core-tags/core/await/client-reorder-runtime.js +0 -51
- package/src/core-tags/core/await/index.d.marko +0 -10
- package/src/core-tags/core/await/renderer.js +0 -249
- package/src/core-tags/core/await/reorderer-renderer.js +0 -156
- package/src/index.js +0 -4
- package/src/node-require/browser-refresh.js +0 -18
- package/src/node-require/hot-reload.js +0 -45
- package/src/node-require/index.js +0 -103
- package/src/node_modules/@internal/components-beginComponent/index-browser.js +0 -23
- package/src/node_modules/@internal/components-beginComponent/index.js +0 -84
- package/src/node_modules/@internal/components-beginComponent/package.json +0 -11
- package/src/node_modules/@internal/components-define-widget-legacy/index-browser.js +0 -335
- package/src/node_modules/@internal/components-define-widget-legacy/index.js +0 -18
- package/src/node_modules/@internal/components-define-widget-legacy/package.json +0 -11
- package/src/node_modules/@internal/components-endComponent/index-browser.js +0 -5
- package/src/node_modules/@internal/components-endComponent/index.js +0 -11
- package/src/node_modules/@internal/components-endComponent/package.json +0 -11
- package/src/node_modules/@internal/components-entry/index-browser.js +0 -11
- package/src/node_modules/@internal/components-entry/index.js +0 -301
- package/src/node_modules/@internal/components-entry/package.json +0 -11
- package/src/node_modules/@internal/components-entry-legacy/index-browser.js +0 -76
- package/src/node_modules/@internal/components-entry-legacy/index.js +0 -16
- package/src/node_modules/@internal/components-entry-legacy/package.json +0 -11
- package/src/node_modules/@internal/components-registry/index-browser.js +0 -586
- package/src/node_modules/@internal/components-registry/index.js +0 -44
- package/src/node_modules/@internal/components-registry/package.json +0 -11
- package/src/node_modules/@internal/components-util/index-browser.js +0 -152
- package/src/node_modules/@internal/components-util/index.js +0 -75
- package/src/node_modules/@internal/components-util/package.json +0 -11
- package/src/node_modules/@internal/create-readable/index-browser.js +0 -30
- package/src/node_modules/@internal/create-readable/index.js +0 -57
- package/src/node_modules/@internal/create-readable/package.json +0 -11
- package/src/node_modules/@internal/loader/fallback-node.js +0 -89
- package/src/node_modules/@internal/loader/index-browser.js +0 -2
- package/src/node_modules/@internal/loader/index.js +0 -23
- package/src/node_modules/@internal/loader/package.json +0 -10
- package/src/node_modules/@internal/preserve-tag/index-browser.js +0 -46
- package/src/node_modules/@internal/preserve-tag/index.js +0 -34
- package/src/node_modules/@internal/preserve-tag/package.json +0 -11
- package/src/node_modules/@internal/require/index-browser.js +0 -15
- package/src/node_modules/@internal/require/index-legacy-browser.js +0 -20
- package/src/node_modules/@internal/require/index-webpack.js +0 -16
- package/src/node_modules/@internal/require/index.js +0 -15
- package/src/node_modules/@internal/require/package.json +0 -11
- package/src/node_modules/@internal/set-immediate/index-browser.js +0 -19
- package/src/node_modules/@internal/set-immediate/index-worker.js +0 -31
- package/src/node_modules/@internal/set-immediate/index.js +0 -3
- package/src/node_modules/@internal/set-immediate/package.json +0 -11
- package/src/node_modules/@internal/set-immediate/queueMicrotask.js +0 -8
- package/src/runtime/.eslintrc +0 -5
- package/src/runtime/RenderResult.js +0 -112
- package/src/runtime/components/Component.js +0 -663
- package/src/runtime/components/ComponentDef.js +0 -169
- package/src/runtime/components/ComponentsContext.js +0 -59
- package/src/runtime/components/GlobalComponentsContext.js +0 -10
- package/src/runtime/components/KeySequence.js +0 -16
- package/src/runtime/components/ServerComponent.js +0 -73
- package/src/runtime/components/State.js +0 -101
- package/src/runtime/components/attach-detach.js +0 -60
- package/src/runtime/components/defineComponent.js +0 -60
- package/src/runtime/components/dom-data.js +0 -8
- package/src/runtime/components/event-delegation.js +0 -144
- package/src/runtime/components/index.js +0 -1
- package/src/runtime/components/legacy/browser.json +0 -9
- package/src/runtime/components/legacy/defineComponent-legacy.js +0 -27
- package/src/runtime/components/legacy/defineRenderer-legacy.js +0 -171
- package/src/runtime/components/legacy/defineWidget-legacy.js +0 -1
- package/src/runtime/components/legacy/dependencies/html.js +0 -3
- package/src/runtime/components/legacy/dependencies/index.js +0 -177
- package/src/runtime/components/legacy/dependencies/vdom.js +0 -3
- package/src/runtime/components/legacy/index.js +0 -1
- package/src/runtime/components/legacy/jquery.js +0 -52
- package/src/runtime/components/legacy/ready.js +0 -152
- package/src/runtime/components/legacy/renderer-legacy.js +0 -231
- package/src/runtime/components/registry.js +0 -1
- package/src/runtime/components/renderer.js +0 -236
- package/src/runtime/components/update-manager.js +0 -94
- package/src/runtime/createOut.js +0 -13
- package/src/runtime/dom-insert.js +0 -77
- package/src/runtime/events.js +0 -2
- package/src/runtime/helpers/_change-case.js +0 -45
- package/src/runtime/helpers/assign.js +0 -21
- package/src/runtime/helpers/attr-tag.js +0 -43
- package/src/runtime/helpers/class-value.js +0 -30
- package/src/runtime/helpers/dynamic-tag.js +0 -181
- package/src/runtime/helpers/empty-component.js +0 -1
- package/src/runtime/helpers/merge.js +0 -13
- package/src/runtime/helpers/of-fallback.js +0 -4
- package/src/runtime/helpers/render-tag.js +0 -20
- package/src/runtime/helpers/serialize-noop.js +0 -5
- package/src/runtime/helpers/style-value.js +0 -45
- package/src/runtime/helpers/tags-compat/dom-debug.js +0 -1
- package/src/runtime/helpers/tags-compat/dom-debug.mjs +0 -4
- package/src/runtime/helpers/tags-compat/dom.js +0 -1
- package/src/runtime/helpers/tags-compat/dom.mjs +0 -4
- package/src/runtime/helpers/tags-compat/html-debug.js +0 -3
- package/src/runtime/helpers/tags-compat/html-debug.mjs +0 -4
- package/src/runtime/helpers/tags-compat/html.js +0 -3
- package/src/runtime/helpers/tags-compat/html.mjs +0 -4
- package/src/runtime/helpers/tags-compat/runtime-dom.js +0 -239
- package/src/runtime/helpers/tags-compat/runtime-html.js +0 -136
- package/src/runtime/helpers/to-string.js +0 -5
- package/src/runtime/html/AsyncStream.js +0 -805
- package/src/runtime/html/BufferedWriter.js +0 -52
- package/src/runtime/html/StringWriter.js +0 -73
- package/src/runtime/html/helpers/_dynamic-attr.js +0 -35
- package/src/runtime/html/helpers/attr.js +0 -80
- package/src/runtime/html/helpers/attrs.js +0 -26
- package/src/runtime/html/helpers/class-attr.js +0 -8
- package/src/runtime/html/helpers/data-marko.js +0 -36
- package/src/runtime/html/helpers/escape-quotes.js +0 -35
- package/src/runtime/html/helpers/escape-script-placeholder.js +0 -24
- package/src/runtime/html/helpers/escape-style-placeholder.js +0 -22
- package/src/runtime/html/helpers/escape-xml.js +0 -21
- package/src/runtime/html/helpers/merge-attrs.js +0 -55
- package/src/runtime/html/helpers/props-script.js +0 -32
- package/src/runtime/html/helpers/style-attr.js +0 -8
- package/src/runtime/html/hot-reload.js +0 -26
- package/src/runtime/html/index.js +0 -33
- package/src/runtime/html/marko-namespace.js +0 -3
- package/src/runtime/renderable.js +0 -194
- package/src/runtime/vdom/AsyncVDOMBuilder.js +0 -456
- package/src/runtime/vdom/VComment.js +0 -24
- package/src/runtime/vdom/VComponent.js +0 -17
- package/src/runtime/vdom/VDocumentFragment.js +0 -34
- package/src/runtime/vdom/VElement.js +0 -375
- package/src/runtime/vdom/VFragment.js +0 -26
- package/src/runtime/vdom/VNode.js +0 -100
- package/src/runtime/vdom/VText.js +0 -25
- package/src/runtime/vdom/helpers/attrs.js +0 -62
- package/src/runtime/vdom/helpers/const-element.js +0 -25
- package/src/runtime/vdom/helpers/merge-attrs.js +0 -16
- package/src/runtime/vdom/hot-reload.js +0 -115
- package/src/runtime/vdom/index.js +0 -30
- package/src/runtime/vdom/is-text-only.js +0 -10
- package/src/runtime/vdom/marko-namespace.js +0 -3
- package/src/runtime/vdom/morphdom/fragment.js +0 -95
- package/src/runtime/vdom/morphdom/helpers.js +0 -42
- package/src/runtime/vdom/morphdom/index.js +0 -741
- package/src/runtime/vdom/parse-html.js +0 -18
- package/src/runtime/vdom/vdom.js +0 -88
- package/src/taglib/index.js +0 -51
- package/src/translator/cdata/index.js +0 -15
- package/src/translator/cdata/index[html].js +0 -15
- package/src/translator/cdata/index[vdom].js +0 -12
- package/src/translator/class.js +0 -65
- package/src/translator/comment/index.js +0 -15
- package/src/translator/comment/index[html].js +0 -17
- package/src/translator/comment/index[vdom].js +0 -3
- package/src/translator/declaration/index.js +0 -15
- package/src/translator/declaration/index[html].js +0 -12
- package/src/translator/declaration/index[vdom].js +0 -3
- package/src/translator/document-type/index.js +0 -15
- package/src/translator/document-type/index[html].js +0 -12
- package/src/translator/document-type/index[vdom].js +0 -3
- package/src/translator/index.js +0 -552
- package/src/translator/placeholder/index.js +0 -15
- package/src/translator/placeholder/index[html].js +0 -93
- package/src/translator/placeholder/index[vdom].js +0 -22
- package/src/translator/scriptlet.js +0 -4
- package/src/translator/tag/attribute/directives/class.js +0 -42
- package/src/translator/tag/attribute/directives/index.js +0 -15
- package/src/translator/tag/attribute/directives/no-update-body-if.js +0 -15
- package/src/translator/tag/attribute/directives/no-update-body.js +0 -10
- package/src/translator/tag/attribute/directives/no-update-if.js +0 -12
- package/src/translator/tag/attribute/directives/no-update.js +0 -48
- package/src/translator/tag/attribute/directives/style.js +0 -42
- package/src/translator/tag/attribute/index.js +0 -150
- package/src/translator/tag/attribute/modifiers/index.js +0 -7
- package/src/translator/tag/attribute/modifiers/no-update.js +0 -14
- package/src/translator/tag/attribute/modifiers/scoped.js +0 -23
- package/src/translator/tag/attribute-tag.js +0 -149
- package/src/translator/tag/custom-tag.js +0 -146
- package/src/translator/tag/dynamic-tag.js +0 -74
- package/src/translator/tag/index.js +0 -287
- package/src/translator/tag/macro-tag.js +0 -7
- package/src/translator/tag/native-tag.js +0 -27
- package/src/translator/tag/native-tag[html]/attributes.js +0 -151
- package/src/translator/tag/native-tag[html]/index.js +0 -221
- package/src/translator/tag/native-tag[vdom]/attributes.js +0 -105
- package/src/translator/tag/native-tag[vdom]/index.js +0 -189
- package/src/translator/tag/util.js +0 -246
- package/src/translator/taglib/core/conditional/translate-else-if.js +0 -20
- package/src/translator/taglib/core/conditional/translate-else.js +0 -20
- package/src/translator/taglib/core/conditional/translate-if.js +0 -8
- package/src/translator/taglib/core/conditional/util.js +0 -41
- package/src/translator/taglib/core/index.js +0 -474
- package/src/translator/taglib/core/macro/parse.js +0 -17
- package/src/translator/taglib/core/macro/translate.js +0 -48
- package/src/translator/taglib/core/parse-class.js +0 -79
- package/src/translator/taglib/core/parse-export.js +0 -14
- package/src/translator/taglib/core/parse-import.js +0 -14
- package/src/translator/taglib/core/parse-module-code.js +0 -18
- package/src/translator/taglib/core/parse-static.js +0 -18
- package/src/translator/taglib/core/transform-style.js +0 -66
- package/src/translator/taglib/core/translate-await.js +0 -41
- package/src/translator/taglib/core/translate-body.js +0 -17
- package/src/translator/taglib/core/translate-for.js +0 -156
- package/src/translator/taglib/core/translate-html-comment.js +0 -52
- package/src/translator/taglib/core/translate-include-content.js +0 -53
- package/src/translator/taglib/core/translate-server-only.js +0 -5
- package/src/translator/taglib/core/translate-while.js +0 -32
- package/src/translator/taglib/index.js +0 -7
- package/src/translator/taglib/migrate/all-templates.js +0 -46
- package/src/translator/taglib/migrate/index.js +0 -5
- package/src/translator/text/index.js +0 -10
- package/src/translator/text/index[html].js +0 -12
- package/src/translator/text/index[vdom].js +0 -20
- package/src/translator/util/add-dependencies.js +0 -329
- package/src/translator/util/escape-regexp.js +0 -4
- package/src/translator/util/get-component-files.js +0 -86
- package/src/translator/util/html-out-write.js +0 -15
- package/src/translator/util/key-manager.js +0 -176
- package/src/translator/util/optimize-html-writes.js +0 -52
- package/src/translator/util/optimize-vdom-create.js +0 -164
- package/src/translator/util/plugin-hooks.js +0 -22
- package/src/translator/util/runtime-flags.js +0 -3
- package/src/translator/util/vdom-out-write.js +0 -10
- package/src/translator/util/with-previous-location.js +0 -6
- package/translator/index.d.ts +0 -7
- package/translator/package.json +0 -5
package/docs/typescript.md
DELETED
@@ -1,406 +0,0 @@
|
|
1
|
-
# TypeScript in Marko
|
2
|
-
|
3
|
-
> **Note:** Types are supported in Marko v5.22.7+ and Marko v4.24.6+
|
4
|
-
|
5
|
-
Marko’s TypeScript support offers in-editor error checking, makes refactoring less scary, verifies that data matches expectations, and even helps with API design.
|
6
|
-
|
7
|
-
Or maybe you just want more autocomplete in VSCode. That works too.
|
8
|
-
|
9
|
-
## Enabling TypeScript in your Marko project
|
10
|
-
|
11
|
-
There are two (non-exclusive) ways to add TypeScript to a Marko project:
|
12
|
-
|
13
|
-
- **For sites and web apps**, you can place [a `tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) at the project root:
|
14
|
-
<pre>
|
15
|
-
📁 components/
|
16
|
-
📁 node_modules/
|
17
|
-
<img src="./icons/marko.svg" width=16> index.marko
|
18
|
-
📦 package.json
|
19
|
-
<mark><img src="./icons/ts.svg" width=16> tsconfig.json</mark>
|
20
|
-
</pre>
|
21
|
-
- **If you’re [publishing packages of Marko tags](https://markojs.com/docs/custom-tags/#publishing-tags-to-npm)**, add the following to [your `marko.json`](./marko-json.md):
|
22
|
-
```json
|
23
|
-
"script-lang": "ts"
|
24
|
-
```
|
25
|
-
This will automatically expose type-checking and autocomplete for the published tags.
|
26
|
-
|
27
|
-
> **ProTip**: You can also use the `script-lang` method for sites and apps.
|
28
|
-
|
29
|
-
## Typing a tag's `input`
|
30
|
-
|
31
|
-
A `.marko` file will use any exported `Input` type for [that file’s `input` object](./class-components.md#input).
|
32
|
-
|
33
|
-
This can be `export type Input` or `export interface Input`.
|
34
|
-
|
35
|
-
### Example
|
36
|
-
|
37
|
-
_PriceField.marko_
|
38
|
-
|
39
|
-
```marko
|
40
|
-
export interface Input {
|
41
|
-
currency: string;
|
42
|
-
amount: number;
|
43
|
-
}
|
44
|
-
|
45
|
-
<label>
|
46
|
-
Price in ${input.currency}:
|
47
|
-
<input type="number" value=input.amount min=0 step=0.01>
|
48
|
-
</label>
|
49
|
-
```
|
50
|
-
|
51
|
-
You can also import, reuse, and extend `Input` interfaces from other `.marko` or `.ts` files:
|
52
|
-
|
53
|
-
```marko
|
54
|
-
import { Input as PriceInput } from "<PriceField>";
|
55
|
-
import { ExtraTypes } from "lib/utils.ts";
|
56
|
-
export type Input = PriceInput & ExtraTypes;
|
57
|
-
```
|
58
|
-
|
59
|
-
```marko
|
60
|
-
import { Input as PriceInput } from "<PriceField>";
|
61
|
-
export interface Input extends PriceInput {
|
62
|
-
discounted: boolean;
|
63
|
-
expiresAt: Date;
|
64
|
-
};
|
65
|
-
```
|
66
|
-
|
67
|
-
### Generic `Input`s
|
68
|
-
|
69
|
-
[Generic Types and Type Parameters](https://www.typescriptlang.org/docs/handbook/2/generics.html) on `Input` are recognized throughout the entire `.marko` template (excluding [static statements](./syntax.md#static-javascript)).
|
70
|
-
|
71
|
-
For example, if you set up a component like this:
|
72
|
-
|
73
|
-
_components/my-select.marko_
|
74
|
-
|
75
|
-
```marko
|
76
|
-
export interface Input<T> {
|
77
|
-
options: T[];
|
78
|
-
onSelect: (newVal: T) => unknown;
|
79
|
-
}
|
80
|
-
|
81
|
-
static function staticFn() {
|
82
|
-
// can NOT use `T` here
|
83
|
-
}
|
84
|
-
|
85
|
-
$ const instanceFn = (val: T) => {
|
86
|
-
// can use `T` here
|
87
|
-
}
|
88
|
-
|
89
|
-
// can use `as T` here
|
90
|
-
<select on-input(evt => input.onSelect(options[evt.target.value] as T))>
|
91
|
-
<for|value, i| of=input.options>
|
92
|
-
<option value=i>${value}</option>
|
93
|
-
</for>
|
94
|
-
</select>
|
95
|
-
```
|
96
|
-
|
97
|
-
…then your editor will figure out the types of inputs to that component:
|
98
|
-
|
99
|
-
```marko
|
100
|
-
<my-select options=[1,2,3] onSelect=val => {}/>
|
101
|
-
// ^^^ number
|
102
|
-
|
103
|
-
<my-select options=["M","K","O"] onSelect=val => {}/>
|
104
|
-
// ^^^ string
|
105
|
-
```
|
106
|
-
|
107
|
-
## Built-in Marko Types
|
108
|
-
|
109
|
-
Marko exposes [type definitions](https://github.com/marko-js/marko/blob/main/packages/runtime-class/index.d.ts) you can reuse in [a TypeScript namespace](https://www.typescriptlang.org/docs/handbook/namespaces.html) called `Marko`:
|
110
|
-
|
111
|
-
- **`Marko.Template<Input, Return>`**
|
112
|
-
- The type of a `.marko` file
|
113
|
-
- `typeof import("./template.marko")`
|
114
|
-
- **`Marko.TemplateInput<Input>`**
|
115
|
-
- The object accepted by the render methods of a template. It includes the template's `Input` as well as `$global` values.
|
116
|
-
- **`Marko.Body<Params, Return>`**
|
117
|
-
- The type of the [body content](./body-content.md) of a tag (`renderBody`)
|
118
|
-
- **`Marko.Component<Input, State>`**
|
119
|
-
- The base class for a [class component](./class-components.md)
|
120
|
-
- **`Marko.Renderable`**
|
121
|
-
- Values accepted by the [`<${dynamic}/>` tag](./syntax.md#dynamic-tagname)
|
122
|
-
- `string | Marko.Template | Marko.Body | { renderBody: Marko.Body}`
|
123
|
-
- **`Marko.Out`**
|
124
|
-
- The render context with methods like `write`, `beginAsync`, etc.
|
125
|
-
- `ReturnType<template.render>`
|
126
|
-
- **`Marko.Global`**
|
127
|
-
- The type of the object in `$global` and `out.global` that can be passed to a template's render methods as the `$global` property.
|
128
|
-
- **`Marko.RenderResult`**
|
129
|
-
- The [result](./rendering.md#renderresult) of rendering a Marko template
|
130
|
-
- `ReturnType<template.renderSync>`
|
131
|
-
- `Awaited<ReturnType<template.render>>`
|
132
|
-
- **`Marko.Emitter`**
|
133
|
-
- `EventEmitter` from `@types/node`
|
134
|
-
- **`Marko.NativeTags`**
|
135
|
-
- `Marko.NativeTags`: An object containing all native tags and their types
|
136
|
-
- **`Marko.Input<TagName>`** and **`Marko.Return<TagName>`**
|
137
|
-
- Helpers to extract the input and return types native tags (when a string is passed) or a custom tag.
|
138
|
-
- **`Marko.BodyParameters<Body>`** and **`Marko.BodyReturnType<Body>`**
|
139
|
-
- Helpers to extract the parameters and return types from the specified `Marko.Body`
|
140
|
-
- **`Marko.AttrTag<T>`**
|
141
|
-
- Used to represent types for [attributes tags](./body-content.md#named-body-content)
|
142
|
-
- A single attribute tag, with a `[Symbol.iterator]` to consume any repeated tags.
|
143
|
-
|
144
|
-
### Typing `renderBody`
|
145
|
-
|
146
|
-
The most commonly used type from the `Marko` namespace is `Marko.Body` which can be used to type `input.renderBody`:
|
147
|
-
|
148
|
-
_child.marko_
|
149
|
-
|
150
|
-
```marko
|
151
|
-
export interface Input {
|
152
|
-
renderBody?: Marko.Body;
|
153
|
-
}
|
154
|
-
```
|
155
|
-
|
156
|
-
Here, the following will be acceptable values:
|
157
|
-
|
158
|
-
_index.marko_
|
159
|
-
|
160
|
-
```marko
|
161
|
-
<child/>
|
162
|
-
<child>Text in render body</child>
|
163
|
-
<child>
|
164
|
-
<div>Any combination of components</div>
|
165
|
-
</child>
|
166
|
-
```
|
167
|
-
|
168
|
-
Passing other values (including components) will cause a type error:
|
169
|
-
|
170
|
-
_index.marko_
|
171
|
-
|
172
|
-
```marko
|
173
|
-
import OtherTag from "<other-tag>";
|
174
|
-
<child renderBody=OtherTag/>
|
175
|
-
```
|
176
|
-
|
177
|
-
### Typing Tag Parameters
|
178
|
-
|
179
|
-
Tag parameters are passed to the `renderBody` by the child tag. For this reason, `Marko.Body` also allows typing of its parameters:
|
180
|
-
|
181
|
-
_for-by-two.marko_
|
182
|
-
|
183
|
-
```marko
|
184
|
-
export interface Input {
|
185
|
-
to: number;
|
186
|
-
renderBody: Marko.Body<[number]>
|
187
|
-
}
|
188
|
-
|
189
|
-
<for|i| from=0 to=input.to by=2>
|
190
|
-
<${input.renderBody}(i)/>
|
191
|
-
</for>
|
192
|
-
```
|
193
|
-
|
194
|
-
_index.marko_
|
195
|
-
|
196
|
-
```marko
|
197
|
-
<for-by-two|i| to=10>
|
198
|
-
<div>${i}</div>
|
199
|
-
</for-by-two>
|
200
|
-
```
|
201
|
-
|
202
|
-
### Extending native tag types within a Marko tag
|
203
|
-
|
204
|
-
The types for native tags are accessed via the global `Marko.Input` type. Here's an example of a component that extends the `button` html tag:
|
205
|
-
|
206
|
-
_color-button.marko_
|
207
|
-
|
208
|
-
```marko
|
209
|
-
export interface Input extends Marko.Input<"button"> {
|
210
|
-
color: string;
|
211
|
-
renderBody?: Marko.Body;
|
212
|
-
}
|
213
|
-
|
214
|
-
$ const { color, renderBody, ...restOfInput } = input;
|
215
|
-
|
216
|
-
<button style=`color: ${color}` ...restOfInput>
|
217
|
-
<${renderBody}/>
|
218
|
-
</button>
|
219
|
-
```
|
220
|
-
|
221
|
-
### Registering a new native tag (eg for custom elements).
|
222
|
-
|
223
|
-
```ts
|
224
|
-
interface MyCustomElementAttributes {
|
225
|
-
// ...
|
226
|
-
}
|
227
|
-
|
228
|
-
declare global {
|
229
|
-
namespace Marko {
|
230
|
-
interface NativeTags {
|
231
|
-
// By adding this entry, you can now use `my-custom-element` as a native html tag.
|
232
|
-
"my-custom-element": MyCustomElementAttributes;
|
233
|
-
}
|
234
|
-
}
|
235
|
-
}
|
236
|
-
```
|
237
|
-
|
238
|
-
### Registering new "global" HTML Attributes
|
239
|
-
|
240
|
-
```ts
|
241
|
-
declare global {
|
242
|
-
namespace Marko {
|
243
|
-
interface HTMLAttributes {
|
244
|
-
"my-non-standard-attribute"?: string; // Adds this attribute as available on all HTML tags.
|
245
|
-
}
|
246
|
-
}
|
247
|
-
}
|
248
|
-
```
|
249
|
-
|
250
|
-
### Registering CSS Properties (eg for custom properties)
|
251
|
-
|
252
|
-
```ts
|
253
|
-
declare global {
|
254
|
-
namespace Marko {
|
255
|
-
namespace CSS {
|
256
|
-
interface Properties {
|
257
|
-
"--foo"?: string; // adds a support for a custom `--foo` css property.
|
258
|
-
}
|
259
|
-
}
|
260
|
-
}
|
261
|
-
}
|
262
|
-
```
|
263
|
-
|
264
|
-
## TypeScript Syntax in `.marko`
|
265
|
-
|
266
|
-
Any [JavaScript expression in Marko](./syntax.md#inline-javascript) can also be written as a TypeScript expression.
|
267
|
-
|
268
|
-
### Tag Type Parameters
|
269
|
-
|
270
|
-
```marko
|
271
|
-
<child <T>|value: T|>
|
272
|
-
...
|
273
|
-
</child>
|
274
|
-
```
|
275
|
-
|
276
|
-
### Tag Type Arguments
|
277
|
-
|
278
|
-
_components/child.marko_
|
279
|
-
|
280
|
-
```marko
|
281
|
-
export interface Input<T> {
|
282
|
-
value: T;
|
283
|
-
}
|
284
|
-
```
|
285
|
-
|
286
|
-
_index.marko_
|
287
|
-
|
288
|
-
```marko
|
289
|
-
// number would be inferred in this case, but we can be explicit
|
290
|
-
<child<number> value=1 />
|
291
|
-
```
|
292
|
-
|
293
|
-
### Method Shorthand Type Parameters
|
294
|
-
|
295
|
-
```marko
|
296
|
-
<child process<T>() { /* ... */ } />
|
297
|
-
```
|
298
|
-
|
299
|
-
### Attribute Type Assertions
|
300
|
-
|
301
|
-
The types of attribute values can _usually_ be inferred. When needed, you can assert values to be more specific with [TypeScript’s `as` keyword](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-assertions):
|
302
|
-
|
303
|
-
```marko
|
304
|
-
<some-component
|
305
|
-
number=1 as const
|
306
|
-
names=[] as string[]
|
307
|
-
/>
|
308
|
-
```
|
309
|
-
|
310
|
-
# JSDoc Support
|
311
|
-
|
312
|
-
For existing projects that want to incrementally add type safety, adding full TypeScript support is a big leap. This is why Marko also includes full support for [incremental typing via JSDoc](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html).
|
313
|
-
|
314
|
-
## Setup
|
315
|
-
|
316
|
-
You can enable type checking in an existing `.marko` file by adding a `// @ts-check` comment at the top:
|
317
|
-
|
318
|
-
```js
|
319
|
-
// @ts-check
|
320
|
-
```
|
321
|
-
|
322
|
-
If you want to enable type checking for all Marko & JavaScript files in a JavaScript project, you can switch to using a [`jsconfig.json`](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#using-tsconfigjson-or-jsconfigjson). You can skip checking some files by adding a `// @ts-nocheck` comment to files.
|
323
|
-
|
324
|
-
Once that has been enabled, you can start by typing the input with JSDoc. Here's an example component with typed `input`:
|
325
|
-
|
326
|
-
```marko
|
327
|
-
// @ts-check
|
328
|
-
|
329
|
-
/**
|
330
|
-
* @typedef {{
|
331
|
-
* firstName: string,
|
332
|
-
* lastName: string,
|
333
|
-
* }} Input
|
334
|
-
*/
|
335
|
-
|
336
|
-
<div>${firstName} ${lastName}</div>
|
337
|
-
```
|
338
|
-
|
339
|
-
## With a separate `component.js` file
|
340
|
-
|
341
|
-
Many components in existing projects adhere to the following structure:
|
342
|
-
|
343
|
-
<pre>
|
344
|
-
📁 components/
|
345
|
-
📁 color-rotate-button/
|
346
|
-
<img src="./icons/marko.svg" width=16> index.marko
|
347
|
-
<img src="./icons/js.svg" width=16> component.js
|
348
|
-
</pre>
|
349
|
-
|
350
|
-
The `color-rotate-button` takes a list of colors and moves to the next one each time the button is clicked:
|
351
|
-
|
352
|
-
```marko
|
353
|
-
<color-rotate-button colors=["red", "blue", "yellow"]>
|
354
|
-
Next Color
|
355
|
-
</color-rotate-button>
|
356
|
-
```
|
357
|
-
|
358
|
-
Here is an example of how this `color-rotate-button` component could be typed:
|
359
|
-
|
360
|
-
_components/color-rotate-button/component.js_
|
361
|
-
|
362
|
-
```js
|
363
|
-
// @ts-check
|
364
|
-
|
365
|
-
/**
|
366
|
-
* @typedef {{
|
367
|
-
* colors: string[],
|
368
|
-
* renderBody: Marko.Renderable
|
369
|
-
* }} Input
|
370
|
-
* @typedef {{
|
371
|
-
* colorIndex: number
|
372
|
-
* }} State
|
373
|
-
* @extends {Marko.Component<Input, State>}
|
374
|
-
*/
|
375
|
-
export default class extends Marko.Component {
|
376
|
-
onCreate() {
|
377
|
-
this.state = {
|
378
|
-
colorIndex: 0,
|
379
|
-
};
|
380
|
-
}
|
381
|
-
|
382
|
-
rotateColor() {
|
383
|
-
this.state.colorIndex =
|
384
|
-
(this.state.colorIndex + 1) % this.input.colors.length;
|
385
|
-
}
|
386
|
-
}
|
387
|
-
```
|
388
|
-
|
389
|
-
_components/color-rotate-button/index.marko_
|
390
|
-
|
391
|
-
```marko
|
392
|
-
// @ts-check
|
393
|
-
|
394
|
-
/* Input will be automatically imported from `component.js`! */
|
395
|
-
|
396
|
-
<button
|
397
|
-
onClick('rotateColor')
|
398
|
-
style=`color: ${input.colors[state.colorIndex]}`>
|
399
|
-
<${input.renderBody}/>
|
400
|
-
</button>
|
401
|
-
```
|
402
|
-
|
403
|
-
# CI Type Checking
|
404
|
-
|
405
|
-
For type checking Marko files outside of your editor there is the ["@marko/type-check" cli](https://github.com/marko-js/language-server/tree/main/packages/type-check).
|
406
|
-
Check out the CLI documentation for more information.
|
package/docs/vite.md
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
# Marko + Vite
|
2
|
-
|
3
|
-
# Installation
|
4
|
-
|
5
|
-
```console
|
6
|
-
npm install @marko/vite vite
|
7
|
-
```
|
8
|
-
|
9
|
-
# Example config
|
10
|
-
|
11
|
-
```javascript
|
12
|
-
import { defineConfig } from "vite";
|
13
|
-
import marko from "@marko/vite";
|
14
|
-
export default defineConfig({
|
15
|
-
plugins: [marko()],
|
16
|
-
});
|
17
|
-
```
|
18
|
-
|
19
|
-
# Linked Mode
|
20
|
-
|
21
|
-
By default this plugin operates in `linked` mode (you can disabled this by passing [`linked: false` as an option](#optionslinked)). In `linked` mode the plugin automatically discovers all of the entry `.marko` files while compiling the server, and tells `Vite` which modules to load in the browser.
|
22
|
-
|
23
|
-
With this you _do not_ create `.html` files for `Vite`, it's Marko all the way down!
|
24
|
-
Scripts, styles and other content that _would have_ been injected into the `.html` files is instead automatically injected into your `.marko` templates.
|
25
|
-
|
26
|
-
In this mode you must use the [Vite SSR API](https://vitejs.dev/guide/ssr.html#setting-up-the-dev-server).
|
27
|
-
|
28
|
-
Here's an example using `express`.
|
29
|
-
|
30
|
-
```js
|
31
|
-
import { createServer } from "vite";
|
32
|
-
|
33
|
-
const app = express();
|
34
|
-
let loadTemplate;
|
35
|
-
|
36
|
-
if (process.env.NODE_ENV === "production") {
|
37
|
-
// Use Vite's built asset in prod mode.
|
38
|
-
loadTemplate = () => import("./dist");
|
39
|
-
} else {
|
40
|
-
// Hookup the vite dev server.
|
41
|
-
const vite = await createServer({
|
42
|
-
server: { middlewareMode: true }
|
43
|
-
});
|
44
|
-
|
45
|
-
app.use(vite.middlewares);
|
46
|
-
loadTemplate = () => vite.ssrLoadModule("./template.marko");
|
47
|
-
}
|
48
|
-
|
49
|
-
app.get("/", async (req, res) => {
|
50
|
-
const template = (await loadTemplate()).default;
|
51
|
-
// When the template is loaded, it will automatically have `vite` assets inlined.
|
52
|
-
template.render({ hello: "world" }, res);
|
53
|
-
);
|
54
|
-
|
55
|
-
app.listen(3000);
|
56
|
-
```
|
57
|
-
|
58
|
-
> For a more real world setup check out our [vite express](https://github.com/marko-js/examples/tree/master/examples/vite-express) example app.
|
59
|
-
|
60
|
-
# Options
|
61
|
-
|
62
|
-
### options.babelConfig
|
63
|
-
|
64
|
-
You can manually override Marko's Babel configuration by passing a `babelConfig` object to the `@marko/vite` plugin. By default Babel's regular [config file resolution](https://babeljs.io/docs/en/config-files) will be used.
|
65
|
-
|
66
|
-
```javascript
|
67
|
-
marko({
|
68
|
-
babelConfig: {
|
69
|
-
presets: ["@babel/preset-env"],
|
70
|
-
},
|
71
|
-
});
|
72
|
-
```
|
73
|
-
|
74
|
-
### options.runtimeId
|
75
|
-
|
76
|
-
In some cases you may want to embed multiple isolated copies of Marko on the page. Since Marko relies on some `window` properties to initialize this can cause issues. For example, by default Marko will read the server rendered hydration code from `window.$components`. In Marko you can change these `window` properties by rendering with `{ $global: { runtimeId: "MY_MARKO_RUNTIME_ID" } }` as input on the server side.
|
77
|
-
|
78
|
-
This plugin exposes a `runtimeId` option produces output that automatically sets `$global.runtimeId` on the server side and initializes properly in the browser.
|
79
|
-
|
80
|
-
```js
|
81
|
-
marko({ runtimeId: "MY_MARKO_RUNTIME_ID" });
|
82
|
-
```
|
83
|
-
|
84
|
-
### options.linked
|
85
|
-
|
86
|
-
Set this to `false` to opt out of [linked mode](#linked-mode). When this is false, the plugin will only handle resolving and transforming `.marko` files.
|
package/docs/webpack.md
DELETED
@@ -1,205 +0,0 @@
|
|
1
|
-
# Marko + Webpack
|
2
|
-
|
3
|
-
# Installation
|
4
|
-
|
5
|
-
> `@marko/webpack` >= 7 Only supports Marko 5+.
|
6
|
-
> For Marko 4 support use `@marko/webpack@6`.
|
7
|
-
|
8
|
-
```console
|
9
|
-
npm install @marko/webpack
|
10
|
-
```
|
11
|
-
|
12
|
-
### Loader: `@marko/webpack/loader`
|
13
|
-
|
14
|
-
The loader portion of this module can be used standalone and simply transforms your Marko templates into the appropriate JavaScript depending on your webpack target.
|
15
|
-
|
16
|
-
You can override the output by adding a `target` option to the loader of `target: "server" | "browser"`.
|
17
|
-
|
18
|
-
### Plugin: `@marko/webpack/plugin`
|
19
|
-
|
20
|
-
The plugin actually creates two separate webpack plugins, the `browser` plugin and the `server` plugin.
|
21
|
-
|
22
|
-
These are intended to be used in a isomorphic [webpack multi compiler](https://github.com/webpack/webpack/tree/master/examples/multi-compiler) where you are bundling both the server and the browser. The way it works is that the server plugin is going to analyze the top level Marko components in your server and automatically communicate with the browser compiler to retrieve the assets for that template.
|
23
|
-
|
24
|
-
This plugin also analyzes the top level Marko templates and determines if it is possible for them to rerender (currently the heuristic is simply does the component have an associated `class` or `component.js`). The plugin will automatically skip sending down any unnecessary top level templates to the browser.
|
25
|
-
|
26
|
-
The end result is that you setup a multi compiler (as shown below) and you can simply import Marko templates, and all assets are automatically generated and inlined into an optimized server response. No need to keep track of a webpack manifest yourself!
|
27
|
-
|
28
|
-
### Tag: `<webpack-assets>`
|
29
|
-
|
30
|
-
The `<webpack-assets>` tag can be used along with the plugin in a multi-compiler setup. This tag allows you to inject `<script>`/`<style>` tags into a server-rendered template for the assets of an entry in the client compiler.
|
31
|
-
|
32
|
-
#### Example Usage
|
33
|
-
|
34
|
-
```marko
|
35
|
-
<webpack-assets entry="tracking"/>
|
36
|
-
```
|
37
|
-
|
38
|
-
#### Example Config
|
39
|
-
|
40
|
-
```js
|
41
|
-
// ...
|
42
|
-
export default [
|
43
|
-
{
|
44
|
-
entry: "./server.js",
|
45
|
-
plugins: [markoPlugin.server],
|
46
|
-
// ...
|
47
|
-
},
|
48
|
-
{
|
49
|
-
// ...
|
50
|
-
entry: {
|
51
|
-
tracking: "./tracking.js",
|
52
|
-
},
|
53
|
-
plugins: [markoPlugin.browser],
|
54
|
-
},
|
55
|
-
];
|
56
|
-
```
|
57
|
-
|
58
|
-
# Example
|
59
|
-
|
60
|
-
```javascript
|
61
|
-
import MarkoPlugin from "@marko/webpack/plugin";
|
62
|
-
|
63
|
-
const markoPlugin = new MarkoPlugin();
|
64
|
-
|
65
|
-
export default [
|
66
|
-
{
|
67
|
-
entry: "./server.js",
|
68
|
-
module: {
|
69
|
-
rules: [
|
70
|
-
{
|
71
|
-
test: /\.marko$/,
|
72
|
-
loader: "@marko/webpack/loader",
|
73
|
-
},
|
74
|
-
],
|
75
|
-
},
|
76
|
-
plugins: [markoPlugin.server],
|
77
|
-
},
|
78
|
-
{
|
79
|
-
rules: [
|
80
|
-
{
|
81
|
-
test: /\.marko$/,
|
82
|
-
loader: "@marko/webpack/loader",
|
83
|
-
},
|
84
|
-
// If using `style` blocks with Marko you must use an appropriate loader
|
85
|
-
{
|
86
|
-
test: /\.css$/,
|
87
|
-
use: ["style-loader", "css-loader"],
|
88
|
-
},
|
89
|
-
],
|
90
|
-
plugins: [markoPlugin.browser],
|
91
|
-
},
|
92
|
-
];
|
93
|
-
```
|
94
|
-
|
95
|
-
## Babel options (Marko 5+)
|
96
|
-
|
97
|
-
If you are using Marko 5 with this plugin you can manually override the Babel configuration used by passing a `babelConfig` object along side the `@marko/webpack/loader`. By default Babels regular [config file resolution](https://babeljs.io/docs/en/config-files) will be used.
|
98
|
-
|
99
|
-
```javascript
|
100
|
-
export default {
|
101
|
-
module: {
|
102
|
-
rules: [
|
103
|
-
{
|
104
|
-
test: /\.marko$/,
|
105
|
-
loader: "@marko/webpack/loader",
|
106
|
-
options: {
|
107
|
-
babelConfig: {
|
108
|
-
presets: [
|
109
|
-
["@babel/preset-env", { node: "current" }]
|
110
|
-
]
|
111
|
-
}
|
112
|
-
}
|
113
|
-
}
|
114
|
-
]
|
115
|
-
}
|
116
|
-
},
|
117
|
-
```
|
118
|
-
|
119
|
-
## Multiple client-side compilers
|
120
|
-
|
121
|
-
Sometimes you need multiple compilers for your client-side bundles. For example, with [`i18n`](https://github.com/webpack/webpack/tree/master/examples/i18n) or [even shipping dynamic runtime bundles to the browser](https://github.com/eBay/arc/tree/master/packages/arc-webpack).
|
122
|
-
|
123
|
-
The `@marko/webpack` plugin’s `.browser` property can be passed to multiple Webpack compilers. While rendering at runtime, you can provide a `$global.buildName` property to choose which assets from the Webpack compiler are included in the page.
|
124
|
-
|
125
|
-
For example, with the Webpack internationalization plugin, you might have a config like the following:
|
126
|
-
|
127
|
-
```js
|
128
|
-
import MarkoPlugin from "@marko/webpack/plugin";
|
129
|
-
import I18nPlugin from "i18n-webpack-plugin";
|
130
|
-
import germanTranslations from "./de.json";
|
131
|
-
|
132
|
-
const languages = {
|
133
|
-
en: null,
|
134
|
-
de: germanTranslations,
|
135
|
-
};
|
136
|
-
|
137
|
-
const markoPlugin = new MarkoPlugin();
|
138
|
-
|
139
|
-
export default [
|
140
|
-
{
|
141
|
-
name: "Server",
|
142
|
-
entry: "./server.js",
|
143
|
-
module: {
|
144
|
-
rules: [
|
145
|
-
{
|
146
|
-
test: /\.marko$/,
|
147
|
-
loader: "@marko/webpack/loader",
|
148
|
-
},
|
149
|
-
],
|
150
|
-
},
|
151
|
-
plugins: [markoPlugin.server],
|
152
|
-
},
|
153
|
-
...Object.keys(languages).map((language) => ({
|
154
|
-
name: `Browser-${language}`,
|
155
|
-
rules: [
|
156
|
-
{
|
157
|
-
test: /\.marko$/,
|
158
|
-
loader: "@marko/webpack/loader",
|
159
|
-
},
|
160
|
-
// If using `style` blocks with Marko you must use an appropriate loader
|
161
|
-
{
|
162
|
-
test: /\.css$/,
|
163
|
-
use: ["style-loader", "css-loader"],
|
164
|
-
},
|
165
|
-
],
|
166
|
-
plugins: [new I18nPlugin(languages[language]), markoPlugin.browser],
|
167
|
-
})),
|
168
|
-
];
|
169
|
-
```
|
170
|
-
|
171
|
-
With the above config, you can render your top-level Marko template server-side with a `$global.buildName` like so:
|
172
|
-
|
173
|
-
```javascript
|
174
|
-
template.render({ $global: { buildName: "Browser-de" } });
|
175
|
-
```
|
176
|
-
|
177
|
-
That will automatically send German assets. However, what you _probably_ want instead of always serving German is conditionally sending appropriate assets for a user’s locale. This can be done like so:
|
178
|
-
|
179
|
-
```javascript
|
180
|
-
template.render({ $global: { buildName: `Browser-${req.language}` } });
|
181
|
-
```
|
182
|
-
|
183
|
-
**Note:** If a bundle with the provided `buildName` does not exist, an error is thrown.
|
184
|
-
|
185
|
-
## Multiple copies of Marko
|
186
|
-
|
187
|
-
In some cases you may want to embed multiple isolated copies of Marko on the page. Since Marko relies on some `window` properties to initialize this can cause issues. For example, by default Marko will read the server rendered hydration code from `window.$components`. In Marko you can change these `window` properties by rendering with `{ $global: { runtimeId: "MY_MARKO_RUNTIME_ID" } }` as input on the server side.
|
188
|
-
|
189
|
-
This plugin exposes a `runtimeId` option produces output that automatically sets `$global.runtimeId` on the server side and initializes properly in the browser.
|
190
|
-
The `runtimeId` will default to the [`uniqueName` option](https://webpack.js.org/configuration/output/#outputuniquename) from the server compiler in the webpack config.
|
191
|
-
|
192
|
-
```js
|
193
|
-
import MarkoPlugin from "@marko/webpack/plugin";
|
194
|
-
|
195
|
-
const markoPlugin = new MarkoPlugin({
|
196
|
-
runtimeId: "MY_MARKO_RUNTIME_ID", // default to webpack `output.uniqueName` option.
|
197
|
-
});
|
198
|
-
```
|
199
|
-
|
200
|
-
Note: This option will also override the default values for the `jsonpFunction`, `chunkCallbackName` and `hotUpdateFunction` webpack `output` options, which all use global variables, to be prefixed with the `runtimeId`.
|
201
|
-
|
202
|
-
## Dynamic public paths
|
203
|
-
|
204
|
-
When using the plugin, the server will automatically sync the runtime [`__webpack_public_path__`](https://webpack.js.org/guides/public-path/#on-the-fly) with the browser.
|
205
|
-
This means that you only need to setup the dynamic public path on the server side.
|