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,331 @@
1
+ "use strict";
2
+ /* jshint newcap:false */
3
+
4
+ var BaseState;
5
+ var BaseComponent;
6
+ var inherit;
7
+ var loader = require("@internal/loader");
8
+ var registry = require("@internal/components-registry");
9
+ var jQuery = require("../../../runtime/components/legacy/jquery");
10
+ var ready = require("../../../runtime/components/legacy/ready");
11
+
12
+ var complain = "MARKO_DEBUG" && require("complain");
13
+ var stateToJSONDef = {
14
+ enumerable: false,
15
+ value: function returnSelf() {
16
+ return this;
17
+ }
18
+ };
19
+ function noop() { }
20
+
21
+ module.exports = function defineWidget(def, renderer) {
22
+ def = def.Widget || def;
23
+
24
+ if (def.___isComponent) {
25
+ return def;
26
+ }
27
+
28
+ var ComponentClass = function () { };
29
+ var proto;
30
+ var legacyInit;
31
+
32
+ if (typeof def === "function") {
33
+ proto = def.prototype;
34
+ legacyInit = def;
35
+ } else if (typeof def === "object") {
36
+ proto = def;
37
+ legacyInit = def.init;
38
+ } else {
39
+ throw TypeError();
40
+ }
41
+
42
+ ComponentClass.prototype = proto;
43
+
44
+ // We don't use the constructor provided by the user
45
+ // since we don't invoke their constructor until
46
+ // we have had a chance to do our own initialization.
47
+ // Instead, we store their constructor in the "initComponent"
48
+ // property and that method gets called later inside
49
+ // init-components-browser.js
50
+ function Component(id, doc) {
51
+ BaseComponent.call(this, id, doc);
52
+ }
53
+
54
+ if (!proto.___isComponent) {
55
+ // Inherit from Component if they didn't already
56
+ ComponentClass.prototype = Object.create(BaseComponent.prototype);
57
+ for (var propName in proto) {
58
+ if (proto.hasOwnProperty(propName)) {
59
+ ComponentClass.prototype[propName] = proto[propName];
60
+ }
61
+ }
62
+ }
63
+
64
+ // The same prototype will be used by our constructor after
65
+ // we he have set up the prototype chain using the inherit function
66
+ proto = Component.prototype = ComponentClass.prototype;
67
+ proto.___isLegacy = true;
68
+
69
+ proto.constructor = def.constructor = Component;
70
+
71
+ Object.defineProperty(proto, "state", {
72
+ get: function () {
73
+ var raw = this.___state && this.___state.___raw;
74
+
75
+ if (raw && !raw.toJSON) {
76
+ Object.defineProperty(this.___state.___raw, "toJSON", stateToJSONDef);
77
+ }
78
+
79
+ return raw;
80
+ },
81
+ set: function (newState) {
82
+ newState = newState || {};
83
+ // eslint-disable-next-line no-constant-condition
84
+ if ("MARKO_DEBUG") {
85
+ if (
86
+ Object.keys(newState).sort().join("") !==
87
+ Object.keys((this.___state && this.___state.___raw) || {})
88
+ .sort()
89
+ .join("")
90
+ )
91
+ complain(
92
+ "'widget.state = newState' has changed from merging the newState to replacing the old state."
93
+ );
94
+ }
95
+
96
+ this.setState(newState);
97
+ }
98
+ });
99
+
100
+ Object.defineProperty(proto, "__document", {
101
+ get: function () {
102
+ // eslint-disable-next-line no-constant-condition
103
+ if ("MARKO_DEBUG") {
104
+ complain("__document is deprecated");
105
+ }
106
+ return this.___host;
107
+ }
108
+ });
109
+
110
+ Object.defineProperty(proto, "el", {
111
+ get: function () {
112
+ // eslint-disable-next-line no-constant-condition
113
+ if ("MARKO_DEBUG") {
114
+ if (
115
+ this.___currentLegacyBindEl !==
116
+ (this.___rootNode && this.___rootNode.firstChild)
117
+ ) {
118
+ complain(
119
+ "this.el no longer returns the `w-bind` element and instead returns the first node in the template. Assign a key to the w-bind element and use getEl(key) instead."
120
+ );
121
+ }
122
+ }
123
+
124
+ return this.___currentLegacyBindEl;
125
+ }
126
+ });
127
+
128
+ // get legacy methods
129
+
130
+ proto.___legacyOnRender = proto.onRender;
131
+ Object.defineProperty(proto, "onRender", {
132
+ get: noop,
133
+ set: function (v) {
134
+ proto.___legacyOnRender = v;
135
+ }
136
+ });
137
+
138
+ proto.___legacyOnUpdate = proto.onUpdate;
139
+ Object.defineProperty(proto, "onUpdate", {
140
+ get: function () {
141
+ return modernMountOrUpdate;
142
+ },
143
+ set: function (v) {
144
+ proto.___legacyOnUpdate = v;
145
+ }
146
+ });
147
+
148
+ proto.___legacyOnDestroy = proto.onDestroy;
149
+ Object.defineProperty(proto, "onDestroy", {
150
+ get: function () {
151
+ return modernOnDestory;
152
+ },
153
+ set: function (v) {
154
+ proto.___legacyOnDestroy = v;
155
+ }
156
+ });
157
+
158
+ proto.getWidget = proto.getComponent;
159
+ proto.getWidgets = proto.getComponents;
160
+ proto.onMount = modernMountOrUpdate;
161
+
162
+ if (legacyInit) {
163
+ proto.___legacyInit = legacyInit;
164
+ }
165
+
166
+ // convert legacy to modern
167
+ proto.___modernUpdate = proto.update;
168
+ proto.update = function () {
169
+ if (this.___destroyed) {
170
+ // eslint-disable-next-line no-constant-condition
171
+ if ("MARKO_DEBUG") {
172
+ complain(
173
+ "widget was updated after it was destroyed, if this widget is migrated to a modern component this will become a noop.",
174
+ {
175
+ location: this.___type
176
+ }
177
+ );
178
+ }
179
+
180
+ this.destroy = modernOnDestory;
181
+ this.___destroyed = false;
182
+ }
183
+ this.___legacyExplicitUpdate = true;
184
+ if (this.___currentLegacyBindEl) {
185
+ this.onBeforeUpdate && this.onBeforeUpdate();
186
+ }
187
+
188
+ this.___modernUpdate();
189
+ this.___legacyExplicitUpdate = false;
190
+ };
191
+
192
+ function modernMountOrUpdate() {
193
+ var self = this;
194
+ var el = this.___keyedElements["@_wbind"];
195
+ var prevEl = this.___currentLegacyBindEl;
196
+
197
+ if (prevEl !== el) {
198
+ this.___currentLegacyBindEl = el;
199
+
200
+ if (prevEl) {
201
+ this.onBeforeDestroy && this.onBeforeDestroy();
202
+ this.___legacyOnDestroy && this.___legacyOnDestroy();
203
+ this.___legacyRender = undefined;
204
+ this.removeAllListeners();
205
+ }
206
+
207
+ if (el) {
208
+ this.___legacyInit && this.___legacyInit(this.widgetConfig || {});
209
+ this.___legacyOnRender && this.___legacyOnRender({ firstRender: true });
210
+ this.___legacyRender = legacyRender;
211
+
212
+ // eslint-disable-next-line no-constant-condition
213
+ if ("MARKO_DEBUG") {
214
+ Object.defineProperty(el, "__widget", {
215
+ configurable: true,
216
+ get: function () {
217
+ complain("__widget is deprecated");
218
+ return self;
219
+ }
220
+ });
221
+ } else {
222
+ el.__widget = this;
223
+ }
224
+ }
225
+ } else if (el) {
226
+ if (prevEl) {
227
+ this.___legacyOnUpdate && this.___legacyOnUpdate();
228
+ }
229
+
230
+ if (this.___didUpdate) {
231
+ this.___legacyOnRender &&
232
+ this.___legacyOnRender({ firstRender: false });
233
+ }
234
+ }
235
+
236
+ this.___widgetProps = this.___input;
237
+ this.___input = null;
238
+ this.___didUpdate = false;
239
+ }
240
+
241
+ function legacyRender() {
242
+ if (!this.___legacyExplicitUpdate) {
243
+ this.onBeforeUpdate && this.onBeforeUpdate();
244
+ }
245
+
246
+ this.___didUpdate = true;
247
+ }
248
+
249
+ function modernOnDestory() {
250
+ if (this.___currentLegacyBindEl) {
251
+ this.onBeforeDestroy && this.onBeforeDestroy();
252
+ this.___legacyOnDestroy && this.___legacyOnDestroy();
253
+ this.___currentLegacyBindEl = null;
254
+ }
255
+ }
256
+
257
+ // Set a flag on the constructor function to make it clear this is
258
+ // a component so that we can short-circuit this work later
259
+ Component.___isComponent = true;
260
+
261
+ function State() {
262
+ BaseState.apply(this, arguments);
263
+ }
264
+ inherit(State, BaseState);
265
+ proto.___State = State;
266
+
267
+ jQuery.patchComponent(
268
+ window.$,
269
+ proto,
270
+ true /* don't throw error until used if `$` is missing*/
271
+ );
272
+
273
+ ready.patchComponent(proto);
274
+
275
+ if (!renderer) {
276
+ renderer = ComponentClass.renderer || ComponentClass.prototype.renderer;
277
+ if (renderer) {
278
+ // Legacy support
279
+ var createOut = renderer.createOut;
280
+ if (typeof renderer !== "function") {
281
+ var rendererObject = renderer;
282
+ renderer = function (input, out) {
283
+ var rendererFunc = rendererObject.renderer || rendererObject.render;
284
+ rendererFunc(input, out);
285
+ };
286
+ renderer.createOut = createOut;
287
+ }
288
+
289
+ renderer.render = function (input) {
290
+ var out = createOut();
291
+ renderer(input, out);
292
+ return out.end();
293
+ };
294
+ }
295
+ }
296
+
297
+ if (renderer) {
298
+ // Add the rendering related methods as statics on the
299
+ // new component constructor function
300
+ Component.renderer = proto.___renderer = renderer;
301
+ Component.render = renderer.render;
302
+ Component.renderSync = renderer.renderSync;
303
+ }
304
+
305
+ // eslint-disable-next-line no-constant-condition
306
+ if ("MARKO_DEBUG") {
307
+ Object.defineProperty(Component, "_isWidget", {
308
+ get: function () {
309
+ complain("_isWidget is deprecated");
310
+ return true;
311
+ }
312
+ });
313
+ } else {
314
+ Component._isWidget = true;
315
+ }
316
+
317
+ var template = def.template;
318
+ if (template) {
319
+ if (typeof template === "string") {
320
+ template = loader(template);
321
+ }
322
+
323
+ registry.r(template.___typeName, function () { return Component });
324
+ }
325
+
326
+ return Component;
327
+ };
328
+
329
+ BaseState = require("../../../runtime/components/State");
330
+ BaseComponent = require("../../../runtime/components/Component");
331
+ inherit = require("raptor-util/inherit");
@@ -0,0 +1,18 @@
1
+ module.exports = function defineWidget(def, renderer) {
2
+ if (def.___isComponent) {
3
+ return def;
4
+ }
5
+
6
+ if (renderer) {
7
+ return {
8
+ ___isComponent: true,
9
+ _isWidget: true,
10
+ renderer: renderer,
11
+ render: renderer.render,
12
+ renderSync: renderer.renderSync,
13
+ template: renderer.template
14
+ };
15
+ } else {
16
+ return { ___isComponent: true, _isWidget: true };
17
+ }
18
+ };
@@ -0,0 +1,11 @@
1
+ {
2
+ "main": "./index.js",
3
+ "browser": "./index-browser.js",
4
+ "exports": {
5
+ ".": {
6
+ "worker": "./index.js",
7
+ "browser": "./index-browser.js",
8
+ "default": "./index.js"
9
+ }
10
+ }
11
+ }
@@ -7,6 +7,8 @@ var DEFAULT_RUNTIME_ID = "M";
7
7
 
8
8
  var FLAG_WILL_RERENDER_IN_BROWSER = 1;
9
9
  var FLAG_HAS_RENDER_BODY = 2;
10
+ var FLAG_IS_LEGACY = 4;
11
+ var FLAG_OLD_HYDRATE_NO_CREATE = 8;
10
12
 
11
13
  function safeJSONReplacer(match) {
12
14
  if (match === "</") {
@@ -65,66 +67,92 @@ function addComponentsFromContext(componentsContext, componentsToHydrate) {
65
67
  var id = componentDef.id;
66
68
  var component = componentDef.___component;
67
69
  var flags = componentDef.___flags;
70
+ var isLegacy = componentDef.___isLegacy;
71
+
72
+ var state = component.state;
68
73
  var input = component.input || 0;
69
74
  var typeName = component.typeName;
70
75
  var customEvents = component.___customEvents;
71
76
  var scope = component.___scope;
72
77
  var bubblingDomEvents = component.___bubblingDomEvents;
73
78
 
74
- var state;
79
+ var needsState;
75
80
  var serializedProps;
76
- var undefinedPropNames;
81
+ var renderBody;
77
82
 
78
- if (flags & FLAG_WILL_RERENDER_IN_BROWSER) {
79
- if (typeof input.renderBody === "function") {
80
- flags |= FLAG_HAS_RENDER_BODY;
81
- input.renderBody = undefined;
83
+ if (isLegacy) {
84
+ flags |= FLAG_IS_LEGACY;
85
+ renderBody = component.___widgetBody;
86
+
87
+ if (component.widgetConfig && isNotEmpty(component.widgetConfig)) {
88
+ serializedProps = component.widgetConfig;
82
89
  }
90
+
91
+ needsState = true;
83
92
  } else {
84
- if (component.state) {
85
- state = component.state;
86
- // Update state properties with an `undefined` value to have a `null`
87
- // value so that the property name will be serialized down to the browser.
88
- // This ensures that we add the proper getter/setter for the state property.
89
- const stateKeys = Object.keys(state);
90
- for (let i = stateKeys.length; i--; ) {
91
- const stateKey = stateKeys[i];
92
-
93
- if (state[stateKey] === undefined) {
94
- if (undefinedPropNames) {
95
- undefinedPropNames.push(stateKey);
96
- } else {
97
- undefinedPropNames = [stateKey];
98
- }
99
- }
93
+ if (input && input.renderBody) {
94
+ renderBody = input.renderBody;
95
+ input.renderBody = undefined;
96
+ }
97
+
98
+ if (
99
+ !(flags & FLAG_WILL_RERENDER_IN_BROWSER) ||
100
+ flags & FLAG_OLD_HYDRATE_NO_CREATE
101
+ ) {
102
+ component.___state = undefined; // We don't use `delete` to avoid V8 deoptimization
103
+ component.___input = undefined; // We don't use `delete` to avoid V8 deoptimization
104
+ component.typeName = undefined;
105
+ component.id = undefined;
106
+ component.___customEvents = undefined;
107
+ component.___scope = undefined;
108
+ component.___bubblingDomEvents = undefined;
109
+ component.___bubblingDomEventsExtraArgsCount = undefined;
110
+ component.___updatedInput = undefined;
111
+ component.___updateQueued = undefined;
112
+
113
+ needsState = true;
114
+
115
+ if (isNotEmpty(component)) {
116
+ serializedProps = component;
100
117
  }
101
118
  }
119
+ }
102
120
 
103
- component.___state = undefined; // We don't use `delete` to avoid V8 deoptimization
104
- component.___input = undefined; // We don't use `delete` to avoid V8 deoptimization
105
- component.typeName = undefined;
106
- component.id = undefined;
107
- component.___customEvents = undefined;
108
- component.___scope = undefined;
109
- component.___bubblingDomEvents = undefined;
110
- component.___bubblingDomEventsExtraArgsCount = undefined;
111
- component.___updatedInput = undefined;
112
- component.___updateQueued = undefined;
113
-
114
- if (isNotEmpty(component)) {
115
- serializedProps = component;
121
+ var undefinedPropNames = undefined;
122
+
123
+ if (needsState && state) {
124
+ // Update state properties with an `undefined` value to have a `null`
125
+ // value so that the property name will be serialized down to the browser.
126
+ // This ensures that we add the proper getter/setter for the state property.
127
+ const stateKeys = Object.keys(state);
128
+ for (let i = stateKeys.length; i--; ) {
129
+ const stateKey = stateKeys[i];
130
+
131
+ if (state[stateKey] === undefined) {
132
+ if (undefinedPropNames) {
133
+ undefinedPropNames.push(stateKey);
134
+ } else {
135
+ undefinedPropNames = [stateKey];
136
+ }
137
+ }
116
138
  }
117
139
  }
118
140
 
141
+ if (typeof renderBody === "function") {
142
+ flags |= FLAG_HAS_RENDER_BODY;
143
+ renderBody = undefined;
144
+ }
145
+
119
146
  var extra = {
120
147
  b: bubblingDomEvents,
121
148
  d: componentDef.___domEvents,
122
149
  e: customEvents,
123
150
  f: flags || undefined,
124
151
  p: customEvents && scope, // Only serialize scope if we need to attach custom events
125
- s: state,
152
+ s: needsState && state,
126
153
  u: undefinedPropNames,
127
- w: serializedProps
154
+ w: serializedProps,
155
+ r: renderBody
128
156
  };
129
157
 
130
158
  var parts = [id, typeName];
@@ -0,0 +1,74 @@
1
+ var Component = require("../../../runtime/components/Component");
2
+ var loader = require("@internal/loader");
3
+ var getComponentForEl =
4
+ require("@internal/components-util").___getComponentForEl;
5
+
6
+ var complain = "MARKO_DEBUG" && require("complain");
7
+
8
+ // expose legacy
9
+ require("@internal/components-registry").___legacy = exports;
10
+ exports.load = function (typeName) {
11
+ return exports.defineWidget(loader(typeName));
12
+ };
13
+
14
+ // legacy api
15
+ exports.defineComponent = require("../../../runtime/components/legacy/defineComponent-legacy");
16
+ exports.defineWidget = require("@internal/components-define-widget-legacy");
17
+ exports.defineRenderer = require("../../../runtime/components/legacy/defineRenderer-legacy");
18
+ exports.makeRenderable = exports.renderable = require("../../../runtime/renderable");
19
+
20
+ // browser only
21
+ var Widget = (exports.Widget = Component);
22
+ exports.getWidgetForEl = exports.get = function (elOrId) {
23
+ var el = elOrId;
24
+
25
+ if (typeof elOrId === "string") {
26
+ el = document.getElementById(elOrId);
27
+ }
28
+
29
+ if (el && el.__widget) {
30
+ return el.__widget;
31
+ }
32
+
33
+ return getComponentForEl(el);
34
+ };
35
+ exports.initWidgets =
36
+ require("@internal/components-registry").___initServerRendered;
37
+
38
+ // monkey patch Widget
39
+ if (Widget) {
40
+ var WidgetProto = Widget.prototype;
41
+ WidgetProto.setProps = function (newInput) {
42
+ this.___isReceivingNewInput = true;
43
+ this.___setInput(newInput);
44
+ };
45
+ WidgetProto.rerender = function (newInput) {
46
+ if (newInput) {
47
+ this.setProps(newInput);
48
+ }
49
+
50
+ this.forceUpdate();
51
+ this.update();
52
+ };
53
+ }
54
+
55
+ var RenderResult = require("../../../runtime/RenderResult");
56
+
57
+ RenderResult.prototype.getWidget = function () {
58
+ // eslint-disable-next-line no-constant-condition
59
+ if ("MARKO_DEBUG") {
60
+ complain("getWidget is deprecated. use getComponent instead.");
61
+ }
62
+ return this.getWidgets()[0];
63
+ };
64
+ RenderResult.prototype.getWidgets = function () {
65
+ // eslint-disable-next-line no-constant-condition
66
+ if ("MARKO_DEBUG") {
67
+ complain("getWidgets is deprecated. use getComponents instead.");
68
+ }
69
+ return RenderResult.prototype.getComponents
70
+ .apply(this, arguments)
71
+ .filter(function (component) {
72
+ return component.___isLegacy;
73
+ });
74
+ };
@@ -0,0 +1,15 @@
1
+ var modernMarko = require("@internal/components-entry");
2
+
3
+ // legacy api
4
+ exports.defineComponent = require("../../../runtime/components/legacy/defineComponent-legacy");
5
+ exports.defineWidget = require("@internal/components-define-widget-legacy");
6
+ exports.defineRenderer = require("../../../runtime/components/legacy/defineRenderer-legacy");
7
+ exports.makeRenderable = exports.renderable = require("../../../runtime/renderable");
8
+
9
+ // server only
10
+ exports.writeInitWidgetsCode = modernMarko.writeInitComponentsCode;
11
+ exports.getRenderedWidgets = exports.getRenderedWidgetIds =
12
+ modernMarko.getRenderedComponents;
13
+ exports.getInitWidgetsCode = function (out) {
14
+ return modernMarko.___getInitComponentsCode(out);
15
+ };
@@ -0,0 +1,11 @@
1
+ {
2
+ "main": "./index.js",
3
+ "browser": "./index-browser.js",
4
+ "exports": {
5
+ ".": {
6
+ "worker": "./index.js",
7
+ "browser": "./index-browser.js",
8
+ "default": "./index.js"
9
+ }
10
+ }
11
+ }