@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/edge/dev.js
CHANGED
|
@@ -221,6 +221,279 @@ var getUserAttributes = () => {
|
|
|
221
221
|
};
|
|
222
222
|
};
|
|
223
223
|
|
|
224
|
+
// src/constants/sdk-version.ts
|
|
225
|
+
var SDK_VERSION = "5.1.1";
|
|
226
|
+
|
|
227
|
+
// src/helpers/sdk-headers.ts
|
|
228
|
+
var getSdkHeaders = () => ({
|
|
229
|
+
"X-Builder-SDK": TARGET,
|
|
230
|
+
"X-Builder-SDK-GEN": "2",
|
|
231
|
+
"X-Builder-SDK-Version": SDK_VERSION
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// src/helpers/nullable.ts
|
|
235
|
+
var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
|
|
236
|
+
|
|
237
|
+
// src/helpers/url.ts
|
|
238
|
+
var getTopLevelDomain = (host) => {
|
|
239
|
+
if (host === "localhost" || host === "127.0.0.1") {
|
|
240
|
+
return host;
|
|
241
|
+
}
|
|
242
|
+
const parts = host.split(".");
|
|
243
|
+
if (parts.length > 2) {
|
|
244
|
+
return parts.slice(1).join(".");
|
|
245
|
+
}
|
|
246
|
+
return host;
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
// src/helpers/cookie.ts
|
|
250
|
+
var getCookieSync = ({
|
|
251
|
+
name,
|
|
252
|
+
canTrack
|
|
253
|
+
}) => {
|
|
254
|
+
try {
|
|
255
|
+
if (!canTrack) {
|
|
256
|
+
return void 0;
|
|
257
|
+
}
|
|
258
|
+
return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
|
|
259
|
+
} catch (err) {
|
|
260
|
+
logger.warn("[COOKIE] GET error: ", err?.message || err);
|
|
261
|
+
return void 0;
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
var getCookie = async (args) => getCookieSync(args);
|
|
265
|
+
var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
|
|
266
|
+
var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
|
|
267
|
+
var createCookieString = ({
|
|
268
|
+
name,
|
|
269
|
+
value,
|
|
270
|
+
expires
|
|
271
|
+
}) => {
|
|
272
|
+
const secure = isBrowser() ? location.protocol === "https:" : true;
|
|
273
|
+
const secureObj = secure ? SECURE_CONFIG : [[]];
|
|
274
|
+
const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
|
|
275
|
+
const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
|
|
276
|
+
const cookie = stringifyCookie(cookieValue);
|
|
277
|
+
return cookie;
|
|
278
|
+
};
|
|
279
|
+
var setCookie = async ({
|
|
280
|
+
name,
|
|
281
|
+
value,
|
|
282
|
+
expires,
|
|
283
|
+
canTrack
|
|
284
|
+
}) => {
|
|
285
|
+
try {
|
|
286
|
+
if (!canTrack) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
const cookie = createCookieString({
|
|
290
|
+
name,
|
|
291
|
+
value,
|
|
292
|
+
expires
|
|
293
|
+
});
|
|
294
|
+
document.cookie = cookie;
|
|
295
|
+
} catch (err) {
|
|
296
|
+
logger.warn("[COOKIE] SET error: ", err?.message || err);
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
// src/helpers/uuid.ts
|
|
301
|
+
function uuidv4() {
|
|
302
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
303
|
+
const r = Math.random() * 16 | 0, v2 = c == "x" ? r : r & 3 | 8;
|
|
304
|
+
return v2.toString(16);
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
function uuid() {
|
|
308
|
+
return uuidv4().replace(/-/g, "");
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// src/helpers/sessionId.ts
|
|
312
|
+
var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
|
|
313
|
+
var getSessionId = async ({
|
|
314
|
+
canTrack
|
|
315
|
+
}) => {
|
|
316
|
+
if (!canTrack) {
|
|
317
|
+
return void 0;
|
|
318
|
+
}
|
|
319
|
+
const sessionId = await getCookie({
|
|
320
|
+
name: SESSION_LOCAL_STORAGE_KEY,
|
|
321
|
+
canTrack
|
|
322
|
+
});
|
|
323
|
+
if (checkIsDefined(sessionId)) {
|
|
324
|
+
return sessionId;
|
|
325
|
+
} else {
|
|
326
|
+
const newSessionId = createSessionId();
|
|
327
|
+
setSessionId({
|
|
328
|
+
id: newSessionId,
|
|
329
|
+
canTrack
|
|
330
|
+
});
|
|
331
|
+
return newSessionId;
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
var createSessionId = () => uuid();
|
|
335
|
+
var setSessionId = ({
|
|
336
|
+
id: id2,
|
|
337
|
+
canTrack
|
|
338
|
+
}) => setCookie({
|
|
339
|
+
name: SESSION_LOCAL_STORAGE_KEY,
|
|
340
|
+
value: id2,
|
|
341
|
+
canTrack
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
// src/helpers/localStorage.ts
|
|
345
|
+
var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
|
|
346
|
+
var getLocalStorageItem = ({
|
|
347
|
+
key,
|
|
348
|
+
canTrack
|
|
349
|
+
}) => {
|
|
350
|
+
try {
|
|
351
|
+
if (canTrack) {
|
|
352
|
+
return getLocalStorage()?.getItem(key);
|
|
353
|
+
}
|
|
354
|
+
return void 0;
|
|
355
|
+
} catch (err) {
|
|
356
|
+
console.debug("[LocalStorage] GET error: ", err);
|
|
357
|
+
return void 0;
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
var setLocalStorageItem = ({
|
|
361
|
+
key,
|
|
362
|
+
canTrack,
|
|
363
|
+
value
|
|
364
|
+
}) => {
|
|
365
|
+
try {
|
|
366
|
+
if (canTrack) {
|
|
367
|
+
getLocalStorage()?.setItem(key, value);
|
|
368
|
+
}
|
|
369
|
+
} catch (err) {
|
|
370
|
+
console.debug("[LocalStorage] SET error: ", err);
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
// src/helpers/visitorId.ts
|
|
375
|
+
var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
|
|
376
|
+
var getVisitorId = ({
|
|
377
|
+
canTrack
|
|
378
|
+
}) => {
|
|
379
|
+
if (!canTrack) {
|
|
380
|
+
return void 0;
|
|
381
|
+
}
|
|
382
|
+
const visitorId = getLocalStorageItem({
|
|
383
|
+
key: VISITOR_LOCAL_STORAGE_KEY,
|
|
384
|
+
canTrack
|
|
385
|
+
});
|
|
386
|
+
if (checkIsDefined(visitorId)) {
|
|
387
|
+
return visitorId;
|
|
388
|
+
} else {
|
|
389
|
+
const newVisitorId = createVisitorId();
|
|
390
|
+
setVisitorId({
|
|
391
|
+
id: newVisitorId,
|
|
392
|
+
canTrack
|
|
393
|
+
});
|
|
394
|
+
return newVisitorId;
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
var createVisitorId = () => uuid();
|
|
398
|
+
var setVisitorId = ({
|
|
399
|
+
id: id2,
|
|
400
|
+
canTrack
|
|
401
|
+
}) => setLocalStorageItem({
|
|
402
|
+
key: VISITOR_LOCAL_STORAGE_KEY,
|
|
403
|
+
value: id2,
|
|
404
|
+
canTrack
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
// src/functions/log-fetch.ts
|
|
408
|
+
function logFetch(url) {
|
|
409
|
+
if (typeof process !== "undefined" && process.env?.DEBUG) {
|
|
410
|
+
if (String(process.env.DEBUG) == "true") {
|
|
411
|
+
logger.log(url);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// src/functions/track/index.ts
|
|
417
|
+
var getTrackingEventData = async ({
|
|
418
|
+
canTrack
|
|
419
|
+
}) => {
|
|
420
|
+
if (!canTrack) {
|
|
421
|
+
return {
|
|
422
|
+
visitorId: void 0,
|
|
423
|
+
sessionId: void 0
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
const sessionId = await getSessionId({
|
|
427
|
+
canTrack
|
|
428
|
+
});
|
|
429
|
+
const visitorId = getVisitorId({
|
|
430
|
+
canTrack
|
|
431
|
+
});
|
|
432
|
+
return {
|
|
433
|
+
sessionId,
|
|
434
|
+
visitorId
|
|
435
|
+
};
|
|
436
|
+
};
|
|
437
|
+
var createEvent = async ({
|
|
438
|
+
type: eventType,
|
|
439
|
+
canTrack,
|
|
440
|
+
apiKey,
|
|
441
|
+
metadata,
|
|
442
|
+
...properties
|
|
443
|
+
}) => ({
|
|
444
|
+
type: eventType,
|
|
445
|
+
data: {
|
|
446
|
+
...properties,
|
|
447
|
+
metadata: {
|
|
448
|
+
url: location.href,
|
|
449
|
+
...metadata
|
|
450
|
+
},
|
|
451
|
+
...await getTrackingEventData({
|
|
452
|
+
canTrack
|
|
453
|
+
}),
|
|
454
|
+
userAttributes: getUserAttributes(),
|
|
455
|
+
ownerId: apiKey
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
async function _track({
|
|
459
|
+
apiHost,
|
|
460
|
+
...eventProps
|
|
461
|
+
}) {
|
|
462
|
+
if (!eventProps.apiKey) {
|
|
463
|
+
logger.error("Missing API key for track call. Please provide your API key.");
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
if (!eventProps.canTrack) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
if (isEditing()) {
|
|
470
|
+
return;
|
|
471
|
+
}
|
|
472
|
+
if (!(isBrowser() || TARGET === "reactNative")) {
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
const baseUrl = apiHost || "https://cdn.builder.io";
|
|
476
|
+
const url = `${baseUrl}/api/v1/track`;
|
|
477
|
+
logFetch(url);
|
|
478
|
+
return fetch(url, {
|
|
479
|
+
method: "POST",
|
|
480
|
+
body: JSON.stringify({
|
|
481
|
+
events: [await createEvent(eventProps)]
|
|
482
|
+
}),
|
|
483
|
+
headers: {
|
|
484
|
+
"content-type": "application/json",
|
|
485
|
+
...getSdkHeaders()
|
|
486
|
+
},
|
|
487
|
+
mode: "cors"
|
|
488
|
+
}).catch((err) => {
|
|
489
|
+
console.error("Failed to track: ", err);
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
var track = (args) => _track({
|
|
493
|
+
...args,
|
|
494
|
+
canTrack: true
|
|
495
|
+
});
|
|
496
|
+
|
|
224
497
|
// src/functions/evaluate/helpers.ts
|
|
225
498
|
var getFunctionArguments = ({
|
|
226
499
|
builder,
|
|
@@ -237,11 +510,29 @@ var getFunctionArguments = ({
|
|
|
237
510
|
event
|
|
238
511
|
});
|
|
239
512
|
};
|
|
240
|
-
var getBuilderGlobals = () => ({
|
|
513
|
+
var getBuilderGlobals = (trackingContext) => ({
|
|
241
514
|
isEditing: isEditing(),
|
|
242
515
|
isBrowser: isBrowser(),
|
|
243
516
|
isServer: !isBrowser(),
|
|
244
|
-
getUserAttributes: () => getUserAttributes()
|
|
517
|
+
getUserAttributes: () => getUserAttributes(),
|
|
518
|
+
trackConversion: (amount, customProperties) => {
|
|
519
|
+
if (!trackingContext?.apiKey || trackingContext?.canTrack === false) {
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
_track({
|
|
523
|
+
type: "conversion",
|
|
524
|
+
apiKey: trackingContext.apiKey,
|
|
525
|
+
canTrack: trackingContext.canTrack ?? true,
|
|
526
|
+
contentId: trackingContext.contentId,
|
|
527
|
+
variationId: trackingContext.variationId !== trackingContext.contentId ? trackingContext.variationId : void 0,
|
|
528
|
+
metadata: {
|
|
529
|
+
...customProperties || {},
|
|
530
|
+
...amount !== void 0 ? {
|
|
531
|
+
amount
|
|
532
|
+
} : {}
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
}
|
|
245
536
|
});
|
|
246
537
|
var parseCode = (code, {
|
|
247
538
|
isExpression = true
|
|
@@ -3485,9 +3776,6 @@ theFunction();
|
|
|
3485
3776
|
return output;
|
|
3486
3777
|
};
|
|
3487
3778
|
|
|
3488
|
-
// src/helpers/nullable.ts
|
|
3489
|
-
var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
|
|
3490
|
-
|
|
3491
3779
|
// src/functions/is-node-runtime.ts
|
|
3492
3780
|
function isNodeRuntime() {
|
|
3493
3781
|
return typeof process !== "undefined" && checkIsDefined(process?.versions?.node);
|
|
@@ -3532,7 +3820,8 @@ function evaluate({
|
|
|
3532
3820
|
rootState,
|
|
3533
3821
|
rootSetState,
|
|
3534
3822
|
event,
|
|
3535
|
-
isExpression = true
|
|
3823
|
+
isExpression = true,
|
|
3824
|
+
trackingContext
|
|
3536
3825
|
}) {
|
|
3537
3826
|
if (code.trim() === "") {
|
|
3538
3827
|
return void 0;
|
|
@@ -3548,7 +3837,7 @@ function evaluate({
|
|
|
3548
3837
|
code: parseCode(code, {
|
|
3549
3838
|
isExpression
|
|
3550
3839
|
}),
|
|
3551
|
-
builder: getBuilderGlobals(),
|
|
3840
|
+
builder: getBuilderGlobals(trackingContext),
|
|
3552
3841
|
context,
|
|
3553
3842
|
event,
|
|
3554
3843
|
rootSetState,
|
|
@@ -4136,7 +4425,8 @@ var createEventHandler = (value, options) => (event) => evaluate({
|
|
|
4136
4425
|
rootState: options.rootState,
|
|
4137
4426
|
rootSetState: options.rootSetState,
|
|
4138
4427
|
event,
|
|
4139
|
-
isExpression: false
|
|
4428
|
+
isExpression: false,
|
|
4429
|
+
trackingContext: options.trackingContext
|
|
4140
4430
|
});
|
|
4141
4431
|
|
|
4142
4432
|
// src/functions/get-block-actions.ts
|
|
@@ -4217,395 +4507,131 @@ function BlockWrapper(props) {
|
|
|
4217
4507
|
rootSetState: props.context.rootSetState,
|
|
4218
4508
|
localState: props.context.localState,
|
|
4219
4509
|
context: props.context.context,
|
|
4220
|
-
stripPrefix: true
|
|
4510
|
+
stripPrefix: true,
|
|
4511
|
+
trackingContext: {
|
|
4512
|
+
apiKey: props.context.apiKey,
|
|
4513
|
+
canTrack: props.context.canTrack ?? true,
|
|
4514
|
+
contentId: props.context.content?.id,
|
|
4515
|
+
variationId: props.context.content?.testVariationId
|
|
4516
|
+
}
|
|
4221
4517
|
});
|
|
4222
4518
|
},
|
|
4223
4519
|
get children() {
|
|
4224
4520
|
return props.children;
|
|
4225
|
-
}
|
|
4226
|
-
});
|
|
4227
|
-
}
|
|
4228
|
-
var block_wrapper_default = BlockWrapper;
|
|
4229
|
-
|
|
4230
|
-
// src/functions/is-previewing.ts
|
|
4231
|
-
function isPreviewing(search) {
|
|
4232
|
-
const searchToUse = search || (isBrowser() ? window.location.search : void 0);
|
|
4233
|
-
if (!searchToUse) {
|
|
4234
|
-
return false;
|
|
4235
|
-
}
|
|
4236
|
-
const normalizedSearch = getSearchString(searchToUse);
|
|
4237
|
-
return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
|
|
4238
|
-
}
|
|
4239
|
-
|
|
4240
|
-
// src/functions/register-component.ts
|
|
4241
|
-
var createRegisterComponentMessage = (info) => ({
|
|
4242
|
-
type: "builder.registerComponent",
|
|
4243
|
-
data: serializeIncludingFunctions(info)
|
|
4244
|
-
});
|
|
4245
|
-
var serializeFn = (fnValue) => {
|
|
4246
|
-
const fnStr = fnValue.toString().trim();
|
|
4247
|
-
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
4248
|
-
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
4249
|
-
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
4250
|
-
};
|
|
4251
|
-
function serializeIncludingFunctions(info) {
|
|
4252
|
-
return JSON.parse(JSON.stringify(info, (key, value) => {
|
|
4253
|
-
if (typeof value === "function") {
|
|
4254
|
-
return serializeFn(value);
|
|
4255
|
-
}
|
|
4256
|
-
return value;
|
|
4257
|
-
}));
|
|
4258
|
-
}
|
|
4259
|
-
|
|
4260
|
-
// src/functions/register.ts
|
|
4261
|
-
var registry = {};
|
|
4262
|
-
function register(type, info) {
|
|
4263
|
-
if (type === "plugin") {
|
|
4264
|
-
info = serializeIncludingFunctions(info);
|
|
4265
|
-
}
|
|
4266
|
-
let typeList = registry[type];
|
|
4267
|
-
if (!typeList) {
|
|
4268
|
-
typeList = registry[type] = [];
|
|
4269
|
-
}
|
|
4270
|
-
typeList.push(info);
|
|
4271
|
-
if (isBrowser()) {
|
|
4272
|
-
const message = {
|
|
4273
|
-
type: "builder.register",
|
|
4274
|
-
data: {
|
|
4275
|
-
type,
|
|
4276
|
-
info
|
|
4277
|
-
}
|
|
4278
|
-
};
|
|
4279
|
-
try {
|
|
4280
|
-
parent.postMessage(message, "*");
|
|
4281
|
-
if (parent !== window) {
|
|
4282
|
-
window.postMessage(message, "*");
|
|
4283
|
-
}
|
|
4284
|
-
} catch (err) {
|
|
4285
|
-
console.debug("Could not postmessage", err);
|
|
4286
|
-
}
|
|
4287
|
-
}
|
|
4288
|
-
}
|
|
4289
|
-
function registerAction(action) {
|
|
4290
|
-
if (isBrowser()) {
|
|
4291
|
-
const actionClone = JSON.parse(JSON.stringify(action));
|
|
4292
|
-
if (action.action) {
|
|
4293
|
-
actionClone.action = action.action.toString();
|
|
4294
|
-
}
|
|
4295
|
-
window.parent?.postMessage({
|
|
4296
|
-
type: "builder.registerAction",
|
|
4297
|
-
data: actionClone
|
|
4298
|
-
}, "*");
|
|
4299
|
-
}
|
|
4300
|
-
}
|
|
4301
|
-
|
|
4302
|
-
// src/functions/set-editor-settings.ts
|
|
4303
|
-
var settings = {};
|
|
4304
|
-
function setEditorSettings(newSettings) {
|
|
4305
|
-
if (isBrowser()) {
|
|
4306
|
-
Object.assign(settings, newSettings);
|
|
4307
|
-
const message = {
|
|
4308
|
-
type: "builder.settingsChange",
|
|
4309
|
-
data: settings
|
|
4310
|
-
};
|
|
4311
|
-
parent.postMessage(message, "*");
|
|
4312
|
-
}
|
|
4313
|
-
}
|
|
4314
|
-
|
|
4315
|
-
// src/functions/get-builder-search-params/index.ts
|
|
4316
|
-
var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
|
|
4317
|
-
var BUILDER_OPTIONS_PREFIX = "options.";
|
|
4318
|
-
var getBuilderSearchParams = (_options) => {
|
|
4319
|
-
if (!_options) {
|
|
4320
|
-
return {};
|
|
4321
|
-
}
|
|
4322
|
-
const options = normalizeSearchParams(_options);
|
|
4323
|
-
const newOptions = {};
|
|
4324
|
-
Object.keys(options).forEach((key) => {
|
|
4325
|
-
if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
|
|
4326
|
-
const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
|
|
4327
|
-
newOptions[trimmedKey] = options[key];
|
|
4328
|
-
}
|
|
4329
|
-
});
|
|
4330
|
-
return newOptions;
|
|
4331
|
-
};
|
|
4332
|
-
var getBuilderSearchParamsFromWindow = () => {
|
|
4333
|
-
if (!isBrowser()) {
|
|
4334
|
-
return {};
|
|
4335
|
-
}
|
|
4336
|
-
const searchParams = new URLSearchParams(window.location.search);
|
|
4337
|
-
return getBuilderSearchParams(searchParams);
|
|
4338
|
-
};
|
|
4339
|
-
|
|
4340
|
-
// src/constants/sdk-version.ts
|
|
4341
|
-
var SDK_VERSION = "5.0.1";
|
|
4342
|
-
|
|
4343
|
-
// src/helpers/sdk-headers.ts
|
|
4344
|
-
var getSdkHeaders = () => ({
|
|
4345
|
-
"X-Builder-SDK": TARGET,
|
|
4346
|
-
"X-Builder-SDK-GEN": "2",
|
|
4347
|
-
"X-Builder-SDK-Version": SDK_VERSION
|
|
4348
|
-
});
|
|
4349
|
-
|
|
4350
|
-
// src/helpers/url.ts
|
|
4351
|
-
var getTopLevelDomain = (host) => {
|
|
4352
|
-
if (host === "localhost" || host === "127.0.0.1") {
|
|
4353
|
-
return host;
|
|
4354
|
-
}
|
|
4355
|
-
const parts = host.split(".");
|
|
4356
|
-
if (parts.length > 2) {
|
|
4357
|
-
return parts.slice(1).join(".");
|
|
4358
|
-
}
|
|
4359
|
-
return host;
|
|
4360
|
-
};
|
|
4361
|
-
|
|
4362
|
-
// src/helpers/cookie.ts
|
|
4363
|
-
var getCookieSync = ({
|
|
4364
|
-
name,
|
|
4365
|
-
canTrack
|
|
4366
|
-
}) => {
|
|
4367
|
-
try {
|
|
4368
|
-
if (!canTrack) {
|
|
4369
|
-
return void 0;
|
|
4370
|
-
}
|
|
4371
|
-
return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
|
|
4372
|
-
} catch (err) {
|
|
4373
|
-
logger.warn("[COOKIE] GET error: ", err?.message || err);
|
|
4374
|
-
return void 0;
|
|
4375
|
-
}
|
|
4376
|
-
};
|
|
4377
|
-
var getCookie = async (args) => getCookieSync(args);
|
|
4378
|
-
var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
|
|
4379
|
-
var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
|
|
4380
|
-
var createCookieString = ({
|
|
4381
|
-
name,
|
|
4382
|
-
value,
|
|
4383
|
-
expires
|
|
4384
|
-
}) => {
|
|
4385
|
-
const secure = isBrowser() ? location.protocol === "https:" : true;
|
|
4386
|
-
const secureObj = secure ? SECURE_CONFIG : [[]];
|
|
4387
|
-
const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
|
|
4388
|
-
const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
|
|
4389
|
-
const cookie = stringifyCookie(cookieValue);
|
|
4390
|
-
return cookie;
|
|
4391
|
-
};
|
|
4392
|
-
var setCookie = async ({
|
|
4393
|
-
name,
|
|
4394
|
-
value,
|
|
4395
|
-
expires,
|
|
4396
|
-
canTrack
|
|
4397
|
-
}) => {
|
|
4398
|
-
try {
|
|
4399
|
-
if (!canTrack) {
|
|
4400
|
-
return;
|
|
4401
|
-
}
|
|
4402
|
-
const cookie = createCookieString({
|
|
4403
|
-
name,
|
|
4404
|
-
value,
|
|
4405
|
-
expires
|
|
4406
|
-
});
|
|
4407
|
-
document.cookie = cookie;
|
|
4408
|
-
} catch (err) {
|
|
4409
|
-
logger.warn("[COOKIE] SET error: ", err?.message || err);
|
|
4410
|
-
}
|
|
4411
|
-
};
|
|
4412
|
-
|
|
4413
|
-
// src/helpers/uuid.ts
|
|
4414
|
-
function uuidv4() {
|
|
4415
|
-
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
4416
|
-
const r = Math.random() * 16 | 0, v2 = c == "x" ? r : r & 3 | 8;
|
|
4417
|
-
return v2.toString(16);
|
|
4418
|
-
});
|
|
4419
|
-
}
|
|
4420
|
-
function uuid() {
|
|
4421
|
-
return uuidv4().replace(/-/g, "");
|
|
4422
|
-
}
|
|
4423
|
-
|
|
4424
|
-
// src/helpers/sessionId.ts
|
|
4425
|
-
var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
|
|
4426
|
-
var getSessionId = async ({
|
|
4427
|
-
canTrack
|
|
4428
|
-
}) => {
|
|
4429
|
-
if (!canTrack) {
|
|
4430
|
-
return void 0;
|
|
4431
|
-
}
|
|
4432
|
-
const sessionId = await getCookie({
|
|
4433
|
-
name: SESSION_LOCAL_STORAGE_KEY,
|
|
4434
|
-
canTrack
|
|
4521
|
+
}
|
|
4435
4522
|
});
|
|
4436
|
-
|
|
4437
|
-
|
|
4438
|
-
} else {
|
|
4439
|
-
const newSessionId = createSessionId();
|
|
4440
|
-
setSessionId({
|
|
4441
|
-
id: newSessionId,
|
|
4442
|
-
canTrack
|
|
4443
|
-
});
|
|
4444
|
-
return newSessionId;
|
|
4445
|
-
}
|
|
4446
|
-
};
|
|
4447
|
-
var createSessionId = () => uuid();
|
|
4448
|
-
var setSessionId = ({
|
|
4449
|
-
id: id2,
|
|
4450
|
-
canTrack
|
|
4451
|
-
}) => setCookie({
|
|
4452
|
-
name: SESSION_LOCAL_STORAGE_KEY,
|
|
4453
|
-
value: id2,
|
|
4454
|
-
canTrack
|
|
4455
|
-
});
|
|
4523
|
+
}
|
|
4524
|
+
var block_wrapper_default = BlockWrapper;
|
|
4456
4525
|
|
|
4457
|
-
// src/
|
|
4458
|
-
|
|
4459
|
-
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
}) => {
|
|
4463
|
-
try {
|
|
4464
|
-
if (canTrack) {
|
|
4465
|
-
return getLocalStorage()?.getItem(key);
|
|
4466
|
-
}
|
|
4467
|
-
return void 0;
|
|
4468
|
-
} catch (err) {
|
|
4469
|
-
console.debug("[LocalStorage] GET error: ", err);
|
|
4470
|
-
return void 0;
|
|
4526
|
+
// src/functions/is-previewing.ts
|
|
4527
|
+
function isPreviewing(search) {
|
|
4528
|
+
const searchToUse = search || (isBrowser() ? window.location.search : void 0);
|
|
4529
|
+
if (!searchToUse) {
|
|
4530
|
+
return false;
|
|
4471
4531
|
}
|
|
4532
|
+
const normalizedSearch = getSearchString(searchToUse);
|
|
4533
|
+
return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
|
|
4534
|
+
}
|
|
4535
|
+
|
|
4536
|
+
// src/functions/register-component.ts
|
|
4537
|
+
var createRegisterComponentMessage = (info) => ({
|
|
4538
|
+
type: "builder.registerComponent",
|
|
4539
|
+
data: serializeIncludingFunctions(info)
|
|
4540
|
+
});
|
|
4541
|
+
var serializeFn = (fnValue) => {
|
|
4542
|
+
const fnStr = fnValue.toString().trim();
|
|
4543
|
+
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
4544
|
+
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
4545
|
+
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
4472
4546
|
};
|
|
4473
|
-
|
|
4474
|
-
key,
|
|
4475
|
-
|
|
4476
|
-
|
|
4477
|
-
}) => {
|
|
4478
|
-
try {
|
|
4479
|
-
if (canTrack) {
|
|
4480
|
-
getLocalStorage()?.setItem(key, value);
|
|
4547
|
+
function serializeIncludingFunctions(info) {
|
|
4548
|
+
return JSON.parse(JSON.stringify(info, (key, value) => {
|
|
4549
|
+
if (typeof value === "function") {
|
|
4550
|
+
return serializeFn(value);
|
|
4481
4551
|
}
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
};
|
|
4552
|
+
return value;
|
|
4553
|
+
}));
|
|
4554
|
+
}
|
|
4486
4555
|
|
|
4487
|
-
// src/
|
|
4488
|
-
var
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
if (!canTrack) {
|
|
4493
|
-
return void 0;
|
|
4556
|
+
// src/functions/register.ts
|
|
4557
|
+
var registry = {};
|
|
4558
|
+
function register(type, info) {
|
|
4559
|
+
if (type === "plugin") {
|
|
4560
|
+
info = serializeIncludingFunctions(info);
|
|
4494
4561
|
}
|
|
4495
|
-
|
|
4496
|
-
|
|
4497
|
-
|
|
4498
|
-
});
|
|
4499
|
-
if (checkIsDefined(visitorId)) {
|
|
4500
|
-
return visitorId;
|
|
4501
|
-
} else {
|
|
4502
|
-
const newVisitorId = createVisitorId();
|
|
4503
|
-
setVisitorId({
|
|
4504
|
-
id: newVisitorId,
|
|
4505
|
-
canTrack
|
|
4506
|
-
});
|
|
4507
|
-
return newVisitorId;
|
|
4562
|
+
let typeList = registry[type];
|
|
4563
|
+
if (!typeList) {
|
|
4564
|
+
typeList = registry[type] = [];
|
|
4508
4565
|
}
|
|
4509
|
-
|
|
4510
|
-
|
|
4511
|
-
|
|
4512
|
-
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
|
|
4517
|
-
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
|
|
4521
|
-
|
|
4522
|
-
|
|
4523
|
-
|
|
4524
|
-
|
|
4566
|
+
typeList.push(info);
|
|
4567
|
+
if (isBrowser()) {
|
|
4568
|
+
const message = {
|
|
4569
|
+
type: "builder.register",
|
|
4570
|
+
data: {
|
|
4571
|
+
type,
|
|
4572
|
+
info
|
|
4573
|
+
}
|
|
4574
|
+
};
|
|
4575
|
+
try {
|
|
4576
|
+
parent.postMessage(message, "*");
|
|
4577
|
+
if (parent !== window) {
|
|
4578
|
+
window.postMessage(message, "*");
|
|
4579
|
+
}
|
|
4580
|
+
} catch (err) {
|
|
4581
|
+
console.debug("Could not postmessage", err);
|
|
4582
|
+
}
|
|
4583
|
+
}
|
|
4584
|
+
}
|
|
4585
|
+
function registerAction(action) {
|
|
4586
|
+
if (isBrowser()) {
|
|
4587
|
+
const actionClone = JSON.parse(JSON.stringify(action));
|
|
4588
|
+
if (action.action) {
|
|
4589
|
+
actionClone.action = action.action.toString();
|
|
4525
4590
|
}
|
|
4591
|
+
window.parent?.postMessage({
|
|
4592
|
+
type: "builder.registerAction",
|
|
4593
|
+
data: actionClone
|
|
4594
|
+
}, "*");
|
|
4526
4595
|
}
|
|
4527
4596
|
}
|
|
4528
4597
|
|
|
4529
|
-
// src/functions/
|
|
4530
|
-
var
|
|
4531
|
-
|
|
4532
|
-
|
|
4533
|
-
|
|
4534
|
-
|
|
4535
|
-
|
|
4536
|
-
|
|
4598
|
+
// src/functions/set-editor-settings.ts
|
|
4599
|
+
var settings = {};
|
|
4600
|
+
function setEditorSettings(newSettings) {
|
|
4601
|
+
if (isBrowser()) {
|
|
4602
|
+
Object.assign(settings, newSettings);
|
|
4603
|
+
const message = {
|
|
4604
|
+
type: "builder.settingsChange",
|
|
4605
|
+
data: settings
|
|
4537
4606
|
};
|
|
4607
|
+
parent.postMessage(message, "*");
|
|
4538
4608
|
}
|
|
4539
|
-
|
|
4540
|
-
|
|
4541
|
-
|
|
4542
|
-
|
|
4543
|
-
|
|
4609
|
+
}
|
|
4610
|
+
|
|
4611
|
+
// src/functions/get-builder-search-params/index.ts
|
|
4612
|
+
var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
|
|
4613
|
+
var BUILDER_OPTIONS_PREFIX = "options.";
|
|
4614
|
+
var getBuilderSearchParams = (_options) => {
|
|
4615
|
+
if (!_options) {
|
|
4616
|
+
return {};
|
|
4617
|
+
}
|
|
4618
|
+
const options = normalizeSearchParams(_options);
|
|
4619
|
+
const newOptions = {};
|
|
4620
|
+
Object.keys(options).forEach((key) => {
|
|
4621
|
+
if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
|
|
4622
|
+
const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
|
|
4623
|
+
newOptions[trimmedKey] = options[key];
|
|
4624
|
+
}
|
|
4544
4625
|
});
|
|
4545
|
-
return
|
|
4546
|
-
sessionId,
|
|
4547
|
-
visitorId
|
|
4548
|
-
};
|
|
4626
|
+
return newOptions;
|
|
4549
4627
|
};
|
|
4550
|
-
var
|
|
4551
|
-
|
|
4552
|
-
|
|
4553
|
-
apiKey,
|
|
4554
|
-
metadata,
|
|
4555
|
-
...properties
|
|
4556
|
-
}) => ({
|
|
4557
|
-
type: eventType,
|
|
4558
|
-
data: {
|
|
4559
|
-
...properties,
|
|
4560
|
-
metadata: {
|
|
4561
|
-
url: location.href,
|
|
4562
|
-
...metadata
|
|
4563
|
-
},
|
|
4564
|
-
...await getTrackingEventData({
|
|
4565
|
-
canTrack
|
|
4566
|
-
}),
|
|
4567
|
-
userAttributes: getUserAttributes(),
|
|
4568
|
-
ownerId: apiKey
|
|
4569
|
-
}
|
|
4570
|
-
});
|
|
4571
|
-
async function _track({
|
|
4572
|
-
apiHost,
|
|
4573
|
-
...eventProps
|
|
4574
|
-
}) {
|
|
4575
|
-
if (!eventProps.apiKey) {
|
|
4576
|
-
logger.error("Missing API key for track call. Please provide your API key.");
|
|
4577
|
-
return;
|
|
4578
|
-
}
|
|
4579
|
-
if (!eventProps.canTrack) {
|
|
4580
|
-
return;
|
|
4581
|
-
}
|
|
4582
|
-
if (isEditing()) {
|
|
4583
|
-
return;
|
|
4584
|
-
}
|
|
4585
|
-
if (!(isBrowser() || TARGET === "reactNative")) {
|
|
4586
|
-
return;
|
|
4628
|
+
var getBuilderSearchParamsFromWindow = () => {
|
|
4629
|
+
if (!isBrowser()) {
|
|
4630
|
+
return {};
|
|
4587
4631
|
}
|
|
4588
|
-
const
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
return fetch(url, {
|
|
4592
|
-
method: "POST",
|
|
4593
|
-
body: JSON.stringify({
|
|
4594
|
-
events: [await createEvent(eventProps)]
|
|
4595
|
-
}),
|
|
4596
|
-
headers: {
|
|
4597
|
-
"content-type": "application/json",
|
|
4598
|
-
...getSdkHeaders()
|
|
4599
|
-
},
|
|
4600
|
-
mode: "cors"
|
|
4601
|
-
}).catch((err) => {
|
|
4602
|
-
console.error("Failed to track: ", err);
|
|
4603
|
-
});
|
|
4604
|
-
}
|
|
4605
|
-
var track = (args) => _track({
|
|
4606
|
-
...args,
|
|
4607
|
-
canTrack: true
|
|
4608
|
-
});
|
|
4632
|
+
const searchParams = new URLSearchParams(window.location.search);
|
|
4633
|
+
return getBuilderSearchParams(searchParams);
|
|
4634
|
+
};
|
|
4609
4635
|
|
|
4610
4636
|
// src/functions/is-from-trusted-host.ts
|
|
4611
4637
|
var DEFAULT_TRUSTED_HOSTS = ["*.beta.builder.io", "beta.builder.io", "builder.io", "localhost", "qa.builder.io"];
|
|
@@ -5348,7 +5374,13 @@ function InteractiveElement(props) {
|
|
|
5348
5374
|
rootState: props.context.rootState,
|
|
5349
5375
|
rootSetState: props.context.rootSetState,
|
|
5350
5376
|
localState: props.context.localState,
|
|
5351
|
-
context: props.context.context
|
|
5377
|
+
context: props.context.context,
|
|
5378
|
+
trackingContext: {
|
|
5379
|
+
apiKey: props.context.apiKey,
|
|
5380
|
+
canTrack: props.context.canTrack ?? true,
|
|
5381
|
+
contentId: props.context.content?.id,
|
|
5382
|
+
variationId: props.context.content?.testVariationId
|
|
5383
|
+
}
|
|
5352
5384
|
})
|
|
5353
5385
|
} : {};
|
|
5354
5386
|
});
|