marko 5.29.2 → 5.30.0

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.
Files changed (167) hide show
  1. package/README.md +1 -1
  2. package/bin/markoc.js +18 -18
  3. package/dist/core-tags/core/await/renderer.js +5 -1
  4. package/dist/node_modules/@internal/components-beginComponent/index.js +13 -3
  5. package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +331 -0
  6. package/dist/node_modules/@internal/components-define-widget-legacy/index.js +18 -0
  7. package/dist/node_modules/@internal/components-define-widget-legacy/package.json +11 -0
  8. package/dist/node_modules/@internal/components-entry/index-browser.js +2 -2
  9. package/dist/node_modules/@internal/components-entry/index.js +73 -45
  10. package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +74 -0
  11. package/dist/node_modules/@internal/components-entry-legacy/index.js +15 -0
  12. package/dist/node_modules/@internal/components-entry-legacy/package.json +11 -0
  13. package/dist/node_modules/@internal/components-registry/index-browser.js +70 -43
  14. package/dist/node_modules/@internal/components-registry/index.js +2 -2
  15. package/dist/node_modules/@internal/components-util/index-browser.js +17 -17
  16. package/dist/node_modules/@internal/components-util/index.js +18 -8
  17. package/dist/node_modules/@internal/create-readable/index-browser.js +1 -1
  18. package/dist/node_modules/@internal/create-readable/index.js +9 -9
  19. package/dist/node_modules/@internal/set-immediate/index-browser.js +1 -1
  20. package/dist/node_modules/@internal/set-immediate/index-worker.js +2 -2
  21. package/dist/node_modules/@internal/set-immediate/index.js +2 -2
  22. package/dist/runtime/RenderResult.js +3 -3
  23. package/dist/runtime/components/Component.js +146 -148
  24. package/dist/runtime/components/ComponentDef.js +41 -27
  25. package/dist/runtime/components/ComponentsContext.js +6 -6
  26. package/dist/runtime/components/GlobalComponentsContext.js +3 -3
  27. package/dist/runtime/components/KeySequence.js +3 -3
  28. package/dist/runtime/components/ServerComponent.js +13 -13
  29. package/dist/runtime/components/State.js +27 -27
  30. package/dist/runtime/components/attach-detach.js +7 -7
  31. package/dist/runtime/components/defineComponent.js +5 -5
  32. package/dist/runtime/components/dom-data.js +6 -6
  33. package/dist/runtime/components/event-delegation.js +10 -10
  34. package/dist/runtime/components/legacy/browser.json +9 -0
  35. package/dist/runtime/components/legacy/defineComponent-legacy.js +32 -0
  36. package/dist/runtime/components/legacy/defineRenderer-legacy.js +171 -0
  37. package/dist/runtime/components/legacy/defineWidget-legacy.js +1 -0
  38. package/dist/runtime/components/legacy/dependencies/html.js +3 -0
  39. package/dist/runtime/components/legacy/dependencies/index.js +178 -0
  40. package/dist/runtime/components/legacy/dependencies/vdom.js +3 -0
  41. package/dist/runtime/components/legacy/index.js +1 -0
  42. package/dist/runtime/components/legacy/jquery.js +51 -0
  43. package/dist/runtime/components/legacy/ready.js +152 -0
  44. package/dist/runtime/components/legacy/renderer-legacy.js +230 -0
  45. package/dist/runtime/components/renderer.js +30 -26
  46. package/dist/runtime/components/update-manager.js +10 -10
  47. package/dist/runtime/createOut.js +1 -1
  48. package/dist/runtime/dom-insert.js +5 -5
  49. package/dist/runtime/helpers/_change-case.js +2 -2
  50. package/dist/runtime/helpers/dynamic-tag.js +7 -9
  51. package/dist/runtime/helpers/style-value.js +7 -2
  52. package/dist/runtime/html/AsyncStream.js +20 -20
  53. package/dist/runtime/html/BufferedWriter.js +2 -2
  54. package/dist/runtime/html/helpers/_dynamic-attr.js +2 -2
  55. package/dist/runtime/html/helpers/attr.js +19 -6
  56. package/dist/runtime/html/helpers/attrs.js +7 -0
  57. package/dist/runtime/html/helpers/data-marko.js +2 -2
  58. package/dist/runtime/html/helpers/escape-quotes.js +1 -1
  59. package/dist/runtime/html/helpers/escape-xml.js +1 -1
  60. package/dist/runtime/html/helpers/merge-attrs.js +38 -7
  61. package/dist/runtime/html/index.js +2 -2
  62. package/dist/runtime/renderable.js +9 -6
  63. package/dist/runtime/vdom/AsyncVDOMBuilder.js +86 -86
  64. package/dist/runtime/vdom/VComponent.js +3 -3
  65. package/dist/runtime/vdom/VDocumentFragment.js +7 -7
  66. package/dist/runtime/vdom/VElement.js +61 -50
  67. package/dist/runtime/vdom/VFragment.js +8 -8
  68. package/dist/runtime/vdom/VNode.js +36 -36
  69. package/dist/runtime/vdom/VText.js +8 -8
  70. package/dist/runtime/vdom/helpers/attrs.js +24 -4
  71. package/dist/runtime/vdom/helpers/merge-attrs.js +16 -0
  72. package/dist/runtime/vdom/helpers/v-element.js +1 -1
  73. package/dist/runtime/vdom/helpers/v-text.js +1 -1
  74. package/dist/runtime/vdom/hot-reload.js +19 -19
  75. package/dist/runtime/vdom/index.js +2 -2
  76. package/dist/runtime/vdom/morphdom/fragment.js +5 -5
  77. package/dist/runtime/vdom/morphdom/helpers.js +5 -5
  78. package/dist/runtime/vdom/morphdom/index.js +56 -56
  79. package/dist/runtime/vdom/morphdom/specialElHandlers.js +7 -7
  80. package/dist/runtime/vdom/preserve-attrs.js +1 -1
  81. package/dist/runtime/vdom/vdom.js +14 -14
  82. package/docs/10-awesome-marko-features.md +1 -1
  83. package/docs/body-content.md +3 -3
  84. package/docs/class-components.md +6 -6
  85. package/docs/cloudflare-workers.md +3 -3
  86. package/docs/compiler.md +5 -5
  87. package/docs/express.md +2 -2
  88. package/docs/http.md +1 -1
  89. package/docs/koa.md +1 -1
  90. package/docs/lasso.md +1 -1
  91. package/docs/marko-vs-react.md +2 -2
  92. package/docs/rendering.md +6 -6
  93. package/docs/rollup.md +30 -30
  94. package/docs/troubleshooting-streaming.md +1 -1
  95. package/docs/typescript.md +1 -1
  96. package/docs/vite.md +3 -3
  97. package/docs/webpack.md +25 -25
  98. package/docs/why-is-marko-fast.md +2 -2
  99. package/index.d.ts +1 -0
  100. package/legacy-components-browser.marko +15 -0
  101. package/legacy-components.js +7 -0
  102. package/package.json +51 -45
  103. package/src/compiler/config.js +1 -1
  104. package/src/compiler/index.js +5 -5
  105. package/src/core-tags/core/__flush_here_and_after__.js +1 -1
  106. package/src/core-tags/core/await/AsyncValue.js +1 -1
  107. package/src/core-tags/core/await/renderer.js +8 -4
  108. package/src/core-tags/core/await/reorderer-renderer.js +1 -1
  109. package/src/node-require/browser-refresh.js +2 -2
  110. package/src/node-require/index.js +2 -2
  111. package/src/node_modules/@internal/components-beginComponent/index.js +16 -6
  112. package/src/node_modules/@internal/components-define-widget-legacy/index-browser.js +331 -0
  113. package/src/node_modules/@internal/components-define-widget-legacy/index.js +18 -0
  114. package/src/node_modules/@internal/components-define-widget-legacy/package.json +11 -0
  115. package/src/node_modules/@internal/components-entry/index.js +65 -37
  116. package/src/node_modules/@internal/components-entry-legacy/index-browser.js +74 -0
  117. package/src/node_modules/@internal/components-entry-legacy/index.js +15 -0
  118. package/src/node_modules/@internal/components-entry-legacy/package.json +11 -0
  119. package/src/node_modules/@internal/components-registry/index-browser.js +33 -6
  120. package/src/node_modules/@internal/components-util/index.js +10 -0
  121. package/src/runtime/RenderResult.js +3 -3
  122. package/src/runtime/components/Component.js +16 -18
  123. package/src/runtime/components/ComponentDef.js +22 -8
  124. package/src/runtime/components/ComponentsContext.js +1 -1
  125. package/src/runtime/components/State.js +2 -2
  126. package/src/runtime/components/attach-detach.js +1 -1
  127. package/src/runtime/components/dom-data.js +1 -1
  128. package/src/runtime/components/legacy/browser.json +9 -0
  129. package/src/runtime/components/legacy/defineComponent-legacy.js +32 -0
  130. package/src/runtime/components/legacy/defineRenderer-legacy.js +171 -0
  131. package/src/runtime/components/legacy/defineWidget-legacy.js +1 -0
  132. package/src/runtime/components/legacy/dependencies/html.js +3 -0
  133. package/src/runtime/components/legacy/dependencies/index.js +178 -0
  134. package/src/runtime/components/legacy/dependencies/vdom.js +3 -0
  135. package/src/runtime/components/legacy/index.js +1 -0
  136. package/src/runtime/components/legacy/jquery.js +51 -0
  137. package/src/runtime/components/legacy/ready.js +152 -0
  138. package/src/runtime/components/legacy/renderer-legacy.js +230 -0
  139. package/src/runtime/components/renderer.js +4 -0
  140. package/src/runtime/components/update-manager.js +1 -1
  141. package/src/runtime/dom-insert.js +1 -1
  142. package/src/runtime/helpers/dynamic-tag.js +2 -4
  143. package/src/runtime/helpers/style-value.js +7 -2
  144. package/src/runtime/html/AsyncStream.js +5 -5
  145. package/src/runtime/html/BufferedWriter.js +1 -1
  146. package/src/runtime/html/StringWriter.js +1 -1
  147. package/src/runtime/html/helpers/attr.js +15 -2
  148. package/src/runtime/html/helpers/attrs.js +7 -0
  149. package/src/runtime/html/helpers/merge-attrs.js +38 -7
  150. package/src/runtime/html/hot-reload.js +1 -1
  151. package/src/runtime/html/index.js +2 -2
  152. package/src/runtime/renderable.js +5 -2
  153. package/src/runtime/vdom/AsyncVDOMBuilder.js +2 -2
  154. package/src/runtime/vdom/VComponent.js +1 -1
  155. package/src/runtime/vdom/VDocumentFragment.js +1 -1
  156. package/src/runtime/vdom/VElement.js +17 -6
  157. package/src/runtime/vdom/VFragment.js +1 -1
  158. package/src/runtime/vdom/VNode.js +1 -1
  159. package/src/runtime/vdom/VText.js +1 -1
  160. package/src/runtime/vdom/helpers/attrs.js +26 -6
  161. package/src/runtime/vdom/helpers/merge-attrs.js +16 -0
  162. package/src/runtime/vdom/hot-reload.js +1 -1
  163. package/src/runtime/vdom/index.js +2 -2
  164. package/src/runtime/vdom/morphdom/fragment.js +1 -1
  165. package/src/runtime/vdom/morphdom/specialElHandlers.js +1 -1
  166. package/src/taglib/index.js +1 -1
  167. package/tags-html.d.ts +9 -0
@@ -0,0 +1,178 @@
1
+ var nodePath = require("path");
2
+ var defaultResolveFrom = require("resolve-from");
3
+ var env = process.env.NODE_ENV;
4
+ var production = !env || env !== "development";
5
+
6
+ function getRootDeps(template, context) {
7
+ if (production && template.___depsArray) {
8
+ return template.___depsArray;
9
+ }
10
+
11
+ attachDepsAndComponentsToTemplate(template, context);
12
+
13
+ var deps = (template.___depsArray = Object.keys(template.___deps).map(
14
+ (key) => template.___deps[key]
15
+ ));
16
+ var initModule = getInitModule(template.path, template.___components);
17
+
18
+ if (initModule) deps.push(initModule);
19
+
20
+ // these dependencies should be last
21
+ deps.concat = function () {
22
+ var result = [];
23
+ result = result.concat.apply(result, arguments);
24
+ result.push.apply(result, this);
25
+ return result;
26
+ };
27
+
28
+ return deps;
29
+ }
30
+
31
+ function attachDepsAndComponentsToTemplate(target, context) {
32
+ var template;
33
+
34
+ if (!target.meta && target.template) {
35
+ template = target.template;
36
+ } else {
37
+ template = target;
38
+ }
39
+
40
+ if (typeof template.createOut !== "function") return;
41
+ if (production && target.___deps) return;
42
+
43
+ var deps = (target.___deps = {});
44
+ var components = (target.___components = {});
45
+
46
+ if (!template.meta) {
47
+ // eslint-disable-next-line no-console
48
+ console.warn("Metadata not set for template at ", template.path);
49
+ return;
50
+ }
51
+
52
+ var meta = template.meta;
53
+ var root = nodePath.dirname(template.path);
54
+
55
+ if (meta.deps) {
56
+ meta.deps.forEach((dep) => {
57
+ dep = resolveDep(dep, root, context);
58
+ deps[dep.virtualPath || dep.path] = dep;
59
+ });
60
+ }
61
+
62
+ if (meta.id && meta.component) {
63
+ var resolveFrom = (context && context.resolveFrom) || defaultResolveFrom;
64
+ components[meta.id] = {
65
+ id: meta.id,
66
+ path: resolveFrom(root, meta.component),
67
+ };
68
+ }
69
+
70
+ if (meta.tags) {
71
+ meta.tags.forEach((tagPath) => {
72
+ var resolveFrom = context.resolveFrom || defaultResolveFrom;
73
+ var tag = resolveFrom(root, tagPath);
74
+ var ext = nodePath.extname(tag);
75
+ var req = context.require || require;
76
+
77
+ try {
78
+ tag = req.resolve(tag.slice(0, 0 - ext.length) + ".js");
79
+ } catch (e) {
80
+ /* ignore error */
81
+ }
82
+
83
+ tag = req(tag);
84
+
85
+ attachDepsAndComponentsToTemplate(tag, context);
86
+
87
+ if (tag.___deps) Object.assign(deps, tag.___deps);
88
+ if (tag.___components) Object.assign(components, tag.___components);
89
+ });
90
+ }
91
+ }
92
+
93
+ function getInitModule(path, components) {
94
+ var module = null;
95
+
96
+ if (components) {
97
+ components = Object.keys(components).map((key) => components[key]);
98
+
99
+ if (components.length) {
100
+ var root = nodePath.dirname(path);
101
+ var virtualPath = path + ".init.js";
102
+ var registrations = components.map(
103
+ (component) =>
104
+ `components.register('${component.id}', require('.${
105
+ nodePath.sep
106
+ }${nodePath.relative(root, component.path)}'));`
107
+ );
108
+ var code = `
109
+ var components = require('marko/components');
110
+ ${registrations.join("\n")}
111
+ `;
112
+
113
+ module = {
114
+ type: "require",
115
+ run: true,
116
+ virtualModule: {
117
+ path: virtualPath,
118
+ read: function (_, callback) {
119
+ // TODO: Check if read can just return string in lasso 2
120
+ if (callback) {
121
+ callback(null, code);
122
+ } else {
123
+ return code;
124
+ }
125
+ },
126
+ },
127
+ };
128
+ }
129
+ }
130
+
131
+ return module;
132
+ }
133
+
134
+ function resolveDep(dep, root, context) {
135
+ if (typeof dep === "string") {
136
+ dep = parseDependencyString(dep);
137
+ }
138
+
139
+ if (dep.path) {
140
+ var resolveFrom = (context && context.resolveFrom) || defaultResolveFrom;
141
+ dep.path = resolveFrom(root, dep.path);
142
+
143
+ if (dep.path && !dep.type) {
144
+ dep.type = dep.path.slice(dep.path.lastIndexOf(".") + 1);
145
+ }
146
+ }
147
+
148
+ if (dep.virtualPath) {
149
+ dep.virtualPath = nodePath.resolve(root, dep.virtualPath);
150
+ }
151
+
152
+ if (dep.type === "js") {
153
+ dep.type = "require";
154
+ dep.run = true;
155
+ }
156
+
157
+ return dep;
158
+ }
159
+
160
+ function parseDependencyString(string) {
161
+ var match = /^(?:([\w-]+)(?::\s*|\s+))?(.*?(?:\.(\w+))?)$/.exec(string);
162
+ return {
163
+ type: match[1] || match[3],
164
+ path: match[2],
165
+ };
166
+ }
167
+
168
+ function patch(Template) {
169
+ Template.prototype.getDependencies = function (context) {
170
+ context = context || {};
171
+
172
+ return getRootDeps(this, context);
173
+ };
174
+ }
175
+
176
+ exports.getDeps = getRootDeps;
177
+ exports.resolveDep = resolveDep;
178
+ exports.patch = patch;
@@ -0,0 +1,3 @@
1
+ var patch = require("./").patch;
2
+ var Template = require("../../../vdom").Template;
3
+ patch(Template);
@@ -0,0 +1 @@
1
+ module.exports = require("@internal/components-entry-legacy");
@@ -0,0 +1,51 @@
1
+ var ready = require("./ready");
2
+
3
+ var idRegExp = /^#(\S+)( .*)?/;
4
+
5
+ exports.patchComponent = function (jQuery, proto, delayThrow) {
6
+ if (!(jQuery || (jQuery = window.$)) && !delayThrow) {
7
+ throw new Error("jQuery not found");
8
+ }
9
+
10
+ (proto || require("../Component").prototype).$ = function jqueryProxy(arg) {
11
+ var args = arguments;
12
+ var self = this;
13
+
14
+ if (!jQuery) {
15
+ throw new Error("jQuery not found");
16
+ }
17
+
18
+ if (args.length === 1) {
19
+ //Handle an "ondomready" callback function
20
+ if (typeof arg === "function") {
21
+ return ready(function () {
22
+ arg.call(self);
23
+ });
24
+ } else if (typeof arg === "string") {
25
+ var match = idRegExp.exec(arg);
26
+ //Reset the search to 0 so the next call to exec will start from the beginning for the new string
27
+ if (match != null) {
28
+ var key = match[1];
29
+ if (match[2] == null) {
30
+ return jQuery(self.getEl(key));
31
+ } else {
32
+ return jQuery(match[2].trim(), self.getEl(key));
33
+ }
34
+ } else {
35
+ var rootEl = self.getEl();
36
+ if (!rootEl) {
37
+ throw new Error("Root element is not defined for component");
38
+ }
39
+ if (rootEl) {
40
+ return jQuery(arg, rootEl);
41
+ }
42
+ }
43
+ }
44
+ } else if (args.length === 2 && typeof args[1] === "string") {
45
+ return jQuery(arg, self.getEl(args[1]));
46
+ } else if (args.length === 0) {
47
+ return jQuery(self.el);
48
+ }
49
+ return jQuery.apply(window, arguments);
50
+ };
51
+ };
@@ -0,0 +1,152 @@
1
+ /*
2
+ jQuery's doc.ready/$(function(){}) should
3
+ you wish to use a cross-browser domReady solution
4
+ without opting for a library.
5
+
6
+ Demo: http://jsfiddle.net/zKLpb/
7
+
8
+ usage:
9
+ $(function(){
10
+ // your code
11
+ });
12
+
13
+ Parts: jQuery project, Diego Perini, Lucent M.
14
+ Previous version from Addy Osmani (https://raw.github.com/addyosmani/jquery.parts/master/jquery.documentReady.js)
15
+
16
+ This version: Patrick Steele-Idem
17
+ - Converted to CommonJS module
18
+ - Code cleanup
19
+ - Fixes for IE <=10
20
+ */
21
+
22
+ var isReady = false;
23
+ var readyBound = false;
24
+
25
+ var defaultWindow = typeof window != "undefined" && window;
26
+ var defaultDocument = typeof document != "undefined" && document;
27
+
28
+ var listeners = [];
29
+
30
+ function domReadyCallback() {
31
+ for (var i = 0, len = listeners.length; i < len; i++) {
32
+ var listener = listeners[i];
33
+ listener[0].call(listener[1]);
34
+ }
35
+ listeners = null;
36
+ }
37
+
38
+ function bindReady(doc) {
39
+ var toplevel = false;
40
+ var win = doc.defaultView || defaultWindow || doc;
41
+
42
+ // Handle when the DOM is ready
43
+ function domReady() {
44
+ // Make sure that the DOM is not already loaded
45
+ if (!isReady) {
46
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
47
+ if (!doc.body) {
48
+ return setTimeout(domReady, 1);
49
+ }
50
+ // Remember that the DOM is ready
51
+ isReady = true;
52
+ // If there are functions bound, to execute
53
+ domReadyCallback();
54
+ // Execute all of them
55
+ }
56
+ } // /ready()
57
+
58
+ // The ready event handler
59
+ function domContentLoaded() {
60
+ if (doc.addEventListener) {
61
+ doc.removeEventListener("DOMContentLoaded", domContentLoaded, false);
62
+ doc.removeEventListener("load", domContentLoaded, false);
63
+ } else {
64
+ // we're here because readyState !== "loading" in oldIE
65
+ // which is good enough for us to call the dom ready!
66
+ doc.detachEvent("onreadystatechange", domContentLoaded);
67
+ doc.detachEvent("onload", domContentLoaded);
68
+ }
69
+ domReady();
70
+ }
71
+
72
+ // The DOM ready check for Internet Explorer
73
+ function doScrollCheck() {
74
+ if (isReady) {
75
+ return;
76
+ }
77
+
78
+ try {
79
+ // If IE is used, use the trick by Diego Perini
80
+ // http://javascript.nwbox.com/IEContentLoaded/
81
+ doc.documentElement.doScroll("left");
82
+ } catch (error) {
83
+ setTimeout(doScrollCheck, 1);
84
+ return;
85
+ }
86
+ // and execute any waiting functions
87
+ domReady();
88
+ }
89
+
90
+ // Catch cases where $ is called after the
91
+ // browser event has already occurred. IE <= 10 has a bug that results in 'interactive' being assigned
92
+ // to the readyState before the DOM is really ready
93
+ if (
94
+ document.attachEvent
95
+ ? document.readyState === "complete"
96
+ : document.readyState !== "loading"
97
+ ) {
98
+ // We will get here if the browser is IE and the readyState === 'complete' or the browser
99
+ // is not IE and the readyState === 'interactive' || 'complete'
100
+ domReady(doc);
101
+ } else if (doc.addEventListener) {
102
+ // Standards-based browsers support DOMContentLoaded
103
+ // Use the handy event callback
104
+ doc.addEventListener("DOMContentLoaded", domContentLoaded, false);
105
+ // A fallback to win.onload, that will always work
106
+ win.addEventListener("load", domContentLoaded, false);
107
+ // If IE event model is used
108
+ } else if (doc.attachEvent) {
109
+ // ensure firing before onload,
110
+ // maybe late but safe also for iframes
111
+ doc.attachEvent("onreadystatechange", domContentLoaded);
112
+ // A fallback to win.onload, that will always work
113
+ win.attachEvent("onload", domContentLoaded);
114
+ // If IE and not a frame
115
+ // continually check to see if the document is ready
116
+ try {
117
+ toplevel = win.frameElement == null;
118
+ } catch (e) {
119
+ /* ignore error */
120
+ }
121
+ if (doc.documentElement.doScroll && toplevel) {
122
+ doScrollCheck();
123
+ }
124
+ }
125
+ }
126
+
127
+ function ready(callback, thisObj, doc) {
128
+ if (isReady) {
129
+ return callback.call(thisObj);
130
+ }
131
+
132
+ listeners.push([callback, thisObj]);
133
+
134
+ if (!readyBound) {
135
+ readyBound = true;
136
+ bindReady(doc || defaultDocument);
137
+ }
138
+ }
139
+
140
+ module.exports = ready;
141
+
142
+ module.exports.patchComponent = function (proto) {
143
+ if (proto && proto.ready) {
144
+ // Don't patch if the component has overwritten the ready method.
145
+ return;
146
+ }
147
+
148
+ (proto || require("../Component").prototype).ready = function (callback) {
149
+ var document = this.el.ownerDocument;
150
+ ready(callback, this, document);
151
+ };
152
+ };
@@ -0,0 +1,230 @@
1
+ var getComponentsContext =
2
+ require("../ComponentsContext").___getComponentsContext;
3
+ var componentsUtil = require("@internal/components-util");
4
+ var componentLookup = componentsUtil.___componentLookup;
5
+ var registry = require("@internal/components-registry");
6
+ var modernRenderer = require("../renderer");
7
+ var resolveComponentKey = modernRenderer.___resolveComponentKey;
8
+ var trackAsyncComponents = modernRenderer.___trackAsyncComponents;
9
+ var beginComponent = require("@internal/components-beginComponent");
10
+ var endComponent = require("@internal/components-endComponent");
11
+ var complain = "MARKO_DEBUG" && require("complain");
12
+
13
+ function createRendererFunc(templateRenderFunc, componentProps) {
14
+ var typeName = componentProps.t;
15
+ //var assignedId = componentProps.id;
16
+ var isSplit = componentProps.s === true;
17
+ var isImplicit = componentProps.i === true;
18
+
19
+ return function renderer(input, out, assignedId, renderingLogic) {
20
+ trackAsyncComponents(out);
21
+
22
+ var componentsContext = getComponentsContext(out);
23
+ var parentLegacyComponentDef = componentsContext.___legacyComponentDef;
24
+
25
+ if (isImplicit && parentLegacyComponentDef) {
26
+ templateRenderFunc(
27
+ input,
28
+ out,
29
+ parentLegacyComponentDef,
30
+ parentLegacyComponentDef.___component,
31
+ parentLegacyComponentDef.___component.___rawState,
32
+ out.global
33
+ );
34
+ return;
35
+ }
36
+
37
+ var widgetBody = input.renderBody;
38
+ var widgetState = input.widgetState;
39
+ var widgetConfig = input.widgetConfig;
40
+ var globalComponentsContext = componentsContext.___globalContext;
41
+ var component = globalComponentsContext.___rerenderComponent;
42
+
43
+ var isRerender = component !== undefined;
44
+ var id = assignedId;
45
+ var isExisting;
46
+ var parentComponentDef = componentsContext.___componentDef;
47
+ var ownerComponentDef = out.___assignedComponentDef;
48
+ var ownerComponentId = ownerComponentDef && ownerComponentDef.id;
49
+ var key = out.___assignedKey;
50
+ var customEvents = out.___assignedCustomEvents;
51
+
52
+ out.___assignedComponentDef = null;
53
+
54
+ if (component) {
55
+ id = component.id;
56
+ isExisting = true;
57
+ globalComponentsContext.___rerenderComponent = null;
58
+ } else {
59
+ if (key != null) {
60
+ id = id || resolveComponentKey(key.toString(), parentComponentDef);
61
+ } else if (parentComponentDef) {
62
+ id = parentComponentDef.___nextComponentId();
63
+ } else {
64
+ id = globalComponentsContext.___nextComponentId();
65
+ }
66
+ }
67
+
68
+ if (registry.___isServer && typeName) {
69
+ if (renderingLogic) delete renderingLogic.onRender;
70
+ component = registry.___createComponent(
71
+ renderingLogic,
72
+ id,
73
+ input,
74
+ out,
75
+ typeName,
76
+ customEvents,
77
+ ownerComponentId
78
+ );
79
+ if (isSplit || widgetState) {
80
+ component.input = null;
81
+ } else if (input.widgetProps) {
82
+ // eslint-disable-next-line no-constant-condition
83
+ if ("MARKO_DEBUG") {
84
+ complain(
85
+ "Possible performance impact: this widget does not contain state, but is marked as a stateful widget. This will result in additional hydration data serialized. In order for marko to identify this as a split widget, w-bind should use a widget.js with defineWidget rather than index.js with defineComponent.",
86
+ { location: typeName, level: 1 }
87
+ );
88
+ }
89
+ component.input = input.widgetProps;
90
+ }
91
+ } else {
92
+ if (!component) {
93
+ if (isRerender) {
94
+ // Look in in the DOM to see if a component with the same ID and type already exists.
95
+ component = componentLookup[id];
96
+ if (component && component.___type !== typeName) {
97
+ component = undefined;
98
+ }
99
+ }
100
+
101
+ if (component) {
102
+ isExisting = true;
103
+ } else {
104
+ isExisting = false;
105
+ // We need to create a new instance of the component
106
+ if (typeName) {
107
+ component = registry.___createComponent(typeName, id);
108
+ }
109
+ }
110
+ }
111
+ }
112
+
113
+ var isFakeComponent = false;
114
+
115
+ if (!component) {
116
+ isFakeComponent = true;
117
+ component = {
118
+ id: id,
119
+ ___keyedElements: {},
120
+ };
121
+ } else {
122
+ component.___updateQueued = true;
123
+
124
+ if (widgetState) {
125
+ component.state = widgetState;
126
+ }
127
+ }
128
+
129
+ component.widgetConfig = widgetConfig;
130
+ component.___widgetBody = widgetBody || component.___widgetBody;
131
+
132
+ var componentDef = beginComponent(
133
+ componentsContext,
134
+ component,
135
+ key,
136
+ ownerComponentDef,
137
+ isSplit,
138
+ isFakeComponent
139
+ );
140
+ componentsContext.___legacyComponentDef = componentDef;
141
+
142
+ // This is a hack, but we have to swap out the component instance stored with this node
143
+ var vComponentNode = out.___parent;
144
+
145
+ componentDef.___component = isFakeComponent ? null : component;
146
+ componentDef.___isExisting = isExisting;
147
+ componentDef.___isLegacy = true;
148
+
149
+ componentDef.t = function (typeName) {
150
+ if (typeName) {
151
+ if (registry.___isServer) {
152
+ var oldComponent = component;
153
+ if (renderingLogic) delete renderingLogic.onRender;
154
+ component = registry.___createComponent(
155
+ renderingLogic || {},
156
+ id,
157
+ input,
158
+ out,
159
+ typeName,
160
+ customEvents,
161
+ ownerComponentId
162
+ );
163
+ if (isSplit || widgetState) {
164
+ component.input = null;
165
+ } else if (input.widgetProps) {
166
+ // eslint-disable-next-line no-constant-condition
167
+ if ("MARKO_DEBUG") {
168
+ complain(
169
+ "Possible performance impact: this widget does not contain state, but is marked as a stateful widget. This will result in additional hydration data serialized. In order for marko to identify this as a split widget, w-bind should use a widget.js with defineWidget rather than index.js with defineComponent.",
170
+ { location: typeName, level: 1 }
171
+ );
172
+ }
173
+ component.input = input.widgetProps;
174
+ }
175
+ Object.assign(component, oldComponent);
176
+ beginComponent(
177
+ componentsContext,
178
+ component,
179
+ key,
180
+ ownerComponentDef,
181
+ isSplit,
182
+ false,
183
+ this
184
+ );
185
+ } else {
186
+ vComponentNode.___component = component = registry.___createComponent(
187
+ typeName,
188
+ component.id
189
+ );
190
+ }
191
+ this.___component = component;
192
+ }
193
+
194
+ return component;
195
+ };
196
+
197
+ if (!registry.___isServer) {
198
+ component.___legacyRender && component.___legacyRender();
199
+ }
200
+
201
+ // Render the template associated with the component using the final template
202
+ // data that we constructed
203
+ templateRenderFunc(
204
+ input,
205
+ out,
206
+ componentDef,
207
+ component,
208
+ component.___rawState,
209
+ out.global
210
+ );
211
+
212
+ if (customEvents && componentDef.___component) {
213
+ if (registry.___isServer) {
214
+ componentDef.___customEvents = customEvents;
215
+ componentDef.___scope = ownerComponentId;
216
+ } else {
217
+ componentDef.___component.___setCustomEvents(
218
+ customEvents,
219
+ ownerComponentId
220
+ );
221
+ }
222
+ }
223
+
224
+ endComponent(out, componentDef);
225
+ componentsContext.___componentDef = parentComponentDef;
226
+ componentsContext.___legacyComponentDef = parentLegacyComponentDef;
227
+ };
228
+ }
229
+
230
+ module.exports = createRendererFunc;
@@ -230,3 +230,7 @@ function createRendererFunc(
230
230
  }
231
231
 
232
232
  module.exports = createRendererFunc;
233
+
234
+ // exports used by the legacy renderer
235
+ createRendererFunc.___resolveComponentKey = resolveComponentKey;
236
+ createRendererFunc.___trackAsyncComponents = trackAsyncComponents;
@@ -54,7 +54,7 @@ function batchUpdate(func) {
54
54
  // batched update completes we invoke the "afterUpdate"
55
55
  // event listeners.
56
56
  var batch = {
57
- ___queue: null
57
+ ___queue: null,
58
58
  };
59
59
 
60
60
  batchStack.push(batch);
@@ -72,6 +72,6 @@ module.exports = function (target, getEl, afterInsert) {
72
72
  var el = getEl(this, referenceEl);
73
73
  insertAfter(el, referenceEl, referenceEl.parentNode);
74
74
  return afterInsert(this, referenceEl);
75
- }
75
+ },
76
76
  });
77
77
  };
@@ -67,13 +67,11 @@ module.exports = function dynamicTag(
67
67
 
68
68
  var renderer =
69
69
  tag._ ||
70
- tag.render ||
71
- (tag.renderer && tag.renderer.renderer) ||
72
- tag.renderer;
70
+ (tag.renderer ? tag.renderer.renderer || tag.renderer : tag.render);
73
71
 
74
72
  // eslint-disable-next-line no-constant-condition
75
73
  if ("MARKO_DEBUG") {
76
- if (tag.renderer && tag.renderer.renderer === renderer) {
74
+ if (tag.renderer && tag.renderer.renderer) {
77
75
  complain(
78
76
  "An object with a 'renderer' was passed to the dynamic tag, but renderer was another template."
79
77
  );
@@ -14,11 +14,15 @@ module.exports = function styleHelper(style) {
14
14
 
15
15
  if (type !== "string") {
16
16
  var styles = "";
17
+ var sep = "";
17
18
 
18
19
  if (Array.isArray(style)) {
19
20
  for (var i = 0, len = style.length; i < len; i++) {
20
21
  var next = styleHelper(style[i]);
21
- if (next) styles += next + (next[next.length - 1] !== ";" ? ";" : "");
22
+ if (next) {
23
+ styles += sep + next;
24
+ sep = ";";
25
+ }
22
26
  }
23
27
  } else if (type === "object") {
24
28
  for (var name in style) {
@@ -28,7 +32,8 @@ module.exports = function styleHelper(style) {
28
32
  value += "px";
29
33
  }
30
34
 
31
- styles += changeCase.___camelToDashCase(name) + ":" + value + ";";
35
+ styles += sep + changeCase.___camelToDashCase(name) + ":" + value;
36
+ sep = ";";
32
37
  }
33
38
  }
34
39
  }