@restorecommerce/facade 0.1.39 → 0.1.43
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/CHANGELOG.md +39 -0
- package/dist/gql/protos/graphql.d.ts +1 -1
- package/dist/gql/protos/graphql.js +37 -11
- package/dist/gql/protos/registry.d.ts +5 -0
- package/dist/gql/protos/registry.js +78 -12
- package/dist/gql/protos/utils.d.ts +21 -0
- package/dist/gql/protos/utils.js +88 -1
- package/dist/modules/access-control/gql/schema.generated.d.ts +19 -17
- package/dist/modules/fulfillment/gql/schema.generated.d.ts +135 -116
- package/dist/modules/fulfillment/gql/schema.generated.js +7 -6
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,45 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
+
## [0.1.43](https://github.com/restorecommerce/libs/compare/@restorecommerce/facade@0.1.42...@restorecommerce/facade@0.1.43) (2022-02-02)
|
7
|
+
|
8
|
+
|
9
|
+
### Bug Fixes
|
10
|
+
|
11
|
+
* **facade:** enum convert string to integer ([47127ef](https://github.com/restorecommerce/libs/commit/47127ef323f5853a4c6573b01dd36c3725074d4e))
|
12
|
+
* **facade:** fix for mutation resolvers to convert enums string values to integer ([28d0fea](https://github.com/restorecommerce/libs/commit/28d0fea912778b3cf4f748bc68b1e0fafaea60af))
|
13
|
+
* **facade:** fixed read operations to convert enums to number ([81083c0](https://github.com/restorecommerce/libs/commit/81083c0162d605d6a3c8394e06ba093d1e29948e))
|
14
|
+
* **facade:** move conversion of enum to int to utils ([72c9a1f](https://github.com/restorecommerce/libs/commit/72c9a1f0be269b68bc9b2501a38789ce7409453f))
|
15
|
+
* **facade:** recursive enum path fix ([244f7fc](https://github.com/restorecommerce/libs/commit/244f7fc782d10ffb5f774f0245174446288cacb5))
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
## [0.1.42](https://github.com/restorecommerce/libs/compare/@restorecommerce/facade@0.1.41...@restorecommerce/facade@0.1.42) (2022-01-28)
|
22
|
+
|
23
|
+
**Note:** Version bump only for package @restorecommerce/facade
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
## [0.1.41](https://github.com/restorecommerce/libs/compare/@restorecommerce/facade@0.1.40...@restorecommerce/facade@0.1.41) (2021-12-22)
|
30
|
+
|
31
|
+
**Note:** Version bump only for package @restorecommerce/facade
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
## [0.1.40](https://github.com/restorecommerce/libs/compare/@restorecommerce/facade@0.1.39...@restorecommerce/facade@0.1.40) (2021-12-21)
|
38
|
+
|
39
|
+
**Note:** Version bump only for package @restorecommerce/facade
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
6
45
|
## [0.1.39](https://github.com/restorecommerce/libs/compare/@restorecommerce/facade@0.1.38...@restorecommerce/facade@0.1.39) (2021-12-20)
|
7
46
|
|
8
47
|
**Note:** Version bump only for package @restorecommerce/facade
|
@@ -15,7 +15,7 @@ declare type ServiceClient<Context extends Pick<Context, Key>, Key extends keyof
|
|
15
15
|
};
|
16
16
|
};
|
17
17
|
export declare const getGQLResolverFunctions: <T extends Record<string, any>, CTX extends ServiceClient<CTX, keyof CTX, T>, SRV = any, R = ResolverFn<any, any, ServiceClient<CTX, keyof CTX, T>, any>, B extends keyof T = any, NS extends keyof CTX = any>(service: ServiceDescriptorProto, key: NS, serviceKey: B, grpcClientConfig: GrpcClientConfig) => { [key in keyof SRV]: R; };
|
18
|
-
export declare const registerResolverFunction: <T extends Record<string, any>, CTX extends ServiceClient<CTX, keyof CTX, T>>(namespace: string, name: string, func: ResolverFn<any, any, ServiceClient<CTX, keyof CTX, T>, any>, mutation?: boolean, subspace?: string | undefined) => void;
|
18
|
+
export declare const registerResolverFunction: <T extends Record<string, any>, CTX extends ServiceClient<CTX, keyof CTX, T>>(namespace: string, name: string, func: ResolverFn<any, any, ServiceClient<CTX, keyof CTX, T>, any>, mutation?: boolean, subspace?: string | undefined, service?: ServiceDescriptorProto | undefined) => void;
|
19
19
|
export declare const generateResolver: (...namespaces: string[]) => any;
|
20
20
|
export declare const registerResolverSchema: (namespace: string, name: string, schema: Thunk<GraphQLFieldConfig<any, any>>, mutation?: boolean, subspace?: string | undefined) => void;
|
21
21
|
export declare const generateSchema: (setup: {
|
@@ -10,6 +10,7 @@ const stream = require("stream");
|
|
10
10
|
const _ = require("lodash");
|
11
11
|
const typeCache = new Map();
|
12
12
|
const Mutate = ['Create', 'Update', 'Upsert'];
|
13
|
+
const inputMethodType = new Map();
|
13
14
|
const getGQLSchema = (method) => {
|
14
15
|
const fields = {
|
15
16
|
// operationStatus: {
|
@@ -109,9 +110,8 @@ const getGQLResolverFunctions = (service, key, serviceKey, grpcClientConfig) =>
|
|
109
110
|
}
|
110
111
|
const defaults = typing.processor.fromPartial({});
|
111
112
|
let subjectField = null;
|
112
|
-
|
113
|
-
|
114
|
-
for (let field of inputTyping.meta.field) {
|
113
|
+
if (typing) {
|
114
|
+
for (let field of typing.meta.field) {
|
115
115
|
if (field.typeName === types_1.authSubjectType) {
|
116
116
|
subjectField = field.name;
|
117
117
|
break;
|
@@ -124,11 +124,13 @@ const getGQLResolverFunctions = (service, key, serviceKey, grpcClientConfig) =>
|
|
124
124
|
const service = client[serviceKey];
|
125
125
|
try {
|
126
126
|
const converted = await exports.recursiveUploadToBuffer(args.input, typing.input);
|
127
|
-
|
127
|
+
let req = {
|
128
128
|
// Fill defaults
|
129
129
|
...defaults,
|
130
130
|
...converted
|
131
131
|
};
|
132
|
+
// convert enum strings to integers
|
133
|
+
req = utils_1.convertEnumToInt(typing, req);
|
132
134
|
if (subjectField !== null) {
|
133
135
|
req.subject = registry_1.getTyping(types_1.authSubjectType).processor.fromPartial({});
|
134
136
|
const authToken = context.request.req.headers['authorization'];
|
@@ -142,17 +144,21 @@ const getGQLResolverFunctions = (service, key, serviceKey, grpcClientConfig) =>
|
|
142
144
|
let operationStatus = { code: 0, message: '' };
|
143
145
|
let aggregatedResponse = await new Promise((resolve, reject) => {
|
144
146
|
let response = {};
|
147
|
+
let combinedChunks = {};
|
145
148
|
result.on('data', (chunk) => {
|
146
149
|
const chunkObj = _.cloneDeep(chunk);
|
147
|
-
if (!
|
148
|
-
|
150
|
+
if (!combinedChunks) {
|
151
|
+
combinedChunks = chunk;
|
149
152
|
}
|
150
153
|
else {
|
151
|
-
Object.assign(
|
154
|
+
Object.assign(combinedChunks, chunk);
|
152
155
|
}
|
153
156
|
const existingBufferFields = _.intersection(Object.keys(chunk), bufferFields);
|
154
157
|
for (let bufferField of existingBufferFields) {
|
155
158
|
if (chunkObj[bufferField] && chunkObj[bufferField].value) {
|
159
|
+
if (!response[bufferField]) {
|
160
|
+
response[bufferField] = { value: [] };
|
161
|
+
}
|
156
162
|
if (response[bufferField] && response[bufferField].value && !_.isArray(response[bufferField].value)) {
|
157
163
|
response[bufferField].value = [];
|
158
164
|
}
|
@@ -178,7 +184,12 @@ const getGQLResolverFunctions = (service, key, serviceKey, grpcClientConfig) =>
|
|
178
184
|
operationStatus.code = 200;
|
179
185
|
operationStatus.message = 'success';
|
180
186
|
}
|
181
|
-
|
187
|
+
if (!_.isEmpty(response)) {
|
188
|
+
resolve(response);
|
189
|
+
}
|
190
|
+
else if (!_.isEmpty(combinedChunks)) {
|
191
|
+
resolve(combinedChunks);
|
192
|
+
}
|
182
193
|
});
|
183
194
|
});
|
184
195
|
return { details: aggregatedResponse, operationStatus };
|
@@ -242,6 +253,12 @@ const MutateResolver = async (req, ctx, schema) => {
|
|
242
253
|
else if (mode === 'UPSERT') {
|
243
254
|
method = 'Upsert';
|
244
255
|
}
|
256
|
+
const inputMethodTypeKey = module_name.toLowerCase() + '.' + key.toLowerCase() + '.' + method.toLowerCase();
|
257
|
+
const nsType = inputMethodType.get(inputMethodTypeKey);
|
258
|
+
if (nsType) {
|
259
|
+
const inputTyping = registry_1.getTyping(nsType);
|
260
|
+
utils_1.convertEnumToInt(inputTyping, input);
|
261
|
+
}
|
245
262
|
// check service object contains requested mode's method def
|
246
263
|
if (!service[method]) {
|
247
264
|
throw new Error(`Method ${method} not defined on ${module_name}`);
|
@@ -352,7 +369,7 @@ const MutateResolver = async (req, ctx, schema) => {
|
|
352
369
|
};
|
353
370
|
}
|
354
371
|
};
|
355
|
-
const registerResolverFunction = (namespace, name, func, mutation = false, subspace = undefined) => {
|
372
|
+
const registerResolverFunction = (namespace, name, func, mutation = false, subspace = undefined, service) => {
|
356
373
|
if (!namespaceResolverRegistry.has(namespace)) {
|
357
374
|
namespaceResolverRegistry.set(namespace, new Map());
|
358
375
|
}
|
@@ -374,6 +391,13 @@ const registerResolverFunction = (namespace, name, func, mutation = false, subsp
|
|
374
391
|
throw new Error(`Namespace "${namespace}" already contains a function: ${name} (mutation: ${mutation})`);
|
375
392
|
}
|
376
393
|
}
|
394
|
+
if (service) {
|
395
|
+
const key = (namespace === null || namespace === void 0 ? void 0 : namespace.toLocaleLowerCase()) + '.' + (subspace === null || subspace === void 0 ? void 0 : subspace.toLocaleLowerCase()) + '.' + (name === null || name === void 0 ? void 0 : name.toLocaleLowerCase());
|
396
|
+
const value = service.method.find((m) => m.name === name);
|
397
|
+
if (key && (value === null || value === void 0 ? void 0 : value.inputType)) {
|
398
|
+
inputMethodType.set(key, value.inputType);
|
399
|
+
}
|
400
|
+
}
|
377
401
|
// custom mutation resolver for create, update and upsert - Mutate
|
378
402
|
if (Mutate.indexOf(name) > -1) {
|
379
403
|
name = 'Mutate';
|
@@ -590,7 +614,7 @@ const getAndGenerateResolvers = (service, namespace, cfg, queryList, subspace =
|
|
590
614
|
const { mutations, queries } = exports.getWhitelistBlacklistConfig(service, queryList, cfg);
|
591
615
|
const func = exports.getGQLResolverFunctions(service, namespace, serviceKey || subspace || namespace, cfg.client);
|
592
616
|
Object.keys(func).forEach(k => {
|
593
|
-
exports.registerResolverFunction(namespace, k, func[k], !queries.has(k) && mutations.has(k), subspace);
|
617
|
+
exports.registerResolverFunction(namespace, k, func[k], !queries.has(k) && mutations.has(k), subspace, service);
|
594
618
|
});
|
595
619
|
return exports.generateResolver(namespace);
|
596
620
|
};
|
@@ -617,7 +641,9 @@ const generateSubServiceResolvers = (subServices, config, namespace) => {
|
|
617
641
|
const { mutations, queries } = exports.getWhitelistBlacklistConfig(sub.service, sub.queries, config);
|
618
642
|
const func = exports.getGQLResolverFunctions(sub.service, namespace, sub.name || namespace, config.client);
|
619
643
|
Object.keys(func).forEach(k => {
|
620
|
-
|
644
|
+
const regNamespace = config.root ? sub.name : namespace;
|
645
|
+
const regSubspace = config.root ? undefined : sub.name;
|
646
|
+
exports.registerResolverFunction(regNamespace, k, func[k], !queries.has(k) && mutations.has(k), regSubspace, sub.service);
|
621
647
|
});
|
622
648
|
});
|
623
649
|
if (config.root) {
|
@@ -8,8 +8,13 @@ export interface TypingData {
|
|
8
8
|
meta: DescriptorProto | EnumDescriptorProto;
|
9
9
|
processor?: any;
|
10
10
|
}
|
11
|
+
export declare const registeredTypings: Map<string, TypingData>;
|
12
|
+
export declare const scalarTypes: string[];
|
11
13
|
export declare const clearRegistry: () => void;
|
12
14
|
export declare const registerPackagesRecursive: (...protoMetadata: ProtoMetadata[]) => void;
|
15
|
+
export declare const getRegisteredEnumTypings: () => string[];
|
16
|
+
export declare const getNameSpaceTypeName: (typeName: string) => string | undefined;
|
17
|
+
export declare const recursiveEnumCheck: (typeName: string, enumMap: Map<string, string>, prevFieldName: string, traversedFields: string[]) => Map<string, string>;
|
13
18
|
export declare const registerTyping: (protoPackage: string, message: DescriptorProto, methodDef: MethodDescriptorProto[], opts?: Omit<Readonly<GraphQLObjectTypeConfig<any, any>>, "fields"> | undefined, inputOpts?: Omit<Readonly<GraphQLInputObjectTypeConfig>, "fields"> | undefined) => void;
|
14
19
|
export declare const registerEnumTyping: <T = {
|
15
20
|
[key: string]: any;
|
@@ -1,13 +1,17 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getTyping = exports.registerEnumTyping = exports.registerTyping = exports.registerPackagesRecursive = exports.clearRegistry = void 0;
|
3
|
+
exports.getTyping = exports.registerEnumTyping = exports.registerTyping = exports.recursiveEnumCheck = exports.getNameSpaceTypeName = exports.getRegisteredEnumTypings = exports.registerPackagesRecursive = exports.clearRegistry = exports.scalarTypes = exports.registeredTypings = void 0;
|
4
4
|
const graphql_1 = require("graphql");
|
5
5
|
const definition_1 = require("graphql/type/definition");
|
6
6
|
const graphql_upload_1 = require("graphql-upload");
|
7
7
|
const utils_1 = require("./utils");
|
8
8
|
const types_1 = require("./types");
|
9
9
|
const descriptor_1 = require("ts-proto-descriptors/google/protobuf/descriptor");
|
10
|
-
const
|
10
|
+
const _ = require("lodash");
|
11
|
+
exports.registeredTypings = new Map();
|
12
|
+
exports.scalarTypes = ['Boolean', 'Int', 'Float', 'String', 'ID', 'Upload'];
|
13
|
+
const typeNameAndNameSpaceMapping = new Map();
|
14
|
+
const registeredEnumTypes = [];
|
11
15
|
const MapScalar = new definition_1.GraphQLScalarType({
|
12
16
|
name: 'MapScalar',
|
13
17
|
});
|
@@ -22,7 +26,7 @@ const TodoScalar = new definition_1.GraphQLScalarType({
|
|
22
26
|
}
|
23
27
|
});
|
24
28
|
const clearRegistry = () => {
|
25
|
-
registeredTypings.clear();
|
29
|
+
exports.registeredTypings.clear();
|
26
30
|
};
|
27
31
|
exports.clearRegistry = clearRegistry;
|
28
32
|
const registerPackagesRecursive = (...protoMetadata) => {
|
@@ -34,11 +38,70 @@ const registerPackagesRecursive = (...protoMetadata) => {
|
|
34
38
|
exports.registerEnumTyping(meta.fileDescriptor.package, m);
|
35
39
|
});
|
36
40
|
Object.keys(meta.references).forEach(key => {
|
37
|
-
registeredTypings.get(key).processor = meta.references[key];
|
41
|
+
exports.registeredTypings.get(key).processor = meta.references[key];
|
38
42
|
});
|
39
43
|
});
|
40
44
|
};
|
41
45
|
exports.registerPackagesRecursive = registerPackagesRecursive;
|
46
|
+
const getRegisteredEnumTypings = () => {
|
47
|
+
return registeredEnumTypes;
|
48
|
+
};
|
49
|
+
exports.getRegisteredEnumTypings = getRegisteredEnumTypings;
|
50
|
+
const getNameSpaceTypeName = (typeName) => {
|
51
|
+
return typeNameAndNameSpaceMapping.get(typeName);
|
52
|
+
};
|
53
|
+
exports.getNameSpaceTypeName = getNameSpaceTypeName;
|
54
|
+
// Iterate through the object and collect list of all enum types with their keys / paths
|
55
|
+
const recursiveEnumCheck = (typeName, enumMap, prevFieldName, traversedFields) => {
|
56
|
+
if (exports.scalarTypes.indexOf(typeName) <= -1) {
|
57
|
+
if (typeName && typeName.startsWith('[') && typeName.endsWith('!]')) {
|
58
|
+
typeName = typeName.substring(1, typeName.length - 2);
|
59
|
+
}
|
60
|
+
const objectNameSpace = exports.getNameSpaceTypeName(typeName);
|
61
|
+
if (objectNameSpace) {
|
62
|
+
const objectType = exports.getTyping(objectNameSpace);
|
63
|
+
if ((objectType === null || objectType === void 0 ? void 0 : objectType.input) && (registeredEnumTypes.indexOf(objectType.input.toString()) > -1)) {
|
64
|
+
enumMap.set(objectType === null || objectType === void 0 ? void 0 : objectType.input.toString(), prevFieldName);
|
65
|
+
prevFieldName = '';
|
66
|
+
}
|
67
|
+
else if (objectType === null || objectType === void 0 ? void 0 : objectType.input) {
|
68
|
+
// get nested fields from this object and check recursively
|
69
|
+
const gqlFields = objectType.input.getFields();
|
70
|
+
if (gqlFields) {
|
71
|
+
const fieldNames = Object.keys(gqlFields);
|
72
|
+
for (let fieldName of fieldNames) {
|
73
|
+
let fieldType = gqlFields[fieldName].type.toString();
|
74
|
+
// if fieldType is not basic type, get the object and make recursive check till no more objects are found
|
75
|
+
let skipLoop = false;
|
76
|
+
if (exports.scalarTypes.indexOf(fieldType) <= -1) {
|
77
|
+
// check if fieldName already exists in the enumMap (to avoid circular reference for infinite loop)
|
78
|
+
for (let [key, val] of enumMap) {
|
79
|
+
const valueArray = val.split('.');
|
80
|
+
// if fieldName already exists in enumMap, this field is a circular field ref
|
81
|
+
// ignore it as its already traversed and enums are kept track of
|
82
|
+
if (valueArray.indexOf(fieldName) > -1) {
|
83
|
+
skipLoop = true;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
if (skipLoop) {
|
87
|
+
continue;
|
88
|
+
}
|
89
|
+
if (!prevFieldName || _.isEmpty(prevFieldName)) {
|
90
|
+
prevFieldName = fieldName;
|
91
|
+
}
|
92
|
+
if (prevFieldName && prevFieldName != fieldName) {
|
93
|
+
fieldName = prevFieldName + '.' + fieldName;
|
94
|
+
}
|
95
|
+
exports.recursiveEnumCheck(fieldType, enumMap, fieldName, traversedFields);
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
return enumMap;
|
103
|
+
};
|
104
|
+
exports.recursiveEnumCheck = recursiveEnumCheck;
|
42
105
|
const registerMessageTypesRecursive = (packageName, methodDef, ...types) => {
|
43
106
|
types.forEach(m => {
|
44
107
|
exports.registerTyping(packageName, m, methodDef);
|
@@ -78,7 +141,7 @@ const registerTyping = (protoPackage, message, methodDef, opts, inputOpts) => {
|
|
78
141
|
}
|
79
142
|
}
|
80
143
|
}
|
81
|
-
if (registeredTypings.has(type)) {
|
144
|
+
if (exports.registeredTypings.has(type)) {
|
82
145
|
// TODO Log debug "Typings for object are already registered"
|
83
146
|
return;
|
84
147
|
}
|
@@ -125,7 +188,8 @@ const registerTyping = (protoPackage, message, methodDef, opts, inputOpts) => {
|
|
125
188
|
...(inputOpts || { name: inputName }),
|
126
189
|
fields: inputFields,
|
127
190
|
});
|
128
|
-
|
191
|
+
typeNameAndNameSpaceMapping.set(resultInputObj.name, type);
|
192
|
+
exports.registeredTypings.set(type, {
|
129
193
|
output: resultObj,
|
130
194
|
input: resultInputObj,
|
131
195
|
meta: message
|
@@ -135,7 +199,7 @@ exports.registerTyping = registerTyping;
|
|
135
199
|
const registerEnumTyping = (protoPackage, message, opts) => {
|
136
200
|
var _a;
|
137
201
|
const type = (protoPackage.startsWith('.') ? '' : '.') + protoPackage + '.' + message.name;
|
138
|
-
if (registeredTypings.has(type)) {
|
202
|
+
if (exports.registeredTypings.has(type)) {
|
139
203
|
// TODO Log debug "Typings for enum are already registered"
|
140
204
|
return;
|
141
205
|
}
|
@@ -150,7 +214,9 @@ const registerEnumTyping = (protoPackage, message, opts) => {
|
|
150
214
|
...(opts || { name }),
|
151
215
|
values
|
152
216
|
});
|
153
|
-
|
217
|
+
registeredEnumTypes.push(name);
|
218
|
+
typeNameAndNameSpaceMapping.set(name, type);
|
219
|
+
exports.registeredTypings.set(type, {
|
154
220
|
output: result,
|
155
221
|
input: result,
|
156
222
|
meta: message
|
@@ -158,7 +224,7 @@ const registerEnumTyping = (protoPackage, message, opts) => {
|
|
158
224
|
};
|
159
225
|
exports.registerEnumTyping = registerEnumTyping;
|
160
226
|
const getTyping = (type) => {
|
161
|
-
return registeredTypings.get(type);
|
227
|
+
return exports.registeredTypings.get(type);
|
162
228
|
};
|
163
229
|
exports.getTyping = getTyping;
|
164
230
|
const resolveMeta = (key, field, rootObjType, objName, input) => {
|
@@ -173,17 +239,17 @@ const resolveMeta = (key, field, rootObjType, objName, input) => {
|
|
173
239
|
case descriptor_1.FieldDescriptorProto_Type.TYPE_ENUM:
|
174
240
|
case descriptor_1.FieldDescriptorProto_Type.TYPE_MESSAGE:
|
175
241
|
const objType = field.typeName;
|
176
|
-
if (!registeredTypings.has(objType)) {
|
242
|
+
if (!exports.registeredTypings.has(objType)) {
|
177
243
|
throw new Error("Typing '" + objType + "' not registered for key '" + key + "' in object: " + objName);
|
178
244
|
}
|
179
245
|
if (!input) {
|
180
|
-
result = registeredTypings.get(objType).output;
|
246
|
+
result = exports.registeredTypings.get(objType).output;
|
181
247
|
break;
|
182
248
|
}
|
183
249
|
if (objType === types_1.authSubjectType) {
|
184
250
|
return null;
|
185
251
|
}
|
186
|
-
result = registeredTypings.get(objType).input;
|
252
|
+
result = exports.registeredTypings.get(objType).input;
|
187
253
|
break;
|
188
254
|
case descriptor_1.FieldDescriptorProto_Type.TYPE_BYTES:
|
189
255
|
if (input) {
|
@@ -1,4 +1,25 @@
|
|
1
|
+
import { TypingData } from './registry';
|
1
2
|
export declare const capitalizeProtoName: (name: string) => string;
|
2
3
|
export declare const convertyCamelToSnakeCase: (entity: string) => string;
|
3
4
|
export declare const getKeys: (obj: any) => string[];
|
4
5
|
export declare const decodeBufferFields: (items: any, bufferFields: string[]) => any;
|
6
|
+
interface EnumMetaData {
|
7
|
+
name: string;
|
8
|
+
number: number;
|
9
|
+
options?: any;
|
10
|
+
}
|
11
|
+
/**
|
12
|
+
* recursively find the path and updates the object with given value, this function
|
13
|
+
* also takes care to handle if there is an array at any position in the path
|
14
|
+
* @param path path in dot notation
|
15
|
+
* @param val value to be updated in Object
|
16
|
+
* @param obj Object
|
17
|
+
*/
|
18
|
+
export declare const updateJSON: (path: string, val: EnumMetaData[], obj: any) => void;
|
19
|
+
/**
|
20
|
+
* converts enum string values to integers reading from the inputTyping
|
21
|
+
* @param TypingData input typing
|
22
|
+
* @param req request object from which the enum strings to be replaced
|
23
|
+
*/
|
24
|
+
export declare const convertEnumToInt: (inputTyping: TypingData, req: any) => any;
|
25
|
+
export {};
|
package/dist/gql/protos/utils.js
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.decodeBufferFields = exports.getKeys = exports.convertyCamelToSnakeCase = exports.capitalizeProtoName = void 0;
|
3
|
+
exports.convertEnumToInt = exports.updateJSON = exports.decodeBufferFields = exports.getKeys = exports.convertyCamelToSnakeCase = exports.capitalizeProtoName = void 0;
|
4
4
|
const _ = require("lodash");
|
5
|
+
const registry_1 = require("./registry");
|
5
6
|
const capitalizeProtoName = (name) => {
|
6
7
|
return name.replace(/(?:\.|^|_)(\w)/g, v => v.toUpperCase()).replace(/[._]/g, '');
|
7
8
|
};
|
@@ -48,3 +49,89 @@ const decodeBufferFields = (items, bufferFields) => {
|
|
48
49
|
}
|
49
50
|
};
|
50
51
|
exports.decodeBufferFields = decodeBufferFields;
|
52
|
+
/**
|
53
|
+
* recursively find the path and updates the object with given value, this function
|
54
|
+
* also takes care to handle if there is an array at any position in the path
|
55
|
+
* @param path path in dot notation
|
56
|
+
* @param val value to be updated in Object
|
57
|
+
* @param obj Object
|
58
|
+
*/
|
59
|
+
const updateJSON = (path, val, obj) => {
|
60
|
+
let fields = path.split('.');
|
61
|
+
let result = obj;
|
62
|
+
let j = 0;
|
63
|
+
for (let i = 0, n = fields.length; i < n && result !== undefined; i++) {
|
64
|
+
let field = fields[i];
|
65
|
+
if (i === n - 1) {
|
66
|
+
// reset value finally after iterating to the position (only if value already exists)
|
67
|
+
if (result[field]) {
|
68
|
+
const foundElement = val.find((e) => e.name === result[field]);
|
69
|
+
result[field] = foundElement === null || foundElement === void 0 ? void 0 : foundElement.number;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
else {
|
73
|
+
if (_.isArray(result[field])) {
|
74
|
+
// till i < n concat new fields
|
75
|
+
let newField = '';
|
76
|
+
for (let k = i + 1; k < n; k++) {
|
77
|
+
if (newField && !_.isEmpty(newField)) {
|
78
|
+
newField = newField + '.' + fields[k];
|
79
|
+
}
|
80
|
+
else {
|
81
|
+
newField = fields[k];
|
82
|
+
}
|
83
|
+
}
|
84
|
+
for (; j < result[field].length; j++) {
|
85
|
+
// recurisve call to update each element if its an array
|
86
|
+
exports.updateJSON(newField, val, result[field][j]);
|
87
|
+
}
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
// update object till final path is reached
|
91
|
+
result = result[field];
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
};
|
96
|
+
exports.updateJSON = updateJSON;
|
97
|
+
/**
|
98
|
+
* converts enum string values to integers reading from the inputTyping
|
99
|
+
* @param TypingData input typing
|
100
|
+
* @param req request object from which the enum strings to be replaced
|
101
|
+
*/
|
102
|
+
const convertEnumToInt = (inputTyping, req) => {
|
103
|
+
let enumMap = new Map();
|
104
|
+
// enumMap populated with key as enum name space type and value as the path (to replace from request object)
|
105
|
+
if (inputTyping) {
|
106
|
+
const gqlInputObject = inputTyping.input;
|
107
|
+
const gqlFields = gqlInputObject.getFields();
|
108
|
+
if (gqlFields) {
|
109
|
+
const fieldNames = Object.keys(gqlFields);
|
110
|
+
for (let fieldName of fieldNames) {
|
111
|
+
// gql fieldName from input is of format [IIoRestorecommerceResourcebaseSort!]
|
112
|
+
// below check is to remove `[` and `!]`
|
113
|
+
let fieldType = gqlFields[fieldName].type.toString();
|
114
|
+
if (fieldType.startsWith('[') && fieldType.endsWith('!]')) {
|
115
|
+
fieldType = fieldType.substring(1, fieldType.length - 2);
|
116
|
+
}
|
117
|
+
// if fieldType is not basic type, then check if its fieldType belongs to Enum
|
118
|
+
// if not get the object and make recursive check till no more objects are found
|
119
|
+
if (registry_1.scalarTypes.indexOf(fieldType) <= -1) {
|
120
|
+
enumMap = registry_1.recursiveEnumCheck(fieldType, enumMap, fieldName, []);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
}
|
124
|
+
}
|
125
|
+
for (let [key, val] of enumMap) {
|
126
|
+
const enumNameSpace = registry_1.getNameSpaceTypeName(key);
|
127
|
+
if (enumNameSpace && typeof enumNameSpace === 'string') {
|
128
|
+
const enumTyping = registry_1.getTyping(enumNameSpace);
|
129
|
+
const enumIntMapping = (enumTyping === null || enumTyping === void 0 ? void 0 : enumTyping.meta).value;
|
130
|
+
if (enumIntMapping && _.isArray(enumIntMapping) && enumIntMapping.length > 0) {
|
131
|
+
exports.updateJSON(val, enumIntMapping, req);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
}
|
135
|
+
return req;
|
136
|
+
};
|
137
|
+
exports.convertEnumToInt = convertEnumToInt;
|
@@ -55,7 +55,7 @@ export declare type ProtoIoRestorecommerceAccessControlResponse = {
|
|
55
55
|
export declare type IoRestorecommerceAccessControlResponse = {
|
56
56
|
__typename?: 'IoRestorecommerceAccessControlResponse';
|
57
57
|
decision?: Maybe<IoRestorecommerceAccessControlResponseDecision>;
|
58
|
-
obligation?: Maybe<
|
58
|
+
obligation?: Maybe<Array<IoRestorecommerceAttributeAttribute>>;
|
59
59
|
evaluationCacheable?: Maybe<Scalars['Boolean']>;
|
60
60
|
operationStatus?: Maybe<IoRestorecommerceStatusOperationStatus>;
|
61
61
|
};
|
@@ -65,6 +65,12 @@ export declare enum IoRestorecommerceAccessControlResponseDecision {
|
|
65
65
|
NotApplicable = 2,
|
66
66
|
Indeterminate = 3
|
67
67
|
}
|
68
|
+
export declare type IoRestorecommerceAttributeAttribute = {
|
69
|
+
__typename?: 'IoRestorecommerceAttributeAttribute';
|
70
|
+
id?: Maybe<Scalars['String']>;
|
71
|
+
value?: Maybe<Scalars['String']>;
|
72
|
+
attribute?: Maybe<Array<IoRestorecommerceAttributeAttribute>>;
|
73
|
+
};
|
68
74
|
export declare type IoRestorecommerceStatusOperationStatus = {
|
69
75
|
__typename?: 'IoRestorecommerceStatusOperationStatus';
|
70
76
|
code?: Maybe<Scalars['Int']>;
|
@@ -100,6 +106,7 @@ export declare type ProtoIoRestorecommerceAccessControlReverseQuery = {
|
|
100
106
|
export declare type IoRestorecommerceAccessControlReverseQuery = {
|
101
107
|
__typename?: 'IoRestorecommerceAccessControlReverseQuery';
|
102
108
|
policySets?: Maybe<Array<IoRestorecommercePolicySetPolicySetRq>>;
|
109
|
+
obligation?: Maybe<Array<IoRestorecommerceAttributeAttribute>>;
|
103
110
|
operationStatus?: Maybe<IoRestorecommerceStatusOperationStatus>;
|
104
111
|
};
|
105
112
|
export declare type IoRestorecommercePolicySetPolicySetRq = {
|
@@ -116,12 +123,6 @@ export declare type IoRestorecommerceRuleTarget = {
|
|
116
123
|
resources?: Maybe<Array<IoRestorecommerceAttributeAttribute>>;
|
117
124
|
action?: Maybe<Array<IoRestorecommerceAttributeAttribute>>;
|
118
125
|
};
|
119
|
-
export declare type IoRestorecommerceAttributeAttribute = {
|
120
|
-
__typename?: 'IoRestorecommerceAttributeAttribute';
|
121
|
-
id?: Maybe<Scalars['String']>;
|
122
|
-
value?: Maybe<Scalars['String']>;
|
123
|
-
attribute?: Maybe<Array<IoRestorecommerceAttributeAttribute>>;
|
124
|
-
};
|
125
126
|
export declare type IoRestorecommercePolicyPolicyRq = {
|
126
127
|
__typename?: 'IoRestorecommercePolicyPolicyRQ';
|
127
128
|
id?: Maybe<Scalars['String']>;
|
@@ -525,6 +526,7 @@ export declare type ResolversTypes = ResolversObject<{
|
|
525
526
|
ProtoIoRestorecommerceAccessControlResponse: ResolverTypeWrapper<ProtoIoRestorecommerceAccessControlResponse>;
|
526
527
|
IoRestorecommerceAccessControlResponse: ResolverTypeWrapper<IoRestorecommerceAccessControlResponse>;
|
527
528
|
IoRestorecommerceAccessControlResponseDecision: IoRestorecommerceAccessControlResponseDecision;
|
529
|
+
IoRestorecommerceAttributeAttribute: ResolverTypeWrapper<IoRestorecommerceAttributeAttribute>;
|
528
530
|
String: ResolverTypeWrapper<Scalars['String']>;
|
529
531
|
Boolean: ResolverTypeWrapper<Scalars['Boolean']>;
|
530
532
|
IoRestorecommerceStatusOperationStatus: ResolverTypeWrapper<IoRestorecommerceStatusOperationStatus>;
|
@@ -539,7 +541,6 @@ export declare type ResolversTypes = ResolversObject<{
|
|
539
541
|
IoRestorecommerceAccessControlReverseQuery: ResolverTypeWrapper<IoRestorecommerceAccessControlReverseQuery>;
|
540
542
|
IoRestorecommercePolicySetPolicySetRQ: ResolverTypeWrapper<IoRestorecommercePolicySetPolicySetRq>;
|
541
543
|
IoRestorecommerceRuleTarget: ResolverTypeWrapper<IoRestorecommerceRuleTarget>;
|
542
|
-
IoRestorecommerceAttributeAttribute: ResolverTypeWrapper<IoRestorecommerceAttributeAttribute>;
|
543
544
|
IoRestorecommercePolicyPolicyRQ: ResolverTypeWrapper<IoRestorecommercePolicyPolicyRq>;
|
544
545
|
IoRestorecommerceRuleRuleRQ: ResolverTypeWrapper<IoRestorecommerceRuleRuleRq>;
|
545
546
|
IoRestorecommerceRuleEffect: IoRestorecommerceRuleEffect;
|
@@ -605,6 +606,7 @@ export declare type ResolversParentTypes = ResolversObject<{
|
|
605
606
|
AccessControlAccessControlQuery: AccessControlAccessControlQuery;
|
606
607
|
ProtoIoRestorecommerceAccessControlResponse: ProtoIoRestorecommerceAccessControlResponse;
|
607
608
|
IoRestorecommerceAccessControlResponse: IoRestorecommerceAccessControlResponse;
|
609
|
+
IoRestorecommerceAttributeAttribute: IoRestorecommerceAttributeAttribute;
|
608
610
|
String: Scalars['String'];
|
609
611
|
Boolean: Scalars['Boolean'];
|
610
612
|
IoRestorecommerceStatusOperationStatus: IoRestorecommerceStatusOperationStatus;
|
@@ -619,7 +621,6 @@ export declare type ResolversParentTypes = ResolversObject<{
|
|
619
621
|
IoRestorecommerceAccessControlReverseQuery: IoRestorecommerceAccessControlReverseQuery;
|
620
622
|
IoRestorecommercePolicySetPolicySetRQ: IoRestorecommercePolicySetPolicySetRq;
|
621
623
|
IoRestorecommerceRuleTarget: IoRestorecommerceRuleTarget;
|
622
|
-
IoRestorecommerceAttributeAttribute: IoRestorecommerceAttributeAttribute;
|
623
624
|
IoRestorecommercePolicyPolicyRQ: IoRestorecommercePolicyPolicyRq;
|
624
625
|
IoRestorecommerceRuleRuleRQ: IoRestorecommerceRuleRuleRq;
|
625
626
|
IoRestorecommerceRuleContextQuery: IoRestorecommerceRuleContextQuery;
|
@@ -690,7 +691,7 @@ export declare type ProtoIoRestorecommerceAccessControlResponseResolvers<Context
|
|
690
691
|
}>;
|
691
692
|
export declare type IoRestorecommerceAccessControlResponseResolvers<ContextType = AccessControlContext, ParentType extends ResolversParentTypes['IoRestorecommerceAccessControlResponse'] = ResolversParentTypes['IoRestorecommerceAccessControlResponse']> = ResolversObject<{
|
692
693
|
decision?: Resolver<Maybe<ResolversTypes['IoRestorecommerceAccessControlResponseDecision']>, ParentType, ContextType>;
|
693
|
-
obligation?: Resolver<Maybe<ResolversTypes['
|
694
|
+
obligation?: Resolver<Maybe<Array<ResolversTypes['IoRestorecommerceAttributeAttribute']>>, ParentType, ContextType>;
|
694
695
|
evaluationCacheable?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
695
696
|
operationStatus?: Resolver<Maybe<ResolversTypes['IoRestorecommerceStatusOperationStatus']>, ParentType, ContextType>;
|
696
697
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
@@ -701,6 +702,12 @@ export declare type IoRestorecommerceAccessControlResponseDecisionResolvers = {
|
|
701
702
|
NOT_APPLICABLE: 2;
|
702
703
|
INDETERMINATE: 3;
|
703
704
|
};
|
705
|
+
export declare type IoRestorecommerceAttributeAttributeResolvers<ContextType = AccessControlContext, ParentType extends ResolversParentTypes['IoRestorecommerceAttributeAttribute'] = ResolversParentTypes['IoRestorecommerceAttributeAttribute']> = ResolversObject<{
|
706
|
+
id?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
707
|
+
value?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
708
|
+
attribute?: Resolver<Maybe<Array<ResolversTypes['IoRestorecommerceAttributeAttribute']>>, ParentType, ContextType>;
|
709
|
+
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
710
|
+
}>;
|
704
711
|
export declare type IoRestorecommerceStatusOperationStatusResolvers<ContextType = AccessControlContext, ParentType extends ResolversParentTypes['IoRestorecommerceStatusOperationStatus'] = ResolversParentTypes['IoRestorecommerceStatusOperationStatus']> = ResolversObject<{
|
705
712
|
code?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
|
706
713
|
message?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
@@ -715,6 +722,7 @@ export declare type ProtoIoRestorecommerceAccessControlReverseQueryResolvers<Con
|
|
715
722
|
}>;
|
716
723
|
export declare type IoRestorecommerceAccessControlReverseQueryResolvers<ContextType = AccessControlContext, ParentType extends ResolversParentTypes['IoRestorecommerceAccessControlReverseQuery'] = ResolversParentTypes['IoRestorecommerceAccessControlReverseQuery']> = ResolversObject<{
|
717
724
|
policySets?: Resolver<Maybe<Array<ResolversTypes['IoRestorecommercePolicySetPolicySetRQ']>>, ParentType, ContextType>;
|
725
|
+
obligation?: Resolver<Maybe<Array<ResolversTypes['IoRestorecommerceAttributeAttribute']>>, ParentType, ContextType>;
|
718
726
|
operationStatus?: Resolver<Maybe<ResolversTypes['IoRestorecommerceStatusOperationStatus']>, ParentType, ContextType>;
|
719
727
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
720
728
|
}>;
|
@@ -732,12 +740,6 @@ export declare type IoRestorecommerceRuleTargetResolvers<ContextType = AccessCon
|
|
732
740
|
action?: Resolver<Maybe<Array<ResolversTypes['IoRestorecommerceAttributeAttribute']>>, ParentType, ContextType>;
|
733
741
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
734
742
|
}>;
|
735
|
-
export declare type IoRestorecommerceAttributeAttributeResolvers<ContextType = AccessControlContext, ParentType extends ResolversParentTypes['IoRestorecommerceAttributeAttribute'] = ResolversParentTypes['IoRestorecommerceAttributeAttribute']> = ResolversObject<{
|
736
|
-
id?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
737
|
-
value?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
738
|
-
attribute?: Resolver<Maybe<Array<ResolversTypes['IoRestorecommerceAttributeAttribute']>>, ParentType, ContextType>;
|
739
|
-
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
740
|
-
}>;
|
741
743
|
export declare type IoRestorecommercePolicyPolicyRqResolvers<ContextType = AccessControlContext, ParentType extends ResolversParentTypes['IoRestorecommercePolicyPolicyRQ'] = ResolversParentTypes['IoRestorecommercePolicyPolicyRQ']> = ResolversObject<{
|
742
744
|
id?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
743
745
|
target?: Resolver<Maybe<ResolversTypes['IoRestorecommerceRuleTarget']>, ParentType, ContextType>;
|
@@ -977,13 +979,13 @@ export declare type Resolvers<ContextType = AccessControlContext> = ResolversObj
|
|
977
979
|
ProtoIoRestorecommerceAccessControlResponse?: ProtoIoRestorecommerceAccessControlResponseResolvers<ContextType>;
|
978
980
|
IoRestorecommerceAccessControlResponse?: IoRestorecommerceAccessControlResponseResolvers<ContextType>;
|
979
981
|
IoRestorecommerceAccessControlResponseDecision?: IoRestorecommerceAccessControlResponseDecisionResolvers;
|
982
|
+
IoRestorecommerceAttributeAttribute?: IoRestorecommerceAttributeAttributeResolvers<ContextType>;
|
980
983
|
IoRestorecommerceStatusOperationStatus?: IoRestorecommerceStatusOperationStatusResolvers<ContextType>;
|
981
984
|
Upload?: GraphQLScalarType;
|
982
985
|
ProtoIoRestorecommerceAccessControlReverseQuery?: ProtoIoRestorecommerceAccessControlReverseQueryResolvers<ContextType>;
|
983
986
|
IoRestorecommerceAccessControlReverseQuery?: IoRestorecommerceAccessControlReverseQueryResolvers<ContextType>;
|
984
987
|
IoRestorecommercePolicySetPolicySetRQ?: IoRestorecommercePolicySetPolicySetRqResolvers<ContextType>;
|
985
988
|
IoRestorecommerceRuleTarget?: IoRestorecommerceRuleTargetResolvers<ContextType>;
|
986
|
-
IoRestorecommerceAttributeAttribute?: IoRestorecommerceAttributeAttributeResolvers<ContextType>;
|
987
989
|
IoRestorecommercePolicyPolicyRQ?: IoRestorecommercePolicyPolicyRqResolvers<ContextType>;
|
988
990
|
IoRestorecommerceRuleRuleRQ?: IoRestorecommerceRuleRuleRqResolvers<ContextType>;
|
989
991
|
IoRestorecommerceRuleEffect?: IoRestorecommerceRuleEffectResolvers;
|