@nsxbet/react-relay-network-modern 1.0.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 (85) hide show
  1. package/LICENSE.md +10 -0
  2. package/README.md +324 -0
  3. package/dist/RRNLError.cjs +9 -0
  4. package/dist/RRNLError.d.cts +6 -0
  5. package/dist/RRNLError.d.ts +6 -0
  6. package/dist/RRNLError.js +9 -0
  7. package/dist/RelayNetworkLayer.cjs +54 -0
  8. package/dist/RelayNetworkLayer.d.cts +21 -0
  9. package/dist/RelayNetworkLayer.d.ts +21 -0
  10. package/dist/RelayNetworkLayer.js +54 -0
  11. package/dist/RelayRequest.cjs +90 -0
  12. package/dist/RelayRequest.d.cts +26 -0
  13. package/dist/RelayRequest.d.ts +26 -0
  14. package/dist/RelayRequest.js +90 -0
  15. package/dist/RelayRequestBatch.cjs +56 -0
  16. package/dist/RelayRequestBatch.d.cts +23 -0
  17. package/dist/RelayRequestBatch.d.ts +23 -0
  18. package/dist/RelayRequestBatch.js +56 -0
  19. package/dist/RelayResponse.cjs +56 -0
  20. package/dist/RelayResponse.d.cts +27 -0
  21. package/dist/RelayResponse.d.ts +27 -0
  22. package/dist/RelayResponse.js +56 -0
  23. package/dist/createRequestError.cjs +48 -0
  24. package/dist/createRequestError.d.cts +18 -0
  25. package/dist/createRequestError.d.ts +18 -0
  26. package/dist/createRequestError.js +46 -0
  27. package/dist/definition.d.cts +95 -0
  28. package/dist/definition.d.ts +95 -0
  29. package/dist/express-middleware/graphqlBatchHTTPWrapper.cjs +60 -0
  30. package/dist/express-middleware/graphqlBatchHTTPWrapper.d.cts +5 -0
  31. package/dist/express-middleware/graphqlBatchHTTPWrapper.d.ts +5 -0
  32. package/dist/express-middleware/graphqlBatchHTTPWrapper.js +60 -0
  33. package/dist/fetchWithMiddleware.cjs +43 -0
  34. package/dist/fetchWithMiddleware.js +43 -0
  35. package/dist/index.cjs +49 -0
  36. package/dist/index.d.cts +21 -0
  37. package/dist/index.d.ts +21 -0
  38. package/dist/index.js +20 -0
  39. package/dist/middlewares/auth.cjs +47 -0
  40. package/dist/middlewares/auth.d.cts +18 -0
  41. package/dist/middlewares/auth.d.ts +18 -0
  42. package/dist/middlewares/auth.js +46 -0
  43. package/dist/middlewares/batch.cjs +136 -0
  44. package/dist/middlewares/batch.d.cts +34 -0
  45. package/dist/middlewares/batch.d.ts +34 -0
  46. package/dist/middlewares/batch.js +135 -0
  47. package/dist/middlewares/cache.cjs +43 -0
  48. package/dist/middlewares/cache.d.cts +17 -0
  49. package/dist/middlewares/cache.d.ts +17 -0
  50. package/dist/middlewares/cache.js +43 -0
  51. package/dist/middlewares/error.cjs +71 -0
  52. package/dist/middlewares/error.d.cts +11 -0
  53. package/dist/middlewares/error.d.ts +11 -0
  54. package/dist/middlewares/error.js +71 -0
  55. package/dist/middlewares/logger.cjs +43 -0
  56. package/dist/middlewares/logger.d.cts +9 -0
  57. package/dist/middlewares/logger.d.ts +9 -0
  58. package/dist/middlewares/logger.js +43 -0
  59. package/dist/middlewares/perf.cjs +13 -0
  60. package/dist/middlewares/perf.d.cts +9 -0
  61. package/dist/middlewares/perf.d.ts +9 -0
  62. package/dist/middlewares/perf.js +13 -0
  63. package/dist/middlewares/persistedQueries.cjs +33 -0
  64. package/dist/middlewares/persistedQueries.d.cts +9 -0
  65. package/dist/middlewares/persistedQueries.d.ts +9 -0
  66. package/dist/middlewares/persistedQueries.js +33 -0
  67. package/dist/middlewares/progress.cjs +35 -0
  68. package/dist/middlewares/progress.d.cts +10 -0
  69. package/dist/middlewares/progress.d.ts +10 -0
  70. package/dist/middlewares/progress.js +35 -0
  71. package/dist/middlewares/retry.cjs +146 -0
  72. package/dist/middlewares/retry.d.cts +34 -0
  73. package/dist/middlewares/retry.d.ts +34 -0
  74. package/dist/middlewares/retry.js +145 -0
  75. package/dist/middlewares/upload.cjs +32 -0
  76. package/dist/middlewares/upload.d.cts +6 -0
  77. package/dist/middlewares/upload.d.ts +6 -0
  78. package/dist/middlewares/upload.js +32 -0
  79. package/dist/middlewares/url.cjs +19 -0
  80. package/dist/middlewares/url.d.cts +19 -0
  81. package/dist/middlewares/url.d.ts +19 -0
  82. package/dist/middlewares/url.js +19 -0
  83. package/dist/utils.cjs +6 -0
  84. package/dist/utils.js +6 -0
  85. package/package.json +88 -0
@@ -0,0 +1,6 @@
1
+ import { Middleware } from "../definition.cjs";
2
+
3
+ //#region src/middlewares/upload.d.ts
4
+ declare function uploadMiddleware(): Middleware;
5
+ //#endregion
6
+ export { uploadMiddleware };
@@ -0,0 +1,6 @@
1
+ import { Middleware } from "../definition.js";
2
+
3
+ //#region src/middlewares/upload.d.ts
4
+ declare function uploadMiddleware(): Middleware;
5
+ //#endregion
6
+ export { uploadMiddleware };
@@ -0,0 +1,32 @@
1
+ import RelayRequestBatch from "../RelayRequestBatch.js";
2
+ import { extractFiles } from "extract-files";
3
+ //#region src/middlewares/upload.ts
4
+ function uploadMiddleware() {
5
+ return (next) => async (req) => {
6
+ if (req instanceof RelayRequestBatch) throw new Error("RelayRequestBatch is not supported");
7
+ const { clone: extractedOperations, files } = extractFiles({
8
+ query: req.operation.text,
9
+ variables: req.variables
10
+ });
11
+ if (files.size) {
12
+ const formData = new FormData();
13
+ formData.append("operations", JSON.stringify(extractedOperations));
14
+ const pathMap = {};
15
+ let i = 0;
16
+ files.forEach((paths) => {
17
+ pathMap[++i] = paths;
18
+ });
19
+ formData.append("map", JSON.stringify(pathMap));
20
+ i = 0;
21
+ files.forEach((paths, file) => {
22
+ formData.append(`${++i}`, file, file.name);
23
+ });
24
+ req.fetchOpts.method = "POST";
25
+ req.fetchOpts.body = formData;
26
+ delete req.fetchOpts.headers["Content-Type"];
27
+ }
28
+ return await next(req);
29
+ };
30
+ }
31
+ //#endregion
32
+ export { uploadMiddleware as default };
@@ -0,0 +1,19 @@
1
+ const require_utils = require("../utils.cjs");
2
+ //#region src/middlewares/url.ts
3
+ function urlMiddleware(opts) {
4
+ const { url, headers, method = "POST", credentials, mode, cache, redirect } = opts || {};
5
+ const urlOrThunk = url || "/graphql";
6
+ const headersOrThunk = headers;
7
+ return (next) => async (req) => {
8
+ req.fetchOpts.url = await (require_utils.isFunction(urlOrThunk) ? urlOrThunk(req) : urlOrThunk);
9
+ if (headersOrThunk) req.fetchOpts.headers = await (require_utils.isFunction(headersOrThunk) ? headersOrThunk(req) : headersOrThunk);
10
+ if (method) req.fetchOpts.method = method;
11
+ if (credentials) req.fetchOpts.credentials = credentials;
12
+ if (mode) req.fetchOpts.mode = mode;
13
+ if (cache) req.fetchOpts.cache = cache;
14
+ if (redirect) req.fetchOpts.redirect = redirect;
15
+ return next(req);
16
+ };
17
+ }
18
+ //#endregion
19
+ exports.default = urlMiddleware;
@@ -0,0 +1,19 @@
1
+ import { RelayRequest } from "../RelayRequest.cjs";
2
+ import { FetchOpts, Middleware } from "../definition.cjs";
3
+
4
+ //#region src/middlewares/url.d.ts
5
+ type Headers = {
6
+ [name: string]: string;
7
+ };
8
+ interface UrlMiddlewareOpts {
9
+ url: string | Promise<string> | ((req: RelayRequest) => string | Promise<string>);
10
+ method?: 'POST' | 'GET';
11
+ headers?: Headers | Promise<Headers> | ((req: RelayRequest) => Headers | Promise<Headers>);
12
+ credentials?: FetchOpts['credentials'];
13
+ mode?: FetchOpts['mode'];
14
+ cache?: FetchOpts['cache'];
15
+ redirect?: FetchOpts['redirect'];
16
+ }
17
+ declare function urlMiddleware(opts?: UrlMiddlewareOpts): Middleware;
18
+ //#endregion
19
+ export { UrlMiddlewareOpts, urlMiddleware };
@@ -0,0 +1,19 @@
1
+ import { RelayRequest } from "../RelayRequest.js";
2
+ import { FetchOpts, Middleware } from "../definition.js";
3
+
4
+ //#region src/middlewares/url.d.ts
5
+ type Headers = {
6
+ [name: string]: string;
7
+ };
8
+ interface UrlMiddlewareOpts {
9
+ url: string | Promise<string> | ((req: RelayRequest) => string | Promise<string>);
10
+ method?: 'POST' | 'GET';
11
+ headers?: Headers | Promise<Headers> | ((req: RelayRequest) => Headers | Promise<Headers>);
12
+ credentials?: FetchOpts['credentials'];
13
+ mode?: FetchOpts['mode'];
14
+ cache?: FetchOpts['cache'];
15
+ redirect?: FetchOpts['redirect'];
16
+ }
17
+ declare function urlMiddleware(opts?: UrlMiddlewareOpts): Middleware;
18
+ //#endregion
19
+ export { UrlMiddlewareOpts, urlMiddleware };
@@ -0,0 +1,19 @@
1
+ import { isFunction } from "../utils.js";
2
+ //#region src/middlewares/url.ts
3
+ function urlMiddleware(opts) {
4
+ const { url, headers, method = "POST", credentials, mode, cache, redirect } = opts || {};
5
+ const urlOrThunk = url || "/graphql";
6
+ const headersOrThunk = headers;
7
+ return (next) => async (req) => {
8
+ req.fetchOpts.url = await (isFunction(urlOrThunk) ? urlOrThunk(req) : urlOrThunk);
9
+ if (headersOrThunk) req.fetchOpts.headers = await (isFunction(headersOrThunk) ? headersOrThunk(req) : headersOrThunk);
10
+ if (method) req.fetchOpts.method = method;
11
+ if (credentials) req.fetchOpts.credentials = credentials;
12
+ if (mode) req.fetchOpts.mode = mode;
13
+ if (cache) req.fetchOpts.cache = cache;
14
+ if (redirect) req.fetchOpts.redirect = redirect;
15
+ return next(req);
16
+ };
17
+ }
18
+ //#endregion
19
+ export { urlMiddleware as default };
package/dist/utils.cjs ADDED
@@ -0,0 +1,6 @@
1
+ //#region src/utils.ts
2
+ function isFunction(obj) {
3
+ return !!(obj && obj.constructor && obj.call && obj.apply);
4
+ }
5
+ //#endregion
6
+ exports.isFunction = isFunction;
package/dist/utils.js ADDED
@@ -0,0 +1,6 @@
1
+ //#region src/utils.ts
2
+ function isFunction(obj) {
3
+ return !!(obj && obj.constructor && obj.call && obj.apply);
4
+ }
5
+ //#endregion
6
+ export { isFunction };
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "@nsxbet/react-relay-network-modern",
3
+ "version": "1.0.0",
4
+ "description": "Network Layer for React Relay and Express (Batch Queries, AuthToken, Logging, Retry)",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=18"
8
+ },
9
+ "packageManager": "bun@1.3.14",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "main": "./dist/index.cjs",
14
+ "module": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/index.d.cts",
24
+ "default": "./dist/index.cjs"
25
+ }
26
+ },
27
+ "./package.json": "./package.json"
28
+ },
29
+ "sideEffects": false,
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/NSXBet/react-relay-network-modern.git"
36
+ },
37
+ "keywords": [
38
+ "relay",
39
+ "react",
40
+ "network layer",
41
+ "batch",
42
+ "express",
43
+ "jwt",
44
+ "auth token"
45
+ ],
46
+ "author": "NSXBet",
47
+ "contributors": [
48
+ "Pavel Chertorogov <pavel.chertorogov@gmail.com> (https://github.com/nodkz)"
49
+ ],
50
+ "license": "MIT",
51
+ "bugs": {
52
+ "url": "https://github.com/NSXBet/react-relay-network-modern/issues"
53
+ },
54
+ "homepage": "https://github.com/NSXBet/react-relay-network-modern#readme",
55
+ "dependencies": {
56
+ "extract-files": "^9.0.0"
57
+ },
58
+ "peerDependencies": {
59
+ "relay-runtime": ">=14.0.0"
60
+ },
61
+ "devDependencies": {
62
+ "@size-limit/preset-small-lib": "^12.1.0",
63
+ "@types/node": "^22",
64
+ "@vitest/coverage-v8": "^3.2.6",
65
+ "fetch-mock": "^9",
66
+ "form-data": "^4.0.5",
67
+ "jsdom": "^29.1.1",
68
+ "oxlint": "^1.68.0",
69
+ "relay-runtime": "^18.2.0",
70
+ "semantic-release": "^25.0.3",
71
+ "size-limit": "^12.1.0",
72
+ "tsdown": "^0.22.2",
73
+ "typescript": "^5.9",
74
+ "unrun": "^0.2.39",
75
+ "vitest": "^3.2.6"
76
+ },
77
+ "scripts": {
78
+ "build": "tsdown",
79
+ "test": "vitest run",
80
+ "test:watch": "vitest",
81
+ "coverage": "vitest run --coverage",
82
+ "lint": "oxlint",
83
+ "size": "size-limit",
84
+ "typecheck": "tsc --noEmit",
85
+ "check": "bun run lint && bun run typecheck && bun run coverage",
86
+ "semantic-release": "semantic-release"
87
+ }
88
+ }