@zio.dev/zio-blocks 0.0.51 → 0.0.55

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 (164) hide show
  1. package/adr/2026-07-18-data-migration.md +123 -0
  2. package/guides/async-getting-started.md +687 -0
  3. package/guides/compile-time-resource-safety-with-scope.md +6 -0
  4. package/guides/getting-started-with-mux.md +0 -112
  5. package/guides/query-dsl-extending.md +1 -1
  6. package/guides/query-dsl-fluent-builder.md +1 -1
  7. package/guides/query-dsl-reified-optics.md +1 -1
  8. package/guides/query-dsl-sql.md +395 -1
  9. package/guides/sql-checked-interpolation.md +173 -0
  10. package/guides/sql-transactions.md +286 -0
  11. package/guides/telemetry-guide.md +131 -70
  12. package/guides/zio-schema-migration.md +6 -6
  13. package/index.md +200 -583
  14. package/package.json +1 -1
  15. package/reference/async.md +1379 -531
  16. package/reference/chunk.md +3 -3
  17. package/reference/codegen/index.md +1 -1
  18. package/reference/combinators.md +4 -4
  19. package/reference/config/config-decoder.md +460 -0
  20. package/reference/config/config-source.md +489 -0
  21. package/reference/config/errors.md +278 -0
  22. package/reference/config/flags.md +369 -0
  23. package/reference/config/formats.md +314 -0
  24. package/reference/config/index.md +304 -0
  25. package/reference/config/rollout.md +336 -0
  26. package/reference/context.md +6 -49
  27. package/reference/data-migration.md +269 -0
  28. package/reference/datastar/attributes.md +302 -0
  29. package/reference/datastar/events.md +234 -0
  30. package/reference/datastar/index.md +256 -0
  31. package/reference/datastar/signals.md +230 -0
  32. package/reference/datastar/sse.md +295 -0
  33. package/reference/datastar.md +2 -2
  34. package/reference/docs.md +2 -2
  35. package/reference/endpoint/bulk-creation.md +96 -0
  36. package/reference/endpoint/index.md +9 -89
  37. package/reference/endpoint/path-codec.md +12 -24
  38. package/reference/endpoint/route-pattern.md +4 -6
  39. package/reference/endpoint/segment-codec.md +19 -32
  40. package/reference/html.md +313 -9
  41. package/reference/htmx/index.md +4 -52
  42. package/reference/htmx/response-headers.md +240 -0
  43. package/reference/http-model/headers.md +735 -0
  44. package/reference/http-model/index.md +3 -1
  45. package/reference/http-model/model.md +107 -71
  46. package/reference/http-model/schema-codecs.md +522 -0
  47. package/reference/http-model/schema.md +6 -3
  48. package/reference/http-model/server-sent-event.md +341 -0
  49. package/reference/jwt.md +195 -0
  50. package/reference/maybe.md +128 -11
  51. package/reference/media-type.md +2 -2
  52. package/reference/mux.md +254 -0
  53. package/reference/mux.mdx +7 -2
  54. package/reference/openapi.md +3 -3
  55. package/reference/projection.md +654 -0
  56. package/reference/resource-management/resource.md +2 -98
  57. package/reference/resource-management/scope.md +1 -209
  58. package/reference/resource-management/wire.md +4 -50
  59. package/reference/ringbuffer/advanced.mdx +1 -1
  60. package/reference/ringbuffer/index.mdx +3 -3
  61. package/reference/ringbuffer/mpmc.mdx +38 -4
  62. package/reference/ringbuffer/mpsc.mdx +36 -4
  63. package/reference/ringbuffer/spmc.mdx +1 -1
  64. package/reference/ringbuffer/spsc.mdx +87 -15
  65. package/reference/schema/allows.md +0 -96
  66. package/reference/schema/binding.md +2 -2
  67. package/reference/schema/built-in-codecs/avro.md +2 -2
  68. package/reference/schema/built-in-codecs/bson.md +50 -20
  69. package/reference/schema/built-in-codecs/csv.md +2 -2
  70. package/reference/schema/built-in-codecs/index.md +3 -3
  71. package/reference/schema/built-in-codecs/json/index.md +2 -2
  72. package/reference/schema/built-in-codecs/messagepack.md +3 -3
  73. package/reference/schema/built-in-codecs/thrift.md +2 -2
  74. package/reference/schema/built-in-codecs/toon.md +3 -3
  75. package/reference/schema/built-in-codecs/yaml.md +2 -2
  76. package/reference/schema/codec.md +11 -11
  77. package/reference/schema/dynamic-optic.md +48 -3
  78. package/reference/schema/dynamic-schema.md +3 -3
  79. package/reference/schema/index.md +2 -0
  80. package/reference/schema/path-interpolator.md +2 -0
  81. package/reference/schema/reflect-transformer.md +140 -0
  82. package/reference/schema/schema-evolution/as.md +4 -4
  83. package/reference/schema/schema-evolution/into.md +2 -2
  84. package/reference/schema/schema-expr.md +2 -2
  85. package/reference/schema/schema-search.md +263 -0
  86. package/reference/schema/schema.md +10 -2
  87. package/reference/schema/type-class-derivation.md +1 -1
  88. package/reference/smithy.md +502 -3
  89. package/reference/sql/db-codec-deriver.md +3 -3
  90. package/reference/sql/db-codec.md +22 -22
  91. package/reference/sql/db-con.md +4 -4
  92. package/reference/sql/db-connection.md +1 -1
  93. package/reference/sql/db-param.md +1 -1
  94. package/reference/sql/db-result-reader.md +4 -2
  95. package/reference/sql/db-tx.md +46 -14
  96. package/reference/sql/ddl.md +1 -1
  97. package/reference/sql/frag.md +44 -10
  98. package/reference/sql/index.md +7 -7
  99. package/reference/sql/repo.md +15 -15
  100. package/reference/sql/sql-dialect.md +1 -1
  101. package/reference/sql/sql-logger.md +1 -1
  102. package/reference/sql/sql-name-mapper.md +3 -3
  103. package/reference/sql/table-metadata.md +3 -3
  104. package/reference/sql/table.md +10 -10
  105. package/reference/sql/transactor-zio.md +1 -1
  106. package/reference/sql/transactor.md +21 -11
  107. package/reference/sql-zio.md +1 -1
  108. package/reference/streams/core/index.md +32 -0
  109. package/reference/streams/{pipeline.md → core/pipeline.md} +210 -74
  110. package/reference/streams/{sink.md → core/sink.md} +331 -353
  111. package/reference/streams/{stream.md → core/stream.md} +919 -209
  112. package/reference/streams/execution-and-compatibility/async-execution.md +822 -0
  113. package/reference/streams/execution-and-compatibility/index.md +35 -0
  114. package/reference/streams/execution-and-compatibility/platform-differences.md +297 -0
  115. package/reference/streams/execution-and-compatibility/scala-2-compatibility.md +88 -0
  116. package/reference/streams/execution-and-compatibility/zero-boxing.md +393 -0
  117. package/reference/streams/index.md +140 -67
  118. package/reference/streams/primitives/index.md +30 -0
  119. package/reference/streams/primitives/reader.md +1992 -0
  120. package/reference/streams/{writer.md → primitives/writer.md} +254 -98
  121. package/reference/telemetry/common/any-value.md +90 -0
  122. package/reference/telemetry/common/attribute-key.md +87 -0
  123. package/reference/telemetry/common/attributes.md +118 -0
  124. package/reference/telemetry/common/index.md +39 -0
  125. package/reference/telemetry/common/instrumentation-scope.md +24 -0
  126. package/reference/telemetry/common/resource.md +34 -0
  127. package/reference/telemetry/index.md +311 -0
  128. package/reference/telemetry/logging/index.md +197 -0
  129. package/reference/telemetry/logging/log-enrichment.md +72 -0
  130. package/reference/telemetry/logging/log-formatter.md +100 -0
  131. package/reference/telemetry/logging/log-record-processor.md +56 -0
  132. package/reference/telemetry/logging/log-record.md +44 -0
  133. package/reference/telemetry/logging/log-writer.md +64 -0
  134. package/reference/telemetry/logging/logger-provider.md +142 -0
  135. package/reference/telemetry/logging/logger.md +83 -0
  136. package/reference/telemetry/logging/severity.md +62 -0
  137. package/reference/telemetry/metrics/index.md +150 -0
  138. package/reference/telemetry/metrics/instruments.md +183 -0
  139. package/reference/telemetry/metrics/labeled-instruments.md +74 -0
  140. package/reference/telemetry/metrics/meter-provider.md +76 -0
  141. package/reference/telemetry/metrics/meter.md +98 -0
  142. package/reference/telemetry/metrics/metric-data.md +57 -0
  143. package/reference/telemetry/otel/custom-exporter.md +216 -0
  144. package/reference/telemetry/otel/index.md +212 -0
  145. package/reference/telemetry/tracing/index.md +155 -0
  146. package/reference/telemetry/tracing/sampler.md +89 -0
  147. package/reference/telemetry/tracing/span-builder.md +57 -0
  148. package/reference/telemetry/tracing/span-context.md +39 -0
  149. package/reference/telemetry/tracing/span-data.md +32 -0
  150. package/reference/telemetry/tracing/span-kind.md +55 -0
  151. package/reference/telemetry/tracing/span-processor.md +53 -0
  152. package/reference/telemetry/tracing/span-status.md +47 -0
  153. package/reference/telemetry/tracing/span.md +117 -0
  154. package/reference/telemetry/tracing/tracer-provider.md +91 -0
  155. package/reference/telemetry/tracing/tracer.md +52 -0
  156. package/reference/typeid.md +0 -64
  157. package/sidebars.js +150 -12
  158. package/undocumented-report.md +528 -270
  159. package/reference/config.md +0 -158
  160. package/reference/streams/concurrent-operators.md +0 -106
  161. package/reference/streams/reader.md +0 -1284
  162. package/reference/streams/scala-2-compatibility.md +0 -55
  163. package/reference/streams/zero-boxing.md +0 -275
  164. package/reference/telemetry.md +0 -693
@@ -1,158 +0,0 @@
1
- ---
2
- id: config
3
- title: "Config"
4
- sidebar_label: "Config"
5
- ---
6
-
7
- `zio.blocks.config` provides typed configuration loading, feature flags, provenance tracking, rollout selection, and source adapters for YAML, JSON, and HOCON. The module is synchronous and zero-dependency: configuration is loaded from `ConfigSource`, flags are read through `FlagSource`, and typed decoding is derived from `Schema[A]`.
8
-
9
- ## Installation
10
-
11
- ```scala
12
- libraryDependencies += "dev.zio" %% "zio-blocks-config" % "0.0.51"
13
- libraryDependencies += "dev.zio" %% "zio-blocks-config-yaml" % "0.0.51"
14
- libraryDependencies += "dev.zio" %% "zio-blocks-config-json" % "0.0.51"
15
- libraryDependencies += "dev.zio" %% "zio-blocks-config-hocon" % "0.0.51"
16
- ```
17
-
18
- For Scala.js:
19
-
20
- ```scala
21
- libraryDependencies += "dev.zio" %%% "zio-blocks-config" % "0.0.51"
22
- ```
23
-
24
- Supported Scala versions: 2.13.x and 3.x.
25
-
26
- ## Core Types
27
-
28
- At the center of the module are two source abstractions:
29
-
30
- ```scala
31
- import zio.blocks.maybe.Maybe
32
-
33
- trait FlagSource {
34
- def sourceId: String
35
- def get(name: String): Maybe[SourceValue[String]]
36
- }
37
-
38
- trait ConfigSource extends FlagSource {
39
- def get(key: String): Maybe[SourceValue[String]]
40
- def all(prefix: String): Map[String, SourceValue[String]]
41
- }
42
- ```
43
-
44
- `ConfigSource` extends `FlagSource`, so the same source can power both typed config loading and simple scalar flags.
45
-
46
- ## Loading Typed Configuration
47
-
48
- Use `Config.load[A]` when you want a typed result and explicit errors:
49
-
50
- ```scala
51
- import zio.blocks.config._
52
- import zio.blocks.scope.Unscoped
53
-
54
- final case class AppConfig(host: String, port: Int) derives Schema, Unscoped
55
-
56
- val source = ConfigSource.fromMap(
57
- Map("app.host" -> "localhost", "app.port" -> "8080"),
58
- "example"
59
- )
60
-
61
- val loaded = Config.load[AppConfig](source.prefix("app"))
62
- ```
63
-
64
- The main entry points are:
65
-
66
- ```scala
67
- Config.load[A](source)
68
- Config.loadOrThrow[A](source)
69
- Config.loadWithProvenance[A](source)
70
- ```
71
-
72
- `Config.loadWithProvenance` returns a `ProvenanceMap[A]`, which lets you inspect where resolved values came from.
73
-
74
- ## Wiring Config into Dependency Graphs
75
-
76
- For application wiring, prefer `Config.wire[A]` or `Config.wire[A](prefix)` so decoding stays inside the dependency graph instead of being done manually at startup:
77
-
78
- ```scala
79
- Config.wire[AppConfig]
80
- Config.wire[AppConfig]("app")
81
- ```
82
-
83
- That keeps `ConfigSource` as the injected input and the typed config as the derived output.
84
-
85
- ## Working with Sources
86
-
87
- `ConfigSource` supports composition and key transformation:
88
-
89
- ```scala
90
- val defaults = ConfigSource.fromMap(Map("db.host" -> "localhost"), "defaults")
91
- val env = ConfigSource.fromMap(Map("db.port" -> "5432"), "env")
92
-
93
- val combined = env.orElse(defaults)
94
- val scoped = combined.prefix("db")
95
- ```
96
-
97
- Common adapters:
98
-
99
- - `ConfigSource.fromMap(...)`
100
- - `ConfigSource.fromYaml(...)` (requires `config-yaml` dependency)
101
- - `ConfigSource.fromJson(...)` (requires `config-json` dependency)
102
- - `ConfigSource.fromHocon(...)` (requires `config-hocon` dependency)
103
-
104
- ## Static and Dynamic Flags
105
-
106
- `StaticFlag[A]` resolves once, during object initialization:
107
-
108
- ```scala
109
- import zio.blocks.config._
110
-
111
- object poolSize extends StaticFlag[Int](10)
112
-
113
- val size: Int = poolSize()
114
- ```
115
-
116
- `DynamicFlag[A]` keeps an updatable rollout expression and evaluates it on demand.
117
-
118
- `StaticFlag` names are derived from the Scala object's fully qualified name, so custom `FlagSource` registrations must use that exact key.
119
-
120
- `FlagSource.Registry` is consulted in registration order, so the first registered source wins when multiple sources provide the same flag.
121
-
122
- :::note
123
- Register `FlagSource`s before the first reference to a `StaticFlag` object. Once a static flag object is initialized, later registrations do not retroactively change its resolved value.
124
- :::
125
-
126
- ## Rollout DSL
127
-
128
- `Rollout` selects values based on a path and an optional percentage bucket:
129
-
130
- ```scala
131
- import zio.blocks.config._
132
-
133
- val bucket = Rollout.bucketFor("user-123")
134
- val choice = Rollout.select("true@prod/50%;false", "prod", bucket)
135
- ```
136
-
137
- The percentage uses slash-separated syntax (`prod/50%`). For the example above, `choice` is `Maybe.present("true")` for roughly half of the `prod` buckets and `Maybe.present("false")` otherwise. Bare values act as catch-all fallbacks and should come last.
138
-
139
- ## Provenance
140
-
141
- Every resolved value carries provenance information through `SourceValue` and `Provenance`:
142
-
143
- ```scala
144
- val source = ConfigSource.fromMap(Map("db.host" -> "localhost"), "defaults")
145
- val host = source.get("db.host")
146
- ```
147
-
148
- `host` contains both the raw value and a `Provenance.Resolved` entry that records the source id and key.
149
-
150
- ## Format Adapters
151
-
152
- The format modules flatten structured documents into dot-separated keys:
153
-
154
- - YAML: nested mappings become `a.b.c`
155
- - JSON: arrays are indexed as `items.0`, `items.1`, ...
156
- - HOCON: substitutions are resolved before flattening
157
-
158
- Use these adapters when you want the convenience of file formats but still want a single `ConfigSource` API for decoding, composition, and provenance.
@@ -1,106 +0,0 @@
1
- ---
2
- id: concurrent-operators
3
- title: "Concurrent Operators"
4
- ---
5
-
6
- ZIO Blocks Streams ships **three** concurrent operators that fan work across virtual threads while preserving the typed-error, synchronous, pull-based programming model. The calling thread still receives `Either[E, Z]` — no effect system is required.
7
-
8
- | Operator | Purpose |
9
- |---|---|
10
- | `Stream#mapPar(n)(f)` | Apply `f` to each element on up to `n` worker threads. Output is **unordered** (arrival order, not input order). |
11
- | `Stream.mergeAll(n)(streams)` | Drain up to `n` inner streams concurrently; interleave their elements as they arrive. |
12
- | `Stream#flatMapPar(n)(f)` | Per element, produce a sub-stream via `f`; drain up to `n` sub-streams concurrently. |
13
-
14
- All three operators are **JVM-only**. On Scala.js they degrade to sequential equivalents (`map`, `flatten`, `flatMap`).
15
-
16
- ## Semantics
17
-
18
- **Output order.** Concurrent output is **unordered** with respect to input position. Elements arrive as workers complete, not in input order. If you need input order, use sequential `map` / `flatMap`.
19
-
20
- **Error propagation.** The first typed error from any worker or inner stream terminates all concurrent work and surfaces as `Left(e)` from the terminal operation. Defects (unexpected exceptions) propagate as thrown exceptions, same as sequential operators.
21
-
22
- **Resource safety.** All worker threads and ring-buffer queues are cleaned up deterministically when the consumer closes the reader, the stream errors, or the scope finalizes.
23
-
24
- **Primitive specialization.** Readers produced by concurrent operators preserve primitive specialization — `Int`, `Long`, `Float`, and `Double` streams use specialized lock-free queues internally, avoiding boxing in the concurrent handoff between threads.
25
-
26
- ## Buffer sizing
27
-
28
- Concurrent operators use internal ring-buffer queues (default size **64**). Override with `Stream.bufferSize(n) { ... }` where `n` is a positive power of two:
29
-
30
- ```
31
- Stream.bufferSize(256) {
32
- Stream.range(0, 1_000_000).mapPar(8)(heavyComputation)
33
- }.runCollect
34
- ```
35
-
36
- Larger buffers help when producers are bursty; smaller buffers reduce memory when many concurrent streams are active. The default is fine for most workloads.
37
-
38
- `Pipeline.buffer(n)` inserts a buffer of `n` elements between upstream and downstream (async handoff on JVM, sync on JS).
39
-
40
- ## Examples
41
-
42
- ### `mapPar`
43
-
44
- ```
45
- // Apply an expensive function using 8 virtual threads.
46
- // Output order varies between runs.
47
- val result = Stream.range(0, 1000)
48
- .mapPar(8)(n => { Thread.sleep(1); n * 2 })
49
- .runCollect
50
- // result: Right(Chunk(...)) -- all 1000 elements, but not in 0,2,4,... order
51
- ```
52
-
53
- ### `mergeAll`
54
-
55
- ```
56
- // Drain 10 streams concurrently, up to 4 at a time.
57
- val streams = Stream.fromIterable(
58
- (0 until 10).map(i => Stream.range(i * 100, (i + 1) * 100))
59
- )
60
- val merged = Stream.mergeAll(4)(streams).runFold(0L)(_ + _)
61
- // merged: Right(499500) -- all elements consumed, order interleaved
62
- ```
63
-
64
- ### `flatMapPar`
65
-
66
- ```
67
- // Each element spawns a sub-stream; up to 8 drained concurrently.
68
- val flat = Stream.range(0, 50)
69
- .flatMapPar(8)(i => Stream.range(i * 20, (i + 1) * 20))
70
- .runFold(0L)(_ + _)
71
- // flat: Right(499500)
72
- ```
73
-
74
- ### Error behaviour
75
-
76
- ```
77
- // Typed error in a worker terminates all workers
78
- val err1 = Stream.range(0, 1000)
79
- .flatMap(n => if (n == 500) Stream.fail("bad element") else Stream.succeed(n))
80
- .mapPar(4)(identity)
81
- .runCollect
82
- // err1: Left("bad element")
83
-
84
- // Error in one inner stream terminates mergeAll
85
- val err2 = Stream.mergeAll(4)(Stream.fromIterable(
86
- List(Stream.range(0, 100), Stream.fail("inner error"), Stream.range(200, 300))
87
- )).runCollect
88
- // err2: Left("inner error")
89
- ```
90
-
91
- ## Guidelines
92
-
93
- - **Use `mapPar(n)(f)` for expensive per-element work** — network calls, CPU-bound computation, blocking I/O. Do not use it for trivially cheap functions (e.g. `_ + 1`); the thread-handoff overhead exceeds the parallelism benefit.
94
- - **Use `mergeAll(n)(streams)` for concurrent fan-in** — draining multiple independent sources (files, connections, partitions) simultaneously. Use `flatMapPar(n)(f)` when each input element produces a sub-stream to drain concurrently.
95
- - **Concurrent output is unordered.** If you need sorted results, apply `.runCollect.map(_.sorted)` or accumulate into a structure that handles ordering. If you need input-order preservation, use sequential `map` / `flatMap`.
96
- - **`mapPar`, `mergeAll`, and `flatMapPar` are JVM-only.** On JS they degrade to sequential equivalents.
97
-
98
- ## Comparison with other libraries
99
-
100
- | Feature | ZB Streams | fs2 | Kyo | Ox | Pekko |
101
- |---|---|---|---|---|---|
102
- | Concurrent operators | `mapPar`, `mergeAll`, `flatMapPar` | `parEvalMap` | `mapParUnordered`* | `mapPar` | `mapAsync`, `flatMapMerge` |
103
- | Effect system required | No | Yes (cats-effect) | Yes (Kyo) | No (virtual threads) | Yes (Akka) |
104
- | Typed errors | `Either[E, Z]` | ApplicativeError | Kyo effects | Exceptions | No |
105
-
106
- \* Kyo's `mapParUnordered` forks a fiber per element (very slow for large streams). Kyo's `collectAll` merges streams but does not parallelize pure computation within them.