@webiny/handler-graphql 0.0.0-unstable.cc58a6566b → 0.0.0-unstable.d13302545b
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/builtInTypes/LongScalar.d.ts +2 -1
- package/builtInTypes/LongScalar.js +49 -2
- package/builtInTypes/LongScalar.js.map +1 -1
- package/createGraphQLHandler.js +4 -4
- package/createGraphQLHandler.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +10 -1
- package/index.js.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { GraphQLScalarType } from "graphql";
|
|
2
|
+
export declare const LongScalar: GraphQLScalarType;
|
|
@@ -1,9 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.LongScalar = void 0;
|
|
7
|
-
var
|
|
8
|
-
|
|
8
|
+
var _graphql = require("graphql");
|
|
9
|
+
var _language = require("graphql/language");
|
|
10
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
11
|
+
const parseValue = value => {
|
|
12
|
+
if (String(value).includes(".")) {
|
|
13
|
+
throw new _error.default("Value sent must be an integer.", "INVALID_VALUE", {
|
|
14
|
+
value
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
if (typeof value === "number") {
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
if (value === null || value === undefined) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (isNaN(value) === true) {
|
|
24
|
+
throw new _error.default("Value sent must be an integer.", "INVALID_VALUE", {
|
|
25
|
+
value
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return parseInt(value);
|
|
29
|
+
};
|
|
30
|
+
const LongScalar = new _graphql.GraphQLScalarType({
|
|
31
|
+
name: "Long",
|
|
32
|
+
description: "A custom input type to be used for large integers (Long).",
|
|
33
|
+
serialize: value => {
|
|
34
|
+
try {
|
|
35
|
+
return parseValue(value);
|
|
36
|
+
} catch (ex) {
|
|
37
|
+
console.log({
|
|
38
|
+
message: "Value sent must be an integer.",
|
|
39
|
+
code: "INVALID_VALUE",
|
|
40
|
+
data: {
|
|
41
|
+
value
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
parseValue,
|
|
48
|
+
parseLiteral: ast => {
|
|
49
|
+
const value = ast.value;
|
|
50
|
+
if (ast.kind === _language.Kind.INT) {
|
|
51
|
+
return parseInt(value);
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`Expected type Long, found {${value}}`);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
9
56
|
exports.LongScalar = LongScalar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LongScalar","
|
|
1
|
+
{"version":3,"names":["parseValue","value","String","includes","WebinyError","undefined","isNaN","parseInt","LongScalar","GraphQLScalarType","name","description","serialize","ex","console","log","message","code","data","parseLiteral","ast","kind","Kind","INT","Error"],"sources":["LongScalar.ts"],"sourcesContent":["import { GraphQLScalarType } from \"graphql\";\nimport { Kind } from \"graphql/language\";\nimport WebinyError from \"@webiny/error\";\n\nconst parseValue = (value: any) => {\n if (String(value).includes(\".\")) {\n throw new WebinyError(\"Value sent must be an integer.\", \"INVALID_VALUE\", {\n value\n });\n }\n if (typeof value === \"number\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return null;\n }\n\n if (isNaN(value) === true) {\n throw new WebinyError(\"Value sent must be an integer.\", \"INVALID_VALUE\", {\n value\n });\n }\n\n return parseInt(value);\n};\n\nexport const LongScalar = new GraphQLScalarType({\n name: \"Long\",\n description: \"A custom input type to be used for large integers (Long).\",\n serialize: (value: any) => {\n try {\n return parseValue(value);\n } catch (ex) {\n console.log({\n message: \"Value sent must be an integer.\",\n code: \"INVALID_VALUE\",\n data: {\n value\n }\n });\n return null;\n }\n },\n parseValue,\n parseLiteral: ast => {\n const value = (ast as any).value;\n if (ast.kind === Kind.INT) {\n return parseInt(value);\n }\n\n throw new Error(`Expected type Long, found {${value}}`);\n }\n});\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAEA,MAAMA,UAAU,GAAIC,KAAU,IAAK;EAC/B,IAAIC,MAAM,CAACD,KAAK,CAAC,CAACE,QAAQ,CAAC,GAAG,CAAC,EAAE;IAC7B,MAAM,IAAIC,cAAW,CAAC,gCAAgC,EAAE,eAAe,EAAE;MACrEH;IACJ,CAAC,CAAC;EACN;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC3B,OAAOA,KAAK;EAChB;EAEA,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKI,SAAS,EAAE;IACvC,OAAO,IAAI;EACf;EAEA,IAAIC,KAAK,CAACL,KAAK,CAAC,KAAK,IAAI,EAAE;IACvB,MAAM,IAAIG,cAAW,CAAC,gCAAgC,EAAE,eAAe,EAAE;MACrEH;IACJ,CAAC,CAAC;EACN;EAEA,OAAOM,QAAQ,CAACN,KAAK,CAAC;AAC1B,CAAC;AAEM,MAAMO,UAAU,GAAG,IAAIC,0BAAiB,CAAC;EAC5CC,IAAI,EAAE,MAAM;EACZC,WAAW,EAAE,2DAA2D;EACxEC,SAAS,EAAGX,KAAU,IAAK;IACvB,IAAI;MACA,OAAOD,UAAU,CAACC,KAAK,CAAC;IAC5B,CAAC,CAAC,OAAOY,EAAE,EAAE;MACTC,OAAO,CAACC,GAAG,CAAC;QACRC,OAAO,EAAE,gCAAgC;QACzCC,IAAI,EAAE,eAAe;QACrBC,IAAI,EAAE;UACFjB;QACJ;MACJ,CAAC,CAAC;MACF,OAAO,IAAI;IACf;EACJ,CAAC;EACDD,UAAU;EACVmB,YAAY,EAAEC,GAAG,IAAI;IACjB,MAAMnB,KAAK,GAAImB,GAAG,CAASnB,KAAK;IAChC,IAAImB,GAAG,CAACC,IAAI,KAAKC,cAAI,CAACC,GAAG,EAAE;MACvB,OAAOhB,QAAQ,CAACN,KAAK,CAAC;IAC1B;IAEA,MAAM,IAAIuB,KAAK,CAAE,8BAA6BvB,KAAM,GAAE,CAAC;EAC3D;AACJ,CAAC,CAAC;AAAC"}
|
package/createGraphQLHandler.js
CHANGED
|
@@ -62,16 +62,16 @@ var _default = (options = {}) => {
|
|
|
62
62
|
try {
|
|
63
63
|
body = createRequestBody(request.body);
|
|
64
64
|
} catch (ex) {
|
|
65
|
-
console.
|
|
66
|
-
console.
|
|
65
|
+
console.error(`Error while creating the body request.`);
|
|
66
|
+
console.error(formatErrorPayload(ex));
|
|
67
67
|
throw ex;
|
|
68
68
|
}
|
|
69
69
|
try {
|
|
70
70
|
const result = await (0, _processRequestBody.default)(body, schema, context);
|
|
71
71
|
return reply.status(200).send(result);
|
|
72
72
|
} catch (ex) {
|
|
73
|
-
console.
|
|
74
|
-
console.
|
|
73
|
+
console.error(`Error while processing the body request.`);
|
|
74
|
+
console.error(formatErrorPayload(ex));
|
|
75
75
|
throw ex;
|
|
76
76
|
}
|
|
77
77
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_CACHE_MAX_AGE","createRequestBody","body","JSON","parse","formatErrorPayload","error","WebinyError","stringify","type","message","code","data","name","stack","options","schema","undefined","debug","boolean","path","route","RoutePlugin","onPost","onOptions","context","_","reply","status","headers","send","hijack","request","createGraphQLSchema","ex","console","
|
|
1
|
+
{"version":3,"names":["DEFAULT_CACHE_MAX_AGE","createRequestBody","body","JSON","parse","formatErrorPayload","error","WebinyError","stringify","type","message","code","data","name","stack","options","schema","undefined","debug","boolean","path","route","RoutePlugin","onPost","onOptions","context","_","reply","status","headers","send","hijack","request","createGraphQLSchema","ex","console","result","processRequestBody","debugPlugins"],"sources":["createGraphQLHandler.ts"],"sourcesContent":["import { boolean } from \"boolean\";\nimport { GraphQLSchema } from \"graphql\";\nimport { RoutePlugin } from \"@webiny/handler\";\nimport WebinyError from \"@webiny/error\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport { GraphQLRequestBody, HandlerGraphQLOptions } from \"./types\";\nimport { createGraphQLSchema } from \"./createGraphQLSchema\";\nimport debugPlugins from \"./debugPlugins\";\nimport processRequestBody from \"./processRequestBody\";\n\nconst DEFAULT_CACHE_MAX_AGE = 30758400; // 1 year\n\nconst createRequestBody = (body: unknown): GraphQLRequestBody | GraphQLRequestBody[] => {\n /**\n * We are trusting that the body payload is correct.\n * The `processRequestBody` will fail if it is not.\n */\n return typeof body === \"string\" ? JSON.parse(body) : body;\n};\n\nconst formatErrorPayload = (error: Error): string => {\n if (error instanceof WebinyError) {\n return JSON.stringify({\n type: \"CoreGraphQLWebinyError\",\n message: error.message,\n code: error.code,\n data: error.data\n });\n }\n\n return JSON.stringify({\n type: \"Error\",\n name: error.name,\n message: error.message,\n stack: error.stack\n });\n};\n\nexport default (options: HandlerGraphQLOptions = {}): PluginCollection => {\n let schema: GraphQLSchema | undefined = undefined;\n\n const debug = boolean(options.debug);\n\n const path = options?.path || \"/graphql\";\n\n const route = new RoutePlugin(async ({ onPost, onOptions, context }) => {\n onOptions(path, async (_, reply) => {\n return reply\n .status(204)\n .headers({\n \"Cache-Control\": `public, max-age=${DEFAULT_CACHE_MAX_AGE}`\n })\n .send({})\n .hijack();\n });\n onPost(path, async (request, reply) => {\n if (!schema) {\n try {\n schema = createGraphQLSchema(context);\n } catch (ex) {\n return reply.code(500).send(formatErrorPayload(ex));\n }\n }\n let body: GraphQLRequestBody | GraphQLRequestBody[];\n try {\n body = createRequestBody(request.body);\n } catch (ex) {\n console.error(`Error while creating the body request.`);\n console.error(formatErrorPayload(ex));\n throw ex;\n }\n try {\n const result = await processRequestBody(body, schema, context);\n return reply.status(200).send(result);\n } catch (ex) {\n console.error(`Error while processing the body request.`);\n console.error(formatErrorPayload(ex));\n throw ex;\n }\n });\n });\n\n route.name = \"handler.graphql.route.default\";\n\n return [\n ...(debug ? debugPlugins() : []),\n {\n type: \"wcp-telemetry-tracker\"\n },\n route\n ];\n};\n"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ import { HandlerGraphQLOptions } from "./types";
|
|
|
2
2
|
export * from "./errors";
|
|
3
3
|
export * from "./responses";
|
|
4
4
|
export * from "./plugins";
|
|
5
|
+
export { default as processRequestBody } from "./processRequestBody";
|
|
5
6
|
declare const _default: (options?: HandlerGraphQLOptions) => import("@webiny/plugins/types").PluginCollection[];
|
|
6
7
|
export default _default;
|
package/index.js
CHANGED
|
@@ -4,8 +4,16 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
var _exportNames = {
|
|
7
|
+
var _exportNames = {
|
|
8
|
+
processRequestBody: true
|
|
9
|
+
};
|
|
8
10
|
exports.default = void 0;
|
|
11
|
+
Object.defineProperty(exports, "processRequestBody", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () {
|
|
14
|
+
return _processRequestBody.default;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
9
17
|
var _createGraphQLHandler = _interopRequireDefault(require("./createGraphQLHandler"));
|
|
10
18
|
var _errors = require("./errors");
|
|
11
19
|
Object.keys(_errors).forEach(function (key) {
|
|
@@ -43,5 +51,6 @@ Object.keys(_plugins).forEach(function (key) {
|
|
|
43
51
|
}
|
|
44
52
|
});
|
|
45
53
|
});
|
|
54
|
+
var _processRequestBody = _interopRequireDefault(require("./processRequestBody"));
|
|
46
55
|
var _default = (options = {}) => [(0, _createGraphQLHandler.default)(options)];
|
|
47
56
|
exports.default = _default;
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["options","createGraphQLHandler"],"sources":["index.ts"],"sourcesContent":["import { HandlerGraphQLOptions } from \"./types\";\nimport createGraphQLHandler from \"./createGraphQLHandler\";\n\nexport * from \"./errors\";\nexport * from \"./responses\";\nexport * from \"./plugins\";\n\nexport default (options: HandlerGraphQLOptions = {}) => [createGraphQLHandler(options)];\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["options","createGraphQLHandler"],"sources":["index.ts"],"sourcesContent":["import { HandlerGraphQLOptions } from \"./types\";\nimport createGraphQLHandler from \"./createGraphQLHandler\";\n\nexport * from \"./errors\";\nexport * from \"./responses\";\nexport * from \"./plugins\";\nexport { default as processRequestBody } from \"./processRequestBody\";\n\nexport default (options: HandlerGraphQLOptions = {}) => [createGraphQLHandler(options)];\n"],"mappings":";;;;;;;;;;;;;;;;AACA;AAEA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAqE,eAEtD,CAACA,OAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,IAAAC,6BAAoB,EAACD,OAAO,CAAC,CAAC;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/handler-graphql",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.d13302545b",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -16,26 +16,26 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@babel/runtime": "7.20.13",
|
|
18
18
|
"@graphql-tools/schema": "7.1.5",
|
|
19
|
-
"@webiny/api": "0.0.0-unstable.
|
|
20
|
-
"@webiny/error": "0.0.0-unstable.
|
|
21
|
-
"@webiny/handler": "0.0.0-unstable.
|
|
22
|
-
"@webiny/plugins": "0.0.0-unstable.
|
|
19
|
+
"@webiny/api": "^0.0.0-unstable.d13302545b",
|
|
20
|
+
"@webiny/error": "^0.0.0-unstable.d13302545b",
|
|
21
|
+
"@webiny/handler": "^0.0.0-unstable.d13302545b",
|
|
22
|
+
"@webiny/plugins": "^0.0.0-unstable.d13302545b",
|
|
23
23
|
"boolean": "3.2.0",
|
|
24
24
|
"graphql": "15.8.0",
|
|
25
25
|
"graphql-scalars": "1.12.0",
|
|
26
26
|
"graphql-tag": "2.12.6"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@babel/cli": "
|
|
30
|
-
"@babel/core": "
|
|
31
|
-
"@babel/preset-env": "
|
|
32
|
-
"@webiny/cli": "^0.0.0-unstable.
|
|
33
|
-
"@webiny/handler-aws": "^0.0.0-unstable.
|
|
34
|
-
"@webiny/project-utils": "^0.0.0-unstable.
|
|
35
|
-
"jest": "
|
|
36
|
-
"jest-mock-console": "
|
|
37
|
-
"rimraf": "
|
|
38
|
-
"ttypescript": "
|
|
29
|
+
"@babel/cli": "7.20.7",
|
|
30
|
+
"@babel/core": "7.20.12",
|
|
31
|
+
"@babel/preset-env": "7.20.2",
|
|
32
|
+
"@webiny/cli": "^0.0.0-unstable.d13302545b",
|
|
33
|
+
"@webiny/handler-aws": "^0.0.0-unstable.d13302545b",
|
|
34
|
+
"@webiny/project-utils": "^0.0.0-unstable.d13302545b",
|
|
35
|
+
"jest": "28.1.3",
|
|
36
|
+
"jest-mock-console": "1.3.0",
|
|
37
|
+
"rimraf": "3.0.2",
|
|
38
|
+
"ttypescript": "1.5.15",
|
|
39
39
|
"typescript": "4.7.4"
|
|
40
40
|
},
|
|
41
41
|
"publishConfig": {
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"build": "yarn webiny run build",
|
|
47
47
|
"watch": "yarn webiny run watch"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "d13302545b196adb4370c81fd9c7133ff0d5f88b"
|
|
50
50
|
}
|