@builder.io/sdk 3.0.2-2 → 3.0.3

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.
Files changed (42) hide show
  1. package/.yarnrc.yml +1 -0
  2. package/CHANGELOG.md +13 -0
  3. package/dist/index.browser.js +71 -18
  4. package/dist/index.browser.js.map +1 -1
  5. package/dist/index.cjs.js +71 -18
  6. package/dist/index.cjs.js.map +1 -1
  7. package/dist/index.esm.js +71 -18
  8. package/dist/index.esm.js.map +1 -1
  9. package/dist/index.js +13 -49
  10. package/dist/index.umd.js +71 -18
  11. package/dist/index.umd.js.map +1 -1
  12. package/dist/package.json +1 -3
  13. package/dist/src/builder.class.d.ts +7 -0
  14. package/dist/src/builder.class.js +70 -17
  15. package/dist/src/builder.class.js.map +1 -1
  16. package/dist/src/builder.class.test.js +757 -170
  17. package/dist/src/builder.class.test.js.map +1 -1
  18. package/dist/src/classes/animator.class.js +195 -218
  19. package/dist/src/classes/observable.class.js +97 -102
  20. package/dist/src/classes/promise.class.js +154 -150
  21. package/dist/src/classes/query-string.class.js +74 -73
  22. package/dist/src/classes/query-string.class.test.js +20 -20
  23. package/dist/src/constants/builder.js +4 -4
  24. package/dist/src/functions/assign.function.js +19 -19
  25. package/dist/src/functions/fetch.function.js +75 -97
  26. package/dist/src/functions/finder.function.js +274 -389
  27. package/dist/src/functions/next-tick.function.js +23 -26
  28. package/dist/src/functions/omit.function.js +13 -13
  29. package/dist/src/functions/server-only-require.function.js +9 -10
  30. package/dist/src/functions/throttle.function.js +37 -35
  31. package/dist/src/functions/to-error.js +6 -5
  32. package/dist/src/functions/uuid.js +8 -9
  33. package/dist/src/types/api-version.js +3 -3
  34. package/dist/src/types/content.js +3 -3
  35. package/dist/src/types/element.js +3 -3
  36. package/dist/src/url.js +42 -41
  37. package/dist/src/url.test.js +118 -222
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +3 -6
  40. package/dist/src/functions/get-top-level-domain.d.ts +0 -6
  41. package/dist/src/functions/get-top-level-domain.js +0 -17
  42. package/dist/src/functions/get-top-level-domain.js.map +0 -1
package/dist/index.esm.js CHANGED
@@ -118,7 +118,7 @@ function assertAllowedPropertyName(name) {
118
118
  throw new Error("Property name \"".concat(name, "\" is not allowed"));
119
119
  }
120
120
 
121
- var version = "3.0.2-1";
121
+ var version = "3.0.3";
122
122
 
123
123
  var Subscription = /** @class */ (function () {
124
124
  function Subscription(listeners, listener) {
@@ -1200,6 +1200,17 @@ var Builder = /** @class */ (function () {
1200
1200
  this.setTestsFromUrl();
1201
1201
  // TODO: do this on every request send?
1202
1202
  this.getOverridesFromQueryString();
1203
+ // cookies used in personalization container script, so need to set before hydration to match script result
1204
+ var userAttrCookie = this.getCookie(Builder.attributesCookieName);
1205
+ if (userAttrCookie) {
1206
+ try {
1207
+ var attributes = JSON.parse(userAttrCookie);
1208
+ this.setUserAttributes(attributes);
1209
+ }
1210
+ catch (err) {
1211
+ console.debug('Error parsing user attributes cookie', err);
1212
+ }
1213
+ }
1203
1214
  }
1204
1215
  }
1205
1216
  Builder.register = function (type, info) {
@@ -2089,12 +2100,9 @@ var Builder = /** @class */ (function () {
2089
2100
  };
2090
2101
  Builder.prototype.setUserAttributes = function (options) {
2091
2102
  assign(Builder.overrideUserAttributes, options);
2092
- try {
2103
+ if (this.canTrack) {
2093
2104
  this.setCookie(Builder.attributesCookieName, JSON.stringify(this.getUserAttributes()));
2094
2105
  }
2095
- catch (_a) {
2096
- // Ignore
2097
- }
2098
2106
  this.userAttributesChanged.next(options);
2099
2107
  };
2100
2108
  /**
@@ -2262,6 +2270,26 @@ var Builder = /** @class */ (function () {
2262
2270
  enumerable: false,
2263
2271
  configurable: true
2264
2272
  });
2273
+ Builder.prototype.makeFetchApiCall = function (url, requestOptions) {
2274
+ return getFetch()(url, requestOptions);
2275
+ };
2276
+ Builder.prototype.flattenMongoQuery = function (obj, _current, _res) {
2277
+ if (_res === void 0) { _res = {}; }
2278
+ for (var key in obj) {
2279
+ var value = obj[key];
2280
+ var newKey = _current ? _current + '.' + key : key;
2281
+ if (value &&
2282
+ typeof value === 'object' &&
2283
+ !Array.isArray(value) &&
2284
+ !Object.keys(value).find(function (item) { return item.startsWith('$'); })) {
2285
+ this.flattenMongoQuery(value, newKey, _res);
2286
+ }
2287
+ else {
2288
+ _res[newKey] = value;
2289
+ }
2290
+ }
2291
+ return _res;
2292
+ };
2265
2293
  Builder.prototype.flushGetContentQueue = function (usePastQueue, useQueue) {
2266
2294
  var _this = this;
2267
2295
  if (usePastQueue === void 0) { usePastQueue = false; }
@@ -2280,6 +2308,7 @@ var Builder = /** @class */ (function () {
2280
2308
  return;
2281
2309
  }
2282
2310
  var queue = useQueue || (usePastQueue ? this.priorContentQueue : this.getContentQueue) || [];
2311
+ var apiEndpoint = queue[0].apiEndpoint || 'query';
2283
2312
  // TODO: do this on every request send?
2284
2313
  this.getOverridesFromQueryString();
2285
2314
  var queryParams = __assign(__assign({
@@ -2356,8 +2385,9 @@ var Builder = /** @class */ (function () {
2356
2385
  }
2357
2386
  for (var _i = 0, queue_2 = queue; _i < queue_2.length; _i++) {
2358
2387
  var options = queue_2[_i];
2359
- if (options.format) {
2360
- queryParams.format = options.format;
2388
+ var format_1 = options.format;
2389
+ if (format_1) {
2390
+ queryParams.format = format_1;
2361
2391
  }
2362
2392
  // TODO: remove me and make permodel
2363
2393
  if (options.static) {
@@ -2388,9 +2418,14 @@ var Builder = /** @class */ (function () {
2388
2418
  var key = properties_1[_a];
2389
2419
  var value = options[key];
2390
2420
  if (value !== undefined) {
2391
- queryParams.options = queryParams.options || {};
2392
- queryParams.options[options.key] = queryParams.options[options.key] || {};
2393
- queryParams.options[options.key][key] = JSON.stringify(value);
2421
+ if (apiEndpoint === 'query') {
2422
+ queryParams.options = queryParams.options || {};
2423
+ queryParams.options[options.key] = queryParams.options[options.key] || {};
2424
+ queryParams.options[options.key][key] = JSON.stringify(value);
2425
+ }
2426
+ else {
2427
+ queryParams[key] = JSON.stringify(value);
2428
+ }
2394
2429
  }
2395
2430
  }
2396
2431
  }
@@ -2405,18 +2440,36 @@ var Builder = /** @class */ (function () {
2405
2440
  var params = omit(QueryString.parse(this.overrideParams), 'apiKey');
2406
2441
  assign(queryParams, params);
2407
2442
  }
2408
- var queryStr = QueryString.stringifyDeep(queryParams);
2409
2443
  var format = queryParams.format;
2444
+ var isApiCallForCodegen = format === 'solid' || format === 'react';
2445
+ var isApiCallForCodegenOrQuery = isApiCallForCodegen || apiEndpoint === 'query';
2446
+ if (apiEndpoint === 'content') {
2447
+ queryParams.enrich = true;
2448
+ if (queue[0].query) {
2449
+ var flattened = this.flattenMongoQuery({ query: queue[0].query });
2450
+ for (var key in flattened) {
2451
+ queryParams[key] = flattened[key];
2452
+ }
2453
+ delete queryParams.query;
2454
+ }
2455
+ }
2456
+ var queryStr = QueryString.stringifyDeep(queryParams);
2410
2457
  var requestOptions = { headers: {} };
2411
2458
  if (this.authToken) {
2412
2459
  requestOptions.headers = __assign(__assign({}, requestOptions.headers), { Authorization: "Bearer ".concat(this.authToken) });
2413
2460
  }
2414
- var fn = format === 'solid' || format === 'react' ? 'codegen' : 'query';
2415
- // NOTE: this is a hack to get around the fact that the codegen endpoint is not yet available in v3
2416
- var apiVersionBasedOnFn = fn === 'query' ? this.apiVersion : 'v1';
2417
- var url = "".concat(host, "/api/").concat(apiVersionBasedOnFn, "/").concat(fn, "/").concat(this.apiKey, "/").concat(keyNames) +
2418
- (queryParams && hasParams ? "?".concat(queryStr) : '');
2419
- var promise = getFetch()(url, requestOptions)
2461
+ var url;
2462
+ if (isApiCallForCodegen) {
2463
+ url = "".concat(host, "/api/v1/codegen/").concat(this.apiKey, "/").concat(keyNames);
2464
+ }
2465
+ else if (apiEndpoint === 'query') {
2466
+ url = "".concat(host, "/api/v3/query/").concat(this.apiKey, "/").concat(keyNames);
2467
+ }
2468
+ else {
2469
+ url = "".concat(host, "/api/v3/content/").concat(queue[0].model);
2470
+ }
2471
+ url = url + (queryParams && hasParams ? "?".concat(queryStr) : '');
2472
+ var promise = this.makeFetchApiCall(url, requestOptions)
2420
2473
  .then(function (res) { return res.json(); })
2421
2474
  .then(function (result) {
2422
2475
  for (var _i = 0, queue_3 = queue; _i < queue_3.length; _i++) {
@@ -2434,7 +2487,7 @@ var Builder = /** @class */ (function () {
2434
2487
  if (!observer) {
2435
2488
  return;
2436
2489
  }
2437
- var data = result[keyName];
2490
+ var data = isApiCallForCodegenOrQuery ? result[keyName] : result.results;
2438
2491
  var sorted = data; // sortBy(data, item => item.priority);
2439
2492
  if (data) {
2440
2493
  var testModifiedResults = Builder.isServer