@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,408 @@
1
+ ---
2
+ id: sealed-trait
3
+ title: "SealedTrait"
4
+ ---
5
+
6
+ `SealedTrait` represents a sealed trait in the IR—a sum type (algebraic data type) that enumerates all possible cases. It's essential for modeling discriminated unions and exhaustive pattern matching.
7
+
8
+ ## Use Cases
9
+
10
+ - Modeling sum types (ADTs) from API responses or domain models
11
+ - Creating hierarchies of case classes and case objects
12
+ - Defining error types with multiple failure cases
13
+ - Implementing discriminated unions with exhaustive matching
14
+
15
+ ## Construction
16
+
17
+ Build a sealed trait with cases:
18
+
19
+ ```scala
20
+ import zio.blocks.codegen.ir._
21
+
22
+ val httpStatus = SealedTrait(
23
+ name = "HttpStatus",
24
+ cases = List(
25
+ SealedTraitCase.CaseObjectCase("Ok"),
26
+ SealedTraitCase.CaseObjectCase("NotFound"),
27
+ SealedTraitCase.CaseObjectCase("ServerError")
28
+ )
29
+ )
30
+ ```
31
+
32
+ With case classes as cases:
33
+
34
+ ```scala
35
+ import zio.blocks.codegen.ir._
36
+
37
+ val result = SealedTrait(
38
+ name = "Result",
39
+ cases = List(
40
+ SealedTraitCase.CaseClassCase(
41
+ CaseClass("Success", List(Field("value", TypeRef.String)))
42
+ ),
43
+ SealedTraitCase.CaseClassCase(
44
+ CaseClass("Failure", List(Field("error", TypeRef.String)))
45
+ )
46
+ )
47
+ )
48
+ ```
49
+
50
+ With type parameters:
51
+
52
+ ```scala
53
+ import zio.blocks.codegen.ir._
54
+
55
+ val option = SealedTrait(
56
+ name = "Option",
57
+ typeParams = List(TypeParam("A")),
58
+ cases = List(
59
+ SealedTraitCase.CaseObjectCase("None"),
60
+ SealedTraitCase.CaseClassCase(
61
+ CaseClass("Some", List(Field("value", TypeRef("A"))), typeParams = List(TypeParam("A")))
62
+ )
63
+ )
64
+ )
65
+ ```
66
+
67
+ ## Key Operations
68
+
69
+ All core operations are shown below:
70
+
71
+ ### Accessing Components
72
+
73
+ Extract parts of a sealed trait:
74
+
75
+ ```scala
76
+ import zio.blocks.codegen.emit._
77
+ result.name // "Result"
78
+ // res2: String = "Result"
79
+ result.cases // List[SealedTraitCase]
80
+ // res3: List[SealedTraitCase] = List(
81
+ // CaseClassCase(
82
+ // CaseClass(
83
+ // name = "Success",
84
+ // fields = List(
85
+ // Field(
86
+ // name = "value",
87
+ // typeRef = TypeRef(name = "String", typeArgs = List()),
88
+ // defaultValue = None,
89
+ // annotations = List(),
90
+ // doc = None
91
+ // )
92
+ // ),
93
+ // typeParams = List(),
94
+ // extendsTypes = List(),
95
+ // derives = List(),
96
+ // annotations = List(),
97
+ // companion = None,
98
+ // doc = None,
99
+ // isValueClass = false
100
+ // )
101
+ // ),
102
+ // CaseClassCase(
103
+ // CaseClass(
104
+ // name = "Failure",
105
+ // fields = List(
106
+ // Field(
107
+ // name = "error",
108
+ // typeRef = TypeRef(name = "String", typeArgs = List()),
109
+ // defaultValue = None,
110
+ // annotations = List(),
111
+ // doc = None
112
+ // )
113
+ // ),
114
+ // typeParams = List(),
115
+ // extendsTypes = List(),
116
+ // derives = List(),
117
+ // annotations = List(),
118
+ // companion = None,
119
+ // doc = None,
120
+ // isValueClass = false
121
+ // )
122
+ // )
123
+ // )
124
+ result.typeParams // List[TypeParam] (empty if not generic)
125
+ // res4: List[TypeParam] = List()
126
+ result.derives // List[String]
127
+ // res5: List[String] = List()
128
+ result.annotations // List[Annotation]
129
+ // res6: List[Annotation] = List()
130
+ ```
131
+
132
+ ### Working with Cases
133
+
134
+ Each case is either a `CaseObjectCase` or `CaseClassCase`:
135
+
136
+ ```scala
137
+ import zio.blocks.codegen.ir._
138
+
139
+ val caseObj = SealedTraitCase.CaseObjectCase("Unknown")
140
+
141
+ val caseClass = SealedTraitCase.CaseClassCase(
142
+ CaseClass("Error", List(Field("msg", TypeRef.String)))
143
+ )
144
+ ```
145
+
146
+ ### Building with Copy
147
+
148
+ Modify a sealed trait:
149
+
150
+ ```scala
151
+ import zio.blocks.codegen.emit._
152
+ val updated = result.copy(
153
+ cases = result.cases :+ SealedTraitCase.CaseObjectCase("Pending")
154
+ )
155
+ // updated: SealedTrait = SealedTrait(
156
+ // name = "Result",
157
+ // typeParams = List(),
158
+ // extendsTypes = List(),
159
+ // cases = List(
160
+ // CaseClassCase(
161
+ // CaseClass(
162
+ // name = "Success",
163
+ // fields = List(
164
+ // Field(
165
+ // name = "value",
166
+ // typeRef = TypeRef(name = "String", typeArgs = List()),
167
+ // defaultValue = None,
168
+ // annotations = List(),
169
+ // doc = None
170
+ // )
171
+ // ),
172
+ // typeParams = List(),
173
+ // extendsTypes = List(),
174
+ // derives = List(),
175
+ // annotations = List(),
176
+ // companion = None,
177
+ // doc = None,
178
+ // isValueClass = false
179
+ // )
180
+ // ),
181
+ // CaseClassCase(
182
+ // CaseClass(
183
+ // name = "Failure",
184
+ // fields = List(
185
+ // Field(
186
+ // name = "error",
187
+ // typeRef = TypeRef(name = "String", typeArgs = List()),
188
+ // defaultValue = None,
189
+ // annotations = List(),
190
+ // doc = None
191
+ // )
192
+ // ),
193
+ // typeParams = List(),
194
+ // extendsTypes = List(),
195
+ // derives = List(),
196
+ // annotations = List(),
197
+ // companion = None,
198
+ // doc = None,
199
+ // isValueClass = false
200
+ // )
201
+ // ),
202
+ // CaseObjectCase("Pending")
203
+ // ),
204
+ // ...
205
+ ```
206
+
207
+ ## Examples
208
+
209
+ Practical examples demonstrate common usage:
210
+
211
+ ### Example 1: Simple Enum-Like Sealed Trait
212
+
213
+ A sealed trait with only case objects:
214
+
215
+ ```scala
216
+ import zio.blocks.codegen.ir._
217
+ import zio.blocks.codegen.emit._
218
+
219
+ val color = SealedTrait(
220
+ name = "Color",
221
+ cases = List(
222
+ SealedTraitCase.CaseObjectCase("Red"),
223
+ SealedTraitCase.CaseObjectCase("Green"),
224
+ SealedTraitCase.CaseObjectCase("Blue")
225
+ )
226
+ )
227
+
228
+ val file = ScalaFile(
229
+ packageDecl = PackageDecl("com.graphics"),
230
+ types = List(color)
231
+ )
232
+ ```
233
+
234
+ Emits:
235
+
236
+ ```scala
237
+ import zio.blocks.codegen.emit._
238
+ ScalaEmitter.emit(file, EmitterConfig())
239
+ // res9: String = """package com.graphics
240
+ //
241
+ // sealed trait Color
242
+ //
243
+ // object Color {
244
+ // case object Red extends Color
245
+ // case object Green extends Color
246
+ // case object Blue extends Color
247
+ // }
248
+ // """
249
+ ```
250
+
251
+ ### Example 2: Mixed Case Objects and Case Classes
252
+
253
+ A sealed trait with both simple and complex cases:
254
+
255
+ ```scala
256
+ import zio.blocks.codegen.ir._
257
+ import zio.blocks.codegen.emit._
258
+
259
+ val payment = SealedTrait(
260
+ name = "Payment",
261
+ cases = List(
262
+ SealedTraitCase.CaseClassCase(
263
+ CaseClass("CreditCard", List(
264
+ Field("number", TypeRef.String),
265
+ Field("expiry", TypeRef.String)
266
+ ))
267
+ ),
268
+ SealedTraitCase.CaseClassCase(
269
+ CaseClass("BankTransfer", List(
270
+ Field("accountNumber", TypeRef.String)
271
+ ))
272
+ ),
273
+ SealedTraitCase.CaseObjectCase("Cash"),
274
+ SealedTraitCase.CaseObjectCase("Check")
275
+ )
276
+ )
277
+
278
+ val file = ScalaFile(
279
+ packageDecl = PackageDecl("com.example"),
280
+ types = List(payment)
281
+ )
282
+ ```
283
+
284
+ Emits:
285
+
286
+ ```scala
287
+ import zio.blocks.codegen.emit._
288
+ ScalaEmitter.emit(file, EmitterConfig())
289
+ // res11: String = """package com.example
290
+ //
291
+ // sealed trait Payment
292
+ //
293
+ // object Payment {
294
+ // case class CreditCard(
295
+ // number: String,
296
+ // expiry: String,
297
+ // ) extends Payment
298
+ // case class BankTransfer(
299
+ // accountNumber: String,
300
+ // ) extends Payment
301
+ // case object Cash extends Payment
302
+ // case object Check extends Payment
303
+ // }
304
+ // """
305
+ ```
306
+
307
+ ### Example 3: Generic Sealed Trait
308
+
309
+ A polymorphic sealed trait with type parameters:
310
+
311
+ ```scala
312
+ import zio.blocks.codegen.ir._
313
+ import zio.blocks.codegen.emit._
314
+
315
+ val either = SealedTrait(
316
+ name = "Either",
317
+ typeParams = List(TypeParam("L"), TypeParam("R")),
318
+ cases = List(
319
+ SealedTraitCase.CaseClassCase(
320
+ CaseClass("Left", List(Field("value", TypeRef("L"))), typeParams = List(TypeParam("L")))
321
+ ),
322
+ SealedTraitCase.CaseClassCase(
323
+ CaseClass("Right", List(Field("value", TypeRef("R"))), typeParams = List(TypeParam("R")))
324
+ )
325
+ )
326
+ )
327
+
328
+ val file = ScalaFile(
329
+ packageDecl = PackageDecl("com.example"),
330
+ types = List(either)
331
+ )
332
+ ```
333
+
334
+ Emits:
335
+
336
+ ```scala
337
+ import zio.blocks.codegen.emit._
338
+ ScalaEmitter.emit(file, EmitterConfig())
339
+ // res13: String = """package com.example
340
+ //
341
+ // sealed trait Either[L, R]
342
+ //
343
+ // object Either {
344
+ // case class Left[L](
345
+ // value: L,
346
+ // ) extends Either[L, R]
347
+ // case class Right[R](
348
+ // value: R,
349
+ // ) extends Either[L, R]
350
+ // }
351
+ // """
352
+ ```
353
+
354
+ ### Example 4: Error ADT
355
+
356
+ A sealed trait for error handling:
357
+
358
+ ```scala
359
+ import zio.blocks.codegen.ir._
360
+ import zio.blocks.codegen.emit._
361
+
362
+ val appError = SealedTrait(
363
+ name = "AppError",
364
+ cases = List(
365
+ SealedTraitCase.CaseClassCase(
366
+ CaseClass("ValidationError", List(
367
+ Field("field", TypeRef.String),
368
+ Field("reason", TypeRef.String)
369
+ ))
370
+ ),
371
+ SealedTraitCase.CaseClassCase(
372
+ CaseClass("NotFound", List(
373
+ Field("id", TypeRef.Long)
374
+ ))
375
+ ),
376
+ SealedTraitCase.CaseObjectCase("Unauthorized"),
377
+ SealedTraitCase.CaseObjectCase("InternalServerError")
378
+ )
379
+ )
380
+
381
+ val file = ScalaFile(
382
+ packageDecl = PackageDecl("com.example"),
383
+ types = List(appError)
384
+ )
385
+ ```
386
+
387
+ Emits:
388
+
389
+ ```scala
390
+ import zio.blocks.codegen.emit._
391
+ ScalaEmitter.emit(file, EmitterConfig())
392
+ // res15: String = """package com.example
393
+ //
394
+ // sealed trait AppError
395
+ //
396
+ // object AppError {
397
+ // case class ValidationError(
398
+ // field: String,
399
+ // reason: String,
400
+ // ) extends AppError
401
+ // case class NotFound(
402
+ // id: Long,
403
+ // ) extends AppError
404
+ // case object Unauthorized extends AppError
405
+ // case object InternalServerError extends AppError
406
+ // }
407
+ // """
408
+ ```