@effect/sql-d1 4.0.0-beta.9 → 4.0.0-beta.90

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,28 +1,43 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Cloudflare D1 client implementation for Effect SQL, backed by a Workers `D1Database` binding.
3
+ *
4
+ * This module adapts a Cloudflare D1 database binding into both the
5
+ * D1-specific `D1Client` service and the generic Effect `SqlClient` service.
6
+ * It uses the SQLite statement compiler, caches prepared statements, maps D1
7
+ * failures to `SqlError`, and provides direct or config-backed layers.
8
+ * Transactions, streaming queries, and `updateValues` are not supported by this
9
+ * driver.
10
+ *
11
+ * @since 4.0.0
3
12
  */
4
13
  import type { D1Database } from "@cloudflare/workers-types";
5
14
  import * as Config from "effect/Config";
15
+ import * as Context from "effect/Context";
6
16
  import * as Duration from "effect/Duration";
7
17
  import * as Effect from "effect/Effect";
8
18
  import * as Layer from "effect/Layer";
9
19
  import type * as Scope from "effect/Scope";
10
- import * as ServiceMap from "effect/ServiceMap";
11
20
  import * as Reactivity from "effect/unstable/reactivity/Reactivity";
12
21
  import * as Client from "effect/unstable/sql/SqlClient";
13
22
  /**
14
- * @category type ids
15
- * @since 1.0.0
23
+ * Unique runtime identifier used to tag `D1Client` values.
24
+ *
25
+ * @category type IDs
26
+ * @since 4.0.0
16
27
  */
17
28
  export declare const TypeId: TypeId;
18
29
  /**
19
- * @category type ids
20
- * @since 1.0.0
30
+ * Type-level literal for the `D1Client` runtime identifier.
31
+ *
32
+ * @category type IDs
33
+ * @since 4.0.0
21
34
  */
22
35
  export type TypeId = "~@effect/sql-d1/D1Client";
23
36
  /**
37
+ * Cloudflare D1 SQL client service, extending `SqlClient` with its D1 configuration and no `updateValues` support.
38
+ *
24
39
  * @category models
25
- * @since 1.0.0
40
+ * @since 4.0.0
26
41
  */
27
42
  export interface D1Client extends Client.SqlClient {
28
43
  readonly [TypeId]: TypeId;
@@ -31,13 +46,22 @@ export interface D1Client extends Client.SqlClient {
31
46
  readonly updateValues: never;
32
47
  }
33
48
  /**
34
- * @category tags
35
- * @since 1.0.0
49
+ * Service tag for the Cloudflare D1 SQL client.
50
+ *
51
+ * **When to use**
52
+ *
53
+ * Use to access or provide a Cloudflare D1 SQL client through the Effect
54
+ * context.
55
+ *
56
+ * @category services
57
+ * @since 4.0.0
36
58
  */
37
- export declare const D1Client: ServiceMap.Service<D1Client, D1Client>;
59
+ export declare const D1Client: Context.Service<D1Client, D1Client>;
38
60
  /**
61
+ * Configuration for a Cloudflare D1 client, including the `D1Database`, prepared statement cache settings, span attributes, and query/result name transforms.
62
+ *
39
63
  * @category models
40
- * @since 1.0.0
64
+ * @since 4.0.0
41
65
  */
42
66
  export interface D1ClientConfig {
43
67
  readonly db: D1Database;
@@ -48,18 +72,24 @@ export interface D1ClientConfig {
48
72
  readonly transformQueryNames?: ((str: string) => string) | undefined;
49
73
  }
50
74
  /**
51
- * @category constructor
52
- * @since 1.0.0
75
+ * Creates a scoped Cloudflare D1 SQL client. Prepared statements are cached, while transactions and streaming queries are not supported by this driver.
76
+ *
77
+ * @category constructors
78
+ * @since 4.0.0
53
79
  */
54
80
  export declare const make: (options: D1ClientConfig) => Effect.Effect<D1Client, never, Scope.Scope | Reactivity.Reactivity>;
55
81
  /**
82
+ * Creates a layer from a `Config`-wrapped D1 client configuration, providing both `D1Client` and `SqlClient`.
83
+ *
56
84
  * @category layers
57
- * @since 1.0.0
85
+ * @since 4.0.0
58
86
  */
59
87
  export declare const layerConfig: (config: Config.Wrap<D1ClientConfig>) => Layer.Layer<D1Client | Client.SqlClient, Config.ConfigError>;
60
88
  /**
89
+ * Creates a layer from a concrete D1 client configuration, providing both `D1Client` and `SqlClient`.
90
+ *
61
91
  * @category layers
62
- * @since 1.0.0
92
+ * @since 4.0.0
63
93
  */
64
94
  export declare const layer: (config: D1ClientConfig) => Layer.Layer<D1Client | Client.SqlClient, Config.ConfigError>;
65
95
  //# sourceMappingURL=D1Client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"D1Client.d.ts","sourceRoot":"","sources":["../src/D1Client.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAuB,MAAM,2BAA2B,CAAA;AAEhF,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAOvD;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAAmC,CAAA;AAExD;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,0BAA0B,CAAA;AAE/C;;;GAGG;AACH,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,SAAS;IAChD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAE/B,0BAA0B;IAC1B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,wCAA0D,CAAA;AAE/E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAE7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;CACrE;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,cAAc,KACtB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAgHjE,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAClC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAUrB,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,cAAc,KACrB,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAMrB,CAAA"}
1
+ {"version":3,"file":"D1Client.d.ts","sourceRoot":"","sources":["../src/D1Client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,UAAU,EAAuB,MAAM,2BAA2B,CAAA;AAEhF,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAE1C,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAUvD;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,MAAmC,CAAA;AAExD;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,0BAA0B,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,SAAS;IAChD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAE/B,0BAA0B;IAC1B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,qCAAuD,CAAA;AAE5E;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAE7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;CACrE;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,cAAc,KACtB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAkIjE,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAClC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAUrB,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,cAAc,KACrB,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAMrB,CAAA"}
package/dist/D1Client.js CHANGED
@@ -1,29 +1,45 @@
1
1
  import * as Cache from "effect/Cache";
2
2
  import * as Config from "effect/Config";
3
+ import * as Context from "effect/Context";
3
4
  import * as Duration from "effect/Duration";
4
5
  import * as Effect from "effect/Effect";
5
6
  import { identity } from "effect/Function";
6
7
  import * as Layer from "effect/Layer";
7
- import * as ServiceMap from "effect/ServiceMap";
8
8
  import * as Stream from "effect/Stream";
9
9
  import * as Reactivity from "effect/unstable/reactivity/Reactivity";
10
10
  import * as Client from "effect/unstable/sql/SqlClient";
11
- import { SqlError } from "effect/unstable/sql/SqlError";
11
+ import { SqlError, UnknownError } from "effect/unstable/sql/SqlError";
12
12
  import * as Statement from "effect/unstable/sql/Statement";
13
13
  const ATTR_DB_SYSTEM_NAME = "db.system.name";
14
+ const classifyError = (cause, message, operation) => new UnknownError({
15
+ cause,
16
+ message,
17
+ operation
18
+ });
14
19
  /**
15
- * @category type ids
16
- * @since 1.0.0
20
+ * Unique runtime identifier used to tag `D1Client` values.
21
+ *
22
+ * @category type IDs
23
+ * @since 4.0.0
17
24
  */
18
25
  export const TypeId = "~@effect/sql-d1/D1Client";
19
26
  /**
20
- * @category tags
21
- * @since 1.0.0
27
+ * Service tag for the Cloudflare D1 SQL client.
28
+ *
29
+ * **When to use**
30
+ *
31
+ * Use to access or provide a Cloudflare D1 SQL client through the Effect
32
+ * context.
33
+ *
34
+ * @category services
35
+ * @since 4.0.0
22
36
  */
23
- export const D1Client = /*#__PURE__*/ServiceMap.Service("@effect/sql-d1/D1Client");
37
+ export const D1Client = /*#__PURE__*/Context.Service("@effect/sql-d1/D1Client");
24
38
  /**
25
- * @category constructor
26
- * @since 1.0.0
39
+ * Creates a scoped Cloudflare D1 SQL client. Prepared statements are cached, while transactions and streaming queries are not supported by this driver.
40
+ *
41
+ * @category constructors
42
+ * @since 4.0.0
27
43
  */
28
44
  export const make = options => Effect.gen(function* () {
29
45
  const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
@@ -36,8 +52,7 @@ export const make = options => Effect.gen(function* () {
36
52
  lookup: sql => Effect.try({
37
53
  try: () => db.prepare(sql),
38
54
  catch: cause => new SqlError({
39
- cause,
40
- message: `Failed to prepare statement`
55
+ reason: classifyError(cause, "Failed to prepare statement", "prepare")
41
56
  })
42
57
  })
43
58
  });
@@ -50,8 +65,7 @@ export const make = options => Effect.gen(function* () {
50
65
  return response.results || [];
51
66
  },
52
67
  catch: cause => new SqlError({
53
- cause,
54
- message: `Failed to execute statement`
68
+ reason: classifyError(cause, "Failed to execute statement", "execute")
55
69
  })
56
70
  });
57
71
  const runRaw = (sql, params = []) => runStatement(db.prepare(sql), params);
@@ -62,10 +76,17 @@ export const make = options => Effect.gen(function* () {
62
76
  return statement.bind(...params).raw();
63
77
  },
64
78
  catch: cause => new SqlError({
65
- cause,
66
- message: `Failed to execute statement`
79
+ reason: classifyError(cause, "Failed to execute statement", "execute")
67
80
  })
68
81
  }));
82
+ const runValuesUncached = (sql, params) => Effect.tryPromise({
83
+ try: () => {
84
+ return db.prepare(sql).bind(...params).raw();
85
+ },
86
+ catch: cause => new SqlError({
87
+ reason: classifyError(cause, "Failed to execute statement", "execute")
88
+ })
89
+ });
69
90
  return identity({
70
91
  execute(sql, params, transformRows) {
71
92
  return transformRows ? Effect.map(runCached(sql, params), transformRows) : runCached(sql, params);
@@ -76,6 +97,9 @@ export const make = options => Effect.gen(function* () {
76
97
  executeValues(sql, params) {
77
98
  return runValues(sql, params);
78
99
  },
100
+ executeValuesUnprepared(sql, params) {
101
+ return runValuesUncached(sql, params);
102
+ },
79
103
  executeUnprepared(sql, params, transformRows) {
80
104
  return transformRows ? Effect.map(runUncached(sql, params), transformRows) : runUncached(sql, params);
81
105
  },
@@ -99,13 +123,17 @@ export const make = options => Effect.gen(function* () {
99
123
  });
100
124
  });
101
125
  /**
126
+ * Creates a layer from a `Config`-wrapped D1 client configuration, providing both `D1Client` and `SqlClient`.
127
+ *
102
128
  * @category layers
103
- * @since 1.0.0
129
+ * @since 4.0.0
104
130
  */
105
- export const layerConfig = config => Layer.effectServices(Config.unwrap(config).asEffect().pipe(Effect.flatMap(make), Effect.map(client => ServiceMap.make(D1Client, client).pipe(ServiceMap.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer));
131
+ export const layerConfig = config => Layer.effectContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(D1Client, client).pipe(Context.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer));
106
132
  /**
133
+ * Creates a layer from a concrete D1 client configuration, providing both `D1Client` and `SqlClient`.
134
+ *
107
135
  * @category layers
108
- * @since 1.0.0
136
+ * @since 4.0.0
109
137
  */
110
- export const layer = config => Layer.effectServices(Effect.map(make(config), client => ServiceMap.make(D1Client, client).pipe(ServiceMap.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer));
138
+ export const layer = config => Layer.effectContext(Effect.map(make(config), client => Context.make(D1Client, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer));
111
139
  //# sourceMappingURL=D1Client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"D1Client.js","names":["Cache","Config","Duration","Effect","identity","Layer","ServiceMap","Stream","Reactivity","Client","SqlError","Statement","ATTR_DB_SYSTEM_NAME","TypeId","D1Client","Service","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","db","prepareCache","capacity","prepareCacheSize","timeToLive","prepareCacheTTL","minutes","lookup","sql","try","prepare","catch","cause","message","runStatement","statement","params","tryPromise","response","bind","all","error","results","runRaw","runCached","flatMap","get","s","runUncached","runValues","raw","execute","map","executeRaw","executeValues","executeUnprepared","executeStream","_sql","_params","die","connection","acquirer","succeed","transactionAcquirer","Object","assign","spanAttributes","entries","config","layerConfig","effectServices","unwrap","asEffect","pipe","client","add","SqlClient","provide","layer"],"sources":["../src/D1Client.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"D1Client.js","names":["Cache","Config","Context","Duration","Effect","identity","Layer","Stream","Reactivity","Client","SqlError","UnknownError","Statement","ATTR_DB_SYSTEM_NAME","classifyError","cause","message","operation","TypeId","D1Client","Service","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","db","prepareCache","capacity","prepareCacheSize","timeToLive","prepareCacheTTL","minutes","lookup","sql","try","prepare","catch","reason","runStatement","statement","params","tryPromise","response","bind","all","error","results","runRaw","runCached","flatMap","get","s","runUncached","runValues","raw","runValuesUncached","execute","map","executeRaw","executeValues","executeValuesUnprepared","executeUnprepared","executeStream","_sql","_params","die","connection","acquirer","succeed","transactionAcquirer","Object","assign","spanAttributes","entries","config","layerConfig","effectContext","unwrap","pipe","client","add","SqlClient","provide","layer"],"sources":["../src/D1Client.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  /**
5
- * @since 1.0.0
5
+ * @since 4.0.0
6
6
  */
7
7
  export * as D1Client from "./D1Client.ts";
8
8
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  // @barrel: Auto-generated exports. Do not edit manually.
5
5
  /**
6
- * @since 1.0.0
6
+ * @since 4.0.0
7
7
  */
8
8
  export * as D1Client from "./D1Client.js";
9
9
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/sql-d1",
3
- "version": "4.0.0-beta.9",
3
+ "version": "4.0.0-beta.90",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "A Cloudflare D1 integration for Effect",
@@ -47,14 +47,14 @@
47
47
  "provenance": true
48
48
  },
49
49
  "devDependencies": {
50
- "miniflare": "^4.20260128.0",
51
- "effect": "^4.0.0-beta.9"
50
+ "miniflare": "^4.20260507.1",
51
+ "effect": "^4.0.0-beta.90"
52
52
  },
53
53
  "peerDependencies": {
54
- "effect": "^4.0.0-beta.9"
54
+ "effect": "^4.0.0-beta.90"
55
55
  },
56
56
  "dependencies": {
57
- "@cloudflare/workers-types": "^4.20260131.0"
57
+ "@cloudflare/workers-types": "^4.20260511.1"
58
58
  },
59
59
  "scripts": {
60
60
  "codegen": "effect-utils codegen",
package/src/D1Client.ts CHANGED
@@ -1,39 +1,57 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Cloudflare D1 client implementation for Effect SQL, backed by a Workers `D1Database` binding.
3
+ *
4
+ * This module adapts a Cloudflare D1 database binding into both the
5
+ * D1-specific `D1Client` service and the generic Effect `SqlClient` service.
6
+ * It uses the SQLite statement compiler, caches prepared statements, maps D1
7
+ * failures to `SqlError`, and provides direct or config-backed layers.
8
+ * Transactions, streaming queries, and `updateValues` are not supported by this
9
+ * driver.
10
+ *
11
+ * @since 4.0.0
3
12
  */
4
13
  import type { D1Database, D1PreparedStatement } from "@cloudflare/workers-types"
5
14
  import * as Cache from "effect/Cache"
6
15
  import * as Config from "effect/Config"
16
+ import * as Context from "effect/Context"
7
17
  import * as Duration from "effect/Duration"
8
18
  import * as Effect from "effect/Effect"
9
19
  import { identity } from "effect/Function"
10
20
  import * as Layer from "effect/Layer"
11
21
  import type * as Scope from "effect/Scope"
12
- import * as ServiceMap from "effect/ServiceMap"
13
22
  import * as Stream from "effect/Stream"
14
23
  import * as Reactivity from "effect/unstable/reactivity/Reactivity"
15
24
  import * as Client from "effect/unstable/sql/SqlClient"
16
25
  import type { Connection } from "effect/unstable/sql/SqlConnection"
17
- import { SqlError } from "effect/unstable/sql/SqlError"
26
+ import { SqlError, UnknownError } from "effect/unstable/sql/SqlError"
18
27
  import * as Statement from "effect/unstable/sql/Statement"
19
28
 
20
29
  const ATTR_DB_SYSTEM_NAME = "db.system.name"
21
30
 
31
+ const classifyError = (cause: unknown, message: string, operation: string) =>
32
+ new UnknownError({ cause, message, operation })
33
+
22
34
  /**
23
- * @category type ids
24
- * @since 1.0.0
35
+ * Unique runtime identifier used to tag `D1Client` values.
36
+ *
37
+ * @category type IDs
38
+ * @since 4.0.0
25
39
  */
26
40
  export const TypeId: TypeId = "~@effect/sql-d1/D1Client"
27
41
 
28
42
  /**
29
- * @category type ids
30
- * @since 1.0.0
43
+ * Type-level literal for the `D1Client` runtime identifier.
44
+ *
45
+ * @category type IDs
46
+ * @since 4.0.0
31
47
  */
32
48
  export type TypeId = "~@effect/sql-d1/D1Client"
33
49
 
34
50
  /**
51
+ * Cloudflare D1 SQL client service, extending `SqlClient` with its D1 configuration and no `updateValues` support.
52
+ *
35
53
  * @category models
36
- * @since 1.0.0
54
+ * @since 4.0.0
37
55
  */
38
56
  export interface D1Client extends Client.SqlClient {
39
57
  readonly [TypeId]: TypeId
@@ -44,14 +62,23 @@ export interface D1Client extends Client.SqlClient {
44
62
  }
45
63
 
46
64
  /**
47
- * @category tags
48
- * @since 1.0.0
65
+ * Service tag for the Cloudflare D1 SQL client.
66
+ *
67
+ * **When to use**
68
+ *
69
+ * Use to access or provide a Cloudflare D1 SQL client through the Effect
70
+ * context.
71
+ *
72
+ * @category services
73
+ * @since 4.0.0
49
74
  */
50
- export const D1Client = ServiceMap.Service<D1Client>("@effect/sql-d1/D1Client")
75
+ export const D1Client = Context.Service<D1Client>("@effect/sql-d1/D1Client")
51
76
 
52
77
  /**
78
+ * Configuration for a Cloudflare D1 client, including the `D1Database`, prepared statement cache settings, span attributes, and query/result name transforms.
79
+ *
53
80
  * @category models
54
- * @since 1.0.0
81
+ * @since 4.0.0
55
82
  */
56
83
  export interface D1ClientConfig {
57
84
  readonly db: D1Database
@@ -64,8 +91,10 @@ export interface D1ClientConfig {
64
91
  }
65
92
 
66
93
  /**
67
- * @category constructor
68
- * @since 1.0.0
94
+ * Creates a scoped Cloudflare D1 SQL client. Prepared statements are cached, while transactions and streaming queries are not supported by this driver.
95
+ *
96
+ * @category constructors
97
+ * @since 4.0.0
69
98
  */
70
99
  export const make = (
71
100
  options: D1ClientConfig
@@ -85,7 +114,7 @@ export const make = (
85
114
  lookup: (sql: string) =>
86
115
  Effect.try({
87
116
  try: () => db.prepare(sql),
88
- catch: (cause) => new SqlError({ cause, message: `Failed to prepare statement` })
117
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to prepare statement", "prepare") })
89
118
  })
90
119
  })
91
120
 
@@ -101,7 +130,7 @@ export const make = (
101
130
  }
102
131
  return response.results || []
103
132
  },
104
- catch: (cause) => new SqlError({ cause, message: `Failed to execute statement` })
133
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
105
134
  })
106
135
 
107
136
  const runRaw = (
@@ -134,10 +163,25 @@ export const make = (
134
163
  >
135
164
  >
136
165
  },
137
- catch: (cause) => new SqlError({ cause, message: `Failed to execute statement` })
166
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
138
167
  })
139
168
  )
140
169
 
170
+ const runValuesUncached = (
171
+ sql: string,
172
+ params: ReadonlyArray<unknown>
173
+ ) =>
174
+ Effect.tryPromise({
175
+ try: () => {
176
+ return db.prepare(sql).bind(...params).raw() as Promise<
177
+ ReadonlyArray<
178
+ ReadonlyArray<unknown>
179
+ >
180
+ >
181
+ },
182
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
183
+ })
184
+
141
185
  return identity<Connection>({
142
186
  execute(sql, params, transformRows) {
143
187
  return transformRows
@@ -150,6 +194,9 @@ export const make = (
150
194
  executeValues(sql, params) {
151
195
  return runValues(sql, params)
152
196
  },
197
+ executeValuesUnprepared(sql, params) {
198
+ return runValuesUncached(sql, params)
199
+ },
153
200
  executeUnprepared(sql, params, transformRows) {
154
201
  return transformRows
155
202
  ? Effect.map(runUncached(sql, params), transformRows)
@@ -184,33 +231,37 @@ export const make = (
184
231
  })
185
232
 
186
233
  /**
234
+ * Creates a layer from a `Config`-wrapped D1 client configuration, providing both `D1Client` and `SqlClient`.
235
+ *
187
236
  * @category layers
188
- * @since 1.0.0
237
+ * @since 4.0.0
189
238
  */
190
239
  export const layerConfig = (
191
240
  config: Config.Wrap<D1ClientConfig>
192
241
  ): Layer.Layer<D1Client | Client.SqlClient, Config.ConfigError> =>
193
- Layer.effectServices(
194
- Config.unwrap(config).asEffect().pipe(
242
+ Layer.effectContext(
243
+ Config.unwrap(config).pipe(
195
244
  Effect.flatMap(make),
196
245
  Effect.map((client) =>
197
- ServiceMap.make(D1Client, client).pipe(
198
- ServiceMap.add(Client.SqlClient, client)
246
+ Context.make(D1Client, client).pipe(
247
+ Context.add(Client.SqlClient, client)
199
248
  )
200
249
  )
201
250
  )
202
251
  ).pipe(Layer.provide(Reactivity.layer))
203
252
 
204
253
  /**
254
+ * Creates a layer from a concrete D1 client configuration, providing both `D1Client` and `SqlClient`.
255
+ *
205
256
  * @category layers
206
- * @since 1.0.0
257
+ * @since 4.0.0
207
258
  */
208
259
  export const layer = (
209
260
  config: D1ClientConfig
210
261
  ): Layer.Layer<D1Client | Client.SqlClient, Config.ConfigError> =>
211
- Layer.effectServices(
262
+ Layer.effectContext(
212
263
  Effect.map(make(config), (client) =>
213
- ServiceMap.make(D1Client, client).pipe(
214
- ServiceMap.add(Client.SqlClient, client)
264
+ Context.make(D1Client, client).pipe(
265
+ Context.add(Client.SqlClient, client)
215
266
  ))
216
267
  ).pipe(Layer.provide(Reactivity.layer))
package/src/index.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
 
5
5
  // @barrel: Auto-generated exports. Do not edit manually.
6
6
 
7
7
  /**
8
- * @since 1.0.0
8
+ * @since 4.0.0
9
9
  */
10
10
  export * as D1Client from "./D1Client.ts"