marko 5.29.2 → 5.30.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }