@labdigital/commercetools-mock 2.46.0 → 2.47.0

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 (79) hide show
  1. package/dist/index.cjs +568 -241
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +782 -58
  4. package/dist/index.d.ts +782 -58
  5. package/dist/index.js +556 -229
  6. package/dist/index.js.map +1 -1
  7. package/package.json +41 -48
  8. package/src/ctMock.ts +11 -13
  9. package/src/index.test.ts +5 -5
  10. package/src/lib/predicateParser.test.ts +62 -62
  11. package/src/lib/predicateParser.ts +32 -42
  12. package/src/lib/productSearchFilter.test.ts +18 -0
  13. package/src/lib/productSearchFilter.ts +7 -0
  14. package/src/lib/projectionSearchFilter.test.ts +17 -17
  15. package/src/lib/projectionSearchFilter.ts +2 -3
  16. package/src/oauth/server.test.ts +1 -1
  17. package/src/oauth/server.ts +11 -11
  18. package/src/priceSelector.ts +1 -1
  19. package/src/product-projection-search.ts +18 -19
  20. package/src/repositories/business-unit.ts +17 -16
  21. package/src/repositories/cart/actions.ts +32 -32
  22. package/src/repositories/cart/helpers.ts +1 -1
  23. package/src/repositories/cart/index.ts +8 -8
  24. package/src/repositories/cart-discount/actions.ts +1 -4
  25. package/src/repositories/category/actions.ts +2 -6
  26. package/src/repositories/custom-object.ts +20 -21
  27. package/src/repositories/customer/actions.ts +4 -4
  28. package/src/repositories/errors.ts +1 -1
  29. package/src/repositories/extension.ts +2 -1
  30. package/src/repositories/helpers.ts +27 -27
  31. package/src/repositories/index.ts +17 -17
  32. package/src/repositories/my-customer.ts +1 -1
  33. package/src/repositories/my-order.ts +2 -2
  34. package/src/repositories/order/index.ts +1 -1
  35. package/src/repositories/product/actions.ts +1 -1
  36. package/src/repositories/quote/actions.ts +83 -0
  37. package/src/repositories/quote/index.ts +54 -0
  38. package/src/repositories/quote-request/actions.ts +84 -0
  39. package/src/repositories/quote-request/index.test.ts +167 -0
  40. package/src/repositories/quote-request/index.ts +67 -0
  41. package/src/repositories/quote-staged/actions.ts +84 -0
  42. package/src/repositories/quote-staged/index.ts +47 -0
  43. package/src/repositories/review.ts +4 -4
  44. package/src/repositories/shipping-method/actions.ts +17 -17
  45. package/src/repositories/shipping-method/index.ts +6 -6
  46. package/src/repositories/shopping-list/actions.ts +1 -1
  47. package/src/repositories/shopping-list/index.ts +9 -1
  48. package/src/repositories/subscription.ts +2 -4
  49. package/src/server.ts +3 -2
  50. package/src/services/abstract.ts +7 -7
  51. package/src/services/as-associate-order.test.ts +1 -1
  52. package/src/services/cart-discount.test.ts +1 -1
  53. package/src/services/cart.test.ts +15 -15
  54. package/src/services/category.test.ts +1 -1
  55. package/src/services/customer.test.ts +4 -4
  56. package/src/services/customer.ts +1 -1
  57. package/src/services/index.ts +20 -14
  58. package/src/services/inventory-entry.test.ts +5 -5
  59. package/src/services/my-cart.test.ts +2 -2
  60. package/src/services/my-customer.test.ts +2 -2
  61. package/src/services/order.test.ts +8 -8
  62. package/src/services/product-projection.test.ts +5 -5
  63. package/src/services/product-projection.ts +12 -14
  64. package/src/services/product.test.ts +1 -1
  65. package/src/services/quote-request.test.ts +59 -0
  66. package/src/services/quote-request.ts +16 -0
  67. package/src/services/quote-staged.ts +16 -0
  68. package/src/services/quote.ts +16 -0
  69. package/src/services/standalone-price.test.ts +4 -4
  70. package/src/services/state.test.ts +1 -1
  71. package/src/services/store.test.ts +2 -2
  72. package/src/services/tax-category.test.ts +1 -1
  73. package/src/shipping.ts +3 -3
  74. package/src/storage/in-memory.ts +55 -63
  75. package/src/testing/customer.ts +1 -1
  76. package/src/types.ts +51 -31
  77. package/src/repositories/quote-request.ts +0 -17
  78. package/src/repositories/quote.ts +0 -14
  79. package/src/repositories/staged-quote.ts +0 -17
package/dist/index.cjs CHANGED
@@ -246,7 +246,8 @@ var OAuth2Store = class {
246
246
  };
247
247
  }
248
248
  validateToken(token) {
249
- if (!this.validate) return true;
249
+ if (!this.validate)
250
+ return true;
250
251
  const foundToken = this.tokens.find((t) => t.access_token === token);
251
252
  if (foundToken) {
252
253
  return true;
@@ -380,7 +381,8 @@ var OAuth2Server = class {
380
381
  request.query.scope?.toString()
381
382
  );
382
383
  return response.status(200).send(token);
383
- } else if (grantType === "refresh_token") {
384
+ }
385
+ if (grantType === "refresh_token") {
384
386
  const refreshToken = request.query.refresh_token?.toString() || request.body.refresh_token;
385
387
  if (!refreshToken) {
386
388
  return next(
@@ -412,17 +414,16 @@ var OAuth2Server = class {
412
414
  );
413
415
  }
414
416
  return response.status(200).send(token);
415
- } else {
416
- return next(
417
- new CommercetoolsError(
418
- {
419
- code: "unsupported_grant_type",
420
- message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`
421
- },
422
- 400
423
- )
424
- );
425
417
  }
418
+ return next(
419
+ new CommercetoolsError(
420
+ {
421
+ code: "unsupported_grant_type",
422
+ message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`
423
+ },
424
+ 400
425
+ )
426
+ );
426
427
  }
427
428
  async customerTokenHandler(request, response, next) {
428
429
  const projectKey = request.params.projectKey;
@@ -589,7 +590,8 @@ var import_deep_equal = __toESM(require("deep-equal"), 1);
589
590
 
590
591
  // src/repositories/errors.ts
591
592
  var checkConcurrentModification = (currentVersion, expectedVersion, identifier) => {
592
- if (currentVersion === expectedVersion) return;
593
+ if (currentVersion === expectedVersion)
594
+ return;
593
595
  throw new CommercetoolsError(
594
596
  {
595
597
  message: `Object ${identifier} has a different version than expected. Expected: ${expectedVersion} - Actual: ${currentVersion}.`,
@@ -780,7 +782,8 @@ var import_uuid6 = require("uuid");
780
782
  var import_decimal = require("decimal.js/decimal");
781
783
  var import_uuid4 = require("uuid");
782
784
  var createAddress = (base, projectKey, storage) => {
783
- if (!base) return void 0;
785
+ if (!base)
786
+ return void 0;
784
787
  if (!base?.country) {
785
788
  throw new Error("Country is required");
786
789
  }
@@ -789,9 +792,12 @@ var createAddress = (base, projectKey, storage) => {
789
792
  };
790
793
  };
791
794
  var createCustomFields = (draft, projectKey, storage) => {
792
- if (!draft) return void 0;
793
- if (!draft.type) return void 0;
794
- if (!draft.type.typeId) return void 0;
795
+ if (!draft)
796
+ return void 0;
797
+ if (!draft.type)
798
+ return void 0;
799
+ if (!draft.type.typeId)
800
+ return void 0;
795
801
  const typeResource = storage.getByResourceIdentifier(
796
802
  projectKey,
797
803
  draft.type
@@ -874,7 +880,8 @@ var createTypedMoney = (value) => {
874
880
  return result;
875
881
  };
876
882
  var resolveStoreReference = (ref, projectKey, storage) => {
877
- if (!ref) return void 0;
883
+ if (!ref)
884
+ return void 0;
878
885
  const resource = storage.getByResourceIdentifier(projectKey, ref);
879
886
  if (!resource) {
880
887
  throw new Error("No such store");
@@ -942,7 +949,8 @@ var getRepositoryContext = (request) => ({
942
949
  storeKey: request.params.storeKey
943
950
  });
944
951
  var createAssociate = (a, projectKey, storage) => {
945
- if (!a) return void 0;
952
+ if (!a)
953
+ return void 0;
946
954
  if (!a.associateRoleAssignments) {
947
955
  throw new Error("AssociateRoleAssignments is required");
948
956
  }
@@ -1029,10 +1037,6 @@ var markMatchingShippingRatePriceTiers = (cart, tiers) => {
1029
1037
  switch (tierType) {
1030
1038
  case "CartValue":
1031
1039
  return markMatchingCartValueTiers(cart, tiers);
1032
- // case 'CartClassification':
1033
- // return markMatchingCartClassificationTiers(cart, tiers)
1034
- // case 'CartScore':
1035
- // return markMatchingCartScoreTiers(cart, tiers)
1036
1040
  default:
1037
1041
  throw new Error(`Unsupported tier type: ${tierType}`);
1038
1042
  }
@@ -1045,7 +1049,8 @@ var markMatchingCartValueTiers = (cart, tiers) => {
1045
1049
  let hasMatchingTier = false;
1046
1050
  for (const tier of sortedTiers) {
1047
1051
  const isMatching = !hasMatchingTier && cart.totalPrice.currencyCode === tier.price.currencyCode && cart.totalPrice.centAmount >= tier.minimumCentAmount;
1048
- if (isMatching) hasMatchingTier = true;
1052
+ if (isMatching)
1053
+ hasMatchingTier = true;
1049
1054
  result[tier.minimumCentAmount] = {
1050
1055
  ...tier,
1051
1056
  isMatching
@@ -1069,12 +1074,12 @@ var getShippingMethodsMatchingCart = (context, storage, cart, params = {}) => {
1069
1074
  context.projectKey,
1070
1075
  "shipping-method",
1071
1076
  {
1072
- "where": [
1073
- `zoneRates(zone(id in (:zoneIds)))`,
1077
+ where: [
1078
+ "zoneRates(zone(id in (:zoneIds)))",
1074
1079
  `zoneRates(shippingRates(price(currencyCode="${cart.totalPrice.currencyCode}")))`
1075
1080
  ],
1076
1081
  "var.zoneIds": zoneIds,
1077
- "expand": params.expand
1082
+ expand: params.expand
1078
1083
  }
1079
1084
  );
1080
1085
  const results = shippingMethods.results.map((shippingMethod) => {
@@ -1110,7 +1115,7 @@ var selectPrice = ({
1110
1115
  return countryMatch && currencyMatch;
1111
1116
  });
1112
1117
  };
1113
- var calculateLineItemTotalPrice = (lineItem) => lineItem.price.value.centAmount * lineItem.quantity;
1118
+ var calculateLineItemTotalPrice = (lineItem) => lineItem.price?.value.centAmount * lineItem.quantity;
1114
1119
  var calculateCartTotalPrice = (cart) => cart.lineItems.reduce((cur, item) => cur + item.totalPrice.centAmount, 0);
1115
1120
 
1116
1121
  // src/repositories/cart/actions.ts
@@ -1157,8 +1162,10 @@ var CartUpdateHandler = class extends AbstractUpdateHandler {
1157
1162
  product.masterData.current.masterVariant,
1158
1163
  ...product.masterData.current.variants
1159
1164
  ].find((x) => {
1160
- if (sku) return x.sku === sku;
1161
- if (variantId) return x.id === variantId;
1165
+ if (sku)
1166
+ return x.sku === sku;
1167
+ if (variantId)
1168
+ return x.id === variantId;
1162
1169
  return false;
1163
1170
  });
1164
1171
  if (!variant) {
@@ -1244,7 +1251,7 @@ var CartUpdateHandler = class extends AbstractUpdateHandler {
1244
1251
  } else {
1245
1252
  throw new CommercetoolsError({
1246
1253
  code: "General",
1247
- message: `Either lineItemid or lineItemKey needs to be provided.`
1254
+ message: "Either lineItemid or lineItemKey needs to be provided."
1248
1255
  });
1249
1256
  }
1250
1257
  if (quantity === 0) {
@@ -1511,7 +1518,7 @@ var CartUpdateHandler = class extends AbstractUpdateHandler {
1511
1518
  });
1512
1519
  }
1513
1520
  const zoneRate = method.zoneRates.find(
1514
- (rate) => rate.zone.obj.locations.some((loc) => loc.country === country)
1521
+ (rate) => rate.zone.obj?.locations.some((loc) => loc.country === country)
1515
1522
  );
1516
1523
  if (!zoneRate) {
1517
1524
  throw new Error("Zone rate not found");
@@ -1686,8 +1693,10 @@ var CartRepository = class extends AbstractResourceRepository {
1686
1693
  product.masterData.current.masterVariant,
1687
1694
  ...product.masterData.current.variants
1688
1695
  ].find((x) => {
1689
- if (sku) return x.sku === sku;
1690
- if (variantId) return x.id === variantId;
1696
+ if (sku)
1697
+ return x.sku === sku;
1698
+ if (variantId)
1699
+ return x.id === variantId;
1691
1700
  return false;
1692
1701
  });
1693
1702
  if (!variant) {
@@ -1729,7 +1738,7 @@ var CartRepository = class extends AbstractResourceRepository {
1729
1738
  };
1730
1739
 
1731
1740
  // src/repositories/order/index.ts
1732
- var import_assert = __toESM(require("assert"), 1);
1741
+ var import_node_assert = __toESM(require("assert"), 1);
1733
1742
 
1734
1743
  // src/repositories/order/actions.ts
1735
1744
  var OrderUpdateHandler = class extends AbstractUpdateHandler {
@@ -1869,7 +1878,8 @@ var OrderUpdateHandler = class extends AbstractUpdateHandler {
1869
1878
  );
1870
1879
  }
1871
1880
  setStore(context, resource, { store }) {
1872
- if (!store) return;
1881
+ if (!store)
1882
+ return;
1873
1883
  const resolvedType = this._storage.getByResourceIdentifier(
1874
1884
  context.projectKey,
1875
1885
  store
@@ -1900,7 +1910,8 @@ var OrderUpdateHandler = class extends AbstractUpdateHandler {
1900
1910
  };
1901
1911
  }
1902
1912
  updateSyncInfo(context, resource, { channel, externalId, syncedAt }) {
1903
- if (!channel) return;
1913
+ if (!channel)
1914
+ return;
1904
1915
  const resolvedType = this._storage.getByResourceIdentifier(
1905
1916
  context.projectKey,
1906
1917
  channel
@@ -1934,7 +1945,7 @@ var OrderRepository = class extends AbstractResourceRepository {
1934
1945
  this.actions = new OrderUpdateHandler(config.storage);
1935
1946
  }
1936
1947
  create(context, draft) {
1937
- (0, import_assert.default)(draft.cart, "draft.cart is missing");
1948
+ (0, import_node_assert.default)(draft.cart, "draft.cart is missing");
1938
1949
  return this.createFromCart(
1939
1950
  context,
1940
1951
  {
@@ -1989,7 +2000,7 @@ var OrderRepository = class extends AbstractResourceRepository {
1989
2000
  return this.saveNew(context, resource);
1990
2001
  }
1991
2002
  import(context, draft) {
1992
- (0, import_assert.default)(this, "OrderRepository not valid");
2003
+ (0, import_node_assert.default)(this, "OrderRepository not valid");
1993
2004
  const resource = {
1994
2005
  ...getBaseResourceProperties(),
1995
2006
  billingAddress: createAddress(
@@ -2296,7 +2307,8 @@ var BusinessUnitRepository = class extends AbstractResourceRepository {
2296
2307
  };
2297
2308
  this.saveNew(context, division);
2298
2309
  return division;
2299
- } else if (this._isCompanyDraft(draft)) {
2310
+ }
2311
+ if (this._isCompanyDraft(draft)) {
2300
2312
  const company = resource;
2301
2313
  this.saveNew(context, company);
2302
2314
  return company;
@@ -2418,7 +2430,7 @@ var CartDiscountUpdateHandler = class extends AbstractUpdateHandler {
2418
2430
  throw new CommercetoolsError(
2419
2431
  {
2420
2432
  code: "InvalidOperation",
2421
- message: "Cannot remove custom field " + name + " because it does not exist."
2433
+ message: `Cannot remove custom field ${name} because it does not exist.`
2422
2434
  },
2423
2435
  400
2424
2436
  );
@@ -2598,15 +2610,11 @@ var CategoryUpdateHandler = class extends AbstractUpdateHandler {
2598
2610
  return;
2599
2611
  }
2600
2612
  if (assetId) {
2601
- resource.assets = resource.assets.filter(function(obj) {
2602
- return obj.id !== assetId;
2603
- });
2613
+ resource.assets = resource.assets.filter((obj) => obj.id !== assetId);
2604
2614
  return;
2605
2615
  }
2606
2616
  if (assetKey) {
2607
- resource.assets = resource.assets.filter(function(obj) {
2608
- return obj.key !== assetKey;
2609
- });
2617
+ resource.assets = resource.assets.filter((obj) => obj.key !== assetKey);
2610
2618
  return;
2611
2619
  }
2612
2620
  }
@@ -2829,26 +2837,25 @@ var CustomObjectRepository = class extends AbstractResourceRepository {
2829
2837
  return updated;
2830
2838
  }
2831
2839
  return current;
2832
- } else {
2833
- if (draft.version) {
2834
- throw new CommercetoolsError(
2835
- {
2836
- code: "InvalidOperation",
2837
- message: "version on create must be 0"
2838
- },
2839
- 400
2840
- );
2841
- }
2842
- const baseProperties = getBaseResourceProperties();
2843
- const resource = {
2844
- ...baseProperties,
2845
- container: draft.container,
2846
- key: draft.key,
2847
- value: draft.value
2848
- };
2849
- this.saveNew(context, resource);
2850
- return resource;
2851
2840
  }
2841
+ if (draft.version) {
2842
+ throw new CommercetoolsError(
2843
+ {
2844
+ code: "InvalidOperation",
2845
+ message: "version on create must be 0"
2846
+ },
2847
+ 400
2848
+ );
2849
+ }
2850
+ const baseProperties = getBaseResourceProperties();
2851
+ const resource = {
2852
+ ...baseProperties,
2853
+ container: draft.container,
2854
+ key: draft.key,
2855
+ value: draft.value
2856
+ };
2857
+ this.saveNew(context, resource);
2858
+ return resource;
2852
2859
  }
2853
2860
  getWithContainerAndKey(context, container, key) {
2854
2861
  const items = this._storage.all(context.projectKey, this.getTypeId());
@@ -2873,7 +2880,7 @@ var CustomObjectRepository = class extends AbstractResourceRepository {
2873
2880
  };
2874
2881
 
2875
2882
  // src/repositories/customer/actions.ts
2876
- var import_node_assert = __toESM(require("assert"), 1);
2883
+ var import_node_assert2 = __toESM(require("assert"), 1);
2877
2884
  var CustomerUpdateHandler = class extends AbstractUpdateHandler {
2878
2885
  addAddress(_context, resource, { address }) {
2879
2886
  resource.addresses.push({
@@ -2883,7 +2890,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
2883
2890
  }
2884
2891
  addBillingAddressId(_context, resource, { addressId, addressKey }) {
2885
2892
  const address = this._findAddress(resource, addressId, addressKey, true);
2886
- (0, import_node_assert.default)(address?.id);
2893
+ (0, import_node_assert2.default)(address?.id);
2887
2894
  if (resource.billingAddressIds === void 0) {
2888
2895
  resource.billingAddressIds = [];
2889
2896
  }
@@ -2893,7 +2900,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
2893
2900
  }
2894
2901
  addShippingAddressId(_context, resource, { addressId, addressKey }) {
2895
2902
  const address = this._findAddress(resource, addressId, addressKey, true);
2896
- (0, import_node_assert.default)(address?.id);
2903
+ (0, import_node_assert2.default)(address?.id);
2897
2904
  if (resource.shippingAddressIds === void 0) {
2898
2905
  resource.shippingAddressIds = [];
2899
2906
  }
@@ -2907,7 +2914,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
2907
2914
  }
2908
2915
  changeAddress(context, resource, { addressId, addressKey, address }) {
2909
2916
  const current = this._findAddress(resource, addressId, addressKey, true);
2910
- (0, import_node_assert.default)(current?.id);
2917
+ (0, import_node_assert2.default)(current?.id);
2911
2918
  const oldAddressIndex = resource.addresses.findIndex(
2912
2919
  (a) => a.id === current.id
2913
2920
  );
@@ -2933,7 +2940,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
2933
2940
  action.addressKey,
2934
2941
  true
2935
2942
  );
2936
- (0, import_node_assert.default)(address?.id);
2943
+ (0, import_node_assert2.default)(address?.id);
2937
2944
  resource.addresses = resource.addresses.filter((a) => a.id !== address.id);
2938
2945
  }
2939
2946
  removeBillingAddressId(context, resource, action) {
@@ -2943,7 +2950,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
2943
2950
  action.addressKey,
2944
2951
  true
2945
2952
  );
2946
- (0, import_node_assert.default)(address?.id);
2953
+ (0, import_node_assert2.default)(address?.id);
2947
2954
  resource.billingAddressIds = resource.billingAddressIds?.filter(
2948
2955
  (id) => id !== address.id
2949
2956
  );
@@ -2958,7 +2965,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
2958
2965
  action.addressKey,
2959
2966
  true
2960
2967
  );
2961
- (0, import_node_assert.default)(address?.id);
2968
+ (0, import_node_assert2.default)(address?.id);
2962
2969
  resource.shippingAddressIds = resource.shippingAddressIds?.filter(
2963
2970
  (id) => id !== address.id
2964
2971
  );
@@ -2987,7 +2994,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
2987
2994
  }
2988
2995
  resource.authenticationMode = authMode;
2989
2996
  if (authMode === "ExternalAuth") {
2990
- delete resource.password;
2997
+ resource.password = void 0;
2991
2998
  return;
2992
2999
  }
2993
3000
  if (authMode === "Password") {
@@ -3060,7 +3067,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
3060
3067
  action.addressKey,
3061
3068
  true
3062
3069
  );
3063
- (0, import_node_assert.default)(address?.id);
3070
+ (0, import_node_assert2.default)(address?.id);
3064
3071
  resource.defaultBillingAddressId = address.id;
3065
3072
  if (resource.billingAddressIds === void 0) {
3066
3073
  resource.billingAddressIds = [];
@@ -3076,7 +3083,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
3076
3083
  action.addressKey,
3077
3084
  true
3078
3085
  );
3079
- (0, import_node_assert.default)(address?.id);
3086
+ (0, import_node_assert2.default)(address?.id);
3080
3087
  resource.defaultShippingAddressId = address.id;
3081
3088
  if (resource.shippingAddressIds === void 0) {
3082
3089
  resource.shippingAddressIds = [];
@@ -3541,7 +3548,8 @@ var ExtensionRepository = class extends AbstractResourceRepository {
3541
3548
  extension,
3542
3549
  "destination.authentication.headerValue"
3543
3550
  );
3544
- } else if (extension.destination.type === "AWSLambda") {
3551
+ }
3552
+ if (extension.destination.type === "AWSLambda") {
3545
3553
  return maskSecretValue(resource, "destination.accessSecret");
3546
3554
  }
3547
3555
  }
@@ -3708,10 +3716,10 @@ var MyCustomerRepository = class extends CustomerRepository {
3708
3716
  };
3709
3717
 
3710
3718
  // src/repositories/my-order.ts
3711
- var import_assert2 = __toESM(require("assert"), 1);
3719
+ var import_node_assert3 = __toESM(require("assert"), 1);
3712
3720
  var MyOrderRepository = class extends OrderRepository {
3713
3721
  create(context, draft) {
3714
- (0, import_assert2.default)(draft.id, "draft.id is missing");
3722
+ (0, import_node_assert3.default)(draft.id, "draft.id is missing");
3715
3723
  const cartIdentifier = {
3716
3724
  id: draft.id,
3717
3725
  typeId: "cart"
@@ -4016,16 +4024,19 @@ function toRegExp(str) {
4016
4024
  return new RegExp(str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"));
4017
4025
  }
4018
4026
  function normalize(regex) {
4019
- if (typeof regex === "string") regex = toRegExp(regex);
4027
+ if (typeof regex === "string")
4028
+ regex = toRegExp(regex);
4020
4029
  if (!regex.source.startsWith("^"))
4021
4030
  return new RegExp(`^${regex.source}`, regex.flags);
4022
- else return regex;
4031
+ else
4032
+ return regex;
4023
4033
  }
4024
4034
  function first(arr, predicate) {
4025
4035
  let i = 0;
4026
4036
  for (const item of arr) {
4027
4037
  const result = predicate(item, i++);
4028
- if (result) return { item, result };
4038
+ if (result)
4039
+ return { item, result };
4029
4040
  }
4030
4041
  }
4031
4042
  var TokenTypes = class {
@@ -4189,7 +4200,8 @@ var Lexer = class {
4189
4200
  */
4190
4201
  peek(position = this._state.position) {
4191
4202
  const read = (i = position) => {
4192
- if (i >= this._state.source.length) return EOF(this);
4203
+ if (i >= this._state.source.length)
4204
+ return EOF(this);
4193
4205
  const n = this._tokenTypes.peek(this._state.source, i);
4194
4206
  if (!n || !n.result) {
4195
4207
  throw new Error(
@@ -4209,7 +4221,8 @@ var Lexer = class {
4209
4221
  ) : null;
4210
4222
  };
4211
4223
  const t = read();
4212
- if (t) return t;
4224
+ if (t)
4225
+ return t;
4213
4226
  let unexpected = this._state.source.substring(position, position + 1);
4214
4227
  try {
4215
4228
  this.peek(position + 1);
@@ -4231,7 +4244,8 @@ var Lexer = class {
4231
4244
  */
4232
4245
  strpos(i) {
4233
4246
  let lines = this._state.source.substring(0, i).split(/\r?\n/);
4234
- if (!Array.isArray(lines)) lines = [lines];
4247
+ if (!Array.isArray(lines))
4248
+ lines = [lines];
4235
4249
  const line = lines.length;
4236
4250
  const column = lines[lines.length - 1].length + 1;
4237
4251
  return { line, column };
@@ -4330,7 +4344,8 @@ var Parser = class {
4330
4344
  * @returns {number} The binding power of the specified token type
4331
4345
  */
4332
4346
  bp(tokenOrType) {
4333
- if (tokenOrType == null) return Number.NEGATIVE_INFINITY;
4347
+ if (tokenOrType == null)
4348
+ return Number.NEGATIVE_INFINITY;
4334
4349
  if (tokenOrType && typeof tokenOrType.isEof == "function" && tokenOrType.isEof())
4335
4350
  return Number.NEGATIVE_INFINITY;
4336
4351
  const type = this._type(tokenOrType);
@@ -4375,21 +4390,27 @@ var Parser = class {
4375
4390
  parse(opts = { terminals: [0] }) {
4376
4391
  const stop = opts.stop = opts.stop || createStop();
4377
4392
  const check = () => {
4378
- if (stop.isStopped()) return false;
4393
+ if (stop.isStopped())
4394
+ return false;
4379
4395
  const t = this.lexer.peek();
4380
4396
  const bp = this.bp(t);
4381
4397
  return opts.terminals.reduce((canContinue, rbpOrType) => {
4382
- if (!canContinue) return false;
4383
- if (typeof rbpOrType == "number") return rbpOrType < bp;
4384
- if (typeof rbpOrType == "string") return t.type != rbpOrType;
4398
+ if (!canContinue)
4399
+ return false;
4400
+ if (typeof rbpOrType == "number")
4401
+ return rbpOrType < bp;
4402
+ if (typeof rbpOrType == "string")
4403
+ return t.type != rbpOrType;
4385
4404
  }, true);
4386
4405
  };
4387
4406
  const mkinfo = (token) => {
4388
4407
  const bp = this.bp(token);
4389
4408
  return { token, bp, stop, ctx: opts.ctx, options: opts };
4390
4409
  };
4391
- if (!opts.terminals) opts.terminals = [0];
4392
- if (opts.terminals.length == 0) opts.terminals.push(0);
4410
+ if (!opts.terminals)
4411
+ opts.terminals = [0];
4412
+ if (opts.terminals.length == 0)
4413
+ opts.terminals.push(0);
4393
4414
  let left = this.nud(mkinfo(this.lexer.next()));
4394
4415
  while (check()) {
4395
4416
  const operator = this.lexer.next();
@@ -4521,7 +4542,7 @@ var parseFilter = (filter) => {
4521
4542
  (t) => ({
4522
4543
  type: "Symbol",
4523
4544
  kind: "int",
4524
- value: parseInt(t.token.match, 10)
4545
+ value: Number.parseInt(t.token.match, 10)
4525
4546
  })
4526
4547
  ).nud("STAR", 5, (_) => ({
4527
4548
  type: "Symbol",
@@ -4545,9 +4566,8 @@ var parseFilter = (filter) => {
4545
4566
  const expr = parser.parse({ terminals: [bp - 1] });
4546
4567
  if (Array.isArray(expr)) {
4547
4568
  return [left, ...expr];
4548
- } else {
4549
- return [left, expr];
4550
4569
  }
4570
+ return [left, expr];
4551
4571
  }).nud("(", 100, (t) => {
4552
4572
  const expr = parser.parse({ terminals: [")"] });
4553
4573
  lexer.expect(")");
@@ -4593,7 +4613,8 @@ var generateMatchFunc = (filter) => {
4593
4613
  throw new Error(`Syntax error while parsing '${filter}'.`);
4594
4614
  }
4595
4615
  return (obj) => {
4596
- if (!result.children) return false;
4616
+ if (!result.children)
4617
+ return false;
4597
4618
  return result.children.some((c) => c.match(obj));
4598
4619
  };
4599
4620
  };
@@ -4699,6 +4720,12 @@ var parseSearchQuery = (searchQuery) => {
4699
4720
  return generateFieldMatchFunc(generateRangeMatchFunc, searchQuery.range);
4700
4721
  }
4701
4722
  if (isSearchExactExpression(searchQuery)) {
4723
+ if (Array.isArray(searchQuery.exact.values)) {
4724
+ return generateFieldMatchFunc(
4725
+ (value) => (searchQuery.exact.values ?? []).includes(value),
4726
+ searchQuery.exact
4727
+ );
4728
+ }
4702
4729
  return generateFieldMatchFunc(
4703
4730
  (value) => value === searchQuery.exact.value,
4704
4731
  searchQuery.exact
@@ -5317,7 +5344,7 @@ var ProductUpdateHandler = class extends AbstractUpdateHandler {
5317
5344
  }
5318
5345
  if (position >= variantImages.length) {
5319
5346
  throw new Error(
5320
- `Invalid position given. Position in images where the image should be moved. Must be between 0 and the total number of images minus 1.`
5347
+ "Invalid position given. Position in images where the image should be moved. Must be between 0 and the total number of images minus 1."
5321
5348
  );
5322
5349
  }
5323
5350
  variant.images = variantImages.filter((image) => image.url !== imageUrl);
@@ -5950,9 +5977,8 @@ var parseQueryExpression = (predicate) => {
5950
5977
  if (Array.isArray(predicate)) {
5951
5978
  const callbacks = predicate.map((item) => generateMatchFunc2(item));
5952
5979
  return (target, variables) => callbacks.every((callback) => callback(target, variables));
5953
- } else {
5954
- return generateMatchFunc2(predicate);
5955
5980
  }
5981
+ return generateMatchFunc2(predicate);
5956
5982
  };
5957
5983
  var validateSymbol = (val) => {
5958
5984
  if (!val.type) {
@@ -6007,7 +6033,7 @@ var generateMatchFunc2 = (predicate) => {
6007
6033
  1,
6008
6034
  (t) => ({
6009
6035
  type: "boolean",
6010
- value: t.token.match === "true" ? true : false,
6036
+ value: t.token.match === "true",
6011
6037
  pos: t.token.strpos()
6012
6038
  })
6013
6039
  ).nud(
@@ -6033,7 +6059,7 @@ var generateMatchFunc2 = (predicate) => {
6033
6059
  1,
6034
6060
  (t) => ({
6035
6061
  type: "int",
6036
- value: parseInt(t.token.match, 10),
6062
+ value: Number.parseInt(t.token.match, 10),
6037
6063
  pos: t.token.strpos()
6038
6064
  })
6039
6065
  ).nud(
@@ -6041,7 +6067,7 @@ var generateMatchFunc2 = (predicate) => {
6041
6067
  1,
6042
6068
  (t) => ({
6043
6069
  type: "float",
6044
- value: parseFloat(t.token.match),
6070
+ value: Number.parseFloat(t.token.match),
6045
6071
  pos: t.token.strpos()
6046
6072
  })
6047
6073
  ).nud("NOT", 100, ({ bp }) => {
@@ -6057,9 +6083,8 @@ var generateMatchFunc2 = (predicate) => {
6057
6083
  const expr = parser.parse({ terminals: [bp - 1] });
6058
6084
  if (Array.isArray(expr)) {
6059
6085
  return [left, ...expr];
6060
- } else {
6061
- return [left, expr];
6062
6086
  }
6087
+ return [left, expr];
6063
6088
  }).nud("(", 100, (t) => {
6064
6089
  const expr = parser.parse({ terminals: [")"] });
6065
6090
  return expr;
@@ -6069,22 +6094,21 @@ var generateMatchFunc2 = (predicate) => {
6069
6094
  return (obj, vars) => {
6070
6095
  if (Array.isArray(obj)) {
6071
6096
  return obj.some((item) => {
6072
- const value = resolveValue(item, left);
6073
- if (value) {
6074
- return expr(value, vars);
6097
+ const value2 = resolveValue(item, left);
6098
+ if (value2) {
6099
+ return expr(value2, vars);
6075
6100
  }
6076
6101
  return false;
6077
6102
  });
6078
- } else {
6079
- const value = resolveValue(obj, left);
6080
- if (value) {
6081
- if (Array.isArray(value)) {
6082
- return value.some((item) => expr(item, vars));
6083
- }
6084
- return expr(value, vars);
6103
+ }
6104
+ const value = resolveValue(obj, left);
6105
+ if (value) {
6106
+ if (Array.isArray(value)) {
6107
+ return value.some((item) => expr(item, vars));
6085
6108
  }
6086
- return false;
6109
+ return expr(value, vars);
6087
6110
  }
6111
+ return false;
6088
6112
  };
6089
6113
  }).bp(")", 0).led("=", 20, ({ left, bp }) => {
6090
6114
  const expr = parser.parse({ terminals: [bp - 1] });
@@ -6099,14 +6123,13 @@ var generateMatchFunc2 = (predicate) => {
6099
6123
  }
6100
6124
  return value === other;
6101
6125
  });
6102
- } else {
6103
- const resolvedValue = resolveValue(obj, left);
6104
- const resolvedSymbol = resolveSymbol(expr, vars);
6105
- if (Array.isArray(resolvedValue)) {
6106
- return !!resolvedValue.some((elem) => elem === resolvedSymbol);
6107
- }
6108
- return resolvedValue === resolvedSymbol;
6109
6126
  }
6127
+ const resolvedValue = resolveValue(obj, left);
6128
+ const resolvedSymbol = resolveSymbol(expr, vars);
6129
+ if (Array.isArray(resolvedValue)) {
6130
+ return !!resolvedValue.some((elem) => elem === resolvedSymbol);
6131
+ }
6132
+ return resolvedValue === resolvedSymbol;
6110
6133
  };
6111
6134
  }).led("!=", 20, ({ left, bp }) => {
6112
6135
  const expr = parser.parse({ terminals: [bp - 1] });
@@ -6143,12 +6166,11 @@ var generateMatchFunc2 = (predicate) => {
6143
6166
  const val = resolveValue(obj, left);
6144
6167
  return val.length === 0;
6145
6168
  };
6146
- } else {
6147
- return (obj, vars) => {
6148
- const val = resolveValue(obj, left);
6149
- return val.length !== 0;
6150
- };
6151
6169
  }
6170
+ return (obj, vars) => {
6171
+ const val = resolveValue(obj, left);
6172
+ return val.length !== 0;
6173
+ };
6152
6174
  }
6153
6175
  case "defined": {
6154
6176
  if (!invert) {
@@ -6156,12 +6178,11 @@ var generateMatchFunc2 = (predicate) => {
6156
6178
  const val = resolveValue(obj, left);
6157
6179
  return val !== void 0;
6158
6180
  };
6159
- } else {
6160
- return (obj, vars) => {
6161
- const val = resolveValue(obj, left);
6162
- return val === void 0;
6163
- };
6164
6181
  }
6182
+ return (obj, vars) => {
6183
+ const val = resolveValue(obj, left);
6184
+ return val === void 0;
6185
+ };
6165
6186
  }
6166
6187
  default: {
6167
6188
  throw new Error("Unexpected");
@@ -6204,7 +6225,8 @@ var generateMatchFunc2 = (predicate) => {
6204
6225
  const expr = parser.parse({ terminals: [")"] });
6205
6226
  return (obj, vars) => {
6206
6227
  const value = resolveValue(obj, left);
6207
- if (!value) return false;
6228
+ if (!value)
6229
+ return false;
6208
6230
  const maxDistance = resolveSymbol(expr[2], vars);
6209
6231
  const distance = haversineDistance(
6210
6232
  {
@@ -6234,9 +6256,8 @@ var generateMatchFunc2 = (predicate) => {
6234
6256
  const array = expr.map((item) => resolveSymbol(item, vars));
6235
6257
  if (keyword.type === "ALL") {
6236
6258
  return array.every((item) => value.includes(item));
6237
- } else {
6238
- return array.some((item) => value.includes(item));
6239
6259
  }
6260
+ return array.some((item) => value.includes(item));
6240
6261
  };
6241
6262
  }).build();
6242
6263
  const result = parser.parse();
@@ -6343,7 +6364,8 @@ var ProductProjectionSearch = class {
6343
6364
  };
6344
6365
  }
6345
6366
  getFacets(params, products) {
6346
- if (!params.facet) return {};
6367
+ if (!params.facet)
6368
+ return {};
6347
6369
  const result = {};
6348
6370
  const regexp = new RegExp(/ counting products$/);
6349
6371
  for (let facet of params.facet) {
@@ -6477,9 +6499,8 @@ var ProductProjectionSearch = class {
6477
6499
  max: numValues > 0 ? Math.max(...values) : 0,
6478
6500
  mean: numValues > 0 ? mean(values) : 0
6479
6501
  };
6480
- } else {
6481
- throw new Error("not supported");
6482
6502
  }
6503
+ throw new Error("not supported");
6483
6504
  }) || [];
6484
6505
  const data = {
6485
6506
  type: "range",
@@ -6826,23 +6847,289 @@ var ProjectUpdateHandler = class extends AbstractUpdateHandler {
6826
6847
  }
6827
6848
  };
6828
6849
 
6829
- // src/repositories/quote.ts
6850
+ // src/repositories/quote/actions.ts
6851
+ var QuoteUpdateHandler = class extends AbstractUpdateHandler {
6852
+ setCustomField(context, resource, { name, value }) {
6853
+ if (!resource.custom) {
6854
+ throw new Error("Resource has no custom field");
6855
+ }
6856
+ resource.custom.fields[name] = value;
6857
+ }
6858
+ setCustomType(context, resource, { type, fields }) {
6859
+ if (!type) {
6860
+ resource.custom = void 0;
6861
+ } else {
6862
+ const resolvedType = this._storage.getByResourceIdentifier(
6863
+ context.projectKey,
6864
+ type
6865
+ );
6866
+ if (!resolvedType) {
6867
+ throw new Error(`Type ${type} not found`);
6868
+ }
6869
+ resource.custom = {
6870
+ type: {
6871
+ typeId: "type",
6872
+ id: resolvedType.id
6873
+ },
6874
+ fields: fields || {}
6875
+ };
6876
+ }
6877
+ }
6878
+ transitionState(context, resource, { state, force }) {
6879
+ let stateReference = void 0;
6880
+ if (state) {
6881
+ stateReference = getReferenceFromResourceIdentifier(
6882
+ state,
6883
+ context.projectKey,
6884
+ this._storage
6885
+ );
6886
+ resource.state = stateReference;
6887
+ } else {
6888
+ throw new CommercetoolsError(
6889
+ {
6890
+ code: "InvalidJsonInput",
6891
+ message: "Request body does not contain valid JSON.",
6892
+ detailedErrorMessage: "actions -> state: Missing required value"
6893
+ },
6894
+ 400
6895
+ );
6896
+ }
6897
+ return resource;
6898
+ }
6899
+ };
6900
+
6901
+ // src/repositories/quote/index.ts
6830
6902
  var QuoteRepository = class extends AbstractResourceRepository {
6831
6903
  constructor(config) {
6832
6904
  super("quote", config);
6905
+ this.actions = new QuoteUpdateHandler(config.storage);
6833
6906
  }
6834
6907
  create(context, draft) {
6835
- throw new Error("not implemented");
6908
+ const staged = this._storage.getByResourceIdentifier(
6909
+ context.projectKey,
6910
+ draft.stagedQuote
6911
+ );
6912
+ const cart = this._storage.getByResourceIdentifier(
6913
+ context.projectKey,
6914
+ staged.quotationCart
6915
+ );
6916
+ if (!cart.customerId) {
6917
+ throw new Error("Cart does not have a customer");
6918
+ }
6919
+ const resource = {
6920
+ ...getBaseResourceProperties(),
6921
+ quoteState: "Accepted",
6922
+ quoteRequest: staged.quoteRequest,
6923
+ lineItems: cart.lineItems,
6924
+ customLineItems: cart.customLineItems,
6925
+ customer: {
6926
+ typeId: "customer",
6927
+ id: cart.customerId
6928
+ },
6929
+ stagedQuote: {
6930
+ typeId: "staged-quote",
6931
+ id: staged.id
6932
+ },
6933
+ totalPrice: cart.totalPrice,
6934
+ taxedPrice: cart.taxedPrice,
6935
+ taxMode: cart.taxMode,
6936
+ taxRoundingMode: cart.taxRoundingMode,
6937
+ taxCalculationMode: cart.taxCalculationMode,
6938
+ billingAddress: cart.billingAddress,
6939
+ shippingAddress: cart.shippingAddress
6940
+ };
6941
+ return resource;
6942
+ }
6943
+ };
6944
+
6945
+ // src/repositories/quote-request/index.ts
6946
+ var import_node_assert4 = __toESM(require("assert"), 1);
6947
+
6948
+ // src/repositories/quote-request/actions.ts
6949
+ var QuoteRequestUpdateHandler = class extends AbstractUpdateHandler {
6950
+ setCustomField(context, resource, { name, value }) {
6951
+ if (!resource.custom) {
6952
+ throw new Error("Resource has no custom field");
6953
+ }
6954
+ resource.custom.fields[name] = value;
6955
+ }
6956
+ setCustomType(context, resource, { type, fields }) {
6957
+ if (!type) {
6958
+ resource.custom = void 0;
6959
+ } else {
6960
+ const resolvedType = this._storage.getByResourceIdentifier(
6961
+ context.projectKey,
6962
+ type
6963
+ );
6964
+ if (!resolvedType) {
6965
+ throw new Error(`Type ${type} not found`);
6966
+ }
6967
+ resource.custom = {
6968
+ type: {
6969
+ typeId: "type",
6970
+ id: resolvedType.id
6971
+ },
6972
+ fields: fields || {}
6973
+ };
6974
+ }
6975
+ }
6976
+ transitionState(context, resource, { state, force }) {
6977
+ let stateReference = void 0;
6978
+ if (state) {
6979
+ stateReference = getReferenceFromResourceIdentifier(
6980
+ state,
6981
+ context.projectKey,
6982
+ this._storage
6983
+ );
6984
+ resource.state = stateReference;
6985
+ } else {
6986
+ throw new CommercetoolsError(
6987
+ {
6988
+ code: "InvalidJsonInput",
6989
+ message: "Request body does not contain valid JSON.",
6990
+ detailedErrorMessage: "actions -> state: Missing required value"
6991
+ },
6992
+ 400
6993
+ );
6994
+ }
6995
+ return resource;
6836
6996
  }
6837
6997
  };
6838
6998
 
6839
- // src/repositories/quote-request.ts
6999
+ // src/repositories/quote-request/index.ts
6840
7000
  var QuoteRequestRepository = class extends AbstractResourceRepository {
6841
7001
  constructor(config) {
6842
7002
  super("quote-request", config);
7003
+ this.actions = new QuoteRequestUpdateHandler(config.storage);
7004
+ }
7005
+ create(context, draft) {
7006
+ (0, import_node_assert4.default)(draft.cart, "draft.cart is missing");
7007
+ return this.createFromCart(context, {
7008
+ id: draft.cart.id,
7009
+ typeId: "cart"
7010
+ });
7011
+ }
7012
+ createFromCart(context, cartReference) {
7013
+ const cart = this._storage.getByResourceIdentifier(
7014
+ context.projectKey,
7015
+ cartReference
7016
+ );
7017
+ if (!cart) {
7018
+ throw new Error("Cannot find cart");
7019
+ }
7020
+ if (!cart.customerId) {
7021
+ throw new Error("Cart does not have a customer");
7022
+ }
7023
+ const resource = {
7024
+ ...getBaseResourceProperties(),
7025
+ billingAddress: cart.billingAddress,
7026
+ cart: cartReference,
7027
+ country: cart.country,
7028
+ custom: cart.custom,
7029
+ customer: {
7030
+ typeId: "customer",
7031
+ id: cart.customerId
7032
+ },
7033
+ customerGroup: cart.customerGroup,
7034
+ customLineItems: [],
7035
+ directDiscounts: cart.directDiscounts,
7036
+ lineItems: cart.lineItems,
7037
+ paymentInfo: cart.paymentInfo,
7038
+ quoteRequestState: "Submitted",
7039
+ shippingAddress: cart.shippingAddress,
7040
+ taxCalculationMode: cart.taxCalculationMode,
7041
+ taxedPrice: cart.taxedPrice,
7042
+ taxMode: cart.taxMode,
7043
+ taxRoundingMode: cart.taxRoundingMode,
7044
+ totalPrice: cart.totalPrice,
7045
+ store: cart.store
7046
+ };
7047
+ return this.saveNew(context, resource);
7048
+ }
7049
+ };
7050
+
7051
+ // src/repositories/quote-staged/actions.ts
7052
+ var StagedQuoteUpdateHandler = class extends AbstractUpdateHandler {
7053
+ setCustomField(context, resource, { name, value }) {
7054
+ if (!resource.custom) {
7055
+ throw new Error("Resource has no custom field");
7056
+ }
7057
+ resource.custom.fields[name] = value;
7058
+ }
7059
+ setCustomType(context, resource, { type, fields }) {
7060
+ if (!type) {
7061
+ resource.custom = void 0;
7062
+ } else {
7063
+ const resolvedType = this._storage.getByResourceIdentifier(
7064
+ context.projectKey,
7065
+ type
7066
+ );
7067
+ if (!resolvedType) {
7068
+ throw new Error(`Type ${type} not found`);
7069
+ }
7070
+ resource.custom = {
7071
+ type: {
7072
+ typeId: "type",
7073
+ id: resolvedType.id
7074
+ },
7075
+ fields: fields || {}
7076
+ };
7077
+ }
7078
+ }
7079
+ transitionState(context, resource, { state, force }) {
7080
+ let stateReference = void 0;
7081
+ if (state) {
7082
+ stateReference = getReferenceFromResourceIdentifier(
7083
+ state,
7084
+ context.projectKey,
7085
+ this._storage
7086
+ );
7087
+ resource.state = stateReference;
7088
+ } else {
7089
+ throw new CommercetoolsError(
7090
+ {
7091
+ code: "InvalidJsonInput",
7092
+ message: "Request body does not contain valid JSON.",
7093
+ detailedErrorMessage: "actions -> state: Missing required value"
7094
+ },
7095
+ 400
7096
+ );
7097
+ }
7098
+ return resource;
7099
+ }
7100
+ };
7101
+
7102
+ // src/repositories/quote-staged/index.ts
7103
+ var StagedQuoteRepository = class extends AbstractResourceRepository {
7104
+ constructor(config) {
7105
+ super("staged-quote", config);
7106
+ this.actions = new StagedQuoteUpdateHandler(config.storage);
6843
7107
  }
6844
7108
  create(context, draft) {
6845
- throw new Error("not implemented");
7109
+ const quoteRequest = this._storage.getByResourceIdentifier(
7110
+ context.projectKey,
7111
+ draft.quoteRequest
7112
+ );
7113
+ if (!quoteRequest.cart) {
7114
+ throw new Error("Cannot find quote request");
7115
+ }
7116
+ const cart = this._storage.getByResourceIdentifier(
7117
+ context.projectKey,
7118
+ quoteRequest.cart
7119
+ );
7120
+ const resource = {
7121
+ ...getBaseResourceProperties(),
7122
+ stagedQuoteState: "InProgress",
7123
+ quoteRequest: {
7124
+ typeId: "quote-request",
7125
+ id: quoteRequest.id
7126
+ },
7127
+ quotationCart: {
7128
+ typeId: "cart",
7129
+ id: cart.id
7130
+ }
7131
+ };
7132
+ return resource;
6846
7133
  }
6847
7134
  };
6848
7135
 
@@ -6852,7 +7139,8 @@ var ReviewRepository = class extends AbstractResourceRepository {
6852
7139
  super("review", config);
6853
7140
  }
6854
7141
  create(context, draft) {
6855
- if (!draft.target) throw new Error("Missing target");
7142
+ if (!draft.target)
7143
+ throw new Error("Missing target");
6856
7144
  const resource = {
6857
7145
  ...getBaseResourceProperties(),
6858
7146
  locale: draft.locale,
@@ -7124,7 +7412,7 @@ var ShoppingListUpdateHandler = class extends AbstractUpdateHandler {
7124
7412
  } else {
7125
7413
  throw new CommercetoolsError({
7126
7414
  code: "General",
7127
- message: `Either lineItemid or lineItemKey needs to be provided.`
7415
+ message: "Either lineItemid or lineItemKey needs to be provided."
7128
7416
  });
7129
7417
  }
7130
7418
  if (quantity === 0) {
@@ -7249,7 +7537,12 @@ var ShoppingListRepository = class extends AbstractResourceRepository {
7249
7537
  context.projectKey,
7250
7538
  this._storage
7251
7539
  ) : void 0,
7252
- store: draft.store ? getStoreKeyReference(draft.store, context.projectKey, this._storage) : void 0
7540
+ store: draft.store ? getStoreKeyReference(draft.store, context.projectKey, this._storage) : void 0,
7541
+ businessUnit: draft.businessUnit ? getBusinessUnitKeyReference(
7542
+ draft.businessUnit,
7543
+ context.projectKey,
7544
+ this._storage
7545
+ ) : void 0
7253
7546
  };
7254
7547
  return this.saveNew(context, resource);
7255
7548
  }
@@ -7304,21 +7597,11 @@ var ShoppingListRepository = class extends AbstractResourceRepository {
7304
7597
  return lineItem;
7305
7598
  }
7306
7599
  throw new Error(
7307
- `must provide either sku, productId or variantId for ShoppingListLineItem`
7600
+ "must provide either sku, productId or variantId for ShoppingListLineItem"
7308
7601
  );
7309
7602
  };
7310
7603
  };
7311
7604
 
7312
- // src/repositories/staged-quote.ts
7313
- var StagedQuoteRepository = class extends AbstractResourceRepository {
7314
- constructor(config) {
7315
- super("staged-quote", config);
7316
- }
7317
- create(context, draft) {
7318
- throw new Error("not implemented");
7319
- }
7320
- };
7321
-
7322
7605
  // src/repositories/standalone-price.ts
7323
7606
  var StandAlonePriceRepository = class extends AbstractResourceRepository {
7324
7607
  constructor(config) {
@@ -7463,7 +7746,8 @@ var StoreRepository = class extends AbstractResourceRepository {
7463
7746
  }
7464
7747
  };
7465
7748
  var transformChannels = (context, storage, channels) => {
7466
- if (!channels) return [];
7749
+ if (!channels)
7750
+ return [];
7467
7751
  return channels.map(
7468
7752
  (ref) => getReferenceFromResourceIdentifier(
7469
7753
  ref,
@@ -7542,7 +7826,8 @@ var SubscriptionRepository = class extends AbstractResourceRepository {
7542
7826
  },
7543
7827
  key: draft.key,
7544
7828
  messages: draft.messages || [],
7545
- status: "Healthy"
7829
+ status: "Healthy",
7830
+ events: draft.events || []
7546
7831
  };
7547
7832
  return this.saveNew(context, resource);
7548
7833
  }
@@ -7764,44 +8049,44 @@ var createRepositories = (config) => ({
7764
8049
  "associate-role": new AssociateRoleRepository(config),
7765
8050
  "attribute-group": new AttributeGroupRepository(config),
7766
8051
  "business-unit": new BusinessUnitRepository(config),
7767
- "category": new CategoryRepository(config),
7768
- "cart": new CartRepository(config),
8052
+ category: new CategoryRepository(config),
8053
+ cart: new CartRepository(config),
7769
8054
  "cart-discount": new CartDiscountRepository(config),
7770
- "customer": new CustomerRepository(config),
7771
- "channel": new ChannelRepository(config),
8055
+ customer: new CustomerRepository(config),
8056
+ channel: new ChannelRepository(config),
7772
8057
  "customer-group": new CustomerGroupRepository(config),
7773
8058
  "discount-code": new DiscountCodeRepository(config),
7774
- "extension": new ExtensionRepository(config),
8059
+ extension: new ExtensionRepository(config),
7775
8060
  "inventory-entry": new InventoryEntryRepository(config),
7776
8061
  "key-value-document": new CustomObjectRepository(config),
7777
- "order": new OrderRepository(config),
8062
+ order: new OrderRepository(config),
7778
8063
  "order-edit": new OrderEditRepository(config),
7779
- "payment": new PaymentRepository(config),
8064
+ payment: new PaymentRepository(config),
7780
8065
  "my-cart": new CartRepository(config),
7781
8066
  "my-order": new MyOrderRepository(config),
7782
8067
  "my-customer": new MyCustomerRepository(config),
7783
8068
  "my-payment": new PaymentRepository(config),
7784
8069
  "my-shopping-list": new ShoppingListRepository(config),
7785
- "product": new ProductRepository(config),
8070
+ product: new ProductRepository(config),
7786
8071
  "product-type": new ProductTypeRepository(config),
7787
8072
  "product-discount": new ProductDiscountRepository(config),
7788
8073
  "product-projection": new ProductProjectionRepository(config),
7789
8074
  "product-selection": new ProductSelectionRepository(config),
7790
8075
  "product-tailoring": new ProductTailoringRepository(config),
7791
- "project": new ProjectRepository(config),
7792
- "review": new ReviewRepository(config),
7793
- "quote": new QuoteRepository(config),
8076
+ project: new ProjectRepository(config),
8077
+ review: new ReviewRepository(config),
8078
+ quote: new QuoteRepository(config),
7794
8079
  "quote-request": new QuoteRequestRepository(config),
7795
8080
  "shipping-method": new ShippingMethodRepository(config),
7796
8081
  "shopping-list": new ShoppingListRepository(config),
7797
8082
  "staged-quote": new StagedQuoteRepository(config),
7798
8083
  "standalone-price": new StandAlonePriceRepository(config),
7799
- "state": new StateRepository(config),
7800
- "store": new StoreRepository(config),
7801
- "subscription": new SubscriptionRepository(config),
8084
+ state: new StateRepository(config),
8085
+ store: new StoreRepository(config),
8086
+ subscription: new SubscriptionRepository(config),
7802
8087
  "tax-category": new TaxCategoryRepository(config),
7803
- "type": new TypeRepository(config),
7804
- "zone": new ZoneRepository(config)
8088
+ type: new TypeRepository(config),
8089
+ zone: new ZoneRepository(config)
7805
8090
  });
7806
8091
 
7807
8092
  // src/services/as-associate.ts
@@ -7882,7 +8167,7 @@ var AbstractService = class {
7882
8167
  return response.status(200).send(result);
7883
8168
  }
7884
8169
  getWithId(request, response) {
7885
- const result = this._expandWithId(request, request.params["id"]);
8170
+ const result = this._expandWithId(request, request.params.id);
7886
8171
  if (!result) {
7887
8172
  return response.status(404).send();
7888
8173
  }
@@ -7891,18 +8176,19 @@ var AbstractService = class {
7891
8176
  getWithKey(request, response) {
7892
8177
  const result = this.repository.getByKey(
7893
8178
  getRepositoryContext(request),
7894
- request.params["key"],
8179
+ request.params.key,
7895
8180
  {
7896
8181
  expand: this._parseParam(request.query.expand)
7897
8182
  }
7898
8183
  );
7899
- if (!result) return response.status(404).send();
8184
+ if (!result)
8185
+ return response.status(404).send();
7900
8186
  return response.status(200).send(result);
7901
8187
  }
7902
8188
  deleteWithId(request, response) {
7903
8189
  const result = this.repository.delete(
7904
8190
  getRepositoryContext(request),
7905
- request.params["id"],
8191
+ request.params.id,
7906
8192
  {
7907
8193
  expand: this._parseParam(request.query.expand)
7908
8194
  }
@@ -7915,7 +8201,7 @@ var AbstractService = class {
7915
8201
  deleteWithKey(request, response) {
7916
8202
  const resource = this.repository.getByKey(
7917
8203
  getRepositoryContext(request),
7918
- request.params["key"]
8204
+ request.params.key
7919
8205
  );
7920
8206
  if (!resource) {
7921
8207
  return response.status(404).send("Not found");
@@ -7948,7 +8234,7 @@ var AbstractService = class {
7948
8234
  );
7949
8235
  const resource = this.repository.get(
7950
8236
  getRepositoryContext(request),
7951
- request.params["id"]
8237
+ request.params.id
7952
8238
  );
7953
8239
  if (!resource) {
7954
8240
  return response.status(404).send("Not found");
@@ -7969,7 +8255,7 @@ var AbstractService = class {
7969
8255
  );
7970
8256
  const resource = this.repository.getByKey(
7971
8257
  getRepositoryContext(request),
7972
- request.params["key"]
8258
+ request.params.key
7973
8259
  );
7974
8260
  if (!resource) {
7975
8261
  return response.status(404).send("Not found");
@@ -8665,19 +8951,19 @@ var ProductProjectionService = class extends AbstractService {
8665
8951
  search(request, response) {
8666
8952
  const query = request.query;
8667
8953
  const searchParams = {
8668
- "filter": queryParamsArray(query.filter),
8954
+ filter: queryParamsArray(query.filter),
8669
8955
  "filter.query": queryParamsArray(query["filter.query"]),
8670
- "facet": queryParamsArray(query.facet),
8671
- "expand": queryParamsArray(query.expand),
8672
- "staged": queryParamsValue(query.staged) === "true",
8673
- "localeProjection": queryParamsValue(query.localeProjection),
8674
- "storeProjection": queryParamsValue(query.storeProjection),
8675
- "priceChannel": queryParamsValue(query.priceChannel),
8676
- "priceCountry": queryParamsValue(query.priceCountry),
8677
- "priceCurrency": queryParamsValue(query.priceCurrency),
8678
- "priceCustomerGroup": queryParamsValue(query.priceCustomerGroup),
8679
- "offset": query.offset ? Number(queryParamsValue(query.offset)) : void 0,
8680
- "limit": query.limit ? Number(queryParamsValue(query.limit)) : void 0
8956
+ facet: queryParamsArray(query.facet),
8957
+ expand: queryParamsArray(query.expand),
8958
+ staged: queryParamsValue(query.staged) === "true",
8959
+ localeProjection: queryParamsValue(query.localeProjection),
8960
+ storeProjection: queryParamsValue(query.storeProjection),
8961
+ priceChannel: queryParamsValue(query.priceChannel),
8962
+ priceCountry: queryParamsValue(query.priceCountry),
8963
+ priceCurrency: queryParamsValue(query.priceCurrency),
8964
+ priceCustomerGroup: queryParamsValue(query.priceCustomerGroup),
8965
+ offset: query.offset ? Number(queryParamsValue(query.offset)) : void 0,
8966
+ limit: query.limit ? Number(queryParamsValue(query.limit)) : void 0
8681
8967
  };
8682
8968
  const resource = this.repository.search(
8683
8969
  getRepositoryContext(request),
@@ -8711,6 +8997,42 @@ var ProductTypeService = class extends AbstractService {
8711
8997
  }
8712
8998
  };
8713
8999
 
9000
+ // src/services/quote.ts
9001
+ var QuoteService = class extends AbstractService {
9002
+ repository;
9003
+ constructor(parent, repository) {
9004
+ super(parent);
9005
+ this.repository = repository;
9006
+ }
9007
+ getBasePath() {
9008
+ return "quotes";
9009
+ }
9010
+ };
9011
+
9012
+ // src/services/quote-request.ts
9013
+ var QuoteRequestService = class extends AbstractService {
9014
+ repository;
9015
+ constructor(parent, repository) {
9016
+ super(parent);
9017
+ this.repository = repository;
9018
+ }
9019
+ getBasePath() {
9020
+ return "quote-requests";
9021
+ }
9022
+ };
9023
+
9024
+ // src/services/quote-staged.ts
9025
+ var StagedQuoteService = class extends AbstractService {
9026
+ repository;
9027
+ constructor(parent, repository) {
9028
+ super(parent);
9029
+ this.repository = repository;
9030
+ }
9031
+ getBasePath() {
9032
+ return "staged-quotes";
9033
+ }
9034
+ };
9035
+
8714
9036
  // src/services/reviews.ts
8715
9037
  var ReviewService = class extends AbstractService {
8716
9038
  repository;
@@ -8854,14 +9176,14 @@ var createServices = (router, repos) => ({
8854
9176
  "associate-role": new AssociateRoleServices(router, repos["associate-role"]),
8855
9177
  "as-associate": new AsAssociateService(router, repos["as-associate"]),
8856
9178
  "business-unit": new BusinessUnitServices(router, repos["business-unit"]),
8857
- "category": new CategoryServices(router, repos["category"]),
8858
- "cart": new CartService(router, repos["cart"], repos["order"]),
9179
+ category: new CategoryServices(router, repos.category),
9180
+ cart: new CartService(router, repos.cart, repos.order),
8859
9181
  "cart-discount": new CartDiscountService(router, repos["cart-discount"]),
8860
- "customer": new CustomerService(router, repos["customer"]),
8861
- "channel": new ChannelService(router, repos["channel"]),
9182
+ customer: new CustomerService(router, repos.customer),
9183
+ channel: new ChannelService(router, repos.channel),
8862
9184
  "customer-group": new CustomerGroupService(router, repos["customer-group"]),
8863
9185
  "discount-code": new DiscountCodeService(router, repos["discount-code"]),
8864
- "extension": new ExtensionServices(router, repos["extension"]),
9186
+ extension: new ExtensionServices(router, repos.extension),
8865
9187
  "inventory-entry": new InventoryEntryService(
8866
9188
  router,
8867
9189
  repos["inventory-entry"]
@@ -8870,8 +9192,8 @@ var createServices = (router, repos) => ({
8870
9192
  router,
8871
9193
  repos["key-value-document"]
8872
9194
  ),
8873
- "order": new OrderService(router, repos["order"]),
8874
- "payment": new PaymentService(router, repos["payment"]),
9195
+ order: new OrderService(router, repos.order),
9196
+ payment: new PaymentService(router, repos.payment),
8875
9197
  "standalone-price": new StandAlonePriceService(
8876
9198
  router,
8877
9199
  repos["standalone-price"]
@@ -8890,7 +9212,7 @@ var createServices = (router, repos) => ({
8890
9212
  repos["shipping-method"]
8891
9213
  ),
8892
9214
  "product-type": new ProductTypeService(router, repos["product-type"]),
8893
- "product": new ProductService(router, repos["product"]),
9215
+ product: new ProductService(router, repos.product),
8894
9216
  "product-discount": new ProductDiscountService(
8895
9217
  router,
8896
9218
  repos["product-discount"]
@@ -8903,18 +9225,21 @@ var createServices = (router, repos) => ({
8903
9225
  router,
8904
9226
  repos["product-selection"]
8905
9227
  ),
8906
- "reviews": new ReviewService(router, repos["review"]),
9228
+ quotes: new QuoteService(router, repos.quote),
9229
+ "quote-request": new QuoteRequestService(router, repos["quote-request"]),
9230
+ reviews: new ReviewService(router, repos.review),
8907
9231
  "shopping-list": new ShoppingListService(router, repos["shopping-list"]),
8908
- "state": new StateService(router, repos["state"]),
8909
- "store": new StoreService(router, repos["store"]),
8910
- "subscription": new SubscriptionService(router, repos["subscription"]),
9232
+ "staged-quote": new StagedQuoteService(router, repos["staged-quote"]),
9233
+ state: new StateService(router, repos.state),
9234
+ store: new StoreService(router, repos.store),
9235
+ subscription: new SubscriptionService(router, repos.subscription),
8911
9236
  "tax-category": new TaxCategoryService(router, repos["tax-category"]),
8912
9237
  "attribute-group": new AttributeGroupService(
8913
9238
  router,
8914
9239
  repos["attribute-group"]
8915
9240
  ),
8916
- "type": new TypeService(router, repos["type"]),
8917
- "zone": new ZoneService(router, repos["zone"])
9241
+ type: new TypeService(router, repos.type),
9242
+ zone: new ZoneService(router, repos.zone)
8918
9243
  });
8919
9244
 
8920
9245
  // src/services/project.ts
@@ -8956,7 +9281,7 @@ var AbstractStorage = class {
8956
9281
  };
8957
9282
 
8958
9283
  // src/storage/in-memory.ts
8959
- var import_assert3 = __toESM(require("assert"), 1);
9284
+ var import_node_assert5 = __toESM(require("assert"), 1);
8960
9285
  var InMemoryStorage = class extends AbstractStorage {
8961
9286
  resources = {};
8962
9287
  projects = {};
@@ -9003,7 +9328,8 @@ var InMemoryStorage = class extends AbstractStorage {
9003
9328
  getProject = (projectKey) => this.addProject(projectKey);
9004
9329
  // Expand resolves a nested reference and injects the object in the given obj
9005
9330
  expand = (projectKey, obj, clause) => {
9006
- if (!clause) return obj;
9331
+ if (!clause)
9332
+ return obj;
9007
9333
  const newObj = cloneObject(obj);
9008
9334
  if (Array.isArray(clause)) {
9009
9335
  for (const c of clause) {
@@ -9034,13 +9360,15 @@ var InMemoryStorage = class extends AbstractStorage {
9034
9360
  this._resolveReference(projectKey, reference, params.rest);
9035
9361
  } else if (params.index === "*") {
9036
9362
  const reference = obj[params.element];
9037
- if (reference === void 0 || !Array.isArray(reference)) return;
9363
+ if (reference === void 0 || !Array.isArray(reference))
9364
+ return;
9038
9365
  for (const itemRef of reference) {
9039
9366
  this._resolveReference(projectKey, itemRef, params.rest);
9040
9367
  }
9041
9368
  } else {
9042
9369
  const reference = obj[params.element][params.index];
9043
- if (reference === void 0) return;
9370
+ if (reference === void 0)
9371
+ return;
9044
9372
  this._resolveReference(projectKey, reference, params.rest);
9045
9373
  }
9046
9374
  };
@@ -9052,38 +9380,38 @@ var InMemoryStorage = class extends AbstractStorage {
9052
9380
  "associate-role": /* @__PURE__ */ new Map(),
9053
9381
  "attribute-group": /* @__PURE__ */ new Map(),
9054
9382
  "business-unit": /* @__PURE__ */ new Map(),
9055
- "cart": /* @__PURE__ */ new Map(),
9383
+ cart: /* @__PURE__ */ new Map(),
9056
9384
  "cart-discount": /* @__PURE__ */ new Map(),
9057
- "category": /* @__PURE__ */ new Map(),
9058
- "channel": /* @__PURE__ */ new Map(),
9059
- "customer": /* @__PURE__ */ new Map(),
9385
+ category: /* @__PURE__ */ new Map(),
9386
+ channel: /* @__PURE__ */ new Map(),
9387
+ customer: /* @__PURE__ */ new Map(),
9060
9388
  "customer-group": /* @__PURE__ */ new Map(),
9061
9389
  "discount-code": /* @__PURE__ */ new Map(),
9062
- "extension": /* @__PURE__ */ new Map(),
9390
+ extension: /* @__PURE__ */ new Map(),
9063
9391
  "inventory-entry": /* @__PURE__ */ new Map(),
9064
9392
  "key-value-document": /* @__PURE__ */ new Map(),
9065
- "order": /* @__PURE__ */ new Map(),
9393
+ order: /* @__PURE__ */ new Map(),
9066
9394
  "order-edit": /* @__PURE__ */ new Map(),
9067
- "payment": /* @__PURE__ */ new Map(),
9068
- "product": /* @__PURE__ */ new Map(),
9069
- "quote": /* @__PURE__ */ new Map(),
9395
+ payment: /* @__PURE__ */ new Map(),
9396
+ product: /* @__PURE__ */ new Map(),
9397
+ quote: /* @__PURE__ */ new Map(),
9070
9398
  "quote-request": /* @__PURE__ */ new Map(),
9071
9399
  "product-discount": /* @__PURE__ */ new Map(),
9072
9400
  "product-selection": /* @__PURE__ */ new Map(),
9073
9401
  "product-type": /* @__PURE__ */ new Map(),
9074
9402
  "product-projection": /* @__PURE__ */ new Map(),
9075
9403
  "product-tailoring": /* @__PURE__ */ new Map(),
9076
- "review": /* @__PURE__ */ new Map(),
9404
+ review: /* @__PURE__ */ new Map(),
9077
9405
  "shipping-method": /* @__PURE__ */ new Map(),
9078
9406
  "staged-quote": /* @__PURE__ */ new Map(),
9079
- "state": /* @__PURE__ */ new Map(),
9080
- "store": /* @__PURE__ */ new Map(),
9407
+ state: /* @__PURE__ */ new Map(),
9408
+ store: /* @__PURE__ */ new Map(),
9081
9409
  "shopping-list": /* @__PURE__ */ new Map(),
9082
9410
  "standalone-price": /* @__PURE__ */ new Map(),
9083
- "subscription": /* @__PURE__ */ new Map(),
9411
+ subscription: /* @__PURE__ */ new Map(),
9084
9412
  "tax-category": /* @__PURE__ */ new Map(),
9085
- "type": /* @__PURE__ */ new Map(),
9086
- "zone": /* @__PURE__ */ new Map()
9413
+ type: /* @__PURE__ */ new Map(),
9414
+ zone: /* @__PURE__ */ new Map()
9087
9415
  };
9088
9416
  }
9089
9417
  return projectStorage;
@@ -9106,7 +9434,7 @@ var InMemoryStorage = class extends AbstractStorage {
9106
9434
  const store = this.forProjectKey(projectKey);
9107
9435
  store[typeId]?.set(obj.id, obj);
9108
9436
  const resource = this.get(projectKey, typeId, obj.id, params);
9109
- (0, import_assert3.default)(
9437
+ (0, import_node_assert5.default)(
9110
9438
  resource,
9111
9439
  `resource of type ${typeId} with id ${obj.id} not created`
9112
9440
  );
@@ -9251,7 +9579,8 @@ var InMemoryStorage = class extends AbstractStorage {
9251
9579
  });
9252
9580
  }
9253
9581
  _resolveReference(projectKey, reference, expand) {
9254
- if (reference === void 0) return;
9582
+ if (reference === void 0)
9583
+ return;
9255
9584
  if (reference.typeId !== void 0 && (reference.id !== void 0 || reference.key !== void 0)) {
9256
9585
  if (!reference.obj) {
9257
9586
  reference.obj = this.getByResourceIdentifier(projectKey, {
@@ -9404,12 +9733,11 @@ var CommercetoolsMock = class {
9404
9733
  message: err.message,
9405
9734
  errors: [err.info]
9406
9735
  });
9407
- } else {
9408
- console.error(err);
9409
- return resp.status(500).send({
9410
- error: err.message
9411
- });
9412
9736
  }
9737
+ console.error(err);
9738
+ return resp.status(500).send({
9739
+ error: err.message
9740
+ });
9413
9741
  });
9414
9742
  return app;
9415
9743
  }
@@ -9427,7 +9755,7 @@ var CommercetoolsMock = class {
9427
9755
  const body = await request.text();
9428
9756
  const url = new URL(request.url);
9429
9757
  const headers = copyHeaders(request.headers);
9430
- const res = await (0, import_light_my_request.default)(app).post(url.pathname + "?" + url.searchParams.toString()).body(body).headers(headers).end();
9758
+ const res = await (0, import_light_my_request.default)(app).post(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
9431
9759
  return new import_msw.HttpResponse(res.body, {
9432
9760
  status: res.statusCode,
9433
9761
  headers: mapHeaderType(res.headers)
@@ -9437,7 +9765,7 @@ var CommercetoolsMock = class {
9437
9765
  const body = await request.text();
9438
9766
  const url = new URL(request.url);
9439
9767
  const headers = copyHeaders(request.headers);
9440
- const res = await (0, import_light_my_request.default)(app).get(url.pathname + "?" + url.searchParams.toString()).body(body).headers(headers).end();
9768
+ const res = await (0, import_light_my_request.default)(app).get(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
9441
9769
  if (res.statusCode === 200) {
9442
9770
  const parsedBody = JSON.parse(res.body);
9443
9771
  const resultCount = "count" in parsedBody ? parsedBody.count : Object.keys(parsedBody).length;
@@ -9455,7 +9783,7 @@ var CommercetoolsMock = class {
9455
9783
  const body = await request.text();
9456
9784
  const url = new URL(request.url);
9457
9785
  const headers = copyHeaders(request.headers);
9458
- const res = await (0, import_light_my_request.default)(app).get(url.pathname + "?" + url.searchParams.toString()).body(body).headers(headers).end();
9786
+ const res = await (0, import_light_my_request.default)(app).get(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
9459
9787
  return new import_msw.HttpResponse(res.body, {
9460
9788
  status: res.statusCode,
9461
9789
  headers: mapHeaderType(res.headers)
@@ -9465,7 +9793,7 @@ var CommercetoolsMock = class {
9465
9793
  const body = await request.text();
9466
9794
  const url = new URL(request.url);
9467
9795
  const headers = copyHeaders(request.headers);
9468
- const res = await (0, import_light_my_request.default)(app).post(url.pathname + "?" + url.searchParams.toString()).body(body).headers(headers).end();
9796
+ const res = await (0, import_light_my_request.default)(app).post(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
9469
9797
  return new import_msw.HttpResponse(res.body, {
9470
9798
  status: res.statusCode,
9471
9799
  headers: mapHeaderType(res.headers)
@@ -9475,7 +9803,7 @@ var CommercetoolsMock = class {
9475
9803
  const body = await request.text();
9476
9804
  const url = new URL(request.url);
9477
9805
  const headers = copyHeaders(request.headers);
9478
- const res = await (0, import_light_my_request.default)(app).delete(url.pathname + "?" + url.searchParams.toString()).body(body).headers(headers).end();
9806
+ const res = await (0, import_light_my_request.default)(app).delete(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
9479
9807
  return new import_msw.HttpResponse(res.body, {
9480
9808
  status: res.statusCode,
9481
9809
  headers: mapHeaderType(res.headers)
@@ -9490,10 +9818,9 @@ var CommercetoolsMock = class {
9490
9818
  if (_globalListeners.length > 0) {
9491
9819
  if (this._mswServer !== void 0) {
9492
9820
  throw new Error("Server already started");
9493
- } else {
9494
- process.emitWarning("Server wasn't stopped properly, clearing");
9495
- _globalListeners.forEach((listener) => listener.close());
9496
9821
  }
9822
+ process.emitWarning("Server wasn't stopped properly, clearing");
9823
+ _globalListeners.forEach((listener) => listener.close());
9497
9824
  }
9498
9825
  const server = (0, import_node.setupServer)();
9499
9826
  this.registerHandlers(server);