@labdigital/commercetools-mock 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.global.js +107 -31
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +107 -31
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +107 -31
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -4
- package/src/product-projection-search.ts +4 -0
- package/src/repositories/abstract.ts +23 -5
- package/src/repositories/extension.ts +18 -1
- package/src/repositories/helpers.ts +37 -3
- package/src/repositories/project.ts +10 -5
- package/src/repositories/state.ts +14 -0
- package/src/validate.js +0 -1
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.9.0",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -56,8 +56,6 @@
|
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@types/lodash": "^4.14.182",
|
|
59
|
-
"ajv": "^8.8.2",
|
|
60
|
-
"ajv-formats": "^2.1.1",
|
|
61
59
|
"basic-auth": "^2.0.1",
|
|
62
60
|
"body-parser": "^1.20.0",
|
|
63
61
|
"deep-equal": "^2.0.5",
|
|
@@ -75,7 +73,6 @@
|
|
|
75
73
|
},
|
|
76
74
|
"scripts": {
|
|
77
75
|
"start": "nodemon --watch src --exec 'node -r esbuild-register' src/server.ts",
|
|
78
|
-
"generate": "node -r esbuild-register generate-validation.ts",
|
|
79
76
|
"build": "tsup",
|
|
80
77
|
"test": "jest test --coverage",
|
|
81
78
|
"lint": "eslint"
|
|
@@ -107,6 +107,7 @@ export class ProductProjectionSearch {
|
|
|
107
107
|
const filters = params['filter.query'].map(f =>
|
|
108
108
|
parseFilterExpression(f, params.staged ?? false)
|
|
109
109
|
)
|
|
110
|
+
|
|
110
111
|
resources = resources.filter(resource =>
|
|
111
112
|
filters.every(f => f(resource, markMatchingVariant))
|
|
112
113
|
)
|
|
@@ -154,6 +155,9 @@ export class ProductProjectionSearch {
|
|
|
154
155
|
lastModifiedAt: product.lastModifiedAt,
|
|
155
156
|
version: product.version,
|
|
156
157
|
name: obj.name,
|
|
158
|
+
key: product.key,
|
|
159
|
+
description: obj.description,
|
|
160
|
+
metaDescription: obj.metaDescription,
|
|
157
161
|
slug: obj.slug,
|
|
158
162
|
categories: obj.categories,
|
|
159
163
|
masterVariant: obj.masterVariant,
|
|
@@ -65,8 +65,18 @@ export abstract class AbstractRepository {
|
|
|
65
65
|
if (!deepEqual(modifiedResource, resource)) {
|
|
66
66
|
this.save(context, modifiedResource)
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
|
|
69
|
+
const result = this.postProcessResource(modifiedResource)
|
|
70
|
+
if (!result) {
|
|
71
|
+
throw new Error("invalid post process action")
|
|
72
|
+
}
|
|
73
|
+
return result
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
postProcessResource(resource: BaseResource | null): BaseResource | null {
|
|
77
|
+
return resource
|
|
69
78
|
}
|
|
79
|
+
|
|
70
80
|
}
|
|
71
81
|
|
|
72
82
|
export abstract class AbstractResourceRepository extends AbstractRepository {
|
|
@@ -79,12 +89,17 @@ export abstract class AbstractResourceRepository extends AbstractRepository {
|
|
|
79
89
|
}
|
|
80
90
|
|
|
81
91
|
query(context: RepositoryContext, params: QueryParams = {}) {
|
|
82
|
-
|
|
92
|
+
const result = this._storage.query(context.projectKey, this.getTypeId(), {
|
|
83
93
|
expand: params.expand,
|
|
84
94
|
where: params.where,
|
|
85
95
|
offset: params.offset,
|
|
86
96
|
limit: params.limit,
|
|
87
97
|
})
|
|
98
|
+
|
|
99
|
+
// @ts-ignore
|
|
100
|
+
result.results = result.results.map(this.postProcessResource)
|
|
101
|
+
|
|
102
|
+
return result
|
|
88
103
|
}
|
|
89
104
|
|
|
90
105
|
get(
|
|
@@ -92,7 +107,8 @@ export abstract class AbstractResourceRepository extends AbstractRepository {
|
|
|
92
107
|
id: string,
|
|
93
108
|
params: GetParams = {}
|
|
94
109
|
): BaseResource | null {
|
|
95
|
-
|
|
110
|
+
const resource = this._storage.get(context.projectKey, this.getTypeId(), id, params)
|
|
111
|
+
return this.postProcessResource(resource)
|
|
96
112
|
}
|
|
97
113
|
|
|
98
114
|
getByKey(
|
|
@@ -100,12 +116,13 @@ export abstract class AbstractResourceRepository extends AbstractRepository {
|
|
|
100
116
|
key: string,
|
|
101
117
|
params: GetParams = {}
|
|
102
118
|
): BaseResource | null {
|
|
103
|
-
|
|
119
|
+
const resource = this._storage.getByKey(
|
|
104
120
|
context.projectKey,
|
|
105
121
|
this.getTypeId(),
|
|
106
122
|
key,
|
|
107
123
|
params
|
|
108
124
|
)
|
|
125
|
+
return this.postProcessResource(resource)
|
|
109
126
|
}
|
|
110
127
|
|
|
111
128
|
delete(
|
|
@@ -113,12 +130,13 @@ export abstract class AbstractResourceRepository extends AbstractRepository {
|
|
|
113
130
|
id: string,
|
|
114
131
|
params: GetParams = {}
|
|
115
132
|
): BaseResource | null {
|
|
116
|
-
|
|
133
|
+
const resource = this._storage.delete(
|
|
117
134
|
context.projectKey,
|
|
118
135
|
this.getTypeId(),
|
|
119
136
|
id,
|
|
120
137
|
params
|
|
121
138
|
)
|
|
139
|
+
return this.postProcessResource(resource)
|
|
122
140
|
}
|
|
123
141
|
|
|
124
142
|
save(context: RepositoryContext, resource: BaseResource) {
|
|
@@ -10,13 +10,30 @@ import {
|
|
|
10
10
|
} from '@commercetools/platform-sdk'
|
|
11
11
|
import { Writable } from '../types'
|
|
12
12
|
import { getBaseResourceProperties } from '../helpers'
|
|
13
|
-
import { AbstractResourceRepository, RepositoryContext } from './abstract'
|
|
13
|
+
import { AbstractResourceRepository, GetParams, RepositoryContext } from './abstract'
|
|
14
|
+
import { maskSecretValue } from '../lib/masking'
|
|
14
15
|
|
|
15
16
|
export class ExtensionRepository extends AbstractResourceRepository {
|
|
16
17
|
getTypeId(): ReferenceTypeId {
|
|
17
18
|
return 'extension'
|
|
18
19
|
}
|
|
19
20
|
|
|
21
|
+
postProcessResource(resource: Extension) {
|
|
22
|
+
if (resource) {
|
|
23
|
+
if (resource.destination.type === "HTTP" &&
|
|
24
|
+
resource.destination.authentication?.type === "AuthorizationHeader"
|
|
25
|
+
) {
|
|
26
|
+
return maskSecretValue(
|
|
27
|
+
resource, 'destination.authentication.headerValue')
|
|
28
|
+
}
|
|
29
|
+
else if (resource.destination.type == "AWSLambda") {
|
|
30
|
+
return maskSecretValue(
|
|
31
|
+
resource, 'destination.accessSecret')
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return resource
|
|
35
|
+
}
|
|
36
|
+
|
|
20
37
|
create(context: RepositoryContext, draft: ExtensionDraft): Extension {
|
|
21
38
|
const resource: Extension = {
|
|
22
39
|
...getBaseResourceProperties(),
|
|
@@ -75,10 +75,44 @@ export const createPrice = (draft: PriceDraft): Price => {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
export const createTypedMoney = (value: Money): TypedMoney => {
|
|
78
|
+
|
|
79
|
+
// Taken from https://docs.adyen.com/development-resources/currency-codes
|
|
80
|
+
let fractionDigits = 2
|
|
81
|
+
switch (value.currencyCode.toUpperCase()) {
|
|
82
|
+
case 'BHD':
|
|
83
|
+
case 'IQD':
|
|
84
|
+
case 'JOD':
|
|
85
|
+
case 'KWD':
|
|
86
|
+
case 'LYD':
|
|
87
|
+
case 'OMR':
|
|
88
|
+
case 'TND':
|
|
89
|
+
fractionDigits = 3
|
|
90
|
+
break
|
|
91
|
+
case 'CVE':
|
|
92
|
+
case 'DJF':
|
|
93
|
+
case 'GNF':
|
|
94
|
+
case 'IDR':
|
|
95
|
+
case 'JPY':
|
|
96
|
+
case 'KMF':
|
|
97
|
+
case 'KRW':
|
|
98
|
+
case 'PYG':
|
|
99
|
+
case 'RWF':
|
|
100
|
+
case 'UGX':
|
|
101
|
+
case 'VND':
|
|
102
|
+
case 'VUV':
|
|
103
|
+
case 'XAF':
|
|
104
|
+
case 'XOF':
|
|
105
|
+
case 'XPF':
|
|
106
|
+
fractionDigits = 0
|
|
107
|
+
break
|
|
108
|
+
default:
|
|
109
|
+
fractionDigits = 2
|
|
110
|
+
}
|
|
111
|
+
|
|
78
112
|
return {
|
|
79
113
|
type: 'centPrecision',
|
|
80
|
-
fractionDigits: 2,
|
|
81
114
|
...value,
|
|
115
|
+
fractionDigits: fractionDigits,
|
|
82
116
|
}
|
|
83
117
|
}
|
|
84
118
|
|
|
@@ -135,10 +169,10 @@ export const getReferenceFromResourceIdentifier = <T extends Reference>(
|
|
|
135
169
|
)
|
|
136
170
|
}
|
|
137
171
|
|
|
138
|
-
return
|
|
172
|
+
return {
|
|
139
173
|
typeId: resourceIdentifier.typeId,
|
|
140
174
|
id: resource?.id,
|
|
141
|
-
} as unknown
|
|
175
|
+
} as unknown as T
|
|
142
176
|
}
|
|
143
177
|
|
|
144
178
|
export const getRepositoryContext = (request: Request): RepositoryContext => {
|
|
@@ -23,11 +23,16 @@ import { maskSecretValue } from '../lib/masking'
|
|
|
23
23
|
export class ProjectRepository extends AbstractRepository {
|
|
24
24
|
get(context: RepositoryContext): Project | null {
|
|
25
25
|
const resource = this._storage.getProject(context.projectKey)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
return this.postProcessResource(resource)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
postProcessResource(resource: any): any {
|
|
30
|
+
if (resource) {
|
|
31
|
+
return maskSecretValue(
|
|
32
|
+
resource, 'externalOAuth.authorizationHeader')
|
|
33
|
+
}
|
|
34
|
+
return resource
|
|
35
|
+
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
save(context: RepositoryContext, resource: Project) {
|
|
@@ -2,12 +2,14 @@ import { getBaseResourceProperties } from '../helpers'
|
|
|
2
2
|
import { getReferenceFromResourceIdentifier } from './helpers'
|
|
3
3
|
import {
|
|
4
4
|
ReferenceTypeId,
|
|
5
|
+
StateReference,
|
|
5
6
|
State,
|
|
6
7
|
StateChangeKeyAction,
|
|
7
8
|
StateDraft,
|
|
8
9
|
StateSetDescriptionAction,
|
|
9
10
|
StateSetNameAction,
|
|
10
11
|
StateSetRolesAction,
|
|
12
|
+
StateSetTransitionsAction,
|
|
11
13
|
StateUpdateAction,
|
|
12
14
|
} from '@commercetools/platform-sdk'
|
|
13
15
|
import { AbstractResourceRepository, RepositoryContext } from './abstract'
|
|
@@ -71,5 +73,17 @@ export class StateRepository extends AbstractResourceRepository {
|
|
|
71
73
|
) => {
|
|
72
74
|
resource.roles = roles
|
|
73
75
|
},
|
|
76
|
+
setTransitions: (
|
|
77
|
+
context: RepositoryContext,
|
|
78
|
+
resource: Writable<State>,
|
|
79
|
+
{ transitions }: StateSetTransitionsAction
|
|
80
|
+
) => {
|
|
81
|
+
resource.transitions = transitions?.map((resourceId): StateReference => {
|
|
82
|
+
return {
|
|
83
|
+
id: resourceId.id || "",
|
|
84
|
+
typeId: "state",
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
}
|
|
74
88
|
}
|
|
75
89
|
}
|