@cyberskill/shared 2.15.0 → 2.16.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/react/apollo-client/apollo-client.util.cjs +1 -1
- package/dist/react/apollo-client/apollo-client.util.js +8 -8
- package/dist/react/apollo-client/links/index.cjs +1 -0
- package/dist/react/apollo-client/links/index.d.ts +1 -0
- package/dist/react/apollo-client/links/index.js +4 -0
- package/dist/react/apollo-client/links/upload.cjs +1 -0
- package/dist/react/apollo-client/links/upload.d.ts +76 -0
- package/dist/react/apollo-client/links/upload.js +111 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("@apollo/client/core"),p=require("@apollo/client/link"),w=require("@apollo/client/link/error"),h=require("@apollo/client/link/remove-typename"),y=require("@apollo/client/link/subscriptions"),_=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("@apollo/client/core"),p=require("@apollo/client/link"),w=require("@apollo/client/link/error"),h=require("@apollo/client/link/remove-typename"),y=require("@apollo/client/link/subscriptions"),_=require("graphql"),q=require("graphql-ws"),c=require("react"),b=require("rxjs"),m=require("./apollo-client.constant.cjs"),v=require("./links/upload.cjs"),E=require("../apollo-error/apollo-error.util.cjs"),l=require("../log/log.util.cjs"),f=require("react-hot-toast");var P=Object.defineProperty,g=Object.getOwnPropertySymbols,A=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable,L=(e,r,o)=>r in e?P(e,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[r]=o,T=(e,r)=>{for(var o in r||(r={}))A.call(r,o)&&L(e,o,r[o]);if(g)for(var o of g(r))O.call(r,o)&&L(e,o,r[o]);return e};const C=new p.ApolloLink((e,r)=>(e.setContext({start:new Date}),r(e).pipe(b.tap(()=>{const o=new Date().getTime()-e.getContext().start;l.log.info(`Operation ${e.operationName} took ${o}ms to complete`)})))),S=new w.ErrorLink(({error:e,operation:r})=>{const o=(r==null?void 0:r.operationName)||"Unknown";let t="";a.CombinedGraphQLErrors.is(e)?e.errors.forEach(({message:n,locations:i,path:s},u)=>{u===0&&(t=n),l.log.error(`[GraphQL error] ${o}: ${n}, Location: ${JSON.stringify(i,null,4)}, Path: ${s}`)}):a.CombinedProtocolErrors.is(e)?e.errors.forEach(({message:n,extensions:i},s)=>{s===0&&(t=n),l.log.error(`[Protocol error]: ${n}, Extensions: ${JSON.stringify(i,null,4)}`)}):a.ServerError.is(e)?(t=e.message,l.log.error(`[Server error]: ${e.message}`)):(t=e.message,l.log.error(`[Network error]: ${e.message}`)),e&&t&&typeof window!="undefined"&&f.toast.error(n=>c.createElement(c.Fragment,null,t," ",c.createElement("button",{type:"button",className:"text-blue-500 hover:text-blue-700",onClick:()=>{setTimeout(()=>{E.showGlobalApolloError(e)},0),f.toast.dismiss(n.id)}},"Show Details")))});function d(e){const{uri:r,wsUrl:o,customLinks:t}=e,n=new h.RemoveTypenameFromVariablesLink;r||l.log.warn(`[Apollo] No GraphQL URI provided — using "${m.GRAPHQL_URI_DEFAULT}" as default`);const i=v.createUploadLink({uri:r!=null?r:m.GRAPHQL_URI_DEFAULT,credentials:"include",headers:{"apollo-require-preflight":"true"}}),s=o?new y.GraphQLWsLink(q.createClient({url:o})):p.ApolloLink.empty(),u=o?p.ApolloLink.split(({operationType:k})=>k===_.OperationTypeNode.SUBSCRIPTION,s,i):i;return o&&u===i&&l.log.warn("[Apollo] WS URL is set, but subscriptions fallback to HTTP. Check your wsLink config."),[C,S,n,...t!=null?t:[],u]}function $(e){const r=p.ApolloLink.from(d(e));return new a.ApolloClient(T({link:r,cache:new a.InMemoryCache},e))}exports.createApolloLinks=d;exports.getClient=$;
|
|
@@ -3,12 +3,12 @@ import { ApolloLink as m } from "@apollo/client/link";
|
|
|
3
3
|
import { ErrorLink as v } from "@apollo/client/link/error";
|
|
4
4
|
import { RemoveTypenameFromVariablesLink as _ } from "@apollo/client/link/remove-typename";
|
|
5
5
|
import { GraphQLWsLink as b } from "@apollo/client/link/subscriptions";
|
|
6
|
-
import E from "
|
|
7
|
-
import {
|
|
8
|
-
import { createClient as P } from "graphql-ws";
|
|
6
|
+
import { OperationTypeNode as E } from "graphql";
|
|
7
|
+
import { createClient as O } from "graphql-ws";
|
|
9
8
|
import p from "react";
|
|
10
|
-
import { tap as
|
|
9
|
+
import { tap as P } from "rxjs";
|
|
11
10
|
import { GRAPHQL_URI_DEFAULT as f } from "./apollo-client.constant.js";
|
|
11
|
+
import { createUploadLink as C } from "./links/upload.js";
|
|
12
12
|
import { showGlobalApolloError as N } from "../apollo-error/apollo-error.util.js";
|
|
13
13
|
import { log as l } from "../log/log.util.js";
|
|
14
14
|
import { toast as c } from "react-hot-toast";
|
|
@@ -21,7 +21,7 @@ var $ = Object.defineProperty, u = Object.getOwnPropertySymbols, S = Object.prot
|
|
|
21
21
|
return r;
|
|
22
22
|
};
|
|
23
23
|
const U = new m((r, e) => (r.setContext({ start: /* @__PURE__ */ new Date() }), e(r).pipe(
|
|
24
|
-
|
|
24
|
+
P(() => {
|
|
25
25
|
const o = (/* @__PURE__ */ new Date()).getTime() - r.getContext().start;
|
|
26
26
|
l.info(`Operation ${r.operationName} took ${o}ms to complete`);
|
|
27
27
|
})
|
|
@@ -53,14 +53,14 @@ const U = new m((r, e) => (r.setContext({ start: /* @__PURE__ */ new Date() }),
|
|
|
53
53
|
function R(r) {
|
|
54
54
|
const { uri: e, wsUrl: o, customLinks: t } = r, n = new _();
|
|
55
55
|
e || l.warn(`[Apollo] No GraphQL URI provided — using "${f}" as default`);
|
|
56
|
-
const i =
|
|
56
|
+
const i = C({
|
|
57
57
|
uri: e != null ? e : f,
|
|
58
58
|
credentials: "include",
|
|
59
59
|
headers: {
|
|
60
60
|
"apollo-require-preflight": "true"
|
|
61
61
|
}
|
|
62
|
-
}), s = o ? new b(
|
|
63
|
-
({ operationType: d }) => d ===
|
|
62
|
+
}), s = o ? new b(O({ url: o })) : m.empty(), a = o ? m.split(
|
|
63
|
+
({ operationType: d }) => d === E.SUBSCRIPTION,
|
|
64
64
|
s,
|
|
65
65
|
i
|
|
66
66
|
) : i;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./upload.cjs");exports.createUploadLink=e.createUploadLink;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './upload.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=require("@apollo/client/link"),c=require("@apollo/client/link/http"),w=require("@apollo/client/utilities"),T=require("extract-files/extractFiles.mjs"),j=require("extract-files/isExtractableFile.mjs");var G=Object.defineProperty,_=Object.getOwnPropertySymbols,H=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable,E=(n,e,t)=>e in n?G(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,h=(n,e)=>{for(var t in e||(e={}))H.call(e,t)&&E(n,t,e[t]);if(_)for(var t of _(e))J.call(e,t)&&E(n,t,e[t]);return n};function N(){if(typeof AbortController=="undefined")return{controller:!1,signal:!1};const n=new AbortController,e=n.signal;return{controller:n,signal:e}}function z(n,e,t){"name"in t?n.append(e,t,t.name):n.append(e,t)}function B({uri:n="/graphql",useGETForQueries:e,isExtractableFile:t=j,FormData:v,formDataAppendFile:F=z,print:S=c.defaultPrinter,fetch:q,fetchOptions:x,credentials:P,headers:A,includeExtensions:C}={}){const I={http:{includeExtensions:C},options:x,credentials:P,headers:A};return new L.ApolloLink(l=>{const p=l.getContext(),{clientAwareness:{name:g,version:m}={},headers:k}=p,U={http:p.http,options:p.fetchOptions,credentials:p.credentials,headers:h(h(h({},g&&{"apollographql-client-name":g}),m&&{"apollographql-client-version":m}),k)},{options:o,body:b}=c.selectHttpOptionsAndBodyInternal(l,S,c.fallbackHttpConfig,I,U),{clone:y,files:f}=T(b,t,"");let u=c.selectURI(l,n);if(f.size){o.headers&&delete o.headers["content-type"];const a=v||FormData,i=new a;i.append("operations",JSON.stringify(y));const r={};let d=0;f.forEach(O=>{r[++d]=O}),i.append("map",JSON.stringify(r)),d=0,f.forEach((O,R)=>{F(i,String(++d),R)}),o.body=i}else if(e&&!l.query.definitions.some(a=>a.kind==="OperationDefinition"&&a.operation==="mutation")&&(o.method="GET"),o.method==="GET"){const{newURI:a,parseError:i}=c.rewriteURIForGET(u,b);if(i)return new w.Observable(r=>{r.error(i)});u=a}else o.body=JSON.stringify(y);const{controller:s}=N();typeof s!="boolean"&&(o.signal&&(o.signal.aborted?s.abort():o.signal.addEventListener("abort",()=>{s.abort()},{once:!0})),o.signal=s.signal);const D=q||fetch;return new w.Observable(a=>{let i;return D(u,o).then(r=>(l.setContext({response:r}),r)).then(c.parseAndCheckHttpResponse(l)).then(r=>{a.next(r),a.complete()}).catch(r=>{i||(r.result&&r.result.errors&&r.result.data&&a.next(r.result),a.error(r))}),()=>{i=!0,typeof s!="boolean"&&s.abort()}})})}exports.createUploadLink=B;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { BaseHttpLink } from '@apollo/client/link/http';
|
|
2
|
+
import { ExtractableFile } from 'extract-files/isExtractableFile.mjs';
|
|
3
|
+
import { ApolloLink } from '@apollo/client/link';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a
|
|
6
|
+
* [terminating Apollo Link](https://www.apollographql.com/docs/react/api/link/introduction/#the-terminating-link)
|
|
7
|
+
* for [Apollo Client](https://www.apollographql.com/docs/react) that fetches a
|
|
8
|
+
* [GraphQL multipart request](https://github.com/jaydenseric/graphql-multipart-request-spec)
|
|
9
|
+
* if the GraphQL variables contain files (by default
|
|
10
|
+
* [`FileList`](https://developer.mozilla.org/en-US/docs/Web/API/FileList),
|
|
11
|
+
* [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File), or
|
|
12
|
+
* [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) instances),
|
|
13
|
+
* or else fetches a regular
|
|
14
|
+
* [GraphQL POST or GET request](https://www.apollographql.com/docs/apollo-server/workflow/requests)
|
|
15
|
+
* (depending on the config and GraphQL operation).
|
|
16
|
+
*
|
|
17
|
+
* Some of the options are similar to the
|
|
18
|
+
* [`createHttpLink` options](https://www.apollographql.com/docs/react/api/link/apollo-link-http/#httplink-constructor-options).
|
|
19
|
+
* @see [GraphQL multipart request spec](https://github.com/jaydenseric/graphql-multipart-request-spec).
|
|
20
|
+
* @param {object} options Options.
|
|
21
|
+
* @param {Parameters<typeof selectURI>[1]} [options.uri] GraphQL endpoint URI.
|
|
22
|
+
* Defaults to `"/graphql"`.
|
|
23
|
+
* @param {boolean} [options.useGETForQueries] Should GET be used to fetch
|
|
24
|
+
* queries, if there are no files to upload.
|
|
25
|
+
* @param {ExtractableFileMatcher} [options.isExtractableFile] Matches
|
|
26
|
+
* extractable files in the GraphQL operation. Defaults to
|
|
27
|
+
* {@linkcode isExtractableFile}.
|
|
28
|
+
* @param {typeof FormData} [options.FormData]
|
|
29
|
+
* [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)
|
|
30
|
+
* class. Defaults to the {@linkcode FormData} global.
|
|
31
|
+
* @param {FormDataFileAppender} [options.formDataAppendFile]
|
|
32
|
+
* Customizes how extracted files are appended to the
|
|
33
|
+
* [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)
|
|
34
|
+
* instance. Defaults to {@linkcode formDataAppendFile}.
|
|
35
|
+
* @param {import("@apollo/client/link/http/selectHttpOptionsAndBody.js").Printer} [options.print]
|
|
36
|
+
* Prints the GraphQL query or mutation AST to a string for transport.
|
|
37
|
+
* Defaults to {@linkcode defaultPrinter}.
|
|
38
|
+
* @param {typeof fetch} [options.fetch] [`fetch`](https://fetch.spec.whatwg.org)
|
|
39
|
+
* implementation. Defaults to the {@linkcode fetch} global.
|
|
40
|
+
* @param {RequestInit} [options.fetchOptions] `fetch` options; overridden by
|
|
41
|
+
* upload requirements.
|
|
42
|
+
* @param {string} [options.credentials] Overrides
|
|
43
|
+
* {@linkcode RequestInit.credentials credentials} in
|
|
44
|
+
* {@linkcode fetchOptions}.
|
|
45
|
+
* @param {{ [headerName: string]: string }} [options.headers] Merges with and
|
|
46
|
+
* overrides {@linkcode RequestInit.headers headers} in
|
|
47
|
+
* {@linkcode fetchOptions}.
|
|
48
|
+
* @param {boolean} [options.includeExtensions] Toggles sending `extensions`
|
|
49
|
+
* fields to the GraphQL server. Defaults to `false`.
|
|
50
|
+
* @returns A [terminating Apollo Link](https://www.apollographql.com/docs/react/api/link/introduction/#the-terminating-link).
|
|
51
|
+
* @example
|
|
52
|
+
* A basic Apollo Client setup:
|
|
53
|
+
*
|
|
54
|
+
* ```js
|
|
55
|
+
* import { ApolloClient, InMemoryCache } from "@apollo/client";
|
|
56
|
+
* import createUploadLink from "apollo-upload-client/createUploadLink.mjs";
|
|
57
|
+
*
|
|
58
|
+
* const client = new ApolloClient({
|
|
59
|
+
* cache: new InMemoryCache(),
|
|
60
|
+
* link: createUploadLink(),
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function createUploadLink({ uri: fetchUri, useGETForQueries, isExtractableFile: customIsExtractableFile, FormData: CustomFormData, formDataAppendFile: customFormDataAppendFile, print, fetch: customFetch, fetchOptions, credentials, headers, includeExtensions, }?: {
|
|
65
|
+
uri?: string;
|
|
66
|
+
useGETForQueries?: boolean;
|
|
67
|
+
isExtractableFile?: (value: unknown) => value is ExtractableFile;
|
|
68
|
+
FormData?: typeof FormData;
|
|
69
|
+
formDataAppendFile?: (formData: FormData, fieldName: string, file: ExtractableFile) => void;
|
|
70
|
+
print?: BaseHttpLink.Printer;
|
|
71
|
+
fetch?: typeof fetch;
|
|
72
|
+
fetchOptions?: RequestInit;
|
|
73
|
+
credentials?: RequestCredentials;
|
|
74
|
+
headers?: Record<string, string>;
|
|
75
|
+
includeExtensions?: boolean;
|
|
76
|
+
}): ApolloLink;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { ApolloLink as q } from "@apollo/client/link";
|
|
2
|
+
import { selectHttpOptionsAndBodyInternal as G, defaultPrinter as H, fallbackHttpConfig as J, selectURI as L, rewriteURIForGET as N, parseAndCheckHttpResponse as T } from "@apollo/client/link/http";
|
|
3
|
+
import { Observable as O } from "@apollo/client/utilities";
|
|
4
|
+
import j from "extract-files/extractFiles.mjs";
|
|
5
|
+
import z from "extract-files/isExtractableFile.mjs";
|
|
6
|
+
var B = Object.defineProperty, w = Object.getOwnPropertySymbols, V = Object.prototype.hasOwnProperty, K = Object.prototype.propertyIsEnumerable, _ = (n, t, e) => t in n ? B(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e, m = (n, t) => {
|
|
7
|
+
for (var e in t || (t = {}))
|
|
8
|
+
V.call(t, e) && _(n, e, t[e]);
|
|
9
|
+
if (w)
|
|
10
|
+
for (var e of w(t))
|
|
11
|
+
K.call(t, e) && _(n, e, t[e]);
|
|
12
|
+
return n;
|
|
13
|
+
};
|
|
14
|
+
function M() {
|
|
15
|
+
if (typeof AbortController == "undefined")
|
|
16
|
+
return { controller: !1, signal: !1 };
|
|
17
|
+
const n = new AbortController(), t = n.signal;
|
|
18
|
+
return { controller: n, signal: t };
|
|
19
|
+
}
|
|
20
|
+
function Q(n, t, e) {
|
|
21
|
+
"name" in e ? n.append(t, e, e.name) : n.append(t, e);
|
|
22
|
+
}
|
|
23
|
+
function tt({
|
|
24
|
+
uri: n = "/graphql",
|
|
25
|
+
useGETForQueries: t,
|
|
26
|
+
isExtractableFile: e = z,
|
|
27
|
+
FormData: E,
|
|
28
|
+
formDataAppendFile: x = Q,
|
|
29
|
+
print: F = H,
|
|
30
|
+
fetch: v,
|
|
31
|
+
fetchOptions: A,
|
|
32
|
+
credentials: C,
|
|
33
|
+
headers: P,
|
|
34
|
+
includeExtensions: S
|
|
35
|
+
} = {}) {
|
|
36
|
+
const I = {
|
|
37
|
+
http: { includeExtensions: S },
|
|
38
|
+
options: A,
|
|
39
|
+
credentials: C,
|
|
40
|
+
headers: P
|
|
41
|
+
};
|
|
42
|
+
return new q((l) => {
|
|
43
|
+
const p = l.getContext(), {
|
|
44
|
+
// Apollo Studio client awareness `name` and `version` can be configured
|
|
45
|
+
// via `ApolloClient` constructor options:
|
|
46
|
+
// https://www.apollographql.com/docs/graphos/metrics/client-awareness/#setup
|
|
47
|
+
clientAwareness: { name: u, version: h } = {},
|
|
48
|
+
headers: D
|
|
49
|
+
} = p, R = {
|
|
50
|
+
http: p.http,
|
|
51
|
+
options: p.fetchOptions,
|
|
52
|
+
credentials: p.credentials,
|
|
53
|
+
headers: m(m(m({}, u && { "apollographql-client-name": u }), h && { "apollographql-client-version": h }), D)
|
|
54
|
+
}, { options: o, body: g } = G(
|
|
55
|
+
l,
|
|
56
|
+
F,
|
|
57
|
+
J,
|
|
58
|
+
I,
|
|
59
|
+
R
|
|
60
|
+
), { clone: y, files: c } = j(g, e, "");
|
|
61
|
+
let f = L(l, n);
|
|
62
|
+
if (c.size) {
|
|
63
|
+
o.headers && delete o.headers["content-type"];
|
|
64
|
+
const a = E || FormData, i = new a();
|
|
65
|
+
i.append("operations", JSON.stringify(y));
|
|
66
|
+
const r = {};
|
|
67
|
+
let d = 0;
|
|
68
|
+
c.forEach((b) => {
|
|
69
|
+
r[++d] = b;
|
|
70
|
+
}), i.append("map", JSON.stringify(r)), d = 0, c.forEach((b, k) => {
|
|
71
|
+
x(i, String(++d), k);
|
|
72
|
+
}), o.body = i;
|
|
73
|
+
} else if (t && !l.query.definitions.some(
|
|
74
|
+
(a) => a.kind === "OperationDefinition" && a.operation === "mutation"
|
|
75
|
+
) && (o.method = "GET"), o.method === "GET") {
|
|
76
|
+
const { newURI: a, parseError: i } = N(f, g);
|
|
77
|
+
if (i)
|
|
78
|
+
return new O((r) => {
|
|
79
|
+
r.error(i);
|
|
80
|
+
});
|
|
81
|
+
f = a;
|
|
82
|
+
} else
|
|
83
|
+
o.body = JSON.stringify(y);
|
|
84
|
+
const { controller: s } = M();
|
|
85
|
+
typeof s != "boolean" && (o.signal && (o.signal.aborted ? s.abort() : o.signal.addEventListener(
|
|
86
|
+
"abort",
|
|
87
|
+
() => {
|
|
88
|
+
s.abort();
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
// Prevent a memory leak if the user configured abort controller
|
|
92
|
+
// is long lasting, or controls multiple things.
|
|
93
|
+
once: !0
|
|
94
|
+
}
|
|
95
|
+
)), o.signal = s.signal);
|
|
96
|
+
const U = v || fetch;
|
|
97
|
+
return new O((a) => {
|
|
98
|
+
let i;
|
|
99
|
+
return U(f, o).then((r) => (l.setContext({ response: r }), r)).then(T(l)).then((r) => {
|
|
100
|
+
a.next(r), a.complete();
|
|
101
|
+
}).catch((r) => {
|
|
102
|
+
i || (r.result && r.result.errors && r.result.data && a.next(r.result), a.error(r));
|
|
103
|
+
}), () => {
|
|
104
|
+
i = !0, typeof s != "boolean" && s.abort();
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
tt as createUploadLink
|
|
111
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyberskill/shared",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.16.0",
|
|
5
5
|
"description": "CyberSkill Shared",
|
|
6
6
|
"author": "Stephen Cheng",
|
|
7
7
|
"license": "MIT",
|
|
@@ -221,7 +221,6 @@
|
|
|
221
221
|
"@nestjs/core": "11.1.6",
|
|
222
222
|
"@userback/widget": "0.3.11",
|
|
223
223
|
"@vitejs/plugin-react-swc": "4.0.1",
|
|
224
|
-
"apollo-upload-client": "18.0.1",
|
|
225
224
|
"body-parser": "2.2.0",
|
|
226
225
|
"chalk": "5.6.0",
|
|
227
226
|
"clsx": "2.1.1",
|
|
@@ -238,6 +237,7 @@
|
|
|
238
237
|
"express": "5.1.0",
|
|
239
238
|
"express-session": "1.18.2",
|
|
240
239
|
"express-useragent": "1.0.15",
|
|
240
|
+
"extract-files": "13.0.0",
|
|
241
241
|
"fs-extra": "11.3.1",
|
|
242
242
|
"globals": "16.3.0",
|
|
243
243
|
"graphql": "16.11.0",
|
|
@@ -275,7 +275,6 @@
|
|
|
275
275
|
"@next/eslint-plugin-next": "15.5.0",
|
|
276
276
|
"@testing-library/jest-dom": "6.8.0",
|
|
277
277
|
"@testing-library/react": "16.3.0",
|
|
278
|
-
"@types/apollo-upload-client": "18.0.0",
|
|
279
278
|
"@types/body-parser": "1.19.6",
|
|
280
279
|
"@types/compression": "1.8.1",
|
|
281
280
|
"@types/cookie-parser": "1.4.9",
|
|
@@ -284,6 +283,7 @@
|
|
|
284
283
|
"@types/express": "5.0.3",
|
|
285
284
|
"@types/express-session": "1.18.2",
|
|
286
285
|
"@types/express-useragent": "1.0.5",
|
|
286
|
+
"@types/extract-files": "13.0.1",
|
|
287
287
|
"@types/fs-extra": "11.0.4",
|
|
288
288
|
"@types/graphql-upload": "17.0.0",
|
|
289
289
|
"@types/lodash-es": "4.17.12",
|