hekireki 0.1.0 → 0.2.1
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 +71 -214
- package/dist/generator/mermaid-er/generator/er-content.d.ts +2 -0
- package/dist/generator/mermaid-er/generator/er-content.js +21 -0
- package/dist/generator/mermaid-er/generator/index.d.ts +4 -0
- package/dist/generator/mermaid-er/generator/index.js +4 -0
- package/dist/generator/mermaid-er/generator/{generate-model-fields.d.ts → model-fields.d.ts} +1 -1
- package/dist/generator/mermaid-er/generator/{generate-model-fields.js → model-fields.js} +1 -4
- package/dist/generator/mermaid-er/generator/model-info.d.ts +7 -0
- package/dist/generator/mermaid-er/generator/model-info.js +9 -0
- package/dist/generator/mermaid-er/generator/relation-line.d.ts +7 -0
- package/dist/generator/mermaid-er/generator/relation-line.js +13 -0
- package/dist/generator/mermaid-er/index.d.ts +0 -6
- package/dist/generator/mermaid-er/index.js +11 -28
- package/dist/generator/mermaid-er/relationship/build-relation-line.d.ts +0 -5
- package/dist/generator/mermaid-er/relationship/build-relation-line.js +7 -15
- package/dist/generator/mermaid-er/types.js +1 -0
- package/dist/generator/mermaid-er/validator/exclude-many-to-one-relations.js +1 -4
- package/dist/generator/mermaid-er/validator/extract-relations.d.ts +1 -1
- package/dist/generator/mermaid-er/validator/extract-relations.js +5 -8
- package/dist/generator/mermaid-er/validator/index.d.ts +5 -0
- package/dist/generator/mermaid-er/validator/index.js +5 -0
- package/dist/generator/mermaid-er/validator/is-relationship.d.ts +1 -1
- package/dist/generator/mermaid-er/validator/is-relationship.js +1 -4
- package/dist/generator/mermaid-er/validator/parse-relation.d.ts +1 -1
- package/dist/generator/mermaid-er/validator/parse-relation.js +1 -4
- package/dist/generator/mermaid-er/validator/remove-duplicate-relations.js +1 -4
- package/dist/generator/valibot/generator/index.d.ts +5 -0
- package/dist/generator/valibot/generator/index.js +5 -0
- package/dist/generator/valibot/generator/{generate-valibot-infer-input.d.ts → infer-input.d.ts} +1 -2
- package/dist/generator/valibot/generator/infer-input.js +9 -0
- package/dist/generator/valibot/generator/properties.d.ts +7 -0
- package/dist/generator/valibot/generator/{generate-valibot-properties.js → properties.js} +2 -5
- package/dist/generator/valibot/generator/schema.d.ts +7 -0
- package/dist/generator/valibot/generator/schema.js +9 -0
- package/dist/generator/valibot/generator/{generate-valibot-schemas.d.ts → schemas.d.ts} +2 -4
- package/dist/generator/valibot/generator/schemas.js +17 -0
- package/dist/generator/valibot/generator/valibot.d.ts +9 -0
- package/dist/generator/valibot/generator/valibot.js +50 -0
- package/dist/generator/valibot/index.d.ts +0 -8
- package/dist/generator/valibot/index.js +13 -44
- package/dist/generator/valibot/validator/index.d.ts +2 -0
- package/dist/generator/valibot/validator/index.js +2 -0
- package/dist/generator/valibot/validator/is-valibot-document.d.ts +1 -0
- package/dist/generator/valibot/validator/{is-valibot-documentation.js → is-valibot-document.js} +1 -4
- package/dist/generator/valibot/validator/is-valibot.d.ts +6 -0
- package/dist/generator/valibot/validator/{is-valibot-validation.js → is-valibot.js} +1 -5
- package/dist/generator/zod/generator/index.d.ts +5 -0
- package/dist/generator/zod/generator/index.js +5 -0
- package/dist/generator/zod/generator/{generate-zod-infer.d.ts → infer.d.ts} +1 -2
- package/dist/generator/zod/generator/infer.js +9 -0
- package/dist/generator/zod/generator/{generate-zod-properties.d.ts → properties.d.ts} +2 -3
- package/dist/generator/zod/generator/{generate-zod-properties.js → properties.js} +2 -5
- package/dist/generator/zod/generator/{generate-zod-schema.d.ts → schema.d.ts} +1 -2
- package/dist/generator/zod/generator/schema.js +10 -0
- package/dist/generator/zod/generator/{generate-zod-schemas.d.ts → schemas.d.ts} +2 -3
- package/dist/generator/zod/generator/schemas.js +16 -0
- package/dist/generator/zod/generator/zod.d.ts +9 -0
- package/dist/generator/zod/generator/zod.js +55 -0
- package/dist/generator/zod/index.d.ts +0 -8
- package/dist/generator/zod/index.js +14 -44
- package/dist/generator/zod/validator/index.d.ts +2 -0
- package/dist/generator/zod/validator/index.js +2 -0
- package/dist/generator/zod/validator/{is-zod-documentation.d.ts → is-zod-document.d.ts} +1 -1
- package/dist/generator/zod/validator/{is-zod-documentation.js → is-zod-document.js} +1 -4
- package/dist/generator/zod/validator/{is-zod-validation.d.ts → is-zod.d.ts} +1 -1
- package/dist/generator/zod/validator/{is-zod-validation.js → is-zod.js} +1 -4
- package/dist/shared/format/index.d.ts +1 -0
- package/dist/shared/format/index.js +9 -0
- package/dist/shared/helper/group-by-model.d.ts +8 -0
- package/dist/{common/helper/group-by-model-helper.js → shared/helper/group-by-model.js} +1 -4
- package/dist/shared/types.js +1 -0
- package/dist/{common/text → shared/utils}/capitalize.d.ts +3 -5
- package/dist/{common/text → shared/utils}/capitalize.js +4 -9
- package/dist/shared/utils/index.d.ts +1 -0
- package/dist/shared/utils/index.js +1 -0
- package/dist/{common/validator/is-fields-validation.d.ts → shared/validator/is-fields.d.ts} +2 -2
- package/dist/{common/validator/is-fields-validation.js → shared/validator/is-fields.js} +1 -4
- package/package.json +12 -11
- package/dist/common/format/index.d.ts +0 -1
- package/dist/common/format/index.js +0 -12
- package/dist/common/helper/get-camel-case-schema-name-helper.d.ts +0 -7
- package/dist/common/helper/get-camel-case-schema-name-helper.js +0 -14
- package/dist/common/helper/get-pascal-case-schema-name-helper.d.ts +0 -8
- package/dist/common/helper/get-pascal-case-schema-name-helper.js +0 -15
- package/dist/common/helper/get-variable-name-helper.d.ts +0 -9
- package/dist/common/helper/get-variable-name-helper.js +0 -15
- package/dist/common/helper/get-variable-schema-name-helper.d.ts +0 -9
- package/dist/common/helper/get-variable-schema-name-helper.js +0 -17
- package/dist/common/helper/group-by-model-helper.d.ts +0 -8
- package/dist/common/text/decapitalize.d.ts +0 -17
- package/dist/common/text/decapitalize.js +0 -22
- package/dist/common/type/index.js +0 -2
- package/dist/generator/mermaid/generator/generate-er-content.d.ts +0 -7
- package/dist/generator/mermaid/generator/generate-er-content.js +0 -22
- package/dist/generator/mermaid/generator/generate-model-fields.d.ts +0 -7
- package/dist/generator/mermaid/generator/generate-model-fields.js +0 -27
- package/dist/generator/mermaid/generator/generate-model-info.d.ts +0 -8
- package/dist/generator/mermaid/generator/generate-model-info.js +0 -13
- package/dist/generator/mermaid/generator/generate-relation-line.d.ts +0 -7
- package/dist/generator/mermaid/generator/generate-relation-line.js +0 -16
- package/dist/generator/mermaid/index.d.ts +0 -9
- package/dist/generator/mermaid/index.js +0 -39
- package/dist/generator/mermaid/output/index.d.ts +0 -8
- package/dist/generator/mermaid/output/index.js +0 -24
- package/dist/generator/mermaid/relationship/build-relation-line.d.ts +0 -14
- package/dist/generator/mermaid/relationship/build-relation-line.js +0 -37
- package/dist/generator/mermaid/relationship/index.d.ts +0 -12
- package/dist/generator/mermaid/relationship/index.js +0 -30
- package/dist/generator/mermaid/type/index.d.ts +0 -10
- package/dist/generator/mermaid/type/index.js +0 -2
- package/dist/generator/mermaid/validator/exclude-many-to-one-relations.d.ts +0 -7
- package/dist/generator/mermaid/validator/exclude-many-to-one-relations.js +0 -12
- package/dist/generator/mermaid/validator/extract-relations.d.ts +0 -7
- package/dist/generator/mermaid/validator/extract-relations.js +0 -25
- package/dist/generator/mermaid/validator/is-relation.d.ts +0 -7
- package/dist/generator/mermaid/validator/is-relation.js +0 -37
- package/dist/generator/mermaid/validator/is-relationship.d.ts +0 -7
- package/dist/generator/mermaid/validator/is-relationship.js +0 -11
- package/dist/generator/mermaid/validator/parse-relation.d.ts +0 -8
- package/dist/generator/mermaid/validator/parse-relation.js +0 -24
- package/dist/generator/mermaid/validator/remove-duplicate-relations.d.ts +0 -6
- package/dist/generator/mermaid/validator/remove-duplicate-relations.js +0 -11
- package/dist/generator/mermaid-er/generator/generate-er-content.d.ts +0 -7
- package/dist/generator/mermaid-er/generator/generate-er-content.js +0 -22
- package/dist/generator/mermaid-er/generator/generate-model-info.d.ts +0 -8
- package/dist/generator/mermaid-er/generator/generate-model-info.js +0 -13
- package/dist/generator/mermaid-er/generator/generate-relation-line.d.ts +0 -7
- package/dist/generator/mermaid-er/generator/generate-relation-line.js +0 -16
- package/dist/generator/mermaid-er/output/index.d.ts +0 -8
- package/dist/generator/mermaid-er/output/index.js +0 -24
- package/dist/generator/mermaid-er/type/index.js +0 -2
- package/dist/generator/valibot/generator/generate-valibot-infer-input.js +0 -16
- package/dist/generator/valibot/generator/generate-valibot-properties.d.ts +0 -8
- package/dist/generator/valibot/generator/generate-valibot-schema.d.ts +0 -9
- package/dist/generator/valibot/generator/generate-valibot-schema.js +0 -15
- package/dist/generator/valibot/generator/generate-valibot-schemas.js +0 -21
- package/dist/generator/valibot/generator/generate-valibot.d.ts +0 -9
- package/dist/generator/valibot/generator/generate-valibot.js +0 -52
- package/dist/generator/valibot/validator/is-valibot-documentation.d.ts +0 -1
- package/dist/generator/valibot/validator/is-valibot-validation.d.ts +0 -7
- package/dist/generator/zod/generator/generate-zod-infer.js +0 -16
- package/dist/generator/zod/generator/generate-zod-schema.js +0 -15
- package/dist/generator/zod/generator/generate-zod-schemas.js +0 -20
- package/dist/generator/zod/generator/generate-zod.d.ts +0 -9
- package/dist/generator/zod/generator/generate-zod.js +0 -52
- /package/dist/generator/mermaid-er/{type/index.d.ts → types.d.ts} +0 -0
- /package/dist/{common/type/index.d.ts → shared/types.d.ts} +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { excludeManyToOneRelations } from './exclude-many-to-one-relations.js';
|
|
2
|
+
export { extractRelations } from './extract-relations.js';
|
|
3
|
+
export { isRelationship } from './is-relationship.js';
|
|
4
|
+
export { parseRelation } from './parse-relation.js';
|
|
5
|
+
export { removeDuplicateRelations } from './remove-duplicate-relations.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { excludeManyToOneRelations } from './exclude-many-to-one-relations.js';
|
|
2
|
+
export { extractRelations } from './extract-relations.js';
|
|
3
|
+
export { isRelationship } from './is-relationship.js';
|
|
4
|
+
export { parseRelation } from './parse-relation.js';
|
|
5
|
+
export { removeDuplicateRelations } from './remove-duplicate-relations.js';
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isRelationship = isRelationship;
|
|
4
1
|
/**
|
|
5
2
|
* isRelationship
|
|
6
3
|
* @param { string } key
|
|
7
4
|
* @returns { key is Relationship }
|
|
8
5
|
*/
|
|
9
|
-
function isRelationship(key) {
|
|
6
|
+
export function isRelationship(key) {
|
|
10
7
|
return ['zero-one', 'one', 'zero-many', 'many'].includes(key);
|
|
11
8
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseRelation = parseRelation;
|
|
4
1
|
/**
|
|
5
2
|
* parse relation
|
|
6
3
|
* @function parseRelation
|
|
7
4
|
* @param line
|
|
8
5
|
* @returns
|
|
9
6
|
*/
|
|
10
|
-
function parseRelation(line) {
|
|
7
|
+
export function parseRelation(line) {
|
|
11
8
|
const relationRegex = /^@relation\s+(\w+)\.(\w+)\s+(\w+)\.(\w+)\s+(\w+-to-\w+)$/;
|
|
12
9
|
const match = line.trim().match(relationRegex);
|
|
13
10
|
if (!match) {
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.removeDuplicateRelations = removeDuplicateRelations;
|
|
4
1
|
/**
|
|
5
2
|
* remove duplicate relations
|
|
6
3
|
* @param { readonly string[] } relations
|
|
7
4
|
* @returns { readonly string[] }
|
|
8
5
|
*/
|
|
9
|
-
function removeDuplicateRelations(relations) {
|
|
6
|
+
export function removeDuplicateRelations(relations) {
|
|
10
7
|
return [...new Set(relations)];
|
|
11
8
|
}
|
package/dist/generator/valibot/generator/{generate-valibot-infer-input.d.ts → infer-input.d.ts}
RENAMED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { Config } from '..';
|
|
2
1
|
/**
|
|
3
2
|
* Generate the infer input type for the model
|
|
4
3
|
* @param modelName - The name of the model
|
|
5
4
|
* @param config - The configuration for the generator
|
|
6
5
|
* @returns The generated infer input type
|
|
7
6
|
*/
|
|
8
|
-
export declare function
|
|
7
|
+
export declare function inferInput(modelName: string): string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate the infer input type for the model
|
|
3
|
+
* @param modelName - The name of the model
|
|
4
|
+
* @param config - The configuration for the generator
|
|
5
|
+
* @returns The generated infer input type
|
|
6
|
+
*/
|
|
7
|
+
export function inferInput(modelName) {
|
|
8
|
+
return `export type ${modelName} = v.InferInput<typeof ${modelName}Schema>`;
|
|
9
|
+
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateValibotProperties = generateValibotProperties;
|
|
4
|
-
function generateValibotProperties(modelFields, config) {
|
|
1
|
+
export function properties(modelFields, comment) {
|
|
5
2
|
const fields = modelFields
|
|
6
3
|
.filter((field) => field.validation)
|
|
7
4
|
.map((field) => {
|
|
@@ -10,7 +7,7 @@ function generateValibotProperties(modelFields, config) {
|
|
|
10
7
|
.filter((line) => !(line.includes('@relation') || line.includes('@v') || line.includes('@z')))
|
|
11
8
|
.join('\n')
|
|
12
9
|
.trim();
|
|
13
|
-
const docComment =
|
|
10
|
+
const docComment = comment && cleanDoc ? ` /**\n * ${cleanDoc}\n */\n` : '';
|
|
14
11
|
return `${docComment} ${field.fieldName}: v.${field.validation}`;
|
|
15
12
|
})
|
|
16
13
|
.join(',\n');
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Valibot schema
|
|
3
|
+
* @param modelName - The name of the model
|
|
4
|
+
* @param fields - The fields of the model
|
|
5
|
+
* @returns The generated Valibot schema
|
|
6
|
+
*/
|
|
7
|
+
export function schema(modelName, fields) {
|
|
8
|
+
return `export const ${modelName}Schema = v.object({\n${fields}\n})`;
|
|
9
|
+
}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import type { Config } from '..';
|
|
2
1
|
/**
|
|
3
2
|
* generate valibot schemas
|
|
4
|
-
* @function generateValibotSchemas
|
|
5
3
|
* @param modelFields
|
|
6
4
|
* @param config
|
|
7
5
|
* @returns
|
|
8
6
|
*/
|
|
9
|
-
export declare function
|
|
7
|
+
export declare function schemas(modelFields: {
|
|
10
8
|
documentation: string;
|
|
11
9
|
modelName: string;
|
|
12
10
|
fieldName: string;
|
|
13
11
|
validation: string | null;
|
|
14
12
|
comment: string[];
|
|
15
|
-
}[],
|
|
13
|
+
}[], comment: boolean): string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { properties } from './properties.js';
|
|
2
|
+
import { schema } from './schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* generate valibot schemas
|
|
5
|
+
* @param modelFields
|
|
6
|
+
* @param config
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
export function schemas(modelFields, comment) {
|
|
10
|
+
const modelName = modelFields[0].modelName;
|
|
11
|
+
const modelDoc = modelFields[0].documentation || '';
|
|
12
|
+
const fields = properties(modelFields, comment);
|
|
13
|
+
if (!(modelDoc || !comment)) {
|
|
14
|
+
return schema(modelName, fields);
|
|
15
|
+
}
|
|
16
|
+
return `${schema(modelName, fields)}`;
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Model } from '../../mermaid-er/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate Valibot schemas and types
|
|
4
|
+
* @param models - The models to generate the Valibot schemas and types for
|
|
5
|
+
* @param type - Whether to generate types
|
|
6
|
+
* @param comment - Whether to include comments in the generated code
|
|
7
|
+
* @returns The generated Valibot schemas and types
|
|
8
|
+
*/
|
|
9
|
+
export declare function valibot(models: readonly Model[], type: boolean, comment: boolean): string;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { isValibot } from '../validator/is-valibot.js';
|
|
2
|
+
import { schemas } from './schemas.js';
|
|
3
|
+
import { groupByModel } from '../../../shared/helper/group-by-model.js';
|
|
4
|
+
import { isFields } from '../../../shared/validator/is-fields.js';
|
|
5
|
+
import { inferInput } from './infer-input.js';
|
|
6
|
+
import { isValibotDocument } from '../validator/is-valibot-document.js';
|
|
7
|
+
const VALIBOT_IMPORT = `import * as v from 'valibot'\n`;
|
|
8
|
+
/**
|
|
9
|
+
* Generate Valibot schemas and types
|
|
10
|
+
* @param models - The models to generate the Valibot schemas and types for
|
|
11
|
+
* @param type - Whether to generate types
|
|
12
|
+
* @param comment - Whether to include comments in the generated code
|
|
13
|
+
* @returns The generated Valibot schemas and types
|
|
14
|
+
*/
|
|
15
|
+
export function valibot(models, type, comment) {
|
|
16
|
+
const modelInfos = models.map((model) => {
|
|
17
|
+
return {
|
|
18
|
+
documentation: model.documentation ?? '',
|
|
19
|
+
name: model.name,
|
|
20
|
+
fields: model.fields,
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
const modelFields = modelInfos.map((model) => {
|
|
24
|
+
const fields = model.fields.map((field) => ({
|
|
25
|
+
documentation: model.documentation,
|
|
26
|
+
modelName: model.name,
|
|
27
|
+
fieldName: field.name,
|
|
28
|
+
comment: isValibotDocument(field.documentation),
|
|
29
|
+
validation: isValibot(field.documentation),
|
|
30
|
+
}));
|
|
31
|
+
return fields;
|
|
32
|
+
});
|
|
33
|
+
// null exclude
|
|
34
|
+
const validFields = isFields(modelFields);
|
|
35
|
+
// group by model
|
|
36
|
+
const groupedByModel = groupByModel(validFields);
|
|
37
|
+
const valibots = Object.values(groupedByModel).map((fields) => {
|
|
38
|
+
return {
|
|
39
|
+
generateValibotSchema: schemas(fields, comment),
|
|
40
|
+
generateValibotInfer: type ? inferInput(fields[0].modelName) : '',
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
return [
|
|
44
|
+
VALIBOT_IMPORT,
|
|
45
|
+
'',
|
|
46
|
+
valibots
|
|
47
|
+
.flatMap(({ generateValibotSchema, generateValibotInfer }) => [generateValibotSchema, generateValibotInfer].filter(Boolean))
|
|
48
|
+
.join('\n\n'),
|
|
49
|
+
].join('\n');
|
|
50
|
+
}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import type { GeneratorOptions } from '@prisma/generator-helper';
|
|
3
|
-
export type Config = {
|
|
4
|
-
output?: string;
|
|
5
|
-
file?: string | string[];
|
|
6
|
-
schemaName?: 'PascalCase' | 'camelCase' | string | string[];
|
|
7
|
-
typeName?: 'PascalCase' | 'camelCase' | string | string[];
|
|
8
|
-
type?: boolean | string | string[];
|
|
9
|
-
comment?: boolean | string | string[];
|
|
10
|
-
};
|
|
11
3
|
export declare function main(options: GeneratorOptions): Promise<void>;
|
|
@@ -1,49 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
output: '
|
|
14
|
-
file: 'index.ts',
|
|
15
|
-
schemaName: 'PascalCase',
|
|
16
|
-
typeName: 'PascalCase',
|
|
17
|
-
type: false,
|
|
18
|
-
comment: false,
|
|
19
|
-
};
|
|
20
|
-
async function main(options) {
|
|
21
|
-
const config = {
|
|
22
|
-
output: options.generator.output?.value ?? DEFAULT_CONFIG.output,
|
|
23
|
-
file: options.generator.config?.file ?? DEFAULT_CONFIG.file,
|
|
24
|
-
schemaName: options.generator.config?.schemaName ?? DEFAULT_CONFIG.schemaName,
|
|
25
|
-
typeName: options.generator.config?.typeName ?? DEFAULT_CONFIG.typeName,
|
|
26
|
-
type: options.generator.config?.type ?? DEFAULT_CONFIG.type,
|
|
27
|
-
comment: options.generator.config?.comment === 'true',
|
|
28
|
-
};
|
|
29
|
-
const content = (0, generate_valibot_1.generateValibot)(options.dmmf.datamodel.models, config);
|
|
30
|
-
const code = await (0, prettier_1.format)(content, {
|
|
31
|
-
parser: 'typescript',
|
|
32
|
-
printWidth: 100,
|
|
33
|
-
singleQuote: true,
|
|
34
|
-
semi: false,
|
|
35
|
-
});
|
|
36
|
-
if (!config.output) {
|
|
37
|
-
throw new Error('output is required');
|
|
38
|
-
}
|
|
39
|
-
if (!node_fs_1.default.existsSync(config.output)) {
|
|
40
|
-
node_fs_1.default.mkdirSync(config.output, { recursive: true });
|
|
41
|
-
}
|
|
42
|
-
const file = config.file ?? 'index.ts';
|
|
43
|
-
const filePath = `${config.output}/${file}`;
|
|
44
|
-
node_fs_1.default.writeFileSync(filePath, code);
|
|
2
|
+
import { valibot } from './generator/valibot.js';
|
|
3
|
+
import fsp from 'node:fs/promises';
|
|
4
|
+
import pkg from '@prisma/generator-helper';
|
|
5
|
+
import { fmt } from '../../shared/format/index.js';
|
|
6
|
+
const { generatorHandler } = pkg;
|
|
7
|
+
export async function main(options) {
|
|
8
|
+
const output = options.generator.output?.value ?? './valibot';
|
|
9
|
+
const file = options.generator.config?.file ?? 'index.ts';
|
|
10
|
+
const content = valibot(options.dmmf.datamodel.models, options.generator.config?.type === 'true', options.generator.config?.comment === 'true');
|
|
11
|
+
const code = await fmt(content);
|
|
12
|
+
await fsp.mkdir(output, { recursive: true });
|
|
13
|
+
await fsp.writeFile(`${output}/${file}`, code, { encoding: 'utf-8' });
|
|
45
14
|
}
|
|
46
|
-
|
|
15
|
+
generatorHandler({
|
|
47
16
|
onManifest() {
|
|
48
17
|
return {
|
|
49
18
|
defaultOutput: './valibot/',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isValibotDocument(documentation?: string): string[];
|
package/dist/generator/valibot/validator/{is-valibot-documentation.js → is-valibot-document.js}
RENAMED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isValibotDocumentValidation = isValibotDocumentValidation;
|
|
4
1
|
const VALIDATION_PATTERNS = ['@v.'];
|
|
5
|
-
function
|
|
2
|
+
export function isValibotDocument(documentation) {
|
|
6
3
|
if (!documentation)
|
|
7
4
|
return [];
|
|
8
5
|
return documentation
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isValibotValidation = isValibotValidation;
|
|
4
1
|
/**
|
|
5
2
|
* Check if the documentation is a Valibot validation
|
|
6
|
-
* @function isValibotValidation
|
|
7
3
|
* @param documentation
|
|
8
4
|
* @returns string | null
|
|
9
5
|
*/
|
|
10
|
-
function
|
|
6
|
+
export function isValibot(documentation) {
|
|
11
7
|
if (!documentation)
|
|
12
8
|
return null;
|
|
13
9
|
const match = documentation.match(/@v\.(.+?)(?:\n|$)/);
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { Config } from '..';
|
|
2
1
|
/**
|
|
3
2
|
* Generate Zod infer
|
|
4
3
|
* @param modelName - The name of the model
|
|
5
4
|
* @param config - The configuration for the generator
|
|
6
5
|
* @returns The generated Zod infer
|
|
7
6
|
*/
|
|
8
|
-
export declare function
|
|
7
|
+
export declare function infer(modelName: string): string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Zod infer
|
|
3
|
+
* @param modelName - The name of the model
|
|
4
|
+
* @param config - The configuration for the generator
|
|
5
|
+
* @returns The generated Zod infer
|
|
6
|
+
*/
|
|
7
|
+
export function infer(modelName) {
|
|
8
|
+
return `export type ${modelName} = z.infer<typeof ${modelName}Schema>`;
|
|
9
|
+
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import type { Config } from '..';
|
|
2
1
|
/**
|
|
3
2
|
* Generate Zod properties
|
|
4
3
|
* @param modelFields - The fields of the model
|
|
5
4
|
* @param config - The configuration for the generator
|
|
6
5
|
* @returns The generated Zod properties
|
|
7
6
|
*/
|
|
8
|
-
export declare function
|
|
7
|
+
export declare function properties(modelFields: {
|
|
9
8
|
documentation: string;
|
|
10
9
|
modelName: string;
|
|
11
10
|
fieldName: string;
|
|
12
11
|
validation: string | null;
|
|
13
12
|
comment: string[];
|
|
14
|
-
}[],
|
|
13
|
+
}[], comment: boolean): string;
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateZodProperties = generateZodProperties;
|
|
4
1
|
/**
|
|
5
2
|
* Generate Zod properties
|
|
6
3
|
* @param modelFields - The fields of the model
|
|
7
4
|
* @param config - The configuration for the generator
|
|
8
5
|
* @returns The generated Zod properties
|
|
9
6
|
*/
|
|
10
|
-
function
|
|
7
|
+
export function properties(modelFields, comment) {
|
|
11
8
|
const fields = modelFields
|
|
12
9
|
.filter((field) => field.validation)
|
|
13
10
|
.map((field) => {
|
|
@@ -16,7 +13,7 @@ function generateZodProperties(modelFields, config) {
|
|
|
16
13
|
.filter((line) => !(line.includes('@relation') || line.includes('@v') || line.includes('@z')))
|
|
17
14
|
.join('\n')
|
|
18
15
|
.trim();
|
|
19
|
-
const docComment =
|
|
16
|
+
const docComment = comment && cleanDoc ? ` /**\n * ${cleanDoc}\n */\n` : '';
|
|
20
17
|
return `${docComment} ${field.fieldName}: z.${field.validation}`;
|
|
21
18
|
})
|
|
22
19
|
.join(',\n');
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Config } from '..';
|
|
2
1
|
/**
|
|
3
2
|
* Generate Zod schema
|
|
4
3
|
* @param modelName - The name of the model
|
|
@@ -6,4 +5,4 @@ import type { Config } from '..';
|
|
|
6
5
|
* @param config - The configuration for the generator
|
|
7
6
|
* @returns The generated Zod schema
|
|
8
7
|
*/
|
|
9
|
-
export declare function
|
|
8
|
+
export declare function schema(modelName: string, fields: string): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Zod schema
|
|
3
|
+
* @param modelName - The name of the model
|
|
4
|
+
* @param fields - The fields of the model
|
|
5
|
+
* @param config - The configuration for the generator
|
|
6
|
+
* @returns The generated Zod schema
|
|
7
|
+
*/
|
|
8
|
+
export function schema(modelName, fields) {
|
|
9
|
+
return `export const ${modelName}Schema = z.object({\n${fields}\n})`;
|
|
10
|
+
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import type { Config } from '..';
|
|
2
1
|
/**
|
|
3
2
|
* Generate Zod schemas
|
|
4
3
|
* @param modelFields - The fields of the model
|
|
5
4
|
* @param config - The configuration for the generator
|
|
6
5
|
* @returns The generated Zod schemas
|
|
7
6
|
*/
|
|
8
|
-
export declare function
|
|
7
|
+
export declare function schemas(modelFields: {
|
|
9
8
|
documentation: string;
|
|
10
9
|
modelName: string;
|
|
11
10
|
fieldName: string;
|
|
12
11
|
validation: string | null;
|
|
13
12
|
comment: string[];
|
|
14
|
-
}[],
|
|
13
|
+
}[], comment: boolean): string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { properties, schema } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate Zod schemas
|
|
4
|
+
* @param modelFields - The fields of the model
|
|
5
|
+
* @param config - The configuration for the generator
|
|
6
|
+
* @returns The generated Zod schemas
|
|
7
|
+
*/
|
|
8
|
+
export function schemas(modelFields, comment) {
|
|
9
|
+
const modelName = modelFields[0].modelName;
|
|
10
|
+
const modelDoc = modelFields[0].documentation || '';
|
|
11
|
+
const fields = properties(modelFields, comment);
|
|
12
|
+
if (!(modelDoc || !comment)) {
|
|
13
|
+
return schema(modelName, fields);
|
|
14
|
+
}
|
|
15
|
+
return `${schema(modelName, fields)}`;
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Model } from '../../../shared/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate Zod schemas and types
|
|
4
|
+
* @param models - The models to generate the Zod schemas and types for
|
|
5
|
+
* @param type - Whether to generate types
|
|
6
|
+
* @param comment - Whether to include comments in the generated code
|
|
7
|
+
* @returns The generated Zod schemas and types
|
|
8
|
+
*/
|
|
9
|
+
export declare function zod(models: readonly Model[], type: boolean, comment: boolean, zodVersion?: string | string[]): string;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { isZod, isZodDocument } from '../validator/index.js';
|
|
2
|
+
import { isFields } from '../../../shared/validator/is-fields.js';
|
|
3
|
+
import { groupByModel } from '../../../shared/helper/group-by-model.js';
|
|
4
|
+
import { infer, schemas } from './index.js';
|
|
5
|
+
const ZODV4_IMPORT = `import { z } from 'zod/v4'\n`;
|
|
6
|
+
const ZODV4_MINI_IMPORT = `import { z } from 'zod/v4-mini'\n`;
|
|
7
|
+
const ZOD_OPENAPI_HONO_IMPORT = `import { z } from '@hono/zod-openapi'\n`;
|
|
8
|
+
/**
|
|
9
|
+
* Generate Zod schemas and types
|
|
10
|
+
* @param models - The models to generate the Zod schemas and types for
|
|
11
|
+
* @param type - Whether to generate types
|
|
12
|
+
* @param comment - Whether to include comments in the generated code
|
|
13
|
+
* @returns The generated Zod schemas and types
|
|
14
|
+
*/
|
|
15
|
+
export function zod(models, type, comment, zodVersion) {
|
|
16
|
+
const modelInfos = models.map((model) => {
|
|
17
|
+
return {
|
|
18
|
+
documentation: model.documentation ?? '',
|
|
19
|
+
name: model.name,
|
|
20
|
+
fields: model.fields,
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
const modelFields = modelInfos.map((model) => {
|
|
24
|
+
const fields = model.fields.map((field) => ({
|
|
25
|
+
documentation: model.documentation,
|
|
26
|
+
modelName: model.name,
|
|
27
|
+
fieldName: field.name,
|
|
28
|
+
comment: isZodDocument(field.documentation),
|
|
29
|
+
validation: isZod(field.documentation),
|
|
30
|
+
}));
|
|
31
|
+
return fields;
|
|
32
|
+
});
|
|
33
|
+
// null exclude
|
|
34
|
+
const validFields = isFields(modelFields);
|
|
35
|
+
// group by model
|
|
36
|
+
const groupedByModel = groupByModel(validFields);
|
|
37
|
+
const zods = Object.values(groupedByModel).map((fields) => {
|
|
38
|
+
return {
|
|
39
|
+
generateZodSchema: schemas(fields, comment),
|
|
40
|
+
generateZodInfer: type ? infer(fields[0].modelName) : '',
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
const importStatement = zodVersion === 'v4-mini'
|
|
44
|
+
? ZODV4_MINI_IMPORT
|
|
45
|
+
: zodVersion === '@hono/zod-openapi'
|
|
46
|
+
? ZOD_OPENAPI_HONO_IMPORT
|
|
47
|
+
: ZODV4_IMPORT;
|
|
48
|
+
return [
|
|
49
|
+
importStatement,
|
|
50
|
+
'',
|
|
51
|
+
zods
|
|
52
|
+
.flatMap(({ generateZodSchema, generateZodInfer }) => [generateZodSchema, generateZodInfer].filter(Boolean))
|
|
53
|
+
.join('\n\n'),
|
|
54
|
+
].join('\n');
|
|
55
|
+
}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import type { GeneratorOptions } from '@prisma/generator-helper';
|
|
3
|
-
export type Config = {
|
|
4
|
-
output?: string;
|
|
5
|
-
file?: string | string[];
|
|
6
|
-
schemaName?: 'PascalCase' | 'camelCase' | string | string[];
|
|
7
|
-
typeName?: 'PascalCase' | 'camelCase' | string | string[];
|
|
8
|
-
type?: boolean | string | string[];
|
|
9
|
-
comment?: boolean | string | string[];
|
|
10
|
-
};
|
|
11
3
|
export declare function main(options: GeneratorOptions): Promise<void>;
|