@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,436 @@
1
+ ---
2
+ id: case-class
3
+ title: "CaseClass"
4
+ ---
5
+
6
+ `CaseClass` represents an immutable case class in the IR. Use it when generating Scala code from data models, APIs, or structured data—it's the most frequently chosen type definition.
7
+
8
+ ## Use Cases
9
+
10
+ - Modeling product types (records) from OpenAPI schemas, JSON Schema, or data formats
11
+ - Defining data transfer objects (DTOs) with named fields
12
+ - Creating immutable value types with automatic `equals`, `hashCode`, `copy`
13
+
14
+ ## Construction
15
+
16
+ Build a case class with a name and field list:
17
+
18
+ ```scala
19
+ import zio.blocks.codegen.ir._
20
+
21
+ val person = CaseClass(
22
+ name = "Person",
23
+ fields = List(
24
+ Field("id", TypeRef.Long),
25
+ Field("name", TypeRef.String),
26
+ Field("email", TypeRef.String)
27
+ )
28
+ )
29
+ ```
30
+
31
+ With optional type parameters:
32
+
33
+ ```scala
34
+ import zio.blocks.codegen.ir._
35
+
36
+ val box = CaseClass(
37
+ name = "Box",
38
+ fields = List(Field("value", TypeRef("T"))),
39
+ typeParams = List(TypeParam("T"))
40
+ )
41
+ ```
42
+
43
+ With derives clauses:
44
+
45
+ ```scala
46
+ import zio.blocks.codegen.ir._
47
+
48
+ val user = CaseClass(
49
+ name = "User",
50
+ fields = List(
51
+ Field("id", TypeRef.Long),
52
+ Field("name", TypeRef.String)
53
+ ),
54
+ derives = List("Show", "Eq", "Codec")
55
+ )
56
+ ```
57
+
58
+ ## Key Operations
59
+
60
+ All `CaseClass` instances support these core operations:
61
+
62
+ ### Accessing Components
63
+
64
+ Extract parts of a case class:
65
+
66
+ ```scala
67
+ import zio.blocks.codegen.ir._
68
+
69
+ val person = CaseClass(
70
+ name = "Person",
71
+ fields = List(
72
+ Field("id", TypeRef.Long),
73
+ Field("name", TypeRef.String),
74
+ Field("email", TypeRef.String)
75
+ )
76
+ )
77
+ ```
78
+
79
+ Access each component by reading their properties:
80
+
81
+ ```scala
82
+ import zio.blocks.codegen.ir._
83
+
84
+ val person = CaseClass(
85
+ name = "Person",
86
+ fields = List(
87
+ Field("id", TypeRef.Long),
88
+ Field("name", TypeRef.String),
89
+ Field("email", TypeRef.String)
90
+ )
91
+ )
92
+ ```
93
+
94
+ Each component can be accessed and displayed:
95
+
96
+ ```scala
97
+ import zio.blocks.codegen.ir._
98
+
99
+ person.name // "Person"
100
+ // res4: String = "Person"
101
+ person.fields // List[Field]
102
+ // res5: List[Field] = List(
103
+ // Field(
104
+ // name = "id",
105
+ // typeRef = TypeRef(name = "Long", typeArgs = List()),
106
+ // defaultValue = None,
107
+ // annotations = List(),
108
+ // doc = None
109
+ // ),
110
+ // Field(
111
+ // name = "name",
112
+ // typeRef = TypeRef(name = "String", typeArgs = List()),
113
+ // defaultValue = None,
114
+ // annotations = List(),
115
+ // doc = None
116
+ // ),
117
+ // Field(
118
+ // name = "email",
119
+ // typeRef = TypeRef(name = "String", typeArgs = List()),
120
+ // defaultValue = None,
121
+ // annotations = List(),
122
+ // doc = None
123
+ // )
124
+ // )
125
+ person.typeParams // List[TypeParam] (empty if not generic)
126
+ // res6: List[TypeParam] = List()
127
+ person.derives // List[String]
128
+ // res7: List[String] = List()
129
+ person.annotations // List[Annotation]
130
+ // res8: List[Annotation] = List()
131
+ person.isValueClass // Boolean
132
+ // res9: Boolean = false
133
+ ```
134
+
135
+ ### Building with Copy
136
+
137
+ Use the copy method to modify a case class:
138
+
139
+ ```scala
140
+ import zio.blocks.codegen.ir._
141
+
142
+ val person = CaseClass(
143
+ name = "Person",
144
+ fields = List(
145
+ Field("id", TypeRef.Long),
146
+ Field("name", TypeRef.String),
147
+ Field("email", TypeRef.String)
148
+ )
149
+ )
150
+ ```
151
+
152
+ Create a new version with additional fields:
153
+
154
+ ```scala
155
+ import zio.blocks.codegen.ir._
156
+
157
+ val extended = person.copy(
158
+ fields = person.fields :+ Field("phone", TypeRef.String),
159
+ derives = List("Show")
160
+ )
161
+ // extended: CaseClass = CaseClass(
162
+ // name = "Person",
163
+ // fields = List(
164
+ // Field(
165
+ // name = "id",
166
+ // typeRef = TypeRef(name = "Long", typeArgs = List()),
167
+ // defaultValue = None,
168
+ // annotations = List(),
169
+ // doc = None
170
+ // ),
171
+ // Field(
172
+ // name = "name",
173
+ // typeRef = TypeRef(name = "String", typeArgs = List()),
174
+ // defaultValue = None,
175
+ // annotations = List(),
176
+ // doc = None
177
+ // ),
178
+ // Field(
179
+ // name = "email",
180
+ // typeRef = TypeRef(name = "String", typeArgs = List()),
181
+ // defaultValue = None,
182
+ // annotations = List(),
183
+ // doc = None
184
+ // ),
185
+ // Field(
186
+ // name = "phone",
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("Show"),
196
+ // annotations = List(),
197
+ // companion = None,
198
+ // doc = None,
199
+ // isValueClass = false
200
+ // )
201
+ ```
202
+
203
+ ### Adding a Companion Object
204
+
205
+ Case classes can have companion objects with static members:
206
+
207
+ ```scala
208
+ import zio.blocks.codegen.ir._
209
+
210
+ val withCompanion = CaseClass(
211
+ name = "Config",
212
+ fields = List(Field("timeout", TypeRef.Long)),
213
+ companion = Some(
214
+ CompanionObject(
215
+ members = List(
216
+ ObjectMember.ValMember("Default", TypeRef("Config"), "Config(5000L)")
217
+ )
218
+ )
219
+ )
220
+ )
221
+ ```
222
+
223
+ ## Examples
224
+
225
+ Here are concrete examples demonstrating typical `CaseClass` usage patterns:
226
+
227
+ ### Example 1: Simple Case Class
228
+
229
+ A basic case class with primitive fields:
230
+
231
+ ```scala
232
+ import zio.blocks.codegen.ir._
233
+ import zio.blocks.codegen.emit._
234
+
235
+ val order = CaseClass(
236
+ name = "Order",
237
+ fields = List(
238
+ Field("id", TypeRef.Long),
239
+ Field("total", TypeRef("BigDecimal")),
240
+ Field("status", TypeRef.String)
241
+ )
242
+ )
243
+
244
+ val file = ScalaFile(
245
+ packageDecl = PackageDecl("com.shop"),
246
+ types = List(order)
247
+ )
248
+ ```
249
+
250
+ Emits:
251
+
252
+ ```scala
253
+ import zio.blocks.codegen.emit._
254
+
255
+ ScalaEmitter.emit(file, EmitterConfig())
256
+ // res13: String = """package com.shop
257
+ //
258
+ // case class Order(
259
+ // id: Long,
260
+ // total: BigDecimal,
261
+ // status: String,
262
+ // )
263
+ // """
264
+ ```
265
+
266
+ ### Example 2: Nested Types
267
+
268
+ A case class with optional and collection fields:
269
+
270
+ ```scala
271
+ import zio.blocks.codegen.ir._
272
+ import zio.blocks.codegen.emit._
273
+
274
+ val user = CaseClass(
275
+ name = "User",
276
+ fields = List(
277
+ Field("id", TypeRef.Long),
278
+ Field("name", TypeRef.String),
279
+ Field("email", TypeRef("Option", List(TypeRef.String))),
280
+ Field("tags", TypeRef("List", List(TypeRef.String)))
281
+ )
282
+ )
283
+
284
+ val file = ScalaFile(
285
+ packageDecl = PackageDecl("com.example"),
286
+ types = List(user)
287
+ )
288
+ ```
289
+
290
+ Emits:
291
+
292
+ ```scala
293
+ import zio.blocks.codegen.emit._
294
+
295
+ ScalaEmitter.emit(file, EmitterConfig())
296
+ // res15: String = """package com.example
297
+ //
298
+ // case class User(
299
+ // id: Long,
300
+ // name: String,
301
+ // email: Option[String],
302
+ // tags: List[String],
303
+ // )
304
+ // """
305
+ ```
306
+
307
+ ### Example 3: Generic Case Class
308
+
309
+ A polymorphic case class with type parameters:
310
+
311
+ ```scala
312
+ import zio.blocks.codegen.ir._
313
+ import zio.blocks.codegen.emit._
314
+
315
+ val page = CaseClass(
316
+ name = "Page",
317
+ fields = List(
318
+ Field("items", TypeRef("List", List(TypeRef("T")))),
319
+ Field("total", TypeRef.Long),
320
+ Field("pageSize", TypeRef.Int)
321
+ ),
322
+ typeParams = List(TypeParam("T"))
323
+ )
324
+
325
+ val file = ScalaFile(
326
+ packageDecl = PackageDecl("com.example"),
327
+ types = List(page)
328
+ )
329
+ ```
330
+
331
+ Emits:
332
+
333
+ ```scala
334
+ import zio.blocks.codegen.emit._
335
+
336
+ ScalaEmitter.emit(file, EmitterConfig())
337
+ // res17: String = """package com.example
338
+ //
339
+ // case class Page[T](
340
+ // items: List[T],
341
+ // total: Long,
342
+ // pageSize: Int,
343
+ // )
344
+ // """
345
+ ```
346
+
347
+ ### Example 4: Case Class with Derives
348
+
349
+ Automatic typeclass derivation:
350
+
351
+ ```scala
352
+ import zio.blocks.codegen.ir._
353
+ import zio.blocks.codegen.emit._
354
+
355
+ val product = CaseClass(
356
+ name = "Product",
357
+ fields = List(
358
+ Field("id", TypeRef.String),
359
+ Field("name", TypeRef.String),
360
+ Field("price", TypeRef("java.math.BigDecimal"))
361
+ )
362
+ )
363
+
364
+ val file = ScalaFile(
365
+ packageDecl = PackageDecl("com.example"),
366
+ types = List(product)
367
+ )
368
+ ```
369
+
370
+ Emits:
371
+
372
+ ```scala
373
+ import zio.blocks.codegen.emit._
374
+
375
+ ScalaEmitter.emit(file, EmitterConfig())
376
+ // res19: String = """package com.example
377
+ //
378
+ // case class Product(
379
+ // id: String,
380
+ // name: String,
381
+ // price: java.math.BigDecimal,
382
+ // )
383
+ // """
384
+ ```
385
+
386
+ ### Example 5: Case Class with Companion
387
+
388
+ A case class with factory methods in the companion:
389
+
390
+ ```scala
391
+ import zio.blocks.codegen.ir._
392
+ import zio.blocks.codegen.emit._
393
+
394
+ val config = CaseClass(
395
+ name = "AppConfig",
396
+ fields = List(
397
+ Field("host", TypeRef.String),
398
+ Field("port", TypeRef.Int)
399
+ ),
400
+ companion = Some(
401
+ CompanionObject(
402
+ members = List(
403
+ ObjectMember.ValMember(
404
+ "Default",
405
+ TypeRef("AppConfig"),
406
+ "AppConfig(\"localhost\", 8080)"
407
+ )
408
+ )
409
+ )
410
+ )
411
+ )
412
+
413
+ val file = ScalaFile(
414
+ packageDecl = PackageDecl("com.example"),
415
+ types = List(config)
416
+ )
417
+ ```
418
+
419
+ Emits:
420
+
421
+ ```scala
422
+ import zio.blocks.codegen.emit._
423
+
424
+ ScalaEmitter.emit(file, EmitterConfig())
425
+ // res21: String = """package com.example
426
+ //
427
+ // case class AppConfig(
428
+ // host: String,
429
+ // port: Int,
430
+ // )
431
+ //
432
+ // object AppConfig {
433
+ // val Default: AppConfig = AppConfig("localhost", 8080)
434
+ // }
435
+ // """
436
+ ```