@remix-relay/server 2.3.0 → 2.4.1

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/index.d.mts CHANGED
@@ -18,6 +18,6 @@ type LoaderQuery = <TQuery extends OperationType>(...args: LoaderQueryArgs<TQuer
18
18
  preloadedQuery: SerializablePreloadedQuery<TQuery, InitialIncrementalExecutionResult<TQuery["response"], PayloadExtensions>>;
19
19
  deferredQueries: Promise<SerializablePreloadedQuery<TQuery, SubsequentIncrementalExecutionResult<TQuery["response"], PayloadExtensions>>[]>;
20
20
  }>;
21
- declare const getLoaderQuery: <TContext>(schema: GraphQLSchema, context?: TContext) => LoaderQuery;
21
+ declare const getLoaderQuery: <TContext>(schema: GraphQLSchema, context?: TContext, queryMap?: Record<string, string>) => LoaderQuery;
22
22
 
23
23
  export { type LoaderQueryArgs, getLoaderQuery };
package/dist/index.d.ts CHANGED
@@ -18,6 +18,6 @@ type LoaderQuery = <TQuery extends OperationType>(...args: LoaderQueryArgs<TQuer
18
18
  preloadedQuery: SerializablePreloadedQuery<TQuery, InitialIncrementalExecutionResult<TQuery["response"], PayloadExtensions>>;
19
19
  deferredQueries: Promise<SerializablePreloadedQuery<TQuery, SubsequentIncrementalExecutionResult<TQuery["response"], PayloadExtensions>>[]>;
20
20
  }>;
21
- declare const getLoaderQuery: <TContext>(schema: GraphQLSchema, context?: TContext) => LoaderQuery;
21
+ declare const getLoaderQuery: <TContext>(schema: GraphQLSchema, context?: TContext, queryMap?: Record<string, string>) => LoaderQuery;
22
22
 
23
23
  export { type LoaderQueryArgs, getLoaderQuery };
package/dist/index.js CHANGED
@@ -28,11 +28,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
30
  // src/index.ts
31
- var src_exports = {};
32
- __export(src_exports, {
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
33
  getLoaderQuery: () => getLoaderQuery
34
34
  });
35
- module.exports = __toCommonJS(src_exports);
35
+ module.exports = __toCommonJS(index_exports);
36
36
 
37
37
  // src/loader-query.ts
38
38
  var import_executor = require("@graphql-tools/executor");
@@ -41,11 +41,13 @@ var import_tiny_invariant = __toESM(require("tiny-invariant"));
41
41
  function isConcreteRequest(node) {
42
42
  return node.params !== void 0;
43
43
  }
44
- var getLoaderQuery = (schema, context) => {
44
+ var getLoaderQuery = (schema, context, queryMap) => {
45
45
  return async (...args) => {
46
46
  const [node, variables] = args;
47
47
  (0, import_tiny_invariant.default)(isConcreteRequest(node), "Expected a ConcreteRequest");
48
- const document = (0, import_graphql.parse)(node.params.text);
48
+ const queryString = node.params.text ?? (node.params.id && queryMap?.[node.params.id]);
49
+ (0, import_tiny_invariant.default)(queryString, "Expected a query string");
50
+ const document = (0, import_graphql.parse)(queryString);
49
51
  const result = await (0, import_executor.execute)({
50
52
  schema,
51
53
  document,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/loader-query.ts"],"sourcesContent":["export { type LoaderQueryArgs, getLoaderQuery } from \"./loader-query\";\n","import { execute } from \"@graphql-tools/executor\";\nimport {\n FormattedExecutionResult,\n GraphQLSchema,\n InitialIncrementalExecutionResult,\n SubsequentIncrementalExecutionResult,\n parse,\n} from \"graphql\";\nimport type {\n ConcreteRequest,\n GraphQLTaggedNode,\n OperationType,\n RequestParameters,\n VariablesOf,\n} from \"relay-runtime\";\nimport { PayloadExtensions } from \"relay-runtime/lib/network/RelayNetworkTypes\";\nimport invariant from \"tiny-invariant\";\n\nfunction isConcreteRequest(node: GraphQLTaggedNode): node is ConcreteRequest {\n return (node as ConcreteRequest).params !== undefined;\n}\n\nexport type SerializablePreloadedQuery<\n TQuery extends OperationType,\n TResponse,\n> = {\n params: RequestParameters;\n variables: VariablesOf<TQuery>;\n response: TResponse;\n};\n\nexport type LoaderQueryArgs<TQuery extends OperationType> = [\n node: GraphQLTaggedNode,\n variables: VariablesOf<TQuery>,\n];\n\ntype LoaderQuery = <TQuery extends OperationType>(\n ...args: LoaderQueryArgs<TQuery>\n) => Promise<\n | {\n preloadedQuery: SerializablePreloadedQuery<\n TQuery,\n FormattedExecutionResult<TQuery[\"response\"], PayloadExtensions>\n >;\n deferredQueries: null;\n }\n | {\n preloadedQuery: SerializablePreloadedQuery<\n TQuery,\n InitialIncrementalExecutionResult<TQuery[\"response\"], PayloadExtensions>\n >;\n deferredQueries: Promise<\n SerializablePreloadedQuery<\n TQuery,\n SubsequentIncrementalExecutionResult<\n TQuery[\"response\"],\n PayloadExtensions\n >\n >[]\n >;\n }\n>;\n\nexport const getLoaderQuery = <TContext>(\n schema: GraphQLSchema,\n context?: TContext,\n): LoaderQuery => {\n return async <TQuery extends OperationType>(\n ...args: LoaderQueryArgs<TQuery>\n ) => {\n const [node, variables] = args;\n invariant(isConcreteRequest(node), \"Expected a ConcreteRequest\");\n\n const document = parse(node.params.text!);\n\n const result = await execute<TQuery[\"response\"], PayloadExtensions>({\n schema,\n document,\n variableValues: variables,\n contextValue: context,\n });\n\n if (!(\"initialResult\" in result)) {\n if (result.errors?.length) {\n throw new Response(null, {\n status: 404,\n statusText: \"Not Found\",\n });\n }\n\n const preloadedQuery = {\n params: node.params,\n variables,\n response: result,\n };\n\n return { preloadedQuery, deferredQueries: null };\n }\n\n const preloadedQuery = {\n params: node.params,\n variables,\n response: result.initialResult,\n };\n\n const deferredQueries = (async () => {\n const chunks = [];\n\n for await (const chunk of result.subsequentResults) {\n chunks.push(chunk);\n }\n\n return chunks.map(({ incremental, ...rest }, index) => ({\n params: {\n ...node.params,\n cacheID: `${node.params.id ?? node.params.cacheID}-${index}`,\n },\n variables,\n response: { ...rest, ...incremental?.[0] },\n }));\n })();\n\n return { preloadedQuery, deferredQueries };\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,sBAAwB;AACxB,qBAMO;AASP,4BAAsB;AAEtB,SAAS,kBAAkB,MAAkD;AAC3E,SAAQ,KAAyB,WAAW;AAC9C;AA2CO,IAAM,iBAAiB,CAC5B,QACA,YACgB;AAChB,SAAO,UACF,SACA;AACH,UAAM,CAAC,MAAM,SAAS,IAAI;AAC1B,8BAAAA,SAAU,kBAAkB,IAAI,GAAG,4BAA4B;AAE/D,UAAM,eAAW,sBAAM,KAAK,OAAO,IAAK;AAExC,UAAM,SAAS,UAAM,yBAA+C;AAAA,MAClE;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,EAAE,mBAAmB,SAAS;AAChC,UAAI,OAAO,QAAQ,QAAQ;AACzB,cAAM,IAAI,SAAS,MAAM;AAAA,UACvB,QAAQ;AAAA,UACR,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AAEA,YAAMC,kBAAiB;AAAA,QACrB,QAAQ,KAAK;AAAA,QACb;AAAA,QACA,UAAU;AAAA,MACZ;AAEA,aAAO,EAAE,gBAAAA,iBAAgB,iBAAiB,KAAK;AAAA,IACjD;AAEA,UAAM,iBAAiB;AAAA,MACrB,QAAQ,KAAK;AAAA,MACb;AAAA,MACA,UAAU,OAAO;AAAA,IACnB;AAEA,UAAM,mBAAmB,YAAY;AACnC,YAAM,SAAS,CAAC;AAEhB,uBAAiB,SAAS,OAAO,mBAAmB;AAClD,eAAO,KAAK,KAAK;AAAA,MACnB;AAEA,aAAO,OAAO,IAAI,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,WAAW;AAAA,QACtD,QAAQ;AAAA,UACN,GAAG,KAAK;AAAA,UACR,SAAS,GAAG,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,IAAI,KAAK;AAAA,QAC5D;AAAA,QACA;AAAA,QACA,UAAU,EAAE,GAAG,MAAM,GAAG,cAAc,CAAC,EAAE;AAAA,MAC3C,EAAE;AAAA,IACJ,GAAG;AAEH,WAAO,EAAE,gBAAgB,gBAAgB;AAAA,EAC3C;AACF;","names":["invariant","preloadedQuery"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/loader-query.ts"],"sourcesContent":["export { type LoaderQueryArgs, getLoaderQuery } from \"./loader-query\";\n","import { execute } from \"@graphql-tools/executor\";\nimport {\n FormattedExecutionResult,\n GraphQLSchema,\n InitialIncrementalExecutionResult,\n SubsequentIncrementalExecutionResult,\n parse,\n} from \"graphql\";\nimport type {\n ConcreteRequest,\n GraphQLTaggedNode,\n OperationType,\n RequestParameters,\n VariablesOf,\n} from \"relay-runtime\";\nimport { PayloadExtensions } from \"relay-runtime/lib/network/RelayNetworkTypes\";\nimport invariant from \"tiny-invariant\";\n\nfunction isConcreteRequest(node: GraphQLTaggedNode): node is ConcreteRequest {\n return (node as ConcreteRequest).params !== undefined;\n}\n\nexport type SerializablePreloadedQuery<\n TQuery extends OperationType,\n TResponse,\n> = {\n params: RequestParameters;\n variables: VariablesOf<TQuery>;\n response: TResponse;\n};\n\nexport type LoaderQueryArgs<TQuery extends OperationType> = [\n node: GraphQLTaggedNode,\n variables: VariablesOf<TQuery>,\n];\n\ntype LoaderQuery = <TQuery extends OperationType>(\n ...args: LoaderQueryArgs<TQuery>\n) => Promise<\n | {\n preloadedQuery: SerializablePreloadedQuery<\n TQuery,\n FormattedExecutionResult<TQuery[\"response\"], PayloadExtensions>\n >;\n deferredQueries: null;\n }\n | {\n preloadedQuery: SerializablePreloadedQuery<\n TQuery,\n InitialIncrementalExecutionResult<TQuery[\"response\"], PayloadExtensions>\n >;\n deferredQueries: Promise<\n SerializablePreloadedQuery<\n TQuery,\n SubsequentIncrementalExecutionResult<\n TQuery[\"response\"],\n PayloadExtensions\n >\n >[]\n >;\n }\n>;\n\nexport const getLoaderQuery = <TContext>(\n schema: GraphQLSchema,\n context?: TContext,\n queryMap?: Record<string, string>,\n): LoaderQuery => {\n return async <TQuery extends OperationType>(\n ...args: LoaderQueryArgs<TQuery>\n ) => {\n const [node, variables] = args;\n invariant(isConcreteRequest(node), \"Expected a ConcreteRequest\");\n\n const queryString =\n node.params.text ?? (node.params.id && queryMap?.[node.params.id]);\n\n invariant(queryString, \"Expected a query string\");\n\n const document = parse(queryString);\n\n const result = await execute<TQuery[\"response\"], PayloadExtensions>({\n schema,\n document,\n variableValues: variables,\n contextValue: context,\n });\n\n if (!(\"initialResult\" in result)) {\n if (result.errors?.length) {\n throw new Response(null, {\n status: 404,\n statusText: \"Not Found\",\n });\n }\n\n const preloadedQuery = {\n params: node.params,\n variables,\n response: result,\n };\n\n return { preloadedQuery, deferredQueries: null };\n }\n\n const preloadedQuery = {\n params: node.params,\n variables,\n response: result.initialResult,\n };\n\n const deferredQueries = (async () => {\n const chunks = [];\n\n for await (const chunk of result.subsequentResults) {\n chunks.push(chunk);\n }\n\n return chunks.map(({ incremental, ...rest }, index) => ({\n params: {\n ...node.params,\n cacheID: `${node.params.id ?? node.params.cacheID}-${index}`,\n },\n variables,\n response: { ...rest, ...incremental?.[0] },\n }));\n })();\n\n return { preloadedQuery, deferredQueries };\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,sBAAwB;AACxB,qBAMO;AASP,4BAAsB;AAEtB,SAAS,kBAAkB,MAAkD;AAC3E,SAAQ,KAAyB,WAAW;AAC9C;AA2CO,IAAM,iBAAiB,CAC5B,QACA,SACA,aACgB;AAChB,SAAO,UACF,SACA;AACH,UAAM,CAAC,MAAM,SAAS,IAAI;AAC1B,8BAAAA,SAAU,kBAAkB,IAAI,GAAG,4BAA4B;AAE/D,UAAM,cACJ,KAAK,OAAO,SAAS,KAAK,OAAO,MAAM,WAAW,KAAK,OAAO,EAAE;AAElE,8BAAAA,SAAU,aAAa,yBAAyB;AAEhD,UAAM,eAAW,sBAAM,WAAW;AAElC,UAAM,SAAS,UAAM,yBAA+C;AAAA,MAClE;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,EAAE,mBAAmB,SAAS;AAChC,UAAI,OAAO,QAAQ,QAAQ;AACzB,cAAM,IAAI,SAAS,MAAM;AAAA,UACvB,QAAQ;AAAA,UACR,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AAEA,YAAMC,kBAAiB;AAAA,QACrB,QAAQ,KAAK;AAAA,QACb;AAAA,QACA,UAAU;AAAA,MACZ;AAEA,aAAO,EAAE,gBAAAA,iBAAgB,iBAAiB,KAAK;AAAA,IACjD;AAEA,UAAM,iBAAiB;AAAA,MACrB,QAAQ,KAAK;AAAA,MACb;AAAA,MACA,UAAU,OAAO;AAAA,IACnB;AAEA,UAAM,mBAAmB,YAAY;AACnC,YAAM,SAAS,CAAC;AAEhB,uBAAiB,SAAS,OAAO,mBAAmB;AAClD,eAAO,KAAK,KAAK;AAAA,MACnB;AAEA,aAAO,OAAO,IAAI,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,WAAW;AAAA,QACtD,QAAQ;AAAA,UACN,GAAG,KAAK;AAAA,UACR,SAAS,GAAG,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,IAAI,KAAK;AAAA,QAC5D;AAAA,QACA;AAAA,QACA,UAAU,EAAE,GAAG,MAAM,GAAG,cAAc,CAAC,EAAE;AAAA,MAC3C,EAAE;AAAA,IACJ,GAAG;AAEH,WAAO,EAAE,gBAAgB,gBAAgB;AAAA,EAC3C;AACF;","names":["invariant","preloadedQuery"]}
package/dist/index.mjs CHANGED
@@ -7,11 +7,13 @@ import invariant from "tiny-invariant";
7
7
  function isConcreteRequest(node) {
8
8
  return node.params !== void 0;
9
9
  }
10
- var getLoaderQuery = (schema, context) => {
10
+ var getLoaderQuery = (schema, context, queryMap) => {
11
11
  return async (...args) => {
12
12
  const [node, variables] = args;
13
13
  invariant(isConcreteRequest(node), "Expected a ConcreteRequest");
14
- const document = parse(node.params.text);
14
+ const queryString = node.params.text ?? (node.params.id && queryMap?.[node.params.id]);
15
+ invariant(queryString, "Expected a query string");
16
+ const document = parse(queryString);
15
17
  const result = await execute({
16
18
  schema,
17
19
  document,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/loader-query.ts"],"sourcesContent":["import { execute } from \"@graphql-tools/executor\";\nimport {\n FormattedExecutionResult,\n GraphQLSchema,\n InitialIncrementalExecutionResult,\n SubsequentIncrementalExecutionResult,\n parse,\n} from \"graphql\";\nimport type {\n ConcreteRequest,\n GraphQLTaggedNode,\n OperationType,\n RequestParameters,\n VariablesOf,\n} from \"relay-runtime\";\nimport { PayloadExtensions } from \"relay-runtime/lib/network/RelayNetworkTypes\";\nimport invariant from \"tiny-invariant\";\n\nfunction isConcreteRequest(node: GraphQLTaggedNode): node is ConcreteRequest {\n return (node as ConcreteRequest).params !== undefined;\n}\n\nexport type SerializablePreloadedQuery<\n TQuery extends OperationType,\n TResponse,\n> = {\n params: RequestParameters;\n variables: VariablesOf<TQuery>;\n response: TResponse;\n};\n\nexport type LoaderQueryArgs<TQuery extends OperationType> = [\n node: GraphQLTaggedNode,\n variables: VariablesOf<TQuery>,\n];\n\ntype LoaderQuery = <TQuery extends OperationType>(\n ...args: LoaderQueryArgs<TQuery>\n) => Promise<\n | {\n preloadedQuery: SerializablePreloadedQuery<\n TQuery,\n FormattedExecutionResult<TQuery[\"response\"], PayloadExtensions>\n >;\n deferredQueries: null;\n }\n | {\n preloadedQuery: SerializablePreloadedQuery<\n TQuery,\n InitialIncrementalExecutionResult<TQuery[\"response\"], PayloadExtensions>\n >;\n deferredQueries: Promise<\n SerializablePreloadedQuery<\n TQuery,\n SubsequentIncrementalExecutionResult<\n TQuery[\"response\"],\n PayloadExtensions\n >\n >[]\n >;\n }\n>;\n\nexport const getLoaderQuery = <TContext>(\n schema: GraphQLSchema,\n context?: TContext,\n): LoaderQuery => {\n return async <TQuery extends OperationType>(\n ...args: LoaderQueryArgs<TQuery>\n ) => {\n const [node, variables] = args;\n invariant(isConcreteRequest(node), \"Expected a ConcreteRequest\");\n\n const document = parse(node.params.text!);\n\n const result = await execute<TQuery[\"response\"], PayloadExtensions>({\n schema,\n document,\n variableValues: variables,\n contextValue: context,\n });\n\n if (!(\"initialResult\" in result)) {\n if (result.errors?.length) {\n throw new Response(null, {\n status: 404,\n statusText: \"Not Found\",\n });\n }\n\n const preloadedQuery = {\n params: node.params,\n variables,\n response: result,\n };\n\n return { preloadedQuery, deferredQueries: null };\n }\n\n const preloadedQuery = {\n params: node.params,\n variables,\n response: result.initialResult,\n };\n\n const deferredQueries = (async () => {\n const chunks = [];\n\n for await (const chunk of result.subsequentResults) {\n chunks.push(chunk);\n }\n\n return chunks.map(({ incremental, ...rest }, index) => ({\n params: {\n ...node.params,\n cacheID: `${node.params.id ?? node.params.cacheID}-${index}`,\n },\n variables,\n response: { ...rest, ...incremental?.[0] },\n }));\n })();\n\n return { preloadedQuery, deferredQueries };\n };\n};\n"],"mappings":";AAAA,SAAS,eAAe;AACxB;AAAA,EAKE;AAAA,OACK;AASP,OAAO,eAAe;AAEtB,SAAS,kBAAkB,MAAkD;AAC3E,SAAQ,KAAyB,WAAW;AAC9C;AA2CO,IAAM,iBAAiB,CAC5B,QACA,YACgB;AAChB,SAAO,UACF,SACA;AACH,UAAM,CAAC,MAAM,SAAS,IAAI;AAC1B,cAAU,kBAAkB,IAAI,GAAG,4BAA4B;AAE/D,UAAM,WAAW,MAAM,KAAK,OAAO,IAAK;AAExC,UAAM,SAAS,MAAM,QAA+C;AAAA,MAClE;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,EAAE,mBAAmB,SAAS;AAChC,UAAI,OAAO,QAAQ,QAAQ;AACzB,cAAM,IAAI,SAAS,MAAM;AAAA,UACvB,QAAQ;AAAA,UACR,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AAEA,YAAMA,kBAAiB;AAAA,QACrB,QAAQ,KAAK;AAAA,QACb;AAAA,QACA,UAAU;AAAA,MACZ;AAEA,aAAO,EAAE,gBAAAA,iBAAgB,iBAAiB,KAAK;AAAA,IACjD;AAEA,UAAM,iBAAiB;AAAA,MACrB,QAAQ,KAAK;AAAA,MACb;AAAA,MACA,UAAU,OAAO;AAAA,IACnB;AAEA,UAAM,mBAAmB,YAAY;AACnC,YAAM,SAAS,CAAC;AAEhB,uBAAiB,SAAS,OAAO,mBAAmB;AAClD,eAAO,KAAK,KAAK;AAAA,MACnB;AAEA,aAAO,OAAO,IAAI,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,WAAW;AAAA,QACtD,QAAQ;AAAA,UACN,GAAG,KAAK;AAAA,UACR,SAAS,GAAG,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,IAAI,KAAK;AAAA,QAC5D;AAAA,QACA;AAAA,QACA,UAAU,EAAE,GAAG,MAAM,GAAG,cAAc,CAAC,EAAE;AAAA,MAC3C,EAAE;AAAA,IACJ,GAAG;AAEH,WAAO,EAAE,gBAAgB,gBAAgB;AAAA,EAC3C;AACF;","names":["preloadedQuery"]}
1
+ {"version":3,"sources":["../src/loader-query.ts"],"sourcesContent":["import { execute } from \"@graphql-tools/executor\";\nimport {\n FormattedExecutionResult,\n GraphQLSchema,\n InitialIncrementalExecutionResult,\n SubsequentIncrementalExecutionResult,\n parse,\n} from \"graphql\";\nimport type {\n ConcreteRequest,\n GraphQLTaggedNode,\n OperationType,\n RequestParameters,\n VariablesOf,\n} from \"relay-runtime\";\nimport { PayloadExtensions } from \"relay-runtime/lib/network/RelayNetworkTypes\";\nimport invariant from \"tiny-invariant\";\n\nfunction isConcreteRequest(node: GraphQLTaggedNode): node is ConcreteRequest {\n return (node as ConcreteRequest).params !== undefined;\n}\n\nexport type SerializablePreloadedQuery<\n TQuery extends OperationType,\n TResponse,\n> = {\n params: RequestParameters;\n variables: VariablesOf<TQuery>;\n response: TResponse;\n};\n\nexport type LoaderQueryArgs<TQuery extends OperationType> = [\n node: GraphQLTaggedNode,\n variables: VariablesOf<TQuery>,\n];\n\ntype LoaderQuery = <TQuery extends OperationType>(\n ...args: LoaderQueryArgs<TQuery>\n) => Promise<\n | {\n preloadedQuery: SerializablePreloadedQuery<\n TQuery,\n FormattedExecutionResult<TQuery[\"response\"], PayloadExtensions>\n >;\n deferredQueries: null;\n }\n | {\n preloadedQuery: SerializablePreloadedQuery<\n TQuery,\n InitialIncrementalExecutionResult<TQuery[\"response\"], PayloadExtensions>\n >;\n deferredQueries: Promise<\n SerializablePreloadedQuery<\n TQuery,\n SubsequentIncrementalExecutionResult<\n TQuery[\"response\"],\n PayloadExtensions\n >\n >[]\n >;\n }\n>;\n\nexport const getLoaderQuery = <TContext>(\n schema: GraphQLSchema,\n context?: TContext,\n queryMap?: Record<string, string>,\n): LoaderQuery => {\n return async <TQuery extends OperationType>(\n ...args: LoaderQueryArgs<TQuery>\n ) => {\n const [node, variables] = args;\n invariant(isConcreteRequest(node), \"Expected a ConcreteRequest\");\n\n const queryString =\n node.params.text ?? (node.params.id && queryMap?.[node.params.id]);\n\n invariant(queryString, \"Expected a query string\");\n\n const document = parse(queryString);\n\n const result = await execute<TQuery[\"response\"], PayloadExtensions>({\n schema,\n document,\n variableValues: variables,\n contextValue: context,\n });\n\n if (!(\"initialResult\" in result)) {\n if (result.errors?.length) {\n throw new Response(null, {\n status: 404,\n statusText: \"Not Found\",\n });\n }\n\n const preloadedQuery = {\n params: node.params,\n variables,\n response: result,\n };\n\n return { preloadedQuery, deferredQueries: null };\n }\n\n const preloadedQuery = {\n params: node.params,\n variables,\n response: result.initialResult,\n };\n\n const deferredQueries = (async () => {\n const chunks = [];\n\n for await (const chunk of result.subsequentResults) {\n chunks.push(chunk);\n }\n\n return chunks.map(({ incremental, ...rest }, index) => ({\n params: {\n ...node.params,\n cacheID: `${node.params.id ?? node.params.cacheID}-${index}`,\n },\n variables,\n response: { ...rest, ...incremental?.[0] },\n }));\n })();\n\n return { preloadedQuery, deferredQueries };\n };\n};\n"],"mappings":";AAAA,SAAS,eAAe;AACxB;AAAA,EAKE;AAAA,OACK;AASP,OAAO,eAAe;AAEtB,SAAS,kBAAkB,MAAkD;AAC3E,SAAQ,KAAyB,WAAW;AAC9C;AA2CO,IAAM,iBAAiB,CAC5B,QACA,SACA,aACgB;AAChB,SAAO,UACF,SACA;AACH,UAAM,CAAC,MAAM,SAAS,IAAI;AAC1B,cAAU,kBAAkB,IAAI,GAAG,4BAA4B;AAE/D,UAAM,cACJ,KAAK,OAAO,SAAS,KAAK,OAAO,MAAM,WAAW,KAAK,OAAO,EAAE;AAElE,cAAU,aAAa,yBAAyB;AAEhD,UAAM,WAAW,MAAM,WAAW;AAElC,UAAM,SAAS,MAAM,QAA+C;AAAA,MAClE;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,EAAE,mBAAmB,SAAS;AAChC,UAAI,OAAO,QAAQ,QAAQ;AACzB,cAAM,IAAI,SAAS,MAAM;AAAA,UACvB,QAAQ;AAAA,UACR,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AAEA,YAAMA,kBAAiB;AAAA,QACrB,QAAQ,KAAK;AAAA,QACb;AAAA,QACA,UAAU;AAAA,MACZ;AAEA,aAAO,EAAE,gBAAAA,iBAAgB,iBAAiB,KAAK;AAAA,IACjD;AAEA,UAAM,iBAAiB;AAAA,MACrB,QAAQ,KAAK;AAAA,MACb;AAAA,MACA,UAAU,OAAO;AAAA,IACnB;AAEA,UAAM,mBAAmB,YAAY;AACnC,YAAM,SAAS,CAAC;AAEhB,uBAAiB,SAAS,OAAO,mBAAmB;AAClD,eAAO,KAAK,KAAK;AAAA,MACnB;AAEA,aAAO,OAAO,IAAI,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,WAAW;AAAA,QACtD,QAAQ;AAAA,UACN,GAAG,KAAK;AAAA,UACR,SAAS,GAAG,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,IAAI,KAAK;AAAA,QAC5D;AAAA,QACA;AAAA,QACA,UAAU,EAAE,GAAG,MAAM,GAAG,cAAc,CAAC,EAAE;AAAA,MAC3C,EAAE;AAAA,IACJ,GAAG;AAEH,WAAO,EAAE,gBAAgB,gBAAgB;AAAA,EAC3C;AACF;","names":["preloadedQuery"]}
@@ -0,0 +1 @@
1
+ {"root":["../tsup.config.ts","../src/index.ts","../src/loader-query.ts"],"version":"5.9.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remix-relay/server",
3
- "version": "2.3.0",
3
+ "version": "2.4.1",
4
4
  "description": "Provides Relay integration with React Router (Framework)",
5
5
  "keywords": [
6
6
  "Remix",
@@ -40,29 +40,29 @@
40
40
  "dist/**"
41
41
  ],
42
42
  "dependencies": {
43
- "@graphql-tools/executor": "^1.3.10",
43
+ "@graphql-tools/executor": "^1.4.9",
44
44
  "tiny-invariant": "^1.3.3"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/eslint": "^9.6.1",
48
- "@types/node": "^22.10.3",
49
- "@types/relay-runtime": "^18.2.3",
48
+ "@types/node": "^24.5.2",
49
+ "@types/relay-runtime": "^19.0.2",
50
50
  "eslint": "^8.57.0",
51
51
  "graphql": "17.0.0-alpha.2",
52
- "relay-runtime": "^18.2.0",
53
- "tsup": "^8.3.5",
54
- "typescript": "~5.7.2",
52
+ "relay-runtime": "^20.1.1",
53
+ "tsup": "^8.5.0",
54
+ "typescript": "~5.9.2",
55
55
  "@remix-relay/eslint-config": "0.0.0",
56
56
  "@remix-relay/typescript-config": "0.0.0"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "graphql": "17.0.0-alpha.2",
60
- "relay-runtime": "^16.1.0"
60
+ "relay-runtime": ">=16"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "tsup",
64
64
  "dev": "tsup --watch",
65
65
  "lint": "eslint . --max-warnings 0",
66
- "typecheck": "tsc --noEmit"
66
+ "typecheck": "tsc -b --noEmit"
67
67
  }
68
68
  }