@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,178 +1,181 @@
1
1
  import type {
2
- Category,
3
- CategoryChangeAssetNameAction,
4
- CategoryChangeSlugAction,
5
- CategoryDraft,
6
- CategorySetAssetDescriptionAction,
7
- CategorySetAssetSourcesAction,
8
- CategorySetCustomFieldAction,
9
- CategorySetCustomTypeAction,
10
- CategorySetDescriptionAction,
11
- CategorySetKeyAction,
12
- CategorySetMetaDescriptionAction,
13
- CategorySetMetaKeywordsAction,
14
- CategorySetMetaTitleAction,
2
+ Category,
3
+ CategoryChangeAssetNameAction,
4
+ CategoryChangeSlugAction,
5
+ CategoryDraft,
6
+ CategorySetAssetDescriptionAction,
7
+ CategorySetAssetSourcesAction,
8
+ CategorySetCustomFieldAction,
9
+ CategorySetCustomTypeAction,
10
+ CategorySetDescriptionAction,
11
+ CategorySetKeyAction,
12
+ CategorySetMetaDescriptionAction,
13
+ CategorySetMetaKeywordsAction,
14
+ CategorySetMetaTitleAction,
15
15
  } from '@commercetools/platform-sdk'
16
16
  import { v4 as uuidv4 } from 'uuid'
17
17
  import { getBaseResourceProperties } from '../helpers.js'
18
18
  import type { Writable } from '../types.js'
19
- import { AbstractResourceRepository, type RepositoryContext } from './abstract.js'
19
+ import {
20
+ AbstractResourceRepository,
21
+ type RepositoryContext,
22
+ } from './abstract.js'
20
23
  import { createCustomFields } from './helpers.js'
21
24
 
22
25
  export class CategoryRepository extends AbstractResourceRepository<'category'> {
23
- getTypeId() {
24
- return 'category' as const
25
- }
26
+ getTypeId() {
27
+ return 'category' as const
28
+ }
26
29
 
27
- create(context: RepositoryContext, draft: CategoryDraft): Category {
28
- const resource: Category = {
29
- ...getBaseResourceProperties(),
30
- key: draft.key,
31
- name: draft.name,
32
- slug: draft.slug,
33
- orderHint: draft.orderHint || '',
34
- externalId: draft.externalId || '',
35
- parent: draft.parent
36
- ? { typeId: 'category', id: draft.parent.id! }
37
- : undefined,
38
- ancestors: [], // TODO
39
- assets:
40
- draft.assets?.map((d) => ({
41
- id: uuidv4(),
42
- name: d.name,
43
- description: d.description,
44
- sources: d.sources,
45
- tags: d.tags,
46
- key: d.key,
47
- custom: createCustomFields(
48
- draft.custom,
49
- context.projectKey,
50
- this._storage
51
- ),
52
- })) || [],
53
- custom: createCustomFields(
54
- draft.custom,
55
- context.projectKey,
56
- this._storage
57
- ),
58
- }
59
- this.saveNew(context, resource)
60
- return resource
61
- }
30
+ create(context: RepositoryContext, draft: CategoryDraft): Category {
31
+ const resource: Category = {
32
+ ...getBaseResourceProperties(),
33
+ key: draft.key,
34
+ name: draft.name,
35
+ slug: draft.slug,
36
+ orderHint: draft.orderHint || '',
37
+ externalId: draft.externalId || '',
38
+ parent: draft.parent
39
+ ? { typeId: 'category', id: draft.parent.id! }
40
+ : undefined,
41
+ ancestors: [], // TODO
42
+ assets:
43
+ draft.assets?.map((d) => ({
44
+ id: uuidv4(),
45
+ name: d.name,
46
+ description: d.description,
47
+ sources: d.sources,
48
+ tags: d.tags,
49
+ key: d.key,
50
+ custom: createCustomFields(
51
+ draft.custom,
52
+ context.projectKey,
53
+ this._storage
54
+ ),
55
+ })) || [],
56
+ custom: createCustomFields(
57
+ draft.custom,
58
+ context.projectKey,
59
+ this._storage
60
+ ),
61
+ }
62
+ this.saveNew(context, resource)
63
+ return resource
64
+ }
62
65
 
63
- actions = {
64
- changeAssetName: (
65
- context: RepositoryContext,
66
- resource: Writable<Category>,
67
- { assetId, assetKey, name }: CategoryChangeAssetNameAction
68
- ) => {
69
- resource.assets?.forEach((asset) => {
70
- if (assetId && assetId === asset.id) {
71
- asset.name = name
72
- }
73
- if (assetKey && assetKey === asset.key) {
74
- asset.name = name
75
- }
76
- })
77
- },
78
- changeSlug: (
79
- context: RepositoryContext,
80
- resource: Writable<Category>,
81
- { slug }: CategoryChangeSlugAction
82
- ) => {
83
- resource.slug = slug
84
- },
85
- setKey: (
86
- context: RepositoryContext,
87
- resource: Writable<Category>,
88
- { key }: CategorySetKeyAction
89
- ) => {
90
- resource.key = key
91
- },
92
- setAssetDescription: (
93
- context: RepositoryContext,
94
- resource: Writable<Category>,
95
- { assetId, assetKey, description }: CategorySetAssetDescriptionAction
96
- ) => {
97
- resource.assets?.forEach((asset) => {
98
- if (assetId && assetId === asset.id) {
99
- asset.description = description
100
- }
101
- if (assetKey && assetKey === asset.key) {
102
- asset.description = description
103
- }
104
- })
105
- },
106
- setAssetSources: (
107
- context: RepositoryContext,
108
- resource: Writable<Category>,
109
- { assetId, assetKey, sources }: CategorySetAssetSourcesAction
110
- ) => {
111
- resource.assets?.forEach((asset) => {
112
- if (assetId && assetId === asset.id) {
113
- asset.sources = sources
114
- }
115
- if (assetKey && assetKey === asset.key) {
116
- asset.sources = sources
117
- }
118
- })
119
- },
120
- setDescription: (
121
- context: RepositoryContext,
122
- resource: Writable<Category>,
123
- { description }: CategorySetDescriptionAction
124
- ) => {
125
- resource.description = description
126
- },
127
- setMetaDescription: (
128
- context: RepositoryContext,
129
- resource: Writable<Category>,
130
- { metaDescription }: CategorySetMetaDescriptionAction
131
- ) => {
132
- resource.metaDescription = metaDescription
133
- },
134
- setMetaKeywords: (
135
- context: RepositoryContext,
136
- resource: Writable<Category>,
137
- { metaKeywords }: CategorySetMetaKeywordsAction
138
- ) => {
139
- resource.metaKeywords = metaKeywords
140
- },
141
- setMetaTitle: (
142
- context: RepositoryContext,
143
- resource: Writable<Category>,
144
- { metaTitle }: CategorySetMetaTitleAction
145
- ) => {
146
- resource.metaTitle = metaTitle
147
- },
148
- setCustomType: (
149
- context: RepositoryContext,
150
- resource: Writable<Category>,
151
- { type, fields }: CategorySetCustomTypeAction
152
- ) => {
153
- if (type) {
154
- resource.custom = createCustomFields(
155
- { type, fields },
156
- context.projectKey,
157
- this._storage
158
- )
159
- } else {
160
- resource.custom = undefined
161
- }
162
- },
163
- setCustomField: (
164
- context: RepositoryContext,
165
- resource: Writable<Category>,
166
- { name, value }: CategorySetCustomFieldAction
167
- ) => {
168
- if (!resource.custom) {
169
- return
170
- }
171
- if (value === null) {
172
- delete resource.custom.fields[name]
173
- } else {
174
- resource.custom.fields[name] = value
175
- }
176
- },
177
- }
66
+ actions = {
67
+ changeAssetName: (
68
+ context: RepositoryContext,
69
+ resource: Writable<Category>,
70
+ { assetId, assetKey, name }: CategoryChangeAssetNameAction
71
+ ) => {
72
+ resource.assets?.forEach((asset) => {
73
+ if (assetId && assetId === asset.id) {
74
+ asset.name = name
75
+ }
76
+ if (assetKey && assetKey === asset.key) {
77
+ asset.name = name
78
+ }
79
+ })
80
+ },
81
+ changeSlug: (
82
+ context: RepositoryContext,
83
+ resource: Writable<Category>,
84
+ { slug }: CategoryChangeSlugAction
85
+ ) => {
86
+ resource.slug = slug
87
+ },
88
+ setKey: (
89
+ context: RepositoryContext,
90
+ resource: Writable<Category>,
91
+ { key }: CategorySetKeyAction
92
+ ) => {
93
+ resource.key = key
94
+ },
95
+ setAssetDescription: (
96
+ context: RepositoryContext,
97
+ resource: Writable<Category>,
98
+ { assetId, assetKey, description }: CategorySetAssetDescriptionAction
99
+ ) => {
100
+ resource.assets?.forEach((asset) => {
101
+ if (assetId && assetId === asset.id) {
102
+ asset.description = description
103
+ }
104
+ if (assetKey && assetKey === asset.key) {
105
+ asset.description = description
106
+ }
107
+ })
108
+ },
109
+ setAssetSources: (
110
+ context: RepositoryContext,
111
+ resource: Writable<Category>,
112
+ { assetId, assetKey, sources }: CategorySetAssetSourcesAction
113
+ ) => {
114
+ resource.assets?.forEach((asset) => {
115
+ if (assetId && assetId === asset.id) {
116
+ asset.sources = sources
117
+ }
118
+ if (assetKey && assetKey === asset.key) {
119
+ asset.sources = sources
120
+ }
121
+ })
122
+ },
123
+ setDescription: (
124
+ context: RepositoryContext,
125
+ resource: Writable<Category>,
126
+ { description }: CategorySetDescriptionAction
127
+ ) => {
128
+ resource.description = description
129
+ },
130
+ setMetaDescription: (
131
+ context: RepositoryContext,
132
+ resource: Writable<Category>,
133
+ { metaDescription }: CategorySetMetaDescriptionAction
134
+ ) => {
135
+ resource.metaDescription = metaDescription
136
+ },
137
+ setMetaKeywords: (
138
+ context: RepositoryContext,
139
+ resource: Writable<Category>,
140
+ { metaKeywords }: CategorySetMetaKeywordsAction
141
+ ) => {
142
+ resource.metaKeywords = metaKeywords
143
+ },
144
+ setMetaTitle: (
145
+ context: RepositoryContext,
146
+ resource: Writable<Category>,
147
+ { metaTitle }: CategorySetMetaTitleAction
148
+ ) => {
149
+ resource.metaTitle = metaTitle
150
+ },
151
+ setCustomType: (
152
+ context: RepositoryContext,
153
+ resource: Writable<Category>,
154
+ { type, fields }: CategorySetCustomTypeAction
155
+ ) => {
156
+ if (type) {
157
+ resource.custom = createCustomFields(
158
+ { type, fields },
159
+ context.projectKey,
160
+ this._storage
161
+ )
162
+ } else {
163
+ resource.custom = undefined
164
+ }
165
+ },
166
+ setCustomField: (
167
+ context: RepositoryContext,
168
+ resource: Writable<Category>,
169
+ { name, value }: CategorySetCustomFieldAction
170
+ ) => {
171
+ if (!resource.custom) {
172
+ return
173
+ }
174
+ if (value === null) {
175
+ delete resource.custom.fields[name]
176
+ } else {
177
+ resource.custom.fields[name] = value
178
+ }
179
+ },
180
+ }
178
181
  }
@@ -1,126 +1,129 @@
1
1
  import type {
2
- Channel,
3
- ChannelChangeDescriptionAction,
4
- ChannelChangeKeyAction,
5
- ChannelChangeNameAction,
6
- ChannelDraft,
7
- ChannelSetAddressAction,
8
- ChannelSetCustomFieldAction,
9
- ChannelSetCustomTypeAction,
10
- ChannelSetGeoLocationAction,
11
- ChannelUpdateAction,
2
+ Channel,
3
+ ChannelChangeDescriptionAction,
4
+ ChannelChangeKeyAction,
5
+ ChannelChangeNameAction,
6
+ ChannelDraft,
7
+ ChannelSetAddressAction,
8
+ ChannelSetCustomFieldAction,
9
+ ChannelSetCustomTypeAction,
10
+ ChannelSetGeoLocationAction,
11
+ ChannelUpdateAction,
12
12
  } from '@commercetools/platform-sdk'
13
13
  import { getBaseResourceProperties } from '../helpers.js'
14
14
  import type { Writable } from '../types.js'
15
- import { AbstractResourceRepository, type RepositoryContext } from './abstract.js'
15
+ import {
16
+ AbstractResourceRepository,
17
+ type RepositoryContext,
18
+ } from './abstract.js'
16
19
  import { createAddress, createCustomFields } from './helpers.js'
17
20
 
18
21
  export class ChannelRepository extends AbstractResourceRepository<'channel'> {
19
- getTypeId() {
20
- return 'channel' as const
21
- }
22
+ getTypeId() {
23
+ return 'channel' as const
24
+ }
22
25
 
23
- create(context: RepositoryContext, draft: ChannelDraft): Channel {
24
- const resource: Channel = {
25
- ...getBaseResourceProperties(),
26
- key: draft.key,
27
- name: draft.name,
28
- description: draft.description,
29
- roles: draft.roles || [],
30
- geoLocation: draft.geoLocation,
31
- address: createAddress(draft.address, context.projectKey, this._storage),
32
- custom: createCustomFields(
33
- draft.custom,
34
- context.projectKey,
35
- this._storage
36
- ),
37
- }
38
- this.saveNew(context, resource)
39
- return resource
40
- }
26
+ create(context: RepositoryContext, draft: ChannelDraft): Channel {
27
+ const resource: Channel = {
28
+ ...getBaseResourceProperties(),
29
+ key: draft.key,
30
+ name: draft.name,
31
+ description: draft.description,
32
+ roles: draft.roles || [],
33
+ geoLocation: draft.geoLocation,
34
+ address: createAddress(draft.address, context.projectKey, this._storage),
35
+ custom: createCustomFields(
36
+ draft.custom,
37
+ context.projectKey,
38
+ this._storage
39
+ ),
40
+ }
41
+ this.saveNew(context, resource)
42
+ return resource
43
+ }
41
44
 
42
- actions: Partial<
43
- Record<
44
- ChannelUpdateAction['action'],
45
- (
46
- context: RepositoryContext,
47
- resource: Writable<Channel>,
48
- action: any
49
- ) => void
50
- >
51
- > = {
52
- changeKey: (
53
- context: RepositoryContext,
54
- resource: Writable<Channel>,
55
- { key }: ChannelChangeKeyAction
56
- ) => {
57
- resource.key = key
58
- },
45
+ actions: Partial<
46
+ Record<
47
+ ChannelUpdateAction['action'],
48
+ (
49
+ context: RepositoryContext,
50
+ resource: Writable<Channel>,
51
+ action: any
52
+ ) => void
53
+ >
54
+ > = {
55
+ changeKey: (
56
+ context: RepositoryContext,
57
+ resource: Writable<Channel>,
58
+ { key }: ChannelChangeKeyAction
59
+ ) => {
60
+ resource.key = key
61
+ },
59
62
 
60
- changeName: (
61
- context: RepositoryContext,
62
- resource: Writable<Channel>,
63
- { name }: ChannelChangeNameAction
64
- ) => {
65
- resource.name = name
66
- },
63
+ changeName: (
64
+ context: RepositoryContext,
65
+ resource: Writable<Channel>,
66
+ { name }: ChannelChangeNameAction
67
+ ) => {
68
+ resource.name = name
69
+ },
67
70
 
68
- changeDescription: (
69
- context: RepositoryContext,
70
- resource: Writable<Channel>,
71
- { description }: ChannelChangeDescriptionAction
72
- ) => {
73
- resource.description = description
74
- },
71
+ changeDescription: (
72
+ context: RepositoryContext,
73
+ resource: Writable<Channel>,
74
+ { description }: ChannelChangeDescriptionAction
75
+ ) => {
76
+ resource.description = description
77
+ },
75
78
 
76
- setAddress: (
77
- context: RepositoryContext,
78
- resource: Writable<Channel>,
79
- { address }: ChannelSetAddressAction
80
- ) => {
81
- resource.address = createAddress(
82
- address,
83
- context.projectKey,
84
- this._storage
85
- )
86
- },
79
+ setAddress: (
80
+ context: RepositoryContext,
81
+ resource: Writable<Channel>,
82
+ { address }: ChannelSetAddressAction
83
+ ) => {
84
+ resource.address = createAddress(
85
+ address,
86
+ context.projectKey,
87
+ this._storage
88
+ )
89
+ },
87
90
 
88
- setGeoLocation: (
89
- context: RepositoryContext,
90
- resource: Writable<Channel>,
91
- { geoLocation }: ChannelSetGeoLocationAction
92
- ) => {
93
- resource.geoLocation = geoLocation
94
- },
91
+ setGeoLocation: (
92
+ context: RepositoryContext,
93
+ resource: Writable<Channel>,
94
+ { geoLocation }: ChannelSetGeoLocationAction
95
+ ) => {
96
+ resource.geoLocation = geoLocation
97
+ },
95
98
 
96
- setCustomType: (
97
- context: RepositoryContext,
98
- resource: Writable<Channel>,
99
- { type, fields }: ChannelSetCustomTypeAction
100
- ) => {
101
- if (type) {
102
- resource.custom = createCustomFields(
103
- { type, fields },
104
- context.projectKey,
105
- this._storage
106
- )
107
- } else {
108
- resource.custom = undefined
109
- }
110
- },
111
- setCustomField: (
112
- context: RepositoryContext,
113
- resource: Writable<Channel>,
114
- { name, value }: ChannelSetCustomFieldAction
115
- ) => {
116
- if (!resource.custom) {
117
- return
118
- }
119
- if (value === null) {
120
- delete resource.custom.fields[name]
121
- } else {
122
- resource.custom.fields[name] = value
123
- }
124
- },
125
- }
99
+ setCustomType: (
100
+ context: RepositoryContext,
101
+ resource: Writable<Channel>,
102
+ { type, fields }: ChannelSetCustomTypeAction
103
+ ) => {
104
+ if (type) {
105
+ resource.custom = createCustomFields(
106
+ { type, fields },
107
+ context.projectKey,
108
+ this._storage
109
+ )
110
+ } else {
111
+ resource.custom = undefined
112
+ }
113
+ },
114
+ setCustomField: (
115
+ context: RepositoryContext,
116
+ resource: Writable<Channel>,
117
+ { name, value }: ChannelSetCustomFieldAction
118
+ ) => {
119
+ if (!resource.custom) {
120
+ return
121
+ }
122
+ if (value === null) {
123
+ delete resource.custom.fields[name]
124
+ } else {
125
+ resource.custom.fields[name] = value
126
+ }
127
+ },
128
+ }
126
129
  }