@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/.yarnrc.yml ADDED
@@ -0,0 +1 @@
1
+ npmPublishAccess: "public"
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @builder.io/sdk
2
2
 
3
+ ## 3.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - d403fca: Adds `apiEndpoint` prop to `builder.get()` and `builder.getAll()` with options `'content'` and `'query'`. It dictates which API endpoint is used for the content fetching.
8
+ Defaults to `'query'`
9
+
10
+ ## 3.0.2
11
+
12
+ ### Patch Changes
13
+
14
+ - 1118b05: Add built-in personalization container to suppoert block level personalization
15
+
3
16
  ## 3.0.1
4
17
 
5
18
  ### Patch Changes
@@ -152,7 +152,7 @@
152
152
  throw new Error("Property name \"".concat(name, "\" is not allowed"));
153
153
  }
154
154
 
155
- var version = "3.0.2-1";
155
+ var version = "3.0.3";
156
156
 
157
157
  var Subscription = /** @class */ (function () {
158
158
  function Subscription(listeners, listener) {
@@ -1302,6 +1302,17 @@
1302
1302
  this.setTestsFromUrl();
1303
1303
  // TODO: do this on every request send?
1304
1304
  this.getOverridesFromQueryString();
1305
+ // cookies used in personalization container script, so need to set before hydration to match script result
1306
+ var userAttrCookie = this.getCookie(Builder.attributesCookieName);
1307
+ if (userAttrCookie) {
1308
+ try {
1309
+ var attributes = JSON.parse(userAttrCookie);
1310
+ this.setUserAttributes(attributes);
1311
+ }
1312
+ catch (err) {
1313
+ console.debug('Error parsing user attributes cookie', err);
1314
+ }
1315
+ }
1305
1316
  }
1306
1317
  }
1307
1318
  Builder.register = function (type, info) {
@@ -2191,12 +2202,9 @@
2191
2202
  };
2192
2203
  Builder.prototype.setUserAttributes = function (options) {
2193
2204
  assign(Builder.overrideUserAttributes, options);
2194
- try {
2205
+ if (this.canTrack) {
2195
2206
  this.setCookie(Builder.attributesCookieName, JSON.stringify(this.getUserAttributes()));
2196
2207
  }
2197
- catch (_a) {
2198
- // Ignore
2199
- }
2200
2208
  this.userAttributesChanged.next(options);
2201
2209
  };
2202
2210
  /**
@@ -2364,6 +2372,26 @@
2364
2372
  enumerable: false,
2365
2373
  configurable: true
2366
2374
  });
2375
+ Builder.prototype.makeFetchApiCall = function (url, requestOptions) {
2376
+ return getFetch()(url, requestOptions);
2377
+ };
2378
+ Builder.prototype.flattenMongoQuery = function (obj, _current, _res) {
2379
+ if (_res === void 0) { _res = {}; }
2380
+ for (var key in obj) {
2381
+ var value = obj[key];
2382
+ var newKey = _current ? _current + '.' + key : key;
2383
+ if (value &&
2384
+ typeof value === 'object' &&
2385
+ !Array.isArray(value) &&
2386
+ !Object.keys(value).find(function (item) { return item.startsWith('$'); })) {
2387
+ this.flattenMongoQuery(value, newKey, _res);
2388
+ }
2389
+ else {
2390
+ _res[newKey] = value;
2391
+ }
2392
+ }
2393
+ return _res;
2394
+ };
2367
2395
  Builder.prototype.flushGetContentQueue = function (usePastQueue, useQueue) {
2368
2396
  var _this = this;
2369
2397
  if (usePastQueue === void 0) { usePastQueue = false; }
@@ -2382,6 +2410,7 @@
2382
2410
  return;
2383
2411
  }
2384
2412
  var queue = useQueue || (usePastQueue ? this.priorContentQueue : this.getContentQueue) || [];
2413
+ var apiEndpoint = queue[0].apiEndpoint || 'query';
2385
2414
  // TODO: do this on every request send?
2386
2415
  this.getOverridesFromQueryString();
2387
2416
  var queryParams = __assign(__assign({
@@ -2458,8 +2487,9 @@
2458
2487
  }
2459
2488
  for (var _i = 0, queue_2 = queue; _i < queue_2.length; _i++) {
2460
2489
  var options = queue_2[_i];
2461
- if (options.format) {
2462
- queryParams.format = options.format;
2490
+ var format_1 = options.format;
2491
+ if (format_1) {
2492
+ queryParams.format = format_1;
2463
2493
  }
2464
2494
  // TODO: remove me and make permodel
2465
2495
  if (options.static) {
@@ -2490,9 +2520,14 @@
2490
2520
  var key = properties_1[_a];
2491
2521
  var value = options[key];
2492
2522
  if (value !== undefined) {
2493
- queryParams.options = queryParams.options || {};
2494
- queryParams.options[options.key] = queryParams.options[options.key] || {};
2495
- queryParams.options[options.key][key] = JSON.stringify(value);
2523
+ if (apiEndpoint === 'query') {
2524
+ queryParams.options = queryParams.options || {};
2525
+ queryParams.options[options.key] = queryParams.options[options.key] || {};
2526
+ queryParams.options[options.key][key] = JSON.stringify(value);
2527
+ }
2528
+ else {
2529
+ queryParams[key] = JSON.stringify(value);
2530
+ }
2496
2531
  }
2497
2532
  }
2498
2533
  }
@@ -2507,18 +2542,36 @@
2507
2542
  var params = omit(QueryString.parse(this.overrideParams), 'apiKey');
2508
2543
  assign(queryParams, params);
2509
2544
  }
2510
- var queryStr = QueryString.stringifyDeep(queryParams);
2511
2545
  var format = queryParams.format;
2546
+ var isApiCallForCodegen = format === 'solid' || format === 'react';
2547
+ var isApiCallForCodegenOrQuery = isApiCallForCodegen || apiEndpoint === 'query';
2548
+ if (apiEndpoint === 'content') {
2549
+ queryParams.enrich = true;
2550
+ if (queue[0].query) {
2551
+ var flattened = this.flattenMongoQuery({ query: queue[0].query });
2552
+ for (var key in flattened) {
2553
+ queryParams[key] = flattened[key];
2554
+ }
2555
+ delete queryParams.query;
2556
+ }
2557
+ }
2558
+ var queryStr = QueryString.stringifyDeep(queryParams);
2512
2559
  var requestOptions = { headers: {} };
2513
2560
  if (this.authToken) {
2514
2561
  requestOptions.headers = __assign(__assign({}, requestOptions.headers), { Authorization: "Bearer ".concat(this.authToken) });
2515
2562
  }
2516
- var fn = format === 'solid' || format === 'react' ? 'codegen' : 'query';
2517
- // NOTE: this is a hack to get around the fact that the codegen endpoint is not yet available in v3
2518
- var apiVersionBasedOnFn = fn === 'query' ? this.apiVersion : 'v1';
2519
- var url = "".concat(host, "/api/").concat(apiVersionBasedOnFn, "/").concat(fn, "/").concat(this.apiKey, "/").concat(keyNames) +
2520
- (queryParams && hasParams ? "?".concat(queryStr) : '');
2521
- var promise = getFetch()(url, requestOptions)
2563
+ var url;
2564
+ if (isApiCallForCodegen) {
2565
+ url = "".concat(host, "/api/v1/codegen/").concat(this.apiKey, "/").concat(keyNames);
2566
+ }
2567
+ else if (apiEndpoint === 'query') {
2568
+ url = "".concat(host, "/api/v3/query/").concat(this.apiKey, "/").concat(keyNames);
2569
+ }
2570
+ else {
2571
+ url = "".concat(host, "/api/v3/content/").concat(queue[0].model);
2572
+ }
2573
+ url = url + (queryParams && hasParams ? "?".concat(queryStr) : '');
2574
+ var promise = this.makeFetchApiCall(url, requestOptions)
2522
2575
  .then(function (res) { return res.json(); })
2523
2576
  .then(function (result) {
2524
2577
  for (var _i = 0, queue_3 = queue; _i < queue_3.length; _i++) {
@@ -2536,7 +2589,7 @@
2536
2589
  if (!observer) {
2537
2590
  return;
2538
2591
  }
2539
- var data = result[keyName];
2592
+ var data = isApiCallForCodegenOrQuery ? result[keyName] : result.results;
2540
2593
  var sorted = data; // sortBy(data, item => item.priority);
2541
2594
  if (data) {
2542
2595
  var testModifiedResults = Builder.isServer