@confect/react 1.0.2 → 2.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @confect/react
2
2
 
3
+ ## 2.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - 7861159: Replace Effect-native return types with Convex-equivalent return types in React hooks. `useQuery` now returns `T | undefined` instead of `Option<T>`. `useMutation` and `useAction` now return `(args) => Promise<T>` instead of `(args) => Effect<T>`. The hooks still encode args and decode return values via the spec's Effect Schemas automatically.
8
+
9
+ ### Patch Changes
10
+
11
+ - @confect/core@2.0.0
12
+
13
+ ## 1.0.3
14
+
15
+ ### Patch Changes
16
+
17
+ - @confect/core@1.0.3
18
+
3
19
  ## 1.0.2
4
20
 
5
21
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,10 +1,9 @@
1
- import * as Ref from "@confect/core/Ref";
2
- import { Effect, Option } from "effect";
1
+ import { Ref } from "@confect/core";
3
2
 
4
3
  //#region src/index.d.ts
5
- declare const useQuery: <Query extends Ref.AnyPublicQuery>(ref: Query, args: Ref.Args<Query>["Type"]) => Option.Option<Ref.Returns<Query>["Type"]>;
6
- declare const useMutation: <Mutation extends Ref.AnyPublicMutation>(ref: Mutation) => (args: Ref.Args<Mutation>["Type"]) => Effect.Effect<Ref.Returns<Mutation>["Type"]>;
7
- declare const useAction: <Action extends Ref.AnyPublicAction>(ref: Action) => (args: Ref.Args<Action>["Type"]) => Effect.Effect<Ref.Returns<Action>["Type"]>;
4
+ declare const useQuery: <Query extends Ref.AnyPublicQuery>(ref: Query, args: Ref.Args<Query>["Type"]) => Ref.Returns<Query>["Type"] | undefined;
5
+ declare const useMutation: <Mutation extends Ref.AnyPublicMutation>(ref: Mutation) => (args: Ref.Args<Mutation>["Type"]) => Promise<Ref.Returns<Mutation>["Type"]>;
6
+ declare const useAction: <Action extends Ref.AnyPublicAction>(ref: Action) => (args: Ref.Args<Action>["Type"]) => Promise<Ref.Returns<Action>["Type"]>;
8
7
  //#endregion
9
8
  export { useAction, useMutation, useQuery };
10
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;cAQa,QAAA,iBAA0B,GAAA,CAAI,cAAA,EACzC,GAAA,EAAK,KAAA,EACL,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,KAAA,cACd,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,KAAA;AAAA,cAoBhB,WAAA,oBAAgC,GAAA,CAAI,iBAAA,EAC/C,GAAA,EAAK,QAAA,MAOH,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,QAAA,cACd,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,QAAA;AAAA,cAYlB,SAAA,kBAA4B,GAAA,CAAI,eAAA,EAAiB,GAAA,EAAK,MAAA,MAM/D,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,MAAA,cACd,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,MAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;cAQa,QAAA,iBAA0B,GAAA,CAAI,cAAA,EACzC,GAAA,EAAK,KAAA,EACL,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,KAAA,cACd,GAAA,CAAI,OAAA,CAAQ,KAAA;AAAA,cAkBF,WAAA,oBAAgC,GAAA,CAAI,iBAAA,EAC/C,GAAA,EAAK,QAAA,MAOH,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,QAAA,cACd,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,QAAA;AAAA,cAOZ,SAAA,kBAA4B,GAAA,CAAI,eAAA,EAAiB,GAAA,EAAK,MAAA,MAM/D,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,MAAA,cACd,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,MAAA"}
package/dist/index.js CHANGED
@@ -1,31 +1,29 @@
1
- import * as Ref from "@confect/core/Ref";
1
+ import { Ref } from "@confect/core";
2
2
  import { useAction as useAction$1, useMutation as useMutation$1, useQuery as useQuery$1 } from "convex/react";
3
- import { Effect, Option, Schema } from "effect";
3
+ import { Schema } from "effect";
4
4
 
5
5
  //#region src/index.ts
6
6
  const useQuery = (ref, args) => {
7
7
  const function_ = Ref.getFunction(ref);
8
8
  const encodedReturnsOrUndefined = useQuery$1(Ref.getConvexFunctionName(ref), Schema.encodeSync(function_.args)(args));
9
- if (encodedReturnsOrUndefined === void 0) return Option.none();
10
- else return Option.some(Schema.decodeSync(function_.returns)(encodedReturnsOrUndefined));
9
+ if (encodedReturnsOrUndefined === void 0) return;
10
+ else return Schema.decodeSync(function_.returns)(encodedReturnsOrUndefined);
11
11
  };
12
12
  const useMutation = (ref) => {
13
13
  const function_ = Ref.getFunction(ref);
14
14
  const actualMutation = useMutation$1(Ref.getConvexFunctionName(ref));
15
- return (args) => Effect.gen(function* () {
16
- const encodedArgs = yield* Schema.encode(function_.args)(args);
17
- const actualReturns = yield* Effect.promise(() => actualMutation(encodedArgs));
18
- return yield* Schema.decode(function_.returns)(actualReturns);
19
- }).pipe(Effect.orDie);
15
+ return async (args) => {
16
+ const actualReturns = await actualMutation(Schema.encodeSync(function_.args)(args));
17
+ return Schema.decodeSync(function_.returns)(actualReturns);
18
+ };
20
19
  };
21
20
  const useAction = (ref) => {
22
21
  const function_ = Ref.getFunction(ref);
23
22
  const actualAction = useAction$1(Ref.getConvexFunctionName(ref));
24
- return (args) => Effect.gen(function* () {
25
- const encodedArgs = yield* Schema.encode(function_.args)(args);
26
- const actualReturns = yield* Effect.promise(() => actualAction(encodedArgs));
27
- return yield* Schema.decode(function_.returns)(actualReturns);
28
- }).pipe(Effect.orDie);
23
+ return async (args) => {
24
+ const actualReturns = await actualAction(Schema.encodeSync(function_.args)(args));
25
+ return Schema.decodeSync(function_.returns)(actualReturns);
26
+ };
29
27
  };
30
28
 
31
29
  //#endregion
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useConvexQuery","useConvexMutation","useConvexAction"],"sources":["../src/index.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport {\n useAction as useConvexAction,\n useMutation as useConvexMutation,\n useQuery as useConvexQuery,\n} from \"convex/react\";\nimport { Effect, Option, Schema } from \"effect\";\n\nexport const useQuery = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n args: Ref.Args<Query>[\"Type\"],\n): Option.Option<Ref.Returns<Query>[\"Type\"]> => {\n const function_ = Ref.getFunction(ref);\n const functionName = Ref.getConvexFunctionName(ref);\n\n const encodedArgs = Schema.encodeSync(function_.args)(args);\n\n const encodedReturnsOrUndefined = useConvexQuery(\n functionName as any,\n encodedArgs,\n );\n\n if (encodedReturnsOrUndefined === undefined) {\n return Option.none();\n } else {\n return Option.some(\n Schema.decodeSync(function_.returns)(encodedReturnsOrUndefined),\n );\n }\n};\n\nexport const useMutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n) => {\n const function_ = Ref.getFunction(ref);\n const functionName = Ref.getConvexFunctionName(ref);\n const actualMutation = useConvexMutation(functionName as any);\n\n return (\n args: Ref.Args<Mutation>[\"Type\"],\n ): Effect.Effect<Ref.Returns<Mutation>[\"Type\"]> =>\n Effect.gen(function* () {\n const encodedArgs = yield* Schema.encode(function_.args)(args);\n\n const actualReturns = yield* Effect.promise(() =>\n actualMutation(encodedArgs),\n );\n\n return yield* Schema.decode(function_.returns)(actualReturns);\n }).pipe(Effect.orDie);\n};\n\nexport const useAction = <Action extends Ref.AnyPublicAction>(ref: Action) => {\n const function_ = Ref.getFunction(ref);\n const functionName = Ref.getConvexFunctionName(ref);\n const actualAction = useConvexAction(functionName as any);\n\n return (\n args: Ref.Args<Action>[\"Type\"],\n ): Effect.Effect<Ref.Returns<Action>[\"Type\"]> =>\n Effect.gen(function* () {\n const encodedArgs = yield* Schema.encode(function_.args)(args);\n\n const actualReturns = yield* Effect.promise(() =>\n actualAction(encodedArgs),\n );\n\n return yield* Schema.decode(function_.returns)(actualReturns);\n }).pipe(Effect.orDie);\n};\n"],"mappings":";;;;;AAQA,MAAa,YACX,KACA,SAC8C;CAC9C,MAAM,YAAY,IAAI,YAAY,IAAI;CAKtC,MAAM,4BAA4BA,WAJb,IAAI,sBAAsB,IAAI,EAE/B,OAAO,WAAW,UAAU,KAAK,CAAC,KAAK,CAK1D;AAED,KAAI,8BAA8B,OAChC,QAAO,OAAO,MAAM;KAEpB,QAAO,OAAO,KACZ,OAAO,WAAW,UAAU,QAAQ,CAAC,0BAA0B,CAChE;;AAIL,MAAa,eACX,QACG;CACH,MAAM,YAAY,IAAI,YAAY,IAAI;CAEtC,MAAM,iBAAiBC,cADF,IAAI,sBAAsB,IAAI,CACU;AAE7D,SACE,SAEA,OAAO,IAAI,aAAa;EACtB,MAAM,cAAc,OAAO,OAAO,OAAO,UAAU,KAAK,CAAC,KAAK;EAE9D,MAAM,gBAAgB,OAAO,OAAO,cAClC,eAAe,YAAY,CAC5B;AAED,SAAO,OAAO,OAAO,OAAO,UAAU,QAAQ,CAAC,cAAc;GAC7D,CAAC,KAAK,OAAO,MAAM;;AAGzB,MAAa,aAAiD,QAAgB;CAC5E,MAAM,YAAY,IAAI,YAAY,IAAI;CAEtC,MAAM,eAAeC,YADA,IAAI,sBAAsB,IAAI,CACM;AAEzD,SACE,SAEA,OAAO,IAAI,aAAa;EACtB,MAAM,cAAc,OAAO,OAAO,OAAO,UAAU,KAAK,CAAC,KAAK;EAE9D,MAAM,gBAAgB,OAAO,OAAO,cAClC,aAAa,YAAY,CAC1B;AAED,SAAO,OAAO,OAAO,OAAO,UAAU,QAAQ,CAAC,cAAc;GAC7D,CAAC,KAAK,OAAO,MAAM"}
1
+ {"version":3,"file":"index.js","names":["useConvexQuery","useConvexMutation","useConvexAction"],"sources":["../src/index.ts"],"sourcesContent":["import { Ref } from \"@confect/core\";\nimport {\n useAction as useConvexAction,\n useMutation as useConvexMutation,\n useQuery as useConvexQuery,\n} from \"convex/react\";\nimport { Schema } from \"effect\";\n\nexport const useQuery = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n args: Ref.Args<Query>[\"Type\"],\n): Ref.Returns<Query>[\"Type\"] | undefined => {\n const function_ = Ref.getFunction(ref);\n const functionName = Ref.getConvexFunctionName(ref);\n\n const encodedArgs = Schema.encodeSync(function_.args)(args);\n\n const encodedReturnsOrUndefined = useConvexQuery(\n functionName as any,\n encodedArgs,\n );\n\n if (encodedReturnsOrUndefined === undefined) {\n return undefined;\n } else {\n return Schema.decodeSync(function_.returns)(encodedReturnsOrUndefined);\n }\n};\n\nexport const useMutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n) => {\n const function_ = Ref.getFunction(ref);\n const functionName = Ref.getConvexFunctionName(ref);\n const actualMutation = useConvexMutation(functionName as any);\n\n return async (\n args: Ref.Args<Mutation>[\"Type\"],\n ): Promise<Ref.Returns<Mutation>[\"Type\"]> => {\n const encodedArgs = Schema.encodeSync(function_.args)(args);\n const actualReturns = await actualMutation(encodedArgs);\n return Schema.decodeSync(function_.returns)(actualReturns);\n };\n};\n\nexport const useAction = <Action extends Ref.AnyPublicAction>(ref: Action) => {\n const function_ = Ref.getFunction(ref);\n const functionName = Ref.getConvexFunctionName(ref);\n const actualAction = useConvexAction(functionName as any);\n\n return async (\n args: Ref.Args<Action>[\"Type\"],\n ): Promise<Ref.Returns<Action>[\"Type\"]> => {\n const encodedArgs = Schema.encodeSync(function_.args)(args);\n const actualReturns = await actualAction(encodedArgs);\n return Schema.decodeSync(function_.returns)(actualReturns);\n };\n};\n"],"mappings":";;;;;AAQA,MAAa,YACX,KACA,SAC2C;CAC3C,MAAM,YAAY,IAAI,YAAY,IAAI;CAKtC,MAAM,4BAA4BA,WAJb,IAAI,sBAAsB,IAAI,EAE/B,OAAO,WAAW,UAAU,KAAK,CAAC,KAAK,CAK1D;AAED,KAAI,8BAA8B,OAChC;KAEA,QAAO,OAAO,WAAW,UAAU,QAAQ,CAAC,0BAA0B;;AAI1E,MAAa,eACX,QACG;CACH,MAAM,YAAY,IAAI,YAAY,IAAI;CAEtC,MAAM,iBAAiBC,cADF,IAAI,sBAAsB,IAAI,CACU;AAE7D,QAAO,OACL,SAC2C;EAE3C,MAAM,gBAAgB,MAAM,eADR,OAAO,WAAW,UAAU,KAAK,CAAC,KAAK,CACJ;AACvD,SAAO,OAAO,WAAW,UAAU,QAAQ,CAAC,cAAc;;;AAI9D,MAAa,aAAiD,QAAgB;CAC5E,MAAM,YAAY,IAAI,YAAY,IAAI;CAEtC,MAAM,eAAeC,YADA,IAAI,sBAAsB,IAAI,CACM;AAEzD,QAAO,OACL,SACyC;EAEzC,MAAM,gBAAgB,MAAM,aADR,OAAO,WAAW,UAAU,KAAK,CAAC,KAAK,CACN;AACrD,SAAO,OAAO,WAAW,UAAU,QAAQ,CAAC,cAAc"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@confect/react",
3
- "version": "1.0.2",
3
+ "version": "2.0.0",
4
4
  "description": "Client-side bindings for React apps",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,20 +35,19 @@
35
35
  "author": "RJ Dellecese",
36
36
  "license": "ISC",
37
37
  "devDependencies": {
38
- "@effect/language-service": "0.73.1",
39
- "@eslint/js": "9.39.2",
40
- "@types/node": "25.2.3",
41
- "eslint": "9.39.2",
38
+ "@eslint/js": "10.0.1",
39
+ "@types/node": "25.3.3",
40
+ "eslint": "10.0.2",
42
41
  "prettier": "3.8.1",
43
42
  "tsdown": "0.20.3",
44
43
  "typescript": "5.9.3",
45
- "typescript-eslint": "8.55.0"
44
+ "typescript-eslint": "8.56.1"
46
45
  },
47
46
  "peerDependencies": {
48
47
  "convex": "^1.30.0",
49
48
  "effect": "^3.19.16",
50
49
  "react": "^18.0.0 || ^19.0.0",
51
- "@confect/core": "1.0.2"
50
+ "@confect/core": "2.0.0"
52
51
  },
53
52
  "engines": {
54
53
  "node": ">=22",
package/src/index.ts CHANGED
@@ -1,15 +1,15 @@
1
- import * as Ref from "@confect/core/Ref";
1
+ import { Ref } from "@confect/core";
2
2
  import {
3
3
  useAction as useConvexAction,
4
4
  useMutation as useConvexMutation,
5
5
  useQuery as useConvexQuery,
6
6
  } from "convex/react";
7
- import { Effect, Option, Schema } from "effect";
7
+ import { Schema } from "effect";
8
8
 
9
9
  export const useQuery = <Query extends Ref.AnyPublicQuery>(
10
10
  ref: Query,
11
11
  args: Ref.Args<Query>["Type"],
12
- ): Option.Option<Ref.Returns<Query>["Type"]> => {
12
+ ): Ref.Returns<Query>["Type"] | undefined => {
13
13
  const function_ = Ref.getFunction(ref);
14
14
  const functionName = Ref.getConvexFunctionName(ref);
15
15
 
@@ -21,11 +21,9 @@ export const useQuery = <Query extends Ref.AnyPublicQuery>(
21
21
  );
22
22
 
23
23
  if (encodedReturnsOrUndefined === undefined) {
24
- return Option.none();
24
+ return undefined;
25
25
  } else {
26
- return Option.some(
27
- Schema.decodeSync(function_.returns)(encodedReturnsOrUndefined),
28
- );
26
+ return Schema.decodeSync(function_.returns)(encodedReturnsOrUndefined);
29
27
  }
30
28
  };
31
29
 
@@ -36,18 +34,13 @@ export const useMutation = <Mutation extends Ref.AnyPublicMutation>(
36
34
  const functionName = Ref.getConvexFunctionName(ref);
37
35
  const actualMutation = useConvexMutation(functionName as any);
38
36
 
39
- return (
37
+ return async (
40
38
  args: Ref.Args<Mutation>["Type"],
41
- ): Effect.Effect<Ref.Returns<Mutation>["Type"]> =>
42
- Effect.gen(function* () {
43
- const encodedArgs = yield* Schema.encode(function_.args)(args);
44
-
45
- const actualReturns = yield* Effect.promise(() =>
46
- actualMutation(encodedArgs),
47
- );
48
-
49
- return yield* Schema.decode(function_.returns)(actualReturns);
50
- }).pipe(Effect.orDie);
39
+ ): Promise<Ref.Returns<Mutation>["Type"]> => {
40
+ const encodedArgs = Schema.encodeSync(function_.args)(args);
41
+ const actualReturns = await actualMutation(encodedArgs);
42
+ return Schema.decodeSync(function_.returns)(actualReturns);
43
+ };
51
44
  };
52
45
 
53
46
  export const useAction = <Action extends Ref.AnyPublicAction>(ref: Action) => {
@@ -55,16 +48,11 @@ export const useAction = <Action extends Ref.AnyPublicAction>(ref: Action) => {
55
48
  const functionName = Ref.getConvexFunctionName(ref);
56
49
  const actualAction = useConvexAction(functionName as any);
57
50
 
58
- return (
51
+ return async (
59
52
  args: Ref.Args<Action>["Type"],
60
- ): Effect.Effect<Ref.Returns<Action>["Type"]> =>
61
- Effect.gen(function* () {
62
- const encodedArgs = yield* Schema.encode(function_.args)(args);
63
-
64
- const actualReturns = yield* Effect.promise(() =>
65
- actualAction(encodedArgs),
66
- );
67
-
68
- return yield* Schema.decode(function_.returns)(actualReturns);
69
- }).pipe(Effect.orDie);
53
+ ): Promise<Ref.Returns<Action>["Type"]> => {
54
+ const encodedArgs = Schema.encodeSync(function_.args)(args);
55
+ const actualReturns = await actualAction(encodedArgs);
56
+ return Schema.decodeSync(function_.returns)(actualReturns);
57
+ };
70
58
  };