marko 5.29.2 → 5.30.1
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +1 -1
- package/bin/markoc.js +18 -18
- package/dist/core-tags/core/await/renderer.js +5 -1
- package/dist/node_modules/@internal/components-beginComponent/index.js +13 -3
- package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +331 -0
- 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-entry/index-browser.js +2 -2
- package/dist/node_modules/@internal/components-entry/index.js +73 -45
- package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +74 -0
- package/dist/node_modules/@internal/components-entry-legacy/index.js +15 -0
- package/dist/node_modules/@internal/components-entry-legacy/package.json +11 -0
- package/dist/node_modules/@internal/components-registry/index-browser.js +70 -43
- package/dist/node_modules/@internal/components-registry/index.js +2 -2
- package/dist/node_modules/@internal/components-util/index-browser.js +17 -17
- package/dist/node_modules/@internal/components-util/index.js +18 -8
- package/dist/node_modules/@internal/create-readable/index-browser.js +1 -1
- package/dist/node_modules/@internal/create-readable/index.js +9 -9
- package/dist/node_modules/@internal/set-immediate/index-browser.js +1 -1
- package/dist/node_modules/@internal/set-immediate/index-worker.js +2 -2
- package/dist/node_modules/@internal/set-immediate/index.js +2 -2
- package/dist/runtime/RenderResult.js +3 -3
- package/dist/runtime/components/Component.js +146 -148
- package/dist/runtime/components/ComponentDef.js +41 -27
- package/dist/runtime/components/ComponentsContext.js +6 -6
- package/dist/runtime/components/GlobalComponentsContext.js +3 -3
- package/dist/runtime/components/KeySequence.js +3 -3
- package/dist/runtime/components/ServerComponent.js +13 -13
- package/dist/runtime/components/State.js +27 -27
- package/dist/runtime/components/attach-detach.js +7 -7
- package/dist/runtime/components/defineComponent.js +5 -5
- package/dist/runtime/components/dom-data.js +6 -6
- package/dist/runtime/components/event-delegation.js +10 -10
- package/dist/runtime/components/legacy/browser.json +9 -0
- package/dist/runtime/components/legacy/defineComponent-legacy.js +32 -0
- package/dist/runtime/components/legacy/defineRenderer-legacy.js +171 -0
- package/dist/runtime/components/legacy/defineWidget-legacy.js +1 -0
- package/dist/runtime/components/legacy/dependencies/html.js +3 -0
- package/dist/runtime/components/legacy/dependencies/index.js +178 -0
- package/dist/runtime/components/legacy/dependencies/vdom.js +3 -0
- package/dist/runtime/components/legacy/index.js +1 -0
- package/dist/runtime/components/legacy/jquery.js +51 -0
- package/dist/runtime/components/legacy/ready.js +152 -0
- package/dist/runtime/components/legacy/renderer-legacy.js +230 -0
- package/dist/runtime/components/renderer.js +30 -26
- package/dist/runtime/components/update-manager.js +10 -10
- package/dist/runtime/createOut.js +1 -1
- package/dist/runtime/dom-insert.js +5 -5
- package/dist/runtime/helpers/_change-case.js +2 -2
- package/dist/runtime/helpers/dynamic-tag.js +7 -9
- package/dist/runtime/helpers/style-value.js +7 -2
- package/dist/runtime/html/AsyncStream.js +20 -20
- package/dist/runtime/html/BufferedWriter.js +2 -2
- package/dist/runtime/html/helpers/_dynamic-attr.js +2 -2
- package/dist/runtime/html/helpers/attr.js +19 -6
- package/dist/runtime/html/helpers/attrs.js +7 -0
- package/dist/runtime/html/helpers/data-marko.js +2 -2
- package/dist/runtime/html/helpers/escape-quotes.js +1 -1
- package/dist/runtime/html/helpers/escape-xml.js +1 -1
- package/dist/runtime/html/helpers/merge-attrs.js +38 -7
- package/dist/runtime/html/index.js +2 -2
- package/dist/runtime/renderable.js +9 -6
- package/dist/runtime/vdom/AsyncVDOMBuilder.js +86 -86
- package/dist/runtime/vdom/VComponent.js +3 -3
- package/dist/runtime/vdom/VDocumentFragment.js +7 -7
- package/dist/runtime/vdom/VElement.js +61 -50
- package/dist/runtime/vdom/VFragment.js +8 -8
- package/dist/runtime/vdom/VNode.js +36 -36
- package/dist/runtime/vdom/VText.js +8 -8
- package/dist/runtime/vdom/helpers/attrs.js +24 -4
- package/dist/runtime/vdom/helpers/merge-attrs.js +16 -0
- package/dist/runtime/vdom/helpers/v-element.js +1 -1
- package/dist/runtime/vdom/helpers/v-text.js +1 -1
- package/dist/runtime/vdom/hot-reload.js +19 -19
- package/dist/runtime/vdom/index.js +2 -2
- package/dist/runtime/vdom/morphdom/fragment.js +5 -5
- package/dist/runtime/vdom/morphdom/helpers.js +5 -5
- package/dist/runtime/vdom/morphdom/index.js +56 -56
- package/dist/runtime/vdom/morphdom/specialElHandlers.js +7 -7
- package/dist/runtime/vdom/preserve-attrs.js +1 -1
- package/dist/runtime/vdom/vdom.js +14 -14
- package/docs/10-awesome-marko-features.md +1 -1
- package/docs/body-content.md +3 -3
- package/docs/class-components.md +6 -6
- package/docs/cloudflare-workers.md +3 -3
- package/docs/compiler.md +5 -5
- package/docs/express.md +2 -2
- package/docs/http.md +1 -1
- package/docs/koa.md +1 -1
- package/docs/lasso.md +1 -1
- package/docs/marko-vs-react.md +2 -2
- package/docs/rendering.md +6 -6
- package/docs/rollup.md +30 -30
- package/docs/troubleshooting-streaming.md +1 -1
- package/docs/typescript.md +1 -1
- package/docs/vite.md +3 -3
- package/docs/webpack.md +25 -25
- package/docs/why-is-marko-fast.md +2 -2
- package/index.d.ts +1 -0
- package/legacy-components-browser.marko +15 -0
- package/legacy-components.js +7 -0
- package/package.json +51 -45
- package/src/compiler/config.js +1 -1
- package/src/compiler/index.js +5 -5
- package/src/core-tags/core/__flush_here_and_after__.js +1 -1
- package/src/core-tags/core/await/AsyncValue.js +1 -1
- package/src/core-tags/core/await/renderer.js +8 -4
- package/src/core-tags/core/await/reorderer-renderer.js +1 -1
- package/src/node-require/browser-refresh.js +2 -2
- package/src/node-require/index.js +2 -2
- package/src/node_modules/@internal/components-beginComponent/index.js +16 -6
- package/src/node_modules/@internal/components-define-widget-legacy/index-browser.js +331 -0
- 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/node_modules/@internal/components-entry/index.js +65 -37
- 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/node_modules/@internal/components-registry/index-browser.js +33 -6
- package/src/node_modules/@internal/components-util/index.js +10 -0
- package/src/runtime/RenderResult.js +3 -3
- package/src/runtime/components/Component.js +16 -18
- package/src/runtime/components/ComponentDef.js +22 -8
- package/src/runtime/components/ComponentsContext.js +1 -1
- package/src/runtime/components/State.js +2 -2
- package/src/runtime/components/attach-detach.js +1 -1
- package/src/runtime/components/dom-data.js +1 -1
- package/src/runtime/components/legacy/browser.json +9 -0
- package/src/runtime/components/legacy/defineComponent-legacy.js +32 -0
- package/src/runtime/components/legacy/defineRenderer-legacy.js +171 -0
- package/src/runtime/components/legacy/defineWidget-legacy.js +1 -0
- package/src/runtime/components/legacy/dependencies/html.js +3 -0
- package/src/runtime/components/legacy/dependencies/index.js +178 -0
- package/src/runtime/components/legacy/dependencies/vdom.js +3 -0
- package/src/runtime/components/legacy/index.js +1 -0
- package/src/runtime/components/legacy/jquery.js +51 -0
- package/src/runtime/components/legacy/ready.js +152 -0
- package/src/runtime/components/legacy/renderer-legacy.js +230 -0
- package/src/runtime/components/renderer.js +4 -0
- package/src/runtime/components/update-manager.js +1 -1
- package/src/runtime/dom-insert.js +1 -1
- package/src/runtime/helpers/dynamic-tag.js +2 -4
- package/src/runtime/helpers/style-value.js +7 -2
- package/src/runtime/html/AsyncStream.js +5 -5
- package/src/runtime/html/BufferedWriter.js +1 -1
- package/src/runtime/html/StringWriter.js +1 -1
- package/src/runtime/html/helpers/attr.js +15 -2
- package/src/runtime/html/helpers/attrs.js +7 -0
- package/src/runtime/html/helpers/merge-attrs.js +38 -7
- package/src/runtime/html/hot-reload.js +1 -1
- package/src/runtime/html/index.js +2 -2
- package/src/runtime/renderable.js +5 -2
- package/src/runtime/vdom/AsyncVDOMBuilder.js +2 -2
- package/src/runtime/vdom/VComponent.js +1 -1
- package/src/runtime/vdom/VDocumentFragment.js +1 -1
- package/src/runtime/vdom/VElement.js +17 -6
- package/src/runtime/vdom/VFragment.js +1 -1
- package/src/runtime/vdom/VNode.js +1 -1
- package/src/runtime/vdom/VText.js +1 -1
- package/src/runtime/vdom/helpers/attrs.js +26 -6
- package/src/runtime/vdom/helpers/merge-attrs.js +16 -0
- package/src/runtime/vdom/hot-reload.js +1 -1
- package/src/runtime/vdom/index.js +2 -2
- package/src/runtime/vdom/morphdom/fragment.js +1 -1
- package/src/runtime/vdom/morphdom/specialElHandlers.js +1 -1
- package/src/taglib/index.js +1 -1
- 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
|
+
};
|
@@ -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
|
79
|
+
var needsState;
|
75
80
|
var serializedProps;
|
76
|
-
var
|
81
|
+
var renderBody;
|
77
82
|
|
78
|
-
if (
|
79
|
-
|
80
|
-
|
81
|
-
|
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 (
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|
+
};
|