@labdigital/commercetools-mock 1.5.0 → 1.6.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 (129) hide show
  1. package/README.md +5 -4
  2. package/dist/index.cjs +105 -17
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +29 -7
  5. package/dist/index.d.ts +29 -7
  6. package/dist/index.js +105 -17
  7. package/dist/index.js.map +1 -1
  8. package/package.json +4 -3
  9. package/src/constants.ts +2 -2
  10. package/src/ctMock.ts +176 -176
  11. package/src/exceptions.ts +10 -10
  12. package/src/helpers.ts +26 -26
  13. package/src/index.test.ts +173 -173
  14. package/src/index.ts +3 -3
  15. package/src/lib/expandParser.ts +19 -19
  16. package/src/lib/haversine.test.ts +13 -13
  17. package/src/lib/haversine.ts +14 -14
  18. package/src/lib/masking.ts +15 -15
  19. package/src/lib/parser.ts +2 -2
  20. package/src/lib/predicateParser.test.ts +204 -204
  21. package/src/lib/predicateParser.ts +398 -398
  22. package/src/lib/projectionSearchFilter.test.ts +168 -168
  23. package/src/lib/projectionSearchFilter.ts +272 -269
  24. package/src/lib/proxy.ts +8 -8
  25. package/src/oauth/errors.ts +4 -4
  26. package/src/oauth/helpers.ts +6 -6
  27. package/src/oauth/server.ts +103 -101
  28. package/src/oauth/store.ts +27 -27
  29. package/src/priceSelector.test.ts +68 -68
  30. package/src/priceSelector.ts +70 -70
  31. package/src/product-projection-search.ts +296 -296
  32. package/src/projectAPI.test.ts +3 -3
  33. package/src/projectAPI.ts +46 -46
  34. package/src/repositories/abstract.ts +190 -190
  35. package/src/repositories/associate-role.ts +10 -7
  36. package/src/repositories/attribute-group.ts +63 -8
  37. package/src/repositories/business-unit.ts +10 -7
  38. package/src/repositories/cart-discount.ts +134 -134
  39. package/src/repositories/cart.ts +517 -514
  40. package/src/repositories/category.ts +170 -167
  41. package/src/repositories/channel.ts +114 -111
  42. package/src/repositories/custom-object.ts +66 -63
  43. package/src/repositories/customer-group.ts +72 -69
  44. package/src/repositories/customer.ts +90 -90
  45. package/src/repositories/discount-code.ts +171 -168
  46. package/src/repositories/errors.ts +15 -15
  47. package/src/repositories/extension.ts +79 -76
  48. package/src/repositories/helpers.ts +180 -180
  49. package/src/repositories/index.ts +39 -39
  50. package/src/repositories/inventory-entry.ts +98 -95
  51. package/src/repositories/my-order.ts +11 -11
  52. package/src/repositories/order-edit.ts +29 -29
  53. package/src/repositories/order.test.ts +191 -191
  54. package/src/repositories/order.ts +393 -393
  55. package/src/repositories/payment.ts +155 -155
  56. package/src/repositories/product-discount.ts +149 -149
  57. package/src/repositories/product-projection.ts +116 -52
  58. package/src/repositories/product-selection.ts +31 -31
  59. package/src/repositories/product-type.ts +156 -156
  60. package/src/repositories/product.ts +600 -597
  61. package/src/repositories/project.ts +136 -135
  62. package/src/repositories/quote-request.ts +19 -19
  63. package/src/repositories/quote.ts +19 -19
  64. package/src/repositories/review.ts +24 -24
  65. package/src/repositories/shipping-method.ts +217 -217
  66. package/src/repositories/shopping-list.ts +49 -49
  67. package/src/repositories/staged-quote.ts +20 -20
  68. package/src/repositories/standalone-price.ts +72 -61
  69. package/src/repositories/state.ts +84 -84
  70. package/src/repositories/store.ts +114 -114
  71. package/src/repositories/subscription.ts +40 -40
  72. package/src/repositories/tax-category.ts +98 -98
  73. package/src/repositories/type.ts +157 -157
  74. package/src/repositories/zone.ts +71 -71
  75. package/src/server.ts +2 -2
  76. package/src/services/abstract.ts +173 -173
  77. package/src/services/attribute-group.ts +16 -0
  78. package/src/services/cart-discount.ts +8 -8
  79. package/src/services/cart.test.ts +409 -409
  80. package/src/services/cart.ts +50 -50
  81. package/src/services/category.test.ts +25 -25
  82. package/src/services/category.ts +8 -8
  83. package/src/services/channel.ts +8 -8
  84. package/src/services/custom-object.test.ts +184 -184
  85. package/src/services/custom-object.ts +48 -48
  86. package/src/services/customer-group.ts +8 -8
  87. package/src/services/customer.test.ts +151 -151
  88. package/src/services/customer.ts +27 -27
  89. package/src/services/discount-code.ts +8 -8
  90. package/src/services/extension.ts +8 -8
  91. package/src/services/index.ts +52 -44
  92. package/src/services/inventory-entry.test.ts +162 -162
  93. package/src/services/inventory-entry.ts +8 -8
  94. package/src/services/my-cart.test.ts +78 -78
  95. package/src/services/my-cart.ts +28 -28
  96. package/src/services/my-customer.test.ts +44 -44
  97. package/src/services/my-customer.ts +53 -53
  98. package/src/services/my-order.ts +20 -20
  99. package/src/services/my-payment.test.ts +65 -65
  100. package/src/services/my-payment.ts +8 -8
  101. package/src/services/order.test.ts +527 -527
  102. package/src/services/order.ts +31 -31
  103. package/src/services/payment.test.ts +65 -65
  104. package/src/services/payment.ts +8 -8
  105. package/src/services/product-discount.ts +8 -8
  106. package/src/services/product-projection.test.ts +492 -428
  107. package/src/services/product-projection.ts +32 -18
  108. package/src/services/product-type.test.ts +56 -56
  109. package/src/services/product-type.ts +8 -8
  110. package/src/services/product.test.ts +510 -510
  111. package/src/services/product.ts +8 -8
  112. package/src/services/project.ts +34 -34
  113. package/src/services/shipping-method.test.ts +81 -81
  114. package/src/services/shipping-method.ts +12 -12
  115. package/src/services/shopping-list.ts +8 -8
  116. package/src/services/standalone-price.test.ts +256 -256
  117. package/src/services/standalone-price.ts +8 -8
  118. package/src/services/state.test.ts +42 -42
  119. package/src/services/state.ts +8 -8
  120. package/src/services/store.test.ts +57 -57
  121. package/src/services/store.ts +8 -8
  122. package/src/services/subscription.ts +8 -8
  123. package/src/services/tax-category.test.ts +61 -61
  124. package/src/services/tax-category.ts +8 -8
  125. package/src/services/type.ts +8 -8
  126. package/src/services/zone.ts +8 -8
  127. package/src/storage/abstract.ts +58 -58
  128. package/src/storage/in-memory.ts +419 -419
  129. package/src/types.ts +82 -82
@@ -1,434 +1,434 @@
1
1
  import type {
2
- Cart,
3
- CartReference,
4
- CustomLineItem,
5
- CustomLineItemDraft,
6
- GeneralError,
7
- LineItem,
8
- LineItemImportDraft,
9
- Order,
10
- OrderAddPaymentAction,
11
- OrderChangeOrderStateAction,
12
- OrderChangePaymentStateAction,
13
- OrderFromCartDraft,
14
- OrderImportDraft,
15
- OrderSetBillingAddressAction,
16
- OrderSetCustomerEmailAction,
17
- OrderSetCustomFieldAction,
18
- OrderSetCustomTypeAction,
19
- OrderSetLocaleAction,
20
- OrderSetOrderNumberAction,
21
- OrderSetShippingAddressAction,
22
- OrderSetStoreAction,
23
- OrderTransitionStateAction,
24
- Product,
25
- ProductPagedQueryResponse,
26
- ProductVariant,
27
- State,
28
- Store,
2
+ Cart,
3
+ CartReference,
4
+ CustomLineItem,
5
+ CustomLineItemDraft,
6
+ GeneralError,
7
+ LineItem,
8
+ LineItemImportDraft,
9
+ Order,
10
+ OrderAddPaymentAction,
11
+ OrderChangeOrderStateAction,
12
+ OrderChangePaymentStateAction,
13
+ OrderFromCartDraft,
14
+ OrderImportDraft,
15
+ OrderSetBillingAddressAction,
16
+ OrderSetCustomerEmailAction,
17
+ OrderSetCustomFieldAction,
18
+ OrderSetCustomTypeAction,
19
+ OrderSetLocaleAction,
20
+ OrderSetOrderNumberAction,
21
+ OrderSetShippingAddressAction,
22
+ OrderSetStoreAction,
23
+ OrderTransitionStateAction,
24
+ Product,
25
+ ProductPagedQueryResponse,
26
+ ProductVariant,
27
+ State,
28
+ Store,
29
29
  } from '@commercetools/platform-sdk'
30
30
  import assert from 'assert'
31
31
  import { CommercetoolsError } from '../exceptions.js'
32
32
  import { getBaseResourceProperties } from '../helpers.js'
33
33
  import type { Writable } from '../types.js'
34
34
  import {
35
- AbstractResourceRepository,
36
- type QueryParams,
37
- RepositoryContext,
35
+ AbstractResourceRepository,
36
+ type QueryParams,
37
+ RepositoryContext,
38
38
  } from './abstract.js'
39
39
  import {
40
- createAddress,
41
- createCentPrecisionMoney,
42
- createCustomFields,
43
- createPrice,
44
- createTypedMoney,
45
- resolveStoreReference,
40
+ createAddress,
41
+ createCentPrecisionMoney,
42
+ createCustomFields,
43
+ createPrice,
44
+ createTypedMoney,
45
+ resolveStoreReference,
46
46
  } from './helpers.js'
47
47
 
48
48
  export class OrderRepository extends AbstractResourceRepository<'order'> {
49
- getTypeId() {
50
- return 'order' as const
51
- }
49
+ getTypeId() {
50
+ return 'order' as const
51
+ }
52
52
 
53
- create(context: RepositoryContext, draft: OrderFromCartDraft): Order {
54
- assert(draft.cart, 'draft.cart is missing')
55
- return this.createFromCart(
56
- context,
57
- {
58
- id: draft.cart.id!,
59
- typeId: 'cart',
60
- },
61
- draft.orderNumber
62
- )
63
- }
53
+ create(context: RepositoryContext, draft: OrderFromCartDraft): Order {
54
+ assert(draft.cart, 'draft.cart is missing')
55
+ return this.createFromCart(
56
+ context,
57
+ {
58
+ id: draft.cart.id!,
59
+ typeId: 'cart',
60
+ },
61
+ draft.orderNumber
62
+ )
63
+ }
64
64
 
65
- createFromCart(
66
- context: RepositoryContext,
67
- cartReference: CartReference,
68
- orderNumber?: string
69
- ) {
70
- const cart = this._storage.getByResourceIdentifier(
71
- context.projectKey,
72
- cartReference
73
- ) as Cart | null
74
- if (!cart) {
75
- throw new Error('Cannot find cart')
76
- }
65
+ createFromCart(
66
+ context: RepositoryContext,
67
+ cartReference: CartReference,
68
+ orderNumber?: string
69
+ ) {
70
+ const cart = this._storage.getByResourceIdentifier(
71
+ context.projectKey,
72
+ cartReference
73
+ ) as Cart | null
74
+ if (!cart) {
75
+ throw new Error('Cannot find cart')
76
+ }
77
77
 
78
- const resource: Order = {
79
- ...getBaseResourceProperties(),
80
- orderNumber,
81
- cart: cartReference,
82
- orderState: 'Open',
83
- lineItems: [],
84
- customLineItems: [],
85
- totalPrice: cart.totalPrice,
86
- refusedGifts: [],
87
- origin: 'Customer',
88
- syncInfo: [],
89
- shippingMode: cart.shippingMode,
90
- shipping: cart.shipping,
91
- store: context.storeKey
92
- ? {
93
- key: context.storeKey,
94
- typeId: 'store',
95
- }
96
- : undefined,
97
- lastMessageSequenceNumber: 0,
98
- }
99
- this.saveNew(context, resource)
100
- return resource
101
- }
78
+ const resource: Order = {
79
+ ...getBaseResourceProperties(),
80
+ orderNumber,
81
+ cart: cartReference,
82
+ orderState: 'Open',
83
+ lineItems: [],
84
+ customLineItems: [],
85
+ totalPrice: cart.totalPrice,
86
+ refusedGifts: [],
87
+ origin: 'Customer',
88
+ syncInfo: [],
89
+ shippingMode: cart.shippingMode,
90
+ shipping: cart.shipping,
91
+ store: context.storeKey
92
+ ? {
93
+ key: context.storeKey,
94
+ typeId: 'store',
95
+ }
96
+ : undefined,
97
+ lastMessageSequenceNumber: 0,
98
+ }
99
+ this.saveNew(context, resource)
100
+ return resource
101
+ }
102
102
 
103
- import(context: RepositoryContext, draft: OrderImportDraft): Order {
104
- // TODO: Check if order with given orderNumber already exists
105
- assert(this, 'OrderRepository not valid')
106
- const resource: Order = {
107
- ...getBaseResourceProperties(),
103
+ import(context: RepositoryContext, draft: OrderImportDraft): Order {
104
+ // TODO: Check if order with given orderNumber already exists
105
+ assert(this, 'OrderRepository not valid')
106
+ const resource: Order = {
107
+ ...getBaseResourceProperties(),
108
108
 
109
- billingAddress: createAddress(
110
- draft.billingAddress,
111
- context.projectKey,
112
- this._storage
113
- ),
114
- shippingAddress: createAddress(
115
- draft.shippingAddress,
116
- context.projectKey,
117
- this._storage
118
- ),
109
+ billingAddress: createAddress(
110
+ draft.billingAddress,
111
+ context.projectKey,
112
+ this._storage
113
+ ),
114
+ shippingAddress: createAddress(
115
+ draft.shippingAddress,
116
+ context.projectKey,
117
+ this._storage
118
+ ),
119
119
 
120
- custom: createCustomFields(
121
- draft.custom,
122
- context.projectKey,
123
- this._storage
124
- ),
125
- customerEmail: draft.customerEmail,
126
- lastMessageSequenceNumber: 0,
127
- orderNumber: draft.orderNumber,
128
- orderState: draft.orderState || 'Open',
129
- origin: draft.origin || 'Customer',
130
- paymentState: draft.paymentState,
131
- refusedGifts: [],
132
- shippingMode: 'Single',
133
- shipping: [],
120
+ custom: createCustomFields(
121
+ draft.custom,
122
+ context.projectKey,
123
+ this._storage
124
+ ),
125
+ customerEmail: draft.customerEmail,
126
+ lastMessageSequenceNumber: 0,
127
+ orderNumber: draft.orderNumber,
128
+ orderState: draft.orderState || 'Open',
129
+ origin: draft.origin || 'Customer',
130
+ paymentState: draft.paymentState,
131
+ refusedGifts: [],
132
+ shippingMode: 'Single',
133
+ shipping: [],
134
134
 
135
- store: resolveStoreReference(
136
- draft.store,
137
- context.projectKey,
138
- this._storage
139
- ),
140
- syncInfo: [],
135
+ store: resolveStoreReference(
136
+ draft.store,
137
+ context.projectKey,
138
+ this._storage
139
+ ),
140
+ syncInfo: [],
141
141
 
142
- lineItems:
143
- draft.lineItems?.map((item) =>
144
- this.lineItemFromImportDraft.bind(this)(context, item)
145
- ) || [],
146
- customLineItems:
147
- draft.customLineItems?.map((item) =>
148
- this.customLineItemFromImportDraft.bind(this)(context, item)
149
- ) || [],
142
+ lineItems:
143
+ draft.lineItems?.map((item) =>
144
+ this.lineItemFromImportDraft.bind(this)(context, item)
145
+ ) || [],
146
+ customLineItems:
147
+ draft.customLineItems?.map((item) =>
148
+ this.customLineItemFromImportDraft.bind(this)(context, item)
149
+ ) || [],
150
150
 
151
- totalPrice: createCentPrecisionMoney(draft.totalPrice),
152
- }
153
- this.saveNew(context, resource)
154
- return resource
155
- }
151
+ totalPrice: createCentPrecisionMoney(draft.totalPrice),
152
+ }
153
+ this.saveNew(context, resource)
154
+ return resource
155
+ }
156
156
 
157
- private lineItemFromImportDraft(
158
- context: RepositoryContext,
159
- draft: LineItemImportDraft
160
- ): LineItem {
161
- let product: Product
162
- let variant: ProductVariant | undefined
157
+ private lineItemFromImportDraft(
158
+ context: RepositoryContext,
159
+ draft: LineItemImportDraft
160
+ ): LineItem {
161
+ let product: Product
162
+ let variant: ProductVariant | undefined
163
163
 
164
- if (draft.variant.sku) {
165
- variant = {
166
- id: 0,
167
- sku: draft.variant.sku,
168
- }
164
+ if (draft.variant.sku) {
165
+ variant = {
166
+ id: 0,
167
+ sku: draft.variant.sku,
168
+ }
169
169
 
170
- const items = this._storage.query(context.projectKey, 'product', {
171
- where: [
172
- `masterData(current(masterVariant(sku="${draft.variant.sku}"))) or masterData(current(variants(sku="${draft.variant.sku}")))`,
173
- ],
174
- }) as ProductPagedQueryResponse
170
+ const items = this._storage.query(context.projectKey, 'product', {
171
+ where: [
172
+ `masterData(current(masterVariant(sku="${draft.variant.sku}"))) or masterData(current(variants(sku="${draft.variant.sku}")))`,
173
+ ],
174
+ }) as ProductPagedQueryResponse
175
175
 
176
- if (items.count !== 1) {
177
- throw new CommercetoolsError<GeneralError>({
178
- code: 'General',
179
- message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,
180
- })
181
- }
176
+ if (items.count !== 1) {
177
+ throw new CommercetoolsError<GeneralError>({
178
+ code: 'General',
179
+ message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,
180
+ })
181
+ }
182
182
 
183
- product = items.results[0]
184
- if (product.masterData.current.masterVariant.sku === draft.variant.sku) {
185
- variant = product.masterData.current.masterVariant
186
- } else {
187
- variant = product.masterData.current.variants.find(
188
- (v) => v.sku === draft.variant.sku
189
- )
190
- }
191
- if (!variant) {
192
- throw new Error('Internal state error')
193
- }
194
- } else {
195
- throw new Error('No product found')
196
- }
183
+ product = items.results[0]
184
+ if (product.masterData.current.masterVariant.sku === draft.variant.sku) {
185
+ variant = product.masterData.current.masterVariant
186
+ } else {
187
+ variant = product.masterData.current.variants.find(
188
+ (v) => v.sku === draft.variant.sku
189
+ )
190
+ }
191
+ if (!variant) {
192
+ throw new Error('Internal state error')
193
+ }
194
+ } else {
195
+ throw new Error('No product found')
196
+ }
197
197
 
198
- const lineItem: LineItem = {
199
- ...getBaseResourceProperties(),
200
- custom: createCustomFields(
201
- draft.custom,
202
- context.projectKey,
203
- this._storage
204
- ),
205
- discountedPricePerQuantity: [],
206
- lineItemMode: 'Standard',
207
- name: draft.name,
208
- price: createPrice(draft.price),
209
- priceMode: 'Platform',
210
- productId: product.id,
211
- productType: product.productType,
212
- quantity: draft.quantity,
213
- state: draft.state || [],
214
- taxRate: draft.taxRate,
215
- taxedPricePortions: [],
216
- perMethodTaxRate: [],
217
- totalPrice: createCentPrecisionMoney(draft.price.value),
218
- variant: {
219
- id: variant.id,
220
- sku: variant.sku,
221
- price: createPrice(draft.price),
222
- },
223
- }
198
+ const lineItem: LineItem = {
199
+ ...getBaseResourceProperties(),
200
+ custom: createCustomFields(
201
+ draft.custom,
202
+ context.projectKey,
203
+ this._storage
204
+ ),
205
+ discountedPricePerQuantity: [],
206
+ lineItemMode: 'Standard',
207
+ name: draft.name,
208
+ price: createPrice(draft.price),
209
+ priceMode: 'Platform',
210
+ productId: product.id,
211
+ productType: product.productType,
212
+ quantity: draft.quantity,
213
+ state: draft.state || [],
214
+ taxRate: draft.taxRate,
215
+ taxedPricePortions: [],
216
+ perMethodTaxRate: [],
217
+ totalPrice: createCentPrecisionMoney(draft.price.value),
218
+ variant: {
219
+ id: variant.id,
220
+ sku: variant.sku,
221
+ price: createPrice(draft.price),
222
+ },
223
+ }
224
224
 
225
- return lineItem
226
- }
225
+ return lineItem
226
+ }
227
227
 
228
- private customLineItemFromImportDraft(
229
- context: RepositoryContext,
230
- draft: CustomLineItemDraft
231
- ): CustomLineItem {
232
- const lineItem: CustomLineItem = {
233
- ...getBaseResourceProperties(),
234
- custom: createCustomFields(
235
- draft.custom,
236
- context.projectKey,
237
- this._storage
238
- ),
239
- discountedPricePerQuantity: [],
240
- money: createTypedMoney(draft.money),
241
- name: draft.name,
242
- quantity: draft.quantity ?? 0,
243
- perMethodTaxRate: [],
244
- priceMode: draft.priceMode,
245
- slug: draft.slug,
246
- state: [],
247
- totalPrice: createCentPrecisionMoney(draft.money),
248
- }
228
+ private customLineItemFromImportDraft(
229
+ context: RepositoryContext,
230
+ draft: CustomLineItemDraft
231
+ ): CustomLineItem {
232
+ const lineItem: CustomLineItem = {
233
+ ...getBaseResourceProperties(),
234
+ custom: createCustomFields(
235
+ draft.custom,
236
+ context.projectKey,
237
+ this._storage
238
+ ),
239
+ discountedPricePerQuantity: [],
240
+ money: createTypedMoney(draft.money),
241
+ name: draft.name,
242
+ quantity: draft.quantity ?? 0,
243
+ perMethodTaxRate: [],
244
+ priceMode: draft.priceMode,
245
+ slug: draft.slug,
246
+ state: [],
247
+ totalPrice: createCentPrecisionMoney(draft.money),
248
+ }
249
249
 
250
- return lineItem
251
- }
250
+ return lineItem
251
+ }
252
252
 
253
- getWithOrderNumber(
254
- context: RepositoryContext,
255
- orderNumber: string,
256
- params: QueryParams = {}
257
- ): Order | undefined {
258
- const result = this._storage.query(context.projectKey, this.getTypeId(), {
259
- ...params,
260
- where: [`orderNumber="${orderNumber}"`],
261
- })
262
- if (result.count === 1) {
263
- return result.results[0] as Order
264
- }
253
+ getWithOrderNumber(
254
+ context: RepositoryContext,
255
+ orderNumber: string,
256
+ params: QueryParams = {}
257
+ ): Order | undefined {
258
+ const result = this._storage.query(context.projectKey, this.getTypeId(), {
259
+ ...params,
260
+ where: [`orderNumber="${orderNumber}"`],
261
+ })
262
+ if (result.count === 1) {
263
+ return result.results[0] as Order
264
+ }
265
265
 
266
- // Catch this for now, should be checked when creating/updating
267
- if (result.count > 1) {
268
- throw new Error('Duplicate order numbers')
269
- }
266
+ // Catch this for now, should be checked when creating/updating
267
+ if (result.count > 1) {
268
+ throw new Error('Duplicate order numbers')
269
+ }
270
270
 
271
- return
272
- }
271
+ return
272
+ }
273
273
 
274
- actions = {
275
- addPayment: (
276
- context: RepositoryContext,
277
- resource: Writable<Order>,
278
- { payment }: OrderAddPaymentAction
279
- ) => {
280
- const resolvedPayment = this._storage.getByResourceIdentifier(
281
- context.projectKey,
282
- payment
283
- )
284
- if (!resolvedPayment) {
285
- throw new Error(`Payment ${payment.id} not found`)
286
- }
274
+ actions = {
275
+ addPayment: (
276
+ context: RepositoryContext,
277
+ resource: Writable<Order>,
278
+ { payment }: OrderAddPaymentAction
279
+ ) => {
280
+ const resolvedPayment = this._storage.getByResourceIdentifier(
281
+ context.projectKey,
282
+ payment
283
+ )
284
+ if (!resolvedPayment) {
285
+ throw new Error(`Payment ${payment.id} not found`)
286
+ }
287
287
 
288
- if (!resource.paymentInfo) {
289
- resource.paymentInfo = {
290
- payments: [],
291
- }
292
- }
288
+ if (!resource.paymentInfo) {
289
+ resource.paymentInfo = {
290
+ payments: [],
291
+ }
292
+ }
293
293
 
294
- resource.paymentInfo.payments.push({
295
- typeId: 'payment',
296
- id: payment.id!,
297
- })
298
- },
299
- changeOrderState: (
300
- context: RepositoryContext,
301
- resource: Writable<Order>,
302
- { orderState }: OrderChangeOrderStateAction
303
- ) => {
304
- resource.orderState = orderState
305
- },
306
- changePaymentState: (
307
- context: RepositoryContext,
308
- resource: Writable<Order>,
309
- { paymentState }: OrderChangePaymentStateAction
310
- ) => {
311
- resource.paymentState = paymentState
312
- },
313
- transitionState: (
314
- context: RepositoryContext,
315
- resource: Writable<Order>,
316
- { state }: OrderTransitionStateAction
317
- ) => {
318
- const resolvedType = this._storage.getByResourceIdentifier(
319
- context.projectKey,
320
- state
321
- ) as State | null
294
+ resource.paymentInfo.payments.push({
295
+ typeId: 'payment',
296
+ id: payment.id!,
297
+ })
298
+ },
299
+ changeOrderState: (
300
+ context: RepositoryContext,
301
+ resource: Writable<Order>,
302
+ { orderState }: OrderChangeOrderStateAction
303
+ ) => {
304
+ resource.orderState = orderState
305
+ },
306
+ changePaymentState: (
307
+ context: RepositoryContext,
308
+ resource: Writable<Order>,
309
+ { paymentState }: OrderChangePaymentStateAction
310
+ ) => {
311
+ resource.paymentState = paymentState
312
+ },
313
+ transitionState: (
314
+ context: RepositoryContext,
315
+ resource: Writable<Order>,
316
+ { state }: OrderTransitionStateAction
317
+ ) => {
318
+ const resolvedType = this._storage.getByResourceIdentifier(
319
+ context.projectKey,
320
+ state
321
+ ) as State | null
322
322
 
323
- if (!resolvedType) {
324
- throw new Error(
325
- `No state found with key=${state.key} or id=${state.key}`
326
- )
327
- }
323
+ if (!resolvedType) {
324
+ throw new Error(
325
+ `No state found with key=${state.key} or id=${state.key}`
326
+ )
327
+ }
328
328
 
329
- resource.state = {
330
- typeId: 'state',
331
- id: resolvedType.id,
332
- obj: { ...resolvedType, key: state.key ?? '' },
333
- }
334
- },
335
- setBillingAddress: (
336
- context: RepositoryContext,
337
- resource: Writable<Order>,
338
- { address }: OrderSetBillingAddressAction
339
- ) => {
340
- resource.billingAddress = createAddress(
341
- address,
342
- context.projectKey,
343
- this._storage
344
- )
345
- },
346
- setCustomerEmail: (
347
- context: RepositoryContext,
348
- resource: Writable<Order>,
349
- { email }: OrderSetCustomerEmailAction
350
- ) => {
351
- resource.customerEmail = email
352
- },
353
- setCustomField: (
354
- context: RepositoryContext,
355
- resource: Order,
356
- { name, value }: OrderSetCustomFieldAction
357
- ) => {
358
- if (!resource.custom) {
359
- throw new Error('Resource has no custom field')
360
- }
361
- resource.custom.fields[name] = value
362
- },
363
- setCustomType: (
364
- context: RepositoryContext,
365
- resource: Writable<Order>,
366
- { type, fields }: OrderSetCustomTypeAction
367
- ) => {
368
- if (!type) {
369
- resource.custom = undefined
370
- } else {
371
- const resolvedType = this._storage.getByResourceIdentifier(
372
- context.projectKey,
373
- type
374
- )
375
- if (!resolvedType) {
376
- throw new Error(`Type ${type} not found`)
377
- }
329
+ resource.state = {
330
+ typeId: 'state',
331
+ id: resolvedType.id,
332
+ obj: { ...resolvedType, key: state.key ?? '' },
333
+ }
334
+ },
335
+ setBillingAddress: (
336
+ context: RepositoryContext,
337
+ resource: Writable<Order>,
338
+ { address }: OrderSetBillingAddressAction
339
+ ) => {
340
+ resource.billingAddress = createAddress(
341
+ address,
342
+ context.projectKey,
343
+ this._storage
344
+ )
345
+ },
346
+ setCustomerEmail: (
347
+ context: RepositoryContext,
348
+ resource: Writable<Order>,
349
+ { email }: OrderSetCustomerEmailAction
350
+ ) => {
351
+ resource.customerEmail = email
352
+ },
353
+ setCustomField: (
354
+ context: RepositoryContext,
355
+ resource: Order,
356
+ { name, value }: OrderSetCustomFieldAction
357
+ ) => {
358
+ if (!resource.custom) {
359
+ throw new Error('Resource has no custom field')
360
+ }
361
+ resource.custom.fields[name] = value
362
+ },
363
+ setCustomType: (
364
+ context: RepositoryContext,
365
+ resource: Writable<Order>,
366
+ { type, fields }: OrderSetCustomTypeAction
367
+ ) => {
368
+ if (!type) {
369
+ resource.custom = undefined
370
+ } else {
371
+ const resolvedType = this._storage.getByResourceIdentifier(
372
+ context.projectKey,
373
+ type
374
+ )
375
+ if (!resolvedType) {
376
+ throw new Error(`Type ${type} not found`)
377
+ }
378
378
 
379
- resource.custom = {
380
- type: {
381
- typeId: 'type',
382
- id: resolvedType.id,
383
- },
384
- fields: fields || {},
385
- }
386
- }
387
- },
388
- setLocale: (
389
- context: RepositoryContext,
390
- resource: Writable<Order>,
391
- { locale }: OrderSetLocaleAction
392
- ) => {
393
- resource.locale = locale
394
- },
395
- setOrderNumber: (
396
- context: RepositoryContext,
397
- resource: Writable<Order>,
398
- { orderNumber }: OrderSetOrderNumberAction
399
- ) => {
400
- resource.orderNumber = orderNumber
401
- },
402
- setShippingAddress: (
403
- context: RepositoryContext,
404
- resource: Writable<Order>,
405
- { address }: OrderSetShippingAddressAction
406
- ) => {
407
- resource.shippingAddress = createAddress(
408
- address,
409
- context.projectKey,
410
- this._storage
411
- )
412
- },
413
- setStore: (
414
- context: RepositoryContext,
415
- resource: Writable<Order>,
416
- { store }: OrderSetStoreAction
417
- ) => {
418
- if (!store) return
419
- const resolvedType = this._storage.getByResourceIdentifier(
420
- context.projectKey,
421
- store
422
- )
423
- if (!resolvedType) {
424
- throw new Error(`No store found with key=${store.key}`)
425
- }
379
+ resource.custom = {
380
+ type: {
381
+ typeId: 'type',
382
+ id: resolvedType.id,
383
+ },
384
+ fields: fields || {},
385
+ }
386
+ }
387
+ },
388
+ setLocale: (
389
+ context: RepositoryContext,
390
+ resource: Writable<Order>,
391
+ { locale }: OrderSetLocaleAction
392
+ ) => {
393
+ resource.locale = locale
394
+ },
395
+ setOrderNumber: (
396
+ context: RepositoryContext,
397
+ resource: Writable<Order>,
398
+ { orderNumber }: OrderSetOrderNumberAction
399
+ ) => {
400
+ resource.orderNumber = orderNumber
401
+ },
402
+ setShippingAddress: (
403
+ context: RepositoryContext,
404
+ resource: Writable<Order>,
405
+ { address }: OrderSetShippingAddressAction
406
+ ) => {
407
+ resource.shippingAddress = createAddress(
408
+ address,
409
+ context.projectKey,
410
+ this._storage
411
+ )
412
+ },
413
+ setStore: (
414
+ context: RepositoryContext,
415
+ resource: Writable<Order>,
416
+ { store }: OrderSetStoreAction
417
+ ) => {
418
+ if (!store) return
419
+ const resolvedType = this._storage.getByResourceIdentifier(
420
+ context.projectKey,
421
+ store
422
+ )
423
+ if (!resolvedType) {
424
+ throw new Error(`No store found with key=${store.key}`)
425
+ }
426
426
 
427
- const storeReference = resolvedType as Store
428
- resource.store = {
429
- typeId: 'store',
430
- key: storeReference.key,
431
- }
432
- },
433
- }
427
+ const storeReference = resolvedType as Store
428
+ resource.store = {
429
+ typeId: 'store',
430
+ key: storeReference.key,
431
+ }
432
+ },
433
+ }
434
434
  }