@orion-js/graphql 2.2.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/LICENSE +21 -0
- package/lib/buildSchema/getArgs/getField.js +61 -0
- package/lib/buildSchema/getArgs/index.js +34 -0
- package/lib/buildSchema/getMutation.js +30 -0
- package/lib/buildSchema/getQuery.js +30 -0
- package/lib/buildSchema/getResolvers/index.js +65 -0
- package/lib/buildSchema/getSubscription.js +27 -0
- package/lib/buildSchema/getSubscriptions/index.js +42 -0
- package/lib/buildSchema/getType/BigIntScalar.js +53 -0
- package/lib/buildSchema/getType/DateScalar.js +19 -0
- package/lib/buildSchema/getType/JSONScalar.js +58 -0
- package/lib/buildSchema/getType/getScalar.js +45 -0
- package/lib/buildSchema/getType/getTypeAsResolver.js +42 -0
- package/lib/buildSchema/getType/index.js +85 -0
- package/lib/buildSchema/index.js +29 -0
- package/lib/errorHandler.js +31 -0
- package/lib/getApolloOptions/formatError.js +22 -0
- package/lib/getApolloOptions/index.js +27 -0
- package/lib/index.js +70 -0
- package/lib/pubsub.js +19 -0
- package/lib/resolversSchemas/ResolverParams.js +53 -0
- package/lib/resolversSchemas/getBasicResultQuery.js +28 -0
- package/lib/resolversSchemas/getField.js +54 -0
- package/lib/resolversSchemas/getField.test.js +30 -0
- package/lib/resolversSchemas/index.js +15 -0
- package/lib/resolversSchemas/params.js +46 -0
- package/lib/resolversSchemas/serializeSchema.js +23 -0
- package/lib/resolversSchemas/serializeSchema.test.js +30 -0
- package/lib/startGraphQL.js +73 -0
- package/lib/startGraphiQL.js +211 -0
- package/lib/startWebsocket.js +61 -0
- package/lib/subscription/getChannelName.js +21 -0
- package/lib/subscription/index.js +52 -0
- package/package.json +41 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2018 Orionjs Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = getParams;
|
|
9
|
+
|
|
10
|
+
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
|
|
11
|
+
|
|
12
|
+
var _isArray = _interopRequireDefault(require("lodash/isArray"));
|
|
13
|
+
|
|
14
|
+
var _graphql = require("graphql");
|
|
15
|
+
|
|
16
|
+
var _schema = require("@orion-js/schema");
|
|
17
|
+
|
|
18
|
+
var _app = require("@orion-js/app");
|
|
19
|
+
|
|
20
|
+
var _getScalar = _interopRequireDefault(require("../getType/getScalar"));
|
|
21
|
+
|
|
22
|
+
const storedModelInput = {};
|
|
23
|
+
|
|
24
|
+
const getModelInput = function (model, fields) {
|
|
25
|
+
if (storedModelInput[model.name]) {
|
|
26
|
+
return storedModelInput[model.name];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
storedModelInput[model.name] = new _graphql.GraphQLInputObjectType({
|
|
30
|
+
name: model.name + 'Input',
|
|
31
|
+
fields
|
|
32
|
+
});
|
|
33
|
+
return storedModelInput[model.name];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
function getParams(type) {
|
|
37
|
+
if (!type) {
|
|
38
|
+
throw new Error(`No type specified`);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if ((0, _isArray.default)(type)) {
|
|
42
|
+
const graphQLType = getParams(type[0]);
|
|
43
|
+
return new _graphql.GraphQLList(graphQLType);
|
|
44
|
+
} else if (!type._isFieldType && ((0, _isPlainObject.default)(type) || type instanceof _app.Model)) {
|
|
45
|
+
const model = type.__isModel ? type : type.__model;
|
|
46
|
+
if (!model || !model.__isModel) throw new Error('Type if not a Model', type);
|
|
47
|
+
const fields = {};
|
|
48
|
+
|
|
49
|
+
for (const field of model.staticFields) {
|
|
50
|
+
fields[field.key] = {
|
|
51
|
+
type: getParams(field.type)
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return getModelInput(model, fields);
|
|
56
|
+
} else {
|
|
57
|
+
const schemaType = (0, _schema.getFieldType)(type);
|
|
58
|
+
const graphQLType = (0, _getScalar.default)(schemaType);
|
|
59
|
+
return graphQLType;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _getField = _interopRequireDefault(require("./getField"));
|
|
11
|
+
|
|
12
|
+
var _app = require("@orion-js/app");
|
|
13
|
+
|
|
14
|
+
function _default(params) {
|
|
15
|
+
const {
|
|
16
|
+
logger
|
|
17
|
+
} = (0, _app.config)();
|
|
18
|
+
if (!params) return;
|
|
19
|
+
if (Object.keys(params).length === 0) return;
|
|
20
|
+
const fields = {};
|
|
21
|
+
|
|
22
|
+
for (const key of Object.keys(params)) {
|
|
23
|
+
try {
|
|
24
|
+
const type = (0, _getField.default)(params[key].type);
|
|
25
|
+
fields[key] = {
|
|
26
|
+
type
|
|
27
|
+
};
|
|
28
|
+
} catch (error) {
|
|
29
|
+
logger.error(`Error creating GraphQL resolver params argument ${key}`, error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return fields;
|
|
34
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _graphql = require("graphql");
|
|
11
|
+
|
|
12
|
+
var _getResolvers = _interopRequireDefault(require("./getResolvers"));
|
|
13
|
+
|
|
14
|
+
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
15
|
+
|
|
16
|
+
async function _default({
|
|
17
|
+
resolvers,
|
|
18
|
+
...options
|
|
19
|
+
}) {
|
|
20
|
+
const fields = await (0, _getResolvers.default)({
|
|
21
|
+
resolvers,
|
|
22
|
+
mutation: true,
|
|
23
|
+
options
|
|
24
|
+
});
|
|
25
|
+
if ((0, _isEmpty.default)(fields)) return null;
|
|
26
|
+
return new _graphql.GraphQLObjectType({
|
|
27
|
+
name: 'Mutation',
|
|
28
|
+
fields
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _graphql = require("graphql");
|
|
11
|
+
|
|
12
|
+
var _getResolvers = _interopRequireDefault(require("./getResolvers"));
|
|
13
|
+
|
|
14
|
+
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
15
|
+
|
|
16
|
+
async function _default({
|
|
17
|
+
resolvers,
|
|
18
|
+
...options
|
|
19
|
+
}) {
|
|
20
|
+
const fields = await (0, _getResolvers.default)({
|
|
21
|
+
resolvers,
|
|
22
|
+
mutation: false,
|
|
23
|
+
options
|
|
24
|
+
});
|
|
25
|
+
if ((0, _isEmpty.default)(fields)) return null;
|
|
26
|
+
return new _graphql.GraphQLObjectType({
|
|
27
|
+
name: 'Query',
|
|
28
|
+
fields
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _getType = _interopRequireDefault(require("../getType"));
|
|
11
|
+
|
|
12
|
+
var _getArgs = _interopRequireDefault(require("../getArgs"));
|
|
13
|
+
|
|
14
|
+
var _errorHandler = _interopRequireDefault(require("../../errorHandler"));
|
|
15
|
+
|
|
16
|
+
global.graphQLResolvers = {};
|
|
17
|
+
|
|
18
|
+
async function _default({
|
|
19
|
+
resolvers,
|
|
20
|
+
mutation,
|
|
21
|
+
options
|
|
22
|
+
}) {
|
|
23
|
+
const filteredResolvers = Object.keys(resolvers).map(key => {
|
|
24
|
+
return {
|
|
25
|
+
name: key,
|
|
26
|
+
resolver: resolvers[key]
|
|
27
|
+
};
|
|
28
|
+
}).filter(({
|
|
29
|
+
resolver
|
|
30
|
+
}) => !!resolver.mutation === !!mutation).filter(({
|
|
31
|
+
resolver
|
|
32
|
+
}) => !resolver.private);
|
|
33
|
+
const fields = {};
|
|
34
|
+
|
|
35
|
+
for (const {
|
|
36
|
+
resolver,
|
|
37
|
+
name
|
|
38
|
+
} of filteredResolvers) {
|
|
39
|
+
global.graphQLResolvers[name] = resolver;
|
|
40
|
+
const type = await (0, _getType.default)(resolver.returns, options);
|
|
41
|
+
const args = await (0, _getArgs.default)(resolver.params);
|
|
42
|
+
fields[name] = {
|
|
43
|
+
type,
|
|
44
|
+
args,
|
|
45
|
+
|
|
46
|
+
async resolve(root, params, context) {
|
|
47
|
+
try {
|
|
48
|
+
const result = await resolver(params, context);
|
|
49
|
+
return result;
|
|
50
|
+
} catch (error) {
|
|
51
|
+
(0, _errorHandler.default)(error, {
|
|
52
|
+
context,
|
|
53
|
+
resolver,
|
|
54
|
+
options,
|
|
55
|
+
name
|
|
56
|
+
});
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return fields;
|
|
65
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _graphql = require("graphql");
|
|
11
|
+
|
|
12
|
+
var _getSubscriptions = _interopRequireDefault(require("./getSubscriptions"));
|
|
13
|
+
|
|
14
|
+
async function _default({
|
|
15
|
+
subscriptions,
|
|
16
|
+
...options
|
|
17
|
+
}) {
|
|
18
|
+
if (!subscriptions) return null;
|
|
19
|
+
const fields = await (0, _getSubscriptions.default)({
|
|
20
|
+
subscriptions,
|
|
21
|
+
options
|
|
22
|
+
});
|
|
23
|
+
return new _graphql.GraphQLObjectType({
|
|
24
|
+
name: 'Subscription',
|
|
25
|
+
fields
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _getType = _interopRequireDefault(require("../getType"));
|
|
11
|
+
|
|
12
|
+
var _getArgs = _interopRequireDefault(require("../getArgs"));
|
|
13
|
+
|
|
14
|
+
global.graphQLSubscriptions = {};
|
|
15
|
+
|
|
16
|
+
async function _default({
|
|
17
|
+
subscriptions,
|
|
18
|
+
options
|
|
19
|
+
}) {
|
|
20
|
+
const fields = {};
|
|
21
|
+
|
|
22
|
+
for (const key of Object.keys(subscriptions)) {
|
|
23
|
+
const subscription = subscriptions[key];
|
|
24
|
+
global.graphQLSubscriptions[key] = subscription;
|
|
25
|
+
subscription.key = key;
|
|
26
|
+
const name = key;
|
|
27
|
+
global.graphQLSubscriptions[name] = subscription;
|
|
28
|
+
const type = await (0, _getType.default)(subscription.returns, options);
|
|
29
|
+
const args = await (0, _getArgs.default)(subscription.params);
|
|
30
|
+
fields[name] = {
|
|
31
|
+
type,
|
|
32
|
+
args,
|
|
33
|
+
|
|
34
|
+
async subscribe(root, params, viewer) {
|
|
35
|
+
return await subscription.subscribe(params, viewer);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return fields;
|
|
42
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _graphql = require("graphql");
|
|
9
|
+
|
|
10
|
+
const MAX_INT = Number.MAX_SAFE_INTEGER;
|
|
11
|
+
const MIN_INT = Number.MIN_SAFE_INTEGER;
|
|
12
|
+
|
|
13
|
+
const coerceBigInt = function coerceBigInt(value) {
|
|
14
|
+
if (value === '') {
|
|
15
|
+
throw new TypeError('BigInt cannot represent non 53-bit signed integer value: (empty string)');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const num = Number(value);
|
|
19
|
+
|
|
20
|
+
if (num > MAX_INT || num < MIN_INT) {
|
|
21
|
+
throw new TypeError('BigInt cannot represent non 53-bit signed integer value: ' + String(value));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const int = Math.floor(num);
|
|
25
|
+
|
|
26
|
+
if (int !== num) {
|
|
27
|
+
throw new TypeError('BigInt cannot represent non-integer value: ' + String(value));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return int;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var _default = new _graphql.GraphQLScalarType({
|
|
34
|
+
name: 'BigInt',
|
|
35
|
+
description: 'The `BigInt` scalar type represents non-fractional signed whole numeric ' + 'values. BigInt can represent values between -(2^53) + 1 and 2^53 - 1. ',
|
|
36
|
+
serialize: coerceBigInt,
|
|
37
|
+
parseValue: coerceBigInt,
|
|
38
|
+
|
|
39
|
+
parseLiteral(ast) {
|
|
40
|
+
if (ast.kind === 'IntValue') {
|
|
41
|
+
const num = parseInt(ast.value, 10);
|
|
42
|
+
|
|
43
|
+
if (num <= MAX_INT && num >= MIN_INT) {
|
|
44
|
+
return num;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
exports.default = _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _graphql = require("graphql");
|
|
9
|
+
|
|
10
|
+
var _graphqlIsoDate = require("graphql-iso-date");
|
|
11
|
+
|
|
12
|
+
var _default = new _graphql.GraphQLScalarType({
|
|
13
|
+
name: 'Date',
|
|
14
|
+
serialize: _graphqlIsoDate.GraphQLDateTime.serialize,
|
|
15
|
+
parseValue: _graphqlIsoDate.GraphQLDateTime.parseValue,
|
|
16
|
+
parseLiteral: _graphqlIsoDate.GraphQLDateTime.parseLiteral
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
exports.default = _default;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _graphql = require("graphql");
|
|
9
|
+
|
|
10
|
+
function identity(value) {
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function parseLiteral(ast, variables) {
|
|
15
|
+
switch (ast.kind) {
|
|
16
|
+
case _graphql.Kind.STRING:
|
|
17
|
+
case _graphql.Kind.BOOLEAN:
|
|
18
|
+
return ast.value;
|
|
19
|
+
|
|
20
|
+
case _graphql.Kind.INT:
|
|
21
|
+
case _graphql.Kind.FLOAT:
|
|
22
|
+
return parseFloat(ast.value);
|
|
23
|
+
|
|
24
|
+
case _graphql.Kind.OBJECT:
|
|
25
|
+
{
|
|
26
|
+
const value = Object.create(null);
|
|
27
|
+
ast.fields.forEach(field => {
|
|
28
|
+
value[field.name.value] = parseLiteral(field.value, variables);
|
|
29
|
+
});
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
case _graphql.Kind.LIST:
|
|
34
|
+
return ast.values.map(n => parseLiteral(n, variables));
|
|
35
|
+
|
|
36
|
+
case _graphql.Kind.NULL:
|
|
37
|
+
return null;
|
|
38
|
+
|
|
39
|
+
case _graphql.Kind.VARIABLE:
|
|
40
|
+
{
|
|
41
|
+
const name = ast.name.value;
|
|
42
|
+
return variables ? variables[name] : undefined;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
default:
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
var _default = new _graphql.GraphQLScalarType({
|
|
51
|
+
name: 'JSON',
|
|
52
|
+
description: 'The `JSON` scalar type represents JSON values as specified by ' + '[ECMA-404](http://www.ecma-international.org/' + 'publications/files/ECMA-ST/ECMA-404.pdf).',
|
|
53
|
+
serialize: identity,
|
|
54
|
+
parseValue: identity,
|
|
55
|
+
parseLiteral
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
exports.default = _default;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _BigIntScalar = _interopRequireDefault(require("./BigIntScalar"));
|
|
11
|
+
|
|
12
|
+
var _DateScalar = _interopRequireDefault(require("./DateScalar"));
|
|
13
|
+
|
|
14
|
+
var _JSONScalar = _interopRequireDefault(require("./JSONScalar"));
|
|
15
|
+
|
|
16
|
+
var _graphql = require("graphql");
|
|
17
|
+
|
|
18
|
+
const fieldMap = {
|
|
19
|
+
string: _graphql.GraphQLString,
|
|
20
|
+
email: _graphql.GraphQLString,
|
|
21
|
+
date: _DateScalar.default,
|
|
22
|
+
integer: _BigIntScalar.default,
|
|
23
|
+
number: _graphql.GraphQLFloat,
|
|
24
|
+
ID: _graphql.GraphQLID,
|
|
25
|
+
boolean: _graphql.GraphQLBoolean,
|
|
26
|
+
blackbox: _JSONScalar.default
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
function _default(fieldType) {
|
|
30
|
+
if (fieldMap[fieldType.name]) {
|
|
31
|
+
return fieldMap[fieldType.name];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (fieldType.toGraphQLType) {
|
|
35
|
+
const result = fieldType.toGraphQLType();
|
|
36
|
+
|
|
37
|
+
if (result.then) {
|
|
38
|
+
throw new Error('toGraphQLType cant return a promise');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
throw new Error(`Field type "${fieldType.name}" has no convertion to GraphQLType`);
|
|
45
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _getArgs = _interopRequireDefault(require("../getArgs"));
|
|
11
|
+
|
|
12
|
+
var _errorHandler = _interopRequireDefault(require("../../errorHandler"));
|
|
13
|
+
|
|
14
|
+
function _default({
|
|
15
|
+
resolver,
|
|
16
|
+
getGraphQLType,
|
|
17
|
+
options,
|
|
18
|
+
model
|
|
19
|
+
}) {
|
|
20
|
+
const type = getGraphQLType(resolver.returns, options);
|
|
21
|
+
const args = (0, _getArgs.default)(resolver.params);
|
|
22
|
+
return {
|
|
23
|
+
type,
|
|
24
|
+
args,
|
|
25
|
+
|
|
26
|
+
async resolve(item, params, context) {
|
|
27
|
+
try {
|
|
28
|
+
const result = await resolver.resolve(item, params, context);
|
|
29
|
+
return result;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
(0, _errorHandler.default)(error, {
|
|
32
|
+
context,
|
|
33
|
+
resolver,
|
|
34
|
+
options,
|
|
35
|
+
model
|
|
36
|
+
});
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = getGraphQLType;
|
|
9
|
+
|
|
10
|
+
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
|
|
11
|
+
|
|
12
|
+
var _isArray = _interopRequireDefault(require("lodash/isArray"));
|
|
13
|
+
|
|
14
|
+
var _graphql = require("graphql");
|
|
15
|
+
|
|
16
|
+
var _schema = require("@orion-js/schema");
|
|
17
|
+
|
|
18
|
+
var _app = require("@orion-js/app");
|
|
19
|
+
|
|
20
|
+
var _getScalar = _interopRequireDefault(require("./getScalar"));
|
|
21
|
+
|
|
22
|
+
var _getTypeAsResolver = _interopRequireDefault(require("./getTypeAsResolver"));
|
|
23
|
+
|
|
24
|
+
function getGraphQLType(type, options) {
|
|
25
|
+
if (!type) {
|
|
26
|
+
throw new Error('Type is undefined');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if ((0, _isArray.default)(type)) {
|
|
30
|
+
const graphQLType = getGraphQLType(type[0], options);
|
|
31
|
+
return new _graphql.GraphQLList(graphQLType);
|
|
32
|
+
} else if (!type._isFieldType && ((0, _isPlainObject.default)(type) || type instanceof _app.Model)) {
|
|
33
|
+
const model = type.__isModel ? type : type.__model;
|
|
34
|
+
if (!model || !model.__isModel) throw new Error('Type if not a Model', type);
|
|
35
|
+
if (model.graphQLType) return model.graphQLType;
|
|
36
|
+
model.graphQLType = new _graphql.GraphQLObjectType({
|
|
37
|
+
name: model.name,
|
|
38
|
+
fields: () => {
|
|
39
|
+
const fields = {};
|
|
40
|
+
|
|
41
|
+
for (const field of model.staticFields) {
|
|
42
|
+
try {
|
|
43
|
+
/**
|
|
44
|
+
* For fields that have custom "to client" resolvers and serverside are static
|
|
45
|
+
*/
|
|
46
|
+
if (field.graphQLResolver) {
|
|
47
|
+
fields[field.key] = (0, _getTypeAsResolver.default)({
|
|
48
|
+
resolver: field.graphQLResolver,
|
|
49
|
+
getGraphQLType,
|
|
50
|
+
options,
|
|
51
|
+
model
|
|
52
|
+
});
|
|
53
|
+
} else {
|
|
54
|
+
fields[field.key] = {
|
|
55
|
+
type: getGraphQLType(field.type, options)
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
throw new Error(`Error getting type for ${field.key} ${error.message}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
for (const resolver of model.dynamicFields) {
|
|
64
|
+
try {
|
|
65
|
+
fields[resolver.key] = (0, _getTypeAsResolver.default)({
|
|
66
|
+
resolver,
|
|
67
|
+
getGraphQLType,
|
|
68
|
+
options,
|
|
69
|
+
model
|
|
70
|
+
});
|
|
71
|
+
} catch (error) {
|
|
72
|
+
throw new Error(`Error getting resolver type for resolver "${resolver.key}": ${error.message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return fields;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return model.graphQLType;
|
|
80
|
+
} else {
|
|
81
|
+
const schemaType = (0, _schema.getFieldType)(type);
|
|
82
|
+
const graphQLType = (0, _getScalar.default)(schemaType);
|
|
83
|
+
return graphQLType;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = _default;
|
|
9
|
+
|
|
10
|
+
var _graphql = require("graphql");
|
|
11
|
+
|
|
12
|
+
var _getQuery = _interopRequireDefault(require("./getQuery"));
|
|
13
|
+
|
|
14
|
+
var _getMutation = _interopRequireDefault(require("./getMutation"));
|
|
15
|
+
|
|
16
|
+
var _getSubscription = _interopRequireDefault(require("./getSubscription"));
|
|
17
|
+
|
|
18
|
+
async function _default(options) {
|
|
19
|
+
global.resolvers = options.resolvers;
|
|
20
|
+
const query = await (0, _getQuery.default)(options);
|
|
21
|
+
const mutation = await (0, _getMutation.default)(options);
|
|
22
|
+
const subscription = await (0, _getSubscription.default)(options);
|
|
23
|
+
const schema = new _graphql.GraphQLSchema({
|
|
24
|
+
query,
|
|
25
|
+
mutation,
|
|
26
|
+
subscription
|
|
27
|
+
});
|
|
28
|
+
return schema;
|
|
29
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = errorHandler;
|
|
9
|
+
|
|
10
|
+
var _app = require("@orion-js/app");
|
|
11
|
+
|
|
12
|
+
var _crypto = _interopRequireDefault(require("crypto"));
|
|
13
|
+
|
|
14
|
+
function errorHandler(error, data) {
|
|
15
|
+
const {
|
|
16
|
+
logger
|
|
17
|
+
} = (0, _app.config)();
|
|
18
|
+
const message = `Error in resolver "${data.name}" ${data.model ? `of model "${data.model.name}"` : ''}`;
|
|
19
|
+
|
|
20
|
+
if (error && error.isOrionError) {
|
|
21
|
+
logger.warn(message, error);
|
|
22
|
+
} else {
|
|
23
|
+
const hash = _crypto.default.createHash('sha1').update(error.message, 'utf8').digest('hex').substring(0, 10);
|
|
24
|
+
|
|
25
|
+
error.hash = hash;
|
|
26
|
+
logger.error(message, error);
|
|
27
|
+
throw new _app.UserError('INTERNAL_SERVER_ERROR', 'Internal server error', {
|
|
28
|
+
hash
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|