@labdigital/commercetools-mock 0.6.5 → 0.8.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 (118) hide show
  1. package/dist/index.d.ts +409 -3
  2. package/dist/index.global.js +49983 -0
  3. package/dist/index.global.js.map +1 -0
  4. package/dist/index.js +4835 -6
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.mjs +4803 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +36 -17
  9. package/src/ctMock.ts +5 -0
  10. package/src/helpers.ts +39 -0
  11. package/src/lib/projectionSearchFilter.test.ts +183 -0
  12. package/src/lib/projectionSearchFilter.ts +347 -0
  13. package/src/priceSelector.test.ts +96 -0
  14. package/src/priceSelector.ts +109 -0
  15. package/src/product-projection-search.ts +345 -0
  16. package/src/projectAPI.ts +19 -20
  17. package/src/repositories/category.ts +36 -0
  18. package/src/repositories/channel.ts +104 -0
  19. package/src/repositories/customer-group.ts +37 -0
  20. package/src/repositories/discount-code.ts +37 -0
  21. package/src/repositories/helpers.ts +46 -4
  22. package/src/repositories/product-discount.ts +181 -0
  23. package/src/repositories/product-projection.ts +30 -59
  24. package/src/repositories/product-type.ts +88 -6
  25. package/src/repositories/product.ts +49 -9
  26. package/src/repositories/shipping-method.ts +31 -0
  27. package/src/repositories/store.ts +43 -3
  28. package/src/repositories/type.ts +19 -0
  29. package/src/services/custom-object.test.ts +2 -2
  30. package/src/services/product-discount.ts +33 -0
  31. package/src/services/product-projection.test.ts +329 -107
  32. package/src/services/product.test.ts +12 -0
  33. package/src/storage.ts +116 -58
  34. package/src/types.ts +9 -2
  35. package/dist/commercetools-mock.cjs.development.js +0 -4382
  36. package/dist/commercetools-mock.cjs.development.js.map +0 -1
  37. package/dist/commercetools-mock.cjs.production.min.js +0 -2
  38. package/dist/commercetools-mock.cjs.production.min.js.map +0 -1
  39. package/dist/commercetools-mock.esm.js +0 -4374
  40. package/dist/commercetools-mock.esm.js.map +0 -1
  41. package/dist/constants.d.ts +0 -2
  42. package/dist/ctMock.d.ts +0 -32
  43. package/dist/exceptions.d.ts +0 -12
  44. package/dist/helpers.d.ts +0 -6
  45. package/dist/lib/expandParser.d.ts +0 -15
  46. package/dist/lib/filterParser.d.ts +0 -1
  47. package/dist/lib/haversine.d.ts +0 -8
  48. package/dist/lib/masking.d.ts +0 -1
  49. package/dist/lib/predicateParser.d.ts +0 -11
  50. package/dist/lib/proxy.d.ts +0 -1
  51. package/dist/oauth/errors.d.ts +0 -8
  52. package/dist/oauth/helpers.d.ts +0 -2
  53. package/dist/oauth/server.d.ts +0 -12
  54. package/dist/oauth/store.d.ts +0 -14
  55. package/dist/projectAPI.d.ts +0 -12
  56. package/dist/repositories/abstract.d.ts +0 -33
  57. package/dist/repositories/cart-discount.d.ts +0 -9
  58. package/dist/repositories/cart.d.ts +0 -21
  59. package/dist/repositories/category.d.ts +0 -18
  60. package/dist/repositories/channel.d.ts +0 -6
  61. package/dist/repositories/custom-object.d.ts +0 -8
  62. package/dist/repositories/customer-group.d.ts +0 -11
  63. package/dist/repositories/customer.d.ts +0 -11
  64. package/dist/repositories/discount-code.d.ts +0 -8
  65. package/dist/repositories/errors.d.ts +0 -2
  66. package/dist/repositories/extension.d.ts +0 -8
  67. package/dist/repositories/helpers.d.ts +0 -10
  68. package/dist/repositories/inventory-entry.d.ts +0 -14
  69. package/dist/repositories/my-order.d.ts +0 -6
  70. package/dist/repositories/order.d.ts +0 -26
  71. package/dist/repositories/payment.d.ts +0 -23
  72. package/dist/repositories/product-projection.d.ts +0 -10
  73. package/dist/repositories/product-type.d.ts +0 -10
  74. package/dist/repositories/product.d.ts +0 -11
  75. package/dist/repositories/project.d.ts +0 -8
  76. package/dist/repositories/shipping-method.d.ts +0 -10
  77. package/dist/repositories/shopping-list.d.ts +0 -6
  78. package/dist/repositories/state.d.ts +0 -8
  79. package/dist/repositories/store.d.ts +0 -10
  80. package/dist/repositories/subscription.d.ts +0 -6
  81. package/dist/repositories/tax-category.d.ts +0 -10
  82. package/dist/repositories/type.d.ts +0 -8
  83. package/dist/repositories/zone.d.ts +0 -8
  84. package/dist/server.d.ts +0 -1
  85. package/dist/services/abstract.d.ts +0 -20
  86. package/dist/services/cart-discount.d.ts +0 -9
  87. package/dist/services/cart.d.ts +0 -12
  88. package/dist/services/category.d.ts +0 -9
  89. package/dist/services/channel.d.ts +0 -9
  90. package/dist/services/custom-object.d.ts +0 -13
  91. package/dist/services/customer-group.d.ts +0 -9
  92. package/dist/services/customer.d.ts +0 -10
  93. package/dist/services/discount-code.d.ts +0 -9
  94. package/dist/services/extension.d.ts +0 -9
  95. package/dist/services/inventory-entry.d.ts +0 -9
  96. package/dist/services/my-cart.d.ts +0 -11
  97. package/dist/services/my-customer.d.ts +0 -13
  98. package/dist/services/my-order.d.ts +0 -10
  99. package/dist/services/my-payment.d.ts +0 -9
  100. package/dist/services/order.d.ts +0 -12
  101. package/dist/services/payment.d.ts +0 -9
  102. package/dist/services/product-projection.d.ts +0 -11
  103. package/dist/services/product-type.d.ts +0 -11
  104. package/dist/services/product.d.ts +0 -9
  105. package/dist/services/project.d.ts +0 -11
  106. package/dist/services/shipping-method.d.ts +0 -10
  107. package/dist/services/shopping-list.d.ts +0 -9
  108. package/dist/services/state.d.ts +0 -9
  109. package/dist/services/store.d.ts +0 -11
  110. package/dist/services/subscription.d.ts +0 -9
  111. package/dist/services/tax-category.d.ts +0 -11
  112. package/dist/services/type.d.ts +0 -9
  113. package/dist/services/zone.d.ts +0 -9
  114. package/dist/storage.d.ts +0 -56
  115. package/dist/types.d.ts +0 -89
  116. package/dist/validate.d.ts +0 -7482
  117. package/src/lib/filterParser.test.ts +0 -15
  118. package/src/lib/filterParser.ts +0 -17
package/dist/index.d.ts CHANGED
@@ -1,3 +1,409 @@
1
- import { CommercetoolsMock, CommercetoolsMockOptions } from './ctMock';
2
- import { getBaseResourceProperties } from './helpers';
3
- export { CommercetoolsMock, getBaseResourceProperties, CommercetoolsMockOptions, };
1
+ import express, { Router, Request, Response } from 'express';
2
+ import * as ctp from '@commercetools/platform-sdk';
3
+ import { Project, BaseResource, PagedQueryResponse, ResourceIdentifier, QueryParam, ProductProjectionPagedSearchResponse, Product, ProductProjection, FacetResults, TermFacetResult, FilteredFacetResult, RangeFacetResult, ProductDraft, ReferenceTypeId, ShoppingListDraft, ShoppingList, CartDraft, Cart, CartAddLineItemAction, CartRemoveLineItemAction, CartSetBillingAddressAction, CartSetShippingMethodAction, CartSetCountryAction, CartSetCustomerEmailAction, CartSetCustomFieldAction, CartSetCustomTypeAction, CartSetLocaleAction, CartSetShippingAddressAction, LineItemDraft, LineItem, CustomerDraft, Customer, CustomerChangeEmailAction, CustomObjectDraft, CustomObject, InventoryEntryDraft, InventoryEntry, InventoryEntryChangeQuantityAction, InventoryEntrySetExpectedDeliveryAction, InventoryEntrySetCustomFieldAction, InventoryEntrySetCustomTypeAction, InventoryEntrySetRestockableInDaysAction, OrderFromCartDraft, Order, CartReference, OrderImportDraft, OrderAddPaymentAction, OrderChangeOrderStateAction, OrderChangePaymentStateAction, OrderTransitionStateAction, OrderSetBillingAddressAction, OrderSetCustomerEmailAction, OrderSetCustomFieldAction, OrderSetCustomTypeAction, OrderSetLocaleAction, OrderSetOrderNumberAction, OrderSetShippingAddressAction, OrderSetStoreAction, PaymentDraft, Payment, TransactionDraft, PaymentSetCustomFieldAction, PaymentSetCustomTypeAction, PaymentAddTransactionAction, PaymentChangeTransactionStateAction, PaymentTransitionStateAction, ProductPublishAction, ProductSetAttributeAction, ProductTypeDraft, ProductType, AttributeDefinitionDraft, AttributeDefinition, ProductTypeUpdateAction, ShippingMethodDraft, ShippingMethod, ShippingMethodUpdateAction, StateDraft, State, StateUpdateAction, TaxCategoryDraft, TaxCategory, TaxCategoryUpdateAction, ProductDiscountDraft, ProductDiscount, ProductDiscountUpdateAction, UpdateAction } from '@commercetools/platform-sdk';
4
+ import { ParsedQs } from 'qs';
5
+
6
+ declare type GetParams$1 = {
7
+ expand?: string[];
8
+ };
9
+ declare type QueryParams$1 = {
10
+ expand?: string | string[];
11
+ sort?: string | string[];
12
+ limit?: number;
13
+ offset?: number;
14
+ withTotal?: boolean;
15
+ where?: string | string[];
16
+ [key: string]: QueryParam;
17
+ };
18
+ declare abstract class AbstractStorage {
19
+ abstract clear(): void;
20
+ abstract assertStorage(typeId: RepositoryTypes): void;
21
+ abstract all<RT extends RepositoryTypes>(projectKey: string, typeId: RT): Array<ResourceMap[RT]>;
22
+ abstract add<RT extends RepositoryTypes>(projectKey: string, typeId: RT, obj: ResourceMap[RT]): void;
23
+ abstract get<RT extends RepositoryTypes>(projectKey: string, typeId: RT, id: string, params?: GetParams$1): ResourceMap[RT] | null;
24
+ abstract getByKey<RT extends RepositoryTypes>(projectKey: string, typeId: RT, key: string, params: GetParams$1): ResourceMap[RT] | null;
25
+ abstract addProject(projectKey: string): Project;
26
+ abstract getProject(projectKey: string): Project;
27
+ abstract saveProject(project: Project): Project;
28
+ abstract delete<RT extends RepositoryTypes>(projectKey: string, typeId: RT, id: string, params: GetParams$1): BaseResource | null;
29
+ abstract query(projectKey: string, typeId: RepositoryTypes, params: QueryParams$1): PagedQueryResponse;
30
+ abstract getByResourceIdentifier<RT extends RepositoryTypes>(projectKey: string, identifier: ResourceIdentifier): ResourceMap[RT] | undefined;
31
+ abstract expand<T>(projectKey: string, obj: T, clause: undefined | string | string[]): T;
32
+ }
33
+
34
+ /**
35
+ * This module implements the commercetools product projection filter expression.
36
+ */
37
+
38
+ declare type RangeExpression = {
39
+ type: 'RangeExpression';
40
+ start?: number;
41
+ stop?: number;
42
+ match: (obj: any) => boolean;
43
+ };
44
+ declare type FilterExpression = {
45
+ type: 'FilterExpression';
46
+ match: (obj: any) => boolean;
47
+ };
48
+
49
+ declare type ProductProjectionSearchParams = {
50
+ fuzzy?: boolean;
51
+ fuzzyLevel?: number;
52
+ markMatchingVariants?: boolean;
53
+ staged?: boolean;
54
+ filter?: string[];
55
+ 'filter.facets'?: string[];
56
+ 'filter.query'?: string[];
57
+ facet?: string | string[];
58
+ sort?: string | string[];
59
+ limit?: number;
60
+ offset?: number;
61
+ withTotal?: boolean;
62
+ priceCurrency?: string;
63
+ priceCountry?: string;
64
+ priceCustomerGroup?: string;
65
+ priceChannel?: string;
66
+ localeProjection?: string;
67
+ storeProjection?: string;
68
+ expand?: string | string[];
69
+ [key: string]: QueryParam;
70
+ };
71
+ declare class ProductProjectionSearch {
72
+ protected _storage: AbstractStorage;
73
+ constructor(storage: AbstractStorage);
74
+ search(projectKey: string, params: ProductProjectionSearchParams): ProductProjectionPagedSearchResponse;
75
+ transform(product: Product): ProductProjection;
76
+ getFacets(params: ProductProjectionSearchParams, products: Product[]): FacetResults;
77
+ /**
78
+ * TODO: This implemention needs the following additional features:
79
+ * - counting products
80
+ * - correct dataType
81
+ */
82
+ termFacet(facet: string, products: Product[], staged: boolean): TermFacetResult;
83
+ filterFacet(source: string, filters: FilterExpression[] | undefined, products: Product[], staged: boolean): FilteredFacetResult;
84
+ rangeFacet(source: string, ranges: RangeExpression[] | undefined, products: Product[], staged: boolean): RangeFacetResult;
85
+ }
86
+
87
+ declare class ProductProjectionRepository extends AbstractResourceRepository {
88
+ protected _searchService: ProductProjectionSearch;
89
+ constructor(storage: AbstractStorage);
90
+ getTypeId(): RepositoryTypes;
91
+ create(context: RepositoryContext, draft: ProductDraft): ProductProjection;
92
+ query(context: RepositoryContext, params?: QueryParams): ctp.PagedQueryResponse;
93
+ search(context: RepositoryContext, query: ParsedQs): ctp.ProductProjectionPagedSearchResponse;
94
+ actions: {};
95
+ }
96
+
97
+ declare class ShoppingListRepository extends AbstractResourceRepository {
98
+ getTypeId(): ReferenceTypeId;
99
+ create(context: RepositoryContext, draft: ShoppingListDraft): ShoppingList;
100
+ }
101
+
102
+ declare abstract class AbstractService {
103
+ protected abstract getBasePath(): string;
104
+ abstract repository: AbstractResourceRepository;
105
+ createStatusCode: number;
106
+ constructor(parent: Router);
107
+ extraRoutes(router: Router): void;
108
+ registerRoutes(parent: Router): void;
109
+ get(request: Request, response: Response): Response<any, Record<string, any>>;
110
+ getWithId(request: Request, response: Response): Response<any, Record<string, any>>;
111
+ getWithKey(request: Request, response: Response): Response<any, Record<string, any>>;
112
+ deletewithId(request: Request, response: Response): Response<any, Record<string, any>>;
113
+ deletewithKey(request: Request, response: Response): Response<any, Record<string, any>>;
114
+ post(request: Request, response: Response): Response<any, Record<string, any>>;
115
+ postWithId(request: Request, response: Response): Response<any, Record<string, any>>;
116
+ postWithKey(request: Request, response: Response): Response<any, Record<string, any>>;
117
+ protected _expandWithId(request: Request, resourceId: string): ctp.BaseResource | null;
118
+ private _parseParam;
119
+ }
120
+
121
+ declare class CartRepository extends AbstractResourceRepository {
122
+ getTypeId(): ReferenceTypeId;
123
+ create(context: RepositoryContext, draft: CartDraft): Cart;
124
+ getActiveCart(projectKey: string): Cart | undefined;
125
+ actions: {
126
+ addLineItem: (context: RepositoryContext, resource: Writable<Cart>, { productId, variantId, sku, quantity }: CartAddLineItemAction) => void;
127
+ removeLineItem: (context: RepositoryContext, resource: Writable<Cart>, { lineItemId, quantity }: CartRemoveLineItemAction) => void;
128
+ setBillingAddress: (context: RepositoryContext, resource: Writable<Cart>, { address }: CartSetBillingAddressAction) => void;
129
+ setShippingMethod: (context: RepositoryContext, resource: Writable<Cart>, { shippingMethod }: CartSetShippingMethodAction) => void;
130
+ setCountry: (context: RepositoryContext, resource: Writable<Cart>, { country }: CartSetCountryAction) => void;
131
+ setCustomerEmail: (context: RepositoryContext, resource: Writable<Cart>, { email }: CartSetCustomerEmailAction) => void;
132
+ setCustomField: (context: RepositoryContext, resource: Cart, { name, value }: CartSetCustomFieldAction) => void;
133
+ setCustomType: (context: RepositoryContext, resource: Writable<Cart>, { type, fields }: CartSetCustomTypeAction) => void;
134
+ setLocale: (context: RepositoryContext, resource: Writable<Cart>, { locale }: CartSetLocaleAction) => void;
135
+ setShippingAddress: (context: RepositoryContext, resource: Writable<Cart>, { address }: CartSetShippingAddressAction) => void;
136
+ };
137
+ draftLineItemtoLineItem: (projectKey: string, draftLineItem: LineItemDraft, currency: string, country: string | undefined) => LineItem;
138
+ }
139
+
140
+ declare class CustomerRepository extends AbstractResourceRepository {
141
+ getTypeId(): ReferenceTypeId;
142
+ create(context: RepositoryContext, draft: CustomerDraft): Customer;
143
+ getMe(context: RepositoryContext): Customer | undefined;
144
+ actions: {
145
+ changeEmail: (_context: RepositoryContext, resource: Writable<Customer>, { email }: CustomerChangeEmailAction) => void;
146
+ };
147
+ }
148
+
149
+ declare class CustomObjectRepository extends AbstractResourceRepository {
150
+ getTypeId(): ReferenceTypeId;
151
+ create(context: RepositoryContext, draft: Writable<CustomObjectDraft>): CustomObject;
152
+ getWithContainerAndKey(context: RepositoryContext, container: string, key: string): CustomObject | undefined;
153
+ }
154
+
155
+ declare class InventoryEntryRepository extends AbstractResourceRepository {
156
+ getTypeId(): ReferenceTypeId;
157
+ create(context: RepositoryContext, draft: InventoryEntryDraft): InventoryEntry;
158
+ actions: {
159
+ changeQuantity: (context: RepositoryContext, resource: Writable<InventoryEntry>, { quantity }: InventoryEntryChangeQuantityAction) => void;
160
+ setExpectedDelivery: (context: RepositoryContext, resource: Writable<InventoryEntry>, { expectedDelivery }: InventoryEntrySetExpectedDeliveryAction) => void;
161
+ setCustomField: (context: RepositoryContext, resource: InventoryEntry, { name, value }: InventoryEntrySetCustomFieldAction) => void;
162
+ setCustomType: (context: RepositoryContext, resource: Writable<InventoryEntry>, { type, fields }: InventoryEntrySetCustomTypeAction) => void;
163
+ setRestockableInDays: (context: RepositoryContext, resource: Writable<InventoryEntry>, { restockableInDays }: InventoryEntrySetRestockableInDaysAction) => void;
164
+ };
165
+ }
166
+
167
+ declare class OrderRepository extends AbstractResourceRepository {
168
+ getTypeId(): ReferenceTypeId;
169
+ create(context: RepositoryContext, draft: OrderFromCartDraft): Order;
170
+ createFromCart(context: RepositoryContext, cartReference: CartReference, orderNumber?: string): Order;
171
+ import(context: RepositoryContext, draft: OrderImportDraft): Order;
172
+ private lineItemFromImportDraft;
173
+ private customLineItemFromImportDraft;
174
+ getWithOrderNumber(context: RepositoryContext, orderNumber: string, params?: QueryParams): Order | undefined;
175
+ actions: {
176
+ addPayment: (context: RepositoryContext, resource: Writable<Order>, { payment }: OrderAddPaymentAction) => void;
177
+ changeOrderState: (context: RepositoryContext, resource: Writable<Order>, { orderState }: OrderChangeOrderStateAction) => void;
178
+ changePaymentState: (context: RepositoryContext, resource: Writable<Order>, { paymentState }: OrderChangePaymentStateAction) => void;
179
+ transitionState: (context: RepositoryContext, resource: Writable<Order>, { state }: OrderTransitionStateAction) => void;
180
+ setBillingAddress: (context: RepositoryContext, resource: Writable<Order>, { address }: OrderSetBillingAddressAction) => void;
181
+ setCustomerEmail: (context: RepositoryContext, resource: Writable<Order>, { email }: OrderSetCustomerEmailAction) => void;
182
+ setCustomField: (context: RepositoryContext, resource: Order, { name, value }: OrderSetCustomFieldAction) => void;
183
+ setCustomType: (context: RepositoryContext, resource: Writable<Order>, { type, fields }: OrderSetCustomTypeAction) => void;
184
+ setLocale: (context: RepositoryContext, resource: Writable<Order>, { locale }: OrderSetLocaleAction) => void;
185
+ setOrderNumber: (context: RepositoryContext, resource: Writable<Order>, { orderNumber }: OrderSetOrderNumberAction) => void;
186
+ setShippingAddress: (context: RepositoryContext, resource: Writable<Order>, { address }: OrderSetShippingAddressAction) => void;
187
+ setStore: (context: RepositoryContext, resource: Writable<Order>, { store }: OrderSetStoreAction) => void;
188
+ };
189
+ }
190
+
191
+ declare class PaymentRepository extends AbstractResourceRepository {
192
+ getTypeId(): ReferenceTypeId;
193
+ create(context: RepositoryContext, draft: PaymentDraft): Payment;
194
+ transactionFromTransactionDraft: (draft: TransactionDraft, context: RepositoryContext) => {
195
+ id: string;
196
+ amount: ctp.TypedMoney;
197
+ custom: ctp.CustomFields | undefined;
198
+ timestamp?: string | undefined;
199
+ type: ctp.TransactionType;
200
+ interactionId?: string | undefined;
201
+ state?: ctp.TransactionState | undefined;
202
+ };
203
+ actions: {
204
+ setCustomField: (context: RepositoryContext, resource: Payment, { name, value }: PaymentSetCustomFieldAction) => void;
205
+ setCustomType: (context: RepositoryContext, resource: Writable<Payment>, { type, fields }: PaymentSetCustomTypeAction) => void;
206
+ addTransaction: (context: RepositoryContext, resource: Writable<Payment>, { transaction }: PaymentAddTransactionAction) => void;
207
+ changeTransactionState: (_context: RepositoryContext, resource: Writable<Payment>, { transactionId, state }: PaymentChangeTransactionStateAction) => void;
208
+ transitionState: (context: RepositoryContext, resource: Writable<Payment>, { state }: PaymentTransitionStateAction) => void;
209
+ };
210
+ }
211
+
212
+ declare class ProductRepository extends AbstractResourceRepository {
213
+ getTypeId(): ReferenceTypeId;
214
+ create(context: RepositoryContext, draft: ProductDraft): Product;
215
+ actions: {
216
+ publish: (context: RepositoryContext, resource: Writable<Product>, { scope }: ProductPublishAction) => void;
217
+ setAttribute: (context: RepositoryContext, resource: Writable<Product>, { variantId, sku, name, value, staged }: ProductSetAttributeAction) => void;
218
+ };
219
+ }
220
+
221
+ declare class ProductTypeRepository extends AbstractResourceRepository {
222
+ getTypeId(): ReferenceTypeId;
223
+ create(context: RepositoryContext, draft: ProductTypeDraft): ProductType;
224
+ attributeDefinitionFromAttributeDefinitionDraft: (_context: RepositoryContext, draft: AttributeDefinitionDraft) => AttributeDefinition;
225
+ getWithKey(context: RepositoryContext, key: string): ProductType | undefined;
226
+ actions: Partial<Record<ProductTypeUpdateAction['action'], (context: RepositoryContext, resource: Writable<ProductType>, action: any) => void>>;
227
+ }
228
+
229
+ declare class ShippingMethodRepository extends AbstractResourceRepository {
230
+ getTypeId(): ReferenceTypeId;
231
+ create(context: RepositoryContext, draft: ShippingMethodDraft): ShippingMethod;
232
+ private _transformZoneRateDraft;
233
+ private _transformShippingRate;
234
+ actions: Partial<Record<ShippingMethodUpdateAction['action'], (context: RepositoryContext, resource: Writable<ShippingMethod>, action: any) => void>>;
235
+ }
236
+
237
+ declare class StateRepository extends AbstractResourceRepository {
238
+ getTypeId(): ReferenceTypeId;
239
+ create(context: RepositoryContext, draft: StateDraft): State;
240
+ actions: Partial<Record<StateUpdateAction['action'], (context: RepositoryContext, resource: Writable<State>, action: any) => void>>;
241
+ }
242
+
243
+ declare class TaxCategoryRepository extends AbstractResourceRepository {
244
+ getTypeId(): ReferenceTypeId;
245
+ create(context: RepositoryContext, draft: TaxCategoryDraft): TaxCategory;
246
+ private taxRateFromTaxRateDraft;
247
+ getWithKey(context: RepositoryContext, key: string): TaxCategory | undefined;
248
+ actions: Partial<Record<TaxCategoryUpdateAction['action'], (context: RepositoryContext, resource: Writable<TaxCategory>, action: any) => void>>;
249
+ }
250
+
251
+ declare class ProductDiscountRepository extends AbstractResourceRepository {
252
+ getTypeId(): ReferenceTypeId;
253
+ create(context: RepositoryContext, draft: ProductDiscountDraft): ProductDiscount;
254
+ private transformValueDraft;
255
+ getWithKey(context: RepositoryContext, key: string): ProductDiscount | undefined;
256
+ actions: Partial<Record<ProductDiscountUpdateAction['action'], (context: RepositoryContext, resource: Writable<ProductDiscount>, action: any) => void>>;
257
+ }
258
+
259
+ declare type Writable<T> = {
260
+ -readonly [P in keyof T]: Writable<T[P]>;
261
+ };
262
+ declare type RepositoryTypes = ReferenceTypeId | 'standalone-price' | 'product-projection';
263
+ declare type ServiceTypes = RepositoryTypes | 'my-cart' | 'my-order' | 'my-payment' | 'my-customer' | 'product-projection';
264
+ declare type Services = Partial<{
265
+ [index in ServiceTypes]: AbstractService;
266
+ }>;
267
+ declare type ResourceMap = {
268
+ cart: ctp.Cart;
269
+ 'cart-discount': ctp.CartDiscount;
270
+ category: ctp.Category;
271
+ channel: ctp.Channel;
272
+ customer: ctp.Customer;
273
+ 'customer-group': ctp.CustomerGroup;
274
+ 'discount-code': ctp.DiscountCode;
275
+ extension: ctp.Extension;
276
+ 'inventory-entry': ctp.InventoryEntry;
277
+ 'key-value-document': ctp.CustomObject;
278
+ order: ctp.Order;
279
+ 'order-edit': ctp.OrderEdit;
280
+ payment: ctp.Payment;
281
+ product: ctp.Product;
282
+ 'product-discount': ctp.ProductDiscount;
283
+ 'product-projection': ctp.ProductProjection;
284
+ 'product-selection': ctp.ProductSelection;
285
+ 'product-price': ctp.StandalonePrice;
286
+ 'product-type': ctp.ProductType;
287
+ review: ctp.Review;
288
+ 'shipping-method': ctp.ShippingMethod;
289
+ 'shopping-list': ctp.ShoppingList;
290
+ 'standalone-price': ctp.StandalonePrice;
291
+ state: ctp.State;
292
+ store: ctp.Store;
293
+ subscription: ctp.Subscription;
294
+ 'tax-category': ctp.TaxCategory;
295
+ type: ctp.Type;
296
+ zone: ctp.Zone;
297
+ 'customer-email-token': never;
298
+ 'customer-password-token': never;
299
+ };
300
+ declare type RepositoryMap = {
301
+ cart: CartRepository;
302
+ 'cart-discount': never;
303
+ category: never;
304
+ channel: never;
305
+ customer: CustomerRepository;
306
+ 'customer-email-token': never;
307
+ 'customer-group': never;
308
+ 'customer-password-token': never;
309
+ 'discount-code': never;
310
+ extension: never;
311
+ 'inventory-entry': InventoryEntryRepository;
312
+ 'key-value-document': CustomObjectRepository;
313
+ order: OrderRepository;
314
+ 'order-edit': never;
315
+ payment: PaymentRepository;
316
+ product: ProductRepository;
317
+ 'product-projection': ProductProjectionRepository;
318
+ 'product-discount': ProductDiscountRepository;
319
+ 'product-type': ProductTypeRepository;
320
+ review: never;
321
+ 'shipping-method': ShippingMethodRepository;
322
+ 'shopping-list': ShoppingListRepository;
323
+ state: StateRepository;
324
+ store: never;
325
+ subscription: never;
326
+ 'tax-category': TaxCategoryRepository;
327
+ type: ctp.Type;
328
+ zone: ctp.Zone;
329
+ };
330
+
331
+ declare type QueryParams = {
332
+ expand?: string[];
333
+ where?: string[];
334
+ offset?: number;
335
+ limit?: number;
336
+ };
337
+ declare type GetParams = {
338
+ expand?: string[];
339
+ };
340
+ declare type RepositoryContext = {
341
+ projectKey: string;
342
+ storeKey?: string;
343
+ };
344
+ declare abstract class AbstractRepository {
345
+ protected _storage: AbstractStorage;
346
+ protected actions: Partial<Record<any, (context: RepositoryContext, resource: any, action: any) => void>>;
347
+ constructor(storage: AbstractStorage);
348
+ abstract save({ projectKey }: RepositoryContext, resource: BaseResource | Project): void;
349
+ processUpdateActions(context: RepositoryContext, resource: BaseResource | Project, actions: UpdateAction[]): BaseResource;
350
+ }
351
+ declare abstract class AbstractResourceRepository extends AbstractRepository {
352
+ abstract create(context: RepositoryContext, draft: any): BaseResource;
353
+ abstract getTypeId(): RepositoryTypes;
354
+ constructor(storage: AbstractStorage);
355
+ query(context: RepositoryContext, params?: QueryParams): ctp.PagedQueryResponse;
356
+ get(context: RepositoryContext, id: string, params?: GetParams): BaseResource | null;
357
+ getByKey(context: RepositoryContext, key: string, params?: GetParams): BaseResource | null;
358
+ delete(context: RepositoryContext, id: string, params?: GetParams): BaseResource | null;
359
+ save(context: RepositoryContext, resource: BaseResource): void;
360
+ }
361
+
362
+ declare class ProjectAPI {
363
+ private projectKey;
364
+ private _storage;
365
+ private _services;
366
+ constructor(projectKey: string, services: Services, storage: AbstractStorage);
367
+ add(typeId: ReferenceTypeId, resource: ResourceMap[ReferenceTypeId]): void;
368
+ get<RT extends RepositoryTypes>(typeId: RT, id: string, params?: GetParams): ResourceMap[RT];
369
+ getRepository<RT extends keyof RepositoryMap>(typeId: ServiceTypes): RepositoryMap[RT];
370
+ }
371
+
372
+ declare type CommercetoolsMockOptions = {
373
+ validateCredentials: boolean;
374
+ enableAuthentication: boolean;
375
+ defaultProjectKey: string | undefined;
376
+ apiHost: RegExp | string;
377
+ authHost: RegExp | string;
378
+ silent: boolean;
379
+ };
380
+ declare type AppOptions = {
381
+ silent?: boolean;
382
+ };
383
+ declare class CommercetoolsMock {
384
+ app: express.Express;
385
+ options: CommercetoolsMockOptions;
386
+ private _storage;
387
+ private _oauth2;
388
+ private _nockScopes;
389
+ private _services;
390
+ private _projectService?;
391
+ constructor(options?: Partial<CommercetoolsMockOptions>);
392
+ start(): void;
393
+ stop(): void;
394
+ clear(): void;
395
+ project(projectKey?: string): ProjectAPI;
396
+ runServer(port?: number, options?: AppOptions): void;
397
+ private createApp;
398
+ private mockApiHost;
399
+ private mockAuthHost;
400
+ }
401
+
402
+ declare const getBaseResourceProperties: () => {
403
+ id: string;
404
+ createdAt: string;
405
+ lastModifiedAt: string;
406
+ version: number;
407
+ };
408
+
409
+ export { CommercetoolsMock, CommercetoolsMockOptions, getBaseResourceProperties };