@effect/sql-pg 4.0.0-beta.98 → 4.0.0-rc.108

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 (87) hide show
  1. package/AGENTS.md +381 -0
  2. package/CLAUDE.md +381 -0
  3. package/README.md +10 -3
  4. package/ai-docs/README.md +44 -0
  5. package/ai-docs/package.json +36 -0
  6. package/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
  7. package/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +39 -0
  8. package/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
  9. package/ai-docs/src/01_effect/01_basics/index.md +5 -0
  10. package/ai-docs/src/01_effect/02_schema/10_schema-basics.ts +43 -0
  11. package/ai-docs/src/01_effect/02_schema/index.md +7 -0
  12. package/ai-docs/src/01_effect/03_services/01_service.ts +45 -0
  13. package/ai-docs/src/01_effect/03_services/10_reference.ts +10 -0
  14. package/ai-docs/src/01_effect/03_services/20_layer-composition.ts +70 -0
  15. package/ai-docs/src/01_effect/03_services/20_layer-unwrap.ts +66 -0
  16. package/ai-docs/src/01_effect/03_services/index.md +5 -0
  17. package/ai-docs/src/01_effect/04_errors/01_error-handling.ts +30 -0
  18. package/ai-docs/src/01_effect/04_errors/10_catch-tags.ts +24 -0
  19. package/ai-docs/src/01_effect/04_errors/20_reason-errors.ts +64 -0
  20. package/ai-docs/src/01_effect/04_errors/index.md +1 -0
  21. package/ai-docs/src/01_effect/05_resources/10_acquire-release.ts +105 -0
  22. package/ai-docs/src/01_effect/05_resources/20_layer-side-effects.ts +31 -0
  23. package/ai-docs/src/01_effect/05_resources/30_layer-map.ts +86 -0
  24. package/ai-docs/src/01_effect/05_resources/index.md +3 -0
  25. package/ai-docs/src/01_effect/06_running/10_run-main.ts +30 -0
  26. package/ai-docs/src/01_effect/06_running/20_layer-launch.ts +27 -0
  27. package/ai-docs/src/01_effect/06_running/index.md +1 -0
  28. package/ai-docs/src/01_effect/07_pubsub/10_pubsub.ts +56 -0
  29. package/ai-docs/src/01_effect/07_pubsub/index.md +3 -0
  30. package/ai-docs/src/03_stream/10_creating-streams.ts +103 -0
  31. package/ai-docs/src/03_stream/20_consuming-streams.ts +137 -0
  32. package/ai-docs/src/03_stream/30_encoding.ts +165 -0
  33. package/ai-docs/src/03_stream/index.md +4 -0
  34. package/ai-docs/src/04_integration/10_managed-runtime.ts +129 -0
  35. package/ai-docs/src/04_integration/index.md +5 -0
  36. package/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
  37. package/ai-docs/src/05_batching/index.md +3 -0
  38. package/ai-docs/src/06_schedule/10_schedules.ts +110 -0
  39. package/ai-docs/src/06_schedule/index.md +3 -0
  40. package/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
  41. package/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
  42. package/ai-docs/src/07_datetime/index.md +5 -0
  43. package/ai-docs/src/08_observability/10_logging.ts +66 -0
  44. package/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
  45. package/ai-docs/src/08_observability/index.md +7 -0
  46. package/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
  47. package/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
  48. package/ai-docs/src/09_testing/index.md +1 -0
  49. package/ai-docs/src/10_predicate/01_basics.ts +14 -0
  50. package/ai-docs/src/10_predicate/index.md +9 -0
  51. package/ai-docs/src/50_http-client/10_basics.ts +102 -0
  52. package/ai-docs/src/50_http-client/index.md +3 -0
  53. package/ai-docs/src/51_http-server/10_basics.ts +116 -0
  54. package/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
  55. package/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
  56. package/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
  57. package/ai-docs/src/51_http-server/fixtures/api/Users.ts +91 -0
  58. package/ai-docs/src/51_http-server/fixtures/domain/User.ts +12 -0
  59. package/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
  60. package/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +36 -0
  61. package/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +71 -0
  62. package/ai-docs/src/51_http-server/fixtures/server/Users.ts +62 -0
  63. package/ai-docs/src/51_http-server/index.md +3 -0
  64. package/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
  65. package/ai-docs/src/60_child-process/index.md +3 -0
  66. package/ai-docs/src/70_cli/10_basics.ts +136 -0
  67. package/ai-docs/src/70_cli/index.md +5 -0
  68. package/ai-docs/src/71_ai/10_language-model.ts +156 -0
  69. package/ai-docs/src/71_ai/20_tools.ts +226 -0
  70. package/ai-docs/src/71_ai/30_chat.ts +158 -0
  71. package/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
  72. package/ai-docs/src/71_ai/index.md +5 -0
  73. package/ai-docs/src/80_cluster/10_entities.ts +97 -0
  74. package/ai-docs/src/80_cluster/index.md +4 -0
  75. package/ai-docs/src/index.md +10 -0
  76. package/ai-docs/tsconfig.json +24 -0
  77. package/dist/PgClient.d.ts +6 -6
  78. package/dist/PgClient.d.ts.map +1 -1
  79. package/dist/PgClient.js +39 -27
  80. package/dist/PgClient.js.map +1 -1
  81. package/dist/PgMigrator.d.ts +1 -1
  82. package/dist/PgMigrator.js +1 -1
  83. package/dist/PgMigrator.js.map +1 -1
  84. package/dist/index.js.map +1 -1
  85. package/package.json +13 -11
  86. package/src/PgClient.ts +65 -49
  87. package/src/PgMigrator.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PgMigrator.js","names":["Effect","FileSystem","Layer","Path","Redacted","ChildProcess","ChildProcessSpawner","Migrator","PgClient","run","make","dumpSchema","path","table","pgDump","args","gen","sql","spawner","dump","env","PATH","globalThis","process","PGHOST","config","host","PGPORT","port","toString","PGUSER","username","PGPASSWORD","password","value","undefined","PGDATABASE","database","PGSSLMODE","ssl","pipe","string","replace","trim","mapError","error","MigrationError","kind","message","pgDumpSchema","pgDumpMigrations","pgDumpAll","map","all","concurrency","schema","migrations","pgDumpFile","fs","path_","makeDirectory","dirname","recursive","writeFileString","layer","options","effectDiscard"],"sources":["../src/PgMigrator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PgMigrator.js","names":[],"sources":["../src/PgMigrator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["PgClient","PgMigrator"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAK,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAK,UAAU,MAAM,iBAAiB","ignoreList":[]}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@effect/sql-pg",
3
- "version": "4.0.0-beta.98",
3
+ "version": "4.0.0-rc.108",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "A PostgreSQL toolkit for Effect",
7
7
  "homepage": "https://effect.website",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/Effect-TS/effect-smol.git",
10
+ "url": "https://github.com/Effect-TS/effect.git",
11
11
  "directory": "packages/sql/pg"
12
12
  },
13
13
  "bugs": {
14
- "url": "https://github.com/Effect-TS/effect-smol/issues"
14
+ "url": "https://github.com/Effect-TS/effect/issues"
15
15
  },
16
16
  "tags": [
17
17
  "typescript",
@@ -29,6 +29,7 @@
29
29
  ".": "./dist/index.js",
30
30
  "./*": "./dist/*.js",
31
31
  "./internal/*": null,
32
+ "./index": null,
32
33
  "./*/index": null
33
34
  },
34
35
  "files": [
@@ -36,24 +37,27 @@
36
37
  "dist/**/*.js",
37
38
  "dist/**/*.js.map",
38
39
  "dist/**/*.d.ts",
39
- "dist/**/*.d.ts.map"
40
+ "dist/**/*.d.ts.map",
41
+ "AGENTS.md",
42
+ "CLAUDE.md",
43
+ "ai-docs/**/*"
40
44
  ],
41
45
  "publishConfig": {
42
46
  "access": "public",
43
47
  "provenance": true
44
48
  },
45
49
  "devDependencies": {
46
- "@testcontainers/postgresql": "^11.14.0",
50
+ "@testcontainers/postgresql": "^12.0.4",
47
51
  "@types/pg": "^8.20.0",
48
52
  "@types/pg-cursor": "^2.7.2",
49
- "effect": "^4.0.0-beta.98"
53
+ "effect": "^4.0.0-rc.108"
50
54
  },
51
55
  "peerDependencies": {
52
- "effect": "^4.0.0-beta.98"
56
+ "effect": "^4.0.0-rc.108"
53
57
  },
54
58
  "dependencies": {
55
59
  "pg": "^8.22.0",
56
- "pg-connection-string": "2.14.0",
60
+ "pg-connection-string": "^2.14.0",
57
61
  "pg-cursor": "^2.21.0",
58
62
  "pg-pool": "^3.14.0",
59
63
  "pg-types": "^4.1.0"
@@ -62,8 +66,6 @@
62
66
  "codegen": "effect-utils codegen",
63
67
  "build": "tsc -b tsconfig.json && pnpm babel",
64
68
  "babel": "babel dist --plugins annotate-pure-calls --out-dir dist --source-maps",
65
- "check": "tsc -b tsconfig.json",
66
- "test": "vitest",
67
- "coverage": "vitest --coverage"
69
+ "check": "tsc -b tsconfig.json"
68
70
  }
69
71
  }
package/src/PgClient.ts CHANGED
@@ -73,7 +73,7 @@ export type TypeId = "~@effect/sql-pg/PgClient"
73
73
  /**
74
74
  * PostgreSQL client service, extending `SqlClient` with JSON parameter fragments and LISTEN/NOTIFY helpers.
75
75
  *
76
- * @category models
76
+ * @category services
77
77
  * @since 4.0.0
78
78
  */
79
79
  export interface PgClient extends Client.SqlClient {
@@ -99,7 +99,7 @@ export const PgClient = Context.Service<PgClient>("@effect/sql-pg/PgClient")
99
99
  /**
100
100
  * Configuration for a PostgreSQL client, including connection, TLS, custom stream, application name, type parser, JSON transform, and query/result name transform options.
101
101
  *
102
- * @category constructors
102
+ * @category models
103
103
  * @since 4.0.0
104
104
  */
105
105
  export interface PgClientConfig {
@@ -129,7 +129,7 @@ export interface PgClientConfig {
129
129
  /**
130
130
  * PostgreSQL pool configuration, extending `PgClientConfig` with idle timeout, pool size, and connection lifetime settings.
131
131
  *
132
- * @category constructors
132
+ * @category models
133
133
  * @since 4.0.0
134
134
  */
135
135
  export interface PgPoolConfig extends PgClientConfig {
@@ -219,52 +219,57 @@ export const makeClient = (
219
219
  */
220
220
  readonly acquireForStream?: boolean | undefined
221
221
  }
222
- ): Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity> =>
223
- fromClient({
222
+ ): Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity> => {
223
+ function onError() {}
224
+ return fromClient({
224
225
  ...options,
225
- acquire: Effect.gen(function*() {
226
- const client = new Pg.Client({
227
- connectionString: options.url ? Redacted.value(options.url) : undefined,
228
- user: options.username,
229
- host: options.host,
230
- database: options.database,
231
- password: options.password ? Redacted.value(options.password) : undefined,
232
- ssl: options.ssl,
233
- port: options.port,
234
- ...(options.stream ? { stream: options.stream } : {}),
235
- application_name: options.applicationName ?? "@effect/sql-pg",
236
- types: options.types
237
- })
238
- yield* Effect.acquireRelease(
239
- Effect.tryPromise({
240
- try: () => client.query("SELECT 1"),
241
- catch: (cause) => new SqlError({ reason: classifyError(cause, "PgClient: Failed to connect", "connect") })
242
- }),
243
- () =>
244
- Effect.promise(() => client.end()).pipe(
245
- Effect.timeoutOption(1000)
246
- ),
247
- { interruptible: true }
248
- ).pipe(
249
- Effect.timeoutOrElse({
250
- duration: options.connectTimeout ?? Duration.seconds(5),
251
- orElse: () =>
252
- Effect.fail(
253
- new SqlError({
254
- reason: new ConnectionError({
255
- cause: new Error("Connection timed out"),
256
- message: "PgClient: Connection timed out",
257
- operation: "connect"
258
- })
226
+ acquire: Effect.acquireRelease(
227
+ Effect.tryPromise({
228
+ try: async () => {
229
+ const client = new Pg.Client({
230
+ connectionString: options.url ? Redacted.value(options.url) : undefined,
231
+ user: options.username,
232
+ host: options.host,
233
+ database: options.database,
234
+ password: options.password ? Redacted.value(options.password) : undefined,
235
+ ssl: options.ssl,
236
+ port: options.port,
237
+ ...(options.stream ? { stream: options.stream } : {}),
238
+ application_name: options.applicationName ?? "@effect/sql-pg",
239
+ types: options.types
240
+ })
241
+ client.on("error", onError)
242
+ await client.connect()
243
+ return client
244
+ },
245
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "PgClient: Failed to connect", "connect") })
246
+ }),
247
+ (client) =>
248
+ Effect.promise(() => {
249
+ client.off("error", onError)
250
+ return client.end()
251
+ }).pipe(
252
+ Effect.timeoutOption(1000)
253
+ ),
254
+ { interruptible: true }
255
+ ).pipe(
256
+ Effect.timeoutOrElse({
257
+ duration: options.connectTimeout ?? Duration.seconds(5),
258
+ orElse: () =>
259
+ Effect.fail(
260
+ new SqlError({
261
+ reason: new ConnectionError({
262
+ cause: new Error("Connection timed out"),
263
+ message: "PgClient: Connection timed out",
264
+ operation: "connect"
259
265
  })
260
- )
261
- })
262
- )
263
-
264
- return client
265
- }),
266
+ })
267
+ )
268
+ })
269
+ ),
266
270
  acquireForStream: options.acquireForStream ?? false
267
271
  })
272
+ }
268
273
 
269
274
  /**
270
275
  * Builds a PostgreSQL client from a scoped `pg` pool acquisition effect, deriving transaction, streaming, and LISTEN/NOTIFY support from that pool.
@@ -523,6 +528,17 @@ export const fromClient = Effect.fnUntraced(function*(
523
528
  )
524
529
  const connection = makeConection(client)
525
530
  const acquirer = semaphore.withPermit(Effect.succeed(connection))
531
+ const transactionAcquirer = Effect.uninterruptibleMask((restore) => {
532
+ const fiber = Fiber.getCurrent()!
533
+ const scope = Context.getUnsafe(fiber.context, Scope.Scope)
534
+ return Effect.as(
535
+ Effect.tap(
536
+ restore(semaphore.take(1)),
537
+ () => Scope.addFinalizer(scope, semaphore.release(1))
538
+ ),
539
+ connection
540
+ )
541
+ })
526
542
 
527
543
  const config: PgClientConfig = {
528
544
  ...options,
@@ -536,7 +552,7 @@ export const fromClient = Effect.fnUntraced(function*(
536
552
 
537
553
  return yield* makeWith({
538
554
  acquirer,
539
- transactionAcquirer: acquirer,
555
+ transactionAcquirer,
540
556
  listenAcquirer: streamClient,
541
557
  config,
542
558
  spanAttributes: options.spanAttributes,
@@ -866,18 +882,18 @@ const escape = Statement.defaultEscape("\"")
866
882
  /**
867
883
  * PostgreSQL-specific custom statement fragments supported by the compiler, currently JSON parameter fragments.
868
884
  *
869
- * @category custom types
885
+ * @category models
870
886
  * @since 4.0.0
871
887
  */
872
888
  export type PgCustom = PgJson
873
889
 
874
890
  /**
875
- * @category custom types
891
+ * @category models
876
892
  * @since 4.0.0
877
893
  */
878
894
  interface PgJson extends Custom<"PgJson", unknown> {}
879
895
  /**
880
- * @category custom types
896
+ * @category constructors
881
897
  * @since 4.0.0
882
898
  */
883
899
  const PgJson = Statement.custom<PgJson>("PgJson")
package/src/PgMigrator.ts CHANGED
@@ -29,7 +29,7 @@ export * from "effect/unstable/sql/Migrator"
29
29
  /**
30
30
  * Runs PostgreSQL SQL migrations using the configured clients. Schema dumps use `pg_dump` and require child process, filesystem, and path services.
31
31
  *
32
- * @category constructors
32
+ * @category running
33
33
  * @since 4.0.0
34
34
  */
35
35
  export const run: <R2 = never>(