marko 5.33.3 → 5.33.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,278 @@
1
+ const { ___componentLookup } = require("@internal/components-util");
2
+ const {
3
+ ___getComponentsContext,
4
+ } = require("../../components/ComponentsContext");
5
+ const defineComponent = require("../../components/defineComponent");
6
+ const { r: registerComponent } = require("../../components/registry");
7
+ const createRenderer = require("../../components/renderer");
8
+ const defaultCreateOut = require("../../createOut");
9
+ const morphdom = require("../../vdom/morphdom");
10
+ const { ___createFragmentNode } = require("../../vdom/morphdom/fragment");
11
+ const dynamicTag = require("../dynamic-tag");
12
+
13
+ exports.p = function ({
14
+ prepare,
15
+ runEffects,
16
+ patchConditionals,
17
+ createScopeWithRenderer,
18
+ queueEffect,
19
+ scopeLookup,
20
+ getRegisteredWithScope,
21
+ register,
22
+ }) {
23
+ dynamicTag.___runtimeCompat = function tagsToVdom(
24
+ tagsRenderer,
25
+ renderBody,
26
+ args,
27
+ ) {
28
+ if (
29
+ tagsRenderer
30
+ ? tagsRenderer.___clone === undefined
31
+ : !Array.isArray(renderBody) && renderBody?.___clone === undefined
32
+ )
33
+ return tagsRenderer;
34
+
35
+ return (input, out) =>
36
+ TagsCompat(
37
+ { i: args ? args : input, r: tagsRenderer || renderBody },
38
+ out,
39
+ );
40
+ };
41
+
42
+ const TagsCompatId = "tags-compat";
43
+ const TagsCompat = createRenderer(
44
+ function (_, out, componentDef, component) {
45
+ let existing = false;
46
+ const isHydrate =
47
+ ___getComponentsContext(out).___globalContext.___isHydrate;
48
+ const input = Array.isArray(_.i) ? _.i : [_.i];
49
+ const tagsRenderer = resolveRegistered(_.r);
50
+ const args = tagsRenderer.___args;
51
+
52
+ component.effects = prepare(() => {
53
+ if (isHydrate) {
54
+ const scopeId = out.global.componentIdToScopeId[component.id];
55
+ component.scope = scopeLookup[scopeId];
56
+ }
57
+ if (!component.scope) {
58
+ component.scope = createScopeWithRenderer(
59
+ tagsRenderer /* out.global as context */,
60
+ );
61
+ for (const signal of tagsRenderer.___closureSignals) {
62
+ signal(component.scope, true);
63
+ }
64
+ } else {
65
+ args && args(component.scope, input, 1);
66
+ existing = true;
67
+ }
68
+ args && args(component.scope, input);
69
+ });
70
+ out.bf(out.___assignedKey, component, existing);
71
+ if (!existing) {
72
+ out.node({
73
+ ___actualize: () =>
74
+ component.scope.___startNode === component.scope.___endNode
75
+ ? component.scope.___startNode
76
+ : component.scope.___startNode.parentNode,
77
+ });
78
+ }
79
+ out.ef();
80
+ },
81
+ // eslint-disable-next-line no-constant-condition
82
+ "MARKO_DEBUG"
83
+ ? {
84
+ t: TagsCompatId,
85
+ d: true,
86
+ }
87
+ : {
88
+ t: TagsCompatId,
89
+ },
90
+ {},
91
+ );
92
+
93
+ registerComponent(TagsCompatId, () => ({
94
+ _: TagsCompat,
95
+ Component: defineComponent(
96
+ {
97
+ onMount() {
98
+ runEffects(this.effects);
99
+ },
100
+ onUpdate() {
101
+ runEffects(this.effects);
102
+ },
103
+ },
104
+ TagsCompat,
105
+ ),
106
+ }));
107
+
108
+ // (
109
+ // nodeAccessor: Accessor,
110
+ // dynamicTagAttrs?: IntersectionSignal,
111
+ // intersection?: IntersectionSignal,
112
+ // valueWithIntersection?: ValueSignal
113
+ // )
114
+
115
+ const rendererCache = new WeakMap();
116
+
117
+ patchConditionals((conditional) => (...args) => {
118
+ const signal = conditional(...args);
119
+ const hasAttrs = args.length > 1;
120
+ return (scope, renderer, clean) => {
121
+ return signal(scope, create5to6Renderer(renderer, hasAttrs), clean);
122
+ };
123
+ });
124
+
125
+ function create5to6Renderer(renderer, hasAttrs) {
126
+ let newRenderer = renderer;
127
+ if (renderer) {
128
+ const rendererFromAnywhere =
129
+ renderer._ ||
130
+ renderer.render ||
131
+ (renderer.renderer && renderer.renderer.renderer) ||
132
+ renderer.renderer;
133
+ const isMarko6 = rendererFromAnywhere
134
+ ? rendererFromAnywhere.___clone
135
+ : renderer.___clone;
136
+
137
+ if (typeof renderer !== "string" && !isMarko6) {
138
+ newRenderer = rendererCache.get(renderer);
139
+ if (!newRenderer) {
140
+ const { Component } = renderer;
141
+ if (Component) {
142
+ const setCustomEvents = Component.prototype.___setCustomEvents;
143
+ Component.prototype.___setCustomEvents = function (
144
+ customEvents,
145
+ scopeId,
146
+ ) {
147
+ for (const customEvent of customEvents) {
148
+ customEvent[1] = resolveRegistered(customEvent[1]);
149
+ }
150
+
151
+ setCustomEvents.call(this, customEvents, scopeId);
152
+ };
153
+ }
154
+ newRenderer = {
155
+ ___setup(scope) {
156
+ if (!hasAttrs) {
157
+ renderAndMorph(scope, rendererFromAnywhere, renderer, {});
158
+ }
159
+ },
160
+ ___clone() {
161
+ const realFragment = document.createDocumentFragment();
162
+ ___createFragmentNode(null, null, realFragment);
163
+ return realFragment;
164
+ },
165
+ ___hasUserEffects: 1,
166
+ ___args(scope, input, clean) {
167
+ if (clean) return;
168
+ renderAndMorph(scope, rendererFromAnywhere, renderer, input);
169
+ },
170
+ };
171
+ rendererCache.set(renderer, newRenderer);
172
+ }
173
+ }
174
+ }
175
+ return newRenderer;
176
+ }
177
+
178
+ register("@marko/tags-compat-5-to-6", create5to6Renderer);
179
+
180
+ function renderAndMorph(scope, renderer, renderBody, input) {
181
+ const out = defaultCreateOut();
182
+ let rootNode = scope.___startNode.fragment;
183
+ if (!rootNode) {
184
+ const component = (scope.marko5Component = ___componentLookup[scope.m5c]);
185
+ rootNode = component.___rootNode;
186
+ scope.___startNode = rootNode.startNode;
187
+ scope.___endNode = rootNode.endNode;
188
+ }
189
+ const host = scope.___startNode;
190
+ const existingComponent = scope.marko5Component;
191
+ const componentsContext = ___getComponentsContext(out);
192
+ const globalComponentsContext = componentsContext.___globalContext;
193
+ let customEvents;
194
+ globalComponentsContext.___rerenderComponent = existingComponent;
195
+ out.sync();
196
+ if (renderer) {
197
+ const [rawInput] = input;
198
+ const normalizedInput = {};
199
+
200
+ for (const key in rawInput) {
201
+ let value = rawInput[key];
202
+ if (key.startsWith("on")) {
203
+ const c = key[2];
204
+ customEvents = customEvents || {};
205
+ customEvents[(c === "-" ? "" : c.toLowerCase()) + key.slice(3)] = [
206
+ value,
207
+ ];
208
+ } else {
209
+ normalizedInput[key] = rawInput[key];
210
+ }
211
+ }
212
+
213
+ renderer(normalizedInput, out);
214
+ } else {
215
+ RenderBodyComponent({ renderBody, args: input }, out);
216
+ }
217
+
218
+ queueEffect(scope, () => {
219
+ const targetNode = out.___getOutput().___firstChild;
220
+ morphdom(rootNode, targetNode, host, componentsContext);
221
+ const componentDefs = componentsContext.___initComponents(
222
+ getRootNode(host),
223
+ );
224
+ const component = componentDefs[0].___component;
225
+ component.___rootNode = rootNode;
226
+ component.___input = input[0];
227
+ component.___customEvents = customEvents;
228
+ scope.marko5Component = component;
229
+ });
230
+ }
231
+
232
+ function getRootNode(el) {
233
+ var cur = el;
234
+ while (cur.parentNode) cur = cur.parentNode;
235
+ return cur;
236
+ }
237
+
238
+ const RenderBodyComponentId = "renderbody-renderer";
239
+ const RenderBodyComponent = createRenderer(
240
+ function (input, out, _componentDef) {
241
+ dynamicTag(
242
+ out,
243
+ input.renderBody,
244
+ null,
245
+ null,
246
+ input.args,
247
+ null,
248
+ _componentDef,
249
+ "0",
250
+ );
251
+ },
252
+ // eslint-disable-next-line no-constant-condition
253
+ "MARKO_DEBUG"
254
+ ? {
255
+ t: RenderBodyComponentId,
256
+ i: true,
257
+ d: true,
258
+ }
259
+ : {
260
+ t: RenderBodyComponentId,
261
+ i: true,
262
+ },
263
+ {},
264
+ );
265
+
266
+ registerComponent(RenderBodyComponentId, () => ({
267
+ _: RenderBodyComponent,
268
+ Component: defineComponent({}, RenderBodyComponent),
269
+ }));
270
+
271
+ function resolveRegistered(renderer) {
272
+ if (!Array.isArray(renderer)) return renderer;
273
+
274
+ const [registerId, scopeId] = renderer;
275
+ const scope = scopeLookup[scopeId];
276
+ return getRegisteredWithScope(registerId, scope);
277
+ }
278
+ };
@@ -0,0 +1,171 @@
1
+ const initComponentsTag = require("../../../core-tags/components/init-components-tag");
2
+ const {
3
+ ___getComponentsContext,
4
+ } = require("../../components/ComponentsContext");
5
+ const createRenderer = require("../../components/renderer");
6
+ const defaultCreateOut = require("../../createOut");
7
+ const dynamicTag5 = require("../dynamic-tag");
8
+
9
+ exports.p = function (tagsAPI) {
10
+ const {
11
+ patchDynamicTag,
12
+ createRenderFn,
13
+ fork,
14
+ write,
15
+ makeSerializable,
16
+ register,
17
+ writeScope,
18
+ nextScopeId,
19
+ getRegistryInfo,
20
+ } = tagsAPI;
21
+ const FN_TO_JSON = function () {
22
+ // TODO: this should instead return an object that contains getRegistryInfo
23
+ // then in the dom-compat, handle that object to lookup the function in the registry
24
+ // (we also need to do this for events)
25
+ return getRegistryInfo(this);
26
+ };
27
+
28
+ const isMarko6 = (fn) => !!fn.___isTagsAPI;
29
+ const isMarko5 = (fn) => !fn.___isTagsAPI;
30
+
31
+ dynamicTag5.___runtimeCompat = function tagsToVdom(
32
+ tagsRenderer,
33
+ renderBody,
34
+ args,
35
+ ) {
36
+ if (tagsRenderer ? isMarko5(tagsRenderer) : isMarko5(renderBody))
37
+ return tagsRenderer;
38
+
39
+ if (!tagsRenderer && renderBody) {
40
+ renderBody.toJSON = FN_TO_JSON;
41
+ }
42
+
43
+ return (input, out) =>
44
+ TagsCompat(
45
+ args
46
+ ? { i: args, r: (args) => (tagsRenderer || renderBody)(...args) }
47
+ : { i: input, r: tagsRenderer || renderBody },
48
+ out,
49
+ );
50
+ };
51
+
52
+ const TagsCompatId = "tags-compat";
53
+ const TagsCompat = createRenderer(
54
+ function (_, out, componentDef, component) {
55
+ const input = _.i;
56
+ const tagsRenderer = _.r;
57
+ const renderFn = createRenderFn(tagsRenderer);
58
+ const $global = out.global;
59
+ const streamData = ($global.streamData = $global.streamData || {});
60
+
61
+ $global.serializedGlobals = $global.serializedGlobals || {};
62
+ $global.serializedGlobals.componentIdToScopeId = true;
63
+ $global.componentIdToScopeId = $global.componentIdToScopeId || {};
64
+ $global.componentIdToScopeId[component.id] = streamData.scopeId || 0;
65
+ out.bf(out.___assignedKey, component, true);
66
+ renderFn(out.beginAsync(), input, {}, streamData);
67
+ out.ef();
68
+ },
69
+ // eslint-disable-next-line no-constant-condition
70
+ "MARKO_DEBUG"
71
+ ? {
72
+ t: TagsCompatId,
73
+ d: true,
74
+ }
75
+ : {
76
+ t: TagsCompatId,
77
+ },
78
+ {},
79
+ );
80
+
81
+ patchDynamicTag(
82
+ function getRenderer(tag) {
83
+ const renderer = tag._ || tag.renderBody || tag;
84
+ if (isMarko6(renderer)) return renderer;
85
+
86
+ const renderer5 =
87
+ tag._ ||
88
+ tag.render ||
89
+ (tag.renderer && tag.renderer.renderer) ||
90
+ tag.renderer;
91
+ const renderBody5 = tag.renderBody || tag;
92
+
93
+ return (input, ...args) => {
94
+ const out = defaultCreateOut();
95
+ let customEvents;
96
+
97
+ out.global.streamData = tagsAPI.$_streamData;
98
+
99
+ if (renderer5) {
100
+ const normalizedInput = {};
101
+
102
+ for (const key in input) {
103
+ let value = input[key];
104
+ if (key.startsWith("on") && typeof value === "function") {
105
+ const c = key[2];
106
+ customEvents = customEvents || [];
107
+ customEvents.push([
108
+ (c === "-" ? "" : c.toLowerCase()) + key.slice(3),
109
+ value,
110
+ ]);
111
+ value.toJSON = FN_TO_JSON;
112
+ } else {
113
+ normalizedInput[key] = input[key];
114
+ }
115
+ }
116
+ renderer5(normalizedInput, out);
117
+ } else {
118
+ renderBody5(out, input, ...args);
119
+ }
120
+
121
+ const componentsContext = ___getComponentsContext(out);
122
+ const component = componentsContext.___components[0];
123
+ if (component) {
124
+ component.___component.___customEvents = customEvents;
125
+ writeScope(nextScopeId(), {
126
+ m5c: component.id,
127
+ });
128
+ }
129
+
130
+ initComponentsTag({}, out);
131
+
132
+ let async;
133
+ out.once("finish", (result) => {
134
+ if (!async) {
135
+ async = false;
136
+ write(result.toString());
137
+ }
138
+ });
139
+
140
+ out.end();
141
+
142
+ if (async !== false) {
143
+ async = true;
144
+ fork(out, (result) => {
145
+ write(result.toString());
146
+ });
147
+ }
148
+ };
149
+ },
150
+ function createRenderer(renderFn) {
151
+ renderFn.___isTagsAPI = true;
152
+ return renderFn;
153
+ },
154
+ );
155
+
156
+ function dummyCreate5to6Renderer() {}
157
+
158
+ register(dummyCreate5to6Renderer, "@marko/tags-compat-5-to-6");
159
+
160
+ return function serialized5to6(renderer, id) {
161
+ const dummyRenderer = () => {};
162
+ register(dummyRenderer, id);
163
+ return makeSerializable(renderer, (s) =>
164
+ s
165
+ .value(dummyCreate5to6Renderer)
166
+ .code("(")
167
+ .value(dummyRenderer)
168
+ .code(",!0)"),
169
+ );
170
+ };
171
+ };
@@ -1,276 +0,0 @@
1
- "use strict";const { _i_ } = require("@internal/components-util");
2
- const { R_ } = require("../components/ComponentsContext");
3
-
4
- const {
5
- prepare,
6
- runEffects,
7
- patchConditionals,
8
- createScopeWithRenderer,
9
- queueEffect,
10
- scopeLookup,
11
- getRegisteredWithScope,
12
- register
13
- } = require(
14
- // eslint-disable-next-line no-constant-condition
15
- "@marko/runtime-tags/dom"
16
- );
17
- const defineComponent = require("../components/defineComponent");
18
- const { r: registerComponent } = require("../components/registry");
19
- const createRenderer = require("../components/renderer");
20
- const defaultCreateOut = require("../createOut");
21
- const morphdom = require("../vdom/morphdom");
22
- const { _h_ } = require("../vdom/morphdom/fragment");
23
- const dynamicTag = require("./dynamic-tag");
24
-
25
- dynamicTag.bk_ = function tagsToVdom(
26
- tagsRenderer,
27
- renderBody,
28
- args)
29
- {
30
- if (
31
- tagsRenderer ?
32
- tagsRenderer.bl_ === undefined :
33
- !Array.isArray(renderBody) && renderBody?.bl_ === undefined)
34
-
35
- return tagsRenderer;
36
-
37
- return (input, out) =>
38
- TagsCompat({ i: args ? args : input, r: tagsRenderer || renderBody }, out);
39
- };
40
-
41
- const TagsCompatId = "tags-compat";
42
- const TagsCompat = createRenderer(
43
- function (_, out, componentDef, component) {
44
- let existing = false;
45
- const isHydrate =
46
- R_(out).o_._W_;
47
- const input = Array.isArray(_.i) ? _.i : [_.i];
48
- const tagsRenderer = resolveRegistered(_.r);
49
- const args = tagsRenderer.bm_;
50
-
51
- component.effects = prepare(() => {
52
- if (isHydrate) {
53
- const scopeId = out.global.componentIdToScopeId[component.id];
54
- component.scope = scopeLookup[scopeId];
55
- }
56
- if (!component.scope) {
57
- component.scope = createScopeWithRenderer(
58
- tagsRenderer /* out.global as context */
59
- );
60
- for (const signal of tagsRenderer.bn_) {
61
- signal(component.scope, true);
62
- }
63
- } else {
64
- args && args(component.scope, input, 1);
65
- existing = true;
66
- }
67
- args && args(component.scope, input);
68
- });
69
- out.bf(out._Y_, component, existing);
70
- if (!existing) {
71
- out.node({
72
- bo_: () =>
73
- component.scope.bp_ === component.scope.bq_ ?
74
- component.scope.bp_ :
75
- component.scope.bp_.parentNode
76
- });
77
- }
78
- out.ef();
79
- },
80
- // eslint-disable-next-line no-constant-condition
81
-
82
-
83
-
84
-
85
-
86
- {
87
- t: TagsCompatId
88
- },
89
- {}
90
- );
91
-
92
- registerComponent(TagsCompatId, () => ({
93
- _: TagsCompat,
94
- Component: defineComponent(
95
- {
96
- onMount() {
97
- runEffects(this.effects);
98
- },
99
- onUpdate() {
100
- runEffects(this.effects);
101
- }
102
- },
103
- TagsCompat
104
- )
105
- }));
106
-
107
- // (
108
- // nodeAccessor: Accessor,
109
- // dynamicTagAttrs?: IntersectionSignal,
110
- // intersection?: IntersectionSignal,
111
- // valueWithIntersection?: ValueSignal
112
- // )
113
-
114
- const rendererCache = new WeakMap();
115
-
116
- patchConditionals((conditional) => (...args) => {
117
- const signal = conditional(...args);
118
- const hasAttrs = args.length > 1;
119
- return (scope, renderer, clean) => {
120
- return signal(scope, create5to6Renderer(renderer, hasAttrs), clean);
121
- };
122
- });
123
-
124
- function create5to6Renderer(renderer, hasAttrs) {
125
- let newRenderer = renderer;
126
- if (renderer) {
127
- const rendererFromAnywhere =
128
- renderer._ ||
129
- renderer.render ||
130
- renderer.renderer && renderer.renderer.renderer ||
131
- renderer.renderer;
132
- const isMarko6 = rendererFromAnywhere ?
133
- rendererFromAnywhere.bl_ :
134
- renderer.bl_;
135
-
136
- if (typeof renderer !== "string" && !isMarko6) {
137
- newRenderer = rendererCache.get(renderer);
138
- if (!newRenderer) {
139
- const { Component } = renderer;
140
- if (Component) {
141
- const setCustomEvents = Component.prototype.aB_;
142
- Component.prototype.aB_ = function (
143
- customEvents,
144
- scopeId)
145
- {
146
- for (const customEvent of customEvents) {
147
- customEvent[1] = resolveRegistered(customEvent[1]);
148
- }
149
-
150
- setCustomEvents.call(this, customEvents, scopeId);
151
- };
152
- }
153
- newRenderer = {
154
- br_(scope) {
155
- if (!hasAttrs) {
156
- renderAndMorph(scope, rendererFromAnywhere, renderer, {});
157
- }
158
- },
159
- bl_() {
160
- const realFragment = document.createDocumentFragment();
161
- _h_(null, null, realFragment);
162
- return realFragment;
163
- },
164
- bs_: 1,
165
- bm_(scope, input, clean) {
166
- if (clean) return;
167
- renderAndMorph(scope, rendererFromAnywhere, renderer, input);
168
- }
169
- };
170
- rendererCache.set(renderer, newRenderer);
171
- }
172
- }
173
- }
174
- return newRenderer;
175
- }
176
-
177
- register("@marko/tags-compat-5-to-6", create5to6Renderer);
178
-
179
- function renderAndMorph(scope, renderer, renderBody, input) {
180
- const out = defaultCreateOut();
181
- let rootNode = scope.bp_.fragment;
182
- if (!rootNode) {
183
- const component = scope.marko5Component = _i_[scope.m5c];
184
- rootNode = component._A_;
185
- scope.bp_ = rootNode.startNode;
186
- scope.bq_ = rootNode.endNode;
187
- }
188
- const host = scope.bp_;
189
- const existingComponent = scope.marko5Component;
190
- const componentsContext = R_(out);
191
- const globalComponentsContext = componentsContext.o_;
192
- let customEvents;
193
- globalComponentsContext.ax_ = existingComponent;
194
- out.sync();
195
- if (renderer) {
196
- const [rawInput] = input;
197
- const normalizedInput = {};
198
-
199
- for (const key in rawInput) {
200
- let value = rawInput[key];
201
- if (key.startsWith("on")) {
202
- const c = key[2];
203
- customEvents = customEvents || {};
204
- customEvents[(c === "-" ? "" : c.toLowerCase()) + key.slice(3)] = [
205
- value];
206
-
207
- } else {
208
- normalizedInput[key] = rawInput[key];
209
- }
210
- }
211
-
212
- renderer(normalizedInput, out);
213
- } else {
214
- RenderBodyComponent({ renderBody, args: input }, out);
215
- }
216
-
217
- queueEffect(scope, () => {
218
- const targetNode = out.af_().ay_;
219
- morphdom(rootNode, targetNode, host, componentsContext);
220
- const componentDefs = componentsContext.ad_(
221
- getRootNode(host)
222
- );
223
- const component = componentDefs[0].r_;
224
- component._A_ = rootNode;
225
- component.N_ = input[0];
226
- component.U_ = customEvents;
227
- scope.marko5Component = component;
228
- });
229
- }
230
-
231
- function getRootNode(el) {
232
- var cur = el;
233
- while (cur.parentNode) cur = cur.parentNode;
234
- return cur;
235
- }
236
-
237
- const RenderBodyComponentId = "renderbody-renderer";
238
- const RenderBodyComponent = createRenderer(
239
- function (input, out, _componentDef) {
240
- dynamicTag(
241
- out,
242
- input.renderBody,
243
- null,
244
- null,
245
- input.args,
246
- null,
247
- _componentDef,
248
- "0"
249
- );
250
- },
251
- // eslint-disable-next-line no-constant-condition
252
-
253
-
254
-
255
-
256
-
257
-
258
- {
259
- t: RenderBodyComponentId,
260
- i: true
261
- },
262
- {}
263
- );
264
-
265
- registerComponent(RenderBodyComponentId, () => ({
266
- _: RenderBodyComponent,
267
- Component: defineComponent({}, RenderBodyComponent)
268
- }));
269
-
270
- function resolveRegistered(renderer) {
271
- if (!Array.isArray(renderer)) return renderer;
272
-
273
- const [registerId, scopeId] = renderer;
274
- const scope = scopeLookup[scopeId];
275
- return getRegisteredWithScope(registerId, scope);
276
- }