hekireki 0.0.9 → 0.2.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 (148) hide show
  1. package/README.md +71 -214
  2. package/dist/generator/mermaid-er/generator/er-content.d.ts +2 -0
  3. package/dist/generator/mermaid-er/generator/er-content.js +21 -0
  4. package/dist/generator/mermaid-er/generator/index.d.ts +4 -0
  5. package/dist/generator/mermaid-er/generator/index.js +4 -0
  6. package/dist/generator/mermaid-er/generator/{generate-model-fields.d.ts → model-fields.d.ts} +1 -1
  7. package/dist/generator/mermaid-er/generator/{generate-model-fields.js → model-fields.js} +1 -4
  8. package/dist/generator/mermaid-er/generator/model-info.d.ts +7 -0
  9. package/dist/generator/mermaid-er/generator/model-info.js +9 -0
  10. package/dist/generator/mermaid-er/generator/relation-line.d.ts +7 -0
  11. package/dist/generator/mermaid-er/generator/relation-line.js +13 -0
  12. package/dist/generator/mermaid-er/index.d.ts +0 -6
  13. package/dist/generator/mermaid-er/index.js +11 -28
  14. package/dist/generator/mermaid-er/relationship/build-relation-line.d.ts +0 -5
  15. package/dist/generator/mermaid-er/relationship/build-relation-line.js +7 -15
  16. package/dist/generator/mermaid-er/types.js +1 -0
  17. package/dist/generator/mermaid-er/validator/exclude-many-to-one-relations.js +1 -4
  18. package/dist/generator/mermaid-er/validator/extract-relations.d.ts +1 -1
  19. package/dist/generator/mermaid-er/validator/extract-relations.js +5 -8
  20. package/dist/generator/mermaid-er/validator/index.d.ts +5 -0
  21. package/dist/generator/mermaid-er/validator/index.js +5 -0
  22. package/dist/generator/mermaid-er/validator/is-relationship.d.ts +1 -1
  23. package/dist/generator/mermaid-er/validator/is-relationship.js +1 -4
  24. package/dist/generator/mermaid-er/validator/parse-relation.d.ts +1 -1
  25. package/dist/generator/mermaid-er/validator/parse-relation.js +1 -4
  26. package/dist/generator/mermaid-er/validator/remove-duplicate-relations.js +1 -4
  27. package/dist/generator/valibot/generator/index.d.ts +5 -0
  28. package/dist/generator/valibot/generator/index.js +5 -0
  29. package/dist/generator/valibot/generator/{generate-valibot-infer-input.d.ts → infer-input.d.ts} +1 -2
  30. package/dist/generator/valibot/generator/infer-input.js +9 -0
  31. package/dist/generator/valibot/generator/properties.d.ts +7 -0
  32. package/dist/generator/valibot/generator/{generate-valibot-properties.js → properties.js} +2 -5
  33. package/dist/generator/valibot/generator/schema.d.ts +7 -0
  34. package/dist/generator/valibot/generator/schema.js +9 -0
  35. package/dist/generator/valibot/generator/{generate-valibot-schemas.d.ts → schemas.d.ts} +2 -4
  36. package/dist/generator/valibot/generator/schemas.js +17 -0
  37. package/dist/generator/valibot/generator/valibot.d.ts +9 -0
  38. package/dist/generator/valibot/generator/valibot.js +50 -0
  39. package/dist/generator/valibot/index.d.ts +0 -8
  40. package/dist/generator/valibot/index.js +13 -44
  41. package/dist/generator/valibot/validator/index.d.ts +2 -0
  42. package/dist/generator/valibot/validator/index.js +2 -0
  43. package/dist/generator/valibot/validator/is-valibot-document.d.ts +1 -0
  44. package/dist/generator/valibot/validator/{is-valibot-documentation.js → is-valibot-document.js} +1 -4
  45. package/dist/generator/valibot/validator/is-valibot.d.ts +6 -0
  46. package/dist/generator/valibot/validator/{is-valibot-validation.js → is-valibot.js} +1 -5
  47. package/dist/generator/zod/generator/index.d.ts +5 -0
  48. package/dist/generator/zod/generator/index.js +5 -0
  49. package/dist/generator/zod/generator/{generate-zod-infer.d.ts → infer.d.ts} +1 -2
  50. package/dist/generator/zod/generator/infer.js +9 -0
  51. package/dist/generator/zod/generator/{generate-zod-properties.d.ts → properties.d.ts} +2 -3
  52. package/dist/generator/zod/generator/{generate-zod-properties.js → properties.js} +2 -5
  53. package/dist/generator/zod/generator/{generate-zod-schema.d.ts → schema.d.ts} +1 -2
  54. package/dist/generator/zod/generator/schema.js +10 -0
  55. package/dist/generator/zod/generator/{generate-zod-schemas.d.ts → schemas.d.ts} +2 -3
  56. package/dist/generator/zod/generator/schemas.js +16 -0
  57. package/dist/generator/zod/generator/zod.d.ts +9 -0
  58. package/dist/generator/zod/generator/zod.js +55 -0
  59. package/dist/generator/zod/index.d.ts +0 -8
  60. package/dist/generator/zod/index.js +14 -44
  61. package/dist/generator/zod/validator/index.d.ts +2 -0
  62. package/dist/generator/zod/validator/index.js +2 -0
  63. package/dist/generator/zod/validator/{is-zod-documentation.d.ts → is-zod-document.d.ts} +1 -1
  64. package/dist/generator/zod/validator/{is-zod-documentation.js → is-zod-document.js} +1 -4
  65. package/dist/generator/zod/validator/{is-zod-validation.d.ts → is-zod.d.ts} +1 -1
  66. package/dist/generator/zod/validator/{is-zod-validation.js → is-zod.js} +1 -4
  67. package/dist/shared/format/index.d.ts +1 -0
  68. package/dist/shared/format/index.js +9 -0
  69. package/dist/shared/helper/group-by-model.d.ts +8 -0
  70. package/dist/{common/helper/group-by-model-helper.js → shared/helper/group-by-model.js} +1 -4
  71. package/dist/shared/types.js +1 -0
  72. package/dist/{common/text → shared/utils}/capitalize.d.ts +3 -5
  73. package/dist/{common/text → shared/utils}/capitalize.js +4 -9
  74. package/dist/shared/utils/index.d.ts +1 -0
  75. package/dist/shared/utils/index.js +1 -0
  76. package/dist/shared/validator/is-fields.d.ts +12 -0
  77. package/dist/{common/validator/is-fields-validation.js → shared/validator/is-fields.js} +1 -4
  78. package/package.json +13 -12
  79. package/dist/common/format/index.d.ts +0 -1
  80. package/dist/common/format/index.js +0 -12
  81. package/dist/common/helper/get-camel-case-schema-name-helper.d.ts +0 -7
  82. package/dist/common/helper/get-camel-case-schema-name-helper.js +0 -14
  83. package/dist/common/helper/get-pascal-case-schema-name-helper.d.ts +0 -8
  84. package/dist/common/helper/get-pascal-case-schema-name-helper.js +0 -15
  85. package/dist/common/helper/get-variable-name-helper.d.ts +0 -9
  86. package/dist/common/helper/get-variable-name-helper.js +0 -15
  87. package/dist/common/helper/get-variable-schema-name-helper.d.ts +0 -9
  88. package/dist/common/helper/get-variable-schema-name-helper.js +0 -17
  89. package/dist/common/helper/group-by-model-helper.d.ts +0 -8
  90. package/dist/common/text/decapitalize.d.ts +0 -17
  91. package/dist/common/text/decapitalize.js +0 -22
  92. package/dist/common/type/index.js +0 -2
  93. package/dist/common/validator/is-fields-validation.d.ts +0 -13
  94. package/dist/generator/mermaid/generator/generate-er-content.d.ts +0 -7
  95. package/dist/generator/mermaid/generator/generate-er-content.js +0 -22
  96. package/dist/generator/mermaid/generator/generate-model-fields.d.ts +0 -7
  97. package/dist/generator/mermaid/generator/generate-model-fields.js +0 -27
  98. package/dist/generator/mermaid/generator/generate-model-info.d.ts +0 -8
  99. package/dist/generator/mermaid/generator/generate-model-info.js +0 -13
  100. package/dist/generator/mermaid/generator/generate-relation-line.d.ts +0 -7
  101. package/dist/generator/mermaid/generator/generate-relation-line.js +0 -16
  102. package/dist/generator/mermaid/index.d.ts +0 -9
  103. package/dist/generator/mermaid/index.js +0 -39
  104. package/dist/generator/mermaid/output/index.d.ts +0 -8
  105. package/dist/generator/mermaid/output/index.js +0 -24
  106. package/dist/generator/mermaid/relationship/build-relation-line.d.ts +0 -14
  107. package/dist/generator/mermaid/relationship/build-relation-line.js +0 -37
  108. package/dist/generator/mermaid/relationship/index.d.ts +0 -12
  109. package/dist/generator/mermaid/relationship/index.js +0 -30
  110. package/dist/generator/mermaid/type/index.d.ts +0 -10
  111. package/dist/generator/mermaid/type/index.js +0 -2
  112. package/dist/generator/mermaid/validator/exclude-many-to-one-relations.d.ts +0 -7
  113. package/dist/generator/mermaid/validator/exclude-many-to-one-relations.js +0 -12
  114. package/dist/generator/mermaid/validator/extract-relations.d.ts +0 -7
  115. package/dist/generator/mermaid/validator/extract-relations.js +0 -25
  116. package/dist/generator/mermaid/validator/is-relation.d.ts +0 -7
  117. package/dist/generator/mermaid/validator/is-relation.js +0 -37
  118. package/dist/generator/mermaid/validator/is-relationship.d.ts +0 -7
  119. package/dist/generator/mermaid/validator/is-relationship.js +0 -11
  120. package/dist/generator/mermaid/validator/parse-relation.d.ts +0 -8
  121. package/dist/generator/mermaid/validator/parse-relation.js +0 -24
  122. package/dist/generator/mermaid/validator/remove-duplicate-relations.d.ts +0 -6
  123. package/dist/generator/mermaid/validator/remove-duplicate-relations.js +0 -11
  124. package/dist/generator/mermaid-er/generator/generate-er-content.d.ts +0 -7
  125. package/dist/generator/mermaid-er/generator/generate-er-content.js +0 -22
  126. package/dist/generator/mermaid-er/generator/generate-model-info.d.ts +0 -8
  127. package/dist/generator/mermaid-er/generator/generate-model-info.js +0 -13
  128. package/dist/generator/mermaid-er/generator/generate-relation-line.d.ts +0 -7
  129. package/dist/generator/mermaid-er/generator/generate-relation-line.js +0 -16
  130. package/dist/generator/mermaid-er/output/index.d.ts +0 -8
  131. package/dist/generator/mermaid-er/output/index.js +0 -24
  132. package/dist/generator/mermaid-er/type/index.js +0 -2
  133. package/dist/generator/valibot/generator/generate-valibot-infer-input.js +0 -16
  134. package/dist/generator/valibot/generator/generate-valibot-properties.d.ts +0 -8
  135. package/dist/generator/valibot/generator/generate-valibot-schema.d.ts +0 -9
  136. package/dist/generator/valibot/generator/generate-valibot-schema.js +0 -15
  137. package/dist/generator/valibot/generator/generate-valibot-schemas.js +0 -21
  138. package/dist/generator/valibot/generator/generate-valibot.d.ts +0 -9
  139. package/dist/generator/valibot/generator/generate-valibot.js +0 -52
  140. package/dist/generator/valibot/validator/is-valibot-documentation.d.ts +0 -1
  141. package/dist/generator/valibot/validator/is-valibot-validation.d.ts +0 -7
  142. package/dist/generator/zod/generator/generate-zod-infer.js +0 -16
  143. package/dist/generator/zod/generator/generate-zod-schema.js +0 -15
  144. package/dist/generator/zod/generator/generate-zod-schemas.js +0 -20
  145. package/dist/generator/zod/generator/generate-zod.d.ts +0 -9
  146. package/dist/generator/zod/generator/generate-zod.js +0 -52
  147. /package/dist/generator/mermaid-er/{type/index.d.ts → types.d.ts} +0 -0
  148. /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,4 +1,4 @@
1
- import type { Relationship } from '../relationship/build-relation-line';
1
+ import type { Relationship } from '../relationship/build-relation-line.js';
2
2
  /**
3
3
  * isRelationship
4
4
  * @param { string } key
@@ -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,4 +1,4 @@
1
- import type { Relation } from '../type';
1
+ import type { Relation } from '../types.js';
2
2
  /**
3
3
  * parse relation
4
4
  * @function parseRelation
@@ -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
  }
@@ -0,0 +1,5 @@
1
+ export { inferInput } from './infer-input.js';
2
+ export { properties } from './properties.js';
3
+ export { schema } from './schema.js';
4
+ export { schemas } from './schemas.js';
5
+ export { valibot } from './valibot.js';
@@ -0,0 +1,5 @@
1
+ export { inferInput } from './infer-input.js';
2
+ export { properties } from './properties.js';
3
+ export { schema } from './schema.js';
4
+ export { schemas } from './schemas.js';
5
+ export { valibot } from './valibot.js';
@@ -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 generateValibotInferInput(modelName: string, config: Config): string;
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
+ }
@@ -0,0 +1,7 @@
1
+ export declare function properties(modelFields: {
2
+ documentation: string;
3
+ modelName: string;
4
+ fieldName: string;
5
+ validation: string | null;
6
+ comment: string[];
7
+ }[], comment: boolean): string;
@@ -1,7 +1,4 @@
1
- "use strict";
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 = config?.comment && cleanDoc ? ` /**\n * ${cleanDoc}\n */\n` : '';
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,7 @@
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 declare function schema(modelName: string, fields: string): string;
@@ -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 generateValibotSchemas(modelFields: {
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
- }[], config: Config): string;
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
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.main = main;
8
- const generator_helper_1 = require("@prisma/generator-helper");
9
- const generate_valibot_1 = require("./generator/generate-valibot");
10
- const prettier_1 = require("prettier");
11
- const node_fs_1 = __importDefault(require("node:fs"));
12
- const DEFAULT_CONFIG = {
13
- output: './valibot',
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
- (0, generator_helper_1.generatorHandler)({
15
+ generatorHandler({
47
16
  onManifest() {
48
17
  return {
49
18
  defaultOutput: './valibot/',
@@ -0,0 +1,2 @@
1
+ export { isValibotDocument } from './is-valibot-document.js';
2
+ export { isValibot } from './is-valibot.js';
@@ -0,0 +1,2 @@
1
+ export { isValibotDocument } from './is-valibot-document.js';
2
+ export { isValibot } from './is-valibot.js';
@@ -0,0 +1 @@
1
+ export declare function isValibotDocument(documentation?: string): string[];
@@ -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 isValibotDocumentValidation(documentation) {
2
+ export function isValibotDocument(documentation) {
6
3
  if (!documentation)
7
4
  return [];
8
5
  return documentation
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check if the documentation is a Valibot validation
3
+ * @param documentation
4
+ * @returns string | null
5
+ */
6
+ export declare function isValibot(documentation?: string): string | null;
@@ -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 isValibotValidation(documentation) {
6
+ export function isValibot(documentation) {
11
7
  if (!documentation)
12
8
  return null;
13
9
  const match = documentation.match(/@v\.(.+?)(?:\n|$)/);
@@ -0,0 +1,5 @@
1
+ export { infer } from './infer.js';
2
+ export { schemas } from './schemas.js';
3
+ export { properties } from './properties.js';
4
+ export { schema } from './schema.js';
5
+ export { zod } from './zod.js';
@@ -0,0 +1,5 @@
1
+ export { infer } from './infer.js';
2
+ export { schemas } from './schemas.js';
3
+ export { properties } from './properties.js';
4
+ export { schema } from './schema.js';
5
+ export { zod } from './zod.js';
@@ -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 generateZodInfer(modelName: string, config: Config): string;
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 generateZodProperties(modelFields: {
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
- }[], config?: Config): string;
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 generateZodProperties(modelFields, config) {
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 = config?.comment && cleanDoc ? ` /**\n * ${cleanDoc}\n */\n` : '';
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 generateZodSchema(modelName: string, fields: string, config: Config): string;
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 generateZodSchemas(modelFields: {
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
- }[], config: Config): string;
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>;