@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.
- package/dist/index.cjs +568 -241
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +782 -58
- package/dist/index.d.ts +782 -58
- package/dist/index.js +556 -229
- package/dist/index.js.map +1 -1
- package/package.json +41 -48
- package/src/ctMock.ts +11 -13
- package/src/index.test.ts +5 -5
- package/src/lib/predicateParser.test.ts +62 -62
- package/src/lib/predicateParser.ts +32 -42
- package/src/lib/productSearchFilter.test.ts +18 -0
- package/src/lib/productSearchFilter.ts +7 -0
- package/src/lib/projectionSearchFilter.test.ts +17 -17
- package/src/lib/projectionSearchFilter.ts +2 -3
- package/src/oauth/server.test.ts +1 -1
- package/src/oauth/server.ts +11 -11
- package/src/priceSelector.ts +1 -1
- package/src/product-projection-search.ts +18 -19
- package/src/repositories/business-unit.ts +17 -16
- package/src/repositories/cart/actions.ts +32 -32
- package/src/repositories/cart/helpers.ts +1 -1
- package/src/repositories/cart/index.ts +8 -8
- package/src/repositories/cart-discount/actions.ts +1 -4
- package/src/repositories/category/actions.ts +2 -6
- package/src/repositories/custom-object.ts +20 -21
- package/src/repositories/customer/actions.ts +4 -4
- package/src/repositories/errors.ts +1 -1
- package/src/repositories/extension.ts +2 -1
- package/src/repositories/helpers.ts +27 -27
- package/src/repositories/index.ts +17 -17
- package/src/repositories/my-customer.ts +1 -1
- package/src/repositories/my-order.ts +2 -2
- package/src/repositories/order/index.ts +1 -1
- package/src/repositories/product/actions.ts +1 -1
- package/src/repositories/quote/actions.ts +83 -0
- package/src/repositories/quote/index.ts +54 -0
- package/src/repositories/quote-request/actions.ts +84 -0
- package/src/repositories/quote-request/index.test.ts +167 -0
- package/src/repositories/quote-request/index.ts +67 -0
- package/src/repositories/quote-staged/actions.ts +84 -0
- package/src/repositories/quote-staged/index.ts +47 -0
- package/src/repositories/review.ts +4 -4
- package/src/repositories/shipping-method/actions.ts +17 -17
- package/src/repositories/shipping-method/index.ts +6 -6
- package/src/repositories/shopping-list/actions.ts +1 -1
- package/src/repositories/shopping-list/index.ts +9 -1
- package/src/repositories/subscription.ts +2 -4
- package/src/server.ts +3 -2
- package/src/services/abstract.ts +7 -7
- package/src/services/as-associate-order.test.ts +1 -1
- package/src/services/cart-discount.test.ts +1 -1
- package/src/services/cart.test.ts +15 -15
- package/src/services/category.test.ts +1 -1
- package/src/services/customer.test.ts +4 -4
- package/src/services/customer.ts +1 -1
- package/src/services/index.ts +20 -14
- package/src/services/inventory-entry.test.ts +5 -5
- package/src/services/my-cart.test.ts +2 -2
- package/src/services/my-customer.test.ts +2 -2
- package/src/services/order.test.ts +8 -8
- package/src/services/product-projection.test.ts +5 -5
- package/src/services/product-projection.ts +12 -14
- package/src/services/product.test.ts +1 -1
- package/src/services/quote-request.test.ts +59 -0
- package/src/services/quote-request.ts +16 -0
- package/src/services/quote-staged.ts +16 -0
- package/src/services/quote.ts +16 -0
- package/src/services/standalone-price.test.ts +4 -4
- package/src/services/state.test.ts +1 -1
- package/src/services/store.test.ts +2 -2
- package/src/services/tax-category.test.ts +1 -1
- package/src/shipping.ts +3 -3
- package/src/storage/in-memory.ts +55 -63
- package/src/testing/customer.ts +1 -1
- package/src/types.ts +51 -31
- package/src/repositories/quote-request.ts +0 -17
- package/src/repositories/quote.ts +0 -14
- package/src/repositories/staged-quote.ts +0 -17
package/dist/index.js
CHANGED
|
@@ -144,7 +144,7 @@ var getBearerToken = (request) => {
|
|
|
144
144
|
};
|
|
145
145
|
|
|
146
146
|
// src/oauth/store.ts
|
|
147
|
-
import { randomBytes } from "
|
|
147
|
+
import { randomBytes } from "crypto";
|
|
148
148
|
import { v4 as uuidv43 } from "uuid";
|
|
149
149
|
var OAuth2Store = class {
|
|
150
150
|
tokens = [];
|
|
@@ -209,7 +209,8 @@ var OAuth2Store = class {
|
|
|
209
209
|
};
|
|
210
210
|
}
|
|
211
211
|
validateToken(token) {
|
|
212
|
-
if (!this.validate)
|
|
212
|
+
if (!this.validate)
|
|
213
|
+
return true;
|
|
213
214
|
const foundToken = this.tokens.find((t) => t.access_token === token);
|
|
214
215
|
if (foundToken) {
|
|
215
216
|
return true;
|
|
@@ -343,7 +344,8 @@ var OAuth2Server = class {
|
|
|
343
344
|
request.query.scope?.toString()
|
|
344
345
|
);
|
|
345
346
|
return response.status(200).send(token);
|
|
346
|
-
}
|
|
347
|
+
}
|
|
348
|
+
if (grantType === "refresh_token") {
|
|
347
349
|
const refreshToken = request.query.refresh_token?.toString() || request.body.refresh_token;
|
|
348
350
|
if (!refreshToken) {
|
|
349
351
|
return next(
|
|
@@ -375,17 +377,16 @@ var OAuth2Server = class {
|
|
|
375
377
|
);
|
|
376
378
|
}
|
|
377
379
|
return response.status(200).send(token);
|
|
378
|
-
} else {
|
|
379
|
-
return next(
|
|
380
|
-
new CommercetoolsError(
|
|
381
|
-
{
|
|
382
|
-
code: "unsupported_grant_type",
|
|
383
|
-
message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`
|
|
384
|
-
},
|
|
385
|
-
400
|
|
386
|
-
)
|
|
387
|
-
);
|
|
388
380
|
}
|
|
381
|
+
return next(
|
|
382
|
+
new CommercetoolsError(
|
|
383
|
+
{
|
|
384
|
+
code: "unsupported_grant_type",
|
|
385
|
+
message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`
|
|
386
|
+
},
|
|
387
|
+
400
|
|
388
|
+
)
|
|
389
|
+
);
|
|
389
390
|
}
|
|
390
391
|
async customerTokenHandler(request, response, next) {
|
|
391
392
|
const projectKey = request.params.projectKey;
|
|
@@ -552,7 +553,8 @@ import deepEqual from "deep-equal";
|
|
|
552
553
|
|
|
553
554
|
// src/repositories/errors.ts
|
|
554
555
|
var checkConcurrentModification = (currentVersion, expectedVersion, identifier) => {
|
|
555
|
-
if (currentVersion === expectedVersion)
|
|
556
|
+
if (currentVersion === expectedVersion)
|
|
557
|
+
return;
|
|
556
558
|
throw new CommercetoolsError(
|
|
557
559
|
{
|
|
558
560
|
message: `Object ${identifier} has a different version than expected. Expected: ${expectedVersion} - Actual: ${currentVersion}.`,
|
|
@@ -743,7 +745,8 @@ import { v4 as uuidv46 } from "uuid";
|
|
|
743
745
|
import { Decimal } from "decimal.js/decimal";
|
|
744
746
|
import { v4 as uuidv44 } from "uuid";
|
|
745
747
|
var createAddress = (base, projectKey, storage) => {
|
|
746
|
-
if (!base)
|
|
748
|
+
if (!base)
|
|
749
|
+
return void 0;
|
|
747
750
|
if (!base?.country) {
|
|
748
751
|
throw new Error("Country is required");
|
|
749
752
|
}
|
|
@@ -752,9 +755,12 @@ var createAddress = (base, projectKey, storage) => {
|
|
|
752
755
|
};
|
|
753
756
|
};
|
|
754
757
|
var createCustomFields = (draft, projectKey, storage) => {
|
|
755
|
-
if (!draft)
|
|
756
|
-
|
|
757
|
-
if (!draft.type
|
|
758
|
+
if (!draft)
|
|
759
|
+
return void 0;
|
|
760
|
+
if (!draft.type)
|
|
761
|
+
return void 0;
|
|
762
|
+
if (!draft.type.typeId)
|
|
763
|
+
return void 0;
|
|
758
764
|
const typeResource = storage.getByResourceIdentifier(
|
|
759
765
|
projectKey,
|
|
760
766
|
draft.type
|
|
@@ -837,7 +843,8 @@ var createTypedMoney = (value) => {
|
|
|
837
843
|
return result;
|
|
838
844
|
};
|
|
839
845
|
var resolveStoreReference = (ref, projectKey, storage) => {
|
|
840
|
-
if (!ref)
|
|
846
|
+
if (!ref)
|
|
847
|
+
return void 0;
|
|
841
848
|
const resource = storage.getByResourceIdentifier(projectKey, ref);
|
|
842
849
|
if (!resource) {
|
|
843
850
|
throw new Error("No such store");
|
|
@@ -905,7 +912,8 @@ var getRepositoryContext = (request) => ({
|
|
|
905
912
|
storeKey: request.params.storeKey
|
|
906
913
|
});
|
|
907
914
|
var createAssociate = (a, projectKey, storage) => {
|
|
908
|
-
if (!a)
|
|
915
|
+
if (!a)
|
|
916
|
+
return void 0;
|
|
909
917
|
if (!a.associateRoleAssignments) {
|
|
910
918
|
throw new Error("AssociateRoleAssignments is required");
|
|
911
919
|
}
|
|
@@ -992,10 +1000,6 @@ var markMatchingShippingRatePriceTiers = (cart, tiers) => {
|
|
|
992
1000
|
switch (tierType) {
|
|
993
1001
|
case "CartValue":
|
|
994
1002
|
return markMatchingCartValueTiers(cart, tiers);
|
|
995
|
-
// case 'CartClassification':
|
|
996
|
-
// return markMatchingCartClassificationTiers(cart, tiers)
|
|
997
|
-
// case 'CartScore':
|
|
998
|
-
// return markMatchingCartScoreTiers(cart, tiers)
|
|
999
1003
|
default:
|
|
1000
1004
|
throw new Error(`Unsupported tier type: ${tierType}`);
|
|
1001
1005
|
}
|
|
@@ -1008,7 +1012,8 @@ var markMatchingCartValueTiers = (cart, tiers) => {
|
|
|
1008
1012
|
let hasMatchingTier = false;
|
|
1009
1013
|
for (const tier of sortedTiers) {
|
|
1010
1014
|
const isMatching = !hasMatchingTier && cart.totalPrice.currencyCode === tier.price.currencyCode && cart.totalPrice.centAmount >= tier.minimumCentAmount;
|
|
1011
|
-
if (isMatching)
|
|
1015
|
+
if (isMatching)
|
|
1016
|
+
hasMatchingTier = true;
|
|
1012
1017
|
result[tier.minimumCentAmount] = {
|
|
1013
1018
|
...tier,
|
|
1014
1019
|
isMatching
|
|
@@ -1032,12 +1037,12 @@ var getShippingMethodsMatchingCart = (context, storage, cart, params = {}) => {
|
|
|
1032
1037
|
context.projectKey,
|
|
1033
1038
|
"shipping-method",
|
|
1034
1039
|
{
|
|
1035
|
-
|
|
1036
|
-
|
|
1040
|
+
where: [
|
|
1041
|
+
"zoneRates(zone(id in (:zoneIds)))",
|
|
1037
1042
|
`zoneRates(shippingRates(price(currencyCode="${cart.totalPrice.currencyCode}")))`
|
|
1038
1043
|
],
|
|
1039
1044
|
"var.zoneIds": zoneIds,
|
|
1040
|
-
|
|
1045
|
+
expand: params.expand
|
|
1041
1046
|
}
|
|
1042
1047
|
);
|
|
1043
1048
|
const results = shippingMethods.results.map((shippingMethod) => {
|
|
@@ -1073,7 +1078,7 @@ var selectPrice = ({
|
|
|
1073
1078
|
return countryMatch && currencyMatch;
|
|
1074
1079
|
});
|
|
1075
1080
|
};
|
|
1076
|
-
var calculateLineItemTotalPrice = (lineItem) => lineItem.price
|
|
1081
|
+
var calculateLineItemTotalPrice = (lineItem) => lineItem.price?.value.centAmount * lineItem.quantity;
|
|
1077
1082
|
var calculateCartTotalPrice = (cart) => cart.lineItems.reduce((cur, item) => cur + item.totalPrice.centAmount, 0);
|
|
1078
1083
|
|
|
1079
1084
|
// src/repositories/cart/actions.ts
|
|
@@ -1120,8 +1125,10 @@ var CartUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
1120
1125
|
product.masterData.current.masterVariant,
|
|
1121
1126
|
...product.masterData.current.variants
|
|
1122
1127
|
].find((x) => {
|
|
1123
|
-
if (sku)
|
|
1124
|
-
|
|
1128
|
+
if (sku)
|
|
1129
|
+
return x.sku === sku;
|
|
1130
|
+
if (variantId)
|
|
1131
|
+
return x.id === variantId;
|
|
1125
1132
|
return false;
|
|
1126
1133
|
});
|
|
1127
1134
|
if (!variant) {
|
|
@@ -1207,7 +1214,7 @@ var CartUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
1207
1214
|
} else {
|
|
1208
1215
|
throw new CommercetoolsError({
|
|
1209
1216
|
code: "General",
|
|
1210
|
-
message:
|
|
1217
|
+
message: "Either lineItemid or lineItemKey needs to be provided."
|
|
1211
1218
|
});
|
|
1212
1219
|
}
|
|
1213
1220
|
if (quantity === 0) {
|
|
@@ -1474,7 +1481,7 @@ var CartUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
1474
1481
|
});
|
|
1475
1482
|
}
|
|
1476
1483
|
const zoneRate = method.zoneRates.find(
|
|
1477
|
-
(rate) => rate.zone.obj
|
|
1484
|
+
(rate) => rate.zone.obj?.locations.some((loc) => loc.country === country)
|
|
1478
1485
|
);
|
|
1479
1486
|
if (!zoneRate) {
|
|
1480
1487
|
throw new Error("Zone rate not found");
|
|
@@ -1649,8 +1656,10 @@ var CartRepository = class extends AbstractResourceRepository {
|
|
|
1649
1656
|
product.masterData.current.masterVariant,
|
|
1650
1657
|
...product.masterData.current.variants
|
|
1651
1658
|
].find((x) => {
|
|
1652
|
-
if (sku)
|
|
1653
|
-
|
|
1659
|
+
if (sku)
|
|
1660
|
+
return x.sku === sku;
|
|
1661
|
+
if (variantId)
|
|
1662
|
+
return x.id === variantId;
|
|
1654
1663
|
return false;
|
|
1655
1664
|
});
|
|
1656
1665
|
if (!variant) {
|
|
@@ -1832,7 +1841,8 @@ var OrderUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
1832
1841
|
);
|
|
1833
1842
|
}
|
|
1834
1843
|
setStore(context, resource, { store }) {
|
|
1835
|
-
if (!store)
|
|
1844
|
+
if (!store)
|
|
1845
|
+
return;
|
|
1836
1846
|
const resolvedType = this._storage.getByResourceIdentifier(
|
|
1837
1847
|
context.projectKey,
|
|
1838
1848
|
store
|
|
@@ -1863,7 +1873,8 @@ var OrderUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
1863
1873
|
};
|
|
1864
1874
|
}
|
|
1865
1875
|
updateSyncInfo(context, resource, { channel, externalId, syncedAt }) {
|
|
1866
|
-
if (!channel)
|
|
1876
|
+
if (!channel)
|
|
1877
|
+
return;
|
|
1867
1878
|
const resolvedType = this._storage.getByResourceIdentifier(
|
|
1868
1879
|
context.projectKey,
|
|
1869
1880
|
channel
|
|
@@ -2259,7 +2270,8 @@ var BusinessUnitRepository = class extends AbstractResourceRepository {
|
|
|
2259
2270
|
};
|
|
2260
2271
|
this.saveNew(context, division);
|
|
2261
2272
|
return division;
|
|
2262
|
-
}
|
|
2273
|
+
}
|
|
2274
|
+
if (this._isCompanyDraft(draft)) {
|
|
2263
2275
|
const company = resource;
|
|
2264
2276
|
this.saveNew(context, company);
|
|
2265
2277
|
return company;
|
|
@@ -2381,7 +2393,7 @@ var CartDiscountUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
2381
2393
|
throw new CommercetoolsError(
|
|
2382
2394
|
{
|
|
2383
2395
|
code: "InvalidOperation",
|
|
2384
|
-
message:
|
|
2396
|
+
message: `Cannot remove custom field ${name} because it does not exist.`
|
|
2385
2397
|
},
|
|
2386
2398
|
400
|
|
2387
2399
|
);
|
|
@@ -2561,15 +2573,11 @@ var CategoryUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
2561
2573
|
return;
|
|
2562
2574
|
}
|
|
2563
2575
|
if (assetId) {
|
|
2564
|
-
resource.assets = resource.assets.filter(
|
|
2565
|
-
return obj.id !== assetId;
|
|
2566
|
-
});
|
|
2576
|
+
resource.assets = resource.assets.filter((obj) => obj.id !== assetId);
|
|
2567
2577
|
return;
|
|
2568
2578
|
}
|
|
2569
2579
|
if (assetKey) {
|
|
2570
|
-
resource.assets = resource.assets.filter(
|
|
2571
|
-
return obj.key !== assetKey;
|
|
2572
|
-
});
|
|
2580
|
+
resource.assets = resource.assets.filter((obj) => obj.key !== assetKey);
|
|
2573
2581
|
return;
|
|
2574
2582
|
}
|
|
2575
2583
|
}
|
|
@@ -2792,26 +2800,25 @@ var CustomObjectRepository = class extends AbstractResourceRepository {
|
|
|
2792
2800
|
return updated;
|
|
2793
2801
|
}
|
|
2794
2802
|
return current;
|
|
2795
|
-
} else {
|
|
2796
|
-
if (draft.version) {
|
|
2797
|
-
throw new CommercetoolsError(
|
|
2798
|
-
{
|
|
2799
|
-
code: "InvalidOperation",
|
|
2800
|
-
message: "version on create must be 0"
|
|
2801
|
-
},
|
|
2802
|
-
400
|
|
2803
|
-
);
|
|
2804
|
-
}
|
|
2805
|
-
const baseProperties = getBaseResourceProperties();
|
|
2806
|
-
const resource = {
|
|
2807
|
-
...baseProperties,
|
|
2808
|
-
container: draft.container,
|
|
2809
|
-
key: draft.key,
|
|
2810
|
-
value: draft.value
|
|
2811
|
-
};
|
|
2812
|
-
this.saveNew(context, resource);
|
|
2813
|
-
return resource;
|
|
2814
2803
|
}
|
|
2804
|
+
if (draft.version) {
|
|
2805
|
+
throw new CommercetoolsError(
|
|
2806
|
+
{
|
|
2807
|
+
code: "InvalidOperation",
|
|
2808
|
+
message: "version on create must be 0"
|
|
2809
|
+
},
|
|
2810
|
+
400
|
|
2811
|
+
);
|
|
2812
|
+
}
|
|
2813
|
+
const baseProperties = getBaseResourceProperties();
|
|
2814
|
+
const resource = {
|
|
2815
|
+
...baseProperties,
|
|
2816
|
+
container: draft.container,
|
|
2817
|
+
key: draft.key,
|
|
2818
|
+
value: draft.value
|
|
2819
|
+
};
|
|
2820
|
+
this.saveNew(context, resource);
|
|
2821
|
+
return resource;
|
|
2815
2822
|
}
|
|
2816
2823
|
getWithContainerAndKey(context, container, key) {
|
|
2817
2824
|
const items = this._storage.all(context.projectKey, this.getTypeId());
|
|
@@ -2836,7 +2843,7 @@ var CustomObjectRepository = class extends AbstractResourceRepository {
|
|
|
2836
2843
|
};
|
|
2837
2844
|
|
|
2838
2845
|
// src/repositories/customer/actions.ts
|
|
2839
|
-
import assert2 from "
|
|
2846
|
+
import assert2 from "assert";
|
|
2840
2847
|
var CustomerUpdateHandler = class extends AbstractUpdateHandler {
|
|
2841
2848
|
addAddress(_context, resource, { address }) {
|
|
2842
2849
|
resource.addresses.push({
|
|
@@ -2950,7 +2957,7 @@ var CustomerUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
2950
2957
|
}
|
|
2951
2958
|
resource.authenticationMode = authMode;
|
|
2952
2959
|
if (authMode === "ExternalAuth") {
|
|
2953
|
-
|
|
2960
|
+
resource.password = void 0;
|
|
2954
2961
|
return;
|
|
2955
2962
|
}
|
|
2956
2963
|
if (authMode === "Password") {
|
|
@@ -3504,7 +3511,8 @@ var ExtensionRepository = class extends AbstractResourceRepository {
|
|
|
3504
3511
|
extension,
|
|
3505
3512
|
"destination.authentication.headerValue"
|
|
3506
3513
|
);
|
|
3507
|
-
}
|
|
3514
|
+
}
|
|
3515
|
+
if (extension.destination.type === "AWSLambda") {
|
|
3508
3516
|
return maskSecretValue(resource, "destination.accessSecret");
|
|
3509
3517
|
}
|
|
3510
3518
|
}
|
|
@@ -3979,16 +3987,19 @@ function toRegExp(str) {
|
|
|
3979
3987
|
return new RegExp(str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"));
|
|
3980
3988
|
}
|
|
3981
3989
|
function normalize(regex) {
|
|
3982
|
-
if (typeof regex === "string")
|
|
3990
|
+
if (typeof regex === "string")
|
|
3991
|
+
regex = toRegExp(regex);
|
|
3983
3992
|
if (!regex.source.startsWith("^"))
|
|
3984
3993
|
return new RegExp(`^${regex.source}`, regex.flags);
|
|
3985
|
-
else
|
|
3994
|
+
else
|
|
3995
|
+
return regex;
|
|
3986
3996
|
}
|
|
3987
3997
|
function first(arr, predicate) {
|
|
3988
3998
|
let i = 0;
|
|
3989
3999
|
for (const item of arr) {
|
|
3990
4000
|
const result = predicate(item, i++);
|
|
3991
|
-
if (result)
|
|
4001
|
+
if (result)
|
|
4002
|
+
return { item, result };
|
|
3992
4003
|
}
|
|
3993
4004
|
}
|
|
3994
4005
|
var TokenTypes = class {
|
|
@@ -4152,7 +4163,8 @@ var Lexer = class {
|
|
|
4152
4163
|
*/
|
|
4153
4164
|
peek(position = this._state.position) {
|
|
4154
4165
|
const read = (i = position) => {
|
|
4155
|
-
if (i >= this._state.source.length)
|
|
4166
|
+
if (i >= this._state.source.length)
|
|
4167
|
+
return EOF(this);
|
|
4156
4168
|
const n = this._tokenTypes.peek(this._state.source, i);
|
|
4157
4169
|
if (!n || !n.result) {
|
|
4158
4170
|
throw new Error(
|
|
@@ -4172,7 +4184,8 @@ var Lexer = class {
|
|
|
4172
4184
|
) : null;
|
|
4173
4185
|
};
|
|
4174
4186
|
const t = read();
|
|
4175
|
-
if (t)
|
|
4187
|
+
if (t)
|
|
4188
|
+
return t;
|
|
4176
4189
|
let unexpected = this._state.source.substring(position, position + 1);
|
|
4177
4190
|
try {
|
|
4178
4191
|
this.peek(position + 1);
|
|
@@ -4194,7 +4207,8 @@ var Lexer = class {
|
|
|
4194
4207
|
*/
|
|
4195
4208
|
strpos(i) {
|
|
4196
4209
|
let lines = this._state.source.substring(0, i).split(/\r?\n/);
|
|
4197
|
-
if (!Array.isArray(lines))
|
|
4210
|
+
if (!Array.isArray(lines))
|
|
4211
|
+
lines = [lines];
|
|
4198
4212
|
const line = lines.length;
|
|
4199
4213
|
const column = lines[lines.length - 1].length + 1;
|
|
4200
4214
|
return { line, column };
|
|
@@ -4293,7 +4307,8 @@ var Parser = class {
|
|
|
4293
4307
|
* @returns {number} The binding power of the specified token type
|
|
4294
4308
|
*/
|
|
4295
4309
|
bp(tokenOrType) {
|
|
4296
|
-
if (tokenOrType == null)
|
|
4310
|
+
if (tokenOrType == null)
|
|
4311
|
+
return Number.NEGATIVE_INFINITY;
|
|
4297
4312
|
if (tokenOrType && typeof tokenOrType.isEof == "function" && tokenOrType.isEof())
|
|
4298
4313
|
return Number.NEGATIVE_INFINITY;
|
|
4299
4314
|
const type = this._type(tokenOrType);
|
|
@@ -4338,21 +4353,27 @@ var Parser = class {
|
|
|
4338
4353
|
parse(opts = { terminals: [0] }) {
|
|
4339
4354
|
const stop = opts.stop = opts.stop || createStop();
|
|
4340
4355
|
const check = () => {
|
|
4341
|
-
if (stop.isStopped())
|
|
4356
|
+
if (stop.isStopped())
|
|
4357
|
+
return false;
|
|
4342
4358
|
const t = this.lexer.peek();
|
|
4343
4359
|
const bp = this.bp(t);
|
|
4344
4360
|
return opts.terminals.reduce((canContinue, rbpOrType) => {
|
|
4345
|
-
if (!canContinue)
|
|
4346
|
-
|
|
4347
|
-
if (typeof rbpOrType == "
|
|
4361
|
+
if (!canContinue)
|
|
4362
|
+
return false;
|
|
4363
|
+
if (typeof rbpOrType == "number")
|
|
4364
|
+
return rbpOrType < bp;
|
|
4365
|
+
if (typeof rbpOrType == "string")
|
|
4366
|
+
return t.type != rbpOrType;
|
|
4348
4367
|
}, true);
|
|
4349
4368
|
};
|
|
4350
4369
|
const mkinfo = (token) => {
|
|
4351
4370
|
const bp = this.bp(token);
|
|
4352
4371
|
return { token, bp, stop, ctx: opts.ctx, options: opts };
|
|
4353
4372
|
};
|
|
4354
|
-
if (!opts.terminals)
|
|
4355
|
-
|
|
4373
|
+
if (!opts.terminals)
|
|
4374
|
+
opts.terminals = [0];
|
|
4375
|
+
if (opts.terminals.length == 0)
|
|
4376
|
+
opts.terminals.push(0);
|
|
4356
4377
|
let left = this.nud(mkinfo(this.lexer.next()));
|
|
4357
4378
|
while (check()) {
|
|
4358
4379
|
const operator = this.lexer.next();
|
|
@@ -4484,7 +4505,7 @@ var parseFilter = (filter) => {
|
|
|
4484
4505
|
(t) => ({
|
|
4485
4506
|
type: "Symbol",
|
|
4486
4507
|
kind: "int",
|
|
4487
|
-
value: parseInt(t.token.match, 10)
|
|
4508
|
+
value: Number.parseInt(t.token.match, 10)
|
|
4488
4509
|
})
|
|
4489
4510
|
).nud("STAR", 5, (_) => ({
|
|
4490
4511
|
type: "Symbol",
|
|
@@ -4508,9 +4529,8 @@ var parseFilter = (filter) => {
|
|
|
4508
4529
|
const expr = parser.parse({ terminals: [bp - 1] });
|
|
4509
4530
|
if (Array.isArray(expr)) {
|
|
4510
4531
|
return [left, ...expr];
|
|
4511
|
-
} else {
|
|
4512
|
-
return [left, expr];
|
|
4513
4532
|
}
|
|
4533
|
+
return [left, expr];
|
|
4514
4534
|
}).nud("(", 100, (t) => {
|
|
4515
4535
|
const expr = parser.parse({ terminals: [")"] });
|
|
4516
4536
|
lexer.expect(")");
|
|
@@ -4556,7 +4576,8 @@ var generateMatchFunc = (filter) => {
|
|
|
4556
4576
|
throw new Error(`Syntax error while parsing '${filter}'.`);
|
|
4557
4577
|
}
|
|
4558
4578
|
return (obj) => {
|
|
4559
|
-
if (!result.children)
|
|
4579
|
+
if (!result.children)
|
|
4580
|
+
return false;
|
|
4560
4581
|
return result.children.some((c) => c.match(obj));
|
|
4561
4582
|
};
|
|
4562
4583
|
};
|
|
@@ -4662,6 +4683,12 @@ var parseSearchQuery = (searchQuery) => {
|
|
|
4662
4683
|
return generateFieldMatchFunc(generateRangeMatchFunc, searchQuery.range);
|
|
4663
4684
|
}
|
|
4664
4685
|
if (isSearchExactExpression(searchQuery)) {
|
|
4686
|
+
if (Array.isArray(searchQuery.exact.values)) {
|
|
4687
|
+
return generateFieldMatchFunc(
|
|
4688
|
+
(value) => (searchQuery.exact.values ?? []).includes(value),
|
|
4689
|
+
searchQuery.exact
|
|
4690
|
+
);
|
|
4691
|
+
}
|
|
4665
4692
|
return generateFieldMatchFunc(
|
|
4666
4693
|
(value) => value === searchQuery.exact.value,
|
|
4667
4694
|
searchQuery.exact
|
|
@@ -5280,7 +5307,7 @@ var ProductUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
5280
5307
|
}
|
|
5281
5308
|
if (position >= variantImages.length) {
|
|
5282
5309
|
throw new Error(
|
|
5283
|
-
|
|
5310
|
+
"Invalid position given. Position in images where the image should be moved. Must be between 0 and the total number of images minus 1."
|
|
5284
5311
|
);
|
|
5285
5312
|
}
|
|
5286
5313
|
variant.images = variantImages.filter((image) => image.url !== imageUrl);
|
|
@@ -5913,9 +5940,8 @@ var parseQueryExpression = (predicate) => {
|
|
|
5913
5940
|
if (Array.isArray(predicate)) {
|
|
5914
5941
|
const callbacks = predicate.map((item) => generateMatchFunc2(item));
|
|
5915
5942
|
return (target, variables) => callbacks.every((callback) => callback(target, variables));
|
|
5916
|
-
} else {
|
|
5917
|
-
return generateMatchFunc2(predicate);
|
|
5918
5943
|
}
|
|
5944
|
+
return generateMatchFunc2(predicate);
|
|
5919
5945
|
};
|
|
5920
5946
|
var validateSymbol = (val) => {
|
|
5921
5947
|
if (!val.type) {
|
|
@@ -5970,7 +5996,7 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
5970
5996
|
1,
|
|
5971
5997
|
(t) => ({
|
|
5972
5998
|
type: "boolean",
|
|
5973
|
-
value: t.token.match === "true"
|
|
5999
|
+
value: t.token.match === "true",
|
|
5974
6000
|
pos: t.token.strpos()
|
|
5975
6001
|
})
|
|
5976
6002
|
).nud(
|
|
@@ -5996,7 +6022,7 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
5996
6022
|
1,
|
|
5997
6023
|
(t) => ({
|
|
5998
6024
|
type: "int",
|
|
5999
|
-
value: parseInt(t.token.match, 10),
|
|
6025
|
+
value: Number.parseInt(t.token.match, 10),
|
|
6000
6026
|
pos: t.token.strpos()
|
|
6001
6027
|
})
|
|
6002
6028
|
).nud(
|
|
@@ -6004,7 +6030,7 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
6004
6030
|
1,
|
|
6005
6031
|
(t) => ({
|
|
6006
6032
|
type: "float",
|
|
6007
|
-
value: parseFloat(t.token.match),
|
|
6033
|
+
value: Number.parseFloat(t.token.match),
|
|
6008
6034
|
pos: t.token.strpos()
|
|
6009
6035
|
})
|
|
6010
6036
|
).nud("NOT", 100, ({ bp }) => {
|
|
@@ -6020,9 +6046,8 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
6020
6046
|
const expr = parser.parse({ terminals: [bp - 1] });
|
|
6021
6047
|
if (Array.isArray(expr)) {
|
|
6022
6048
|
return [left, ...expr];
|
|
6023
|
-
} else {
|
|
6024
|
-
return [left, expr];
|
|
6025
6049
|
}
|
|
6050
|
+
return [left, expr];
|
|
6026
6051
|
}).nud("(", 100, (t) => {
|
|
6027
6052
|
const expr = parser.parse({ terminals: [")"] });
|
|
6028
6053
|
return expr;
|
|
@@ -6032,22 +6057,21 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
6032
6057
|
return (obj, vars) => {
|
|
6033
6058
|
if (Array.isArray(obj)) {
|
|
6034
6059
|
return obj.some((item) => {
|
|
6035
|
-
const
|
|
6036
|
-
if (
|
|
6037
|
-
return expr(
|
|
6060
|
+
const value2 = resolveValue(item, left);
|
|
6061
|
+
if (value2) {
|
|
6062
|
+
return expr(value2, vars);
|
|
6038
6063
|
}
|
|
6039
6064
|
return false;
|
|
6040
6065
|
});
|
|
6041
|
-
}
|
|
6042
|
-
|
|
6043
|
-
|
|
6044
|
-
|
|
6045
|
-
|
|
6046
|
-
}
|
|
6047
|
-
return expr(value, vars);
|
|
6066
|
+
}
|
|
6067
|
+
const value = resolveValue(obj, left);
|
|
6068
|
+
if (value) {
|
|
6069
|
+
if (Array.isArray(value)) {
|
|
6070
|
+
return value.some((item) => expr(item, vars));
|
|
6048
6071
|
}
|
|
6049
|
-
return
|
|
6072
|
+
return expr(value, vars);
|
|
6050
6073
|
}
|
|
6074
|
+
return false;
|
|
6051
6075
|
};
|
|
6052
6076
|
}).bp(")", 0).led("=", 20, ({ left, bp }) => {
|
|
6053
6077
|
const expr = parser.parse({ terminals: [bp - 1] });
|
|
@@ -6062,14 +6086,13 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
6062
6086
|
}
|
|
6063
6087
|
return value === other;
|
|
6064
6088
|
});
|
|
6065
|
-
} else {
|
|
6066
|
-
const resolvedValue = resolveValue(obj, left);
|
|
6067
|
-
const resolvedSymbol = resolveSymbol(expr, vars);
|
|
6068
|
-
if (Array.isArray(resolvedValue)) {
|
|
6069
|
-
return !!resolvedValue.some((elem) => elem === resolvedSymbol);
|
|
6070
|
-
}
|
|
6071
|
-
return resolvedValue === resolvedSymbol;
|
|
6072
6089
|
}
|
|
6090
|
+
const resolvedValue = resolveValue(obj, left);
|
|
6091
|
+
const resolvedSymbol = resolveSymbol(expr, vars);
|
|
6092
|
+
if (Array.isArray(resolvedValue)) {
|
|
6093
|
+
return !!resolvedValue.some((elem) => elem === resolvedSymbol);
|
|
6094
|
+
}
|
|
6095
|
+
return resolvedValue === resolvedSymbol;
|
|
6073
6096
|
};
|
|
6074
6097
|
}).led("!=", 20, ({ left, bp }) => {
|
|
6075
6098
|
const expr = parser.parse({ terminals: [bp - 1] });
|
|
@@ -6106,12 +6129,11 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
6106
6129
|
const val = resolveValue(obj, left);
|
|
6107
6130
|
return val.length === 0;
|
|
6108
6131
|
};
|
|
6109
|
-
} else {
|
|
6110
|
-
return (obj, vars) => {
|
|
6111
|
-
const val = resolveValue(obj, left);
|
|
6112
|
-
return val.length !== 0;
|
|
6113
|
-
};
|
|
6114
6132
|
}
|
|
6133
|
+
return (obj, vars) => {
|
|
6134
|
+
const val = resolveValue(obj, left);
|
|
6135
|
+
return val.length !== 0;
|
|
6136
|
+
};
|
|
6115
6137
|
}
|
|
6116
6138
|
case "defined": {
|
|
6117
6139
|
if (!invert) {
|
|
@@ -6119,12 +6141,11 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
6119
6141
|
const val = resolveValue(obj, left);
|
|
6120
6142
|
return val !== void 0;
|
|
6121
6143
|
};
|
|
6122
|
-
} else {
|
|
6123
|
-
return (obj, vars) => {
|
|
6124
|
-
const val = resolveValue(obj, left);
|
|
6125
|
-
return val === void 0;
|
|
6126
|
-
};
|
|
6127
6144
|
}
|
|
6145
|
+
return (obj, vars) => {
|
|
6146
|
+
const val = resolveValue(obj, left);
|
|
6147
|
+
return val === void 0;
|
|
6148
|
+
};
|
|
6128
6149
|
}
|
|
6129
6150
|
default: {
|
|
6130
6151
|
throw new Error("Unexpected");
|
|
@@ -6167,7 +6188,8 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
6167
6188
|
const expr = parser.parse({ terminals: [")"] });
|
|
6168
6189
|
return (obj, vars) => {
|
|
6169
6190
|
const value = resolveValue(obj, left);
|
|
6170
|
-
if (!value)
|
|
6191
|
+
if (!value)
|
|
6192
|
+
return false;
|
|
6171
6193
|
const maxDistance = resolveSymbol(expr[2], vars);
|
|
6172
6194
|
const distance = haversineDistance(
|
|
6173
6195
|
{
|
|
@@ -6197,9 +6219,8 @@ var generateMatchFunc2 = (predicate) => {
|
|
|
6197
6219
|
const array = expr.map((item) => resolveSymbol(item, vars));
|
|
6198
6220
|
if (keyword.type === "ALL") {
|
|
6199
6221
|
return array.every((item) => value.includes(item));
|
|
6200
|
-
} else {
|
|
6201
|
-
return array.some((item) => value.includes(item));
|
|
6202
6222
|
}
|
|
6223
|
+
return array.some((item) => value.includes(item));
|
|
6203
6224
|
};
|
|
6204
6225
|
}).build();
|
|
6205
6226
|
const result = parser.parse();
|
|
@@ -6306,7 +6327,8 @@ var ProductProjectionSearch = class {
|
|
|
6306
6327
|
};
|
|
6307
6328
|
}
|
|
6308
6329
|
getFacets(params, products) {
|
|
6309
|
-
if (!params.facet)
|
|
6330
|
+
if (!params.facet)
|
|
6331
|
+
return {};
|
|
6310
6332
|
const result = {};
|
|
6311
6333
|
const regexp = new RegExp(/ counting products$/);
|
|
6312
6334
|
for (let facet of params.facet) {
|
|
@@ -6440,9 +6462,8 @@ var ProductProjectionSearch = class {
|
|
|
6440
6462
|
max: numValues > 0 ? Math.max(...values) : 0,
|
|
6441
6463
|
mean: numValues > 0 ? mean(values) : 0
|
|
6442
6464
|
};
|
|
6443
|
-
} else {
|
|
6444
|
-
throw new Error("not supported");
|
|
6445
6465
|
}
|
|
6466
|
+
throw new Error("not supported");
|
|
6446
6467
|
}) || [];
|
|
6447
6468
|
const data = {
|
|
6448
6469
|
type: "range",
|
|
@@ -6789,23 +6810,289 @@ var ProjectUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
6789
6810
|
}
|
|
6790
6811
|
};
|
|
6791
6812
|
|
|
6792
|
-
// src/repositories/quote.ts
|
|
6813
|
+
// src/repositories/quote/actions.ts
|
|
6814
|
+
var QuoteUpdateHandler = class extends AbstractUpdateHandler {
|
|
6815
|
+
setCustomField(context, resource, { name, value }) {
|
|
6816
|
+
if (!resource.custom) {
|
|
6817
|
+
throw new Error("Resource has no custom field");
|
|
6818
|
+
}
|
|
6819
|
+
resource.custom.fields[name] = value;
|
|
6820
|
+
}
|
|
6821
|
+
setCustomType(context, resource, { type, fields }) {
|
|
6822
|
+
if (!type) {
|
|
6823
|
+
resource.custom = void 0;
|
|
6824
|
+
} else {
|
|
6825
|
+
const resolvedType = this._storage.getByResourceIdentifier(
|
|
6826
|
+
context.projectKey,
|
|
6827
|
+
type
|
|
6828
|
+
);
|
|
6829
|
+
if (!resolvedType) {
|
|
6830
|
+
throw new Error(`Type ${type} not found`);
|
|
6831
|
+
}
|
|
6832
|
+
resource.custom = {
|
|
6833
|
+
type: {
|
|
6834
|
+
typeId: "type",
|
|
6835
|
+
id: resolvedType.id
|
|
6836
|
+
},
|
|
6837
|
+
fields: fields || {}
|
|
6838
|
+
};
|
|
6839
|
+
}
|
|
6840
|
+
}
|
|
6841
|
+
transitionState(context, resource, { state, force }) {
|
|
6842
|
+
let stateReference = void 0;
|
|
6843
|
+
if (state) {
|
|
6844
|
+
stateReference = getReferenceFromResourceIdentifier(
|
|
6845
|
+
state,
|
|
6846
|
+
context.projectKey,
|
|
6847
|
+
this._storage
|
|
6848
|
+
);
|
|
6849
|
+
resource.state = stateReference;
|
|
6850
|
+
} else {
|
|
6851
|
+
throw new CommercetoolsError(
|
|
6852
|
+
{
|
|
6853
|
+
code: "InvalidJsonInput",
|
|
6854
|
+
message: "Request body does not contain valid JSON.",
|
|
6855
|
+
detailedErrorMessage: "actions -> state: Missing required value"
|
|
6856
|
+
},
|
|
6857
|
+
400
|
|
6858
|
+
);
|
|
6859
|
+
}
|
|
6860
|
+
return resource;
|
|
6861
|
+
}
|
|
6862
|
+
};
|
|
6863
|
+
|
|
6864
|
+
// src/repositories/quote/index.ts
|
|
6793
6865
|
var QuoteRepository = class extends AbstractResourceRepository {
|
|
6794
6866
|
constructor(config) {
|
|
6795
6867
|
super("quote", config);
|
|
6868
|
+
this.actions = new QuoteUpdateHandler(config.storage);
|
|
6796
6869
|
}
|
|
6797
6870
|
create(context, draft) {
|
|
6798
|
-
|
|
6871
|
+
const staged = this._storage.getByResourceIdentifier(
|
|
6872
|
+
context.projectKey,
|
|
6873
|
+
draft.stagedQuote
|
|
6874
|
+
);
|
|
6875
|
+
const cart = this._storage.getByResourceIdentifier(
|
|
6876
|
+
context.projectKey,
|
|
6877
|
+
staged.quotationCart
|
|
6878
|
+
);
|
|
6879
|
+
if (!cart.customerId) {
|
|
6880
|
+
throw new Error("Cart does not have a customer");
|
|
6881
|
+
}
|
|
6882
|
+
const resource = {
|
|
6883
|
+
...getBaseResourceProperties(),
|
|
6884
|
+
quoteState: "Accepted",
|
|
6885
|
+
quoteRequest: staged.quoteRequest,
|
|
6886
|
+
lineItems: cart.lineItems,
|
|
6887
|
+
customLineItems: cart.customLineItems,
|
|
6888
|
+
customer: {
|
|
6889
|
+
typeId: "customer",
|
|
6890
|
+
id: cart.customerId
|
|
6891
|
+
},
|
|
6892
|
+
stagedQuote: {
|
|
6893
|
+
typeId: "staged-quote",
|
|
6894
|
+
id: staged.id
|
|
6895
|
+
},
|
|
6896
|
+
totalPrice: cart.totalPrice,
|
|
6897
|
+
taxedPrice: cart.taxedPrice,
|
|
6898
|
+
taxMode: cart.taxMode,
|
|
6899
|
+
taxRoundingMode: cart.taxRoundingMode,
|
|
6900
|
+
taxCalculationMode: cart.taxCalculationMode,
|
|
6901
|
+
billingAddress: cart.billingAddress,
|
|
6902
|
+
shippingAddress: cart.shippingAddress
|
|
6903
|
+
};
|
|
6904
|
+
return resource;
|
|
6905
|
+
}
|
|
6906
|
+
};
|
|
6907
|
+
|
|
6908
|
+
// src/repositories/quote-request/index.ts
|
|
6909
|
+
import assert4 from "assert";
|
|
6910
|
+
|
|
6911
|
+
// src/repositories/quote-request/actions.ts
|
|
6912
|
+
var QuoteRequestUpdateHandler = class extends AbstractUpdateHandler {
|
|
6913
|
+
setCustomField(context, resource, { name, value }) {
|
|
6914
|
+
if (!resource.custom) {
|
|
6915
|
+
throw new Error("Resource has no custom field");
|
|
6916
|
+
}
|
|
6917
|
+
resource.custom.fields[name] = value;
|
|
6918
|
+
}
|
|
6919
|
+
setCustomType(context, resource, { type, fields }) {
|
|
6920
|
+
if (!type) {
|
|
6921
|
+
resource.custom = void 0;
|
|
6922
|
+
} else {
|
|
6923
|
+
const resolvedType = this._storage.getByResourceIdentifier(
|
|
6924
|
+
context.projectKey,
|
|
6925
|
+
type
|
|
6926
|
+
);
|
|
6927
|
+
if (!resolvedType) {
|
|
6928
|
+
throw new Error(`Type ${type} not found`);
|
|
6929
|
+
}
|
|
6930
|
+
resource.custom = {
|
|
6931
|
+
type: {
|
|
6932
|
+
typeId: "type",
|
|
6933
|
+
id: resolvedType.id
|
|
6934
|
+
},
|
|
6935
|
+
fields: fields || {}
|
|
6936
|
+
};
|
|
6937
|
+
}
|
|
6938
|
+
}
|
|
6939
|
+
transitionState(context, resource, { state, force }) {
|
|
6940
|
+
let stateReference = void 0;
|
|
6941
|
+
if (state) {
|
|
6942
|
+
stateReference = getReferenceFromResourceIdentifier(
|
|
6943
|
+
state,
|
|
6944
|
+
context.projectKey,
|
|
6945
|
+
this._storage
|
|
6946
|
+
);
|
|
6947
|
+
resource.state = stateReference;
|
|
6948
|
+
} else {
|
|
6949
|
+
throw new CommercetoolsError(
|
|
6950
|
+
{
|
|
6951
|
+
code: "InvalidJsonInput",
|
|
6952
|
+
message: "Request body does not contain valid JSON.",
|
|
6953
|
+
detailedErrorMessage: "actions -> state: Missing required value"
|
|
6954
|
+
},
|
|
6955
|
+
400
|
|
6956
|
+
);
|
|
6957
|
+
}
|
|
6958
|
+
return resource;
|
|
6799
6959
|
}
|
|
6800
6960
|
};
|
|
6801
6961
|
|
|
6802
|
-
// src/repositories/quote-request.ts
|
|
6962
|
+
// src/repositories/quote-request/index.ts
|
|
6803
6963
|
var QuoteRequestRepository = class extends AbstractResourceRepository {
|
|
6804
6964
|
constructor(config) {
|
|
6805
6965
|
super("quote-request", config);
|
|
6966
|
+
this.actions = new QuoteRequestUpdateHandler(config.storage);
|
|
6967
|
+
}
|
|
6968
|
+
create(context, draft) {
|
|
6969
|
+
assert4(draft.cart, "draft.cart is missing");
|
|
6970
|
+
return this.createFromCart(context, {
|
|
6971
|
+
id: draft.cart.id,
|
|
6972
|
+
typeId: "cart"
|
|
6973
|
+
});
|
|
6974
|
+
}
|
|
6975
|
+
createFromCart(context, cartReference) {
|
|
6976
|
+
const cart = this._storage.getByResourceIdentifier(
|
|
6977
|
+
context.projectKey,
|
|
6978
|
+
cartReference
|
|
6979
|
+
);
|
|
6980
|
+
if (!cart) {
|
|
6981
|
+
throw new Error("Cannot find cart");
|
|
6982
|
+
}
|
|
6983
|
+
if (!cart.customerId) {
|
|
6984
|
+
throw new Error("Cart does not have a customer");
|
|
6985
|
+
}
|
|
6986
|
+
const resource = {
|
|
6987
|
+
...getBaseResourceProperties(),
|
|
6988
|
+
billingAddress: cart.billingAddress,
|
|
6989
|
+
cart: cartReference,
|
|
6990
|
+
country: cart.country,
|
|
6991
|
+
custom: cart.custom,
|
|
6992
|
+
customer: {
|
|
6993
|
+
typeId: "customer",
|
|
6994
|
+
id: cart.customerId
|
|
6995
|
+
},
|
|
6996
|
+
customerGroup: cart.customerGroup,
|
|
6997
|
+
customLineItems: [],
|
|
6998
|
+
directDiscounts: cart.directDiscounts,
|
|
6999
|
+
lineItems: cart.lineItems,
|
|
7000
|
+
paymentInfo: cart.paymentInfo,
|
|
7001
|
+
quoteRequestState: "Submitted",
|
|
7002
|
+
shippingAddress: cart.shippingAddress,
|
|
7003
|
+
taxCalculationMode: cart.taxCalculationMode,
|
|
7004
|
+
taxedPrice: cart.taxedPrice,
|
|
7005
|
+
taxMode: cart.taxMode,
|
|
7006
|
+
taxRoundingMode: cart.taxRoundingMode,
|
|
7007
|
+
totalPrice: cart.totalPrice,
|
|
7008
|
+
store: cart.store
|
|
7009
|
+
};
|
|
7010
|
+
return this.saveNew(context, resource);
|
|
7011
|
+
}
|
|
7012
|
+
};
|
|
7013
|
+
|
|
7014
|
+
// src/repositories/quote-staged/actions.ts
|
|
7015
|
+
var StagedQuoteUpdateHandler = class extends AbstractUpdateHandler {
|
|
7016
|
+
setCustomField(context, resource, { name, value }) {
|
|
7017
|
+
if (!resource.custom) {
|
|
7018
|
+
throw new Error("Resource has no custom field");
|
|
7019
|
+
}
|
|
7020
|
+
resource.custom.fields[name] = value;
|
|
7021
|
+
}
|
|
7022
|
+
setCustomType(context, resource, { type, fields }) {
|
|
7023
|
+
if (!type) {
|
|
7024
|
+
resource.custom = void 0;
|
|
7025
|
+
} else {
|
|
7026
|
+
const resolvedType = this._storage.getByResourceIdentifier(
|
|
7027
|
+
context.projectKey,
|
|
7028
|
+
type
|
|
7029
|
+
);
|
|
7030
|
+
if (!resolvedType) {
|
|
7031
|
+
throw new Error(`Type ${type} not found`);
|
|
7032
|
+
}
|
|
7033
|
+
resource.custom = {
|
|
7034
|
+
type: {
|
|
7035
|
+
typeId: "type",
|
|
7036
|
+
id: resolvedType.id
|
|
7037
|
+
},
|
|
7038
|
+
fields: fields || {}
|
|
7039
|
+
};
|
|
7040
|
+
}
|
|
7041
|
+
}
|
|
7042
|
+
transitionState(context, resource, { state, force }) {
|
|
7043
|
+
let stateReference = void 0;
|
|
7044
|
+
if (state) {
|
|
7045
|
+
stateReference = getReferenceFromResourceIdentifier(
|
|
7046
|
+
state,
|
|
7047
|
+
context.projectKey,
|
|
7048
|
+
this._storage
|
|
7049
|
+
);
|
|
7050
|
+
resource.state = stateReference;
|
|
7051
|
+
} else {
|
|
7052
|
+
throw new CommercetoolsError(
|
|
7053
|
+
{
|
|
7054
|
+
code: "InvalidJsonInput",
|
|
7055
|
+
message: "Request body does not contain valid JSON.",
|
|
7056
|
+
detailedErrorMessage: "actions -> state: Missing required value"
|
|
7057
|
+
},
|
|
7058
|
+
400
|
|
7059
|
+
);
|
|
7060
|
+
}
|
|
7061
|
+
return resource;
|
|
7062
|
+
}
|
|
7063
|
+
};
|
|
7064
|
+
|
|
7065
|
+
// src/repositories/quote-staged/index.ts
|
|
7066
|
+
var StagedQuoteRepository = class extends AbstractResourceRepository {
|
|
7067
|
+
constructor(config) {
|
|
7068
|
+
super("staged-quote", config);
|
|
7069
|
+
this.actions = new StagedQuoteUpdateHandler(config.storage);
|
|
6806
7070
|
}
|
|
6807
7071
|
create(context, draft) {
|
|
6808
|
-
|
|
7072
|
+
const quoteRequest = this._storage.getByResourceIdentifier(
|
|
7073
|
+
context.projectKey,
|
|
7074
|
+
draft.quoteRequest
|
|
7075
|
+
);
|
|
7076
|
+
if (!quoteRequest.cart) {
|
|
7077
|
+
throw new Error("Cannot find quote request");
|
|
7078
|
+
}
|
|
7079
|
+
const cart = this._storage.getByResourceIdentifier(
|
|
7080
|
+
context.projectKey,
|
|
7081
|
+
quoteRequest.cart
|
|
7082
|
+
);
|
|
7083
|
+
const resource = {
|
|
7084
|
+
...getBaseResourceProperties(),
|
|
7085
|
+
stagedQuoteState: "InProgress",
|
|
7086
|
+
quoteRequest: {
|
|
7087
|
+
typeId: "quote-request",
|
|
7088
|
+
id: quoteRequest.id
|
|
7089
|
+
},
|
|
7090
|
+
quotationCart: {
|
|
7091
|
+
typeId: "cart",
|
|
7092
|
+
id: cart.id
|
|
7093
|
+
}
|
|
7094
|
+
};
|
|
7095
|
+
return resource;
|
|
6809
7096
|
}
|
|
6810
7097
|
};
|
|
6811
7098
|
|
|
@@ -6815,7 +7102,8 @@ var ReviewRepository = class extends AbstractResourceRepository {
|
|
|
6815
7102
|
super("review", config);
|
|
6816
7103
|
}
|
|
6817
7104
|
create(context, draft) {
|
|
6818
|
-
if (!draft.target)
|
|
7105
|
+
if (!draft.target)
|
|
7106
|
+
throw new Error("Missing target");
|
|
6819
7107
|
const resource = {
|
|
6820
7108
|
...getBaseResourceProperties(),
|
|
6821
7109
|
locale: draft.locale,
|
|
@@ -7087,7 +7375,7 @@ var ShoppingListUpdateHandler = class extends AbstractUpdateHandler {
|
|
|
7087
7375
|
} else {
|
|
7088
7376
|
throw new CommercetoolsError({
|
|
7089
7377
|
code: "General",
|
|
7090
|
-
message:
|
|
7378
|
+
message: "Either lineItemid or lineItemKey needs to be provided."
|
|
7091
7379
|
});
|
|
7092
7380
|
}
|
|
7093
7381
|
if (quantity === 0) {
|
|
@@ -7212,7 +7500,12 @@ var ShoppingListRepository = class extends AbstractResourceRepository {
|
|
|
7212
7500
|
context.projectKey,
|
|
7213
7501
|
this._storage
|
|
7214
7502
|
) : void 0,
|
|
7215
|
-
store: draft.store ? getStoreKeyReference(draft.store, context.projectKey, this._storage) : void 0
|
|
7503
|
+
store: draft.store ? getStoreKeyReference(draft.store, context.projectKey, this._storage) : void 0,
|
|
7504
|
+
businessUnit: draft.businessUnit ? getBusinessUnitKeyReference(
|
|
7505
|
+
draft.businessUnit,
|
|
7506
|
+
context.projectKey,
|
|
7507
|
+
this._storage
|
|
7508
|
+
) : void 0
|
|
7216
7509
|
};
|
|
7217
7510
|
return this.saveNew(context, resource);
|
|
7218
7511
|
}
|
|
@@ -7267,21 +7560,11 @@ var ShoppingListRepository = class extends AbstractResourceRepository {
|
|
|
7267
7560
|
return lineItem;
|
|
7268
7561
|
}
|
|
7269
7562
|
throw new Error(
|
|
7270
|
-
|
|
7563
|
+
"must provide either sku, productId or variantId for ShoppingListLineItem"
|
|
7271
7564
|
);
|
|
7272
7565
|
};
|
|
7273
7566
|
};
|
|
7274
7567
|
|
|
7275
|
-
// src/repositories/staged-quote.ts
|
|
7276
|
-
var StagedQuoteRepository = class extends AbstractResourceRepository {
|
|
7277
|
-
constructor(config) {
|
|
7278
|
-
super("staged-quote", config);
|
|
7279
|
-
}
|
|
7280
|
-
create(context, draft) {
|
|
7281
|
-
throw new Error("not implemented");
|
|
7282
|
-
}
|
|
7283
|
-
};
|
|
7284
|
-
|
|
7285
7568
|
// src/repositories/standalone-price.ts
|
|
7286
7569
|
var StandAlonePriceRepository = class extends AbstractResourceRepository {
|
|
7287
7570
|
constructor(config) {
|
|
@@ -7426,7 +7709,8 @@ var StoreRepository = class extends AbstractResourceRepository {
|
|
|
7426
7709
|
}
|
|
7427
7710
|
};
|
|
7428
7711
|
var transformChannels = (context, storage, channels) => {
|
|
7429
|
-
if (!channels)
|
|
7712
|
+
if (!channels)
|
|
7713
|
+
return [];
|
|
7430
7714
|
return channels.map(
|
|
7431
7715
|
(ref) => getReferenceFromResourceIdentifier(
|
|
7432
7716
|
ref,
|
|
@@ -7505,7 +7789,8 @@ var SubscriptionRepository = class extends AbstractResourceRepository {
|
|
|
7505
7789
|
},
|
|
7506
7790
|
key: draft.key,
|
|
7507
7791
|
messages: draft.messages || [],
|
|
7508
|
-
status: "Healthy"
|
|
7792
|
+
status: "Healthy",
|
|
7793
|
+
events: draft.events || []
|
|
7509
7794
|
};
|
|
7510
7795
|
return this.saveNew(context, resource);
|
|
7511
7796
|
}
|
|
@@ -7727,44 +8012,44 @@ var createRepositories = (config) => ({
|
|
|
7727
8012
|
"associate-role": new AssociateRoleRepository(config),
|
|
7728
8013
|
"attribute-group": new AttributeGroupRepository(config),
|
|
7729
8014
|
"business-unit": new BusinessUnitRepository(config),
|
|
7730
|
-
|
|
7731
|
-
|
|
8015
|
+
category: new CategoryRepository(config),
|
|
8016
|
+
cart: new CartRepository(config),
|
|
7732
8017
|
"cart-discount": new CartDiscountRepository(config),
|
|
7733
|
-
|
|
7734
|
-
|
|
8018
|
+
customer: new CustomerRepository(config),
|
|
8019
|
+
channel: new ChannelRepository(config),
|
|
7735
8020
|
"customer-group": new CustomerGroupRepository(config),
|
|
7736
8021
|
"discount-code": new DiscountCodeRepository(config),
|
|
7737
|
-
|
|
8022
|
+
extension: new ExtensionRepository(config),
|
|
7738
8023
|
"inventory-entry": new InventoryEntryRepository(config),
|
|
7739
8024
|
"key-value-document": new CustomObjectRepository(config),
|
|
7740
|
-
|
|
8025
|
+
order: new OrderRepository(config),
|
|
7741
8026
|
"order-edit": new OrderEditRepository(config),
|
|
7742
|
-
|
|
8027
|
+
payment: new PaymentRepository(config),
|
|
7743
8028
|
"my-cart": new CartRepository(config),
|
|
7744
8029
|
"my-order": new MyOrderRepository(config),
|
|
7745
8030
|
"my-customer": new MyCustomerRepository(config),
|
|
7746
8031
|
"my-payment": new PaymentRepository(config),
|
|
7747
8032
|
"my-shopping-list": new ShoppingListRepository(config),
|
|
7748
|
-
|
|
8033
|
+
product: new ProductRepository(config),
|
|
7749
8034
|
"product-type": new ProductTypeRepository(config),
|
|
7750
8035
|
"product-discount": new ProductDiscountRepository(config),
|
|
7751
8036
|
"product-projection": new ProductProjectionRepository(config),
|
|
7752
8037
|
"product-selection": new ProductSelectionRepository(config),
|
|
7753
8038
|
"product-tailoring": new ProductTailoringRepository(config),
|
|
7754
|
-
|
|
7755
|
-
|
|
7756
|
-
|
|
8039
|
+
project: new ProjectRepository(config),
|
|
8040
|
+
review: new ReviewRepository(config),
|
|
8041
|
+
quote: new QuoteRepository(config),
|
|
7757
8042
|
"quote-request": new QuoteRequestRepository(config),
|
|
7758
8043
|
"shipping-method": new ShippingMethodRepository(config),
|
|
7759
8044
|
"shopping-list": new ShoppingListRepository(config),
|
|
7760
8045
|
"staged-quote": new StagedQuoteRepository(config),
|
|
7761
8046
|
"standalone-price": new StandAlonePriceRepository(config),
|
|
7762
|
-
|
|
7763
|
-
|
|
7764
|
-
|
|
8047
|
+
state: new StateRepository(config),
|
|
8048
|
+
store: new StoreRepository(config),
|
|
8049
|
+
subscription: new SubscriptionRepository(config),
|
|
7765
8050
|
"tax-category": new TaxCategoryRepository(config),
|
|
7766
|
-
|
|
7767
|
-
|
|
8051
|
+
type: new TypeRepository(config),
|
|
8052
|
+
zone: new ZoneRepository(config)
|
|
7768
8053
|
});
|
|
7769
8054
|
|
|
7770
8055
|
// src/services/as-associate.ts
|
|
@@ -7845,7 +8130,7 @@ var AbstractService = class {
|
|
|
7845
8130
|
return response.status(200).send(result);
|
|
7846
8131
|
}
|
|
7847
8132
|
getWithId(request, response) {
|
|
7848
|
-
const result = this._expandWithId(request, request.params
|
|
8133
|
+
const result = this._expandWithId(request, request.params.id);
|
|
7849
8134
|
if (!result) {
|
|
7850
8135
|
return response.status(404).send();
|
|
7851
8136
|
}
|
|
@@ -7854,18 +8139,19 @@ var AbstractService = class {
|
|
|
7854
8139
|
getWithKey(request, response) {
|
|
7855
8140
|
const result = this.repository.getByKey(
|
|
7856
8141
|
getRepositoryContext(request),
|
|
7857
|
-
request.params
|
|
8142
|
+
request.params.key,
|
|
7858
8143
|
{
|
|
7859
8144
|
expand: this._parseParam(request.query.expand)
|
|
7860
8145
|
}
|
|
7861
8146
|
);
|
|
7862
|
-
if (!result)
|
|
8147
|
+
if (!result)
|
|
8148
|
+
return response.status(404).send();
|
|
7863
8149
|
return response.status(200).send(result);
|
|
7864
8150
|
}
|
|
7865
8151
|
deleteWithId(request, response) {
|
|
7866
8152
|
const result = this.repository.delete(
|
|
7867
8153
|
getRepositoryContext(request),
|
|
7868
|
-
request.params
|
|
8154
|
+
request.params.id,
|
|
7869
8155
|
{
|
|
7870
8156
|
expand: this._parseParam(request.query.expand)
|
|
7871
8157
|
}
|
|
@@ -7878,7 +8164,7 @@ var AbstractService = class {
|
|
|
7878
8164
|
deleteWithKey(request, response) {
|
|
7879
8165
|
const resource = this.repository.getByKey(
|
|
7880
8166
|
getRepositoryContext(request),
|
|
7881
|
-
request.params
|
|
8167
|
+
request.params.key
|
|
7882
8168
|
);
|
|
7883
8169
|
if (!resource) {
|
|
7884
8170
|
return response.status(404).send("Not found");
|
|
@@ -7911,7 +8197,7 @@ var AbstractService = class {
|
|
|
7911
8197
|
);
|
|
7912
8198
|
const resource = this.repository.get(
|
|
7913
8199
|
getRepositoryContext(request),
|
|
7914
|
-
request.params
|
|
8200
|
+
request.params.id
|
|
7915
8201
|
);
|
|
7916
8202
|
if (!resource) {
|
|
7917
8203
|
return response.status(404).send("Not found");
|
|
@@ -7932,7 +8218,7 @@ var AbstractService = class {
|
|
|
7932
8218
|
);
|
|
7933
8219
|
const resource = this.repository.getByKey(
|
|
7934
8220
|
getRepositoryContext(request),
|
|
7935
|
-
request.params
|
|
8221
|
+
request.params.key
|
|
7936
8222
|
);
|
|
7937
8223
|
if (!resource) {
|
|
7938
8224
|
return response.status(404).send("Not found");
|
|
@@ -8628,19 +8914,19 @@ var ProductProjectionService = class extends AbstractService {
|
|
|
8628
8914
|
search(request, response) {
|
|
8629
8915
|
const query = request.query;
|
|
8630
8916
|
const searchParams = {
|
|
8631
|
-
|
|
8917
|
+
filter: queryParamsArray(query.filter),
|
|
8632
8918
|
"filter.query": queryParamsArray(query["filter.query"]),
|
|
8633
|
-
|
|
8634
|
-
|
|
8635
|
-
|
|
8636
|
-
|
|
8637
|
-
|
|
8638
|
-
|
|
8639
|
-
|
|
8640
|
-
|
|
8641
|
-
|
|
8642
|
-
|
|
8643
|
-
|
|
8919
|
+
facet: queryParamsArray(query.facet),
|
|
8920
|
+
expand: queryParamsArray(query.expand),
|
|
8921
|
+
staged: queryParamsValue(query.staged) === "true",
|
|
8922
|
+
localeProjection: queryParamsValue(query.localeProjection),
|
|
8923
|
+
storeProjection: queryParamsValue(query.storeProjection),
|
|
8924
|
+
priceChannel: queryParamsValue(query.priceChannel),
|
|
8925
|
+
priceCountry: queryParamsValue(query.priceCountry),
|
|
8926
|
+
priceCurrency: queryParamsValue(query.priceCurrency),
|
|
8927
|
+
priceCustomerGroup: queryParamsValue(query.priceCustomerGroup),
|
|
8928
|
+
offset: query.offset ? Number(queryParamsValue(query.offset)) : void 0,
|
|
8929
|
+
limit: query.limit ? Number(queryParamsValue(query.limit)) : void 0
|
|
8644
8930
|
};
|
|
8645
8931
|
const resource = this.repository.search(
|
|
8646
8932
|
getRepositoryContext(request),
|
|
@@ -8674,6 +8960,42 @@ var ProductTypeService = class extends AbstractService {
|
|
|
8674
8960
|
}
|
|
8675
8961
|
};
|
|
8676
8962
|
|
|
8963
|
+
// src/services/quote.ts
|
|
8964
|
+
var QuoteService = class extends AbstractService {
|
|
8965
|
+
repository;
|
|
8966
|
+
constructor(parent, repository) {
|
|
8967
|
+
super(parent);
|
|
8968
|
+
this.repository = repository;
|
|
8969
|
+
}
|
|
8970
|
+
getBasePath() {
|
|
8971
|
+
return "quotes";
|
|
8972
|
+
}
|
|
8973
|
+
};
|
|
8974
|
+
|
|
8975
|
+
// src/services/quote-request.ts
|
|
8976
|
+
var QuoteRequestService = class extends AbstractService {
|
|
8977
|
+
repository;
|
|
8978
|
+
constructor(parent, repository) {
|
|
8979
|
+
super(parent);
|
|
8980
|
+
this.repository = repository;
|
|
8981
|
+
}
|
|
8982
|
+
getBasePath() {
|
|
8983
|
+
return "quote-requests";
|
|
8984
|
+
}
|
|
8985
|
+
};
|
|
8986
|
+
|
|
8987
|
+
// src/services/quote-staged.ts
|
|
8988
|
+
var StagedQuoteService = class extends AbstractService {
|
|
8989
|
+
repository;
|
|
8990
|
+
constructor(parent, repository) {
|
|
8991
|
+
super(parent);
|
|
8992
|
+
this.repository = repository;
|
|
8993
|
+
}
|
|
8994
|
+
getBasePath() {
|
|
8995
|
+
return "staged-quotes";
|
|
8996
|
+
}
|
|
8997
|
+
};
|
|
8998
|
+
|
|
8677
8999
|
// src/services/reviews.ts
|
|
8678
9000
|
var ReviewService = class extends AbstractService {
|
|
8679
9001
|
repository;
|
|
@@ -8817,14 +9139,14 @@ var createServices = (router, repos) => ({
|
|
|
8817
9139
|
"associate-role": new AssociateRoleServices(router, repos["associate-role"]),
|
|
8818
9140
|
"as-associate": new AsAssociateService(router, repos["as-associate"]),
|
|
8819
9141
|
"business-unit": new BusinessUnitServices(router, repos["business-unit"]),
|
|
8820
|
-
|
|
8821
|
-
|
|
9142
|
+
category: new CategoryServices(router, repos.category),
|
|
9143
|
+
cart: new CartService(router, repos.cart, repos.order),
|
|
8822
9144
|
"cart-discount": new CartDiscountService(router, repos["cart-discount"]),
|
|
8823
|
-
|
|
8824
|
-
|
|
9145
|
+
customer: new CustomerService(router, repos.customer),
|
|
9146
|
+
channel: new ChannelService(router, repos.channel),
|
|
8825
9147
|
"customer-group": new CustomerGroupService(router, repos["customer-group"]),
|
|
8826
9148
|
"discount-code": new DiscountCodeService(router, repos["discount-code"]),
|
|
8827
|
-
|
|
9149
|
+
extension: new ExtensionServices(router, repos.extension),
|
|
8828
9150
|
"inventory-entry": new InventoryEntryService(
|
|
8829
9151
|
router,
|
|
8830
9152
|
repos["inventory-entry"]
|
|
@@ -8833,8 +9155,8 @@ var createServices = (router, repos) => ({
|
|
|
8833
9155
|
router,
|
|
8834
9156
|
repos["key-value-document"]
|
|
8835
9157
|
),
|
|
8836
|
-
|
|
8837
|
-
|
|
9158
|
+
order: new OrderService(router, repos.order),
|
|
9159
|
+
payment: new PaymentService(router, repos.payment),
|
|
8838
9160
|
"standalone-price": new StandAlonePriceService(
|
|
8839
9161
|
router,
|
|
8840
9162
|
repos["standalone-price"]
|
|
@@ -8853,7 +9175,7 @@ var createServices = (router, repos) => ({
|
|
|
8853
9175
|
repos["shipping-method"]
|
|
8854
9176
|
),
|
|
8855
9177
|
"product-type": new ProductTypeService(router, repos["product-type"]),
|
|
8856
|
-
|
|
9178
|
+
product: new ProductService(router, repos.product),
|
|
8857
9179
|
"product-discount": new ProductDiscountService(
|
|
8858
9180
|
router,
|
|
8859
9181
|
repos["product-discount"]
|
|
@@ -8866,18 +9188,21 @@ var createServices = (router, repos) => ({
|
|
|
8866
9188
|
router,
|
|
8867
9189
|
repos["product-selection"]
|
|
8868
9190
|
),
|
|
8869
|
-
|
|
9191
|
+
quotes: new QuoteService(router, repos.quote),
|
|
9192
|
+
"quote-request": new QuoteRequestService(router, repos["quote-request"]),
|
|
9193
|
+
reviews: new ReviewService(router, repos.review),
|
|
8870
9194
|
"shopping-list": new ShoppingListService(router, repos["shopping-list"]),
|
|
8871
|
-
"
|
|
8872
|
-
|
|
8873
|
-
|
|
9195
|
+
"staged-quote": new StagedQuoteService(router, repos["staged-quote"]),
|
|
9196
|
+
state: new StateService(router, repos.state),
|
|
9197
|
+
store: new StoreService(router, repos.store),
|
|
9198
|
+
subscription: new SubscriptionService(router, repos.subscription),
|
|
8874
9199
|
"tax-category": new TaxCategoryService(router, repos["tax-category"]),
|
|
8875
9200
|
"attribute-group": new AttributeGroupService(
|
|
8876
9201
|
router,
|
|
8877
9202
|
repos["attribute-group"]
|
|
8878
9203
|
),
|
|
8879
|
-
|
|
8880
|
-
|
|
9204
|
+
type: new TypeService(router, repos.type),
|
|
9205
|
+
zone: new ZoneService(router, repos.zone)
|
|
8881
9206
|
});
|
|
8882
9207
|
|
|
8883
9208
|
// src/services/project.ts
|
|
@@ -8919,7 +9244,7 @@ var AbstractStorage = class {
|
|
|
8919
9244
|
};
|
|
8920
9245
|
|
|
8921
9246
|
// src/storage/in-memory.ts
|
|
8922
|
-
import
|
|
9247
|
+
import assert5 from "assert";
|
|
8923
9248
|
var InMemoryStorage = class extends AbstractStorage {
|
|
8924
9249
|
resources = {};
|
|
8925
9250
|
projects = {};
|
|
@@ -8966,7 +9291,8 @@ var InMemoryStorage = class extends AbstractStorage {
|
|
|
8966
9291
|
getProject = (projectKey) => this.addProject(projectKey);
|
|
8967
9292
|
// Expand resolves a nested reference and injects the object in the given obj
|
|
8968
9293
|
expand = (projectKey, obj, clause) => {
|
|
8969
|
-
if (!clause)
|
|
9294
|
+
if (!clause)
|
|
9295
|
+
return obj;
|
|
8970
9296
|
const newObj = cloneObject(obj);
|
|
8971
9297
|
if (Array.isArray(clause)) {
|
|
8972
9298
|
for (const c of clause) {
|
|
@@ -8997,13 +9323,15 @@ var InMemoryStorage = class extends AbstractStorage {
|
|
|
8997
9323
|
this._resolveReference(projectKey, reference, params.rest);
|
|
8998
9324
|
} else if (params.index === "*") {
|
|
8999
9325
|
const reference = obj[params.element];
|
|
9000
|
-
if (reference === void 0 || !Array.isArray(reference))
|
|
9326
|
+
if (reference === void 0 || !Array.isArray(reference))
|
|
9327
|
+
return;
|
|
9001
9328
|
for (const itemRef of reference) {
|
|
9002
9329
|
this._resolveReference(projectKey, itemRef, params.rest);
|
|
9003
9330
|
}
|
|
9004
9331
|
} else {
|
|
9005
9332
|
const reference = obj[params.element][params.index];
|
|
9006
|
-
if (reference === void 0)
|
|
9333
|
+
if (reference === void 0)
|
|
9334
|
+
return;
|
|
9007
9335
|
this._resolveReference(projectKey, reference, params.rest);
|
|
9008
9336
|
}
|
|
9009
9337
|
};
|
|
@@ -9015,38 +9343,38 @@ var InMemoryStorage = class extends AbstractStorage {
|
|
|
9015
9343
|
"associate-role": /* @__PURE__ */ new Map(),
|
|
9016
9344
|
"attribute-group": /* @__PURE__ */ new Map(),
|
|
9017
9345
|
"business-unit": /* @__PURE__ */ new Map(),
|
|
9018
|
-
|
|
9346
|
+
cart: /* @__PURE__ */ new Map(),
|
|
9019
9347
|
"cart-discount": /* @__PURE__ */ new Map(),
|
|
9020
|
-
|
|
9021
|
-
|
|
9022
|
-
|
|
9348
|
+
category: /* @__PURE__ */ new Map(),
|
|
9349
|
+
channel: /* @__PURE__ */ new Map(),
|
|
9350
|
+
customer: /* @__PURE__ */ new Map(),
|
|
9023
9351
|
"customer-group": /* @__PURE__ */ new Map(),
|
|
9024
9352
|
"discount-code": /* @__PURE__ */ new Map(),
|
|
9025
|
-
|
|
9353
|
+
extension: /* @__PURE__ */ new Map(),
|
|
9026
9354
|
"inventory-entry": /* @__PURE__ */ new Map(),
|
|
9027
9355
|
"key-value-document": /* @__PURE__ */ new Map(),
|
|
9028
|
-
|
|
9356
|
+
order: /* @__PURE__ */ new Map(),
|
|
9029
9357
|
"order-edit": /* @__PURE__ */ new Map(),
|
|
9030
|
-
|
|
9031
|
-
|
|
9032
|
-
|
|
9358
|
+
payment: /* @__PURE__ */ new Map(),
|
|
9359
|
+
product: /* @__PURE__ */ new Map(),
|
|
9360
|
+
quote: /* @__PURE__ */ new Map(),
|
|
9033
9361
|
"quote-request": /* @__PURE__ */ new Map(),
|
|
9034
9362
|
"product-discount": /* @__PURE__ */ new Map(),
|
|
9035
9363
|
"product-selection": /* @__PURE__ */ new Map(),
|
|
9036
9364
|
"product-type": /* @__PURE__ */ new Map(),
|
|
9037
9365
|
"product-projection": /* @__PURE__ */ new Map(),
|
|
9038
9366
|
"product-tailoring": /* @__PURE__ */ new Map(),
|
|
9039
|
-
|
|
9367
|
+
review: /* @__PURE__ */ new Map(),
|
|
9040
9368
|
"shipping-method": /* @__PURE__ */ new Map(),
|
|
9041
9369
|
"staged-quote": /* @__PURE__ */ new Map(),
|
|
9042
|
-
|
|
9043
|
-
|
|
9370
|
+
state: /* @__PURE__ */ new Map(),
|
|
9371
|
+
store: /* @__PURE__ */ new Map(),
|
|
9044
9372
|
"shopping-list": /* @__PURE__ */ new Map(),
|
|
9045
9373
|
"standalone-price": /* @__PURE__ */ new Map(),
|
|
9046
|
-
|
|
9374
|
+
subscription: /* @__PURE__ */ new Map(),
|
|
9047
9375
|
"tax-category": /* @__PURE__ */ new Map(),
|
|
9048
|
-
|
|
9049
|
-
|
|
9376
|
+
type: /* @__PURE__ */ new Map(),
|
|
9377
|
+
zone: /* @__PURE__ */ new Map()
|
|
9050
9378
|
};
|
|
9051
9379
|
}
|
|
9052
9380
|
return projectStorage;
|
|
@@ -9069,7 +9397,7 @@ var InMemoryStorage = class extends AbstractStorage {
|
|
|
9069
9397
|
const store = this.forProjectKey(projectKey);
|
|
9070
9398
|
store[typeId]?.set(obj.id, obj);
|
|
9071
9399
|
const resource = this.get(projectKey, typeId, obj.id, params);
|
|
9072
|
-
|
|
9400
|
+
assert5(
|
|
9073
9401
|
resource,
|
|
9074
9402
|
`resource of type ${typeId} with id ${obj.id} not created`
|
|
9075
9403
|
);
|
|
@@ -9214,7 +9542,8 @@ var InMemoryStorage = class extends AbstractStorage {
|
|
|
9214
9542
|
});
|
|
9215
9543
|
}
|
|
9216
9544
|
_resolveReference(projectKey, reference, expand) {
|
|
9217
|
-
if (reference === void 0)
|
|
9545
|
+
if (reference === void 0)
|
|
9546
|
+
return;
|
|
9218
9547
|
if (reference.typeId !== void 0 && (reference.id !== void 0 || reference.key !== void 0)) {
|
|
9219
9548
|
if (!reference.obj) {
|
|
9220
9549
|
reference.obj = this.getByResourceIdentifier(projectKey, {
|
|
@@ -9367,12 +9696,11 @@ var CommercetoolsMock = class {
|
|
|
9367
9696
|
message: err.message,
|
|
9368
9697
|
errors: [err.info]
|
|
9369
9698
|
});
|
|
9370
|
-
} else {
|
|
9371
|
-
console.error(err);
|
|
9372
|
-
return resp.status(500).send({
|
|
9373
|
-
error: err.message
|
|
9374
|
-
});
|
|
9375
9699
|
}
|
|
9700
|
+
console.error(err);
|
|
9701
|
+
return resp.status(500).send({
|
|
9702
|
+
error: err.message
|
|
9703
|
+
});
|
|
9376
9704
|
});
|
|
9377
9705
|
return app;
|
|
9378
9706
|
}
|
|
@@ -9390,7 +9718,7 @@ var CommercetoolsMock = class {
|
|
|
9390
9718
|
const body = await request.text();
|
|
9391
9719
|
const url = new URL(request.url);
|
|
9392
9720
|
const headers = copyHeaders(request.headers);
|
|
9393
|
-
const res = await inject(app).post(url.pathname
|
|
9721
|
+
const res = await inject(app).post(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
|
|
9394
9722
|
return new HttpResponse(res.body, {
|
|
9395
9723
|
status: res.statusCode,
|
|
9396
9724
|
headers: mapHeaderType(res.headers)
|
|
@@ -9400,7 +9728,7 @@ var CommercetoolsMock = class {
|
|
|
9400
9728
|
const body = await request.text();
|
|
9401
9729
|
const url = new URL(request.url);
|
|
9402
9730
|
const headers = copyHeaders(request.headers);
|
|
9403
|
-
const res = await inject(app).get(url.pathname
|
|
9731
|
+
const res = await inject(app).get(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
|
|
9404
9732
|
if (res.statusCode === 200) {
|
|
9405
9733
|
const parsedBody = JSON.parse(res.body);
|
|
9406
9734
|
const resultCount = "count" in parsedBody ? parsedBody.count : Object.keys(parsedBody).length;
|
|
@@ -9418,7 +9746,7 @@ var CommercetoolsMock = class {
|
|
|
9418
9746
|
const body = await request.text();
|
|
9419
9747
|
const url = new URL(request.url);
|
|
9420
9748
|
const headers = copyHeaders(request.headers);
|
|
9421
|
-
const res = await inject(app).get(url.pathname
|
|
9749
|
+
const res = await inject(app).get(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
|
|
9422
9750
|
return new HttpResponse(res.body, {
|
|
9423
9751
|
status: res.statusCode,
|
|
9424
9752
|
headers: mapHeaderType(res.headers)
|
|
@@ -9428,7 +9756,7 @@ var CommercetoolsMock = class {
|
|
|
9428
9756
|
const body = await request.text();
|
|
9429
9757
|
const url = new URL(request.url);
|
|
9430
9758
|
const headers = copyHeaders(request.headers);
|
|
9431
|
-
const res = await inject(app).post(url.pathname
|
|
9759
|
+
const res = await inject(app).post(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
|
|
9432
9760
|
return new HttpResponse(res.body, {
|
|
9433
9761
|
status: res.statusCode,
|
|
9434
9762
|
headers: mapHeaderType(res.headers)
|
|
@@ -9438,7 +9766,7 @@ var CommercetoolsMock = class {
|
|
|
9438
9766
|
const body = await request.text();
|
|
9439
9767
|
const url = new URL(request.url);
|
|
9440
9768
|
const headers = copyHeaders(request.headers);
|
|
9441
|
-
const res = await inject(app).delete(url.pathname
|
|
9769
|
+
const res = await inject(app).delete(`${url.pathname}?${url.searchParams.toString()}`).body(body).headers(headers).end();
|
|
9442
9770
|
return new HttpResponse(res.body, {
|
|
9443
9771
|
status: res.statusCode,
|
|
9444
9772
|
headers: mapHeaderType(res.headers)
|
|
@@ -9453,10 +9781,9 @@ var CommercetoolsMock = class {
|
|
|
9453
9781
|
if (_globalListeners.length > 0) {
|
|
9454
9782
|
if (this._mswServer !== void 0) {
|
|
9455
9783
|
throw new Error("Server already started");
|
|
9456
|
-
} else {
|
|
9457
|
-
process.emitWarning("Server wasn't stopped properly, clearing");
|
|
9458
|
-
_globalListeners.forEach((listener) => listener.close());
|
|
9459
9784
|
}
|
|
9785
|
+
process.emitWarning("Server wasn't stopped properly, clearing");
|
|
9786
|
+
_globalListeners.forEach((listener) => listener.close());
|
|
9460
9787
|
}
|
|
9461
9788
|
const server = setupServer();
|
|
9462
9789
|
this.registerHandlers(server);
|