@builder.io/sdk-solid 5.1.0 → 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 +409 -377
- package/lib/node/dev.jsx +974 -942
- package/lib/node/index.js +775 -743
- package/lib/node/index.jsx +776 -744
- package/package.json +1 -1
package/lib/node/dev.js
CHANGED
|
@@ -216,6 +216,279 @@ var getUserAttributes = () => {
|
|
|
216
216
|
};
|
|
217
217
|
};
|
|
218
218
|
|
|
219
|
+
// src/constants/sdk-version.ts
|
|
220
|
+
var SDK_VERSION = "5.1.1";
|
|
221
|
+
|
|
222
|
+
// src/helpers/sdk-headers.ts
|
|
223
|
+
var getSdkHeaders = () => ({
|
|
224
|
+
"X-Builder-SDK": TARGET,
|
|
225
|
+
"X-Builder-SDK-GEN": "2",
|
|
226
|
+
"X-Builder-SDK-Version": SDK_VERSION
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
// src/helpers/nullable.ts
|
|
230
|
+
var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
|
|
231
|
+
|
|
232
|
+
// src/helpers/url.ts
|
|
233
|
+
var getTopLevelDomain = (host) => {
|
|
234
|
+
if (host === "localhost" || host === "127.0.0.1") {
|
|
235
|
+
return host;
|
|
236
|
+
}
|
|
237
|
+
const parts = host.split(".");
|
|
238
|
+
if (parts.length > 2) {
|
|
239
|
+
return parts.slice(1).join(".");
|
|
240
|
+
}
|
|
241
|
+
return host;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
// src/helpers/cookie.ts
|
|
245
|
+
var getCookieSync = ({
|
|
246
|
+
name,
|
|
247
|
+
canTrack
|
|
248
|
+
}) => {
|
|
249
|
+
try {
|
|
250
|
+
if (!canTrack) {
|
|
251
|
+
return void 0;
|
|
252
|
+
}
|
|
253
|
+
return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
|
|
254
|
+
} catch (err) {
|
|
255
|
+
logger.warn("[COOKIE] GET error: ", err?.message || err);
|
|
256
|
+
return void 0;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
var getCookie = async (args) => getCookieSync(args);
|
|
260
|
+
var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
|
|
261
|
+
var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
|
|
262
|
+
var createCookieString = ({
|
|
263
|
+
name,
|
|
264
|
+
value,
|
|
265
|
+
expires
|
|
266
|
+
}) => {
|
|
267
|
+
const secure = isBrowser() ? location.protocol === "https:" : true;
|
|
268
|
+
const secureObj = secure ? SECURE_CONFIG : [[]];
|
|
269
|
+
const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
|
|
270
|
+
const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
|
|
271
|
+
const cookie = stringifyCookie(cookieValue);
|
|
272
|
+
return cookie;
|
|
273
|
+
};
|
|
274
|
+
var setCookie = async ({
|
|
275
|
+
name,
|
|
276
|
+
value,
|
|
277
|
+
expires,
|
|
278
|
+
canTrack
|
|
279
|
+
}) => {
|
|
280
|
+
try {
|
|
281
|
+
if (!canTrack) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const cookie = createCookieString({
|
|
285
|
+
name,
|
|
286
|
+
value,
|
|
287
|
+
expires
|
|
288
|
+
});
|
|
289
|
+
document.cookie = cookie;
|
|
290
|
+
} catch (err) {
|
|
291
|
+
logger.warn("[COOKIE] SET error: ", err?.message || err);
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
// src/helpers/uuid.ts
|
|
296
|
+
function uuidv4() {
|
|
297
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
298
|
+
const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
|
|
299
|
+
return v.toString(16);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
function uuid() {
|
|
303
|
+
return uuidv4().replace(/-/g, "");
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// src/helpers/sessionId.ts
|
|
307
|
+
var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
|
|
308
|
+
var getSessionId = async ({
|
|
309
|
+
canTrack
|
|
310
|
+
}) => {
|
|
311
|
+
if (!canTrack) {
|
|
312
|
+
return void 0;
|
|
313
|
+
}
|
|
314
|
+
const sessionId = await getCookie({
|
|
315
|
+
name: SESSION_LOCAL_STORAGE_KEY,
|
|
316
|
+
canTrack
|
|
317
|
+
});
|
|
318
|
+
if (checkIsDefined(sessionId)) {
|
|
319
|
+
return sessionId;
|
|
320
|
+
} else {
|
|
321
|
+
const newSessionId = createSessionId();
|
|
322
|
+
setSessionId({
|
|
323
|
+
id: newSessionId,
|
|
324
|
+
canTrack
|
|
325
|
+
});
|
|
326
|
+
return newSessionId;
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
var createSessionId = () => uuid();
|
|
330
|
+
var setSessionId = ({
|
|
331
|
+
id,
|
|
332
|
+
canTrack
|
|
333
|
+
}) => setCookie({
|
|
334
|
+
name: SESSION_LOCAL_STORAGE_KEY,
|
|
335
|
+
value: id,
|
|
336
|
+
canTrack
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
// src/helpers/localStorage.ts
|
|
340
|
+
var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
|
|
341
|
+
var getLocalStorageItem = ({
|
|
342
|
+
key,
|
|
343
|
+
canTrack
|
|
344
|
+
}) => {
|
|
345
|
+
try {
|
|
346
|
+
if (canTrack) {
|
|
347
|
+
return getLocalStorage()?.getItem(key);
|
|
348
|
+
}
|
|
349
|
+
return void 0;
|
|
350
|
+
} catch (err) {
|
|
351
|
+
console.debug("[LocalStorage] GET error: ", err);
|
|
352
|
+
return void 0;
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
var setLocalStorageItem = ({
|
|
356
|
+
key,
|
|
357
|
+
canTrack,
|
|
358
|
+
value
|
|
359
|
+
}) => {
|
|
360
|
+
try {
|
|
361
|
+
if (canTrack) {
|
|
362
|
+
getLocalStorage()?.setItem(key, value);
|
|
363
|
+
}
|
|
364
|
+
} catch (err) {
|
|
365
|
+
console.debug("[LocalStorage] SET error: ", err);
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
// src/helpers/visitorId.ts
|
|
370
|
+
var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
|
|
371
|
+
var getVisitorId = ({
|
|
372
|
+
canTrack
|
|
373
|
+
}) => {
|
|
374
|
+
if (!canTrack) {
|
|
375
|
+
return void 0;
|
|
376
|
+
}
|
|
377
|
+
const visitorId = getLocalStorageItem({
|
|
378
|
+
key: VISITOR_LOCAL_STORAGE_KEY,
|
|
379
|
+
canTrack
|
|
380
|
+
});
|
|
381
|
+
if (checkIsDefined(visitorId)) {
|
|
382
|
+
return visitorId;
|
|
383
|
+
} else {
|
|
384
|
+
const newVisitorId = createVisitorId();
|
|
385
|
+
setVisitorId({
|
|
386
|
+
id: newVisitorId,
|
|
387
|
+
canTrack
|
|
388
|
+
});
|
|
389
|
+
return newVisitorId;
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
var createVisitorId = () => uuid();
|
|
393
|
+
var setVisitorId = ({
|
|
394
|
+
id,
|
|
395
|
+
canTrack
|
|
396
|
+
}) => setLocalStorageItem({
|
|
397
|
+
key: VISITOR_LOCAL_STORAGE_KEY,
|
|
398
|
+
value: id,
|
|
399
|
+
canTrack
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
// src/functions/log-fetch.ts
|
|
403
|
+
function logFetch(url) {
|
|
404
|
+
if (typeof process !== "undefined" && process.env?.DEBUG) {
|
|
405
|
+
if (String(process.env.DEBUG) == "true") {
|
|
406
|
+
logger.log(url);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// src/functions/track/index.ts
|
|
412
|
+
var getTrackingEventData = async ({
|
|
413
|
+
canTrack
|
|
414
|
+
}) => {
|
|
415
|
+
if (!canTrack) {
|
|
416
|
+
return {
|
|
417
|
+
visitorId: void 0,
|
|
418
|
+
sessionId: void 0
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
const sessionId = await getSessionId({
|
|
422
|
+
canTrack
|
|
423
|
+
});
|
|
424
|
+
const visitorId = getVisitorId({
|
|
425
|
+
canTrack
|
|
426
|
+
});
|
|
427
|
+
return {
|
|
428
|
+
sessionId,
|
|
429
|
+
visitorId
|
|
430
|
+
};
|
|
431
|
+
};
|
|
432
|
+
var createEvent = async ({
|
|
433
|
+
type: eventType,
|
|
434
|
+
canTrack,
|
|
435
|
+
apiKey,
|
|
436
|
+
metadata,
|
|
437
|
+
...properties
|
|
438
|
+
}) => ({
|
|
439
|
+
type: eventType,
|
|
440
|
+
data: {
|
|
441
|
+
...properties,
|
|
442
|
+
metadata: {
|
|
443
|
+
url: location.href,
|
|
444
|
+
...metadata
|
|
445
|
+
},
|
|
446
|
+
...await getTrackingEventData({
|
|
447
|
+
canTrack
|
|
448
|
+
}),
|
|
449
|
+
userAttributes: getUserAttributes(),
|
|
450
|
+
ownerId: apiKey
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
async function _track({
|
|
454
|
+
apiHost,
|
|
455
|
+
...eventProps
|
|
456
|
+
}) {
|
|
457
|
+
if (!eventProps.apiKey) {
|
|
458
|
+
logger.error("Missing API key for track call. Please provide your API key.");
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
if (!eventProps.canTrack) {
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
if (isEditing()) {
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
if (!(isBrowser() || TARGET === "reactNative")) {
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
const baseUrl = apiHost || "https://cdn.builder.io";
|
|
471
|
+
const url = `${baseUrl}/api/v1/track`;
|
|
472
|
+
logFetch(url);
|
|
473
|
+
return fetch(url, {
|
|
474
|
+
method: "POST",
|
|
475
|
+
body: JSON.stringify({
|
|
476
|
+
events: [await createEvent(eventProps)]
|
|
477
|
+
}),
|
|
478
|
+
headers: {
|
|
479
|
+
"content-type": "application/json",
|
|
480
|
+
...getSdkHeaders()
|
|
481
|
+
},
|
|
482
|
+
mode: "cors"
|
|
483
|
+
}).catch((err) => {
|
|
484
|
+
console.error("Failed to track: ", err);
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
var track = (args) => _track({
|
|
488
|
+
...args,
|
|
489
|
+
canTrack: true
|
|
490
|
+
});
|
|
491
|
+
|
|
219
492
|
// src/functions/evaluate/helpers.ts
|
|
220
493
|
var getFunctionArguments = ({
|
|
221
494
|
builder,
|
|
@@ -232,11 +505,29 @@ var getFunctionArguments = ({
|
|
|
232
505
|
event
|
|
233
506
|
});
|
|
234
507
|
};
|
|
235
|
-
var getBuilderGlobals = () => ({
|
|
508
|
+
var getBuilderGlobals = (trackingContext) => ({
|
|
236
509
|
isEditing: isEditing(),
|
|
237
510
|
isBrowser: isBrowser(),
|
|
238
511
|
isServer: !isBrowser(),
|
|
239
|
-
getUserAttributes: () => getUserAttributes()
|
|
512
|
+
getUserAttributes: () => getUserAttributes(),
|
|
513
|
+
trackConversion: (amount, customProperties) => {
|
|
514
|
+
if (!trackingContext?.apiKey || trackingContext?.canTrack === false) {
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
_track({
|
|
518
|
+
type: "conversion",
|
|
519
|
+
apiKey: trackingContext.apiKey,
|
|
520
|
+
canTrack: trackingContext.canTrack ?? true,
|
|
521
|
+
contentId: trackingContext.contentId,
|
|
522
|
+
variationId: trackingContext.variationId !== trackingContext.contentId ? trackingContext.variationId : void 0,
|
|
523
|
+
metadata: {
|
|
524
|
+
...customProperties || {},
|
|
525
|
+
...amount !== void 0 ? {
|
|
526
|
+
amount
|
|
527
|
+
} : {}
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
}
|
|
240
531
|
});
|
|
241
532
|
var parseCode = (code, {
|
|
242
533
|
isExpression = true
|
|
@@ -484,9 +775,6 @@ var runInNode = ({
|
|
|
484
775
|
}
|
|
485
776
|
};
|
|
486
777
|
|
|
487
|
-
// src/helpers/nullable.ts
|
|
488
|
-
var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
|
|
489
|
-
|
|
490
778
|
// src/functions/is-node-runtime.ts
|
|
491
779
|
function isNodeRuntime() {
|
|
492
780
|
return typeof process !== "undefined" && checkIsDefined(process?.versions?.node);
|
|
@@ -531,7 +819,8 @@ function evaluate({
|
|
|
531
819
|
rootState,
|
|
532
820
|
rootSetState,
|
|
533
821
|
event,
|
|
534
|
-
isExpression = true
|
|
822
|
+
isExpression = true,
|
|
823
|
+
trackingContext
|
|
535
824
|
}) {
|
|
536
825
|
if (code.trim() === "") {
|
|
537
826
|
return void 0;
|
|
@@ -547,7 +836,7 @@ function evaluate({
|
|
|
547
836
|
code: parseCode(code, {
|
|
548
837
|
isExpression
|
|
549
838
|
}),
|
|
550
|
-
builder: getBuilderGlobals(),
|
|
839
|
+
builder: getBuilderGlobals(trackingContext),
|
|
551
840
|
context,
|
|
552
841
|
event,
|
|
553
842
|
rootSetState,
|
|
@@ -1122,7 +1411,8 @@ var createEventHandler = (value, options) => (event) => evaluate({
|
|
|
1122
1411
|
rootState: options.rootState,
|
|
1123
1412
|
rootSetState: options.rootSetState,
|
|
1124
1413
|
event,
|
|
1125
|
-
isExpression: false
|
|
1414
|
+
isExpression: false,
|
|
1415
|
+
trackingContext: options.trackingContext
|
|
1126
1416
|
});
|
|
1127
1417
|
|
|
1128
1418
|
// src/functions/get-block-actions.ts
|
|
@@ -1203,395 +1493,131 @@ function BlockWrapper(props) {
|
|
|
1203
1493
|
rootSetState: props.context.rootSetState,
|
|
1204
1494
|
localState: props.context.localState,
|
|
1205
1495
|
context: props.context.context,
|
|
1206
|
-
stripPrefix: true
|
|
1496
|
+
stripPrefix: true,
|
|
1497
|
+
trackingContext: {
|
|
1498
|
+
apiKey: props.context.apiKey,
|
|
1499
|
+
canTrack: props.context.canTrack ?? true,
|
|
1500
|
+
contentId: props.context.content?.id,
|
|
1501
|
+
variationId: props.context.content?.testVariationId
|
|
1502
|
+
}
|
|
1207
1503
|
});
|
|
1208
1504
|
},
|
|
1209
1505
|
get children() {
|
|
1210
1506
|
return props.children;
|
|
1211
|
-
}
|
|
1212
|
-
});
|
|
1213
|
-
}
|
|
1214
|
-
var block_wrapper_default = BlockWrapper;
|
|
1215
|
-
|
|
1216
|
-
// src/functions/is-previewing.ts
|
|
1217
|
-
function isPreviewing(search) {
|
|
1218
|
-
const searchToUse = search || (isBrowser() ? window.location.search : void 0);
|
|
1219
|
-
if (!searchToUse) {
|
|
1220
|
-
return false;
|
|
1221
|
-
}
|
|
1222
|
-
const normalizedSearch = getSearchString(searchToUse);
|
|
1223
|
-
return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
|
|
1224
|
-
}
|
|
1225
|
-
|
|
1226
|
-
// src/functions/register-component.ts
|
|
1227
|
-
var createRegisterComponentMessage = (info) => ({
|
|
1228
|
-
type: "builder.registerComponent",
|
|
1229
|
-
data: serializeIncludingFunctions(info)
|
|
1230
|
-
});
|
|
1231
|
-
var serializeFn = (fnValue) => {
|
|
1232
|
-
const fnStr = fnValue.toString().trim();
|
|
1233
|
-
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
1234
|
-
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
1235
|
-
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
1236
|
-
};
|
|
1237
|
-
function serializeIncludingFunctions(info) {
|
|
1238
|
-
return JSON.parse(JSON.stringify(info, (key, value) => {
|
|
1239
|
-
if (typeof value === "function") {
|
|
1240
|
-
return serializeFn(value);
|
|
1241
|
-
}
|
|
1242
|
-
return value;
|
|
1243
|
-
}));
|
|
1244
|
-
}
|
|
1245
|
-
|
|
1246
|
-
// src/functions/register.ts
|
|
1247
|
-
var registry = {};
|
|
1248
|
-
function register(type, info) {
|
|
1249
|
-
if (type === "plugin") {
|
|
1250
|
-
info = serializeIncludingFunctions(info);
|
|
1251
|
-
}
|
|
1252
|
-
let typeList = registry[type];
|
|
1253
|
-
if (!typeList) {
|
|
1254
|
-
typeList = registry[type] = [];
|
|
1255
|
-
}
|
|
1256
|
-
typeList.push(info);
|
|
1257
|
-
if (isBrowser()) {
|
|
1258
|
-
const message = {
|
|
1259
|
-
type: "builder.register",
|
|
1260
|
-
data: {
|
|
1261
|
-
type,
|
|
1262
|
-
info
|
|
1263
|
-
}
|
|
1264
|
-
};
|
|
1265
|
-
try {
|
|
1266
|
-
parent.postMessage(message, "*");
|
|
1267
|
-
if (parent !== window) {
|
|
1268
|
-
window.postMessage(message, "*");
|
|
1269
|
-
}
|
|
1270
|
-
} catch (err) {
|
|
1271
|
-
console.debug("Could not postmessage", err);
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
|
-
}
|
|
1275
|
-
function registerAction(action) {
|
|
1276
|
-
if (isBrowser()) {
|
|
1277
|
-
const actionClone = JSON.parse(JSON.stringify(action));
|
|
1278
|
-
if (action.action) {
|
|
1279
|
-
actionClone.action = action.action.toString();
|
|
1280
|
-
}
|
|
1281
|
-
window.parent?.postMessage({
|
|
1282
|
-
type: "builder.registerAction",
|
|
1283
|
-
data: actionClone
|
|
1284
|
-
}, "*");
|
|
1285
|
-
}
|
|
1286
|
-
}
|
|
1287
|
-
|
|
1288
|
-
// src/functions/set-editor-settings.ts
|
|
1289
|
-
var settings = {};
|
|
1290
|
-
function setEditorSettings(newSettings) {
|
|
1291
|
-
if (isBrowser()) {
|
|
1292
|
-
Object.assign(settings, newSettings);
|
|
1293
|
-
const message = {
|
|
1294
|
-
type: "builder.settingsChange",
|
|
1295
|
-
data: settings
|
|
1296
|
-
};
|
|
1297
|
-
parent.postMessage(message, "*");
|
|
1298
|
-
}
|
|
1299
|
-
}
|
|
1300
|
-
|
|
1301
|
-
// src/functions/get-builder-search-params/index.ts
|
|
1302
|
-
var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
|
|
1303
|
-
var BUILDER_OPTIONS_PREFIX = "options.";
|
|
1304
|
-
var getBuilderSearchParams = (_options) => {
|
|
1305
|
-
if (!_options) {
|
|
1306
|
-
return {};
|
|
1307
|
-
}
|
|
1308
|
-
const options = normalizeSearchParams(_options);
|
|
1309
|
-
const newOptions = {};
|
|
1310
|
-
Object.keys(options).forEach((key) => {
|
|
1311
|
-
if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
|
|
1312
|
-
const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
|
|
1313
|
-
newOptions[trimmedKey] = options[key];
|
|
1314
|
-
}
|
|
1315
|
-
});
|
|
1316
|
-
return newOptions;
|
|
1317
|
-
};
|
|
1318
|
-
var getBuilderSearchParamsFromWindow = () => {
|
|
1319
|
-
if (!isBrowser()) {
|
|
1320
|
-
return {};
|
|
1321
|
-
}
|
|
1322
|
-
const searchParams = new URLSearchParams(window.location.search);
|
|
1323
|
-
return getBuilderSearchParams(searchParams);
|
|
1324
|
-
};
|
|
1325
|
-
|
|
1326
|
-
// src/constants/sdk-version.ts
|
|
1327
|
-
var SDK_VERSION = "5.1.0";
|
|
1328
|
-
|
|
1329
|
-
// src/helpers/sdk-headers.ts
|
|
1330
|
-
var getSdkHeaders = () => ({
|
|
1331
|
-
"X-Builder-SDK": TARGET,
|
|
1332
|
-
"X-Builder-SDK-GEN": "2",
|
|
1333
|
-
"X-Builder-SDK-Version": SDK_VERSION
|
|
1334
|
-
});
|
|
1335
|
-
|
|
1336
|
-
// src/helpers/url.ts
|
|
1337
|
-
var getTopLevelDomain = (host) => {
|
|
1338
|
-
if (host === "localhost" || host === "127.0.0.1") {
|
|
1339
|
-
return host;
|
|
1340
|
-
}
|
|
1341
|
-
const parts = host.split(".");
|
|
1342
|
-
if (parts.length > 2) {
|
|
1343
|
-
return parts.slice(1).join(".");
|
|
1344
|
-
}
|
|
1345
|
-
return host;
|
|
1346
|
-
};
|
|
1347
|
-
|
|
1348
|
-
// src/helpers/cookie.ts
|
|
1349
|
-
var getCookieSync = ({
|
|
1350
|
-
name,
|
|
1351
|
-
canTrack
|
|
1352
|
-
}) => {
|
|
1353
|
-
try {
|
|
1354
|
-
if (!canTrack) {
|
|
1355
|
-
return void 0;
|
|
1356
|
-
}
|
|
1357
|
-
return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
|
|
1358
|
-
} catch (err) {
|
|
1359
|
-
logger.warn("[COOKIE] GET error: ", err?.message || err);
|
|
1360
|
-
return void 0;
|
|
1361
|
-
}
|
|
1362
|
-
};
|
|
1363
|
-
var getCookie = async (args) => getCookieSync(args);
|
|
1364
|
-
var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
|
|
1365
|
-
var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
|
|
1366
|
-
var createCookieString = ({
|
|
1367
|
-
name,
|
|
1368
|
-
value,
|
|
1369
|
-
expires
|
|
1370
|
-
}) => {
|
|
1371
|
-
const secure = isBrowser() ? location.protocol === "https:" : true;
|
|
1372
|
-
const secureObj = secure ? SECURE_CONFIG : [[]];
|
|
1373
|
-
const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
|
|
1374
|
-
const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
|
|
1375
|
-
const cookie = stringifyCookie(cookieValue);
|
|
1376
|
-
return cookie;
|
|
1377
|
-
};
|
|
1378
|
-
var setCookie = async ({
|
|
1379
|
-
name,
|
|
1380
|
-
value,
|
|
1381
|
-
expires,
|
|
1382
|
-
canTrack
|
|
1383
|
-
}) => {
|
|
1384
|
-
try {
|
|
1385
|
-
if (!canTrack) {
|
|
1386
|
-
return;
|
|
1387
|
-
}
|
|
1388
|
-
const cookie = createCookieString({
|
|
1389
|
-
name,
|
|
1390
|
-
value,
|
|
1391
|
-
expires
|
|
1392
|
-
});
|
|
1393
|
-
document.cookie = cookie;
|
|
1394
|
-
} catch (err) {
|
|
1395
|
-
logger.warn("[COOKIE] SET error: ", err?.message || err);
|
|
1396
|
-
}
|
|
1397
|
-
};
|
|
1398
|
-
|
|
1399
|
-
// src/helpers/uuid.ts
|
|
1400
|
-
function uuidv4() {
|
|
1401
|
-
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
1402
|
-
const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
|
|
1403
|
-
return v.toString(16);
|
|
1404
|
-
});
|
|
1405
|
-
}
|
|
1406
|
-
function uuid() {
|
|
1407
|
-
return uuidv4().replace(/-/g, "");
|
|
1408
|
-
}
|
|
1409
|
-
|
|
1410
|
-
// src/helpers/sessionId.ts
|
|
1411
|
-
var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
|
|
1412
|
-
var getSessionId = async ({
|
|
1413
|
-
canTrack
|
|
1414
|
-
}) => {
|
|
1415
|
-
if (!canTrack) {
|
|
1416
|
-
return void 0;
|
|
1417
|
-
}
|
|
1418
|
-
const sessionId = await getCookie({
|
|
1419
|
-
name: SESSION_LOCAL_STORAGE_KEY,
|
|
1420
|
-
canTrack
|
|
1507
|
+
}
|
|
1421
1508
|
});
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
} else {
|
|
1425
|
-
const newSessionId = createSessionId();
|
|
1426
|
-
setSessionId({
|
|
1427
|
-
id: newSessionId,
|
|
1428
|
-
canTrack
|
|
1429
|
-
});
|
|
1430
|
-
return newSessionId;
|
|
1431
|
-
}
|
|
1432
|
-
};
|
|
1433
|
-
var createSessionId = () => uuid();
|
|
1434
|
-
var setSessionId = ({
|
|
1435
|
-
id,
|
|
1436
|
-
canTrack
|
|
1437
|
-
}) => setCookie({
|
|
1438
|
-
name: SESSION_LOCAL_STORAGE_KEY,
|
|
1439
|
-
value: id,
|
|
1440
|
-
canTrack
|
|
1441
|
-
});
|
|
1509
|
+
}
|
|
1510
|
+
var block_wrapper_default = BlockWrapper;
|
|
1442
1511
|
|
|
1443
|
-
// src/
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
}) => {
|
|
1449
|
-
try {
|
|
1450
|
-
if (canTrack) {
|
|
1451
|
-
return getLocalStorage()?.getItem(key);
|
|
1452
|
-
}
|
|
1453
|
-
return void 0;
|
|
1454
|
-
} catch (err) {
|
|
1455
|
-
console.debug("[LocalStorage] GET error: ", err);
|
|
1456
|
-
return void 0;
|
|
1512
|
+
// src/functions/is-previewing.ts
|
|
1513
|
+
function isPreviewing(search) {
|
|
1514
|
+
const searchToUse = search || (isBrowser() ? window.location.search : void 0);
|
|
1515
|
+
if (!searchToUse) {
|
|
1516
|
+
return false;
|
|
1457
1517
|
}
|
|
1518
|
+
const normalizedSearch = getSearchString(searchToUse);
|
|
1519
|
+
return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
// src/functions/register-component.ts
|
|
1523
|
+
var createRegisterComponentMessage = (info) => ({
|
|
1524
|
+
type: "builder.registerComponent",
|
|
1525
|
+
data: serializeIncludingFunctions(info)
|
|
1526
|
+
});
|
|
1527
|
+
var serializeFn = (fnValue) => {
|
|
1528
|
+
const fnStr = fnValue.toString().trim();
|
|
1529
|
+
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
1530
|
+
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
1531
|
+
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
1458
1532
|
};
|
|
1459
|
-
|
|
1460
|
-
key,
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
}) => {
|
|
1464
|
-
try {
|
|
1465
|
-
if (canTrack) {
|
|
1466
|
-
getLocalStorage()?.setItem(key, value);
|
|
1533
|
+
function serializeIncludingFunctions(info) {
|
|
1534
|
+
return JSON.parse(JSON.stringify(info, (key, value) => {
|
|
1535
|
+
if (typeof value === "function") {
|
|
1536
|
+
return serializeFn(value);
|
|
1467
1537
|
}
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
};
|
|
1538
|
+
return value;
|
|
1539
|
+
}));
|
|
1540
|
+
}
|
|
1472
1541
|
|
|
1473
|
-
// src/
|
|
1474
|
-
var
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
if (!canTrack) {
|
|
1479
|
-
return void 0;
|
|
1542
|
+
// src/functions/register.ts
|
|
1543
|
+
var registry = {};
|
|
1544
|
+
function register(type, info) {
|
|
1545
|
+
if (type === "plugin") {
|
|
1546
|
+
info = serializeIncludingFunctions(info);
|
|
1480
1547
|
}
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
});
|
|
1485
|
-
if (checkIsDefined(visitorId)) {
|
|
1486
|
-
return visitorId;
|
|
1487
|
-
} else {
|
|
1488
|
-
const newVisitorId = createVisitorId();
|
|
1489
|
-
setVisitorId({
|
|
1490
|
-
id: newVisitorId,
|
|
1491
|
-
canTrack
|
|
1492
|
-
});
|
|
1493
|
-
return newVisitorId;
|
|
1548
|
+
let typeList = registry[type];
|
|
1549
|
+
if (!typeList) {
|
|
1550
|
+
typeList = registry[type] = [];
|
|
1494
1551
|
}
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1552
|
+
typeList.push(info);
|
|
1553
|
+
if (isBrowser()) {
|
|
1554
|
+
const message = {
|
|
1555
|
+
type: "builder.register",
|
|
1556
|
+
data: {
|
|
1557
|
+
type,
|
|
1558
|
+
info
|
|
1559
|
+
}
|
|
1560
|
+
};
|
|
1561
|
+
try {
|
|
1562
|
+
parent.postMessage(message, "*");
|
|
1563
|
+
if (parent !== window) {
|
|
1564
|
+
window.postMessage(message, "*");
|
|
1565
|
+
}
|
|
1566
|
+
} catch (err) {
|
|
1567
|
+
console.debug("Could not postmessage", err);
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
function registerAction(action) {
|
|
1572
|
+
if (isBrowser()) {
|
|
1573
|
+
const actionClone = JSON.parse(JSON.stringify(action));
|
|
1574
|
+
if (action.action) {
|
|
1575
|
+
actionClone.action = action.action.toString();
|
|
1511
1576
|
}
|
|
1577
|
+
window.parent?.postMessage({
|
|
1578
|
+
type: "builder.registerAction",
|
|
1579
|
+
data: actionClone
|
|
1580
|
+
}, "*");
|
|
1512
1581
|
}
|
|
1513
1582
|
}
|
|
1514
1583
|
|
|
1515
|
-
// src/functions/
|
|
1516
|
-
var
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1584
|
+
// src/functions/set-editor-settings.ts
|
|
1585
|
+
var settings = {};
|
|
1586
|
+
function setEditorSettings(newSettings) {
|
|
1587
|
+
if (isBrowser()) {
|
|
1588
|
+
Object.assign(settings, newSettings);
|
|
1589
|
+
const message = {
|
|
1590
|
+
type: "builder.settingsChange",
|
|
1591
|
+
data: settings
|
|
1523
1592
|
};
|
|
1593
|
+
parent.postMessage(message, "*");
|
|
1524
1594
|
}
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1597
|
+
// src/functions/get-builder-search-params/index.ts
|
|
1598
|
+
var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
|
|
1599
|
+
var BUILDER_OPTIONS_PREFIX = "options.";
|
|
1600
|
+
var getBuilderSearchParams = (_options) => {
|
|
1601
|
+
if (!_options) {
|
|
1602
|
+
return {};
|
|
1603
|
+
}
|
|
1604
|
+
const options = normalizeSearchParams(_options);
|
|
1605
|
+
const newOptions = {};
|
|
1606
|
+
Object.keys(options).forEach((key) => {
|
|
1607
|
+
if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
|
|
1608
|
+
const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
|
|
1609
|
+
newOptions[trimmedKey] = options[key];
|
|
1610
|
+
}
|
|
1530
1611
|
});
|
|
1531
|
-
return
|
|
1532
|
-
sessionId,
|
|
1533
|
-
visitorId
|
|
1534
|
-
};
|
|
1612
|
+
return newOptions;
|
|
1535
1613
|
};
|
|
1536
|
-
var
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
apiKey,
|
|
1540
|
-
metadata,
|
|
1541
|
-
...properties
|
|
1542
|
-
}) => ({
|
|
1543
|
-
type: eventType,
|
|
1544
|
-
data: {
|
|
1545
|
-
...properties,
|
|
1546
|
-
metadata: {
|
|
1547
|
-
url: location.href,
|
|
1548
|
-
...metadata
|
|
1549
|
-
},
|
|
1550
|
-
...await getTrackingEventData({
|
|
1551
|
-
canTrack
|
|
1552
|
-
}),
|
|
1553
|
-
userAttributes: getUserAttributes(),
|
|
1554
|
-
ownerId: apiKey
|
|
1555
|
-
}
|
|
1556
|
-
});
|
|
1557
|
-
async function _track({
|
|
1558
|
-
apiHost,
|
|
1559
|
-
...eventProps
|
|
1560
|
-
}) {
|
|
1561
|
-
if (!eventProps.apiKey) {
|
|
1562
|
-
logger.error("Missing API key for track call. Please provide your API key.");
|
|
1563
|
-
return;
|
|
1564
|
-
}
|
|
1565
|
-
if (!eventProps.canTrack) {
|
|
1566
|
-
return;
|
|
1567
|
-
}
|
|
1568
|
-
if (isEditing()) {
|
|
1569
|
-
return;
|
|
1570
|
-
}
|
|
1571
|
-
if (!(isBrowser() || TARGET === "reactNative")) {
|
|
1572
|
-
return;
|
|
1614
|
+
var getBuilderSearchParamsFromWindow = () => {
|
|
1615
|
+
if (!isBrowser()) {
|
|
1616
|
+
return {};
|
|
1573
1617
|
}
|
|
1574
|
-
const
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
return fetch(url, {
|
|
1578
|
-
method: "POST",
|
|
1579
|
-
body: JSON.stringify({
|
|
1580
|
-
events: [await createEvent(eventProps)]
|
|
1581
|
-
}),
|
|
1582
|
-
headers: {
|
|
1583
|
-
"content-type": "application/json",
|
|
1584
|
-
...getSdkHeaders()
|
|
1585
|
-
},
|
|
1586
|
-
mode: "cors"
|
|
1587
|
-
}).catch((err) => {
|
|
1588
|
-
console.error("Failed to track: ", err);
|
|
1589
|
-
});
|
|
1590
|
-
}
|
|
1591
|
-
var track = (args) => _track({
|
|
1592
|
-
...args,
|
|
1593
|
-
canTrack: true
|
|
1594
|
-
});
|
|
1618
|
+
const searchParams = new URLSearchParams(window.location.search);
|
|
1619
|
+
return getBuilderSearchParams(searchParams);
|
|
1620
|
+
};
|
|
1595
1621
|
|
|
1596
1622
|
// src/functions/is-from-trusted-host.ts
|
|
1597
1623
|
var DEFAULT_TRUSTED_HOSTS = ["*.beta.builder.io", "beta.builder.io", "builder.io", "localhost", "qa.builder.io"];
|
|
@@ -2334,7 +2360,13 @@ function InteractiveElement(props) {
|
|
|
2334
2360
|
rootState: props.context.rootState,
|
|
2335
2361
|
rootSetState: props.context.rootSetState,
|
|
2336
2362
|
localState: props.context.localState,
|
|
2337
|
-
context: props.context.context
|
|
2363
|
+
context: props.context.context,
|
|
2364
|
+
trackingContext: {
|
|
2365
|
+
apiKey: props.context.apiKey,
|
|
2366
|
+
canTrack: props.context.canTrack ?? true,
|
|
2367
|
+
contentId: props.context.content?.id,
|
|
2368
|
+
variationId: props.context.content?.testVariationId
|
|
2369
|
+
}
|
|
2338
2370
|
})
|
|
2339
2371
|
} : {};
|
|
2340
2372
|
});
|