@confect/js 9.0.0-next.7 → 9.0.0-next.8

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,35 @@
1
1
  # @confect/js
2
2
 
3
+ ## 9.0.0-next.8
4
+
5
+ ### Patch Changes
6
+
7
+ - 3fec285: Import Effect from its submodule paths internally to shrink per-function cold-start bundles.
8
+
9
+ Confect's packages now import Effect modules from their submodule paths (`import * as Schema from "effect/Schema"`) instead of the `"effect"` barrel (`import { Schema } from "effect"`).
10
+
11
+ ### Why
12
+
13
+ A barrel import of a namespace re-export defeats esbuild's tree-shaking: accessing `Schema.X` from `import { Schema } from "effect"` retains the _entire_ `Schema` namespace, because the bundler can't prune property access on the barrel's `export * as Schema`. So every Convex function's cold-start bundle was pulling all of `effect/Schema` and `effect/Stream` — and, transitively through Schema's `Arbitrary`, `fast-check` — whether the function used them or not.
14
+
15
+ Importing from the submodule path tree-shakes normally. On a minimal function this cut the bundle esbuild produces by ~54% (the `effect/Schema` module alone by ~75%) and its cold-start module-evaluation time by ~35%, with `fast-check` dropped entirely. This is also the import style Effect v4 recommends, so it's forward-compatible. A `no-restricted-imports` ESLint rule now enforces it across the codebase (type-only imports and `@effect/vitest` are exempt).
16
+
17
+ No API changes — your existing code keeps working.
18
+
19
+ ### Getting the full win in your own code
20
+
21
+ This change shrinks the Confect code in every function bundle, but a function's bundle also includes your own `confect/tables/*` and `*.spec.ts` files. esbuild retains the union across all importers, so a single barrel import anywhere in a function's module graph re-pins the whole `effect/Schema` namespace and undoes the reduction. To get the full bundle/cold-start savings, import Effect from its submodule paths in your own Confect files too:
22
+
23
+ ```diff
24
+ - import { Schema } from "effect";
25
+ + import * as Schema from "effect/Schema";
26
+ ```
27
+
28
+ Bare helpers (`pipe`, `flow`, `identity`) come from `"effect/Function"`.
29
+
30
+ - Updated dependencies [3fec285]
31
+ - @confect/core@9.0.0-next.8
32
+
3
33
  ## 9.0.0-next.7
4
34
 
5
35
  ### Patch Changes
@@ -1,6 +1,10 @@
1
1
  import * as Ref from "@confect/core/Ref";
2
2
  import { ConvexHttpClient } from "convex/browser";
3
- import { Context, Effect, Layer, ParseResult, Schema } from "effect";
3
+ import * as Context from "effect/Context";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
+ import * as Schema from "effect/Schema";
7
+ import { ParseResult } from "effect";
4
8
 
5
9
  //#region src/HttpClient.d.ts
6
10
  declare namespace HttpClient_d_exports {
@@ -1 +1 @@
1
- {"version":3,"file":"HttpClient.d.ts","names":[],"sources":["../src/HttpClient.ts"],"mappings":"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"}
1
+ {"version":3,"file":"HttpClient.d.ts","names":[],"sources":["../src/HttpClient.ts"],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import * as Ref from "@confect/core/Ref";
3
3
  import { ConvexHttpClient } from "convex/browser";
4
- import { Context, Effect, Layer, Schema } from "effect";
4
+ import * as Context from "effect/Context";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ import * as Schema from "effect/Schema";
5
8
 
6
9
  //#region src/HttpClient.ts
7
10
  var HttpClient_exports = /* @__PURE__ */ __exportAll({
@@ -1 +1 @@
1
- {"version":3,"file":"HttpClient.js","names":[],"sources":["../src/HttpClient.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { ConvexHttpClient } from \"convex/browser\";\nimport type { ParseResult } from \"effect\";\nimport { Context, Effect, Layer, Schema } from \"effect\";\n\nexport class HttpClientError extends Schema.TaggedError<HttpClientError>()(\n \"HttpClientError\",\n {\n cause: Schema.Unknown,\n },\n) {}\n\nconst make = (\n address: string,\n options?: ConstructorParameters<typeof ConvexHttpClient>[1],\n) => {\n const client = new ConvexHttpClient(address, options);\n\n const url = client.url;\n\n const setAuth = (token: string) =>\n Effect.sync(() => {\n client.setAuth(token);\n });\n\n const clearAuth = Effect.sync(() => {\n client.clearAuth();\n });\n\n const mapUnknownError = (cause: unknown) => new HttpClientError({ cause });\n\n const query = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Effect.Effect<\n Ref.Returns<Query>,\n Ref.Error<Query> | HttpClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.query(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const mutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n ...rest: Ref.OptionalArgs<Mutation>\n ): Effect.Effect<\n Ref.Returns<Mutation>,\n Ref.Error<Mutation> | HttpClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Mutation>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.mutation(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const action = <Action extends Ref.AnyPublicAction>(\n ref: Action,\n ...rest: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | HttpClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Action>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.action(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n return {\n url,\n setAuth,\n clearAuth,\n query,\n mutation,\n action,\n };\n};\n\n/**\n * A Confect client which uses HTTP to communicate with your Convex backend. Works in any JS runtime that supports `fetch`. Wraps [ConvexHttpClient](https://docs.convex.dev/api/classes/browser.ConvexHttpClient).\n */\nexport const HttpClient = Context.GenericTag<ReturnType<typeof make>>(\n \"@confect/js/HttpClient\",\n);\n\nexport type HttpClient = typeof HttpClient.Identifier;\n\nexport const layer = (\n address: string,\n options?: ConstructorParameters<typeof ConvexHttpClient>[1],\n) => Layer.sync(HttpClient, () => make(address, options));\n"],"mappings":";;;;;;;;;;;AAKA,IAAa,kBAAb,cAAqC,OAAO,aAA8B,CACxE,mBACA,EACE,OAAO,OAAO,SACf,CACF,CAAC;AAEF,MAAM,QACJ,SACA,YACG;CACH,MAAM,SAAS,IAAI,iBAAiB,SAAS,QAAQ;CAErD,MAAM,MAAM,OAAO;CAEnB,MAAM,WAAW,UACf,OAAO,WAAW;AAChB,SAAO,QAAQ,MAAM;GACrB;CAEJ,MAAM,YAAY,OAAO,WAAW;AAClC,SAAO,WAAW;GAClB;CAEF,MAAM,mBAAmB,UAAmB,IAAI,gBAAgB,EAAE,OAAO,CAAC;CAE1E,MAAM,SACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,MAAM,mBAAmB,YAAY,EAC9C,gBACD;;CAGH,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,SAAS,mBAAmB,YAAY,EACjD,gBACD;;CAGH,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,OAAO,mBAAmB,YAAY,EAC/C,gBACD;;AAGH,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD;;;;;AAMH,MAAa,aAAa,QAAQ,WAChC,yBACD;AAID,MAAa,SACX,SACA,YACG,MAAM,KAAK,kBAAkB,KAAK,SAAS,QAAQ,CAAC"}
1
+ {"version":3,"file":"HttpClient.js","names":[],"sources":["../src/HttpClient.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { ConvexHttpClient } from \"convex/browser\";\nimport type { ParseResult } from \"effect\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\n\nexport class HttpClientError extends Schema.TaggedError<HttpClientError>()(\n \"HttpClientError\",\n {\n cause: Schema.Unknown,\n },\n) {}\n\nconst make = (\n address: string,\n options?: ConstructorParameters<typeof ConvexHttpClient>[1],\n) => {\n const client = new ConvexHttpClient(address, options);\n\n const url = client.url;\n\n const setAuth = (token: string) =>\n Effect.sync(() => {\n client.setAuth(token);\n });\n\n const clearAuth = Effect.sync(() => {\n client.clearAuth();\n });\n\n const mapUnknownError = (cause: unknown) => new HttpClientError({ cause });\n\n const query = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Effect.Effect<\n Ref.Returns<Query>,\n Ref.Error<Query> | HttpClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.query(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const mutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n ...rest: Ref.OptionalArgs<Mutation>\n ): Effect.Effect<\n Ref.Returns<Mutation>,\n Ref.Error<Mutation> | HttpClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Mutation>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.mutation(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const action = <Action extends Ref.AnyPublicAction>(\n ref: Action,\n ...rest: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | HttpClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Action>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.action(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n return {\n url,\n setAuth,\n clearAuth,\n query,\n mutation,\n action,\n };\n};\n\n/**\n * A Confect client which uses HTTP to communicate with your Convex backend. Works in any JS runtime that supports `fetch`. Wraps [ConvexHttpClient](https://docs.convex.dev/api/classes/browser.ConvexHttpClient).\n */\nexport const HttpClient = Context.GenericTag<ReturnType<typeof make>>(\n \"@confect/js/HttpClient\",\n);\n\nexport type HttpClient = typeof HttpClient.Identifier;\n\nexport const layer = (\n address: string,\n options?: ConstructorParameters<typeof ConvexHttpClient>[1],\n) => Layer.sync(HttpClient, () => make(address, options));\n"],"mappings":";;;;;;;;;;;;;;AAQA,IAAa,kBAAb,cAAqC,OAAO,aAA8B,CACxE,mBACA,EACE,OAAO,OAAO,SACf,CACF,CAAC;AAEF,MAAM,QACJ,SACA,YACG;CACH,MAAM,SAAS,IAAI,iBAAiB,SAAS,QAAQ;CAErD,MAAM,MAAM,OAAO;CAEnB,MAAM,WAAW,UACf,OAAO,WAAW;AAChB,SAAO,QAAQ,MAAM;GACrB;CAEJ,MAAM,YAAY,OAAO,WAAW;AAClC,SAAO,WAAW;GAClB;CAEF,MAAM,mBAAmB,UAAmB,IAAI,gBAAgB,EAAE,OAAO,CAAC;CAE1E,MAAM,SACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,MAAM,mBAAmB,YAAY,EAC9C,gBACD;;CAGH,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,SAAS,mBAAmB,YAAY,EACjD,gBACD;;CAGH,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,OAAO,mBAAmB,YAAY,EAC/C,gBACD;;AAGH,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD;;;;;AAMH,MAAa,aAAa,QAAQ,WAChC,yBACD;AAID,MAAa,SACX,SACA,YACG,MAAM,KAAK,kBAAkB,KAAK,SAAS,QAAQ,CAAC"}
@@ -1,6 +1,11 @@
1
1
  import * as Ref from "@confect/core/Ref";
2
2
  import { ConvexClient } from "convex/browser";
3
- import { Context, Effect, Layer, ParseResult, Schema, Stream } from "effect";
3
+ import * as Context from "effect/Context";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
+ import * as Schema from "effect/Schema";
7
+ import * as Stream from "effect/Stream";
8
+ import { ParseResult } from "effect";
4
9
 
5
10
  //#region src/WebSocketClient.d.ts
6
11
  declare namespace WebSocketClient_d_exports {
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocketClient.d.ts","names":[],"sources":["../src/WebSocketClient.ts"],"mappings":"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"}
1
+ {"version":3,"file":"WebSocketClient.d.ts","names":[],"sources":["../src/WebSocketClient.ts"],"mappings":"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"}
@@ -1,7 +1,11 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import * as Ref from "@confect/core/Ref";
3
3
  import { ConvexClient } from "convex/browser";
4
- import { Context, Effect, Layer, Schema, Stream } from "effect";
4
+ import * as Context from "effect/Context";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ import * as Schema from "effect/Schema";
8
+ import * as Stream from "effect/Stream";
5
9
 
6
10
  //#region src/WebSocketClient.ts
7
11
  var WebSocketClient_exports = /* @__PURE__ */ __exportAll({
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocketClient.js","names":[],"sources":["../src/WebSocketClient.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { ConvexClient } from \"convex/browser\";\nimport type { ParseResult } from \"effect\";\nimport { Context, Effect, Layer, Schema, Stream } from \"effect\";\n\nexport class WebSocketClientError extends Schema.TaggedError<WebSocketClientError>()(\n \"WebSocketClientError\",\n {\n cause: Schema.Unknown,\n },\n) {}\n\nconst make = (\n address: string,\n options?: ConstructorParameters<typeof ConvexClient>[1],\n) =>\n Effect.acquireRelease(\n Effect.sync(() => new ConvexClient(address, options)),\n (convexClient) => Effect.promise(() => convexClient.close()),\n ).pipe(\n Effect.map((convexClient) => {\n const url = address;\n\n const setAuth = (\n fetchToken: (args: {\n forceRefreshToken: boolean;\n }) => Effect.Effect<string | null | undefined>,\n onChange?: (isAuthenticated: boolean) => Effect.Effect<void>,\n ) =>\n Effect.sync(() => {\n convexClient.setAuth(\n (args) => Effect.runPromise(fetchToken(args)),\n ...(onChange\n ? [\n (isAuthenticated: boolean) =>\n Effect.runFork(onChange(isAuthenticated)),\n ]\n : []),\n );\n });\n\n const mapUnknownError = (cause: unknown) =>\n new WebSocketClientError({ cause });\n\n const query = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Effect.Effect<\n Ref.Returns<Query>,\n Ref.Error<Query> | WebSocketClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.query(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const mutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n ...rest: Ref.OptionalArgs<Mutation>\n ): Effect.Effect<\n Ref.Returns<Mutation>,\n Ref.Error<Mutation> | WebSocketClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Mutation>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.mutation(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const action = <Action extends Ref.AnyPublicAction>(\n ref: Action,\n ...rest: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | WebSocketClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Action>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.action(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const reactiveQuery = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Stream.Stream<\n Ref.Returns<Query>,\n Ref.Error<Query> | WebSocketClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n const functionReference = Ref.getFunctionReference(ref);\n const onError = Ref.decodeErrorOrElse(ref, mapUnknownError);\n\n return Stream.unwrapScoped(\n Effect.gen(function* () {\n const encodedArgs = yield* Ref.encodeArgs(ref, args);\n\n return Stream.asyncScoped<\n unknown,\n Ref.Error<Query> | WebSocketClientError\n >((emit) =>\n Effect.gen(function* () {\n const unsubscribe = convexClient.onUpdate(\n functionReference,\n encodedArgs,\n (result) => {\n emit.single(result);\n },\n (error) => {\n emit.fail(onError(error));\n },\n );\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => unsubscribe()),\n );\n }),\n );\n }),\n ).pipe(\n Stream.mapEffect((encodedReturns) =>\n Ref.decodeReturns(ref, encodedReturns),\n ),\n );\n };\n\n return {\n url,\n setAuth,\n query,\n mutation,\n action,\n reactiveQuery,\n };\n }),\n );\n\n/**\n * A Confect client which uses a WebSocket to communicate with your Convex backend and supports reactive query subscriptions. The WebSocket connection is managed by the layer's scope and closed automatically when the scope ends. Wraps [ConvexClient](https://docs.convex.dev/api/classes/browser.ConvexClient).\n */\nexport const WebSocketClient = Context.GenericTag<\n Effect.Effect.Success<ReturnType<typeof make>>\n>(\"@confect/js/WebSocketClient\");\n\nexport type WebSocketClient = typeof WebSocketClient.Identifier;\n\nexport const layer = (\n address: string,\n options?: ConstructorParameters<typeof ConvexClient>[1],\n) => Layer.scoped(WebSocketClient, make(address, options));\n"],"mappings":";;;;;;;;;;;AAKA,IAAa,uBAAb,cAA0C,OAAO,aAAmC,CAClF,wBACA,EACE,OAAO,OAAO,SACf,CACF,CAAC;AAEF,MAAM,QACJ,SACA,YAEA,OAAO,eACL,OAAO,WAAW,IAAI,aAAa,SAAS,QAAQ,CAAC,GACpD,iBAAiB,OAAO,cAAc,aAAa,OAAO,CAAC,CAC7D,CAAC,KACA,OAAO,KAAK,iBAAiB;CAC3B,MAAM,MAAM;CAEZ,MAAM,WACJ,YAGA,aAEA,OAAO,WAAW;AAChB,eAAa,SACV,SAAS,OAAO,WAAW,WAAW,KAAK,CAAC,EAC7C,GAAI,WACA,EACG,oBACC,OAAO,QAAQ,SAAS,gBAAgB,CAAC,CAC5C,GACD,EAAE,CACP;GACD;CAEJ,MAAM,mBAAmB,UACvB,IAAI,qBAAqB,EAAE,OAAO,CAAC;CAErC,MAAM,SACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,MAAM,mBAAmB,YAAY,EACpD,gBACD;;CAGH,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,SAAS,mBAAmB,YAAY,EACvD,gBACD;;CAGH,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,OAAO,mBAAmB,YAAY,EACrD,gBACD;;CAGH,MAAM,iBACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;EAC3B,MAAM,oBAAoB,IAAI,qBAAqB,IAAI;EACvD,MAAM,UAAU,IAAI,kBAAkB,KAAK,gBAAgB;AAE3D,SAAO,OAAO,aACZ,OAAO,IAAI,aAAa;GACtB,MAAM,cAAc,OAAO,IAAI,WAAW,KAAK,KAAK;AAEpD,UAAO,OAAO,aAGX,SACD,OAAO,IAAI,aAAa;IACtB,MAAM,cAAc,aAAa,SAC/B,mBACA,cACC,WAAW;AACV,UAAK,OAAO,OAAO;QAEpB,UAAU;AACT,UAAK,KAAK,QAAQ,MAAM,CAAC;MAE5B;AACD,WAAO,OAAO,mBACZ,OAAO,WAAW,aAAa,CAAC,CACjC;KACD,CACH;IACD,CACH,CAAC,KACA,OAAO,WAAW,mBAChB,IAAI,cAAc,KAAK,eAAe,CACvC,CACF;;AAGH,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD;EACD,CACH;;;;AAKH,MAAa,kBAAkB,QAAQ,WAErC,8BAA8B;AAIhC,MAAa,SACX,SACA,YACG,MAAM,OAAO,iBAAiB,KAAK,SAAS,QAAQ,CAAC"}
1
+ {"version":3,"file":"WebSocketClient.js","names":[],"sources":["../src/WebSocketClient.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { ConvexClient } from \"convex/browser\";\nimport type { ParseResult } from \"effect\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\n\nexport class WebSocketClientError extends Schema.TaggedError<WebSocketClientError>()(\n \"WebSocketClientError\",\n {\n cause: Schema.Unknown,\n },\n) {}\n\nconst make = (\n address: string,\n options?: ConstructorParameters<typeof ConvexClient>[1],\n) =>\n Effect.acquireRelease(\n Effect.sync(() => new ConvexClient(address, options)),\n (convexClient) => Effect.promise(() => convexClient.close()),\n ).pipe(\n Effect.map((convexClient) => {\n const url = address;\n\n const setAuth = (\n fetchToken: (args: {\n forceRefreshToken: boolean;\n }) => Effect.Effect<string | null | undefined>,\n onChange?: (isAuthenticated: boolean) => Effect.Effect<void>,\n ) =>\n Effect.sync(() => {\n convexClient.setAuth(\n (args) => Effect.runPromise(fetchToken(args)),\n ...(onChange\n ? [\n (isAuthenticated: boolean) =>\n Effect.runFork(onChange(isAuthenticated)),\n ]\n : []),\n );\n });\n\n const mapUnknownError = (cause: unknown) =>\n new WebSocketClientError({ cause });\n\n const query = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Effect.Effect<\n Ref.Returns<Query>,\n Ref.Error<Query> | WebSocketClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.query(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const mutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n ...rest: Ref.OptionalArgs<Mutation>\n ): Effect.Effect<\n Ref.Returns<Mutation>,\n Ref.Error<Mutation> | WebSocketClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Mutation>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.mutation(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const action = <Action extends Ref.AnyPublicAction>(\n ref: Action,\n ...rest: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | WebSocketClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Action>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.action(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const reactiveQuery = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Stream.Stream<\n Ref.Returns<Query>,\n Ref.Error<Query> | WebSocketClientError | ParseResult.ParseError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n const functionReference = Ref.getFunctionReference(ref);\n const onError = Ref.decodeErrorOrElse(ref, mapUnknownError);\n\n return Stream.unwrapScoped(\n Effect.gen(function* () {\n const encodedArgs = yield* Ref.encodeArgs(ref, args);\n\n return Stream.asyncScoped<\n unknown,\n Ref.Error<Query> | WebSocketClientError\n >((emit) =>\n Effect.gen(function* () {\n const unsubscribe = convexClient.onUpdate(\n functionReference,\n encodedArgs,\n (result) => {\n emit.single(result);\n },\n (error) => {\n emit.fail(onError(error));\n },\n );\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => unsubscribe()),\n );\n }),\n );\n }),\n ).pipe(\n Stream.mapEffect((encodedReturns) =>\n Ref.decodeReturns(ref, encodedReturns),\n ),\n );\n };\n\n return {\n url,\n setAuth,\n query,\n mutation,\n action,\n reactiveQuery,\n };\n }),\n );\n\n/**\n * A Confect client which uses a WebSocket to communicate with your Convex backend and supports reactive query subscriptions. The WebSocket connection is managed by the layer's scope and closed automatically when the scope ends. Wraps [ConvexClient](https://docs.convex.dev/api/classes/browser.ConvexClient).\n */\nexport const WebSocketClient = Context.GenericTag<\n Effect.Effect.Success<ReturnType<typeof make>>\n>(\"@confect/js/WebSocketClient\");\n\nexport type WebSocketClient = typeof WebSocketClient.Identifier;\n\nexport const layer = (\n address: string,\n options?: ConstructorParameters<typeof ConvexClient>[1],\n) => Layer.scoped(WebSocketClient, make(address, options));\n"],"mappings":";;;;;;;;;;;;;;;AASA,IAAa,uBAAb,cAA0C,OAAO,aAAmC,CAClF,wBACA,EACE,OAAO,OAAO,SACf,CACF,CAAC;AAEF,MAAM,QACJ,SACA,YAEA,OAAO,eACL,OAAO,WAAW,IAAI,aAAa,SAAS,QAAQ,CAAC,GACpD,iBAAiB,OAAO,cAAc,aAAa,OAAO,CAAC,CAC7D,CAAC,KACA,OAAO,KAAK,iBAAiB;CAC3B,MAAM,MAAM;CAEZ,MAAM,WACJ,YAGA,aAEA,OAAO,WAAW;AAChB,eAAa,SACV,SAAS,OAAO,WAAW,WAAW,KAAK,CAAC,EAC7C,GAAI,WACA,EACG,oBACC,OAAO,QAAQ,SAAS,gBAAgB,CAAC,CAC5C,GACD,EAAE,CACP;GACD;CAEJ,MAAM,mBAAmB,UACvB,IAAI,qBAAqB,EAAE,OAAO,CAAC;CAErC,MAAM,SACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,MAAM,mBAAmB,YAAY,EACpD,gBACD;;CAGH,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,SAAS,mBAAmB,YAAY,EACvD,gBACD;;CAGH,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;AAC3B,SAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,OAAO,mBAAmB,YAAY,EACrD,gBACD;;CAGH,MAAM,iBACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,EAAE;EAC3B,MAAM,oBAAoB,IAAI,qBAAqB,IAAI;EACvD,MAAM,UAAU,IAAI,kBAAkB,KAAK,gBAAgB;AAE3D,SAAO,OAAO,aACZ,OAAO,IAAI,aAAa;GACtB,MAAM,cAAc,OAAO,IAAI,WAAW,KAAK,KAAK;AAEpD,UAAO,OAAO,aAGX,SACD,OAAO,IAAI,aAAa;IACtB,MAAM,cAAc,aAAa,SAC/B,mBACA,cACC,WAAW;AACV,UAAK,OAAO,OAAO;QAEpB,UAAU;AACT,UAAK,KAAK,QAAQ,MAAM,CAAC;MAE5B;AACD,WAAO,OAAO,mBACZ,OAAO,WAAW,aAAa,CAAC,CACjC;KACD,CACH;IACD,CACH,CAAC,KACA,OAAO,WAAW,mBAChB,IAAI,cAAc,KAAK,eAAe,CACvC,CACF;;AAGH,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD;EACD,CACH;;;;AAKH,MAAa,kBAAkB,QAAQ,WAErC,8BAA8B;AAIhC,MAAa,SACX,SACA,YACG,MAAM,OAAO,iBAAiB,KAAK,SAAS,QAAQ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@confect/js",
3
3
  "description": "JavaScript client bindings for any JS runtime",
4
- "version": "9.0.0-next.7",
4
+ "version": "9.0.0-next.8",
5
5
  "author": "RJ Dellecese",
6
6
  "bugs": {
7
7
  "url": "https://github.com/rjdellecese/confect/issues"
@@ -47,7 +47,7 @@
47
47
  "peerDependencies": {
48
48
  "convex": "1.39.1",
49
49
  "effect": "^3.21.2",
50
- "@confect/core": "^9.0.0-next.7"
50
+ "@confect/core": "^9.0.0-next.8"
51
51
  },
52
52
  "repository": {
53
53
  "type": "git",
package/src/HttpClient.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  import * as Ref from "@confect/core/Ref";
2
2
  import { ConvexHttpClient } from "convex/browser";
3
3
  import type { ParseResult } from "effect";
4
- import { Context, Effect, Layer, Schema } from "effect";
4
+ import * as Context from "effect/Context";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ import * as Schema from "effect/Schema";
5
8
 
6
9
  export class HttpClientError extends Schema.TaggedError<HttpClientError>()(
7
10
  "HttpClientError",
@@ -1,7 +1,11 @@
1
1
  import * as Ref from "@confect/core/Ref";
2
2
  import { ConvexClient } from "convex/browser";
3
3
  import type { ParseResult } from "effect";
4
- import { Context, Effect, Layer, Schema, Stream } from "effect";
4
+ import * as Context from "effect/Context";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ import * as Schema from "effect/Schema";
8
+ import * as Stream from "effect/Stream";
5
9
 
6
10
  export class WebSocketClientError extends Schema.TaggedError<WebSocketClientError>()(
7
11
  "WebSocketClientError",