@trpc/tanstack-react-query 0.0.0-alpha.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 (46) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -0
  3. package/dist/index.d.ts +9 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +11 -0
  6. package/dist/index.mjs +3 -0
  7. package/dist/internals/Context.d.ts +14 -0
  8. package/dist/internals/Context.d.ts.map +1 -0
  9. package/dist/internals/Context.js +52 -0
  10. package/dist/internals/Context.mjs +31 -0
  11. package/dist/internals/createOptionsProxy.d.ts +107 -0
  12. package/dist/internals/createOptionsProxy.d.ts.map +1 -0
  13. package/dist/internals/createOptionsProxy.js +99 -0
  14. package/dist/internals/createOptionsProxy.mjs +97 -0
  15. package/dist/internals/infiniteQueryOptions.d.ts +49 -0
  16. package/dist/internals/infiniteQueryOptions.d.ts.map +1 -0
  17. package/dist/internals/infiniteQueryOptions.js +39 -0
  18. package/dist/internals/infiniteQueryOptions.mjs +37 -0
  19. package/dist/internals/mutationOptions.d.ts +38 -0
  20. package/dist/internals/mutationOptions.d.ts.map +1 -0
  21. package/dist/internals/mutationOptions.js +38 -0
  22. package/dist/internals/mutationOptions.mjs +36 -0
  23. package/dist/internals/queryOptions.d.ts +61 -0
  24. package/dist/internals/queryOptions.d.ts.map +1 -0
  25. package/dist/internals/queryOptions.js +40 -0
  26. package/dist/internals/queryOptions.mjs +38 -0
  27. package/dist/internals/subscriptionOptions.d.ts +77 -0
  28. package/dist/internals/subscriptionOptions.d.ts.map +1 -0
  29. package/dist/internals/subscriptionOptions.js +173 -0
  30. package/dist/internals/subscriptionOptions.mjs +151 -0
  31. package/dist/internals/types.d.ts +41 -0
  32. package/dist/internals/types.d.ts.map +1 -0
  33. package/dist/internals/utils.d.ts +28 -0
  34. package/dist/internals/utils.d.ts.map +1 -0
  35. package/dist/internals/utils.js +112 -0
  36. package/dist/internals/utils.mjs +105 -0
  37. package/package.json +81 -0
  38. package/src/index.ts +25 -0
  39. package/src/internals/Context.tsx +46 -0
  40. package/src/internals/createOptionsProxy.ts +309 -0
  41. package/src/internals/infiniteQueryOptions.ts +233 -0
  42. package/src/internals/mutationOptions.ts +113 -0
  43. package/src/internals/queryOptions.ts +199 -0
  44. package/src/internals/subscriptionOptions.ts +286 -0
  45. package/src/internals/types.ts +47 -0
  46. package/src/internals/utils.ts +140 -0
@@ -0,0 +1,38 @@
1
+ import { type QueryClient, type UseMutationOptions } from '@tanstack/react-query';
2
+ import type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';
3
+ import type { DistributiveOmit, MaybePromise } from '@trpc/server/unstable-core-do-not-import';
4
+ import type { ResolverDef, TRPCMutationKey, TRPCQueryBaseOptions, TRPCQueryOptionsResult } from './types';
5
+ type ReservedOptions = 'mutationKey' | 'mutationFn';
6
+ interface TRPCMutationOptionsIn<TInput, TError, TOutput, TContext> extends DistributiveOmit<UseMutationOptions<TOutput, TError, TInput, TContext>, ReservedOptions>, TRPCQueryBaseOptions {
7
+ }
8
+ interface TRPCMutationOptionsOut<TInput, TError, TOutput, TContext> extends UseMutationOptions<TOutput, TError, TInput, TContext>, TRPCQueryOptionsResult {
9
+ mutationKey: TRPCMutationKey;
10
+ }
11
+ export interface TRPCMutationOptions<TDef extends ResolverDef> {
12
+ <TContext = unknown>(opts?: TRPCMutationOptionsIn<TDef['input'], TRPCClientErrorLike<TDef>, TDef['output'], TContext>): TRPCMutationOptionsOut<TDef['input'], TRPCClientErrorLike<TDef>, TDef['output'], TContext>;
13
+ }
14
+ /**
15
+ * @internal
16
+ */
17
+ export interface MutationOptionsOverride {
18
+ onSuccess: (opts: {
19
+ /**
20
+ * Calls the original function that was defined in the query's `onSuccess` option
21
+ */
22
+ originalFn: () => MaybePromise<unknown>;
23
+ queryClient: QueryClient;
24
+ /**
25
+ * Meta data passed in from the `useMutation()` hook
26
+ */
27
+ meta: Record<string, unknown>;
28
+ }) => MaybePromise<unknown>;
29
+ }
30
+ export declare function trpcMutationOptions(args: {
31
+ mutate: typeof TRPCUntypedClient.prototype.mutation;
32
+ queryClient: QueryClient | (() => QueryClient);
33
+ path: readonly string[];
34
+ opts: TRPCMutationOptionsIn<unknown, unknown, unknown, unknown> | undefined;
35
+ overrides: MutationOptionsOverride | undefined;
36
+ }): TRPCMutationOptionsOut<unknown, unknown, unknown, unknown>;
37
+ export {};
38
+ //# sourceMappingURL=mutationOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationOptions.d.ts","sourceRoot":"","sources":["../../src/internals/mutationOptions.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAQjB,KAAK,eAAe,GAAG,aAAa,GAAG,YAAY,CAAC;AAEpD,UAAU,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAC/D,SAAQ,gBAAgB,CACpB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EACrD,eAAe,CAChB,EACD,oBAAoB;CAAG;AAE3B,UAAU,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAChE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAC3D,sBAAsB;IACxB,WAAW,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB,CAAC,IAAI,SAAS,WAAW;IAC3D,CAAC,QAAQ,GAAG,OAAO,EACjB,IAAI,CAAC,EAAE,qBAAqB,CAC1B,IAAI,CAAC,OAAO,CAAC,EACb,mBAAmB,CAAC,IAAI,CAAC,EACzB,IAAI,CAAC,QAAQ,CAAC,EACd,QAAQ,CACT,GACA,sBAAsB,CACvB,IAAI,CAAC,OAAO,CAAC,EACb,mBAAmB,CAAC,IAAI,CAAC,EACzB,IAAI,CAAC,QAAQ,CAAC,EACd,QAAQ,CACT,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB;;WAEG;QACH,UAAU,EAAE,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,WAAW,EAAE,WAAW,CAAC;QACzB;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,MAAM,EAAE,OAAO,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC;IACpD,WAAW,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC;IAC/C,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5E,SAAS,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAChD,GAAG,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAmC7D"}
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ var utils = require('./utils.js');
4
+
5
+ function trpcMutationOptions(args) {
6
+ const { mutate, path, opts, overrides } = args;
7
+ const queryClient = utils.unwrapLazyArg(args.queryClient);
8
+ const mutationKey = utils.getMutationKeyInternal(path);
9
+ const defaultOpts = queryClient.defaultMutationOptions(queryClient.getMutationDefaults(mutationKey));
10
+ const mutationSuccessOverride = overrides?.onSuccess ?? ((options)=>options.originalFn());
11
+ const mutationFn = async (input)=>{
12
+ const result = await mutate(...utils.getClientArgs([
13
+ path,
14
+ {
15
+ input
16
+ }
17
+ ], opts));
18
+ return result;
19
+ };
20
+ return {
21
+ ...opts,
22
+ mutationKey: mutationKey,
23
+ mutationFn,
24
+ onSuccess (...args) {
25
+ const originalFn = ()=>opts?.onSuccess?.(...args) ?? defaultOpts?.onSuccess?.(...args);
26
+ return mutationSuccessOverride({
27
+ originalFn,
28
+ queryClient,
29
+ meta: opts?.meta ?? defaultOpts?.meta ?? {}
30
+ });
31
+ },
32
+ trpc: utils.createTRPCOptionsResult({
33
+ path
34
+ })
35
+ };
36
+ }
37
+
38
+ exports.trpcMutationOptions = trpcMutationOptions;
@@ -0,0 +1,36 @@
1
+ import { unwrapLazyArg, getMutationKeyInternal, createTRPCOptionsResult, getClientArgs } from './utils.mjs';
2
+
3
+ function trpcMutationOptions(args) {
4
+ const { mutate, path, opts, overrides } = args;
5
+ const queryClient = unwrapLazyArg(args.queryClient);
6
+ const mutationKey = getMutationKeyInternal(path);
7
+ const defaultOpts = queryClient.defaultMutationOptions(queryClient.getMutationDefaults(mutationKey));
8
+ const mutationSuccessOverride = overrides?.onSuccess ?? ((options)=>options.originalFn());
9
+ const mutationFn = async (input)=>{
10
+ const result = await mutate(...getClientArgs([
11
+ path,
12
+ {
13
+ input
14
+ }
15
+ ], opts));
16
+ return result;
17
+ };
18
+ return {
19
+ ...opts,
20
+ mutationKey: mutationKey,
21
+ mutationFn,
22
+ onSuccess (...args) {
23
+ const originalFn = ()=>opts?.onSuccess?.(...args) ?? defaultOpts?.onSuccess?.(...args);
24
+ return mutationSuccessOverride({
25
+ originalFn,
26
+ queryClient,
27
+ meta: opts?.meta ?? defaultOpts?.meta ?? {}
28
+ });
29
+ },
30
+ trpc: createTRPCOptionsResult({
31
+ path
32
+ })
33
+ };
34
+ }
35
+
36
+ export { trpcMutationOptions };
@@ -0,0 +1,61 @@
1
+ import type { DataTag, DefinedInitialDataOptions, QueryClient, UndefinedInitialDataOptions, UnusedSkipTokenOptions } from '@tanstack/react-query';
2
+ import { type SkipToken } from '@tanstack/react-query';
3
+ import type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';
4
+ import type { coerceAsyncIterableToArray, DistributiveOmit } from '@trpc/server/unstable-core-do-not-import';
5
+ import type { ResolverDef, TRPCQueryBaseOptions, TRPCQueryKey, TRPCQueryOptionsResult } from './types';
6
+ type ReservedOptions = 'queryKey' | 'queryFn' | 'queryHashFn' | 'queryHash';
7
+ interface UndefinedTRPCQueryOptionsIn<TQueryFnData, TData, TError> extends DistributiveOmit<UndefinedInitialDataOptions<coerceAsyncIterableToArray<TQueryFnData>, TError, coerceAsyncIterableToArray<TData>, TRPCQueryKey>, ReservedOptions>, TRPCQueryBaseOptions {
8
+ }
9
+ interface UndefinedTRPCQueryOptionsOut<TQueryFnData, TOutput, TError> extends UndefinedInitialDataOptions<coerceAsyncIterableToArray<TQueryFnData>, TError, coerceAsyncIterableToArray<TOutput>, TRPCQueryKey>, TRPCQueryOptionsResult {
10
+ queryKey: DataTag<TRPCQueryKey, coerceAsyncIterableToArray<TOutput>>;
11
+ }
12
+ interface DefinedTRPCQueryOptionsIn<TQueryFnData, TData, TError> extends DistributiveOmit<DefinedInitialDataOptions<coerceAsyncIterableToArray<TQueryFnData>, TError, coerceAsyncIterableToArray<TData>, TRPCQueryKey>, ReservedOptions>, TRPCQueryBaseOptions {
13
+ }
14
+ interface DefinedTRPCQueryOptionsOut<TQueryFnData, TData, TError> extends DefinedInitialDataOptions<coerceAsyncIterableToArray<TQueryFnData>, TError, coerceAsyncIterableToArray<TData>, TRPCQueryKey>, TRPCQueryOptionsResult {
15
+ queryKey: DataTag<TRPCQueryKey, coerceAsyncIterableToArray<TData>>;
16
+ }
17
+ interface UnusedSkipTokenTRPCQueryOptionsIn<TQueryFnData, TData, TError> extends DistributiveOmit<UnusedSkipTokenOptions<coerceAsyncIterableToArray<TQueryFnData>, TError, coerceAsyncIterableToArray<TData>, TRPCQueryKey>, ReservedOptions>, TRPCQueryBaseOptions {
18
+ }
19
+ interface UnusedSkipTokenTRPCQueryOptionsOut<TQueryFnData, TOutput, TError> extends UnusedSkipTokenOptions<coerceAsyncIterableToArray<TQueryFnData>, TError, coerceAsyncIterableToArray<TOutput>, TRPCQueryKey>, TRPCQueryOptionsResult {
20
+ queryKey: DataTag<TRPCQueryKey, coerceAsyncIterableToArray<TOutput>>;
21
+ }
22
+ export interface TRPCQueryOptions<TDef extends ResolverDef> {
23
+ <TQueryFnData extends TDef['output'], TData = TQueryFnData>(input: TDef['input'] | SkipToken, opts: DefinedTRPCQueryOptionsIn<TQueryFnData, TData, TRPCClientErrorLike<{
24
+ transformer: TDef['transformer'];
25
+ errorShape: TDef['errorShape'];
26
+ }>>): DefinedTRPCQueryOptionsOut<TQueryFnData, TData, TRPCClientErrorLike<{
27
+ transformer: TDef['transformer'];
28
+ errorShape: TDef['errorShape'];
29
+ }>>;
30
+ <TQueryFnData extends TDef['output'], TData = TQueryFnData>(input: TDef['input'], opts?: UnusedSkipTokenTRPCQueryOptionsIn<TQueryFnData, TData, TRPCClientErrorLike<{
31
+ transformer: TDef['transformer'];
32
+ errorShape: TDef['errorShape'];
33
+ }>>): UnusedSkipTokenTRPCQueryOptionsOut<TQueryFnData, TData, TRPCClientErrorLike<{
34
+ transformer: TDef['transformer'];
35
+ errorShape: TDef['errorShape'];
36
+ }>>;
37
+ <TQueryFnData extends TDef['output'], TData = TQueryFnData>(input: TDef['input'] | SkipToken, opts?: UndefinedTRPCQueryOptionsIn<TQueryFnData, TData, TRPCClientErrorLike<{
38
+ transformer: TDef['transformer'];
39
+ errorShape: TDef['errorShape'];
40
+ }>>): UndefinedTRPCQueryOptionsOut<TQueryFnData, TData, TRPCClientErrorLike<{
41
+ transformer: TDef['transformer'];
42
+ errorShape: TDef['errorShape'];
43
+ }>>;
44
+ }
45
+ export declare function trpcQueryOptions(args: {
46
+ query: typeof TRPCUntypedClient.prototype.query;
47
+ queryClient: QueryClient | (() => QueryClient);
48
+ path: readonly string[];
49
+ queryKey: TRPCQueryKey;
50
+ opts: UndefinedTRPCQueryOptionsIn<unknown, unknown, unknown>;
51
+ }): import("@tanstack/react-query").UseQueryOptions<unknown, unknown, unknown, TRPCQueryKey> & {
52
+ initialData?: unknown;
53
+ } & {
54
+ queryKey: DataTag<TRPCQueryKey, unknown>;
55
+ } & {
56
+ trpc: {
57
+ path: string;
58
+ };
59
+ };
60
+ export {};
61
+ //# sourceMappingURL=queryOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryOptions.d.ts","sourceRoot":"","sources":["../../src/internals/queryOptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var reactQuery = require('@tanstack/react-query');
4
+ var unstableCoreDoNotImport = require('@trpc/server/unstable-core-do-not-import');
5
+ var utils = require('./utils.js');
6
+
7
+ function trpcQueryOptions(args) {
8
+ const { query, path, queryKey, opts } = args;
9
+ const queryClient = utils.unwrapLazyArg(args.queryClient);
10
+ const inputIsSkipToken = queryKey[1]?.input === reactQuery.skipToken;
11
+ const queryFn = async (queryFnContext)=>{
12
+ const actualOpts = {
13
+ ...opts,
14
+ trpc: {
15
+ ...opts?.trpc,
16
+ ...opts?.trpc?.abortOnUnmount ? {
17
+ signal: queryFnContext.signal
18
+ } : {
19
+ signal: null
20
+ }
21
+ }
22
+ };
23
+ const result = await query(...utils.getClientArgs(queryKey, actualOpts));
24
+ if (unstableCoreDoNotImport.isAsyncIterable(result)) {
25
+ return utils.buildQueryFromAsyncIterable(result, queryClient, queryKey);
26
+ }
27
+ return result;
28
+ };
29
+ return Object.assign(reactQuery.queryOptions({
30
+ ...opts,
31
+ queryKey,
32
+ queryFn: inputIsSkipToken ? reactQuery.skipToken : queryFn
33
+ }), {
34
+ trpc: utils.createTRPCOptionsResult({
35
+ path
36
+ })
37
+ });
38
+ }
39
+
40
+ exports.trpcQueryOptions = trpcQueryOptions;
@@ -0,0 +1,38 @@
1
+ import { skipToken, queryOptions } from '@tanstack/react-query';
2
+ import { isAsyncIterable } from '@trpc/server/unstable-core-do-not-import';
3
+ import { unwrapLazyArg, createTRPCOptionsResult, getClientArgs, buildQueryFromAsyncIterable } from './utils.mjs';
4
+
5
+ function trpcQueryOptions(args) {
6
+ const { query, path, queryKey, opts } = args;
7
+ const queryClient = unwrapLazyArg(args.queryClient);
8
+ const inputIsSkipToken = queryKey[1]?.input === skipToken;
9
+ const queryFn = async (queryFnContext)=>{
10
+ const actualOpts = {
11
+ ...opts,
12
+ trpc: {
13
+ ...opts?.trpc,
14
+ ...opts?.trpc?.abortOnUnmount ? {
15
+ signal: queryFnContext.signal
16
+ } : {
17
+ signal: null
18
+ }
19
+ }
20
+ };
21
+ const result = await query(...getClientArgs(queryKey, actualOpts));
22
+ if (isAsyncIterable(result)) {
23
+ return buildQueryFromAsyncIterable(result, queryClient, queryKey);
24
+ }
25
+ return result;
26
+ };
27
+ return Object.assign(queryOptions({
28
+ ...opts,
29
+ queryKey,
30
+ queryFn: inputIsSkipToken ? skipToken : queryFn
31
+ }), {
32
+ trpc: createTRPCOptionsResult({
33
+ path
34
+ })
35
+ });
36
+ }
37
+
38
+ export { trpcQueryOptions };
@@ -0,0 +1,77 @@
1
+ import { type SkipToken } from '@tanstack/react-query';
2
+ import type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';
3
+ import type { TRPCConnectionState } from '@trpc/client/unstable-internals';
4
+ import type { Unsubscribable } from '@trpc/server/observable';
5
+ import type { inferAsyncIterableYield } from '@trpc/server/unstable-core-do-not-import';
6
+ import type { ResolverDef, TRPCQueryKey, TRPCQueryOptionsResult } from './types';
7
+ interface BaseTRPCSubscriptionOptionsIn<TOutput, TError> {
8
+ enabled?: boolean;
9
+ onStarted?: () => void;
10
+ onData: (data: inferAsyncIterableYield<TOutput>) => void;
11
+ onError?: (err: TError) => void;
12
+ }
13
+ interface UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError> {
14
+ onStarted?: () => void;
15
+ onData: (data: inferAsyncIterableYield<TOutput>) => void;
16
+ onError?: (err: TError) => void;
17
+ onConnectionStateChange: (state: TRPCConnectionState<TError>) => void;
18
+ }
19
+ interface TRPCSubscriptionOptionsOut<TOutput, TError> extends UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError>, TRPCQueryOptionsResult {
20
+ enabled: boolean;
21
+ queryKey: TRPCQueryKey;
22
+ subscribe: (innerOpts: UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError>) => Unsubscribable;
23
+ }
24
+ export interface TRPCSubscriptionOptions<TDef extends ResolverDef> {
25
+ (input: TDef['input'], opts?: UnusedSkipTokenTRPCSubscriptionOptionsIn<inferAsyncIterableYield<TDef['output']>, TRPCClientErrorLike<TDef>>): TRPCSubscriptionOptionsOut<inferAsyncIterableYield<TDef['output']>, TRPCClientErrorLike<TDef>>;
26
+ (input: TDef['input'] | SkipToken, opts?: BaseTRPCSubscriptionOptionsIn<inferAsyncIterableYield<TDef['output']>, TRPCClientErrorLike<TDef>>): TRPCSubscriptionOptionsOut<inferAsyncIterableYield<TDef['output']>, TRPCClientErrorLike<TDef>>;
27
+ }
28
+ export type TRPCSubscriptionStatus = 'idle' | 'connecting' | 'pending' | 'error';
29
+ export interface TRPCSubscriptionBaseResult<TOutput, TError> {
30
+ status: TRPCSubscriptionStatus;
31
+ data: undefined | TOutput;
32
+ error: null | TError;
33
+ /**
34
+ * Reset the subscription
35
+ */
36
+ reset: () => void;
37
+ }
38
+ export interface TRPCSubscriptionIdleResult<TOutput> extends TRPCSubscriptionBaseResult<TOutput, null> {
39
+ status: 'idle';
40
+ data: undefined;
41
+ error: null;
42
+ }
43
+ export interface TRPCSubscriptionConnectingResult<TOutput, TError> extends TRPCSubscriptionBaseResult<TOutput, TError> {
44
+ status: 'connecting';
45
+ data: undefined | TOutput;
46
+ error: TError | null;
47
+ }
48
+ export interface TRPCSubscriptionPendingResult<TOutput> extends TRPCSubscriptionBaseResult<TOutput, undefined> {
49
+ status: 'pending';
50
+ data: TOutput;
51
+ error: null;
52
+ }
53
+ export interface TRPCSubscriptionErrorResult<TOutput, TError> extends TRPCSubscriptionBaseResult<TOutput, TError> {
54
+ status: 'error';
55
+ data: TOutput | undefined;
56
+ error: TError;
57
+ }
58
+ export type TRPCSubscriptionResult<TOutput, TError> = TRPCSubscriptionIdleResult<TOutput> | TRPCSubscriptionConnectingResult<TOutput, TError> | TRPCSubscriptionErrorResult<TOutput, TError> | TRPCSubscriptionPendingResult<TOutput>;
59
+ export declare const trpcSubscriptionOptions: (args: {
60
+ subscribe: typeof TRPCUntypedClient.prototype.subscription;
61
+ path: readonly string[];
62
+ queryKey: TRPCQueryKey;
63
+ opts: BaseTRPCSubscriptionOptionsIn<unknown, unknown> | undefined;
64
+ }) => {
65
+ enabled: boolean;
66
+ subscribe: (innerOpts: UnusedSkipTokenTRPCSubscriptionOptionsIn<any, TRPCClientErrorLike<any>>) => Unsubscribable;
67
+ queryKey: TRPCQueryKey;
68
+ trpc: {
69
+ path: string;
70
+ };
71
+ onStarted?: () => void;
72
+ onData?: ((data: unknown) => void) | undefined;
73
+ onError?: ((err: unknown) => void) | undefined;
74
+ };
75
+ export declare function useSubscription<TOutput, TError>(opts: TRPCSubscriptionOptionsOut<TOutput, TError>): TRPCSubscriptionResult<TOutput, TError>;
76
+ export {};
77
+ //# sourceMappingURL=subscriptionOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptionOptions.d.ts","sourceRoot":"","sources":["../../src/internals/subscriptionOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAExF,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB,UAAU,6BAA6B,CAAC,OAAO,EAAE,MAAM;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,uBAAuB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,UAAU,wCAAwC,CAAC,OAAO,EAAE,MAAM;IAChE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,uBAAuB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,uBAAuB,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;CACvE;AAED,UAAU,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAClD,SAAQ,wCAAwC,CAAC,OAAO,EAAE,MAAM,CAAC,EAC/D,sBAAsB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,CACT,SAAS,EAAE,wCAAwC,CAAC,OAAO,EAAE,MAAM,CAAC,KACjE,cAAc,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB,CAAC,IAAI,SAAS,WAAW;IAC/D,CACE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EACpB,IAAI,CAAC,EAAE,wCAAwC,CAC7C,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EACvC,mBAAmB,CAAC,IAAI,CAAC,CAC1B,GACA,0BAA0B,CAC3B,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EACvC,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC;IACF,CACE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,EAChC,IAAI,CAAC,EAAE,6BAA6B,CAClC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EACvC,mBAAmB,CAAC,IAAI,CAAC,CAC1B,GACA,0BAA0B,CAC3B,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EACvC,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC;CACH;AACD,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,YAAY,GACZ,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,0BAA0B,CAAC,OAAO,EAAE,MAAM;IACzD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC;IACrB;;OAEG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B,CAAC,OAAO,CACjD,SAAQ,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,gCAAgC,CAAC,OAAO,EAAE,MAAM,CAC/D,SAAQ,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC;IACnD,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B,CAAC,OAAO,CACpD,SAAQ,0BAA0B,CAAC,OAAO,EAAE,SAAS,CAAC;IACtD,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAC1D,SAAQ,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC;IACnD,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,IAC9C,0BAA0B,CAAC,OAAO,CAAC,GACnC,gCAAgC,CAAC,OAAO,EAAE,MAAM,CAAC,GACjD,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAAC,GAC5C,6BAA6B,CAAC,OAAO,CAAC,CAAC;AAE3C,eAAO,MAAM,uBAAuB,SAAU;IAC5C,SAAS,EAAE,OAAO,iBAAiB,CAAC,SAAS,CAAC,YAAY,CAAC;IAC3D,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACnE;;uGAhFM,cAAc;;;;;gBAnBP,MAAM,IAAI;iCAC8B,IAAI;iCAC7B,IAAI;CAmHhC,CAAC;AAEF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAC7C,IAAI,EAAE,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,GAChD,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,CAuIzC"}
@@ -0,0 +1,173 @@
1
+ 'use strict';
2
+
3
+ var reactQuery = require('@tanstack/react-query');
4
+ var React = require('react');
5
+ var utils = require('./utils.js');
6
+
7
+ function _interopNamespaceDefault(e) {
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
25
+
26
+ const trpcSubscriptionOptions = (args)=>{
27
+ const { subscribe, path, queryKey, opts } = args;
28
+ const input = queryKey[1]?.input;
29
+ const enabled = opts?.enabled ?? input !== reactQuery.skipToken;
30
+ const _subscribe = (innerOpts)=>{
31
+ return subscribe(path.join('.'), input ?? undefined, innerOpts);
32
+ };
33
+ return {
34
+ ...opts,
35
+ enabled,
36
+ subscribe: _subscribe,
37
+ queryKey,
38
+ trpc: utils.createTRPCOptionsResult({
39
+ path
40
+ })
41
+ };
42
+ };
43
+ function useSubscription(opts) {
44
+ const optsRef = React__namespace.useRef(opts);
45
+ optsRef.current = opts;
46
+ const trackedProps = React__namespace.useRef(new Set([]));
47
+ const addTrackedProp = React__namespace.useCallback((key)=>{
48
+ trackedProps.current.add(key);
49
+ }, []);
50
+ const currentSubscriptionRef = React__namespace.useRef();
51
+ const reset = React__namespace.useCallback(()=>{
52
+ // unsubscribe from the previous subscription
53
+ currentSubscriptionRef.current?.();
54
+ updateState(getInitialState);
55
+ if (!opts.enabled) {
56
+ return;
57
+ }
58
+ let isStopped = false;
59
+ const subscription = opts.subscribe({
60
+ onStarted: ()=>{
61
+ if (!isStopped) {
62
+ optsRef.current.onStarted?.();
63
+ updateState((prev)=>({
64
+ ...prev,
65
+ status: 'pending',
66
+ error: null
67
+ }));
68
+ }
69
+ },
70
+ onData: (data)=>{
71
+ if (!isStopped) {
72
+ optsRef.current.onData?.(data);
73
+ updateState((prev)=>({
74
+ ...prev,
75
+ status: 'pending',
76
+ data,
77
+ error: null
78
+ }));
79
+ }
80
+ },
81
+ onError: (error)=>{
82
+ if (!isStopped) {
83
+ optsRef.current.onError?.(error);
84
+ updateState((prev)=>({
85
+ ...prev,
86
+ status: 'error',
87
+ error
88
+ }));
89
+ }
90
+ },
91
+ onConnectionStateChange: (result)=>{
92
+ const delta = {
93
+ status: result.state,
94
+ error: result.error
95
+ };
96
+ updateState((prev)=>{
97
+ return {
98
+ ...prev,
99
+ ...delta
100
+ };
101
+ });
102
+ }
103
+ });
104
+ currentSubscriptionRef.current = ()=>{
105
+ isStopped = true;
106
+ subscription.unsubscribe();
107
+ };
108
+ // eslint-disable-next-line react-hooks/exhaustive-deps
109
+ }, [
110
+ reactQuery.hashKey(opts.queryKey),
111
+ opts.enabled
112
+ ]);
113
+ const getInitialState = React__namespace.useCallback(()=>{
114
+ return opts.enabled ? {
115
+ data: undefined,
116
+ error: null,
117
+ status: 'connecting',
118
+ reset
119
+ } : {
120
+ data: undefined,
121
+ error: null,
122
+ status: 'idle',
123
+ reset
124
+ };
125
+ }, [
126
+ opts.enabled,
127
+ reset
128
+ ]);
129
+ const resultRef = React__namespace.useRef(getInitialState());
130
+ const [state, setState] = React__namespace.useState(trackResult(resultRef.current, addTrackedProp));
131
+ state.reset = reset;
132
+ const updateState = React__namespace.useCallback((callback)=>{
133
+ const prev = resultRef.current;
134
+ const next = resultRef.current = callback(prev);
135
+ let shouldUpdate = false;
136
+ for (const key of trackedProps.current){
137
+ if (prev[key] !== next[key]) {
138
+ shouldUpdate = true;
139
+ break;
140
+ }
141
+ }
142
+ if (shouldUpdate) {
143
+ setState(trackResult(next, addTrackedProp));
144
+ }
145
+ }, [
146
+ addTrackedProp
147
+ ]);
148
+ React__namespace.useEffect(()=>{
149
+ if (!opts.enabled) {
150
+ return;
151
+ }
152
+ reset();
153
+ return ()=>{
154
+ currentSubscriptionRef.current?.();
155
+ };
156
+ }, [
157
+ reset,
158
+ opts.enabled
159
+ ]);
160
+ return state;
161
+ }
162
+ function trackResult(result, onTrackResult) {
163
+ const trackedResult = new Proxy(result, {
164
+ get (target, prop) {
165
+ onTrackResult(prop);
166
+ return target[prop];
167
+ }
168
+ });
169
+ return trackedResult;
170
+ }
171
+
172
+ exports.trpcSubscriptionOptions = trpcSubscriptionOptions;
173
+ exports.useSubscription = useSubscription;