@isograph/react 0.0.0-main-39c44f34 → 0.0.0-main-2a44e7fd

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.
@@ -1,5 +1,5 @@
1
1
  ../.. |  WARN  Unsupported engine: wanted: {"node":"22.9.0"} (current: {"node":"v22.20.0","pnpm":"10.15.0"})
2
2
 
3
- > @isograph/react@0.0.0-main-39c44f34 compile-libs /home/runner/work/isograph/isograph/libs/isograph-react
3
+ > @isograph/react@0.0.0-main-2a44e7fd compile-libs /home/runner/work/isograph/isograph/libs/isograph-react
4
4
  > rimraf dist && tsc -p tsconfig.pkg.json
5
5
 
@@ -1,10 +1,15 @@
1
1
  import { FetchOptions } from '../core/check';
2
2
  import { ExtractParameters, FragmentReference, type UnknownTReadFromStore } from '../core/FragmentReference';
3
3
  import { LoadableField } from '../core/reader';
4
- export declare function useClientSideDefer<TReadFromStore extends UnknownTReadFromStore, TResult>(loadableField: LoadableField<TReadFromStore, TResult, ExtractParameters<TReadFromStore>>, args?: Record<PropertyKey, never>, fetchOptions?: FetchOptions<TResult>): {
5
- fragmentReference: FragmentReference<TReadFromStore, TResult>;
6
- };
7
- export declare function useClientSideDefer<TReadFromStore extends UnknownTReadFromStore, TResult, TProvidedArgs extends object>(loadableField: LoadableField<TReadFromStore, TResult, Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>>, args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>, fetchOptions?: FetchOptions<TResult>): {
4
+ type ArgsWithoutProvidedArgs<TReadFromStore extends UnknownTReadFromStore, TProvidedArgs extends object> = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
5
+ export declare function useClientSideDefer<TReadFromStore extends UnknownTReadFromStore, TResult, TProvidedArgs extends object>(loadableField: LoadableField<TReadFromStore, TResult, Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>>, ...maybeRequiredArgs: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs> extends Record<PropertyKey, never> ? [
6
+ args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>,
7
+ fetchOptions?: FetchOptions<TResult>
8
+ ] : [
9
+ args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>,
10
+ fetchOptions?: FetchOptions<TResult>
11
+ ]): {
8
12
  fragmentReference: FragmentReference<TReadFromStore, TResult>;
9
13
  };
14
+ export {};
10
15
  //# sourceMappingURL=useClientSideDefer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useClientSideDefer.d.ts","sourceRoot":"","sources":["../../src/loadable-hooks/useClientSideDefer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,wBAAgB,kBAAkB,CAChC,cAAc,SAAS,qBAAqB,EAC5C,OAAO,EAEP,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,OAAO,EACP,iBAAiB,CAAC,cAAc,CAAC,CAClC,EACD,IAAI,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,EACjC,YAAY,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,GACnC;IAAE,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAErE,wBAAgB,kBAAkB,CAChC,cAAc,SAAS,qBAAqB,EAC5C,OAAO,EACP,aAAa,SAAS,MAAM,EAE5B,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,OAAO,EACP,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAC7D,EACD,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,EAClE,YAAY,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,GACnC;IAAE,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"useClientSideDefer.d.ts","sourceRoot":"","sources":["../../src/loadable-hooks/useClientSideDefer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,KAAK,uBAAuB,CAC1B,cAAc,SAAS,qBAAqB,EAC5C,aAAa,SAAS,MAAM,IAC1B,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAAC;AAEjE,wBAAgB,kBAAkB,CAChC,cAAc,SAAS,qBAAqB,EAC5C,OAAO,EACP,aAAa,SAAS,MAAM,EAE5B,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,OAAO,EACP,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAC7D,EACD,GAAG,iBAAiB,EAAE,uBAAuB,CAC3C,cAAc,EACd,aAAa,CACd,SAAS,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAChC;IACE,IAAI,CAAC,EAAE,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC;IAC7D,YAAY,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC;CACrC,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC;IAC5D,YAAY,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC;CACrC,GACJ;IAAE,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;CAAE,CAUnE"}
@@ -4,7 +4,8 @@ exports.useClientSideDefer = useClientSideDefer;
4
4
  const react_disposable_state_1 = require("@isograph/react-disposable-state");
5
5
  const cache_1 = require("../core/cache");
6
6
  const IsographEnvironmentProvider_1 = require("../react/IsographEnvironmentProvider");
7
- function useClientSideDefer(loadableField, args, fetchOptions) {
7
+ function useClientSideDefer(loadableField, ...maybeRequiredArgs) {
8
+ const [args, fetchOptions] = maybeRequiredArgs;
8
9
  const [id, loader] = loadableField(args, fetchOptions !== null && fetchOptions !== void 0 ? fetchOptions : {});
9
10
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
10
11
  const cache = (0, cache_1.getOrCreateItemInSuspenseCache)(environment, id, loader);
@@ -2,11 +2,17 @@ import { type FetchOptions } from '../core/check';
2
2
  import { ExtractParameters, type UnknownTReadFromStore } from '../core/FragmentReference';
3
3
  import { type NetworkRequestReaderOptions } from '../core/read';
4
4
  import { type LoadableField } from '../core/reader';
5
+ type ArgsWithoutProvidedArgs<TReadFromStore extends UnknownTReadFromStore, TProvidedArgs extends object> = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
6
+ type MaybeRequiredArgs<TReadFromStore extends UnknownTReadFromStore, TProvidedArgs extends object> = ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs> extends Record<PropertyKey, never> ? {
7
+ args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
8
+ } : {
9
+ args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
10
+ };
5
11
  export declare function LoadableFieldReader<TReadFromStore extends UnknownTReadFromStore, TResult, TProvidedArgs extends object, TChildrenResult>(props: {
6
12
  loadableField: LoadableField<TReadFromStore, TResult, Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>>;
7
- args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
8
13
  fetchOptions?: FetchOptions<TResult>;
9
14
  networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
10
15
  children: (arg: TResult) => TChildrenResult;
11
- }): TChildrenResult;
16
+ } & MaybeRequiredArgs<TReadFromStore, TProvidedArgs>): TChildrenResult;
17
+ export {};
12
18
  //# sourceMappingURL=LoadableFieldReader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoadableFieldReader.d.ts","sourceRoot":"","sources":["../../src/react/LoadableFieldReader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,wBAAgB,mBAAmB,CACjC,cAAc,SAAS,qBAAqB,EAC5C,OAAO,EACP,aAAa,SAAS,MAAM,EAC5B,eAAe,EACf,KAAK,EAAE;IACP,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,OAAO,EACP,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAC7D,CAAC;IAEF,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,qBAAqB,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7D,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,eAAe,CAAC;CAC7C,GAAG,eAAe,CAalB"}
1
+ {"version":3,"file":"LoadableFieldReader.d.ts","sourceRoot":"","sources":["../../src/react/LoadableFieldReader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,KAAK,uBAAuB,CAC1B,cAAc,SAAS,qBAAqB,EAC5C,aAAa,SAAS,MAAM,IAC1B,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAAC;AAEjE,KAAK,iBAAiB,CACpB,cAAc,SAAS,qBAAqB,EAC5C,aAAa,SAAS,MAAM,IAE5B,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC,SAAS,MAAM,CACnE,WAAW,EACX,KAAK,CACN,GACG;IACE,IAAI,CAAC,EAAE,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;CAC/D,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;CAC9D,CAAC;AAER,wBAAgB,mBAAmB,CACjC,cAAc,SAAS,qBAAqB,EAC5C,OAAO,EACP,aAAa,SAAS,MAAM,EAC5B,eAAe,EAEf,KAAK,EAAE;IACL,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,OAAO,EACP,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAC7D,CAAC;IACF,YAAY,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,qBAAqB,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7D,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,eAAe,CAAC;CAC7C,GAAG,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,GACnD,eAAe,CAcjB"}
@@ -4,7 +4,9 @@ exports.LoadableFieldReader = LoadableFieldReader;
4
4
  const useClientSideDefer_1 = require("../loadable-hooks/useClientSideDefer");
5
5
  const useResult_1 = require("./useResult");
6
6
  function LoadableFieldReader(props) {
7
- const { fragmentReference } = (0, useClientSideDefer_1.useClientSideDefer)(props.loadableField, props.args, props.fetchOptions);
7
+ const { fragmentReference } = (0, useClientSideDefer_1.useClientSideDefer)(props.loadableField,
8
+ // @ts-expect-error
9
+ props.args, props.fetchOptions);
8
10
  const readOutFragmentData = (0, useResult_1.useResult)(fragmentReference, props.networkRequestOptions);
9
11
  return props.children(readOutFragmentData);
10
12
  }
@@ -3,11 +3,17 @@ import { type FetchOptions } from '../core/check';
3
3
  import { ExtractParameters, type UnknownTReadFromStore } from '../core/FragmentReference';
4
4
  import { type NetworkRequestReaderOptions } from '../core/read';
5
5
  import { type LoadableField } from '../core/reader';
6
+ type ArgsWithoutProvidedArgs<TReadFromStore extends UnknownTReadFromStore, TProvidedArgs extends object> = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
7
+ type MaybeRequiredArgs<TReadFromStore extends UnknownTReadFromStore, TProvidedArgs extends object> = ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs> extends Record<PropertyKey, never> ? {
8
+ args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
9
+ } : {
10
+ args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
11
+ };
6
12
  export declare function LoadableFieldRenderer<TReadFromStore extends UnknownTReadFromStore, TProvidedArgs extends object, TChildrenResult, TProps>(props: {
7
13
  loadableField: LoadableField<TReadFromStore, React.FC<TProps>, Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>>;
8
- args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
9
14
  fetchOptions?: FetchOptions<React.FC<TProps>>;
10
15
  networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
11
16
  additionalProps: Omit<TProps, keyof JSX.IntrinsicAttributes>;
12
- }): TChildrenResult;
17
+ } & MaybeRequiredArgs<TReadFromStore, TProvidedArgs>): TChildrenResult;
18
+ export {};
13
19
  //# sourceMappingURL=LoadableFieldRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoadableFieldRenderer.d.ts","sourceRoot":"","sources":["../../src/react/LoadableFieldRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,wBAAgB,qBAAqB,CACnC,cAAc,SAAS,qBAAqB,EAC5C,aAAa,SAAS,MAAM,EAC5B,eAAe,EACf,MAAM,EACN,KAAK,EAAE;IACP,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAChB,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAC7D,CAAC;IAEF,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,qBAAqB,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7D,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,mBAAmB,CAAC,CAAC;CAC9D,GAAG,eAAe,CAalB"}
1
+ {"version":3,"file":"LoadableFieldRenderer.d.ts","sourceRoot":"","sources":["../../src/react/LoadableFieldRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,KAAK,uBAAuB,CAC1B,cAAc,SAAS,qBAAqB,EAC5C,aAAa,SAAS,MAAM,IAC1B,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAAC;AAEjE,KAAK,iBAAiB,CACpB,cAAc,SAAS,qBAAqB,EAC5C,aAAa,SAAS,MAAM,IAE5B,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC,SAAS,MAAM,CACnE,WAAW,EACX,KAAK,CACN,GACG;IACE,IAAI,CAAC,EAAE,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;CAC/D,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;CAC9D,CAAC;AAER,wBAAgB,qBAAqB,CACnC,cAAc,SAAS,qBAAqB,EAC5C,aAAa,SAAS,MAAM,EAC5B,eAAe,EACf,MAAM,EAEN,KAAK,EAAE;IACL,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAChB,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAC7D,CAAC;IACF,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,qBAAqB,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7D,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,mBAAmB,CAAC,CAAC;CAC9D,GAAG,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,GACnD,eAAe,CAcjB"}
@@ -28,7 +28,9 @@ const React = __importStar(require("react"));
28
28
  const useClientSideDefer_1 = require("../loadable-hooks/useClientSideDefer");
29
29
  const useResult_1 = require("./useResult");
30
30
  function LoadableFieldRenderer(props) {
31
- const { fragmentReference } = (0, useClientSideDefer_1.useClientSideDefer)(props.loadableField, props.args, props.fetchOptions);
31
+ const { fragmentReference } = (0, useClientSideDefer_1.useClientSideDefer)(props.loadableField,
32
+ // @ts-expect-error
33
+ props.args, props.fetchOptions);
32
34
  const Component = (0, useResult_1.useResult)(fragmentReference, props.networkRequestOptions);
33
35
  // TODO we probably can figure out a way to convince TypeScript of
34
36
  // the validity of this.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-39c44f34",
3
+ "version": "0.0.0-main-2a44e7fd",
4
4
  "description": "Use Isograph with React",
5
5
  "homepage": "https://isograph.dev",
6
6
  "main": "dist/index.js",
@@ -19,9 +19,9 @@
19
19
  "iso": "cross-env ISO_PRINT_ABSOLUTE_FILEPATH=1 ../../target/debug/isograph_cli --config ./isograph.config.json"
20
20
  },
21
21
  "dependencies": {
22
- "@isograph/disposable-types": "0.0.0-main-39c44f34",
23
- "@isograph/react-disposable-state": "0.0.0-main-39c44f34",
24
- "@isograph/reference-counted-pointer": "0.0.0-main-39c44f34"
22
+ "@isograph/disposable-types": "0.0.0-main-2a44e7fd",
23
+ "@isograph/react-disposable-state": "0.0.0-main-2a44e7fd",
24
+ "@isograph/reference-counted-pointer": "0.0.0-main-2a44e7fd"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "react": "^18.0.0 || ^19.0.0"
@@ -9,32 +9,10 @@ import {
9
9
  import { LoadableField } from '../core/reader';
10
10
  import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
11
11
 
12
- export function useClientSideDefer<
13
- TReadFromStore extends UnknownTReadFromStore,
14
- TResult,
15
- >(
16
- loadableField: LoadableField<
17
- TReadFromStore,
18
- TResult,
19
- ExtractParameters<TReadFromStore>
20
- >,
21
- args?: Record<PropertyKey, never>,
22
- fetchOptions?: FetchOptions<TResult>,
23
- ): { fragmentReference: FragmentReference<TReadFromStore, TResult> };
24
-
25
- export function useClientSideDefer<
12
+ type ArgsWithoutProvidedArgs<
26
13
  TReadFromStore extends UnknownTReadFromStore,
27
- TResult,
28
14
  TProvidedArgs extends object,
29
- >(
30
- loadableField: LoadableField<
31
- TReadFromStore,
32
- TResult,
33
- Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
34
- >,
35
- args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>,
36
- fetchOptions?: FetchOptions<TResult>,
37
- ): { fragmentReference: FragmentReference<TReadFromStore, TResult> };
15
+ > = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
38
16
 
39
17
  export function useClientSideDefer<
40
18
  TReadFromStore extends UnknownTReadFromStore,
@@ -46,9 +24,21 @@ export function useClientSideDefer<
46
24
  TResult,
47
25
  Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
48
26
  >,
49
- args?: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>,
50
- fetchOptions?: FetchOptions<TResult>,
27
+ ...maybeRequiredArgs: ArgsWithoutProvidedArgs<
28
+ TReadFromStore,
29
+ TProvidedArgs
30
+ > extends Record<PropertyKey, never>
31
+ ? [
32
+ args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>,
33
+ fetchOptions?: FetchOptions<TResult>,
34
+ ]
35
+ : [
36
+ args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>,
37
+ fetchOptions?: FetchOptions<TResult>,
38
+ ]
51
39
  ): { fragmentReference: FragmentReference<TReadFromStore, TResult> } {
40
+ const [args, fetchOptions] = maybeRequiredArgs;
41
+
52
42
  const [id, loader] = loadableField(args, fetchOptions ?? {});
53
43
  const environment = useIsographEnvironment();
54
44
  const cache = getOrCreateItemInSuspenseCache(environment, id, loader);
@@ -8,25 +8,46 @@ import { type LoadableField } from '../core/reader';
8
8
  import { useClientSideDefer } from '../loadable-hooks/useClientSideDefer';
9
9
  import { useResult } from './useResult';
10
10
 
11
+ type ArgsWithoutProvidedArgs<
12
+ TReadFromStore extends UnknownTReadFromStore,
13
+ TProvidedArgs extends object,
14
+ > = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
15
+
16
+ type MaybeRequiredArgs<
17
+ TReadFromStore extends UnknownTReadFromStore,
18
+ TProvidedArgs extends object,
19
+ > =
20
+ ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs> extends Record<
21
+ PropertyKey,
22
+ never
23
+ >
24
+ ? {
25
+ args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
26
+ }
27
+ : {
28
+ args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
29
+ };
30
+
11
31
  export function LoadableFieldReader<
12
32
  TReadFromStore extends UnknownTReadFromStore,
13
33
  TResult,
14
34
  TProvidedArgs extends object,
15
35
  TChildrenResult,
16
- >(props: {
17
- loadableField: LoadableField<
18
- TReadFromStore,
19
- TResult,
20
- Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
21
- >;
22
- // TODO we can improve this to not require args if its an empty object
23
- args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
24
- fetchOptions?: FetchOptions<TResult>;
25
- networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
26
- children: (arg: TResult) => TChildrenResult;
27
- }): TChildrenResult {
36
+ >(
37
+ props: {
38
+ loadableField: LoadableField<
39
+ TReadFromStore,
40
+ TResult,
41
+ Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
42
+ >;
43
+ fetchOptions?: FetchOptions<TResult>;
44
+ networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
45
+ children: (arg: TResult) => TChildrenResult;
46
+ } & MaybeRequiredArgs<TReadFromStore, TProvidedArgs>,
47
+ ): TChildrenResult {
28
48
  const { fragmentReference } = useClientSideDefer(
29
49
  props.loadableField,
50
+ // @ts-expect-error
30
51
  props.args,
31
52
  props.fetchOptions,
32
53
  );
@@ -9,25 +9,46 @@ import { type LoadableField } from '../core/reader';
9
9
  import { useClientSideDefer } from '../loadable-hooks/useClientSideDefer';
10
10
  import { useResult } from './useResult';
11
11
 
12
+ type ArgsWithoutProvidedArgs<
13
+ TReadFromStore extends UnknownTReadFromStore,
14
+ TProvidedArgs extends object,
15
+ > = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
16
+
17
+ type MaybeRequiredArgs<
18
+ TReadFromStore extends UnknownTReadFromStore,
19
+ TProvidedArgs extends object,
20
+ > =
21
+ ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs> extends Record<
22
+ PropertyKey,
23
+ never
24
+ >
25
+ ? {
26
+ args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
27
+ }
28
+ : {
29
+ args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
30
+ };
31
+
12
32
  export function LoadableFieldRenderer<
13
33
  TReadFromStore extends UnknownTReadFromStore,
14
34
  TProvidedArgs extends object,
15
35
  TChildrenResult,
16
36
  TProps,
17
- >(props: {
18
- loadableField: LoadableField<
19
- TReadFromStore,
20
- React.FC<TProps>,
21
- Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
22
- >;
23
- // TODO we can improve this to not require args if its an empty object
24
- args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
25
- fetchOptions?: FetchOptions<React.FC<TProps>>;
26
- networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
27
- additionalProps: Omit<TProps, keyof JSX.IntrinsicAttributes>;
28
- }): TChildrenResult {
37
+ >(
38
+ props: {
39
+ loadableField: LoadableField<
40
+ TReadFromStore,
41
+ React.FC<TProps>,
42
+ Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
43
+ >;
44
+ fetchOptions?: FetchOptions<React.FC<TProps>>;
45
+ networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
46
+ additionalProps: Omit<TProps, keyof JSX.IntrinsicAttributes>;
47
+ } & MaybeRequiredArgs<TReadFromStore, TProvidedArgs>,
48
+ ): TChildrenResult {
29
49
  const { fragmentReference } = useClientSideDefer(
30
50
  props.loadableField,
51
+ // @ts-expect-error
31
52
  props.args,
32
53
  props.fetchOptions,
33
54
  );