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.
- package/README.md +104 -1
- package/dist/config/index.d.mts +58 -0
- package/dist/config/index.mjs +95 -0
- package/dist/index.d.mts +10 -0
- package/dist/index.mjs +1615 -0
- package/package.json +31 -17
- package/dist/cli/main.d.ts +0 -10
- package/dist/cli/main.js +0 -61
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +0 -51
- package/dist/config/index.d.ts +0 -27
- package/dist/config/index.js +0 -85
- package/dist/config/loader.d.ts +0 -19
- package/dist/config/loader.js +0 -30
- package/dist/generator/engine.d.ts +0 -3
- package/dist/generator/engine.js +0 -63
- package/dist/generator/mermaid-er/config/index.d.ts +0 -10
- package/dist/generator/mermaid-er/config/index.js +0 -12
- package/dist/generator/mermaid-er/core/extract-relations.d.ts +0 -8
- package/dist/generator/mermaid-er/core/extract-relations.js +0 -17
- package/dist/generator/mermaid-er/core.d.ts +0 -6
- package/dist/generator/mermaid-er/core.js +0 -54
- package/dist/generator/mermaid-er/generator/er-content.d.ts +0 -20
- package/dist/generator/mermaid-er/generator/er-content.js +0 -23
- package/dist/generator/mermaid-er/generator/index.d.ts +0 -2
- package/dist/generator/mermaid-er/generator/index.js +0 -2
- package/dist/generator/mermaid-er/generator/relation-line.d.ts +0 -12
- package/dist/generator/mermaid-er/generator/relation-line.js +0 -13
- package/dist/generator/mermaid-er/generator.d.ts +0 -3
- package/dist/generator/mermaid-er/generator.js +0 -14
- package/dist/generator/mermaid-er/index.d.ts +0 -12
- package/dist/generator/mermaid-er/index.js +0 -33
- package/dist/generator/mermaid-er/relationship/build-relation-line.d.ts +0 -14
- package/dist/generator/mermaid-er/relationship/build-relation-line.js +0 -34
- package/dist/generator/mermaid-er/types.d.ts +0 -21
- package/dist/generator/mermaid-er/types.js +0 -1
- package/dist/generator/mermaid-er/validator/index.d.ts +0 -8
- package/dist/generator/mermaid-er/validator/index.js +0 -74
- package/dist/generator/mermaid-er/validator/is-relationship.d.ts +0 -7
- package/dist/generator/mermaid-er/validator/is-relationship.js +0 -8
- package/dist/generator/mermaid-er/validator/parse-relation-line.d.ts +0 -12
- package/dist/generator/mermaid-er/validator/parse-relation-line.js +0 -20
- package/dist/generator/mermaid-er/validator/parse-table-info.d.ts +0 -2
- package/dist/generator/mermaid-er/validator/parse-table-info.js +0 -71
- package/dist/generator/mermaid-er/validator/remove-duplicate-relations.d.ts +0 -7
- package/dist/generator/mermaid-er/validator/remove-duplicate-relations.js +0 -9
- package/dist/generator/valibot/config/index.d.ts +0 -7
- package/dist/generator/valibot/config/index.js +0 -13
- package/dist/generator/valibot/core/extract-schema.d.ts +0 -5
- package/dist/generator/valibot/core/extract-schema.js +0 -173
- package/dist/generator/valibot/core.d.ts +0 -5
- package/dist/generator/valibot/core.js +0 -39
- package/dist/generator/valibot/generator/infer-input.d.ts +0 -5
- package/dist/generator/valibot/generator/infer-input.js +0 -8
- package/dist/generator/valibot/generator/relation-valibot-code.d.ts +0 -13
- package/dist/generator/valibot/generator/relation-valibot-code.js +0 -19
- package/dist/generator/valibot/generator/valibot-code.d.ts +0 -15
- package/dist/generator/valibot/generator/valibot-code.js +0 -16
- package/dist/generator/valibot/generator/valibot.d.ts +0 -14
- package/dist/generator/valibot/generator/valibot.js +0 -15
- package/dist/generator/valibot/generator.d.ts +0 -3
- package/dist/generator/valibot/generator.js +0 -14
- package/dist/generator/valibot/index.d.ts +0 -14
- package/dist/generator/valibot/index.js +0 -50
- package/dist/generator/zod/config/index.d.ts +0 -8
- package/dist/generator/zod/config/index.js +0 -14
- package/dist/generator/zod/core/extract-schema.d.ts +0 -7
- package/dist/generator/zod/core/extract-schema.js +0 -243
- package/dist/generator/zod/core.d.ts +0 -5
- package/dist/generator/zod/core.js +0 -39
- package/dist/generator/zod/generator/infer.d.ts +0 -5
- package/dist/generator/zod/generator/infer.js +0 -8
- package/dist/generator/zod/generator/relation-zod-code.d.ts +0 -13
- package/dist/generator/zod/generator/relation-zod-code.js +0 -19
- package/dist/generator/zod/generator/zod-code.d.ts +0 -17
- package/dist/generator/zod/generator/zod-code.js +0 -18
- package/dist/generator/zod/generator/zod.d.ts +0 -16
- package/dist/generator/zod/generator/zod.js +0 -16
- package/dist/generator/zod/generator.d.ts +0 -3
- package/dist/generator/zod/generator.js +0 -14
- package/dist/generator/zod/index.d.ts +0 -15
- package/dist/generator/zod/index.js +0 -54
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -73
- package/dist/shared/config/index.d.ts +0 -13
- package/dist/shared/config/index.js +0 -10
- package/dist/shared/format/index.d.ts +0 -13
- package/dist/shared/format/index.js +0 -24
- package/dist/shared/fs/index.d.ts +0 -7
- package/dist/shared/fs/index.js +0 -16
- package/dist/shared/fsp/index.d.ts +0 -27
- package/dist/shared/fsp/index.js +0 -38
- package/dist/shared/generator/field-definitions.d.ts +0 -12
- package/dist/shared/generator/field-definitions.js +0 -12
- package/dist/shared/helper/ast-parser.d.ts +0 -3
- package/dist/shared/helper/ast-parser.js +0 -202
- package/dist/shared/helper/build-schema-extractor.d.ts +0 -25
- package/dist/shared/helper/build-schema-extractor.js +0 -33
- package/dist/shared/helper/create-extract-field-from-property.d.ts +0 -15
- package/dist/shared/helper/create-extract-field-from-property.js +0 -20
- package/dist/shared/helper/create-extract-fields-from-call-expression.d.ts +0 -14
- package/dist/shared/helper/create-extract-fields-from-call-expression.js +0 -14
- package/dist/shared/helper/create-extract-relation-field-from-property.d.ts +0 -12
- package/dist/shared/helper/create-extract-relation-field-from-property.js +0 -27
- package/dist/shared/helper/extract-schemas.d.ts +0 -133
- package/dist/shared/helper/extract-schemas.js +0 -445
- package/dist/shared/helper/file-writer.d.ts +0 -3
- package/dist/shared/helper/file-writer.js +0 -25
- package/dist/shared/helper/find-object-literal-expression.d.ts +0 -12
- package/dist/shared/helper/find-object-literal-expression.js +0 -31
- package/dist/shared/helper/find-object-literalIn-args.d.ts +0 -2
- package/dist/shared/helper/find-object-literalIn-args.js +0 -8
- package/dist/shared/helper/is-relation-function.d.ts +0 -10
- package/dist/shared/helper/is-relation-function.js +0 -16
- package/dist/shared/types.d.ts +0 -9
- package/dist/shared/types.js +0 -1
- package/dist/shared/utils/capitalize.d.ts +0 -18
- package/dist/shared/utils/capitalize.js +0 -20
- package/dist/shared/utils/compose.d.ts +0 -101
- package/dist/shared/utils/compose.js +0 -124
- package/dist/shared/utils/file.d.ts +0 -92
- package/dist/shared/utils/file.js +0 -177
- package/dist/shared/utils/functional.d.ts +0 -118
- package/dist/shared/utils/functional.js +0 -96
- package/dist/shared/utils/index.d.ts +0 -20
- package/dist/shared/utils/index.js +0 -48
- package/dist/shared/utils/string-utils.d.ts +0 -8
- package/dist/shared/utils/string-utils.js +0 -28
- package/dist/shared/utils/types.d.ts +0 -32
- package/dist/shared/utils/types.js +0 -2
- package/dist/shared/utils/validation-utils.d.ts +0 -8
- package/dist/shared/utils/validation-utils.js +0 -25
- package/dist/src/config/index.d.ts +0 -18
- package/dist/src/config/index.js +0 -13
- package/dist/src/generator/mermaid-er/core/extract-relations.d.ts +0 -8
- package/dist/src/generator/mermaid-er/core/extract-relations.js +0 -12
- package/dist/src/generator/mermaid-er/generator/er-content.d.ts +0 -9
- package/dist/src/generator/mermaid-er/generator/er-content.js +0 -25
- package/dist/src/generator/mermaid-er/generator/index.d.ts +0 -2
- package/dist/src/generator/mermaid-er/generator/index.js +0 -2
- package/dist/src/generator/mermaid-er/generator/relation-line.d.ts +0 -8
- package/dist/src/generator/mermaid-er/generator/relation-line.js +0 -14
- package/dist/src/generator/mermaid-er/index.d.ts +0 -6
- package/dist/src/generator/mermaid-er/index.js +0 -16
- package/dist/src/generator/mermaid-er/relationship/build-relation-line.d.ts +0 -15
- package/dist/src/generator/mermaid-er/relationship/build-relation-line.js +0 -35
- package/dist/src/generator/mermaid-er/types.d.ts +0 -21
- package/dist/src/generator/mermaid-er/types.js +0 -1
- package/dist/src/generator/mermaid-er/validator/index.d.ts +0 -4
- package/dist/src/generator/mermaid-er/validator/index.js +0 -4
- package/dist/src/generator/mermaid-er/validator/is-relationship.d.ts +0 -8
- package/dist/src/generator/mermaid-er/validator/is-relationship.js +0 -9
- package/dist/src/generator/mermaid-er/validator/parse-relation-line.d.ts +0 -13
- package/dist/src/generator/mermaid-er/validator/parse-relation-line.js +0 -21
- package/dist/src/generator/mermaid-er/validator/parse-table-info.d.ts +0 -8
- package/dist/src/generator/mermaid-er/validator/parse-table-info.js +0 -91
- package/dist/src/generator/mermaid-er/validator/remove-duplicate-relations.d.ts +0 -7
- package/dist/src/generator/mermaid-er/validator/remove-duplicate-relations.js +0 -9
- package/dist/src/generator/valibot/generator/infer-input.d.ts +0 -5
- package/dist/src/generator/valibot/generator/infer-input.js +0 -8
- package/dist/src/generator/valibot/generator/valibot-code.d.ts +0 -14
- package/dist/src/generator/valibot/generator/valibot-code.js +0 -16
- package/dist/src/generator/valibot/generator/valibot.d.ts +0 -13
- package/dist/src/generator/valibot/generator/valibot.js +0 -11
- package/dist/src/generator/valibot/index.d.ts +0 -9
- package/dist/src/generator/valibot/index.js +0 -34
- package/dist/src/generator/zod/generator/infer.d.ts +0 -5
- package/dist/src/generator/zod/generator/infer.js +0 -8
- package/dist/src/generator/zod/generator/zod-code.d.ts +0 -16
- package/dist/src/generator/zod/generator/zod-code.js +0 -18
- package/dist/src/generator/zod/generator/zod.d.ts +0 -15
- package/dist/src/generator/zod/generator/zod.js +0 -12
- package/dist/src/generator/zod/index.d.ts +0 -10
- package/dist/src/generator/zod/index.js +0 -40
- package/dist/src/index.d.ts +0 -10
- package/dist/src/index.js +0 -35
- package/dist/src/shared/format/index.d.ts +0 -2
- package/dist/src/shared/format/index.js +0 -10
- package/dist/src/shared/fs/index.d.ts +0 -2
- package/dist/src/shared/fs/index.js +0 -10
- package/dist/src/shared/fsp/index.d.ts +0 -3
- package/dist/src/shared/fsp/index.js +0 -8
- package/dist/src/shared/generator/field-definitions.d.ts +0 -12
- package/dist/src/shared/generator/field-definitions.js +0 -12
- package/dist/src/shared/helper/build-schema-extractor.d.ts +0 -25
- package/dist/src/shared/helper/build-schema-extractor.js +0 -33
- package/dist/src/shared/helper/create-extract-field-from-property.d.ts +0 -15
- package/dist/src/shared/helper/create-extract-field-from-property.js +0 -20
- package/dist/src/shared/helper/create-extract-fields-from-call-expression.d.ts +0 -14
- package/dist/src/shared/helper/create-extract-fields-from-call-expression.js +0 -14
- package/dist/src/shared/helper/create-extract-relation-field-from-property.d.ts +0 -12
- package/dist/src/shared/helper/create-extract-relation-field-from-property.js +0 -27
- package/dist/src/shared/helper/extract-schemas.d.ts +0 -16
- package/dist/src/shared/helper/extract-schemas.js +0 -19
- package/dist/src/shared/helper/find-object-literal-expression.d.ts +0 -12
- package/dist/src/shared/helper/find-object-literal-expression.js +0 -31
- package/dist/src/shared/helper/find-object-literalIn-args.d.ts +0 -2
- package/dist/src/shared/helper/find-object-literalIn-args.js +0 -8
- package/dist/src/shared/helper/is-relation-function.d.ts +0 -10
- package/dist/src/shared/helper/is-relation-function.js +0 -16
- package/dist/src/shared/utils/index.d.ts +0 -33
- package/dist/src/shared/utils/index.js +0 -61
- package/dist/utils/index.d.ts +0 -144
- package/dist/utils/index.js +0 -250
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+

|
|
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 };
|