marko 5.33.2 → 5.33.4

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.
@@ -0,0 +1 @@
1
+ "use strict";require("./runtime-dom.js").p(require("@marko/runtime-tags/debug/dom"));
@@ -0,0 +1,3 @@
1
+ import api from "@marko/runtime-tags/debug/dom";
2
+ import { p } from "./runtime-dom.js";
3
+ p(api);
@@ -0,0 +1 @@
1
+ "use strict";require("./runtime-dom.js").p(require("@marko/runtime-tags/dom"));
@@ -0,0 +1,3 @@
1
+ import api from "@marko/runtime-tags/dom";
2
+ import { p } from "./runtime-dom.js";
3
+ p(api);
@@ -0,0 +1,3 @@
1
+ "use strict";exports.s = require("./runtime-html.js").p(
2
+ require("@marko/runtime-tags/debug/html")
3
+ );
@@ -0,0 +1,3 @@
1
+ import api from "@marko/runtime-tags/debug/html";
2
+ import { p } from "./runtime-html.js";
3
+ export const s = p(api);
@@ -0,0 +1 @@
1
+ "use strict";exports.s = require("./runtime-html.js").p(require("@marko/runtime-tags/html"));
@@ -0,0 +1,3 @@
1
+ import api from "@marko/runtime-tags/html";
2
+ import { p } from "./runtime-html.js";
3
+ export const s = p(api);
@@ -0,0 +1,278 @@
1
+ "use strict";const { _i_ } = require("@internal/components-util");
2
+ const {
3
+ R_
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 { _h_ } = 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.bk_ = function tagsToVdom(
24
+ tagsRenderer,
25
+ renderBody,
26
+ args)
27
+ {
28
+ if (
29
+ tagsRenderer ?
30
+ tagsRenderer.bl_ === undefined :
31
+ !Array.isArray(renderBody) && renderBody?.bl_ === 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
+ R_(out).o_._W_;
48
+ const input = Array.isArray(_.i) ? _.i : [_.i];
49
+ const tagsRenderer = resolveRegistered(_.r);
50
+ const args = tagsRenderer.bm_;
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.bn_) {
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._Y_, component, existing);
71
+ if (!existing) {
72
+ out.node({
73
+ bo_: () =>
74
+ component.scope.bp_ === component.scope.bq_ ?
75
+ component.scope.bp_ :
76
+ component.scope.bp_.parentNode
77
+ });
78
+ }
79
+ out.ef();
80
+ },
81
+ // eslint-disable-next-line no-constant-condition
82
+
83
+
84
+
85
+
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.bl_ :
135
+ renderer.bl_;
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.aB_;
143
+ Component.prototype.aB_ = 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
+ br_(scope) {
156
+ if (!hasAttrs) {
157
+ renderAndMorph(scope, rendererFromAnywhere, renderer, {});
158
+ }
159
+ },
160
+ bl_() {
161
+ const realFragment = document.createDocumentFragment();
162
+ _h_(null, null, realFragment);
163
+ return realFragment;
164
+ },
165
+ bs_: 1,
166
+ bm_(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.bp_.fragment;
183
+ if (!rootNode) {
184
+ const component = scope.marko5Component = _i_[scope.m5c];
185
+ rootNode = component._A_;
186
+ scope.bp_ = rootNode.startNode;
187
+ scope.bq_ = rootNode.endNode;
188
+ }
189
+ const host = scope.bp_;
190
+ const existingComponent = scope.marko5Component;
191
+ const componentsContext = R_(out);
192
+ const globalComponentsContext = componentsContext.o_;
193
+ let customEvents;
194
+ globalComponentsContext.ax_ = 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.af_().ay_;
220
+ morphdom(rootNode, targetNode, host, componentsContext);
221
+ const componentDefs = componentsContext.ad_(
222
+ getRootNode(host)
223
+ );
224
+ const component = componentDefs[0].r_;
225
+ component._A_ = rootNode;
226
+ component.N_ = input[0];
227
+ component.U_ = 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
+
254
+
255
+
256
+
257
+
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
+ "use strict";const initComponentsTag = require("../../../core-tags/components/init-components-tag");
2
+ const {
3
+ R_
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.bt_;
29
+ const isMarko5 = (fn) => !fn.bt_;
30
+
31
+ dynamicTag5.bk_ = 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._Y_, component, true);
66
+ renderFn(out.beginAsync(), input, {}, streamData);
67
+ out.ef();
68
+ },
69
+ // eslint-disable-next-line no-constant-condition
70
+
71
+
72
+
73
+
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 = R_(out);
122
+ const component = componentsContext.b_[0];
123
+ if (component) {
124
+ component.r_.U_ = 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.bt_ = 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
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marko",
3
- "version": "5.33.2",
3
+ "version": "5.33.4",
4
4
  "description": "UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.",
5
5
  "keywords": [
6
6
  "front-end",
@@ -61,11 +61,11 @@
61
61
  "tags-html.d.ts"
62
62
  ],
63
63
  "scripts": {
64
- "build": "babel ./src --out-dir ./dist --copy-files --config-file ../../babel.config.js --env-name=production"
64
+ "build": "babel ./src --out-dir ./dist --extensions .js --copy-files --config-file ../../babel.config.js --env-name=production"
65
65
  },
66
66
  "dependencies": {
67
- "@marko/compiler": "^5.35.1",
68
- "@marko/translator-default": "^5.32.1",
67
+ "@marko/compiler": "^5.35.4",
68
+ "@marko/translator-default": "^5.32.3",
69
69
  "app-module-path": "^2.2.0",
70
70
  "argly": "^1.2.0",
71
71
  "browser-refresh-client": "1.1.4",
@@ -0,0 +1 @@
1
+ require("./runtime-dom.js").p(require("@marko/runtime-tags/debug/dom"));
@@ -0,0 +1,3 @@
1
+ import api from "@marko/runtime-tags/debug/dom";
2
+ import { p } from "./runtime-dom.js";
3
+ p(api);
@@ -0,0 +1 @@
1
+ require("./runtime-dom.js").p(require("@marko/runtime-tags/dom"));
@@ -0,0 +1,3 @@
1
+ import api from "@marko/runtime-tags/dom";
2
+ import { p } from "./runtime-dom.js";
3
+ p(api);
@@ -0,0 +1,3 @@
1
+ exports.s = require("./runtime-html.js").p(
2
+ require("@marko/runtime-tags/debug/html"),
3
+ );
@@ -0,0 +1,3 @@
1
+ import api from "@marko/runtime-tags/debug/html";
2
+ import { p } from "./runtime-html.js";
3
+ export const s = p(api);
@@ -0,0 +1 @@
1
+ exports.s = require("./runtime-html.js").p(require("@marko/runtime-tags/html"));
@@ -0,0 +1,3 @@
1
+ import api from "@marko/runtime-tags/html";
2
+ import { p } from "./runtime-html.js";
3
+ export const s = p(api);