@labdigital/commercetools-mock 2.17.1 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/dist/index.cjs +4351 -4099
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +266 -413
  4. package/dist/index.d.ts +266 -413
  5. package/dist/index.js +4351 -4099
  6. package/dist/index.js.map +1 -1
  7. package/package.json +47 -47
  8. package/src/constants.ts +2 -2
  9. package/src/ctMock.test.ts +11 -11
  10. package/src/ctMock.ts +141 -127
  11. package/src/deprecation.ts +8 -0
  12. package/src/exceptions.ts +17 -15
  13. package/src/helpers.ts +32 -32
  14. package/src/index.test.ts +128 -128
  15. package/src/index.ts +3 -3
  16. package/src/lib/expandParser.ts +13 -13
  17. package/src/lib/haversine.test.ts +9 -9
  18. package/src/lib/haversine.ts +11 -11
  19. package/src/lib/masking.ts +11 -11
  20. package/src/lib/parser.ts +2 -2
  21. package/src/lib/password.ts +23 -3
  22. package/src/lib/predicateParser.test.ts +185 -183
  23. package/src/lib/predicateParser.ts +234 -234
  24. package/src/lib/projectionSearchFilter.test.ts +103 -101
  25. package/src/lib/projectionSearchFilter.ts +152 -150
  26. package/src/lib/proxy.ts +5 -5
  27. package/src/oauth/errors.ts +4 -4
  28. package/src/oauth/helpers.ts +6 -6
  29. package/src/oauth/server.test.ts +86 -86
  30. package/src/oauth/server.ts +158 -144
  31. package/src/oauth/store.ts +44 -43
  32. package/src/priceSelector.test.ts +35 -35
  33. package/src/priceSelector.ts +30 -30
  34. package/src/product-projection-search.ts +136 -134
  35. package/src/projectAPI.test.ts +7 -7
  36. package/src/projectAPI.ts +24 -22
  37. package/src/repositories/abstract.ts +168 -116
  38. package/src/repositories/associate-role.ts +90 -77
  39. package/src/repositories/attribute-group.ts +51 -40
  40. package/src/repositories/business-unit.ts +168 -148
  41. package/src/repositories/cart/actions.ts +489 -0
  42. package/src/repositories/cart/helpers.ts +30 -0
  43. package/src/repositories/cart/index.ts +180 -0
  44. package/src/repositories/cart-discount/actions.ts +148 -0
  45. package/src/repositories/cart-discount/index.ts +86 -0
  46. package/src/repositories/category/actions.ts +231 -0
  47. package/src/repositories/category/index.ts +52 -0
  48. package/src/repositories/channel.ts +88 -90
  49. package/src/repositories/custom-object.ts +46 -45
  50. package/src/repositories/customer/actions.ts +165 -0
  51. package/src/repositories/customer/index.ts +79 -0
  52. package/src/repositories/customer-group.ts +66 -55
  53. package/src/repositories/discount-code/actions.ts +149 -0
  54. package/src/repositories/discount-code/index.ts +50 -0
  55. package/src/repositories/errors.ts +10 -10
  56. package/src/repositories/extension.ts +64 -62
  57. package/src/repositories/helpers.ts +117 -118
  58. package/src/repositories/index.ts +80 -79
  59. package/src/repositories/inventory-entry/actions.ts +84 -0
  60. package/src/repositories/inventory-entry/index.ts +44 -0
  61. package/src/repositories/my-customer.ts +114 -0
  62. package/src/repositories/my-order.ts +8 -8
  63. package/src/repositories/order/actions.ts +281 -0
  64. package/src/repositories/{order.test.ts → order/index.test.ts} +77 -77
  65. package/src/repositories/order/index.ts +260 -0
  66. package/src/repositories/order-edit.ts +10 -23
  67. package/src/repositories/payment/actions.ts +305 -0
  68. package/src/repositories/payment/helpers.ts +17 -0
  69. package/src/repositories/payment/index.ts +56 -0
  70. package/src/repositories/product/actions.ts +943 -0
  71. package/src/repositories/product/helpers.ts +98 -0
  72. package/src/repositories/product/index.ts +130 -0
  73. package/src/repositories/product-discount.ts +127 -117
  74. package/src/repositories/product-projection.ts +56 -62
  75. package/src/repositories/product-selection.ts +31 -28
  76. package/src/repositories/product-type.ts +136 -134
  77. package/src/repositories/project.ts +133 -118
  78. package/src/repositories/quote-request.ts +7 -19
  79. package/src/repositories/quote.ts +7 -22
  80. package/src/repositories/review.ts +13 -26
  81. package/src/repositories/shipping-method/actions.ts +198 -0
  82. package/src/repositories/shipping-method/helpers.ts +10 -0
  83. package/src/repositories/shipping-method/index.ts +138 -0
  84. package/src/repositories/shopping-list/actions.ts +295 -0
  85. package/src/repositories/shopping-list/index.ts +122 -0
  86. package/src/repositories/staged-quote.ts +7 -20
  87. package/src/repositories/standalone-price.ts +57 -44
  88. package/src/repositories/state.ts +113 -68
  89. package/src/repositories/store.ts +106 -94
  90. package/src/repositories/subscription.ts +46 -22
  91. package/src/repositories/tax-category/actions.ts +94 -0
  92. package/src/repositories/tax-category/helpers.ts +8 -0
  93. package/src/repositories/tax-category/index.ts +25 -0
  94. package/src/repositories/type/actions.ts +162 -0
  95. package/src/repositories/type/index.ts +24 -0
  96. package/src/repositories/zone.ts +62 -58
  97. package/src/schemas/update-request.ts +12 -0
  98. package/src/server.ts +9 -9
  99. package/src/services/abstract.ts +85 -72
  100. package/src/services/associate-roles.test.ts +27 -27
  101. package/src/services/associate-roles.ts +7 -7
  102. package/src/services/attribute-group.ts +7 -7
  103. package/src/services/business-units.test.ts +28 -28
  104. package/src/services/business-units.ts +7 -7
  105. package/src/services/cart-discount.test.ts +199 -199
  106. package/src/services/cart-discount.ts +7 -7
  107. package/src/services/cart.test.ts +261 -261
  108. package/src/services/cart.ts +22 -21
  109. package/src/services/category.test.ts +121 -121
  110. package/src/services/category.ts +7 -7
  111. package/src/services/channel.ts +7 -7
  112. package/src/services/custom-object.test.ts +130 -130
  113. package/src/services/custom-object.ts +34 -31
  114. package/src/services/customer-group.ts +7 -7
  115. package/src/services/customer.test.ts +205 -205
  116. package/src/services/customer.ts +23 -36
  117. package/src/services/discount-code.ts +7 -7
  118. package/src/services/extension.ts +7 -7
  119. package/src/services/index.ts +85 -81
  120. package/src/services/inventory-entry.test.ts +106 -106
  121. package/src/services/inventory-entry.ts +7 -7
  122. package/src/services/my-cart.test.ts +56 -56
  123. package/src/services/my-cart.ts +20 -20
  124. package/src/services/my-customer.test.ts +155 -104
  125. package/src/services/my-customer.ts +66 -75
  126. package/src/services/my-order.ts +16 -16
  127. package/src/services/my-payment.test.ts +40 -40
  128. package/src/services/my-payment.ts +7 -7
  129. package/src/services/my-shopping-list.ts +7 -7
  130. package/src/services/order.test.ts +243 -243
  131. package/src/services/order.ts +23 -18
  132. package/src/services/payment.test.ts +40 -40
  133. package/src/services/payment.ts +7 -7
  134. package/src/services/product-discount.ts +7 -7
  135. package/src/services/product-projection.test.ts +190 -190
  136. package/src/services/product-projection.ts +34 -32
  137. package/src/services/product-selection.test.ts +19 -19
  138. package/src/services/product-selection.ts +7 -7
  139. package/src/services/product-type.test.ts +38 -38
  140. package/src/services/product-type.ts +7 -7
  141. package/src/services/product.test.ts +658 -656
  142. package/src/services/product.ts +7 -7
  143. package/src/services/project.test.ts +29 -24
  144. package/src/services/project.ts +22 -17
  145. package/src/services/reviews.ts +7 -7
  146. package/src/services/shipping-method.test.ts +78 -78
  147. package/src/services/shipping-method.ts +16 -16
  148. package/src/services/shopping-list.test.ts +170 -170
  149. package/src/services/shopping-list.ts +7 -7
  150. package/src/services/standalone-price.test.ts +112 -112
  151. package/src/services/standalone-price.ts +7 -7
  152. package/src/services/state.test.ts +30 -30
  153. package/src/services/state.ts +7 -7
  154. package/src/services/store.test.ts +40 -40
  155. package/src/services/store.ts +7 -7
  156. package/src/services/subscription.ts +7 -7
  157. package/src/services/tax-category.test.ts +43 -43
  158. package/src/services/tax-category.ts +7 -7
  159. package/src/services/type.ts +7 -7
  160. package/src/services/zone.ts +7 -7
  161. package/src/shippingCalculator.test.ts +43 -43
  162. package/src/shippingCalculator.ts +23 -23
  163. package/src/storage/abstract.ts +36 -34
  164. package/src/storage/in-memory.ts +237 -233
  165. package/src/storage/index.ts +2 -2
  166. package/src/types.ts +91 -91
  167. package/src/validate.ts +18 -0
  168. package/src/repositories/cart-discount.ts +0 -219
  169. package/src/repositories/cart.ts +0 -659
  170. package/src/repositories/category.ts +0 -256
  171. package/src/repositories/customer.ts +0 -228
  172. package/src/repositories/discount-code.ts +0 -181
  173. package/src/repositories/inventory-entry.ts +0 -109
  174. package/src/repositories/order.ts +0 -514
  175. package/src/repositories/payment.ts +0 -342
  176. package/src/repositories/product.ts +0 -1106
  177. package/src/repositories/shipping-method.ts +0 -312
  178. package/src/repositories/shopping-list.ts +0 -392
  179. package/src/repositories/tax-category.ts +0 -111
  180. package/src/repositories/type.ts +0 -172
@@ -1,2 +1,2 @@
1
- export { AbstractStorage } from './abstract.js'
2
- export { InMemoryStorage } from './in-memory.js'
1
+ export { AbstractStorage } from "./abstract";
2
+ export { InMemoryStorage } from "./in-memory";
package/src/types.ts CHANGED
@@ -1,103 +1,103 @@
1
- import type * as ctp from '@commercetools/platform-sdk'
2
- import { RepositoryMap } from './repositories/index.js'
3
- import AbstractService from './services/abstract.js'
1
+ import type * as ctp from "@commercetools/platform-sdk";
2
+ import { RepositoryMap } from "./repositories";
3
+ import AbstractService from "./services/abstract";
4
4
 
5
- export const isType = <T>(x: T) => x
5
+ export const isType = <T>(x: T) => x;
6
6
 
7
- export type Writable<T> = { -readonly [P in keyof T]: Writable<T[P]> }
8
- export type ShallowWritable<T> = { -readonly [P in keyof T]: T[P] }
7
+ export type Writable<T> = { -readonly [P in keyof T]: Writable<T[P]> };
8
+ export type ShallowWritable<T> = { -readonly [P in keyof T]: T[P] };
9
9
 
10
10
  export type ServiceTypes =
11
11
  | ctp.ReferenceTypeId
12
- | 'product-projection'
13
- | 'my-cart'
14
- | 'my-order'
15
- | 'my-payment'
16
- | 'my-customer'
17
- | 'product-projection'
12
+ | "product-projection"
13
+ | "my-cart"
14
+ | "my-order"
15
+ | "my-payment"
16
+ | "my-customer"
17
+ | "product-projection";
18
18
 
19
19
  export type Services = Partial<{
20
- [index in ServiceTypes]: AbstractService
21
- }>
20
+ [index in ServiceTypes]: AbstractService;
21
+ }>;
22
22
 
23
- export type ResourceType = keyof ResourceMap & keyof RepositoryMap
23
+ export type ResourceType = keyof ResourceMap & keyof RepositoryMap;
24
24
 
25
25
  export type ResourceMap = {
26
- 'attribute-group': ctp.AttributeGroup
27
- 'associate-role': ctp.AssociateRole
28
- 'business-unit': ctp.BusinessUnit
29
- 'cart-discount': ctp.CartDiscount
30
- cart: ctp.Cart
31
- category: ctp.Category
32
- channel: ctp.Channel
33
- 'customer-email-token': never
34
- 'customer-group': ctp.CustomerGroup
35
- 'customer-password-token': never
36
- customer: ctp.Customer
37
- 'discount-code': ctp.DiscountCode
38
- extension: ctp.Extension
39
- 'inventory-entry': ctp.InventoryEntry
40
- 'key-value-document': ctp.CustomObject
41
- 'order-edit': ctp.OrderEdit
42
- order: ctp.Order
43
- payment: ctp.Payment
44
- 'product-discount': ctp.ProductDiscount
45
- 'product-price': ctp.StandalonePrice
46
- 'product-projection': ctp.ProductProjection
47
- 'product-selection': ctp.ProductSelection
48
- 'product-type': ctp.ProductType
49
- product: ctp.Product
50
- 'quote-request': ctp.QuoteRequest
51
- quote: ctp.Quote
52
- review: ctp.Review
53
- 'shipping-method': ctp.ShippingMethod
54
- 'shopping-list': ctp.ShoppingList
55
- 'staged-quote': ctp.StagedQuote
56
- 'standalone-price': ctp.StandalonePrice
57
- state: ctp.State
58
- store: ctp.Store
59
- subscription: ctp.Subscription
60
- 'tax-category': ctp.TaxCategory
61
- type: ctp.Type
62
- zone: ctp.Zone
63
- }
26
+ "attribute-group": ctp.AttributeGroup;
27
+ "associate-role": ctp.AssociateRole;
28
+ "business-unit": ctp.BusinessUnit;
29
+ "cart-discount": ctp.CartDiscount;
30
+ "cart": ctp.Cart;
31
+ "category": ctp.Category;
32
+ "channel": ctp.Channel;
33
+ "customer-email-token": never;
34
+ "customer-group": ctp.CustomerGroup;
35
+ "customer-password-token": never;
36
+ "customer": ctp.Customer;
37
+ "discount-code": ctp.DiscountCode;
38
+ "extension": ctp.Extension;
39
+ "inventory-entry": ctp.InventoryEntry;
40
+ "key-value-document": ctp.CustomObject;
41
+ "order-edit": ctp.OrderEdit;
42
+ "order": ctp.Order;
43
+ "payment": ctp.Payment;
44
+ "product-discount": ctp.ProductDiscount;
45
+ "product-price": ctp.StandalonePrice;
46
+ "product-projection": ctp.ProductProjection;
47
+ "product-selection": ctp.ProductSelection;
48
+ "product-type": ctp.ProductType;
49
+ "product": ctp.Product;
50
+ "quote-request": ctp.QuoteRequest;
51
+ "quote": ctp.Quote;
52
+ "review": ctp.Review;
53
+ "shipping-method": ctp.ShippingMethod;
54
+ "shopping-list": ctp.ShoppingList;
55
+ "staged-quote": ctp.StagedQuote;
56
+ "standalone-price": ctp.StandalonePrice;
57
+ "state": ctp.State;
58
+ "store": ctp.Store;
59
+ "subscription": ctp.Subscription;
60
+ "tax-category": ctp.TaxCategory;
61
+ "type": ctp.Type;
62
+ "zone": ctp.Zone;
63
+ };
64
64
 
65
65
  export type PagedQueryResponseMap = {
66
- 'attribute-group': ctp.AttributeGroupPagedQueryResponse
67
- 'associate-role': ctp.AssociateRolePagedQueryResponse
68
- 'business-unit': ctp.BusinessUnitPagedQueryResponse
69
- 'cart-discount': ctp.CartDiscountPagedQueryResponse
70
- cart: ctp.CartPagedQueryResponse
71
- category: ctp.CategoryPagedQueryResponse
72
- channel: ctp.ChannelPagedQueryResponse
73
- 'customer-email-token': never
74
- 'customer-group': ctp.CustomerGroupPagedQueryResponse
75
- 'customer-password-token': never
76
- customer: ctp.CustomerPagedQueryResponse
77
- 'discount-code': ctp.DiscountCodePagedQueryResponse
78
- extension: ctp.ExtensionPagedQueryResponse
79
- 'inventory-entry': ctp.InventoryPagedQueryResponse
80
- 'key-value-document': ctp.CustomObjectPagedQueryResponse
81
- 'order-edit': ctp.OrderEditPagedQueryResponse
82
- order: ctp.OrderPagedQueryResponse
83
- payment: ctp.PaymentPagedQueryResponse
84
- 'product-discount': ctp.ProductDiscountPagedQueryResponse
85
- 'product-price': ctp.StandalonePricePagedQueryResponse
86
- 'product-projection': ctp.ProductProjectionPagedQueryResponse
87
- 'product-selection': ctp.ProductSelectionPagedQueryResponse
88
- 'product-type': ctp.ProductTypePagedQueryResponse
89
- product: ctp.ProductPagedQueryResponse
90
- 'quote-request': ctp.QuoteRequestPagedQueryResponse
91
- quote: ctp.QuotePagedQueryResponse
92
- review: ctp.ReviewPagedQueryResponse
93
- 'shipping-method': ctp.ShippingMethodPagedQueryResponse
94
- 'shopping-list': ctp.ShoppingListPagedQueryResponse
95
- 'staged-quote': ctp.StagedQuotePagedQueryResponse
96
- 'standalone-price': ctp.StandalonePricePagedQueryResponse
97
- state: ctp.StatePagedQueryResponse
98
- store: ctp.StorePagedQueryResponse
99
- subscription: ctp.SubscriptionPagedQueryResponse
100
- 'tax-category': ctp.TaxCategoryPagedQueryResponse
101
- type: ctp.TypePagedQueryResponse
102
- zone: ctp.ZonePagedQueryResponse
103
- }
66
+ "attribute-group": ctp.AttributeGroupPagedQueryResponse;
67
+ "associate-role": ctp.AssociateRolePagedQueryResponse;
68
+ "business-unit": ctp.BusinessUnitPagedQueryResponse;
69
+ "cart-discount": ctp.CartDiscountPagedQueryResponse;
70
+ "cart": ctp.CartPagedQueryResponse;
71
+ "category": ctp.CategoryPagedQueryResponse;
72
+ "channel": ctp.ChannelPagedQueryResponse;
73
+ "customer-email-token": never;
74
+ "customer-group": ctp.CustomerGroupPagedQueryResponse;
75
+ "customer-password-token": never;
76
+ "customer": ctp.CustomerPagedQueryResponse;
77
+ "discount-code": ctp.DiscountCodePagedQueryResponse;
78
+ "extension": ctp.ExtensionPagedQueryResponse;
79
+ "inventory-entry": ctp.InventoryPagedQueryResponse;
80
+ "key-value-document": ctp.CustomObjectPagedQueryResponse;
81
+ "order-edit": ctp.OrderEditPagedQueryResponse;
82
+ "order": ctp.OrderPagedQueryResponse;
83
+ "payment": ctp.PaymentPagedQueryResponse;
84
+ "product-discount": ctp.ProductDiscountPagedQueryResponse;
85
+ "product-price": ctp.StandalonePricePagedQueryResponse;
86
+ "product-projection": ctp.ProductProjectionPagedQueryResponse;
87
+ "product-selection": ctp.ProductSelectionPagedQueryResponse;
88
+ "product-type": ctp.ProductTypePagedQueryResponse;
89
+ "product": ctp.ProductPagedQueryResponse;
90
+ "quote-request": ctp.QuoteRequestPagedQueryResponse;
91
+ "quote": ctp.QuotePagedQueryResponse;
92
+ "review": ctp.ReviewPagedQueryResponse;
93
+ "shipping-method": ctp.ShippingMethodPagedQueryResponse;
94
+ "shopping-list": ctp.ShoppingListPagedQueryResponse;
95
+ "staged-quote": ctp.StagedQuotePagedQueryResponse;
96
+ "standalone-price": ctp.StandalonePricePagedQueryResponse;
97
+ "state": ctp.StatePagedQueryResponse;
98
+ "store": ctp.StorePagedQueryResponse;
99
+ "subscription": ctp.SubscriptionPagedQueryResponse;
100
+ "tax-category": ctp.TaxCategoryPagedQueryResponse;
101
+ "type": ctp.TypePagedQueryResponse;
102
+ "zone": ctp.ZonePagedQueryResponse;
103
+ };
@@ -0,0 +1,18 @@
1
+ import { InvalidJsonInputError } from "@commercetools/platform-sdk";
2
+ import { z } from "zod";
3
+ import { fromZodError } from "zod-validation-error";
4
+ import { CommercetoolsError } from "./exceptions";
5
+
6
+ export const validateData = <T>(data: any, schema: z.AnyZodObject) => {
7
+ try {
8
+ schema.parse(data);
9
+ return data as T;
10
+ } catch (err: any) {
11
+ const validationError = fromZodError(err);
12
+ throw new CommercetoolsError<InvalidJsonInputError>({
13
+ code: "InvalidJsonInput",
14
+ message: "Request body does not contain valid JSON.",
15
+ detailedErrorMessage: validationError.toString(),
16
+ });
17
+ }
18
+ };
@@ -1,219 +0,0 @@
1
- import type {
2
- CartDiscount,
3
- CartDiscountChangeIsActiveAction,
4
- CartDiscountChangeSortOrderAction,
5
- CartDiscountChangeTargetAction,
6
- CartDiscountDraft,
7
- CartDiscountSetCustomFieldAction,
8
- CartDiscountSetCustomTypeAction,
9
- CartDiscountSetDescriptionAction,
10
- CartDiscountSetKeyAction,
11
- CartDiscountSetValidFromAction,
12
- CartDiscountSetValidFromAndUntilAction,
13
- CartDiscountSetValidUntilAction,
14
- CartDiscountUpdateAction,
15
- CartDiscountValueAbsolute,
16
- CartDiscountValueDraft,
17
- CartDiscountValueFixed,
18
- CartDiscountValueGiftLineItem,
19
- CartDiscountValueRelative,
20
- InvalidOperationError,
21
- } from '@commercetools/platform-sdk'
22
- import { getBaseResourceProperties } from '../helpers.js'
23
- import type { Writable } from '../types.js'
24
- import {
25
- AbstractResourceRepository,
26
- type RepositoryContext,
27
- } from './abstract.js'
28
- import {
29
- createCustomFields,
30
- createTypedMoney,
31
- getStoreKeyReference,
32
- } from './helpers.js'
33
- import { CommercetoolsError } from '../exceptions.js'
34
-
35
- export class CartDiscountRepository extends AbstractResourceRepository<'cart-discount'> {
36
- getTypeId() {
37
- return 'cart-discount' as const
38
- }
39
-
40
- create(context: RepositoryContext, draft: CartDiscountDraft): CartDiscount {
41
- const resource: CartDiscount = {
42
- ...getBaseResourceProperties(),
43
- key: draft.key,
44
- description: draft.description,
45
- cartPredicate: draft.cartPredicate,
46
- isActive: draft.isActive || false,
47
- name: draft.name,
48
- stores:
49
- draft.stores?.map((s) =>
50
- getStoreKeyReference(s, context.projectKey, this._storage)
51
- ) ?? [],
52
- references: [],
53
- target: draft.target,
54
- requiresDiscountCode: draft.requiresDiscountCode || false,
55
- sortOrder: draft.sortOrder,
56
- stackingMode: draft.stackingMode || 'Stacking',
57
- validFrom: draft.validFrom,
58
- validUntil: draft.validUntil,
59
- value: this.transformValueDraft(draft.value),
60
- custom: createCustomFields(
61
- draft.custom,
62
- context.projectKey,
63
- this._storage
64
- ),
65
- }
66
- this.saveNew(context, resource)
67
- return resource
68
- }
69
-
70
- private transformValueDraft(value: CartDiscountValueDraft) {
71
- switch (value.type) {
72
- case 'absolute': {
73
- return {
74
- type: 'absolute',
75
- money: value.money.map(createTypedMoney),
76
- } as CartDiscountValueAbsolute
77
- }
78
- case 'fixed': {
79
- return {
80
- type: 'fixed',
81
- money: value.money.map(createTypedMoney),
82
- } as CartDiscountValueFixed
83
- }
84
- case 'giftLineItem': {
85
- return {
86
- ...value,
87
- } as CartDiscountValueGiftLineItem
88
- }
89
- case 'relative': {
90
- return {
91
- ...value,
92
- } as CartDiscountValueRelative
93
- }
94
- }
95
-
96
- return value
97
- }
98
-
99
- actions: Partial<
100
- Record<
101
- CartDiscountUpdateAction['action'],
102
- (
103
- context: RepositoryContext,
104
- resource: Writable<CartDiscount>,
105
- action: any
106
- ) => void
107
- >
108
- > = {
109
- setKey: (
110
- context: RepositoryContext,
111
- resource: Writable<CartDiscount>,
112
- { key }: CartDiscountSetKeyAction
113
- ) => {
114
- resource.key = key
115
- },
116
- setDescription: (
117
- context: RepositoryContext,
118
- resource: Writable<CartDiscount>,
119
- { description }: CartDiscountSetDescriptionAction
120
- ) => {
121
- resource.description = description
122
- },
123
- setValidFrom: (
124
- context: RepositoryContext,
125
- resource: Writable<CartDiscount>,
126
- { validFrom }: CartDiscountSetValidFromAction
127
- ) => {
128
- resource.validFrom = validFrom
129
- },
130
- setValidUntil: (
131
- context: RepositoryContext,
132
- resource: Writable<CartDiscount>,
133
- { validUntil }: CartDiscountSetValidUntilAction
134
- ) => {
135
- resource.validUntil = validUntil
136
- },
137
- setValidFromAndUntil: (
138
- context: RepositoryContext,
139
- resource: Writable<CartDiscount>,
140
- { validFrom, validUntil }: CartDiscountSetValidFromAndUntilAction
141
- ) => {
142
- resource.validFrom = validFrom
143
- resource.validUntil = validUntil
144
- },
145
- changeSortOrder: (
146
- context: RepositoryContext,
147
- resource: Writable<CartDiscount>,
148
- { sortOrder }: CartDiscountChangeSortOrderAction
149
- ) => {
150
- resource.sortOrder = sortOrder
151
- },
152
- changeIsActive: (
153
- context: RepositoryContext,
154
- resource: Writable<CartDiscount>,
155
- { isActive }: CartDiscountChangeIsActiveAction
156
- ) => {
157
- resource.isActive = isActive
158
- },
159
- changeTarget: (
160
- context: RepositoryContext,
161
- resource: Writable<CartDiscount>,
162
- { target }: CartDiscountChangeTargetAction
163
- ) => {
164
- resource.target = target
165
- },
166
- setCustomField: (
167
- context: RepositoryContext,
168
- resource: Writable<CartDiscount>,
169
- { name, value }: CartDiscountSetCustomFieldAction
170
- ) => {
171
- if (!resource.custom) {
172
- return
173
- }
174
- if (value === null) {
175
- if (name in resource.custom.fields) {
176
- delete resource.custom.fields[name]
177
- } else {
178
- throw new CommercetoolsError<InvalidOperationError>(
179
- {
180
- code: 'InvalidOperation',
181
- message:
182
- 'Cannot remove custom field ' +
183
- name +
184
- ' because it does not exist.',
185
- },
186
- 400
187
- )
188
- }
189
- } else {
190
- resource.custom.fields[name] = value
191
- }
192
- },
193
- setCustomType: (
194
- context: RepositoryContext,
195
- resource: Writable<CartDiscount>,
196
- { type, fields }: CartDiscountSetCustomTypeAction
197
- ) => {
198
- if (!type) {
199
- resource.custom = undefined
200
- } else {
201
- const resolvedType = this._storage.getByResourceIdentifier(
202
- context.projectKey,
203
- type
204
- )
205
- if (!resolvedType) {
206
- throw new Error(`Type ${type} not found`)
207
- }
208
-
209
- resource.custom = {
210
- type: {
211
- typeId: 'type',
212
- id: resolvedType.id,
213
- },
214
- fields: fields || {},
215
- }
216
- }
217
- },
218
- }
219
- }