marko 4.25.0 → 4.26.1
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/markoc.js +18 -18
- package/dist/compiler/CompileContext.js +3 -8
- package/dist/core-tags/components/init-components-tag.js +1 -52
- package/dist/core-tags/components/package.json +1 -3
- package/dist/core-tags/components/preferred-script-location-tag.js +2 -2
- package/dist/core-tags/components/preserve-tag.js +1 -27
- package/dist/core-tags/core/await/AsyncValue.js +20 -20
- package/dist/core-tags/core/await/renderer.js +11 -12
- package/dist/core-tags/core/await/reorderer-renderer.js +11 -6
- package/dist/index.js +1 -39
- package/dist/node-require/index.js +11 -0
- package/dist/node_modules/@internal/components-beginComponent/index-browser.js +12 -0
- package/dist/{runtime/components/beginComponent.js → node_modules/@internal/components-beginComponent/index.js} +15 -14
- package/dist/node_modules/@internal/components-beginComponent/package.json +11 -0
- package/dist/{runtime/components/legacy/defineWidget-legacy-browser.js → node_modules/@internal/components-define-widget-legacy/index-browser.js} +47 -47
- package/dist/node_modules/@internal/components-define-widget-legacy/index.js +18 -0
- package/dist/node_modules/@internal/components-define-widget-legacy/package.json +11 -0
- package/dist/node_modules/@internal/components-endComponent/index.js +11 -0
- package/dist/node_modules/@internal/components-endComponent/package.json +11 -0
- package/dist/node_modules/@internal/components-entry/index-browser.js +9 -0
- package/dist/node_modules/@internal/components-entry/index.js +285 -0
- package/dist/node_modules/@internal/components-entry/package.json +11 -0
- package/dist/{runtime/components/legacy → node_modules/@internal/components-entry-legacy}/index-browser.js +14 -15
- package/dist/node_modules/@internal/components-entry-legacy/index.js +14 -0
- package/dist/node_modules/@internal/components-entry-legacy/package.json +11 -0
- package/dist/{runtime/components/init-components-browser.js → node_modules/@internal/components-registry/index-browser.js} +180 -79
- package/dist/node_modules/@internal/components-registry/index.js +34 -0
- package/dist/node_modules/@internal/components-registry/package.json +11 -0
- package/dist/{runtime/components/util-browser.js → node_modules/@internal/components-util/index-browser.js} +23 -24
- package/dist/{runtime/components/util.js → node_modules/@internal/components-util/index.js} +10 -12
- package/dist/node_modules/@internal/components-util/package.json +11 -0
- package/dist/node_modules/@internal/create-readable/index-browser.js +25 -0
- package/dist/node_modules/@internal/create-readable/index.js +52 -0
- package/dist/node_modules/@internal/create-readable/package.json +11 -0
- package/dist/node_modules/@internal/init-components-tag/index.js +52 -0
- package/dist/node_modules/@internal/init-components-tag/package.json +11 -0
- package/dist/{loader/index-default.js → node_modules/@internal/loader/index.js} +1 -1
- package/dist/node_modules/@internal/loader/package.json +11 -0
- package/dist/{core-tags/components/preserve-tag-browser.js → node_modules/@internal/preserve-tag/index-browser.js} +8 -8
- package/dist/node_modules/@internal/preserve-tag/index.js +27 -0
- package/dist/node_modules/@internal/preserve-tag/package.json +11 -0
- package/dist/node_modules/@internal/set-immediate/index-browser.js +17 -0
- package/dist/node_modules/@internal/set-immediate/index-worker.js +2 -0
- package/dist/node_modules/@internal/set-immediate/index.js +2 -0
- package/dist/node_modules/@internal/set-immediate/package.json +11 -0
- package/dist/runtime/RenderResult.js +24 -19
- package/dist/runtime/components/Component.js +154 -151
- package/dist/runtime/components/ComponentDef.js +28 -28
- package/dist/runtime/components/ComponentsContext.js +19 -19
- package/dist/runtime/components/GlobalComponentsContext.js +4 -4
- package/dist/runtime/components/KeySequence.js +3 -3
- package/dist/runtime/components/ServerComponent.js +13 -13
- package/dist/runtime/components/State.js +28 -28
- package/dist/runtime/components/attach-detach.js +9 -9
- package/dist/runtime/components/defineComponent.js +5 -5
- package/dist/runtime/components/dom-data.js +6 -6
- package/dist/runtime/components/event-delegation.js +15 -16
- package/dist/runtime/components/index.js +1 -285
- package/dist/runtime/components/legacy/browser.json +1 -1
- package/dist/runtime/components/legacy/defineComponent-legacy.js +1 -1
- package/dist/runtime/components/legacy/defineRenderer-legacy.js +18 -19
- package/dist/runtime/components/legacy/defineWidget-legacy.js +1 -18
- package/dist/runtime/components/legacy/dependencies/html.js +1 -1
- package/dist/runtime/components/legacy/dependencies/index.js +9 -9
- package/dist/runtime/components/legacy/helper-getWidgetFromOut.js +3 -3
- package/dist/runtime/components/legacy/index.js +1 -14
- package/dist/runtime/components/legacy/renderer-legacy.js +43 -43
- package/dist/runtime/components/registry.js +1 -34
- package/dist/runtime/components/renderer.js +38 -38
- package/dist/runtime/components/update-manager.js +10 -10
- package/dist/runtime/createOut.js +1 -1
- package/dist/runtime/dom-insert.js +6 -6
- package/dist/runtime/helpers/_change-case.js +2 -2
- package/dist/runtime/helpers/assign.js +3 -2
- package/dist/runtime/helpers/dynamic-tag.js +14 -16
- package/dist/runtime/helpers/load-template.js +1 -1
- package/dist/runtime/helpers/merge.js +3 -1
- package/dist/runtime/helpers/style-value.js +2 -2
- package/dist/runtime/html/AsyncStream.js +61 -52
- package/dist/runtime/html/BufferedWriter.js +5 -1
- package/dist/runtime/html/StringWriter.js +7 -3
- package/dist/runtime/html/helpers/_dynamic-attr.js +2 -2
- package/dist/runtime/html/helpers/attr.js +4 -4
- package/dist/runtime/html/helpers/attrs.js +3 -3
- package/dist/runtime/html/helpers/data-marko.js +4 -6
- package/dist/runtime/html/helpers/escape-quotes.js +2 -2
- package/dist/runtime/html/helpers/escape-xml.js +1 -1
- package/dist/runtime/html/helpers/props-script.js +1 -1
- package/dist/runtime/html/index.js +15 -12
- package/dist/runtime/renderable.js +5 -5
- package/dist/runtime/vdom/AsyncVDOMBuilder.js +102 -103
- package/dist/runtime/vdom/VComment.js +7 -7
- package/dist/runtime/vdom/VComponent.js +5 -5
- package/dist/runtime/vdom/VDocumentFragment.js +8 -8
- package/dist/runtime/vdom/VElement.js +55 -54
- package/dist/runtime/vdom/VFragment.js +9 -9
- package/dist/runtime/vdom/VNode.js +30 -30
- package/dist/runtime/vdom/VText.js +7 -7
- package/dist/runtime/vdom/helpers/v-element.js +1 -1
- package/dist/runtime/vdom/helpers/v-text.js +1 -1
- package/dist/runtime/vdom/index.js +12 -22
- package/dist/runtime/vdom/morphdom/fragment.js +5 -5
- package/dist/runtime/vdom/morphdom/helpers.js +3 -3
- package/dist/runtime/vdom/morphdom/index.js +72 -68
- package/dist/runtime/vdom/morphdom/specialElHandlers.js +8 -8
- package/dist/runtime/vdom/preserve-attrs.js +1 -1
- package/dist/runtime/vdom/vdom.js +19 -21
- package/docs/body-content.md +2 -2
- package/docs/class-components.md +3 -3
- package/docs/express.md +1 -1
- package/docs/lasso.md +3 -6
- package/docs/marko-v4.md +5 -5
- package/docs/redux.md +1 -1
- package/docs/server-side-rendering.md +2 -2
- package/docs/why-is-marko-fast.md +2 -10
- package/package.json +1 -1
- package/src/browser-refresh.js +2 -2
- package/src/compiler/CodeWriter.js +1 -3
- package/src/compiler/CompileContext.js +3 -8
- package/src/compiler/Compiler.js +4 -4
- package/src/compiler/HtmlJsParser.js +1 -1
- package/src/compiler/Migrator.js +1 -1
- package/src/compiler/Parser.js +3 -3
- package/src/compiler/ast/CustomTag.js +9 -11
- package/src/compiler/ast/HtmlAttribute/html/generateCode.js +2 -2
- package/src/compiler/ast/HtmlAttribute/index.js +1 -1
- package/src/compiler/ast/HtmlElement/vdom/HtmlElementVDOM.js +1 -1
- package/src/compiler/ast/HtmlElement/vdom/generateCode.js +1 -1
- package/src/compiler/ast/TemplateRoot.js +1 -1
- package/src/compiler/ast/Text/html/generateCode.js +3 -3
- package/src/compiler/ast/Text/vdom/generateCode.js +1 -1
- package/src/compiler/index.js +4 -4
- package/src/compiler/modules.js +4 -4
- package/src/compiler/util/finger-print.js +1 -1
- package/src/compiler/util/parseExpression.js +1 -1
- package/src/compiler/util/parseStatement.js +1 -1
- package/src/compiler/util/removeDashes.js +1 -1
- package/src/compiler/util/safeVarName.js +1 -1
- package/src/compiler/util/tokenizer.js +1 -1
- package/src/core-tags/cache/cached-fragment-tag-transformer.js +1 -1
- package/src/core-tags/cache/cached-fragment-tag.js +4 -4
- package/src/core-tags/cache/default-cache-manager.js +3 -3
- package/src/core-tags/components/TransformHelper/ComponentArgsCompiler.js +1 -1
- package/src/core-tags/components/TransformHelper/convertToComponent.js +1 -1
- package/src/core-tags/components/TransformHelper/handleComponentPreserveAttrs.js +1 -1
- package/src/core-tags/components/init-components-tag.js +1 -54
- package/src/core-tags/components/package.json +1 -3
- package/src/core-tags/components/preferred-script-location-tag.js +1 -1
- package/src/core-tags/components/preserve-tag.js +1 -27
- package/src/core-tags/components/util/getTransformHelper.js +1 -1
- package/src/core-tags/core/await/AsyncValue.js +3 -3
- package/src/core-tags/core/await/noop-render.js +1 -1
- package/src/core-tags/core/await/renderer.js +8 -7
- package/src/core-tags/core/await/reorderer-renderer.js +35 -14
- package/src/core-tags/core/await/transformer.js +1 -1
- package/src/core-tags/core/core-transformer.js +2 -2
- package/src/core-tags/migrate/all-tags/index.js +1 -1
- package/src/core-tags/migrate/all-templates/index.js +1 -1
- package/src/core-tags/migrate/include-tag.js +3 -2
- package/src/core-tags/migrate/util/parseFor.js +3 -2
- package/src/core-tags/migrate/util/printJS.js +1 -1
- package/src/defineRenderer.js +1 -1
- package/src/express.js +1 -1
- package/src/hot-reload.js +5 -5
- package/src/index.js +1 -41
- package/src/legacy-helpers/notEmpty.js +1 -1
- package/src/node-require/index.js +12 -1
- package/src/{runtime/components/beginComponent-browser.js → node_modules/@internal/components-beginComponent/index-browser.js} +1 -1
- package/src/{runtime/components/beginComponent.js → node_modules/@internal/components-beginComponent/index.js} +3 -2
- package/src/node_modules/@internal/components-beginComponent/package.json +11 -0
- package/src/{runtime/components/legacy/defineWidget-legacy-browser.js → node_modules/@internal/components-define-widget-legacy/index-browser.js} +21 -23
- package/src/node_modules/@internal/components-define-widget-legacy/index.js +18 -0
- package/src/node_modules/@internal/components-define-widget-legacy/package.json +11 -0
- package/src/{runtime/components/endComponent.js → node_modules/@internal/components-endComponent/index.js} +1 -1
- package/src/node_modules/@internal/components-endComponent/package.json +11 -0
- package/src/node_modules/@internal/components-entry/index-browser.js +9 -0
- package/src/node_modules/@internal/components-entry/index.js +301 -0
- package/src/node_modules/@internal/components-entry/package.json +11 -0
- package/src/node_modules/@internal/components-entry-legacy/index-browser.js +74 -0
- package/src/node_modules/@internal/components-entry-legacy/index.js +15 -0
- package/src/node_modules/@internal/components-entry-legacy/package.json +11 -0
- package/src/{runtime/components/init-components-browser.js → node_modules/@internal/components-registry/index-browser.js} +240 -75
- package/src/node_modules/@internal/components-registry/index.js +44 -0
- package/src/node_modules/@internal/components-registry/package.json +11 -0
- package/src/{runtime/components/util-browser.js → node_modules/@internal/components-util/index-browser.js} +11 -10
- package/src/{runtime/components/util.js → node_modules/@internal/components-util/index.js} +0 -2
- package/src/node_modules/@internal/components-util/package.json +11 -0
- package/src/node_modules/@internal/create-readable/index-browser.js +30 -0
- package/src/node_modules/@internal/create-readable/index.js +57 -0
- package/src/node_modules/@internal/create-readable/package.json +11 -0
- package/src/node_modules/@internal/init-components-tag/index.js +54 -0
- package/src/node_modules/@internal/init-components-tag/package.json +11 -0
- package/src/{loader/index-default.js → node_modules/@internal/loader/index.js} +2 -2
- package/src/node_modules/@internal/loader/package.json +11 -0
- package/src/node_modules/@internal/preserve-tag/index.js +27 -0
- package/src/node_modules/@internal/preserve-tag/package.json +11 -0
- package/src/node_modules/@internal/set-immediate/index-browser.js +17 -0
- package/src/node_modules/@internal/set-immediate/index-worker.js +2 -0
- package/src/node_modules/@internal/set-immediate/index.js +2 -0
- package/src/node_modules/@internal/set-immediate/package.json +11 -0
- package/src/runtime/RenderResult.js +20 -18
- package/src/runtime/components/Component.js +44 -41
- package/src/runtime/components/ComponentDef.js +9 -9
- package/src/runtime/components/ComponentsContext.js +4 -5
- package/src/runtime/components/GlobalComponentsContext.js +2 -1
- package/src/runtime/components/KeySequence.js +1 -1
- package/src/runtime/components/State.js +6 -6
- package/src/runtime/components/attach-detach.js +4 -4
- package/src/runtime/components/defineComponent.js +1 -1
- package/src/runtime/components/event-delegation.js +10 -10
- package/src/runtime/components/index.js +1 -301
- package/src/runtime/components/jquery.js +2 -2
- package/src/runtime/components/legacy/browser.json +1 -1
- package/src/runtime/components/legacy/defineRenderer-legacy.js +5 -6
- package/src/runtime/components/legacy/defineWidget-legacy.js +1 -18
- package/src/runtime/components/legacy/dependencies/html.js +1 -1
- package/src/runtime/components/legacy/dependencies/index.js +3 -3
- package/src/runtime/components/legacy/helper-getWidgetFromOut.js +3 -3
- package/src/runtime/components/legacy/index.js +1 -15
- package/src/runtime/components/legacy/renderer-legacy.js +7 -7
- package/src/runtime/components/ready.js +2 -2
- package/src/runtime/components/registry.js +1 -44
- package/src/runtime/components/renderer.js +4 -4
- package/src/runtime/components/update-manager.js +1 -1
- package/src/runtime/dom-insert.js +8 -8
- package/src/runtime/helpers/_weak-map.js +2 -2
- package/src/runtime/helpers/assign.js +3 -1
- package/src/runtime/helpers/bind-component.js +2 -2
- package/src/runtime/helpers/dynamic-tag.js +2 -4
- package/src/runtime/helpers/for-in.js +1 -1
- package/src/runtime/helpers/load-nested-tag.js +1 -1
- package/src/runtime/helpers/load-template.js +1 -1
- package/src/runtime/helpers/merge.js +3 -1
- package/src/runtime/helpers/noop.js +1 -1
- package/src/runtime/helpers/style-value.js +1 -1
- package/src/runtime/helpers/to-string.js +1 -1
- package/src/runtime/html/AsyncStream.js +90 -76
- package/src/runtime/html/BufferedWriter.js +6 -2
- package/src/runtime/html/StringWriter.js +15 -9
- package/src/runtime/html/helpers/attrs.js +3 -3
- package/src/runtime/html/helpers/data-marko.js +0 -2
- package/src/runtime/html/helpers/escape-quotes.js +1 -1
- package/src/runtime/html/helpers/escape-xml.js +1 -1
- package/src/runtime/html/index.js +23 -13
- package/src/runtime/queueMicrotask.js +2 -2
- package/src/runtime/renderable.js +9 -9
- package/src/runtime/vdom/AsyncVDOMBuilder.js +46 -51
- package/src/runtime/vdom/VComment.js +3 -3
- package/src/runtime/vdom/VDocumentFragment.js +3 -3
- package/src/runtime/vdom/VElement.js +17 -13
- package/src/runtime/vdom/VFragment.js +1 -1
- package/src/runtime/vdom/VNode.js +2 -2
- package/src/runtime/vdom/VText.js +3 -3
- package/src/runtime/vdom/helpers/attrs.js +1 -1
- package/src/runtime/vdom/helpers/const.js +2 -2
- package/src/runtime/vdom/helpers/v-element.js +1 -1
- package/src/runtime/vdom/helpers/v-text.js +1 -1
- package/src/runtime/vdom/index.js +21 -23
- package/src/runtime/vdom/morphdom/fragment.js +8 -7
- package/src/runtime/vdom/morphdom/index.js +19 -9
- package/src/runtime/vdom/morphdom/specialElHandlers.js +6 -6
- package/src/runtime/vdom/parse-html.js +4 -4
- package/src/runtime/vdom/preserve-attrs.js +1 -1
- package/src/runtime/vdom/vdom.js +5 -7
- package/src/taglib/taglib-finder/index.js +1 -1
- package/src/taglib/taglib-loader/Tag.js +5 -5
- package/src/taglib/taglib-loader/Taglib.js +2 -2
- package/src/taglib/taglib-loader/json-file-reader.js +1 -1
- package/src/taglib/taglib-loader/loadAttributeFromProps.js +1 -1
- package/src/taglib/taglib-loader/loadTagFromProps.js +5 -6
- package/src/taglib/taglib-loader/tag-def-from-code.js +2 -1
- package/src/taglib/taglib-lookup/TaglibLookup.js +2 -2
- package/src/taglib/taglib-lookup/index.js +1 -1
- package/dist/core-tags/core/await/client-reorder-browser.js +0 -1
- package/dist/core-tags/core/await/client-reorder-runtime.min.js +0 -5
- package/dist/core-tags/core/await/client-reorder.js +0 -11
- package/dist/core-tags/core/await/package.json +0 -6
- package/dist/index-browser.js +0 -4
- package/dist/loader/index.js +0 -7
- package/dist/loader/package.json +0 -5
- package/dist/node-require/index-browser.js +0 -1
- package/dist/package.json +0 -5
- package/dist/runtime/components/beginComponent-browser.js +0 -12
- package/dist/runtime/components/endComponent.js +0 -11
- package/dist/runtime/components/index-browser.js +0 -14
- package/dist/runtime/components/init-components.js +0 -1
- package/dist/runtime/components/legacy/package.json +0 -6
- package/dist/runtime/components/package.json +0 -12
- package/dist/runtime/components/registry-browser.js +0 -73
- package/dist/runtime/html/Template.js +0 -63
- package/dist/runtime/package.json +0 -5
- package/dist/runtime/setImmediate.js +0 -19
- package/src/core-tags/core/await/client-reorder-browser.js +0 -1
- package/src/core-tags/core/await/client-reorder-runtime.min.js +0 -1
- package/src/core-tags/core/await/client-reorder.js +0 -14
- package/src/core-tags/core/await/package.json +0 -6
- package/src/index-browser.js +0 -3
- package/src/loader/index.js +0 -7
- package/src/loader/package.json +0 -5
- package/src/node-require/index-browser.js +0 -1
- package/src/package.json +0 -5
- package/src/runtime/components/index-browser.js +0 -15
- package/src/runtime/components/init-components.js +0 -1
- package/src/runtime/components/legacy/index-browser.js +0 -73
- package/src/runtime/components/legacy/package.json +0 -6
- package/src/runtime/components/package.json +0 -12
- package/src/runtime/components/registry-browser.js +0 -103
- package/src/runtime/html/Template.js +0 -62
- package/src/runtime/package.json +0 -5
- package/src/runtime/setImmediate.js +0 -21
- /package/dist/{runtime/components/endComponent-browser.js → node_modules/@internal/components-endComponent/index-browser.js} +0 -0
- /package/dist/{core-tags/components/init-components-tag-browser.js → node_modules/@internal/init-components-tag/index-browser.js} +0 -0
- /package/dist/{loader → node_modules/@internal/loader}/index-browser.js +0 -0
- /package/src/{runtime/components/endComponent-browser.js → node_modules/@internal/components-endComponent/index-browser.js} +0 -0
- /package/src/{core-tags/components/init-components-tag-browser.js → node_modules/@internal/init-components-tag/index-browser.js} +0 -0
- /package/src/{loader → node_modules/@internal/loader}/index-browser.js +0 -0
- /package/src/{core-tags/components/preserve-tag-browser.js → node_modules/@internal/preserve-tag/index-browser.js} +0 -0
@@ -1,28 +1,162 @@
|
|
1
|
-
"use strict";
|
2
1
|
var complain = "MARKO_DEBUG" && require("complain");
|
3
2
|
var warp10Finalize = require("warp10/finalize");
|
4
|
-
var
|
5
|
-
var
|
6
|
-
var
|
7
|
-
var createFragmentNode =
|
8
|
-
.___createFragmentNode;
|
9
|
-
var
|
3
|
+
var queueMicrotask = require("../../../runtime/queueMicrotask");
|
4
|
+
var defineComponent = require("../../../runtime/components/defineComponent");
|
5
|
+
var eventDelegation = require("../../../runtime/components/event-delegation");
|
6
|
+
var createFragmentNode =
|
7
|
+
require("../../../runtime/vdom/morphdom/fragment").___createFragmentNode;
|
8
|
+
var ComponentDef = require("../../../runtime/components/ComponentDef");
|
9
|
+
var domData = require("../../../runtime/components/dom-data");
|
10
|
+
var componentsUtil = require("@internal/components-util");
|
10
11
|
var componentLookup = componentsUtil.___componentLookup;
|
11
12
|
var addComponentRootToKeyedElements =
|
12
13
|
componentsUtil.___addComponentRootToKeyedElements;
|
13
|
-
var ComponentDef = require("./ComponentDef");
|
14
|
-
var registry = require("./registry");
|
15
|
-
var domData = require("./dom-data");
|
16
14
|
var keyedElementsByComponentId = domData.___ssrKeyedElementsByComponentId;
|
17
15
|
var componentsByDOMNode = domData.___componentByDOMNode;
|
18
16
|
var serverComponentRootNodes = {};
|
19
17
|
var serverRenderedMeta = {};
|
18
|
+
var win = window;
|
20
19
|
|
21
20
|
var DEFAULT_RUNTIME_ID = "M";
|
22
21
|
var FLAG_WILL_RERENDER_IN_BROWSER = 1;
|
23
22
|
// var FLAG_HAS_RENDER_BODY = 2;
|
24
|
-
|
25
|
-
|
23
|
+
|
24
|
+
var registered = {};
|
25
|
+
var loaded = {};
|
26
|
+
var componentTypes = {};
|
27
|
+
var deferredDefs;
|
28
|
+
var pendingDefs;
|
29
|
+
|
30
|
+
function register(type, def) {
|
31
|
+
var pendingForType;
|
32
|
+
if (pendingDefs) {
|
33
|
+
pendingForType = pendingDefs[type];
|
34
|
+
}
|
35
|
+
registered[type] = def;
|
36
|
+
delete loaded[type];
|
37
|
+
delete componentTypes[type];
|
38
|
+
|
39
|
+
if (pendingForType) {
|
40
|
+
delete pendingDefs[type];
|
41
|
+
queueMicrotask(function () {
|
42
|
+
pendingForType.forEach(function (args) {
|
43
|
+
tryHydrateComponent(args[0], args[1], args[2], args[3])();
|
44
|
+
});
|
45
|
+
});
|
46
|
+
}
|
47
|
+
|
48
|
+
return type;
|
49
|
+
}
|
50
|
+
|
51
|
+
function addPendingDef(def, type, meta, host, runtimeId) {
|
52
|
+
if (!pendingDefs) {
|
53
|
+
pendingDefs = {};
|
54
|
+
|
55
|
+
// eslint-disable-next-line no-constant-condition
|
56
|
+
if ("MARKO_DEBUG") {
|
57
|
+
document.addEventListener("load", function () {
|
58
|
+
var pendingComponentIds = Object.keys(pendingDefs);
|
59
|
+
if (pendingComponentIds.length) {
|
60
|
+
complain(
|
61
|
+
"Marko templates were never loaded for: " + pendingComponentIds
|
62
|
+
);
|
63
|
+
}
|
64
|
+
});
|
65
|
+
}
|
66
|
+
}
|
67
|
+
(pendingDefs[type] = pendingDefs[type] || []).push([
|
68
|
+
def,
|
69
|
+
meta,
|
70
|
+
host,
|
71
|
+
runtimeId
|
72
|
+
]);
|
73
|
+
}
|
74
|
+
|
75
|
+
function load(typeName, isLegacy) {
|
76
|
+
var target = loaded[typeName];
|
77
|
+
if (!target) {
|
78
|
+
target = registered[typeName];
|
79
|
+
|
80
|
+
if (target) {
|
81
|
+
target = target();
|
82
|
+
} else if (isLegacy) {
|
83
|
+
target = exports.___legacy.load(typeName);
|
84
|
+
} else {
|
85
|
+
target = loader(typeName);
|
86
|
+
// eslint-disable-next-line no-constant-condition
|
87
|
+
if ("MARKO_DEBUG") {
|
88
|
+
complain(
|
89
|
+
"Looks like you used `require:` in your browser.json to load a component. This requires that Marko has knowledge of how lasso generates paths and will be removed in a future version. `marko-dependencies:/path/to/template.marko` should be used instead."
|
90
|
+
);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
if (!target) {
|
95
|
+
throw Error("Component not found: " + typeName);
|
96
|
+
}
|
97
|
+
|
98
|
+
loaded[typeName] = target;
|
99
|
+
}
|
100
|
+
|
101
|
+
return target;
|
102
|
+
}
|
103
|
+
|
104
|
+
function getComponentClass(typeName, isLegacy) {
|
105
|
+
var ComponentClass = componentTypes[typeName];
|
106
|
+
|
107
|
+
if (ComponentClass) {
|
108
|
+
return ComponentClass;
|
109
|
+
}
|
110
|
+
|
111
|
+
ComponentClass = load(typeName, isLegacy);
|
112
|
+
|
113
|
+
ComponentClass = ComponentClass.Component || ComponentClass;
|
114
|
+
|
115
|
+
if (!ComponentClass.___isComponent) {
|
116
|
+
ComponentClass = defineComponent(ComponentClass, ComponentClass.renderer);
|
117
|
+
}
|
118
|
+
|
119
|
+
// Make the component "type" accessible on each component instance
|
120
|
+
ComponentClass.prototype.___type = typeName;
|
121
|
+
|
122
|
+
// eslint-disable-next-line no-constant-condition
|
123
|
+
if ("MARKO_DEBUG") {
|
124
|
+
var classNameMatch =
|
125
|
+
/\/([^/]+?)(?:\/index|\/template|)(?:\.marko|\.component(?:-browser)?|)$/.exec(
|
126
|
+
typeName
|
127
|
+
);
|
128
|
+
var className = classNameMatch ? classNameMatch[1] : "AnonymousComponent";
|
129
|
+
className = className.replace(/-(.)/g, function (g) {
|
130
|
+
return g[1].toUpperCase();
|
131
|
+
});
|
132
|
+
className = className
|
133
|
+
.replace(/\$\d+\.\d+\.\d+$/, "")
|
134
|
+
.replace(/^[^a-z$_]/i, "_$&")
|
135
|
+
.replace(/[^0-9a-z$_]+/gi, "_");
|
136
|
+
className = className[0].toUpperCase() + className.slice(1);
|
137
|
+
// eslint-disable-next-line no-unused-vars
|
138
|
+
try {
|
139
|
+
var OldComponentClass = ComponentClass;
|
140
|
+
eval(
|
141
|
+
"ComponentClass = function " +
|
142
|
+
className +
|
143
|
+
"(id, doc) { OldComponentClass.call(this, id, doc); }"
|
144
|
+
);
|
145
|
+
ComponentClass.prototype = OldComponentClass.prototype;
|
146
|
+
} catch (e) {
|
147
|
+
/** ignore error */
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
151
|
+
componentTypes[typeName] = ComponentClass;
|
152
|
+
|
153
|
+
return ComponentClass;
|
154
|
+
}
|
155
|
+
|
156
|
+
function createComponent(typeName, id, isLegacy) {
|
157
|
+
var ComponentClass = getComponentClass(typeName, isLegacy);
|
158
|
+
return new ComponentClass(id);
|
159
|
+
}
|
26
160
|
|
27
161
|
function indexServerComponentBoundaries(node, runtimeId, stack) {
|
28
162
|
var componentId;
|
@@ -105,7 +239,7 @@ function indexServerComponentBoundaries(node, runtimeId, stack) {
|
|
105
239
|
keyedElements[markoKey] = node;
|
106
240
|
}
|
107
241
|
if (markoProps) {
|
108
|
-
Object.keys(markoProps).forEach(function(key) {
|
242
|
+
Object.keys(markoProps).forEach(function (key) {
|
109
243
|
if (key.slice(0, 2) === "on") {
|
110
244
|
eventDelegation.___addDelegatedEventHandler(key.slice(2));
|
111
245
|
}
|
@@ -130,7 +264,7 @@ function invokeComponentEventHandler(component, targetMethodName, args) {
|
|
130
264
|
function addEventListenerHelper(el, eventType, isOnce, listener) {
|
131
265
|
var eventListener = listener;
|
132
266
|
if (isOnce) {
|
133
|
-
eventListener = function(event) {
|
267
|
+
eventListener = function (event) {
|
134
268
|
listener(event);
|
135
269
|
el.removeEventListener(eventType, eventListener);
|
136
270
|
};
|
@@ -152,20 +286,23 @@ function addDOMEventListeners(
|
|
152
286
|
extraArgs,
|
153
287
|
handles
|
154
288
|
) {
|
155
|
-
var removeListener = addEventListenerHelper(
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
args =
|
161
|
-
|
289
|
+
var removeListener = addEventListenerHelper(
|
290
|
+
el,
|
291
|
+
eventType,
|
292
|
+
isOnce,
|
293
|
+
function (event) {
|
294
|
+
var args = [event, el];
|
295
|
+
if (extraArgs) {
|
296
|
+
args = extraArgs.concat(args);
|
297
|
+
}
|
162
298
|
|
163
|
-
|
164
|
-
|
299
|
+
invokeComponentEventHandler(component, targetMethodName, args);
|
300
|
+
}
|
301
|
+
);
|
165
302
|
handles.push(removeListener);
|
166
303
|
}
|
167
304
|
|
168
|
-
function initComponent(componentDef,
|
305
|
+
function initComponent(componentDef, host) {
|
169
306
|
var component = componentDef.___component;
|
170
307
|
|
171
308
|
if (!component || !component.___isComponent) {
|
@@ -173,7 +310,7 @@ function initComponent(componentDef, doc) {
|
|
173
310
|
}
|
174
311
|
|
175
312
|
component.___reset();
|
176
|
-
component.
|
313
|
+
component.___host = host;
|
177
314
|
|
178
315
|
var isExisting = componentDef.___isExisting;
|
179
316
|
|
@@ -185,7 +322,7 @@ function initComponent(componentDef, doc) {
|
|
185
322
|
if (domEvents) {
|
186
323
|
var eventListenerHandles = [];
|
187
324
|
|
188
|
-
domEvents.forEach(function(domEventArgs) {
|
325
|
+
domEvents.forEach(function (domEventArgs) {
|
189
326
|
// The event mapping is for a direct DOM event (not a custom event and not for bubblign dom events)
|
190
327
|
|
191
328
|
var eventType = domEventArgs[0];
|
@@ -226,12 +363,11 @@ function initComponent(componentDef, doc) {
|
|
226
363
|
* in the components context (nested components are initialized before ancestor components).
|
227
364
|
* @param {Array<marko-components/lib/ComponentDef>} componentDefs An array of ComponentDef instances
|
228
365
|
*/
|
229
|
-
function initClientRendered(componentDefs,
|
366
|
+
function initClientRendered(componentDefs, host) {
|
367
|
+
if (!host) host = document;
|
230
368
|
// Ensure that event handlers to handle delegating events are
|
231
369
|
// always attached before initializing any components
|
232
|
-
eventDelegation.___init(
|
233
|
-
|
234
|
-
doc = doc || defaultDocument;
|
370
|
+
eventDelegation.___init(host);
|
235
371
|
var len = componentDefs.length;
|
236
372
|
var componentDef;
|
237
373
|
var i;
|
@@ -243,7 +379,7 @@ function initClientRendered(componentDefs, doc) {
|
|
243
379
|
|
244
380
|
for (i = len; i--; ) {
|
245
381
|
componentDef = componentDefs[i];
|
246
|
-
initComponent(componentDef,
|
382
|
+
initComponent(componentDef, host);
|
247
383
|
}
|
248
384
|
}
|
249
385
|
|
@@ -251,7 +387,7 @@ function initClientRendered(componentDefs, doc) {
|
|
251
387
|
* This method initializes all components that were rendered on the server by iterating over all
|
252
388
|
* of the component IDs.
|
253
389
|
*/
|
254
|
-
function initServerRendered(renderedComponents,
|
390
|
+
function initServerRendered(renderedComponents, host) {
|
255
391
|
var type = typeof renderedComponents;
|
256
392
|
var globalKey = "$";
|
257
393
|
var runtimeId;
|
@@ -266,13 +402,31 @@ function initServerRendered(renderedComponents, doc) {
|
|
266
402
|
|
267
403
|
renderedComponents = win[globalKey];
|
268
404
|
|
405
|
+
// eslint-disable-next-line no-constant-condition
|
406
|
+
if ("MARKO_DEBUG") {
|
407
|
+
if (
|
408
|
+
renderedComponents &&
|
409
|
+
renderedComponents.i !== undefined &&
|
410
|
+
renderedComponents.i !== componentsUtil.___runtimeId
|
411
|
+
) {
|
412
|
+
console.warn(
|
413
|
+
"Multiple instances of Marko have attached to the same runtime id. This could mean that more than one copy of Marko is loaded on the page, or that the script containing Marko has executed more than once."
|
414
|
+
);
|
415
|
+
}
|
416
|
+
}
|
417
|
+
|
269
418
|
var fakeArray = (win[globalKey] = {
|
270
419
|
r: runtimeId,
|
271
420
|
concat: initServerRendered
|
272
421
|
});
|
273
422
|
|
423
|
+
// eslint-disable-next-line no-constant-condition
|
424
|
+
if ("MARKO_DEBUG") {
|
425
|
+
fakeArray.i = componentsUtil.___runtimeId;
|
426
|
+
}
|
427
|
+
|
274
428
|
if (renderedComponents && renderedComponents.forEach) {
|
275
|
-
renderedComponents.forEach(function(renderedComponent) {
|
429
|
+
renderedComponents.forEach(function (renderedComponent) {
|
276
430
|
fakeArray.concat(renderedComponent);
|
277
431
|
});
|
278
432
|
}
|
@@ -285,10 +439,10 @@ function initServerRendered(renderedComponents, doc) {
|
|
285
439
|
|
286
440
|
if (isFromSerializedGlobals) {
|
287
441
|
runtimeId = this.r;
|
288
|
-
|
442
|
+
host = document;
|
289
443
|
} else {
|
290
444
|
runtimeId = renderedComponents.r || DEFAULT_RUNTIME_ID;
|
291
|
-
|
445
|
+
if (!host) host = document;
|
292
446
|
|
293
447
|
// eslint-disable-next-line no-constant-condition
|
294
448
|
if ("MARKO_DEBUG") {
|
@@ -300,7 +454,7 @@ function initServerRendered(renderedComponents, doc) {
|
|
300
454
|
|
301
455
|
// eslint-disable-next-line no-constant-condition
|
302
456
|
if ("MARKO_DEBUG") {
|
303
|
-
if (
|
457
|
+
if (host !== document) {
|
304
458
|
complain(
|
305
459
|
"Passing a document other than the current document to `require('marko/components).init` is deprecated."
|
306
460
|
);
|
@@ -325,8 +479,8 @@ function initServerRendered(renderedComponents, doc) {
|
|
325
479
|
|
326
480
|
// Ensure that event handlers to handle delegating events are
|
327
481
|
// always attached before initializing any components
|
328
|
-
indexServerComponentBoundaries(
|
329
|
-
eventDelegation.___init(
|
482
|
+
indexServerComponentBoundaries(host, runtimeId);
|
483
|
+
eventDelegation.___init(host);
|
330
484
|
|
331
485
|
if (renderedComponents.g) {
|
332
486
|
meta.___globals = renderedComponents.g;
|
@@ -340,39 +494,13 @@ function initServerRendered(renderedComponents, doc) {
|
|
340
494
|
|
341
495
|
// hydrate components top down (leaf nodes last)
|
342
496
|
// and return an array of functions to mount these components
|
343
|
-
var deferredDefs;
|
344
497
|
(renderedComponents.w || [])
|
345
|
-
.map(function(componentDef) {
|
346
|
-
|
347
|
-
componentDef,
|
348
|
-
meta.___types,
|
349
|
-
meta.___globals,
|
350
|
-
registry
|
351
|
-
);
|
352
|
-
|
353
|
-
var mount = hydrateComponentAndGetMount(componentDef, doc);
|
498
|
+
.map(function (componentDef) {
|
499
|
+
var typeName = meta.___types[componentDef[1]];
|
354
500
|
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
// DOM has fully loaded to attempt to init the component again.
|
359
|
-
if (deferredDefs) {
|
360
|
-
deferredDefs.push(componentDef);
|
361
|
-
} else {
|
362
|
-
deferredDefs = [componentDef];
|
363
|
-
doc.addEventListener("DOMContentLoaded", function() {
|
364
|
-
indexServerComponentBoundaries(doc, runtimeId);
|
365
|
-
deferredDefs
|
366
|
-
.map(function(componentDef) {
|
367
|
-
return hydrateComponentAndGetMount(componentDef, doc);
|
368
|
-
})
|
369
|
-
.reverse()
|
370
|
-
.forEach(tryInvoke);
|
371
|
-
});
|
372
|
-
}
|
373
|
-
}
|
374
|
-
|
375
|
-
return mount;
|
501
|
+
return registered[typeName] || document.readyState === "complete"
|
502
|
+
? tryHydrateComponent(componentDef, meta, host, runtimeId)
|
503
|
+
: addPendingDef(componentDef, typeName, meta, host, runtimeId);
|
376
504
|
})
|
377
505
|
.reverse()
|
378
506
|
.forEach(tryInvoke);
|
@@ -380,7 +508,40 @@ function initServerRendered(renderedComponents, doc) {
|
|
380
508
|
return this;
|
381
509
|
}
|
382
510
|
|
383
|
-
function
|
511
|
+
function tryHydrateComponent(rawDef, meta, host, runtimeId) {
|
512
|
+
var componentDef = ComponentDef.___deserialize(
|
513
|
+
rawDef,
|
514
|
+
meta.___types,
|
515
|
+
meta.___globals,
|
516
|
+
exports
|
517
|
+
);
|
518
|
+
var mount = hydrateComponentAndGetMount(componentDef, host);
|
519
|
+
|
520
|
+
if (!mount) {
|
521
|
+
// hydrateComponentAndGetMount will return false if there is not rootNode
|
522
|
+
// for the component. If this is the case, we'll wait until the
|
523
|
+
// DOM has fully loaded to attempt to init the component again.
|
524
|
+
if (deferredDefs) {
|
525
|
+
deferredDefs.push(componentDef);
|
526
|
+
} else {
|
527
|
+
deferredDefs = [componentDef];
|
528
|
+
document.addEventListener("DOMContentLoaded", function () {
|
529
|
+
indexServerComponentBoundaries(host, runtimeId);
|
530
|
+
deferredDefs
|
531
|
+
.map(function (componentDef) {
|
532
|
+
return hydrateComponentAndGetMount(componentDef, host);
|
533
|
+
})
|
534
|
+
.reverse()
|
535
|
+
.forEach(tryInvoke);
|
536
|
+
deferredDefs = undefined;
|
537
|
+
});
|
538
|
+
}
|
539
|
+
}
|
540
|
+
|
541
|
+
return mount;
|
542
|
+
}
|
543
|
+
|
544
|
+
function hydrateComponentAndGetMount(componentDef, host) {
|
384
545
|
var componentId = componentDef.id;
|
385
546
|
var component = componentDef.___component;
|
386
547
|
var rootNode = serverComponentRootNodes[componentId];
|
@@ -393,18 +554,18 @@ function hydrateComponentAndGetMount(componentDef, doc) {
|
|
393
554
|
componentsByDOMNode.set(rootNode, component);
|
394
555
|
|
395
556
|
if (componentDef.___flags & FLAG_WILL_RERENDER_IN_BROWSER) {
|
396
|
-
component.
|
557
|
+
component.___host = host;
|
397
558
|
renderResult = component.___rerender(component.___input, true);
|
398
559
|
trackComponent(componentDef);
|
399
560
|
return function mount() {
|
400
|
-
renderResult.afterInsert(
|
561
|
+
renderResult.afterInsert(host);
|
401
562
|
};
|
402
563
|
} else {
|
403
564
|
trackComponent(componentDef);
|
404
565
|
}
|
405
566
|
|
406
567
|
return function mount() {
|
407
|
-
initComponent(componentDef,
|
568
|
+
initComponent(componentDef, host);
|
408
569
|
};
|
409
570
|
}
|
410
571
|
}
|
@@ -420,5 +581,9 @@ function tryInvoke(fn) {
|
|
420
581
|
if (fn) fn();
|
421
582
|
}
|
422
583
|
|
423
|
-
exports.
|
424
|
-
exports.
|
584
|
+
exports.r = register;
|
585
|
+
exports.___createComponent = createComponent;
|
586
|
+
exports.___getComponentClass = getComponentClass;
|
587
|
+
exports.___initServerRendered = win.$initComponents = initServerRendered;
|
588
|
+
|
589
|
+
require("../../../runtime/components/ComponentsContext").___initClientRendered = initClientRendered;
|
@@ -0,0 +1,44 @@
|
|
1
|
+
"use strict";
|
2
|
+
const copyProps = require("raptor-util/copyProps");
|
3
|
+
const constructorCache = new Map();
|
4
|
+
const BaseServerComponent = require("../../../runtime/components/ServerComponent");
|
5
|
+
|
6
|
+
function createServerComponentClass(renderingLogic) {
|
7
|
+
var renderingLogicProps =
|
8
|
+
typeof renderingLogic === "function"
|
9
|
+
? renderingLogic.prototype
|
10
|
+
: renderingLogic;
|
11
|
+
|
12
|
+
class ServerComponent extends BaseServerComponent {}
|
13
|
+
|
14
|
+
copyProps(renderingLogicProps, ServerComponent.prototype);
|
15
|
+
|
16
|
+
return ServerComponent;
|
17
|
+
}
|
18
|
+
function createComponent(
|
19
|
+
renderingLogic,
|
20
|
+
id,
|
21
|
+
input,
|
22
|
+
out,
|
23
|
+
typeName,
|
24
|
+
customEvents,
|
25
|
+
scope
|
26
|
+
) {
|
27
|
+
let ServerComponent;
|
28
|
+
|
29
|
+
if (renderingLogic) {
|
30
|
+
ServerComponent = constructorCache.get(renderingLogic);
|
31
|
+
|
32
|
+
if (!ServerComponent) {
|
33
|
+
ServerComponent = createServerComponentClass(renderingLogic);
|
34
|
+
constructorCache.set(renderingLogic, ServerComponent);
|
35
|
+
}
|
36
|
+
} else {
|
37
|
+
ServerComponent = BaseServerComponent;
|
38
|
+
}
|
39
|
+
|
40
|
+
return new ServerComponent(id, input, out, typeName, customEvents, scope);
|
41
|
+
}
|
42
|
+
|
43
|
+
exports.___isServer = true;
|
44
|
+
exports.___createComponent = createComponent;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
var domData = require("
|
1
|
+
var domData = require("../../../runtime/components/dom-data");
|
2
2
|
var componentsByDOMNode = domData.___componentByDOMNode;
|
3
3
|
var keysByDOMNode = domData.___keyByDOMNode;
|
4
4
|
var vElementsByDOMNode = domData.___vElementByDOMNode;
|
@@ -8,12 +8,13 @@ var runtimeId = markoUID.i++;
|
|
8
8
|
|
9
9
|
var componentLookup = {};
|
10
10
|
|
11
|
-
var defaultDocument = document;
|
12
11
|
var EMPTY_OBJECT = {};
|
13
12
|
|
14
|
-
function getComponentForEl(el,
|
13
|
+
function getComponentForEl(el, host) {
|
15
14
|
var node =
|
16
|
-
typeof el == "string"
|
15
|
+
typeof el == "string"
|
16
|
+
? ((host ? host.ownerDocument : host) || document).getElementById(el)
|
17
|
+
: el;
|
17
18
|
var component;
|
18
19
|
var vElement;
|
19
20
|
|
@@ -141,13 +142,13 @@ function addComponentRootToKeyedElements(
|
|
141
142
|
|
142
143
|
// eslint-disable-next-line no-constant-condition
|
143
144
|
if ("MARKO_DEBUG") {
|
144
|
-
var warnNodeRemoved = function(event) {
|
145
|
+
var warnNodeRemoved = function (event) {
|
145
146
|
var fragment = event.target.fragment;
|
146
147
|
if (fragment) {
|
147
148
|
var baseError = new Error(
|
148
149
|
"Fragment boundary marker removed. This will cause an error when the fragment is updated."
|
149
150
|
);
|
150
|
-
fragment.___markersRemovedError = function(message) {
|
151
|
+
fragment.___markersRemovedError = function (message) {
|
151
152
|
var error = new Error(message + " Boundary markers missing.");
|
152
153
|
|
153
154
|
baseError.stack = baseError.stack.replace(/.*warnNodeRemoved.*\n/, "");
|
@@ -158,11 +159,11 @@ if ("MARKO_DEBUG") {
|
|
158
159
|
};
|
159
160
|
}
|
160
161
|
};
|
161
|
-
exports.___startDOMManipulationWarning = function() {
|
162
|
-
|
162
|
+
exports.___startDOMManipulationWarning = function (host) {
|
163
|
+
host.addEventListener("DOMNodeRemoved", warnNodeRemoved);
|
163
164
|
};
|
164
|
-
exports.___stopDOMManipulationWarning = function() {
|
165
|
-
|
165
|
+
exports.___stopDOMManipulationWarning = function (host) {
|
166
|
+
host.removeEventListener("DOMNodeRemoved", warnNodeRemoved);
|
166
167
|
};
|
167
168
|
}
|
168
169
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
var FLAG_WILL_RERENDER_IN_BROWSER = 1;
|
2
2
|
// var FLAG_HAS_RENDER_BODY = 2;
|
3
|
-
// var FLAG_IS_LEGACY = 4;
|
4
|
-
// var FLAG_OLD_HYDRATE_NO_CREATE = 8;
|
5
3
|
|
6
4
|
function nextComponentIdProvider(out) {
|
7
5
|
var prefix = out.global.componentIdPrefix || out.global.widgetIdPrefix || "s"; // "s" is for server (we use "b" for the browser)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
var encoder = new TextEncoder();
|
2
|
+
var noop = function () {};
|
3
|
+
|
4
|
+
module.exports = function (data) {
|
5
|
+
// eslint-disable-next-line no-undef
|
6
|
+
var transformStream = new TransformStream();
|
7
|
+
var writer = transformStream.writable.getWriter();
|
8
|
+
var facade = {
|
9
|
+
write: function (string) {
|
10
|
+
writer.write(encoder.encode(string));
|
11
|
+
},
|
12
|
+
end: function () {
|
13
|
+
writer.close();
|
14
|
+
}
|
15
|
+
};
|
16
|
+
var out = this.createOut(
|
17
|
+
data && data.$global,
|
18
|
+
facade,
|
19
|
+
undefined,
|
20
|
+
this.___shouldBuffer
|
21
|
+
);
|
22
|
+
out.once("error", err => {
|
23
|
+
facade.write = facade.end = noop;
|
24
|
+
writer.abort(err);
|
25
|
+
});
|
26
|
+
this.render(data, out);
|
27
|
+
out.end();
|
28
|
+
|
29
|
+
return transformStream.readable;
|
30
|
+
};
|
@@ -0,0 +1,57 @@
|
|
1
|
+
var stream = require("stream");
|
2
|
+
|
3
|
+
var OutgoingMessageProto = require("http").OutgoingMessage.prototype;
|
4
|
+
if (String(OutgoingMessageProto.flush).indexOf("deprecated") !== -1) {
|
5
|
+
// Yes, we are monkey-patching http. This method should never have been added and it was introduced on
|
6
|
+
// the iojs fork. It was quickly deprecated and I'm 99% sure no one is actually using it.
|
7
|
+
// See:
|
8
|
+
// - https://github.com/marko-js/async-writer/issues/3
|
9
|
+
// - https://github.com/nodejs/node/issues/2920
|
10
|
+
//
|
11
|
+
// This method causes problems since marko looks for the flush method and calls it found.
|
12
|
+
// The `res.flush()` method is introduced by the [compression](https://www.npmjs.com/package/compression)
|
13
|
+
// middleware, but, otherwise, it should typically not exist.
|
14
|
+
delete OutgoingMessageProto.flush;
|
15
|
+
}
|
16
|
+
|
17
|
+
class Readable extends stream.Readable {
|
18
|
+
constructor(template, data) {
|
19
|
+
super();
|
20
|
+
this.___template = template;
|
21
|
+
this.___data = data;
|
22
|
+
this.___rendered = false;
|
23
|
+
}
|
24
|
+
|
25
|
+
write(data) {
|
26
|
+
if (data != null) {
|
27
|
+
this.push(data);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
end() {
|
32
|
+
this.push(null);
|
33
|
+
}
|
34
|
+
|
35
|
+
_read() {
|
36
|
+
if (this.___rendered) {
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
|
40
|
+
this.___rendered = true;
|
41
|
+
var template = this.___template;
|
42
|
+
var data = this.___data;
|
43
|
+
var globalData = data && data.$global;
|
44
|
+
var out = this.___template.createOut(
|
45
|
+
globalData,
|
46
|
+
this,
|
47
|
+
undefined,
|
48
|
+
template.___shouldBuffer
|
49
|
+
);
|
50
|
+
template.render(data, out);
|
51
|
+
out.end();
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
module.exports = function (data) {
|
56
|
+
return new Readable(this, data);
|
57
|
+
};
|