@zio.dev/zio-blocks 0.0.33 → 0.0.51

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 (150) hide show
  1. package/guides/compile-time-resource-safety-with-scope.md +16 -17
  2. package/guides/getting-started-with-mux.md +1507 -0
  3. package/guides/query-dsl-extending.md +161 -102
  4. package/guides/query-dsl-fluent-builder.md +217 -157
  5. package/guides/query-dsl-reified-optics.md +12 -10
  6. package/guides/query-dsl-sql.md +246 -165
  7. package/guides/telemetry-guide.md +1069 -0
  8. package/guides/zio-schema-migration.md +29 -22
  9. package/index.md +292 -50
  10. package/package.json +1 -1
  11. package/plans/config-follow-up-prs.md +188 -0
  12. package/plans/config-pr-assessment-roadmap.md +310 -0
  13. package/reference/MuxDataFlow.jsx +250 -0
  14. package/reference/async.md +651 -0
  15. package/reference/chunk.md +3533 -308
  16. package/reference/codegen/case-class.md +436 -0
  17. package/reference/codegen/emitter-config.md +383 -0
  18. package/reference/codegen/examples.md +664 -0
  19. package/reference/codegen/field.md +316 -0
  20. package/reference/codegen/index.md +317 -0
  21. package/reference/codegen/scala-emitter.md +392 -0
  22. package/reference/codegen/scala-file.md +276 -0
  23. package/reference/codegen/sealed-trait.md +408 -0
  24. package/reference/codegen/type-definition.md +340 -0
  25. package/reference/codegen/type-ref.md +201 -0
  26. package/reference/combinators.md +347 -117
  27. package/reference/config.md +158 -0
  28. package/reference/context.md +4 -4
  29. package/reference/datastar.md +346 -0
  30. package/reference/docs.md +1461 -345
  31. package/reference/endpoint/auth-type.md +146 -0
  32. package/reference/endpoint/endpoint.md +297 -0
  33. package/reference/endpoint/http-codec.md +249 -0
  34. package/reference/endpoint/index.md +825 -0
  35. package/reference/endpoint/path-codec.md +237 -0
  36. package/reference/endpoint/route-pattern.md +196 -0
  37. package/reference/endpoint/route-tree.md +111 -0
  38. package/reference/endpoint/segment-codec.md +212 -0
  39. package/reference/html.md +1120 -0
  40. package/reference/htmx/attribute-values.md +359 -0
  41. package/reference/htmx/hx-encoding.md +111 -0
  42. package/reference/htmx/hx-params.md +204 -0
  43. package/reference/htmx/hx-swap.md +276 -0
  44. package/reference/htmx/hx-sync.md +251 -0
  45. package/reference/htmx/hx-target.md +314 -0
  46. package/reference/htmx/hx-trigger.md +457 -0
  47. package/reference/htmx/hx-url-update.md +239 -0
  48. package/reference/htmx/index.md +855 -0
  49. package/reference/http-model/index.md +47 -0
  50. package/reference/http-model/model.md +1481 -0
  51. package/reference/http-model/schema.md +747 -0
  52. package/reference/maybe.md +826 -0
  53. package/reference/media-type.md +2 -2
  54. package/reference/mux.mdx +823 -0
  55. package/reference/openapi.md +1351 -0
  56. package/reference/resource-management/defer-handle.md +1 -1
  57. package/reference/resource-management/resource.md +31 -2
  58. package/reference/resource-management/scope.md +28 -12
  59. package/reference/resource-management/wire.md +3 -7
  60. package/reference/ringbuffer/MpmcDiagram.jsx +717 -0
  61. package/reference/ringbuffer/MpscDiagram.jsx +618 -0
  62. package/reference/ringbuffer/SpmcDiagram.jsx +680 -0
  63. package/reference/ringbuffer/SpscDiagram.jsx +677 -0
  64. package/reference/ringbuffer/advanced.mdx +109 -0
  65. package/reference/ringbuffer/index.mdx +145 -0
  66. package/reference/ringbuffer/mpmc.mdx +151 -0
  67. package/reference/ringbuffer/mpsc.mdx +132 -0
  68. package/reference/ringbuffer/spmc.mdx +108 -0
  69. package/reference/ringbuffer/spsc.mdx +344 -0
  70. package/reference/{allows.md → schema/allows.md} +4 -4
  71. package/reference/{binding-resolver.md → schema/binding-resolver.md} +1 -1
  72. package/reference/{binding.md → schema/binding.md} +2 -3
  73. package/reference/schema/built-in-codecs/avro.md +451 -0
  74. package/reference/schema/built-in-codecs/bson.md +480 -0
  75. package/reference/schema/built-in-codecs/csv.md +564 -0
  76. package/reference/schema/built-in-codecs/index.md +77 -0
  77. package/reference/schema/built-in-codecs/json/index.md +295 -0
  78. package/reference/schema/built-in-codecs/json/json-config.md +217 -0
  79. package/reference/{json-patch.md → schema/built-in-codecs/json/json-patch.md} +5 -5
  80. package/reference/{json-schema.md → schema/built-in-codecs/json/json-schema.md} +14 -47
  81. package/reference/schema/built-in-codecs/json/json-selection.md +322 -0
  82. package/reference/{json.md → schema/built-in-codecs/json/json.md} +32 -64
  83. package/reference/schema/built-in-codecs/messagepack.md +508 -0
  84. package/reference/schema/built-in-codecs/thrift.md +433 -0
  85. package/reference/schema/built-in-codecs/toon.md +1078 -0
  86. package/reference/{xml.md → schema/built-in-codecs/xml.md} +13 -9
  87. package/reference/schema/built-in-codecs/yaml.md +552 -0
  88. package/reference/{codec.md → schema/codec.md} +10 -10
  89. package/reference/{dynamic-optic.md → schema/dynamic-optic.md} +151 -5
  90. package/reference/{dynamic-schema.md → schema/dynamic-schema.md} +8 -8
  91. package/reference/schema/format.md +92 -0
  92. package/reference/schema/index.md +50 -0
  93. package/reference/schema/migration.md +297 -0
  94. package/reference/{modifier.md → schema/modifier.md} +58 -7
  95. package/reference/{optics.md → schema/optics.md} +2 -2
  96. package/reference/{patch.md → schema/patch.md} +1 -1
  97. package/{path-interpolator.md → reference/schema/path-interpolator.md} +165 -72
  98. package/reference/{schema-evolution → schema/schema-evolution}/as.md +8 -8
  99. package/reference/{schema-evolution → schema/schema-evolution}/index.md +2 -2
  100. package/reference/{schema-evolution → schema/schema-evolution}/into.md +8 -8
  101. package/reference/{schema-expr.md → schema/schema-expr.md} +110 -175
  102. package/reference/{schema.md → schema/schema.md} +12 -0
  103. package/reference/{structural-types.md → schema/structural-types.md} +1 -1
  104. package/reference/{type-class-derivation.md → schema/type-class-derivation.md} +63 -1
  105. package/reference/smithy.md +533 -0
  106. package/reference/sql/db-codec-deriver.md +71 -0
  107. package/reference/sql/db-codec.md +687 -0
  108. package/reference/sql/db-con.md +271 -0
  109. package/reference/sql/db-connection.md +153 -0
  110. package/reference/sql/db-param-writer.md +77 -0
  111. package/reference/sql/db-param.md +66 -0
  112. package/reference/sql/db-result-reader.md +146 -0
  113. package/reference/sql/db-tx.md +82 -0
  114. package/reference/sql/db-value.md +41 -0
  115. package/reference/sql/ddl.md +85 -0
  116. package/reference/sql/frag.md +254 -0
  117. package/reference/sql/index.md +341 -0
  118. package/reference/sql/repo.md +600 -0
  119. package/reference/sql/sql-dialect.md +73 -0
  120. package/reference/sql/sql-logger.md +62 -0
  121. package/reference/sql/sql-name-mapper.md +70 -0
  122. package/reference/sql/table-metadata.md +134 -0
  123. package/reference/sql/table.md +448 -0
  124. package/reference/sql/transactor-zio.md +399 -0
  125. package/reference/sql/transactor.md +353 -0
  126. package/reference/sql-zio.md +112 -0
  127. package/reference/streams/concurrent-operators.md +106 -0
  128. package/reference/streams/index.md +653 -0
  129. package/reference/streams/pipeline.md +718 -0
  130. package/reference/streams/reader.md +1284 -0
  131. package/reference/streams/scala-2-compatibility.md +55 -0
  132. package/reference/streams/sink.md +1426 -0
  133. package/reference/streams/stream.md +2526 -0
  134. package/reference/streams/writer.md +1045 -0
  135. package/reference/streams/zero-boxing.md +275 -0
  136. package/reference/telemetry.md +693 -0
  137. package/reference/typeid.md +5 -19
  138. package/sidebars.js +238 -43
  139. package/reference/formats.md +0 -694
  140. package/reference/http-model.md +0 -1716
  141. package/reference/streams.md +0 -989
  142. package/ringbuffer.md +0 -249
  143. /package/reference/{json-differ.md → schema/built-in-codecs/json/json-differ.md} +0 -0
  144. /package/reference/{dynamic-value.md → schema/dynamic-value.md} +0 -0
  145. /package/reference/{lazy.md → schema/lazy.md} +0 -0
  146. /package/reference/{reflect.md → schema/reflect.md} +0 -0
  147. /package/reference/{registers.md → schema/registers.md} +0 -0
  148. /package/reference/{schema-error.md → schema/schema-error.md} +0 -0
  149. /package/reference/{syntax.md → schema/syntax.md} +0 -0
  150. /package/reference/{validation.md → schema/validation.md} +0 -0
@@ -0,0 +1,383 @@
1
+ ---
2
+ id: emitter-config
3
+ title: "EmitterConfig"
4
+ ---
5
+
6
+ `EmitterConfig` controls how `ScalaEmitter` formats Scala code. Customize indentation, import sorting, trailing commas, and target Scala version (2 vs 3) by creating a configured instance.
7
+
8
+ ## Use Cases
9
+
10
+ - Configuring code style (indentation, commas) to match your project conventions
11
+ - Targeting Scala 3 features (enums, derives) or Scala 2 fallback syntax
12
+ - Controlling import statement ordering
13
+ - Emitting code for different codebases with different style preferences
14
+
15
+ ## Configuration Fields
16
+
17
+ | Field | Type | Default | Description |
18
+ |------------------|---------|---------|-----------------------------------------|
19
+ | `indentWidth` | Int | 2 | Spaces per indentation level |
20
+ | `sortImports` | Boolean | true | Sort import statements alphabetically |
21
+ | `trailingCommas` | Boolean | true | Add trailing commas in collections |
22
+ | `scala3Syntax` | Boolean | true | Target Scala 3 syntax features |
23
+
24
+ ## Construction
25
+
26
+ Create a default configuration:
27
+
28
+ ```scala
29
+ import zio.blocks.codegen.emit._
30
+
31
+ val default = EmitterConfig()
32
+ // indentWidth=2, sortImports=true, trailingCommas=true, scala3Syntax=true
33
+ ```
34
+
35
+ With custom settings:
36
+
37
+ ```scala
38
+ import zio.blocks.codegen.emit._
39
+
40
+ val custom = EmitterConfig(
41
+ indentWidth = 4,
42
+ sortImports = true,
43
+ trailingCommas = false,
44
+ scala3Syntax = false
45
+ )
46
+ ```
47
+
48
+ ## Key Operations
49
+
50
+ All `EmitterConfig` instances provide these operations:
51
+
52
+ ### Accessing Configuration
53
+
54
+ Read configuration values:
55
+
56
+ ```scala
57
+ import zio.blocks.codegen.emit._
58
+
59
+ val config = EmitterConfig(indentWidth = 4)
60
+
61
+ config.indentWidth // 4
62
+ config.sortImports // true (default)
63
+ config.trailingCommas // true (default)
64
+ config.scala3Syntax // true (default)
65
+ ```
66
+
67
+ ### Building with Copy
68
+
69
+ Modify a configuration:
70
+
71
+ ```scala
72
+ import zio.blocks.codegen.emit._
73
+
74
+ val base = EmitterConfig()
75
+
76
+ val scala2Config = base.copy(
77
+ scala3Syntax = false
78
+ )
79
+
80
+ val wideIndentConfig = base.copy(
81
+ indentWidth = 4
82
+ )
83
+ ```
84
+
85
+ ## Examples
86
+
87
+ Here are practical examples showing different configuration scenarios:
88
+
89
+ ### Example 1: Standard Configuration
90
+
91
+ The default configuration for most projects:
92
+
93
+ ```scala
94
+ import zio.blocks.codegen.ir._
95
+ import zio.blocks.codegen.emit._
96
+
97
+ val file = ScalaFile(
98
+ packageDecl = PackageDecl("com.example"),
99
+ types = List(
100
+ CaseClass("User", List(
101
+ Field("id", TypeRef.Long),
102
+ Field("name", TypeRef.String)
103
+ ))
104
+ )
105
+ )
106
+
107
+ val config = EmitterConfig()
108
+ ```
109
+
110
+ Emits:
111
+
112
+ ```scala
113
+ import zio.blocks.codegen.emit._
114
+ ScalaEmitter.emit(file, config)
115
+ // res5: String = """package com.example
116
+ //
117
+ // case class User(
118
+ // id: Long,
119
+ // name: String,
120
+ // )
121
+ // """
122
+ ```
123
+
124
+ ### Example 2: Wide Indentation (4 spaces)
125
+
126
+ For projects preferring 4-space indentation:
127
+
128
+ ```scala
129
+ import zio.blocks.codegen.ir._
130
+ import zio.blocks.codegen.emit._
131
+
132
+ val file = ScalaFile(
133
+ packageDecl = PackageDecl("com.example"),
134
+ types = List(
135
+ SealedTrait(
136
+ "Result",
137
+ cases = List(
138
+ SealedTraitCase.CaseClassCase(
139
+ CaseClass("Success", List(
140
+ Field("value", TypeRef.String)
141
+ ))
142
+ ),
143
+ SealedTraitCase.CaseObjectCase("Failure")
144
+ )
145
+ )
146
+ )
147
+ )
148
+
149
+ val config = EmitterConfig(indentWidth = 4)
150
+ ```
151
+
152
+ Emits with 4-space indentation:
153
+
154
+ ```scala
155
+ import zio.blocks.codegen.emit._
156
+ ScalaEmitter.emit(file, config)
157
+ // res7: String = """package com.example
158
+ //
159
+ // sealed trait Result
160
+ //
161
+ // object Result {
162
+ // case class Success(
163
+ // value: String,
164
+ // ) extends Result
165
+ // case object Failure extends Result
166
+ // }
167
+ // """
168
+ ```
169
+
170
+ ### Example 3: Scala 2 Compatibility
171
+
172
+ Target Scala 2 syntax for older codebases:
173
+
174
+ ```scala
175
+ import zio.blocks.codegen.ir._
176
+ import zio.blocks.codegen.emit._
177
+
178
+ val file = ScalaFile(
179
+ packageDecl = PackageDecl("com.legacy"),
180
+ imports = List(
181
+ Import.WildcardImport("scala.collection")
182
+ ),
183
+ types = List(
184
+ Enum(
185
+ name = "Color",
186
+ cases = List(
187
+ EnumCase.SimpleCase("Red"),
188
+ EnumCase.SimpleCase("Blue")
189
+ )
190
+ )
191
+ )
192
+ )
193
+
194
+ val scala2Config = EmitterConfig(
195
+ scala3Syntax = false
196
+ )
197
+ ```
198
+
199
+ Emits sealed trait syntax (Scala 2 compatible):
200
+
201
+ ```scala
202
+ import zio.blocks.codegen.emit._
203
+ ScalaEmitter.emit(file, scala2Config)
204
+ // res9: String = """package com.legacy
205
+ //
206
+ // import scala.collection._
207
+ //
208
+ // sealed trait Color
209
+ //
210
+ // object Color {
211
+ // case object Red extends Color
212
+ // case object Blue extends Color
213
+ // }
214
+ // """
215
+ ```
216
+
217
+ ### Example 4: No Trailing Commas
218
+
219
+ For projects with strict no-trailing-commas rules:
220
+
221
+ ```scala
222
+ import zio.blocks.codegen.ir._
223
+ import zio.blocks.codegen.emit._
224
+
225
+ val file = ScalaFile(
226
+ packageDecl = PackageDecl("com.strict"),
227
+ types = List(
228
+ CaseClass(
229
+ "Options",
230
+ List(
231
+ Field("a", TypeRef.String),
232
+ Field("b", TypeRef.Int),
233
+ Field("c", TypeRef.Boolean)
234
+ )
235
+ )
236
+ )
237
+ )
238
+
239
+ val config = EmitterConfig(
240
+ trailingCommas = false
241
+ )
242
+ ```
243
+
244
+ Emits without trailing comma on last field:
245
+
246
+ ```scala
247
+ import zio.blocks.codegen.emit._
248
+ ScalaEmitter.emit(file, config)
249
+ // res11: String = """package com.strict
250
+ //
251
+ // case class Options(
252
+ // a: String,
253
+ // b: Int,
254
+ // c: Boolean
255
+ // )
256
+ // """
257
+ ```
258
+
259
+ ### Example 5: Unsorted Imports
260
+
261
+ For projects that manage imports manually:
262
+
263
+ ```scala
264
+ import zio.blocks.codegen.ir._
265
+ import zio.blocks.codegen.emit._
266
+
267
+ val file = ScalaFile(
268
+ packageDecl = PackageDecl("com.example"),
269
+ imports = List(
270
+ Import.WildcardImport("zio"),
271
+ Import.SingleImport("scala.collection", "Seq"),
272
+ Import.WildcardImport("scala")
273
+ ),
274
+ types = List(
275
+ CaseClass("Data", List(
276
+ Field("items", TypeRef("Seq", List(TypeRef.String)))
277
+ ))
278
+ )
279
+ )
280
+
281
+ val config = EmitterConfig(
282
+ sortImports = false // Keep imports in declaration order
283
+ )
284
+ ```
285
+
286
+ Preserves import order:
287
+
288
+ ```scala
289
+ import zio.blocks.codegen.emit._
290
+ ScalaEmitter.emit(file, config)
291
+ // res13: String = """package com.example
292
+ //
293
+ // import zio.*
294
+ // import scala.collection.Seq
295
+ // import scala.*
296
+ //
297
+ // case class Data(
298
+ // items: Seq[String],
299
+ // )
300
+ // """
301
+ ```
302
+
303
+ ### Example 6: Custom Combination
304
+
305
+ Combining multiple preferences:
306
+
307
+ ```scala
308
+ import zio.blocks.codegen.ir._
309
+ import zio.blocks.codegen.emit._
310
+
311
+ val file = ScalaFile(
312
+ packageDecl = PackageDecl("com.myproject"),
313
+ imports = List(
314
+ Import.WildcardImport("zio")
315
+ ),
316
+ types = List(
317
+ SealedTrait(
318
+ "Response",
319
+ cases = List(
320
+ SealedTraitCase.CaseClassCase(
321
+ CaseClass("Ok", List(
322
+ Field("data", TypeRef.String),
323
+ Field("status", TypeRef.Int)
324
+ ))
325
+ ),
326
+ SealedTraitCase.CaseObjectCase("Error")
327
+ )
328
+ )
329
+ )
330
+ )
331
+
332
+ val config = EmitterConfig(
333
+ indentWidth = 4,
334
+ sortImports = true,
335
+ trailingCommas = false,
336
+ scala3Syntax = false
337
+ )
338
+ ```
339
+
340
+ Emits:
341
+
342
+ ```scala
343
+ import zio.blocks.codegen.emit._
344
+ ScalaEmitter.emit(file, config)
345
+ // res15: String = """package com.myproject
346
+ //
347
+ // import zio._
348
+ //
349
+ // sealed trait Response
350
+ //
351
+ // object Response {
352
+ // case class Ok(
353
+ // data: String,
354
+ // status: Int
355
+ // ) extends Response
356
+ // case object Error extends Response
357
+ // }
358
+ // """
359
+ ```
360
+
361
+ ## Cross-Scala Behavior
362
+
363
+ The `scala3Syntax` field affects code generation:
364
+
365
+ ### Scala 3 Features
366
+
367
+ When targeting Scala 3, the emitter uses:
368
+
369
+ - **Enums**: `enum Color { case Red; case Blue }`
370
+ - **Derives (case classes only)**: `derives Show, Eq` (sealed traits and enums do not emit derives)
371
+ - **Wildcard imports**: `import scala.collection.*`
372
+ - **Rename imports**: `import foo.{bar as baz}`
373
+ - **Opaque types**: `opaque type UserId = Long`
374
+
375
+ ### Scala 2 Fallback
376
+
377
+ When targeting Scala 2, the emitter uses:
378
+
379
+ - **Sealed traits** instead of enums: `sealed trait Color` + `case object Red`
380
+ - **Implicit/given** syntax converts to Scala 2 compatible form
381
+ - **Wildcard imports**: `import scala.collection._`
382
+ - **Rename imports**: `import foo.{bar => baz}`
383
+ - **Type aliases** instead of opaque types: `type UserId = Long`