@builder.io/sdk-solid 5.0.1 → 5.1.1
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.
- package/lib/browser/dev.js +409 -377
- package/lib/browser/dev.jsx +1097 -1065
- package/lib/browser/index.js +772 -740
- package/lib/browser/index.jsx +773 -741
- package/lib/edge/dev.js +409 -377
- package/lib/edge/dev.jsx +895 -863
- package/lib/edge/index.js +1170 -1138
- package/lib/edge/index.jsx +1172 -1140
- package/lib/node/dev.js +463 -433
- package/lib/node/dev.jsx +1007 -977
- package/lib/node/index.js +828 -798
- package/lib/node/index.jsx +829 -799
- package/package.json +1 -1
package/lib/node/index.jsx
CHANGED
|
@@ -207,145 +207,433 @@ var getUserAttributes = () => {
|
|
|
207
207
|
};
|
|
208
208
|
};
|
|
209
209
|
|
|
210
|
-
// src/
|
|
211
|
-
var
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
210
|
+
// src/constants/sdk-version.ts
|
|
211
|
+
var SDK_VERSION = "5.1.1";
|
|
212
|
+
|
|
213
|
+
// src/helpers/sdk-headers.ts
|
|
214
|
+
var getSdkHeaders = () => ({
|
|
215
|
+
"X-Builder-SDK": TARGET,
|
|
216
|
+
"X-Builder-SDK-GEN": "2",
|
|
217
|
+
"X-Builder-SDK-Version": SDK_VERSION
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
// src/helpers/nullable.ts
|
|
221
|
+
var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
|
|
222
|
+
|
|
223
|
+
// src/helpers/url.ts
|
|
224
|
+
var getTopLevelDomain = (host) => {
|
|
225
|
+
if (host === "localhost" || host === "127.0.0.1") {
|
|
226
|
+
return host;
|
|
227
|
+
}
|
|
228
|
+
const parts = host.split(".");
|
|
229
|
+
if (parts.length > 2) {
|
|
230
|
+
return parts.slice(1).join(".");
|
|
231
|
+
}
|
|
232
|
+
return host;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
// src/helpers/cookie.ts
|
|
236
|
+
var getCookieSync = ({
|
|
237
|
+
name,
|
|
238
|
+
canTrack
|
|
216
239
|
}) => {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
240
|
+
try {
|
|
241
|
+
if (!canTrack) {
|
|
242
|
+
return void 0;
|
|
243
|
+
}
|
|
244
|
+
return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
|
|
245
|
+
} catch (err) {
|
|
246
|
+
logger.warn("[COOKIE] GET error: ", err?.message || err);
|
|
247
|
+
return void 0;
|
|
248
|
+
}
|
|
225
249
|
};
|
|
226
|
-
var
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
isExpression = true
|
|
250
|
+
var getCookie = async (args) => getCookieSync(args);
|
|
251
|
+
var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
|
|
252
|
+
var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
|
|
253
|
+
var createCookieString = ({
|
|
254
|
+
name,
|
|
255
|
+
value,
|
|
256
|
+
expires
|
|
234
257
|
}) => {
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
);
|
|
239
|
-
const
|
|
240
|
-
return
|
|
258
|
+
const secure = isBrowser() ? location.protocol === "https:" : true;
|
|
259
|
+
const secureObj = secure ? SECURE_CONFIG : [[]];
|
|
260
|
+
const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
|
|
261
|
+
const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
|
|
262
|
+
const cookie = stringifyCookie(cookieValue);
|
|
263
|
+
return cookie;
|
|
241
264
|
};
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
252
|
-
const val = target[prop];
|
|
253
|
-
if (typeof val === "object" && val !== null) {
|
|
254
|
-
return flattenState({
|
|
255
|
-
rootState: val,
|
|
256
|
-
localState: void 0,
|
|
257
|
-
rootSetState: rootSetState ? (subState) => {
|
|
258
|
-
target[prop] = subState;
|
|
259
|
-
rootSetState(target);
|
|
260
|
-
} : void 0
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
return val;
|
|
264
|
-
},
|
|
265
|
-
set: (target, prop, value) => {
|
|
266
|
-
if (localState && prop in localState) {
|
|
267
|
-
throw new Error("Writing to local state is not allowed as it is read-only.");
|
|
268
|
-
}
|
|
269
|
-
target[prop] = value;
|
|
270
|
-
rootSetState?.(target);
|
|
271
|
-
return true;
|
|
265
|
+
var setCookie = async ({
|
|
266
|
+
name,
|
|
267
|
+
value,
|
|
268
|
+
expires,
|
|
269
|
+
canTrack
|
|
270
|
+
}) => {
|
|
271
|
+
try {
|
|
272
|
+
if (!canTrack) {
|
|
273
|
+
return;
|
|
272
274
|
}
|
|
275
|
+
const cookie = createCookieString({
|
|
276
|
+
name,
|
|
277
|
+
value,
|
|
278
|
+
expires
|
|
279
|
+
});
|
|
280
|
+
document.cookie = cookie;
|
|
281
|
+
} catch (err) {
|
|
282
|
+
logger.warn("[COOKIE] SET error: ", err?.message || err);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
// src/helpers/uuid.ts
|
|
287
|
+
function uuidv4() {
|
|
288
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
289
|
+
const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
|
|
290
|
+
return v.toString(16);
|
|
273
291
|
});
|
|
274
292
|
}
|
|
293
|
+
function uuid() {
|
|
294
|
+
return uuidv4().replace(/-/g, "");
|
|
295
|
+
}
|
|
275
296
|
|
|
276
|
-
// src/
|
|
277
|
-
var
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
context,
|
|
281
|
-
event,
|
|
282
|
-
localState,
|
|
283
|
-
rootSetState,
|
|
284
|
-
rootState
|
|
297
|
+
// src/helpers/sessionId.ts
|
|
298
|
+
var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
|
|
299
|
+
var getSessionId = async ({
|
|
300
|
+
canTrack
|
|
285
301
|
}) => {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
context,
|
|
289
|
-
event,
|
|
290
|
-
state: flattenState({
|
|
291
|
-
rootState,
|
|
292
|
-
localState,
|
|
293
|
-
rootSetState
|
|
294
|
-
})
|
|
295
|
-
});
|
|
296
|
-
return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
// src/constants/sdk-name.ts
|
|
300
|
-
var SDK_NAME_FOR_TARGET = (() => {
|
|
301
|
-
switch (TARGET) {
|
|
302
|
-
case "rsc":
|
|
303
|
-
return "react-nextjs";
|
|
304
|
-
case "reactNative":
|
|
305
|
-
return "react-native";
|
|
306
|
-
default:
|
|
307
|
-
return TARGET;
|
|
302
|
+
if (!canTrack) {
|
|
303
|
+
return void 0;
|
|
308
304
|
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
305
|
+
const sessionId = await getCookie({
|
|
306
|
+
name: SESSION_LOCAL_STORAGE_KEY,
|
|
307
|
+
canTrack
|
|
308
|
+
});
|
|
309
|
+
if (checkIsDefined(sessionId)) {
|
|
310
|
+
return sessionId;
|
|
311
|
+
} else {
|
|
312
|
+
const newSessionId = createSessionId();
|
|
313
|
+
setSessionId({
|
|
314
|
+
id: newSessionId,
|
|
315
|
+
canTrack
|
|
316
|
+
});
|
|
317
|
+
return newSessionId;
|
|
319
318
|
}
|
|
320
|
-
const path = Array.isArray(_path) ? _path : _path.toString().match(/[^.[\]]+/g);
|
|
321
|
-
path.slice(0, -1).reduce((a, c, i) => Object(a[c]) === a[c] ? a[c] : a[c] = Math.abs(Number(path[i + 1])) >> 0 === +path[i + 1] ? [] : {}, obj)[path[path.length - 1]] = value;
|
|
322
|
-
return obj;
|
|
323
319
|
};
|
|
320
|
+
var createSessionId = () => uuid();
|
|
321
|
+
var setSessionId = ({
|
|
322
|
+
id,
|
|
323
|
+
canTrack
|
|
324
|
+
}) => setCookie({
|
|
325
|
+
name: SESSION_LOCAL_STORAGE_KEY,
|
|
326
|
+
value: id,
|
|
327
|
+
canTrack
|
|
328
|
+
});
|
|
324
329
|
|
|
325
|
-
// src/
|
|
326
|
-
|
|
327
|
-
var
|
|
330
|
+
// src/helpers/localStorage.ts
|
|
331
|
+
var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
|
|
332
|
+
var getLocalStorageItem = ({
|
|
333
|
+
key,
|
|
334
|
+
canTrack
|
|
335
|
+
}) => {
|
|
336
|
+
try {
|
|
337
|
+
if (canTrack) {
|
|
338
|
+
return getLocalStorage()?.getItem(key);
|
|
339
|
+
}
|
|
340
|
+
return void 0;
|
|
341
|
+
} catch (err) {
|
|
342
|
+
return void 0;
|
|
343
|
+
}
|
|
328
344
|
};
|
|
329
|
-
var
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
345
|
+
var setLocalStorageItem = ({
|
|
346
|
+
key,
|
|
347
|
+
canTrack,
|
|
348
|
+
value
|
|
349
|
+
}) => {
|
|
333
350
|
try {
|
|
334
|
-
|
|
335
|
-
|
|
351
|
+
if (canTrack) {
|
|
352
|
+
getLocalStorage()?.setItem(key, value);
|
|
353
|
+
}
|
|
354
|
+
} catch (err) {
|
|
336
355
|
}
|
|
337
|
-
}
|
|
356
|
+
};
|
|
338
357
|
|
|
339
|
-
// src/
|
|
340
|
-
var
|
|
341
|
-
var
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
return obj;
|
|
358
|
+
// src/helpers/visitorId.ts
|
|
359
|
+
var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
|
|
360
|
+
var getVisitorId = ({
|
|
361
|
+
canTrack
|
|
362
|
+
}) => {
|
|
363
|
+
if (!canTrack) {
|
|
364
|
+
return void 0;
|
|
347
365
|
}
|
|
348
|
-
|
|
366
|
+
const visitorId = getLocalStorageItem({
|
|
367
|
+
key: VISITOR_LOCAL_STORAGE_KEY,
|
|
368
|
+
canTrack
|
|
369
|
+
});
|
|
370
|
+
if (checkIsDefined(visitorId)) {
|
|
371
|
+
return visitorId;
|
|
372
|
+
} else {
|
|
373
|
+
const newVisitorId = createVisitorId();
|
|
374
|
+
setVisitorId({
|
|
375
|
+
id: newVisitorId,
|
|
376
|
+
canTrack
|
|
377
|
+
});
|
|
378
|
+
return newVisitorId;
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
var createVisitorId = () => uuid();
|
|
382
|
+
var setVisitorId = ({
|
|
383
|
+
id,
|
|
384
|
+
canTrack
|
|
385
|
+
}) => setLocalStorageItem({
|
|
386
|
+
key: VISITOR_LOCAL_STORAGE_KEY,
|
|
387
|
+
value: id,
|
|
388
|
+
canTrack
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
// src/functions/log-fetch.ts
|
|
392
|
+
function logFetch(url) {
|
|
393
|
+
if (typeof process !== "undefined" && process.env?.DEBUG) {
|
|
394
|
+
if (String(process.env.DEBUG) == "true") {
|
|
395
|
+
logger.log(url);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// src/functions/track/index.ts
|
|
401
|
+
var getTrackingEventData = async ({
|
|
402
|
+
canTrack
|
|
403
|
+
}) => {
|
|
404
|
+
if (!canTrack) {
|
|
405
|
+
return {
|
|
406
|
+
visitorId: void 0,
|
|
407
|
+
sessionId: void 0
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
const sessionId = await getSessionId({
|
|
411
|
+
canTrack
|
|
412
|
+
});
|
|
413
|
+
const visitorId = getVisitorId({
|
|
414
|
+
canTrack
|
|
415
|
+
});
|
|
416
|
+
return {
|
|
417
|
+
sessionId,
|
|
418
|
+
visitorId
|
|
419
|
+
};
|
|
420
|
+
};
|
|
421
|
+
var createEvent = async ({
|
|
422
|
+
type: eventType,
|
|
423
|
+
canTrack,
|
|
424
|
+
apiKey,
|
|
425
|
+
metadata,
|
|
426
|
+
...properties
|
|
427
|
+
}) => ({
|
|
428
|
+
type: eventType,
|
|
429
|
+
data: {
|
|
430
|
+
...properties,
|
|
431
|
+
metadata: {
|
|
432
|
+
url: location.href,
|
|
433
|
+
...metadata
|
|
434
|
+
},
|
|
435
|
+
...await getTrackingEventData({
|
|
436
|
+
canTrack
|
|
437
|
+
}),
|
|
438
|
+
userAttributes: getUserAttributes(),
|
|
439
|
+
ownerId: apiKey
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
async function _track({
|
|
443
|
+
apiHost,
|
|
444
|
+
...eventProps
|
|
445
|
+
}) {
|
|
446
|
+
if (!eventProps.apiKey) {
|
|
447
|
+
logger.error("Missing API key for track call. Please provide your API key.");
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
if (!eventProps.canTrack) {
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
if (isEditing()) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
if (!(isBrowser() || TARGET === "reactNative")) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
const baseUrl = apiHost || "https://cdn.builder.io";
|
|
460
|
+
const url = `${baseUrl}/api/v1/track`;
|
|
461
|
+
logFetch(url);
|
|
462
|
+
return fetch(url, {
|
|
463
|
+
method: "POST",
|
|
464
|
+
body: JSON.stringify({
|
|
465
|
+
events: [await createEvent(eventProps)]
|
|
466
|
+
}),
|
|
467
|
+
headers: {
|
|
468
|
+
"content-type": "application/json",
|
|
469
|
+
...getSdkHeaders()
|
|
470
|
+
},
|
|
471
|
+
mode: "cors"
|
|
472
|
+
}).catch((err) => {
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
var track = (args) => _track({
|
|
476
|
+
...args,
|
|
477
|
+
canTrack: true
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
// src/functions/evaluate/helpers.ts
|
|
481
|
+
var getFunctionArguments = ({
|
|
482
|
+
builder,
|
|
483
|
+
context,
|
|
484
|
+
event,
|
|
485
|
+
state
|
|
486
|
+
}) => {
|
|
487
|
+
return Object.entries({
|
|
488
|
+
state,
|
|
489
|
+
Builder: builder,
|
|
490
|
+
// legacy
|
|
491
|
+
builder,
|
|
492
|
+
context,
|
|
493
|
+
event
|
|
494
|
+
});
|
|
495
|
+
};
|
|
496
|
+
var getBuilderGlobals = (trackingContext) => ({
|
|
497
|
+
isEditing: isEditing(),
|
|
498
|
+
isBrowser: isBrowser(),
|
|
499
|
+
isServer: !isBrowser(),
|
|
500
|
+
getUserAttributes: () => getUserAttributes(),
|
|
501
|
+
trackConversion: (amount, customProperties) => {
|
|
502
|
+
if (!trackingContext?.apiKey || trackingContext?.canTrack === false) {
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
_track({
|
|
506
|
+
type: "conversion",
|
|
507
|
+
apiKey: trackingContext.apiKey,
|
|
508
|
+
canTrack: trackingContext.canTrack ?? true,
|
|
509
|
+
contentId: trackingContext.contentId,
|
|
510
|
+
variationId: trackingContext.variationId !== trackingContext.contentId ? trackingContext.variationId : void 0,
|
|
511
|
+
metadata: {
|
|
512
|
+
...customProperties || {},
|
|
513
|
+
...amount !== void 0 ? {
|
|
514
|
+
amount
|
|
515
|
+
} : {}
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
var parseCode = (code, {
|
|
521
|
+
isExpression = true
|
|
522
|
+
}) => {
|
|
523
|
+
const useReturn = (
|
|
524
|
+
// we disable this for cases where we definitely don't want a return
|
|
525
|
+
isExpression && !(code.includes(";") || code.includes(" return ") || code.trim().startsWith("return "))
|
|
526
|
+
);
|
|
527
|
+
const useCode = useReturn ? `return (${code});` : code;
|
|
528
|
+
return useCode;
|
|
529
|
+
};
|
|
530
|
+
function flattenState({
|
|
531
|
+
rootState,
|
|
532
|
+
localState,
|
|
533
|
+
rootSetState
|
|
534
|
+
}) {
|
|
535
|
+
return new Proxy(rootState, {
|
|
536
|
+
get: (target, prop) => {
|
|
537
|
+
if (localState && prop in localState) {
|
|
538
|
+
return localState[prop];
|
|
539
|
+
}
|
|
540
|
+
const val = target[prop];
|
|
541
|
+
if (typeof val === "object" && val !== null) {
|
|
542
|
+
return flattenState({
|
|
543
|
+
rootState: val,
|
|
544
|
+
localState: void 0,
|
|
545
|
+
rootSetState: rootSetState ? (subState) => {
|
|
546
|
+
target[prop] = subState;
|
|
547
|
+
rootSetState(target);
|
|
548
|
+
} : void 0
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
return val;
|
|
552
|
+
},
|
|
553
|
+
set: (target, prop, value) => {
|
|
554
|
+
if (localState && prop in localState) {
|
|
555
|
+
throw new Error("Writing to local state is not allowed as it is read-only.");
|
|
556
|
+
}
|
|
557
|
+
target[prop] = value;
|
|
558
|
+
rootSetState?.(target);
|
|
559
|
+
return true;
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// src/functions/evaluate/browser-runtime/browser.ts
|
|
565
|
+
var runInBrowser = ({
|
|
566
|
+
code,
|
|
567
|
+
builder,
|
|
568
|
+
context,
|
|
569
|
+
event,
|
|
570
|
+
localState,
|
|
571
|
+
rootSetState,
|
|
572
|
+
rootState
|
|
573
|
+
}) => {
|
|
574
|
+
const functionArgs = getFunctionArguments({
|
|
575
|
+
builder,
|
|
576
|
+
context,
|
|
577
|
+
event,
|
|
578
|
+
state: flattenState({
|
|
579
|
+
rootState,
|
|
580
|
+
localState,
|
|
581
|
+
rootSetState
|
|
582
|
+
})
|
|
583
|
+
});
|
|
584
|
+
return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
|
|
585
|
+
};
|
|
586
|
+
|
|
587
|
+
// src/constants/sdk-name.ts
|
|
588
|
+
var SDK_NAME_FOR_TARGET = (() => {
|
|
589
|
+
switch (TARGET) {
|
|
590
|
+
case "rsc":
|
|
591
|
+
return "react-nextjs";
|
|
592
|
+
case "reactNative":
|
|
593
|
+
return "react-native";
|
|
594
|
+
default:
|
|
595
|
+
return TARGET;
|
|
596
|
+
}
|
|
597
|
+
})();
|
|
598
|
+
var SDK_NAME = `@builder.io/sdk-${SDK_NAME_FOR_TARGET}`;
|
|
599
|
+
|
|
600
|
+
// src/functions/fast-clone.ts
|
|
601
|
+
var fastClone = (obj) => JSON.parse(JSON.stringify(obj));
|
|
602
|
+
|
|
603
|
+
// src/functions/set.ts
|
|
604
|
+
var set = (obj, _path, value) => {
|
|
605
|
+
if (Object(obj) !== obj) {
|
|
606
|
+
return obj;
|
|
607
|
+
}
|
|
608
|
+
const path = Array.isArray(_path) ? _path : _path.toString().match(/[^.[\]]+/g);
|
|
609
|
+
path.slice(0, -1).reduce((a, c, i) => Object(a[c]) === a[c] ? a[c] : a[c] = Math.abs(Number(path[i + 1])) >> 0 === +path[i + 1] ? [] : {}, obj)[path[path.length - 1]] = value;
|
|
610
|
+
return obj;
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
// src/functions/evaluate/node-runtime/safeDynamicRequire.ts
|
|
614
|
+
import { createRequire } from "node:module";
|
|
615
|
+
var noop = () => {
|
|
616
|
+
};
|
|
617
|
+
var safeDynamicRequire = noop;
|
|
618
|
+
try {
|
|
619
|
+
safeDynamicRequire = createRequire(import.meta.url);
|
|
620
|
+
} catch (error) {
|
|
621
|
+
try {
|
|
622
|
+
safeDynamicRequire = eval("require");
|
|
623
|
+
} catch (error2) {
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
// src/functions/evaluate/node-runtime/node-runtime.ts
|
|
628
|
+
var getSyncValName = (key) => `bldr_${key}_sync`;
|
|
629
|
+
var BUILDER_SET_STATE_NAME = "BUILDER_SET_STATE";
|
|
630
|
+
var INJECTED_IVM_GLOBAL = "BUILDER_IVM";
|
|
631
|
+
var REF_TO_PROXY_FN = `
|
|
632
|
+
var refToProxy = (obj) => {
|
|
633
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
634
|
+
return obj;
|
|
635
|
+
}
|
|
636
|
+
return new Proxy({}, {
|
|
349
637
|
get(target, key) {
|
|
350
638
|
if (key === 'copySync') {
|
|
351
639
|
return () => obj.copySync();
|
|
@@ -389,7 +677,9 @@ if (typeof output === 'object' && output !== null) {
|
|
|
389
677
|
`;
|
|
390
678
|
};
|
|
391
679
|
var IVM_INSTANCE = null;
|
|
392
|
-
var
|
|
680
|
+
var IVM_OPTIONS = {
|
|
681
|
+
memoryLimit: 128
|
|
682
|
+
};
|
|
393
683
|
var SHOULD_MENTION_INITIALIZE_SCRIPT = SDK_NAME === "@builder.io/sdk-react-nextjs" || SDK_NAME === "@builder.io/sdk-react" || SDK_NAME === "@builder.io/sdk-qwik" || SDK_NAME === "@builder.io/sdk-vue";
|
|
394
684
|
var getIvm = () => {
|
|
395
685
|
try {
|
|
@@ -411,25 +701,6 @@ var getIvm = () => {
|
|
|
411
701
|
For more information, visit https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments`;
|
|
412
702
|
throw new Error(ERROR_MESSAGE);
|
|
413
703
|
};
|
|
414
|
-
function setIsolateContext(options = {
|
|
415
|
-
memoryLimit: 128
|
|
416
|
-
}) {
|
|
417
|
-
if (IVM_CONTEXT)
|
|
418
|
-
return IVM_CONTEXT;
|
|
419
|
-
const ivm = getIvm();
|
|
420
|
-
const isolate = new ivm.Isolate(options);
|
|
421
|
-
const context = isolate.createContextSync();
|
|
422
|
-
const jail = context.global;
|
|
423
|
-
jail.setSync("global", jail.derefInto());
|
|
424
|
-
jail.setSync("log", function(...logArgs) {
|
|
425
|
-
});
|
|
426
|
-
jail.setSync(INJECTED_IVM_GLOBAL, ivm);
|
|
427
|
-
IVM_CONTEXT = context;
|
|
428
|
-
return context;
|
|
429
|
-
}
|
|
430
|
-
var getIsolateContext = () => {
|
|
431
|
-
return setIsolateContext();
|
|
432
|
-
};
|
|
433
704
|
var runInNode = ({
|
|
434
705
|
code,
|
|
435
706
|
builder,
|
|
@@ -440,48 +711,60 @@ var runInNode = ({
|
|
|
440
711
|
rootState
|
|
441
712
|
}) => {
|
|
442
713
|
const ivm = getIvm();
|
|
443
|
-
|
|
444
|
-
...rootState,
|
|
445
|
-
...localState
|
|
446
|
-
});
|
|
447
|
-
const args = getFunctionArguments({
|
|
448
|
-
builder,
|
|
449
|
-
context,
|
|
450
|
-
event,
|
|
451
|
-
state
|
|
452
|
-
});
|
|
453
|
-
const isolateContext = getIsolateContext();
|
|
454
|
-
const jail = isolateContext.global;
|
|
455
|
-
jail.setSync(BUILDER_SET_STATE_NAME, function(key, value) {
|
|
456
|
-
set(rootState, key, value);
|
|
457
|
-
rootSetState?.(rootState);
|
|
458
|
-
});
|
|
459
|
-
args.forEach(([key, arg]) => {
|
|
460
|
-
const val = typeof arg === "object" ? new ivm.Reference(
|
|
461
|
-
// workaround: methods with default values for arguments is not being cloned over
|
|
462
|
-
key === "builder" ? {
|
|
463
|
-
...arg,
|
|
464
|
-
getUserAttributes: () => arg.getUserAttributes()
|
|
465
|
-
} : arg
|
|
466
|
-
) : null;
|
|
467
|
-
jail.setSync(getSyncValName(key), val);
|
|
468
|
-
});
|
|
469
|
-
const evalStr = processCode({
|
|
470
|
-
code,
|
|
471
|
-
args
|
|
472
|
-
});
|
|
473
|
-
const resultStr = isolateContext.evalClosureSync(evalStr);
|
|
714
|
+
let isolate;
|
|
474
715
|
try {
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
716
|
+
isolate = new ivm.Isolate(IVM_OPTIONS);
|
|
717
|
+
const isolateContext = isolate.createContextSync();
|
|
718
|
+
const jail = isolateContext.global;
|
|
719
|
+
jail.setSync("global", jail.derefInto());
|
|
720
|
+
jail.setSync("log", function(...logArgs) {
|
|
721
|
+
});
|
|
722
|
+
jail.setSync(INJECTED_IVM_GLOBAL, ivm);
|
|
723
|
+
const state = fastClone({
|
|
724
|
+
...rootState,
|
|
725
|
+
...localState
|
|
726
|
+
});
|
|
727
|
+
const args = getFunctionArguments({
|
|
728
|
+
builder,
|
|
729
|
+
context,
|
|
730
|
+
event,
|
|
731
|
+
state
|
|
732
|
+
});
|
|
733
|
+
jail.setSync(BUILDER_SET_STATE_NAME, function(key, value) {
|
|
734
|
+
set(rootState, key, value);
|
|
735
|
+
rootSetState?.(rootState);
|
|
736
|
+
});
|
|
737
|
+
args.forEach(([key, arg]) => {
|
|
738
|
+
const val = typeof arg === "object" ? new ivm.Reference(
|
|
739
|
+
// workaround: methods with default values for arguments is not being cloned over
|
|
740
|
+
key === "builder" ? {
|
|
741
|
+
...arg,
|
|
742
|
+
getUserAttributes: () => arg.getUserAttributes()
|
|
743
|
+
} : arg
|
|
744
|
+
) : null;
|
|
745
|
+
jail.setSync(getSyncValName(key), val);
|
|
746
|
+
});
|
|
747
|
+
const evalStr = processCode({
|
|
748
|
+
code,
|
|
749
|
+
args
|
|
750
|
+
});
|
|
751
|
+
const resultStr = isolateContext.evalClosureSync(evalStr);
|
|
752
|
+
try {
|
|
753
|
+
const res = JSON.parse(resultStr);
|
|
754
|
+
return res;
|
|
755
|
+
} catch (_error) {
|
|
756
|
+
return resultStr;
|
|
757
|
+
}
|
|
758
|
+
} finally {
|
|
759
|
+
if (isolate) {
|
|
760
|
+
try {
|
|
761
|
+
isolate.dispose();
|
|
762
|
+
} catch (e) {
|
|
763
|
+
}
|
|
764
|
+
}
|
|
479
765
|
}
|
|
480
766
|
};
|
|
481
767
|
|
|
482
|
-
// src/helpers/nullable.ts
|
|
483
|
-
var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
|
|
484
|
-
|
|
485
768
|
// src/functions/is-node-runtime.ts
|
|
486
769
|
function isNodeRuntime() {
|
|
487
770
|
return typeof process !== "undefined" && checkIsDefined(process?.versions?.node);
|
|
@@ -526,7 +809,8 @@ function evaluate({
|
|
|
526
809
|
rootState,
|
|
527
810
|
rootSetState,
|
|
528
811
|
event,
|
|
529
|
-
isExpression = true
|
|
812
|
+
isExpression = true,
|
|
813
|
+
trackingContext
|
|
530
814
|
}) {
|
|
531
815
|
if (code.trim() === "") {
|
|
532
816
|
return void 0;
|
|
@@ -542,7 +826,7 @@ function evaluate({
|
|
|
542
826
|
code: parseCode(code, {
|
|
543
827
|
isExpression
|
|
544
828
|
}),
|
|
545
|
-
builder: getBuilderGlobals(),
|
|
829
|
+
builder: getBuilderGlobals(trackingContext),
|
|
546
830
|
context,
|
|
547
831
|
event,
|
|
548
832
|
rootSetState,
|
|
@@ -922,661 +1206,401 @@ function bindScrollInViewAnimation(animation) {
|
|
|
922
1206
|
const defaultState = animation.steps[0].styles;
|
|
923
1207
|
function attachDefaultState() {
|
|
924
1208
|
assign(element.style, defaultState);
|
|
925
|
-
}
|
|
926
|
-
attachDefaultState();
|
|
927
|
-
setTimeout(() => {
|
|
928
|
-
element.style.transition = `all ${animation.duration}s ${camelToKebabCase(animation.easing)}`;
|
|
929
|
-
if (animation.delay) {
|
|
930
|
-
element.style.transitionDelay = animation.delay + "s";
|
|
931
|
-
}
|
|
932
|
-
});
|
|
933
|
-
document.addEventListener("scroll", onScroll, {
|
|
934
|
-
capture: true,
|
|
935
|
-
passive: true
|
|
936
|
-
});
|
|
937
|
-
immediateOnScroll();
|
|
938
|
-
});
|
|
939
|
-
}
|
|
940
|
-
|
|
941
|
-
// src/helpers/css.ts
|
|
942
|
-
var convertStyleMapToCSSArray = (style) => {
|
|
943
|
-
const cssProps = Object.entries(style).map(([key, value]) => {
|
|
944
|
-
if (typeof value === "string") {
|
|
945
|
-
return `${camelToKebabCase(key)}: ${value};`;
|
|
946
|
-
} else {
|
|
947
|
-
return void 0;
|
|
948
|
-
}
|
|
949
|
-
});
|
|
950
|
-
return cssProps.filter(checkIsDefined);
|
|
951
|
-
};
|
|
952
|
-
var convertStyleMapToCSS = (style) => convertStyleMapToCSSArray(style).join("\n");
|
|
953
|
-
var createCssClass = ({
|
|
954
|
-
mediaQuery,
|
|
955
|
-
className,
|
|
956
|
-
styles
|
|
957
|
-
}) => {
|
|
958
|
-
const cssClass = `.${className} {
|
|
959
|
-
${convertStyleMapToCSS(styles)}
|
|
960
|
-
}`;
|
|
961
|
-
if (mediaQuery) {
|
|
962
|
-
return `${mediaQuery} {
|
|
963
|
-
${cssClass}
|
|
964
|
-
}`;
|
|
965
|
-
} else {
|
|
966
|
-
return cssClass;
|
|
967
|
-
}
|
|
968
|
-
};
|
|
969
|
-
|
|
970
|
-
// src/functions/transform-style-property.ts
|
|
971
|
-
function transformStyleProperty({
|
|
972
|
-
style
|
|
973
|
-
}) {
|
|
974
|
-
return style;
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
// src/functions/get-style.ts
|
|
978
|
-
var getStyle = ({
|
|
979
|
-
block,
|
|
980
|
-
context
|
|
981
|
-
}) => {
|
|
982
|
-
return mapStyleObjToStrIfNeeded(transformStyleProperty({
|
|
983
|
-
style: block.style || {},
|
|
984
|
-
context,
|
|
985
|
-
block
|
|
986
|
-
}));
|
|
987
|
-
};
|
|
988
|
-
function mapStyleObjToStrIfNeeded(style) {
|
|
989
|
-
switch (TARGET) {
|
|
990
|
-
case "svelte":
|
|
991
|
-
case "vue":
|
|
992
|
-
case "solid":
|
|
993
|
-
case "angular":
|
|
994
|
-
return convertStyleMapToCSSArray(style).join(" ");
|
|
995
|
-
case "qwik":
|
|
996
|
-
case "reactNative":
|
|
997
|
-
case "react":
|
|
998
|
-
case "rsc":
|
|
999
|
-
return style;
|
|
1000
|
-
}
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
// src/components/block/block.helpers.ts
|
|
1004
|
-
var checkIsComponentRestricted = (component, model) => {
|
|
1005
|
-
if (!component)
|
|
1006
|
-
return true;
|
|
1007
|
-
if (!model)
|
|
1008
|
-
return false;
|
|
1009
|
-
return component.models && component.models.length > 0 && !component.models.includes(model);
|
|
1010
|
-
};
|
|
1011
|
-
var getComponent = ({
|
|
1012
|
-
block,
|
|
1013
|
-
registeredComponents,
|
|
1014
|
-
model
|
|
1015
|
-
}) => {
|
|
1016
|
-
const componentName = block.component?.name;
|
|
1017
|
-
if (!componentName) {
|
|
1018
|
-
return null;
|
|
1019
|
-
}
|
|
1020
|
-
const ref = registeredComponents[componentName];
|
|
1021
|
-
if (!ref || checkIsComponentRestricted(ref, model)) {
|
|
1022
|
-
return void 0;
|
|
1023
|
-
} else {
|
|
1024
|
-
return ref;
|
|
1025
|
-
}
|
|
1026
|
-
};
|
|
1027
|
-
var getRepeatItemData = ({
|
|
1028
|
-
block,
|
|
1029
|
-
context
|
|
1030
|
-
}) => {
|
|
1031
|
-
const {
|
|
1032
|
-
repeat,
|
|
1033
|
-
...blockWithoutRepeat
|
|
1034
|
-
} = block;
|
|
1035
|
-
if (!repeat?.collection) {
|
|
1036
|
-
return void 0;
|
|
1037
|
-
}
|
|
1038
|
-
const itemsArray = evaluate({
|
|
1039
|
-
code: repeat.collection,
|
|
1040
|
-
localState: context.localState,
|
|
1041
|
-
rootState: context.rootState,
|
|
1042
|
-
rootSetState: context.rootSetState,
|
|
1043
|
-
context: context.context
|
|
1044
|
-
});
|
|
1045
|
-
if (!Array.isArray(itemsArray)) {
|
|
1046
|
-
return void 0;
|
|
1047
|
-
}
|
|
1048
|
-
const collectionName = repeat.collection.split(".").pop();
|
|
1049
|
-
const itemNameToUse = repeat.itemName || (collectionName ? collectionName + "Item" : "item");
|
|
1050
|
-
const repeatArray = itemsArray.map((item, index) => ({
|
|
1051
|
-
context: {
|
|
1052
|
-
...context,
|
|
1053
|
-
localState: {
|
|
1054
|
-
...context.localState,
|
|
1055
|
-
$index: index,
|
|
1056
|
-
$item: item,
|
|
1057
|
-
[itemNameToUse]: item,
|
|
1058
|
-
[`$${itemNameToUse}Index`]: index
|
|
1059
|
-
}
|
|
1060
|
-
},
|
|
1061
|
-
block: blockWithoutRepeat
|
|
1062
|
-
}));
|
|
1063
|
-
return repeatArray;
|
|
1064
|
-
};
|
|
1065
|
-
var provideLinkComponent = (block, linkComponent) => {
|
|
1066
|
-
if (block?.shouldReceiveBuilderProps?.builderLinkComponent)
|
|
1067
|
-
return {
|
|
1068
|
-
builderLinkComponent: linkComponent
|
|
1069
|
-
};
|
|
1070
|
-
return {};
|
|
1071
|
-
};
|
|
1072
|
-
var provideRegisteredComponents = (block, registeredComponents, model) => {
|
|
1073
|
-
if (block?.shouldReceiveBuilderProps?.builderComponents) {
|
|
1074
|
-
const filteredRegisteredComponents = Object.fromEntries(Object.entries(registeredComponents).filter(([_, component]) => {
|
|
1075
|
-
return !checkIsComponentRestricted(component, model);
|
|
1076
|
-
}));
|
|
1077
|
-
return {
|
|
1078
|
-
builderComponents: filteredRegisteredComponents
|
|
1079
|
-
};
|
|
1080
|
-
}
|
|
1081
|
-
return {};
|
|
1082
|
-
};
|
|
1083
|
-
var provideBuilderBlock = (block, builderBlock) => {
|
|
1084
|
-
if (block?.shouldReceiveBuilderProps?.builderBlock)
|
|
1085
|
-
return {
|
|
1086
|
-
builderBlock
|
|
1087
|
-
};
|
|
1088
|
-
return {};
|
|
1089
|
-
};
|
|
1090
|
-
var provideBuilderContext = (block, context) => {
|
|
1091
|
-
if (block?.shouldReceiveBuilderProps?.builderContext)
|
|
1092
|
-
return {
|
|
1093
|
-
builderContext: context
|
|
1094
|
-
};
|
|
1095
|
-
return {};
|
|
1096
|
-
};
|
|
1097
|
-
var generateKey = (index) => {
|
|
1098
|
-
return index.toString();
|
|
1099
|
-
};
|
|
1100
|
-
|
|
1101
|
-
// src/functions/event-handler-name.ts
|
|
1102
|
-
function capitalizeFirstLetter(string) {
|
|
1103
|
-
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
1104
|
-
}
|
|
1105
|
-
var getEventHandlerName = (key) => `on${capitalizeFirstLetter(key)}`;
|
|
1106
|
-
|
|
1107
|
-
// src/functions/get-block-actions-handler.ts
|
|
1108
|
-
var createEventHandler = (value, options) => (event) => evaluate({
|
|
1109
|
-
code: value,
|
|
1110
|
-
context: options.context,
|
|
1111
|
-
localState: options.localState,
|
|
1112
|
-
rootState: options.rootState,
|
|
1113
|
-
rootSetState: options.rootSetState,
|
|
1114
|
-
event,
|
|
1115
|
-
isExpression: false
|
|
1116
|
-
});
|
|
1117
|
-
|
|
1118
|
-
// src/functions/get-block-actions.ts
|
|
1119
|
-
function getBlockActions(options) {
|
|
1120
|
-
const obj = {};
|
|
1121
|
-
const optionActions = options.block.actions ?? {};
|
|
1122
|
-
for (const key in optionActions) {
|
|
1123
|
-
if (!optionActions.hasOwnProperty(key)) {
|
|
1124
|
-
continue;
|
|
1125
|
-
}
|
|
1126
|
-
const value = optionActions[key];
|
|
1127
|
-
let eventHandlerName = getEventHandlerName(key);
|
|
1128
|
-
if (options.stripPrefix) {
|
|
1129
|
-
switch (TARGET) {
|
|
1130
|
-
case "vue":
|
|
1131
|
-
eventHandlerName = eventHandlerName.replace("v-on:", "");
|
|
1132
|
-
break;
|
|
1133
|
-
case "svelte":
|
|
1134
|
-
eventHandlerName = eventHandlerName.replace("on:", "");
|
|
1135
|
-
break;
|
|
1136
|
-
}
|
|
1137
|
-
}
|
|
1138
|
-
obj[eventHandlerName] = createEventHandler(value, options);
|
|
1139
|
-
}
|
|
1140
|
-
return obj;
|
|
1141
|
-
}
|
|
1142
|
-
|
|
1143
|
-
// src/functions/transform-block-properties.ts
|
|
1144
|
-
function transformBlockProperties({
|
|
1145
|
-
properties
|
|
1146
|
-
}) {
|
|
1147
|
-
return properties;
|
|
1148
|
-
}
|
|
1149
|
-
|
|
1150
|
-
// src/functions/get-block-properties.ts
|
|
1151
|
-
var extractRelevantRootBlockProperties = (block) => {
|
|
1152
|
-
return {
|
|
1153
|
-
href: block.href
|
|
1154
|
-
};
|
|
1155
|
-
};
|
|
1156
|
-
function getBlockProperties({
|
|
1157
|
-
block,
|
|
1158
|
-
context
|
|
1159
|
-
}) {
|
|
1160
|
-
const properties = {
|
|
1161
|
-
...extractRelevantRootBlockProperties(block),
|
|
1162
|
-
...block.properties,
|
|
1163
|
-
"builder-id": block.id,
|
|
1164
|
-
style: getStyle({
|
|
1165
|
-
block,
|
|
1166
|
-
context
|
|
1167
|
-
}),
|
|
1168
|
-
[getClassPropName()]: [block.id, "builder-block", block.class, block.properties?.class].filter(Boolean).join(" ")
|
|
1169
|
-
};
|
|
1170
|
-
return transformBlockProperties({
|
|
1171
|
-
properties,
|
|
1172
|
-
context,
|
|
1173
|
-
block
|
|
1174
|
-
});
|
|
1175
|
-
}
|
|
1176
|
-
|
|
1177
|
-
// src/components/block/components/block-wrapper.tsx
|
|
1178
|
-
function BlockWrapper(props) {
|
|
1179
|
-
return <><Dynamic_renderer_default
|
|
1180
|
-
TagName={props.Wrapper}
|
|
1181
|
-
attributes={getBlockProperties({
|
|
1182
|
-
block: props.block,
|
|
1183
|
-
context: props.context
|
|
1184
|
-
})}
|
|
1185
|
-
actionAttributes={getBlockActions({
|
|
1186
|
-
block: props.block,
|
|
1187
|
-
rootState: props.context.rootState,
|
|
1188
|
-
rootSetState: props.context.rootSetState,
|
|
1189
|
-
localState: props.context.localState,
|
|
1190
|
-
context: props.context.context,
|
|
1191
|
-
stripPrefix: true
|
|
1192
|
-
})}
|
|
1193
|
-
>{props.children}</Dynamic_renderer_default></>;
|
|
1194
|
-
}
|
|
1195
|
-
var Block_wrapper_default = BlockWrapper;
|
|
1196
|
-
|
|
1197
|
-
// src/components/block/components/component-ref/component-ref.tsx
|
|
1198
|
-
import { Show as Show3, For, createSignal as createSignal3 } from "solid-js";
|
|
1199
|
-
import { Dynamic as Dynamic4 } from "solid-js/web";
|
|
1200
|
-
|
|
1201
|
-
// src/components/block/components/interactive-element.tsx
|
|
1202
|
-
import { Show as Show2, on, createEffect, createMemo as createMemo2, createSignal as createSignal2 } from "solid-js";
|
|
1203
|
-
import { Dynamic as Dynamic3 } from "solid-js/web";
|
|
1204
|
-
|
|
1205
|
-
// src/functions/is-previewing.ts
|
|
1206
|
-
function isPreviewing(search) {
|
|
1207
|
-
const searchToUse = search || (isBrowser() ? window.location.search : void 0);
|
|
1208
|
-
if (!searchToUse) {
|
|
1209
|
-
return false;
|
|
1210
|
-
}
|
|
1211
|
-
const normalizedSearch = getSearchString(searchToUse);
|
|
1212
|
-
return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
|
|
1213
|
-
}
|
|
1214
|
-
|
|
1215
|
-
// src/functions/register-component.ts
|
|
1216
|
-
var createRegisterComponentMessage = (info) => ({
|
|
1217
|
-
type: "builder.registerComponent",
|
|
1218
|
-
data: serializeIncludingFunctions(info)
|
|
1219
|
-
});
|
|
1220
|
-
var serializeFn = (fnValue) => {
|
|
1221
|
-
const fnStr = fnValue.toString().trim();
|
|
1222
|
-
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
1223
|
-
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
1224
|
-
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
1225
|
-
};
|
|
1226
|
-
function serializeIncludingFunctions(info) {
|
|
1227
|
-
return JSON.parse(JSON.stringify(info, (key, value) => {
|
|
1228
|
-
if (typeof value === "function") {
|
|
1229
|
-
return serializeFn(value);
|
|
1230
|
-
}
|
|
1231
|
-
return value;
|
|
1232
|
-
}));
|
|
1233
|
-
}
|
|
1234
|
-
|
|
1235
|
-
// src/functions/register.ts
|
|
1236
|
-
var registry = {};
|
|
1237
|
-
function register(type, info) {
|
|
1238
|
-
if (type === "plugin") {
|
|
1239
|
-
info = serializeIncludingFunctions(info);
|
|
1240
|
-
}
|
|
1241
|
-
let typeList = registry[type];
|
|
1242
|
-
if (!typeList) {
|
|
1243
|
-
typeList = registry[type] = [];
|
|
1244
|
-
}
|
|
1245
|
-
typeList.push(info);
|
|
1246
|
-
if (isBrowser()) {
|
|
1247
|
-
const message = {
|
|
1248
|
-
type: "builder.register",
|
|
1249
|
-
data: {
|
|
1250
|
-
type,
|
|
1251
|
-
info
|
|
1252
|
-
}
|
|
1253
|
-
};
|
|
1254
|
-
try {
|
|
1255
|
-
parent.postMessage(message, "*");
|
|
1256
|
-
if (parent !== window) {
|
|
1257
|
-
window.postMessage(message, "*");
|
|
1258
|
-
}
|
|
1259
|
-
} catch (err) {
|
|
1260
|
-
}
|
|
1261
|
-
}
|
|
1262
|
-
}
|
|
1263
|
-
function registerAction(action) {
|
|
1264
|
-
if (isBrowser()) {
|
|
1265
|
-
const actionClone = JSON.parse(JSON.stringify(action));
|
|
1266
|
-
if (action.action) {
|
|
1267
|
-
actionClone.action = action.action.toString();
|
|
1268
|
-
}
|
|
1269
|
-
window.parent?.postMessage({
|
|
1270
|
-
type: "builder.registerAction",
|
|
1271
|
-
data: actionClone
|
|
1272
|
-
}, "*");
|
|
1273
|
-
}
|
|
1274
|
-
}
|
|
1275
|
-
|
|
1276
|
-
// src/functions/set-editor-settings.ts
|
|
1277
|
-
var settings = {};
|
|
1278
|
-
function setEditorSettings(newSettings) {
|
|
1279
|
-
if (isBrowser()) {
|
|
1280
|
-
Object.assign(settings, newSettings);
|
|
1281
|
-
const message = {
|
|
1282
|
-
type: "builder.settingsChange",
|
|
1283
|
-
data: settings
|
|
1284
|
-
};
|
|
1285
|
-
parent.postMessage(message, "*");
|
|
1286
|
-
}
|
|
1287
|
-
}
|
|
1288
|
-
|
|
1289
|
-
// src/functions/get-builder-search-params/index.ts
|
|
1290
|
-
var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
|
|
1291
|
-
var BUILDER_OPTIONS_PREFIX = "options.";
|
|
1292
|
-
var getBuilderSearchParams = (_options) => {
|
|
1293
|
-
if (!_options) {
|
|
1294
|
-
return {};
|
|
1295
|
-
}
|
|
1296
|
-
const options = normalizeSearchParams(_options);
|
|
1297
|
-
const newOptions = {};
|
|
1298
|
-
Object.keys(options).forEach((key) => {
|
|
1299
|
-
if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
|
|
1300
|
-
const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
|
|
1301
|
-
newOptions[trimmedKey] = options[key];
|
|
1302
|
-
}
|
|
1303
|
-
});
|
|
1304
|
-
return newOptions;
|
|
1305
|
-
};
|
|
1306
|
-
var getBuilderSearchParamsFromWindow = () => {
|
|
1307
|
-
if (!isBrowser()) {
|
|
1308
|
-
return {};
|
|
1309
|
-
}
|
|
1310
|
-
const searchParams = new URLSearchParams(window.location.search);
|
|
1311
|
-
return getBuilderSearchParams(searchParams);
|
|
1312
|
-
};
|
|
1313
|
-
|
|
1314
|
-
// src/constants/sdk-version.ts
|
|
1315
|
-
var SDK_VERSION = "5.0.1";
|
|
1316
|
-
|
|
1317
|
-
// src/helpers/sdk-headers.ts
|
|
1318
|
-
var getSdkHeaders = () => ({
|
|
1319
|
-
"X-Builder-SDK": TARGET,
|
|
1320
|
-
"X-Builder-SDK-GEN": "2",
|
|
1321
|
-
"X-Builder-SDK-Version": SDK_VERSION
|
|
1322
|
-
});
|
|
1323
|
-
|
|
1324
|
-
// src/helpers/url.ts
|
|
1325
|
-
var getTopLevelDomain = (host) => {
|
|
1326
|
-
if (host === "localhost" || host === "127.0.0.1") {
|
|
1327
|
-
return host;
|
|
1328
|
-
}
|
|
1329
|
-
const parts = host.split(".");
|
|
1330
|
-
if (parts.length > 2) {
|
|
1331
|
-
return parts.slice(1).join(".");
|
|
1332
|
-
}
|
|
1333
|
-
return host;
|
|
1334
|
-
};
|
|
1335
|
-
|
|
1336
|
-
// src/helpers/cookie.ts
|
|
1337
|
-
var getCookieSync = ({
|
|
1338
|
-
name,
|
|
1339
|
-
canTrack
|
|
1340
|
-
}) => {
|
|
1341
|
-
try {
|
|
1342
|
-
if (!canTrack) {
|
|
1343
|
-
return void 0;
|
|
1344
|
-
}
|
|
1345
|
-
return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
|
|
1346
|
-
} catch (err) {
|
|
1347
|
-
logger.warn("[COOKIE] GET error: ", err?.message || err);
|
|
1348
|
-
return void 0;
|
|
1349
|
-
}
|
|
1350
|
-
};
|
|
1351
|
-
var getCookie = async (args) => getCookieSync(args);
|
|
1352
|
-
var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
|
|
1353
|
-
var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
|
|
1354
|
-
var createCookieString = ({
|
|
1355
|
-
name,
|
|
1356
|
-
value,
|
|
1357
|
-
expires
|
|
1358
|
-
}) => {
|
|
1359
|
-
const secure = isBrowser() ? location.protocol === "https:" : true;
|
|
1360
|
-
const secureObj = secure ? SECURE_CONFIG : [[]];
|
|
1361
|
-
const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
|
|
1362
|
-
const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
|
|
1363
|
-
const cookie = stringifyCookie(cookieValue);
|
|
1364
|
-
return cookie;
|
|
1365
|
-
};
|
|
1366
|
-
var setCookie = async ({
|
|
1367
|
-
name,
|
|
1368
|
-
value,
|
|
1369
|
-
expires,
|
|
1370
|
-
canTrack
|
|
1371
|
-
}) => {
|
|
1372
|
-
try {
|
|
1373
|
-
if (!canTrack) {
|
|
1374
|
-
return;
|
|
1375
|
-
}
|
|
1376
|
-
const cookie = createCookieString({
|
|
1377
|
-
name,
|
|
1378
|
-
value,
|
|
1379
|
-
expires
|
|
1209
|
+
}
|
|
1210
|
+
attachDefaultState();
|
|
1211
|
+
setTimeout(() => {
|
|
1212
|
+
element.style.transition = `all ${animation.duration}s ${camelToKebabCase(animation.easing)}`;
|
|
1213
|
+
if (animation.delay) {
|
|
1214
|
+
element.style.transitionDelay = animation.delay + "s";
|
|
1215
|
+
}
|
|
1380
1216
|
});
|
|
1381
|
-
document.
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
// src/helpers/uuid.ts
|
|
1388
|
-
function uuidv4() {
|
|
1389
|
-
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
1390
|
-
const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
|
|
1391
|
-
return v.toString(16);
|
|
1217
|
+
document.addEventListener("scroll", onScroll, {
|
|
1218
|
+
capture: true,
|
|
1219
|
+
passive: true
|
|
1220
|
+
});
|
|
1221
|
+
immediateOnScroll();
|
|
1392
1222
|
});
|
|
1393
1223
|
}
|
|
1394
|
-
function uuid() {
|
|
1395
|
-
return uuidv4().replace(/-/g, "");
|
|
1396
|
-
}
|
|
1397
1224
|
|
|
1398
|
-
// src/helpers/
|
|
1399
|
-
var
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
}
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
const sessionId = await getCookie({
|
|
1407
|
-
name: SESSION_LOCAL_STORAGE_KEY,
|
|
1408
|
-
canTrack
|
|
1225
|
+
// src/helpers/css.ts
|
|
1226
|
+
var convertStyleMapToCSSArray = (style) => {
|
|
1227
|
+
const cssProps = Object.entries(style).map(([key, value]) => {
|
|
1228
|
+
if (typeof value === "string") {
|
|
1229
|
+
return `${camelToKebabCase(key)}: ${value};`;
|
|
1230
|
+
} else {
|
|
1231
|
+
return void 0;
|
|
1232
|
+
}
|
|
1409
1233
|
});
|
|
1410
|
-
|
|
1411
|
-
|
|
1234
|
+
return cssProps.filter(checkIsDefined);
|
|
1235
|
+
};
|
|
1236
|
+
var convertStyleMapToCSS = (style) => convertStyleMapToCSSArray(style).join("\n");
|
|
1237
|
+
var createCssClass = ({
|
|
1238
|
+
mediaQuery,
|
|
1239
|
+
className,
|
|
1240
|
+
styles
|
|
1241
|
+
}) => {
|
|
1242
|
+
const cssClass = `.${className} {
|
|
1243
|
+
${convertStyleMapToCSS(styles)}
|
|
1244
|
+
}`;
|
|
1245
|
+
if (mediaQuery) {
|
|
1246
|
+
return `${mediaQuery} {
|
|
1247
|
+
${cssClass}
|
|
1248
|
+
}`;
|
|
1412
1249
|
} else {
|
|
1413
|
-
|
|
1414
|
-
setSessionId({
|
|
1415
|
-
id: newSessionId,
|
|
1416
|
-
canTrack
|
|
1417
|
-
});
|
|
1418
|
-
return newSessionId;
|
|
1250
|
+
return cssClass;
|
|
1419
1251
|
}
|
|
1420
1252
|
};
|
|
1421
|
-
var createSessionId = () => uuid();
|
|
1422
|
-
var setSessionId = ({
|
|
1423
|
-
id,
|
|
1424
|
-
canTrack
|
|
1425
|
-
}) => setCookie({
|
|
1426
|
-
name: SESSION_LOCAL_STORAGE_KEY,
|
|
1427
|
-
value: id,
|
|
1428
|
-
canTrack
|
|
1429
|
-
});
|
|
1430
1253
|
|
|
1431
|
-
// src/
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1254
|
+
// src/functions/transform-style-property.ts
|
|
1255
|
+
function transformStyleProperty({
|
|
1256
|
+
style
|
|
1257
|
+
}) {
|
|
1258
|
+
return style;
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
// src/functions/get-style.ts
|
|
1262
|
+
var getStyle = ({
|
|
1263
|
+
block,
|
|
1264
|
+
context
|
|
1436
1265
|
}) => {
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1266
|
+
return mapStyleObjToStrIfNeeded(transformStyleProperty({
|
|
1267
|
+
style: block.style || {},
|
|
1268
|
+
context,
|
|
1269
|
+
block
|
|
1270
|
+
}));
|
|
1271
|
+
};
|
|
1272
|
+
function mapStyleObjToStrIfNeeded(style) {
|
|
1273
|
+
switch (TARGET) {
|
|
1274
|
+
case "svelte":
|
|
1275
|
+
case "vue":
|
|
1276
|
+
case "solid":
|
|
1277
|
+
case "angular":
|
|
1278
|
+
return convertStyleMapToCSSArray(style).join(" ");
|
|
1279
|
+
case "qwik":
|
|
1280
|
+
case "reactNative":
|
|
1281
|
+
case "react":
|
|
1282
|
+
case "rsc":
|
|
1283
|
+
return style;
|
|
1444
1284
|
}
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
// src/components/block/block.helpers.ts
|
|
1288
|
+
var checkIsComponentRestricted = (component, model) => {
|
|
1289
|
+
if (!component)
|
|
1290
|
+
return true;
|
|
1291
|
+
if (!model)
|
|
1292
|
+
return false;
|
|
1293
|
+
return component.models && component.models.length > 0 && !component.models.includes(model);
|
|
1445
1294
|
};
|
|
1446
|
-
var
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1295
|
+
var getComponent = ({
|
|
1296
|
+
block,
|
|
1297
|
+
registeredComponents,
|
|
1298
|
+
model
|
|
1450
1299
|
}) => {
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1300
|
+
const componentName = block.component?.name;
|
|
1301
|
+
if (!componentName) {
|
|
1302
|
+
return null;
|
|
1303
|
+
}
|
|
1304
|
+
const ref = registeredComponents[componentName];
|
|
1305
|
+
if (!ref || checkIsComponentRestricted(ref, model)) {
|
|
1306
|
+
return void 0;
|
|
1307
|
+
} else {
|
|
1308
|
+
return ref;
|
|
1456
1309
|
}
|
|
1457
1310
|
};
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
var getVisitorId = ({
|
|
1462
|
-
canTrack
|
|
1311
|
+
var getRepeatItemData = ({
|
|
1312
|
+
block,
|
|
1313
|
+
context
|
|
1463
1314
|
}) => {
|
|
1464
|
-
|
|
1315
|
+
const {
|
|
1316
|
+
repeat,
|
|
1317
|
+
...blockWithoutRepeat
|
|
1318
|
+
} = block;
|
|
1319
|
+
if (!repeat?.collection) {
|
|
1465
1320
|
return void 0;
|
|
1466
1321
|
}
|
|
1467
|
-
const
|
|
1468
|
-
|
|
1469
|
-
|
|
1322
|
+
const itemsArray = evaluate({
|
|
1323
|
+
code: repeat.collection,
|
|
1324
|
+
localState: context.localState,
|
|
1325
|
+
rootState: context.rootState,
|
|
1326
|
+
rootSetState: context.rootSetState,
|
|
1327
|
+
context: context.context
|
|
1470
1328
|
});
|
|
1471
|
-
if (
|
|
1472
|
-
return
|
|
1473
|
-
}
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1329
|
+
if (!Array.isArray(itemsArray)) {
|
|
1330
|
+
return void 0;
|
|
1331
|
+
}
|
|
1332
|
+
const collectionName = repeat.collection.split(".").pop();
|
|
1333
|
+
const itemNameToUse = repeat.itemName || (collectionName ? collectionName + "Item" : "item");
|
|
1334
|
+
const repeatArray = itemsArray.map((item, index) => ({
|
|
1335
|
+
context: {
|
|
1336
|
+
...context,
|
|
1337
|
+
localState: {
|
|
1338
|
+
...context.localState,
|
|
1339
|
+
$index: index,
|
|
1340
|
+
$item: item,
|
|
1341
|
+
[itemNameToUse]: item,
|
|
1342
|
+
[`$${itemNameToUse}Index`]: index
|
|
1343
|
+
}
|
|
1344
|
+
},
|
|
1345
|
+
block: blockWithoutRepeat
|
|
1346
|
+
}));
|
|
1347
|
+
return repeatArray;
|
|
1348
|
+
};
|
|
1349
|
+
var provideLinkComponent = (block, linkComponent) => {
|
|
1350
|
+
if (block?.shouldReceiveBuilderProps?.builderLinkComponent)
|
|
1351
|
+
return {
|
|
1352
|
+
builderLinkComponent: linkComponent
|
|
1353
|
+
};
|
|
1354
|
+
return {};
|
|
1355
|
+
};
|
|
1356
|
+
var provideRegisteredComponents = (block, registeredComponents, model) => {
|
|
1357
|
+
if (block?.shouldReceiveBuilderProps?.builderComponents) {
|
|
1358
|
+
const filteredRegisteredComponents = Object.fromEntries(Object.entries(registeredComponents).filter(([_, component]) => {
|
|
1359
|
+
return !checkIsComponentRestricted(component, model);
|
|
1360
|
+
}));
|
|
1361
|
+
return {
|
|
1362
|
+
builderComponents: filteredRegisteredComponents
|
|
1363
|
+
};
|
|
1480
1364
|
}
|
|
1365
|
+
return {};
|
|
1481
1366
|
};
|
|
1482
|
-
var
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
}
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1367
|
+
var provideBuilderBlock = (block, builderBlock) => {
|
|
1368
|
+
if (block?.shouldReceiveBuilderProps?.builderBlock)
|
|
1369
|
+
return {
|
|
1370
|
+
builderBlock
|
|
1371
|
+
};
|
|
1372
|
+
return {};
|
|
1373
|
+
};
|
|
1374
|
+
var provideBuilderContext = (block, context) => {
|
|
1375
|
+
if (block?.shouldReceiveBuilderProps?.builderContext)
|
|
1376
|
+
return {
|
|
1377
|
+
builderContext: context
|
|
1378
|
+
};
|
|
1379
|
+
return {};
|
|
1380
|
+
};
|
|
1381
|
+
var generateKey = (index) => {
|
|
1382
|
+
return index.toString();
|
|
1383
|
+
};
|
|
1384
|
+
|
|
1385
|
+
// src/functions/event-handler-name.ts
|
|
1386
|
+
function capitalizeFirstLetter(string) {
|
|
1387
|
+
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
1388
|
+
}
|
|
1389
|
+
var getEventHandlerName = (key) => `on${capitalizeFirstLetter(key)}`;
|
|
1390
|
+
|
|
1391
|
+
// src/functions/get-block-actions-handler.ts
|
|
1392
|
+
var createEventHandler = (value, options) => (event) => evaluate({
|
|
1393
|
+
code: value,
|
|
1394
|
+
context: options.context,
|
|
1395
|
+
localState: options.localState,
|
|
1396
|
+
rootState: options.rootState,
|
|
1397
|
+
rootSetState: options.rootSetState,
|
|
1398
|
+
event,
|
|
1399
|
+
isExpression: false,
|
|
1400
|
+
trackingContext: options.trackingContext
|
|
1490
1401
|
});
|
|
1491
1402
|
|
|
1492
|
-
// src/functions/
|
|
1493
|
-
function
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1403
|
+
// src/functions/get-block-actions.ts
|
|
1404
|
+
function getBlockActions(options) {
|
|
1405
|
+
const obj = {};
|
|
1406
|
+
const optionActions = options.block.actions ?? {};
|
|
1407
|
+
for (const key in optionActions) {
|
|
1408
|
+
if (!optionActions.hasOwnProperty(key)) {
|
|
1409
|
+
continue;
|
|
1410
|
+
}
|
|
1411
|
+
const value = optionActions[key];
|
|
1412
|
+
let eventHandlerName = getEventHandlerName(key);
|
|
1413
|
+
if (options.stripPrefix) {
|
|
1414
|
+
switch (TARGET) {
|
|
1415
|
+
case "vue":
|
|
1416
|
+
eventHandlerName = eventHandlerName.replace("v-on:", "");
|
|
1417
|
+
break;
|
|
1418
|
+
case "svelte":
|
|
1419
|
+
eventHandlerName = eventHandlerName.replace("on:", "");
|
|
1420
|
+
break;
|
|
1421
|
+
}
|
|
1497
1422
|
}
|
|
1423
|
+
obj[eventHandlerName] = createEventHandler(value, options);
|
|
1498
1424
|
}
|
|
1425
|
+
return obj;
|
|
1499
1426
|
}
|
|
1500
1427
|
|
|
1501
|
-
// src/functions/
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
})
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
}
|
|
1511
|
-
const sessionId = await getSessionId({
|
|
1512
|
-
canTrack
|
|
1513
|
-
});
|
|
1514
|
-
const visitorId = getVisitorId({
|
|
1515
|
-
canTrack
|
|
1516
|
-
});
|
|
1428
|
+
// src/functions/transform-block-properties.ts
|
|
1429
|
+
function transformBlockProperties({
|
|
1430
|
+
properties
|
|
1431
|
+
}) {
|
|
1432
|
+
return properties;
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
// src/functions/get-block-properties.ts
|
|
1436
|
+
var extractRelevantRootBlockProperties = (block) => {
|
|
1517
1437
|
return {
|
|
1518
|
-
|
|
1519
|
-
visitorId
|
|
1438
|
+
href: block.href
|
|
1520
1439
|
};
|
|
1521
1440
|
};
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
url: location.href,
|
|
1534
|
-
...metadata
|
|
1535
|
-
},
|
|
1536
|
-
...await getTrackingEventData({
|
|
1537
|
-
canTrack
|
|
1441
|
+
function getBlockProperties({
|
|
1442
|
+
block,
|
|
1443
|
+
context
|
|
1444
|
+
}) {
|
|
1445
|
+
const properties = {
|
|
1446
|
+
...extractRelevantRootBlockProperties(block),
|
|
1447
|
+
...block.properties,
|
|
1448
|
+
"builder-id": block.id,
|
|
1449
|
+
style: getStyle({
|
|
1450
|
+
block,
|
|
1451
|
+
context
|
|
1538
1452
|
}),
|
|
1539
|
-
|
|
1540
|
-
|
|
1453
|
+
[getClassPropName()]: [block.id, "builder-block", block.class, block.properties?.class].filter(Boolean).join(" ")
|
|
1454
|
+
};
|
|
1455
|
+
return transformBlockProperties({
|
|
1456
|
+
properties,
|
|
1457
|
+
context,
|
|
1458
|
+
block
|
|
1459
|
+
});
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
// src/components/block/components/block-wrapper.tsx
|
|
1463
|
+
function BlockWrapper(props) {
|
|
1464
|
+
return <><Dynamic_renderer_default
|
|
1465
|
+
TagName={props.Wrapper}
|
|
1466
|
+
attributes={getBlockProperties({
|
|
1467
|
+
block: props.block,
|
|
1468
|
+
context: props.context
|
|
1469
|
+
})}
|
|
1470
|
+
actionAttributes={getBlockActions({
|
|
1471
|
+
block: props.block,
|
|
1472
|
+
rootState: props.context.rootState,
|
|
1473
|
+
rootSetState: props.context.rootSetState,
|
|
1474
|
+
localState: props.context.localState,
|
|
1475
|
+
context: props.context.context,
|
|
1476
|
+
stripPrefix: true,
|
|
1477
|
+
trackingContext: {
|
|
1478
|
+
apiKey: props.context.apiKey,
|
|
1479
|
+
canTrack: props.context.canTrack ?? true,
|
|
1480
|
+
contentId: props.context.content?.id,
|
|
1481
|
+
variationId: props.context.content?.testVariationId
|
|
1482
|
+
}
|
|
1483
|
+
})}
|
|
1484
|
+
>{props.children}</Dynamic_renderer_default></>;
|
|
1485
|
+
}
|
|
1486
|
+
var Block_wrapper_default = BlockWrapper;
|
|
1487
|
+
|
|
1488
|
+
// src/components/block/components/component-ref/component-ref.tsx
|
|
1489
|
+
import { Show as Show3, For, createSignal as createSignal3 } from "solid-js";
|
|
1490
|
+
import { Dynamic as Dynamic4 } from "solid-js/web";
|
|
1491
|
+
|
|
1492
|
+
// src/components/block/components/interactive-element.tsx
|
|
1493
|
+
import { Show as Show2, on, createEffect, createMemo as createMemo2, createSignal as createSignal2 } from "solid-js";
|
|
1494
|
+
import { Dynamic as Dynamic3 } from "solid-js/web";
|
|
1495
|
+
|
|
1496
|
+
// src/functions/is-previewing.ts
|
|
1497
|
+
function isPreviewing(search) {
|
|
1498
|
+
const searchToUse = search || (isBrowser() ? window.location.search : void 0);
|
|
1499
|
+
if (!searchToUse) {
|
|
1500
|
+
return false;
|
|
1541
1501
|
}
|
|
1502
|
+
const normalizedSearch = getSearchString(searchToUse);
|
|
1503
|
+
return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1506
|
+
// src/functions/register-component.ts
|
|
1507
|
+
var createRegisterComponentMessage = (info) => ({
|
|
1508
|
+
type: "builder.registerComponent",
|
|
1509
|
+
data: serializeIncludingFunctions(info)
|
|
1542
1510
|
});
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1511
|
+
var serializeFn = (fnValue) => {
|
|
1512
|
+
const fnStr = fnValue.toString().trim();
|
|
1513
|
+
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
1514
|
+
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
1515
|
+
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
1516
|
+
};
|
|
1517
|
+
function serializeIncludingFunctions(info) {
|
|
1518
|
+
return JSON.parse(JSON.stringify(info, (key, value) => {
|
|
1519
|
+
if (typeof value === "function") {
|
|
1520
|
+
return serializeFn(value);
|
|
1521
|
+
}
|
|
1522
|
+
return value;
|
|
1523
|
+
}));
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
// src/functions/register.ts
|
|
1527
|
+
var registry = {};
|
|
1528
|
+
function register(type, info) {
|
|
1529
|
+
if (type === "plugin") {
|
|
1530
|
+
info = serializeIncludingFunctions(info);
|
|
1550
1531
|
}
|
|
1551
|
-
|
|
1552
|
-
|
|
1532
|
+
let typeList = registry[type];
|
|
1533
|
+
if (!typeList) {
|
|
1534
|
+
typeList = registry[type] = [];
|
|
1553
1535
|
}
|
|
1554
|
-
|
|
1555
|
-
|
|
1536
|
+
typeList.push(info);
|
|
1537
|
+
if (isBrowser()) {
|
|
1538
|
+
const message = {
|
|
1539
|
+
type: "builder.register",
|
|
1540
|
+
data: {
|
|
1541
|
+
type,
|
|
1542
|
+
info
|
|
1543
|
+
}
|
|
1544
|
+
};
|
|
1545
|
+
try {
|
|
1546
|
+
parent.postMessage(message, "*");
|
|
1547
|
+
if (parent !== window) {
|
|
1548
|
+
window.postMessage(message, "*");
|
|
1549
|
+
}
|
|
1550
|
+
} catch (err) {
|
|
1551
|
+
}
|
|
1556
1552
|
}
|
|
1557
|
-
|
|
1558
|
-
|
|
1553
|
+
}
|
|
1554
|
+
function registerAction(action) {
|
|
1555
|
+
if (isBrowser()) {
|
|
1556
|
+
const actionClone = JSON.parse(JSON.stringify(action));
|
|
1557
|
+
if (action.action) {
|
|
1558
|
+
actionClone.action = action.action.toString();
|
|
1559
|
+
}
|
|
1560
|
+
window.parent?.postMessage({
|
|
1561
|
+
type: "builder.registerAction",
|
|
1562
|
+
data: actionClone
|
|
1563
|
+
}, "*");
|
|
1559
1564
|
}
|
|
1560
|
-
const baseUrl = apiHost || "https://cdn.builder.io";
|
|
1561
|
-
const url = `${baseUrl}/api/v1/track`;
|
|
1562
|
-
logFetch(url);
|
|
1563
|
-
return fetch(url, {
|
|
1564
|
-
method: "POST",
|
|
1565
|
-
body: JSON.stringify({
|
|
1566
|
-
events: [await createEvent(eventProps)]
|
|
1567
|
-
}),
|
|
1568
|
-
headers: {
|
|
1569
|
-
"content-type": "application/json",
|
|
1570
|
-
...getSdkHeaders()
|
|
1571
|
-
},
|
|
1572
|
-
mode: "cors"
|
|
1573
|
-
}).catch((err) => {
|
|
1574
|
-
});
|
|
1575
1565
|
}
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1566
|
+
|
|
1567
|
+
// src/functions/set-editor-settings.ts
|
|
1568
|
+
var settings = {};
|
|
1569
|
+
function setEditorSettings(newSettings) {
|
|
1570
|
+
if (isBrowser()) {
|
|
1571
|
+
Object.assign(settings, newSettings);
|
|
1572
|
+
const message = {
|
|
1573
|
+
type: "builder.settingsChange",
|
|
1574
|
+
data: settings
|
|
1575
|
+
};
|
|
1576
|
+
parent.postMessage(message, "*");
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1580
|
+
// src/functions/get-builder-search-params/index.ts
|
|
1581
|
+
var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
|
|
1582
|
+
var BUILDER_OPTIONS_PREFIX = "options.";
|
|
1583
|
+
var getBuilderSearchParams = (_options) => {
|
|
1584
|
+
if (!_options) {
|
|
1585
|
+
return {};
|
|
1586
|
+
}
|
|
1587
|
+
const options = normalizeSearchParams(_options);
|
|
1588
|
+
const newOptions = {};
|
|
1589
|
+
Object.keys(options).forEach((key) => {
|
|
1590
|
+
if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
|
|
1591
|
+
const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
|
|
1592
|
+
newOptions[trimmedKey] = options[key];
|
|
1593
|
+
}
|
|
1594
|
+
});
|
|
1595
|
+
return newOptions;
|
|
1596
|
+
};
|
|
1597
|
+
var getBuilderSearchParamsFromWindow = () => {
|
|
1598
|
+
if (!isBrowser()) {
|
|
1599
|
+
return {};
|
|
1600
|
+
}
|
|
1601
|
+
const searchParams = new URLSearchParams(window.location.search);
|
|
1602
|
+
return getBuilderSearchParams(searchParams);
|
|
1603
|
+
};
|
|
1580
1604
|
|
|
1581
1605
|
// src/functions/is-from-trusted-host.ts
|
|
1582
1606
|
var DEFAULT_TRUSTED_HOSTS = ["*.beta.builder.io", "beta.builder.io", "builder.io", "localhost", "qa.builder.io"];
|
|
@@ -2318,7 +2342,13 @@ function InteractiveElement(props) {
|
|
|
2318
2342
|
rootState: props.context.rootState,
|
|
2319
2343
|
rootSetState: props.context.rootSetState,
|
|
2320
2344
|
localState: props.context.localState,
|
|
2321
|
-
context: props.context.context
|
|
2345
|
+
context: props.context.context,
|
|
2346
|
+
trackingContext: {
|
|
2347
|
+
apiKey: props.context.apiKey,
|
|
2348
|
+
canTrack: props.context.canTrack ?? true,
|
|
2349
|
+
contentId: props.context.content?.id,
|
|
2350
|
+
variationId: props.context.content?.testVariationId
|
|
2351
|
+
}
|
|
2322
2352
|
})
|
|
2323
2353
|
} : {};
|
|
2324
2354
|
});
|