sizuku 0.3.1 → 0.4.0

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 (204) hide show
  1. package/README.md +104 -1
  2. package/dist/config/index.d.mts +58 -0
  3. package/dist/config/index.mjs +95 -0
  4. package/dist/index.d.mts +10 -0
  5. package/dist/index.mjs +1615 -0
  6. package/package.json +31 -17
  7. package/dist/cli/main.d.ts +0 -10
  8. package/dist/cli/main.js +0 -61
  9. package/dist/cli.d.ts +0 -2
  10. package/dist/cli.js +0 -51
  11. package/dist/config/index.d.ts +0 -27
  12. package/dist/config/index.js +0 -85
  13. package/dist/config/loader.d.ts +0 -19
  14. package/dist/config/loader.js +0 -30
  15. package/dist/generator/engine.d.ts +0 -3
  16. package/dist/generator/engine.js +0 -63
  17. package/dist/generator/mermaid-er/config/index.d.ts +0 -10
  18. package/dist/generator/mermaid-er/config/index.js +0 -12
  19. package/dist/generator/mermaid-er/core/extract-relations.d.ts +0 -8
  20. package/dist/generator/mermaid-er/core/extract-relations.js +0 -17
  21. package/dist/generator/mermaid-er/core.d.ts +0 -6
  22. package/dist/generator/mermaid-er/core.js +0 -54
  23. package/dist/generator/mermaid-er/generator/er-content.d.ts +0 -20
  24. package/dist/generator/mermaid-er/generator/er-content.js +0 -23
  25. package/dist/generator/mermaid-er/generator/index.d.ts +0 -2
  26. package/dist/generator/mermaid-er/generator/index.js +0 -2
  27. package/dist/generator/mermaid-er/generator/relation-line.d.ts +0 -12
  28. package/dist/generator/mermaid-er/generator/relation-line.js +0 -13
  29. package/dist/generator/mermaid-er/generator.d.ts +0 -3
  30. package/dist/generator/mermaid-er/generator.js +0 -14
  31. package/dist/generator/mermaid-er/index.d.ts +0 -12
  32. package/dist/generator/mermaid-er/index.js +0 -33
  33. package/dist/generator/mermaid-er/relationship/build-relation-line.d.ts +0 -14
  34. package/dist/generator/mermaid-er/relationship/build-relation-line.js +0 -34
  35. package/dist/generator/mermaid-er/types.d.ts +0 -21
  36. package/dist/generator/mermaid-er/types.js +0 -1
  37. package/dist/generator/mermaid-er/validator/index.d.ts +0 -8
  38. package/dist/generator/mermaid-er/validator/index.js +0 -74
  39. package/dist/generator/mermaid-er/validator/is-relationship.d.ts +0 -7
  40. package/dist/generator/mermaid-er/validator/is-relationship.js +0 -8
  41. package/dist/generator/mermaid-er/validator/parse-relation-line.d.ts +0 -12
  42. package/dist/generator/mermaid-er/validator/parse-relation-line.js +0 -20
  43. package/dist/generator/mermaid-er/validator/parse-table-info.d.ts +0 -2
  44. package/dist/generator/mermaid-er/validator/parse-table-info.js +0 -71
  45. package/dist/generator/mermaid-er/validator/remove-duplicate-relations.d.ts +0 -7
  46. package/dist/generator/mermaid-er/validator/remove-duplicate-relations.js +0 -9
  47. package/dist/generator/valibot/config/index.d.ts +0 -7
  48. package/dist/generator/valibot/config/index.js +0 -13
  49. package/dist/generator/valibot/core/extract-schema.d.ts +0 -5
  50. package/dist/generator/valibot/core/extract-schema.js +0 -173
  51. package/dist/generator/valibot/core.d.ts +0 -5
  52. package/dist/generator/valibot/core.js +0 -39
  53. package/dist/generator/valibot/generator/infer-input.d.ts +0 -5
  54. package/dist/generator/valibot/generator/infer-input.js +0 -8
  55. package/dist/generator/valibot/generator/relation-valibot-code.d.ts +0 -13
  56. package/dist/generator/valibot/generator/relation-valibot-code.js +0 -19
  57. package/dist/generator/valibot/generator/valibot-code.d.ts +0 -15
  58. package/dist/generator/valibot/generator/valibot-code.js +0 -16
  59. package/dist/generator/valibot/generator/valibot.d.ts +0 -14
  60. package/dist/generator/valibot/generator/valibot.js +0 -15
  61. package/dist/generator/valibot/generator.d.ts +0 -3
  62. package/dist/generator/valibot/generator.js +0 -14
  63. package/dist/generator/valibot/index.d.ts +0 -14
  64. package/dist/generator/valibot/index.js +0 -50
  65. package/dist/generator/zod/config/index.d.ts +0 -8
  66. package/dist/generator/zod/config/index.js +0 -14
  67. package/dist/generator/zod/core/extract-schema.d.ts +0 -7
  68. package/dist/generator/zod/core/extract-schema.js +0 -243
  69. package/dist/generator/zod/core.d.ts +0 -5
  70. package/dist/generator/zod/core.js +0 -39
  71. package/dist/generator/zod/generator/infer.d.ts +0 -5
  72. package/dist/generator/zod/generator/infer.js +0 -8
  73. package/dist/generator/zod/generator/relation-zod-code.d.ts +0 -13
  74. package/dist/generator/zod/generator/relation-zod-code.js +0 -19
  75. package/dist/generator/zod/generator/zod-code.d.ts +0 -17
  76. package/dist/generator/zod/generator/zod-code.js +0 -18
  77. package/dist/generator/zod/generator/zod.d.ts +0 -16
  78. package/dist/generator/zod/generator/zod.js +0 -16
  79. package/dist/generator/zod/generator.d.ts +0 -3
  80. package/dist/generator/zod/generator.js +0 -14
  81. package/dist/generator/zod/index.d.ts +0 -15
  82. package/dist/generator/zod/index.js +0 -54
  83. package/dist/index.d.ts +0 -7
  84. package/dist/index.js +0 -73
  85. package/dist/shared/config/index.d.ts +0 -13
  86. package/dist/shared/config/index.js +0 -10
  87. package/dist/shared/format/index.d.ts +0 -13
  88. package/dist/shared/format/index.js +0 -24
  89. package/dist/shared/fs/index.d.ts +0 -7
  90. package/dist/shared/fs/index.js +0 -16
  91. package/dist/shared/fsp/index.d.ts +0 -27
  92. package/dist/shared/fsp/index.js +0 -38
  93. package/dist/shared/generator/field-definitions.d.ts +0 -12
  94. package/dist/shared/generator/field-definitions.js +0 -12
  95. package/dist/shared/helper/ast-parser.d.ts +0 -3
  96. package/dist/shared/helper/ast-parser.js +0 -202
  97. package/dist/shared/helper/build-schema-extractor.d.ts +0 -25
  98. package/dist/shared/helper/build-schema-extractor.js +0 -33
  99. package/dist/shared/helper/create-extract-field-from-property.d.ts +0 -15
  100. package/dist/shared/helper/create-extract-field-from-property.js +0 -20
  101. package/dist/shared/helper/create-extract-fields-from-call-expression.d.ts +0 -14
  102. package/dist/shared/helper/create-extract-fields-from-call-expression.js +0 -14
  103. package/dist/shared/helper/create-extract-relation-field-from-property.d.ts +0 -12
  104. package/dist/shared/helper/create-extract-relation-field-from-property.js +0 -27
  105. package/dist/shared/helper/extract-schemas.d.ts +0 -133
  106. package/dist/shared/helper/extract-schemas.js +0 -445
  107. package/dist/shared/helper/file-writer.d.ts +0 -3
  108. package/dist/shared/helper/file-writer.js +0 -25
  109. package/dist/shared/helper/find-object-literal-expression.d.ts +0 -12
  110. package/dist/shared/helper/find-object-literal-expression.js +0 -31
  111. package/dist/shared/helper/find-object-literalIn-args.d.ts +0 -2
  112. package/dist/shared/helper/find-object-literalIn-args.js +0 -8
  113. package/dist/shared/helper/is-relation-function.d.ts +0 -10
  114. package/dist/shared/helper/is-relation-function.js +0 -16
  115. package/dist/shared/types.d.ts +0 -9
  116. package/dist/shared/types.js +0 -1
  117. package/dist/shared/utils/capitalize.d.ts +0 -18
  118. package/dist/shared/utils/capitalize.js +0 -20
  119. package/dist/shared/utils/compose.d.ts +0 -101
  120. package/dist/shared/utils/compose.js +0 -124
  121. package/dist/shared/utils/file.d.ts +0 -92
  122. package/dist/shared/utils/file.js +0 -177
  123. package/dist/shared/utils/functional.d.ts +0 -118
  124. package/dist/shared/utils/functional.js +0 -96
  125. package/dist/shared/utils/index.d.ts +0 -20
  126. package/dist/shared/utils/index.js +0 -48
  127. package/dist/shared/utils/string-utils.d.ts +0 -8
  128. package/dist/shared/utils/string-utils.js +0 -28
  129. package/dist/shared/utils/types.d.ts +0 -32
  130. package/dist/shared/utils/types.js +0 -2
  131. package/dist/shared/utils/validation-utils.d.ts +0 -8
  132. package/dist/shared/utils/validation-utils.js +0 -25
  133. package/dist/src/config/index.d.ts +0 -18
  134. package/dist/src/config/index.js +0 -13
  135. package/dist/src/generator/mermaid-er/core/extract-relations.d.ts +0 -8
  136. package/dist/src/generator/mermaid-er/core/extract-relations.js +0 -12
  137. package/dist/src/generator/mermaid-er/generator/er-content.d.ts +0 -9
  138. package/dist/src/generator/mermaid-er/generator/er-content.js +0 -25
  139. package/dist/src/generator/mermaid-er/generator/index.d.ts +0 -2
  140. package/dist/src/generator/mermaid-er/generator/index.js +0 -2
  141. package/dist/src/generator/mermaid-er/generator/relation-line.d.ts +0 -8
  142. package/dist/src/generator/mermaid-er/generator/relation-line.js +0 -14
  143. package/dist/src/generator/mermaid-er/index.d.ts +0 -6
  144. package/dist/src/generator/mermaid-er/index.js +0 -16
  145. package/dist/src/generator/mermaid-er/relationship/build-relation-line.d.ts +0 -15
  146. package/dist/src/generator/mermaid-er/relationship/build-relation-line.js +0 -35
  147. package/dist/src/generator/mermaid-er/types.d.ts +0 -21
  148. package/dist/src/generator/mermaid-er/types.js +0 -1
  149. package/dist/src/generator/mermaid-er/validator/index.d.ts +0 -4
  150. package/dist/src/generator/mermaid-er/validator/index.js +0 -4
  151. package/dist/src/generator/mermaid-er/validator/is-relationship.d.ts +0 -8
  152. package/dist/src/generator/mermaid-er/validator/is-relationship.js +0 -9
  153. package/dist/src/generator/mermaid-er/validator/parse-relation-line.d.ts +0 -13
  154. package/dist/src/generator/mermaid-er/validator/parse-relation-line.js +0 -21
  155. package/dist/src/generator/mermaid-er/validator/parse-table-info.d.ts +0 -8
  156. package/dist/src/generator/mermaid-er/validator/parse-table-info.js +0 -91
  157. package/dist/src/generator/mermaid-er/validator/remove-duplicate-relations.d.ts +0 -7
  158. package/dist/src/generator/mermaid-er/validator/remove-duplicate-relations.js +0 -9
  159. package/dist/src/generator/valibot/generator/infer-input.d.ts +0 -5
  160. package/dist/src/generator/valibot/generator/infer-input.js +0 -8
  161. package/dist/src/generator/valibot/generator/valibot-code.d.ts +0 -14
  162. package/dist/src/generator/valibot/generator/valibot-code.js +0 -16
  163. package/dist/src/generator/valibot/generator/valibot.d.ts +0 -13
  164. package/dist/src/generator/valibot/generator/valibot.js +0 -11
  165. package/dist/src/generator/valibot/index.d.ts +0 -9
  166. package/dist/src/generator/valibot/index.js +0 -34
  167. package/dist/src/generator/zod/generator/infer.d.ts +0 -5
  168. package/dist/src/generator/zod/generator/infer.js +0 -8
  169. package/dist/src/generator/zod/generator/zod-code.d.ts +0 -16
  170. package/dist/src/generator/zod/generator/zod-code.js +0 -18
  171. package/dist/src/generator/zod/generator/zod.d.ts +0 -15
  172. package/dist/src/generator/zod/generator/zod.js +0 -12
  173. package/dist/src/generator/zod/index.d.ts +0 -10
  174. package/dist/src/generator/zod/index.js +0 -40
  175. package/dist/src/index.d.ts +0 -10
  176. package/dist/src/index.js +0 -35
  177. package/dist/src/shared/format/index.d.ts +0 -2
  178. package/dist/src/shared/format/index.js +0 -10
  179. package/dist/src/shared/fs/index.d.ts +0 -2
  180. package/dist/src/shared/fs/index.js +0 -10
  181. package/dist/src/shared/fsp/index.d.ts +0 -3
  182. package/dist/src/shared/fsp/index.js +0 -8
  183. package/dist/src/shared/generator/field-definitions.d.ts +0 -12
  184. package/dist/src/shared/generator/field-definitions.js +0 -12
  185. package/dist/src/shared/helper/build-schema-extractor.d.ts +0 -25
  186. package/dist/src/shared/helper/build-schema-extractor.js +0 -33
  187. package/dist/src/shared/helper/create-extract-field-from-property.d.ts +0 -15
  188. package/dist/src/shared/helper/create-extract-field-from-property.js +0 -20
  189. package/dist/src/shared/helper/create-extract-fields-from-call-expression.d.ts +0 -14
  190. package/dist/src/shared/helper/create-extract-fields-from-call-expression.js +0 -14
  191. package/dist/src/shared/helper/create-extract-relation-field-from-property.d.ts +0 -12
  192. package/dist/src/shared/helper/create-extract-relation-field-from-property.js +0 -27
  193. package/dist/src/shared/helper/extract-schemas.d.ts +0 -16
  194. package/dist/src/shared/helper/extract-schemas.js +0 -19
  195. package/dist/src/shared/helper/find-object-literal-expression.d.ts +0 -12
  196. package/dist/src/shared/helper/find-object-literal-expression.js +0 -31
  197. package/dist/src/shared/helper/find-object-literalIn-args.d.ts +0 -2
  198. package/dist/src/shared/helper/find-object-literalIn-args.js +0 -8
  199. package/dist/src/shared/helper/is-relation-function.d.ts +0 -10
  200. package/dist/src/shared/helper/is-relation-function.js +0 -16
  201. package/dist/src/shared/utils/index.d.ts +0 -33
  202. package/dist/src/shared/utils/index.js +0 -61
  203. package/dist/utils/index.d.ts +0 -144
  204. package/dist/utils/index.js +0 -250
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ ![img](https://github.com/nakita628/sizuku/blob/main/assets/img/sizuku.png)
2
+
1
3
  # Sizuku
2
4
 
3
5
  **[Sizuku](https://www.npmjs.com/package/sizuku)** is a tool that generates validation schemas for Zod and Valibot, as well as ER diagrams, from [Drizzle](https://orm.drizzle.team/) schemas annotated with comments.
@@ -6,7 +8,11 @@
6
8
 
7
9
  - 💎 Automatically generates [Zod](https://zod.dev/) schemas from your Drizzle schema
8
10
  - 🤖 Automatically generates [Valibot](https://valibot.dev/) schemas from your Drizzle schema
11
+ - 🏹 Automatically generates [ArkType](https://arktype.io/) schemas from your Drizzle schema
12
+ - ⚡ Automatically generates [Effect Schema](https://effect.website/docs/schema/introduction/) from your Drizzle schema
9
13
  - 📊 Creates [Mermaid](https://mermaid.js.org/) ER diagrams
14
+ - 📝 Generates [DBML](https://dbml.dbdiagram.io/) (Database Markup Language) files
15
+ - 🖼️ Outputs ER diagrams as **PNG/SVG** images using [dbml-renderer](https://github.com/softwaretechnik-berlin/dbml-renderer)
10
16
 
11
17
 
12
18
  ## Getting Started
@@ -73,7 +79,7 @@ export const postRelations = relations(post, ({ one }) => ({
73
79
  Prepare sizuku.config.ts:
74
80
 
75
81
  ```ts
76
- import defineConfig from 'sizuku/config'
82
+ import { defineConfig } from 'sizuku/config'
77
83
 
78
84
  export default defineConfig({
79
85
  input: 'db/schema.ts',
@@ -90,9 +96,26 @@ export default defineConfig({
90
96
  type: true,
91
97
  relation: true,
92
98
  },
99
+ arktype: {
100
+ output: 'arktype/index.ts',
101
+ comment: true,
102
+ type: true,
103
+ },
104
+ effect: {
105
+ output: 'effect/index.ts',
106
+ comment: true,
107
+ type: true,
108
+ },
93
109
  mermaid: {
94
110
  output: 'mermaid-er/ER.md',
95
111
  },
112
+ dbml: {
113
+ output: 'dbml/schema.dbml',
114
+ },
115
+ svg: {
116
+ output: 'docs/er-diagram.png',
117
+ format: 'png',
118
+ },
96
119
  })
97
120
  ```
98
121
 
@@ -215,6 +238,86 @@ erDiagram
215
238
  }
216
239
  ```
217
240
 
241
+ ### DBML
242
+
243
+ ```dbml
244
+ Table user {
245
+ id varchar [pk, note: 'Primary key']
246
+ name varchar [note: 'Display name']
247
+ }
248
+
249
+ Table post {
250
+ id varchar [pk, note: 'Primary key']
251
+ title varchar [note: 'Article title']
252
+ content varchar [note: 'Body content (no length limit)']
253
+ userId varchar [note: 'Foreign key referencing User.id']
254
+ }
255
+
256
+ Ref post_userId_user_id_fk: post.userId > user.id
257
+ ```
258
+
259
+ ### PNG/SVG
260
+
261
+ The `svg` generator outputs ER diagrams as PNG or SVG images using [dbml-renderer](https://github.com/softwaretechnik-berlin/dbml-renderer).
262
+
263
+ Output: `docs/er-diagram.png`
264
+
265
+ ## Configuration
266
+
267
+ ### Zod Options
268
+
269
+ | Option | Type | Default | Description |
270
+ |------------|-----------|----------------|------------------------------------------------------------------|
271
+ | `output` | `string` | `zod/index.ts` | Output file path |
272
+ | `type` | `boolean` | `false` | Generate TypeScript types |
273
+ | `comment` | `boolean` | `false` | Include schema documentation |
274
+ | `zod` | `string` | `'v4'` | Zod import version (`'mini'`, `'@hono/zod-openapi'`, or `'v4'`) |
275
+ | `relation` | `boolean` | `false` | Generate relation schemas |
276
+
277
+ ### Valibot Options
278
+
279
+ | Option | Type | Default | Description |
280
+ |------------|-----------|--------------------|------------------------------|
281
+ | `output` | `string` | `valibot/index.ts` | Output file path |
282
+ | `type` | `boolean` | `false` | Generate TypeScript types |
283
+ | `comment` | `boolean` | `false` | Include schema documentation |
284
+ | `relation` | `boolean` | `false` | Generate relation schemas |
285
+
286
+ ### ArkType Options
287
+
288
+ | Option | Type | Default | Description |
289
+ |-----------|-----------|--------------------|------------------------------|
290
+ | `output` | `string` | `arktype/index.ts` | Output file path |
291
+ | `type` | `boolean` | `false` | Generate TypeScript types |
292
+ | `comment` | `boolean` | `false` | Include schema documentation |
293
+
294
+ ### Effect Options
295
+
296
+ | Option | Type | Default | Description |
297
+ |-----------|-----------|-------------------|------------------------------|
298
+ | `output` | `string` | `effect/index.ts` | Output file path |
299
+ | `type` | `boolean` | `false` | Generate TypeScript types |
300
+ | `comment` | `boolean` | `false` | Include schema documentation |
301
+
302
+ ### Mermaid Options
303
+
304
+ | Option | Type | Default | Description |
305
+ |----------|----------|------------------|------------------|
306
+ | `output` | `string` | `mermaid-er/ER.md` | Output file path |
307
+
308
+ ### DBML Options
309
+
310
+ | Option | Type | Default | Description |
311
+ |----------|----------|--------------------|------------------|
312
+ | `output` | `string` | `dbml/schema.dbml` | Output file path |
313
+
314
+ ### SVG Options
315
+
316
+ | Option | Type | Default | Description |
317
+ |----------|----------|-----------------------|------------------------------------------|
318
+ | `output` | `string` | `docs/er-diagram.png` | Output file path |
319
+ | `format` | `string` | `png` | Output format (`png`, `svg`, or `dot`) |
320
+
218
321
  ### ⚠️ WARNING: Potential Breaking Changes Without Notice
219
322
 
220
323
  This package is in active development and may introduce breaking changes without prior notice.
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/config/index.d.ts
4
+ declare const configSchema: z.ZodObject<{
5
+ input: z.ZodType<`${string}.ts`, unknown, z.core.$ZodTypeInternals<`${string}.ts`, unknown>>;
6
+ zod: z.ZodOptional<z.ZodObject<{
7
+ output: z.ZodType<`${string}.ts`, unknown, z.core.$ZodTypeInternals<`${string}.ts`, unknown>>;
8
+ comment: z.ZodOptional<z.ZodBoolean>;
9
+ type: z.ZodOptional<z.ZodBoolean>;
10
+ zod: z.ZodOptional<z.ZodEnum<{
11
+ v4: "v4";
12
+ mini: "mini";
13
+ "@hono/zod-openapi": "@hono/zod-openapi";
14
+ }>>;
15
+ relation: z.ZodOptional<z.ZodBoolean>;
16
+ }, z.core.$strip>>;
17
+ valibot: z.ZodOptional<z.ZodObject<{
18
+ output: z.ZodType<`${string}.ts`, unknown, z.core.$ZodTypeInternals<`${string}.ts`, unknown>>;
19
+ comment: z.ZodOptional<z.ZodBoolean>;
20
+ type: z.ZodOptional<z.ZodBoolean>;
21
+ relation: z.ZodOptional<z.ZodBoolean>;
22
+ }, z.core.$strip>>;
23
+ arktype: z.ZodOptional<z.ZodObject<{
24
+ output: z.ZodType<`${string}.ts`, unknown, z.core.$ZodTypeInternals<`${string}.ts`, unknown>>;
25
+ comment: z.ZodOptional<z.ZodBoolean>;
26
+ type: z.ZodOptional<z.ZodBoolean>;
27
+ }, z.core.$strip>>;
28
+ effect: z.ZodOptional<z.ZodObject<{
29
+ output: z.ZodType<`${string}.ts`, unknown, z.core.$ZodTypeInternals<`${string}.ts`, unknown>>;
30
+ comment: z.ZodOptional<z.ZodBoolean>;
31
+ type: z.ZodOptional<z.ZodBoolean>;
32
+ }, z.core.$strip>>;
33
+ mermaid: z.ZodOptional<z.ZodObject<{
34
+ output: z.ZodString;
35
+ }, z.core.$strip>>;
36
+ dbml: z.ZodOptional<z.ZodObject<{
37
+ output: z.ZodType<`${string}.dbml`, unknown, z.core.$ZodTypeInternals<`${string}.dbml`, unknown>>;
38
+ }, z.core.$strip>>;
39
+ svg: z.ZodOptional<z.ZodObject<{
40
+ output: z.ZodString;
41
+ format: z.ZodOptional<z.ZodEnum<{
42
+ svg: "svg";
43
+ png: "png";
44
+ dot: "dot";
45
+ }>>;
46
+ }, z.core.$strip>>;
47
+ }, z.core.$strip>;
48
+ type Config = z.infer<typeof configSchema>;
49
+ declare function config(): Promise<{
50
+ readonly ok: true;
51
+ readonly value: Config;
52
+ } | {
53
+ readonly ok: false;
54
+ readonly error: string;
55
+ }>;
56
+ declare function defineConfig(config: Config): Config;
57
+ //#endregion
58
+ export { Config, config, defineConfig };
@@ -0,0 +1,95 @@
1
+ import { existsSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { register } from "tsx/esm/api";
5
+ import { z } from "zod";
6
+
7
+ //#region src/config/index.ts
8
+ const tsFileSchema = z.string().endsWith(".ts");
9
+ const dbmlFileSchema = z.string().endsWith(".dbml");
10
+ const zodConfigSchema = z.object({
11
+ output: tsFileSchema,
12
+ comment: z.boolean().optional(),
13
+ type: z.boolean().optional(),
14
+ zod: z.enum([
15
+ "v4",
16
+ "mini",
17
+ "@hono/zod-openapi"
18
+ ]).optional(),
19
+ relation: z.boolean().optional()
20
+ }).optional();
21
+ const valibotConfigSchema = z.object({
22
+ output: tsFileSchema,
23
+ comment: z.boolean().optional(),
24
+ type: z.boolean().optional(),
25
+ relation: z.boolean().optional()
26
+ }).optional();
27
+ const arktypeConfigSchema = z.object({
28
+ output: tsFileSchema,
29
+ comment: z.boolean().optional(),
30
+ type: z.boolean().optional()
31
+ }).optional();
32
+ const effectConfigSchema = z.object({
33
+ output: tsFileSchema,
34
+ comment: z.boolean().optional(),
35
+ type: z.boolean().optional()
36
+ }).optional();
37
+ const mermaidConfigSchema = z.object({ output: z.string() }).optional();
38
+ const dbmlConfigSchema = z.object({ output: dbmlFileSchema }).optional();
39
+ const svgConfigSchema = z.object({
40
+ output: z.string(),
41
+ format: z.enum([
42
+ "svg",
43
+ "png",
44
+ "dot"
45
+ ]).optional()
46
+ }).optional();
47
+ const configSchema = z.object({
48
+ input: tsFileSchema,
49
+ zod: zodConfigSchema,
50
+ valibot: valibotConfigSchema,
51
+ arktype: arktypeConfigSchema,
52
+ effect: effectConfigSchema,
53
+ mermaid: mermaidConfigSchema,
54
+ dbml: dbmlConfigSchema,
55
+ svg: svgConfigSchema
56
+ });
57
+ async function config() {
58
+ const abs = resolve(process.cwd(), "sizuku.config.ts");
59
+ if (!existsSync(abs)) return {
60
+ ok: false,
61
+ error: `Config not found: ${abs}`
62
+ };
63
+ try {
64
+ register();
65
+ const mod = await import(pathToFileURL(abs).href);
66
+ if (!("default" in mod)) return {
67
+ ok: false,
68
+ error: "Config must export default object"
69
+ };
70
+ if (mod.default === void 0) return {
71
+ ok: false,
72
+ error: "Config default is undefined"
73
+ };
74
+ const result = configSchema.safeParse(mod.default);
75
+ if (!result.success) return {
76
+ ok: false,
77
+ error: result.error.issues.map((e) => `${e.path.map(String).join(".")}: ${e.message}`).join(", ")
78
+ };
79
+ return {
80
+ ok: true,
81
+ value: result.data
82
+ };
83
+ } catch (e) {
84
+ return {
85
+ ok: false,
86
+ error: e instanceof Error ? e.message : String(e)
87
+ };
88
+ }
89
+ }
90
+ function defineConfig(config) {
91
+ return config;
92
+ }
93
+
94
+ //#endregion
95
+ export { config, defineConfig };
@@ -0,0 +1,10 @@
1
+ //#region src/index.d.ts
2
+ declare function main(): Promise<{
3
+ readonly ok: true;
4
+ readonly value: string;
5
+ } | {
6
+ readonly ok: false;
7
+ readonly error: string;
8
+ }>;
9
+ //#endregion
10
+ export { main };