hekireki 0.0.4 → 0.0.6

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 (67) hide show
  1. package/README.md +4 -4
  2. package/dist/common/format/index.js +6 -6
  3. package/dist/common/helper/get-camel-case-schema-name-helper.d.ts +1 -3
  4. package/dist/common/helper/get-camel-case-schema-name-helper.js +2 -2
  5. package/dist/common/helper/get-pascal-case-schema-name-helper.d.ts +1 -3
  6. package/dist/common/helper/get-pascal-case-schema-name-helper.js +2 -2
  7. package/dist/common/helper/get-variable-name-helper.d.ts +1 -4
  8. package/dist/common/helper/get-variable-name-helper.js +3 -3
  9. package/dist/common/helper/get-variable-schema-name-helper.d.ts +1 -4
  10. package/dist/common/helper/get-variable-schema-name-helper.js +3 -7
  11. package/dist/common/helper/group-by-model-helper.d.ts +1 -3
  12. package/dist/common/helper/group-by-model-helper.js +7 -7
  13. package/dist/common/text/capitalize.js +1 -1
  14. package/dist/common/text/decapitalize.js +1 -1
  15. package/dist/common/type/index.d.ts +8 -8
  16. package/dist/common/validator/is-fields-validation.d.ts +7 -9
  17. package/dist/common/validator/is-fields-validation.js +3 -1
  18. package/dist/generator/mermaid/generator/generate-er-content.js +8 -14
  19. package/dist/generator/mermaid/generator/generate-model-fields.js +16 -21
  20. package/dist/generator/mermaid/generator/generate-model-info.js +5 -5
  21. package/dist/generator/mermaid/generator/generate-relation-line.d.ts +2 -3
  22. package/dist/generator/mermaid/generator/generate-relation-line.js +7 -8
  23. package/dist/generator/mermaid/index.d.ts +3 -2
  24. package/dist/generator/mermaid/index.js +47 -52
  25. package/dist/generator/mermaid/output/index.js +13 -17
  26. package/dist/generator/mermaid/type/index.d.ts +6 -30
  27. package/dist/generator/mermaid/validator/exclude-many-to-one-relations.d.ts +1 -3
  28. package/dist/generator/mermaid/validator/exclude-many-to-one-relations.js +1 -1
  29. package/dist/generator/mermaid/validator/extract-relations.d.ts +2 -3
  30. package/dist/generator/mermaid/validator/extract-relations.js +15 -18
  31. package/dist/generator/mermaid/validator/is-relation.d.ts +5 -0
  32. package/dist/generator/mermaid/validator/is-relation.js +30 -25
  33. package/dist/generator/mermaid/validator/parse-relation.js +16 -17
  34. package/dist/generator/mermaid/validator/remove-duplicate-relations.d.ts +3 -6
  35. package/dist/generator/mermaid/validator/remove-duplicate-relations.js +3 -4
  36. package/dist/generator/valibot/generator/generate-valibot-infer-input.d.ts +1 -4
  37. package/dist/generator/valibot/generator/generate-valibot-infer-input.js +3 -10
  38. package/dist/generator/valibot/generator/generate-valibot-properties.d.ts +7 -10
  39. package/dist/generator/valibot/generator/generate-valibot-properties.js +15 -21
  40. package/dist/generator/valibot/generator/generate-valibot-schema.d.ts +1 -5
  41. package/dist/generator/valibot/generator/generate-valibot-schema.js +2 -6
  42. package/dist/generator/valibot/generator/generate-valibot-schemas.d.ts +7 -10
  43. package/dist/generator/valibot/generator/generate-valibot-schemas.js +7 -14
  44. package/dist/generator/valibot/generator/generate-valibot.d.ts +1 -4
  45. package/dist/generator/valibot/generator/generate-valibot.js +36 -51
  46. package/dist/generator/valibot/index.d.ts +7 -6
  47. package/dist/generator/valibot/index.js +41 -46
  48. package/dist/generator/valibot/validator/is-valibot-documentation.d.ts +1 -3
  49. package/dist/generator/valibot/validator/is-valibot-documentation.js +7 -8
  50. package/dist/generator/valibot/validator/is-valibot-validation.d.ts +1 -3
  51. package/dist/generator/valibot/validator/is-valibot-validation.js +4 -3
  52. package/dist/generator/zod/generator/generate-zod-infer.d.ts +1 -4
  53. package/dist/generator/zod/generator/generate-zod-infer.js +3 -10
  54. package/dist/generator/zod/generator/generate-zod-properties.d.ts +7 -10
  55. package/dist/generator/zod/generator/generate-zod-properties.js +15 -21
  56. package/dist/generator/zod/generator/generate-zod-schema.d.ts +1 -5
  57. package/dist/generator/zod/generator/generate-zod-schema.js +2 -6
  58. package/dist/generator/zod/generator/generate-zod-schemas.d.ts +7 -10
  59. package/dist/generator/zod/generator/generate-zod-schemas.js +7 -14
  60. package/dist/generator/zod/generator/generate-zod.d.ts +1 -4
  61. package/dist/generator/zod/generator/generate-zod.js +36 -51
  62. package/dist/generator/zod/index.d.ts +7 -6
  63. package/dist/generator/zod/index.js +41 -46
  64. package/dist/generator/zod/validator/is-zod-documentation.d.ts +1 -3
  65. package/dist/generator/zod/validator/is-zod-documentation.js +7 -8
  66. package/dist/generator/zod/validator/is-zod-validation.js +4 -3
  67. package/package.json +2 -2
@@ -10,14 +10,7 @@ const get_variable_schema_name_helper_1 = require("../../../common/helper/get-va
10
10
  * @returns The generated Zod infer
11
11
  */
12
12
  function generateZodInfer(modelName, config) {
13
- const typeName = (0, get_variable_name_helper_1.getVariableNameHelper)(
14
- modelName,
15
- config,
16
- );
17
- const schemaName = (0,
18
- get_variable_schema_name_helper_1.getVariableSchemaNameHelper)(
19
- modelName,
20
- config,
21
- );
22
- return `export type ${typeName} = z.infer<typeof ${schemaName}>`;
13
+ const typeName = (0, get_variable_name_helper_1.getVariableNameHelper)(modelName, config);
14
+ const schemaName = (0, get_variable_schema_name_helper_1.getVariableSchemaNameHelper)(modelName, config);
15
+ return `export type ${typeName} = z.infer<typeof ${schemaName}>`;
23
16
  }
@@ -5,13 +5,10 @@ import type { Config } from "..";
5
5
  * @param config - The configuration for the generator
6
6
  * @returns The generated Zod properties
7
7
  */
8
- export declare function generateZodProperties(
9
- modelFields: {
10
- documentation: string;
11
- modelName: string;
12
- fieldName: string;
13
- validation: string | null;
14
- comment: string[];
15
- }[],
16
- config?: Config,
17
- ): string;
8
+ export declare function generateZodProperties(modelFields: {
9
+ documentation: string;
10
+ modelName: string;
11
+ fieldName: string;
12
+ validation: string | null;
13
+ comment: string[];
14
+ }[], config?: Config): string;
@@ -8,25 +8,19 @@ exports.generateZodProperties = generateZodProperties;
8
8
  * @returns The generated Zod properties
9
9
  */
10
10
  function generateZodProperties(modelFields, config) {
11
- const fields = modelFields
12
- .filter((field) => field.validation)
13
- .map((field) => {
14
- // @relation, @v, @z exclude
15
- const cleanDoc = field.comment
16
- .filter(
17
- (line) =>
18
- !(
19
- line.includes("@relation") ||
20
- line.includes("@v") ||
21
- line.includes("@z")
22
- ),
23
- )
24
- .join("\n")
25
- .trim();
26
- const docComment =
27
- config?.comment && cleanDoc ? ` /**\n * ${cleanDoc}\n */\n` : "";
28
- return `${docComment} ${field.fieldName}: z.${field.validation}`;
29
- })
30
- .join(",\n");
31
- return fields;
11
+ const fields = modelFields
12
+ .filter((field) => field.validation)
13
+ .map((field) => {
14
+ // @relation, @v, @z exclude
15
+ const cleanDoc = field.comment
16
+ .filter((line) => !(line.includes("@relation") ||
17
+ line.includes("@v") ||
18
+ line.includes("@z")))
19
+ .join("\n")
20
+ .trim();
21
+ const docComment = config?.comment && cleanDoc ? ` /**\n * ${cleanDoc}\n */\n` : "";
22
+ return `${docComment} ${field.fieldName}: z.${field.validation}`;
23
+ })
24
+ .join(",\n");
25
+ return fields;
32
26
  }
@@ -6,8 +6,4 @@ import type { Config } from "..";
6
6
  * @param config - The configuration for the generator
7
7
  * @returns The generated Zod schema
8
8
  */
9
- export declare function generateZodSchema(
10
- modelName: string,
11
- fields: string,
12
- config: Config,
13
- ): string;
9
+ export declare function generateZodSchema(modelName: string, fields: string, config: Config): string;
@@ -10,10 +10,6 @@ const get_variable_schema_name_helper_1 = require("../../../common/helper/get-va
10
10
  * @returns The generated Zod schema
11
11
  */
12
12
  function generateZodSchema(modelName, fields, config) {
13
- const schemaName = (0,
14
- get_variable_schema_name_helper_1.getVariableSchemaNameHelper)(
15
- modelName,
16
- config,
17
- );
18
- return `export const ${schemaName} = z.object({\n${fields}\n})`;
13
+ const schemaName = (0, get_variable_schema_name_helper_1.getVariableSchemaNameHelper)(modelName, config);
14
+ return `export const ${schemaName} = z.object({\n${fields}\n})`;
19
15
  }
@@ -5,13 +5,10 @@ import type { Config } from "..";
5
5
  * @param config - The configuration for the generator
6
6
  * @returns The generated Zod schemas
7
7
  */
8
- export declare function generateZodSchemas(
9
- modelFields: {
10
- documentation: string;
11
- modelName: string;
12
- fieldName: string;
13
- validation: string | null;
14
- comment: string[];
15
- }[],
16
- config: Config,
17
- ): string;
8
+ export declare function generateZodSchemas(modelFields: {
9
+ documentation: string;
10
+ modelName: string;
11
+ fieldName: string;
12
+ validation: string | null;
13
+ comment: string[];
14
+ }[], config: Config): string;
@@ -10,18 +10,11 @@ const generate_zod_schema_1 = require("./generate-zod-schema");
10
10
  * @returns The generated Zod schemas
11
11
  */
12
12
  function generateZodSchemas(modelFields, config) {
13
- const modelName = modelFields[0].modelName;
14
- const modelDoc = modelFields[0].documentation || "";
15
- const fields = (0, generate_zod_properties_1.generateZodProperties)(
16
- modelFields,
17
- config,
18
- );
19
- if (!(modelDoc || !config?.comment)) {
20
- return (0, generate_zod_schema_1.generateZodSchema)(
21
- modelName,
22
- fields,
23
- config,
24
- );
25
- }
26
- return `${(0, generate_zod_schema_1.generateZodSchema)(modelName, fields, config)}`;
13
+ const modelName = modelFields[0].modelName;
14
+ const modelDoc = modelFields[0].documentation || "";
15
+ const fields = (0, generate_zod_properties_1.generateZodProperties)(modelFields, config);
16
+ if (!(modelDoc || !config?.comment)) {
17
+ return (0, generate_zod_schema_1.generateZodSchema)(modelName, fields, config);
18
+ }
19
+ return `${(0, generate_zod_schema_1.generateZodSchema)(modelName, fields, config)}`;
27
20
  }
@@ -6,7 +6,4 @@ import type { Model } from "../../../common/type";
6
6
  * @param config - The configuration for the generator
7
7
  * @returns The generated Zod schemas and types
8
8
  */
9
- export declare function generateZod(
10
- models: readonly Model[],
11
- config: Config,
12
- ): string;
9
+ export declare function generateZod(models: readonly Model[], config: Config): string;
@@ -15,55 +15,40 @@ const ZOD_IMPORT = `import { z } from 'zod'\n`;
15
15
  * @returns The generated Zod schemas and types
16
16
  */
17
17
  function generateZod(models, config) {
18
- const modelInfos = models.map((model) => {
19
- return {
20
- documentation: model.documentation ?? "",
21
- name: model.name,
22
- fields: model.fields,
23
- };
24
- });
25
- const modelFields = modelInfos.map((model) => {
26
- const fields = model.fields.map((field) => ({
27
- documentation: model.documentation,
28
- modelName: model.name,
29
- fieldName: field.name,
30
- comment: (0, is_zod_documentation_1.isZodDocumentValidation)(
31
- field.documentation,
32
- ),
33
- validation: (0, is_zod_validation_1.isZodValidation)(field.documentation),
34
- }));
35
- return fields;
36
- });
37
- // null exclude
38
- const validFields = (0, is_fields_validation_1.isFieldsValidation)(
39
- modelFields,
40
- );
41
- // group by model
42
- const groupedByModel = (0, group_by_model_helper_1.groupByModelHelper)(
43
- validFields,
44
- );
45
- const zods = Object.values(groupedByModel).map((fields) => {
46
- return {
47
- generateZodSchema: (0, generate_zod_schemas_1.generateZodSchemas)(
48
- fields,
49
- config,
50
- ),
51
- generateZodInfer:
52
- config.type === "true"
53
- ? (0, generate_zod_infer_1.generateZodInfer)(
54
- fields[0].modelName,
55
- config,
56
- )
57
- : "",
58
- };
59
- });
60
- return [
61
- ZOD_IMPORT,
62
- "",
63
- zods
64
- .flatMap(({ generateZodSchema, generateZodInfer }) =>
65
- [generateZodSchema, generateZodInfer].filter(Boolean),
66
- )
67
- .join("\n\n"),
68
- ].join("\n");
18
+ const modelInfos = models.map((model) => {
19
+ return {
20
+ documentation: model.documentation ?? "",
21
+ name: model.name,
22
+ fields: model.fields,
23
+ };
24
+ });
25
+ const modelFields = modelInfos.map((model) => {
26
+ const fields = model.fields.map((field) => ({
27
+ documentation: model.documentation,
28
+ modelName: model.name,
29
+ fieldName: field.name,
30
+ comment: (0, is_zod_documentation_1.isZodDocumentValidation)(field.documentation),
31
+ validation: (0, is_zod_validation_1.isZodValidation)(field.documentation),
32
+ }));
33
+ return fields;
34
+ });
35
+ // null exclude
36
+ const validFields = (0, is_fields_validation_1.isFieldsValidation)(modelFields);
37
+ // group by model
38
+ const groupedByModel = (0, group_by_model_helper_1.groupByModelHelper)(validFields);
39
+ const zods = Object.values(groupedByModel).map((fields) => {
40
+ return {
41
+ generateZodSchema: (0, generate_zod_schemas_1.generateZodSchemas)(fields, config),
42
+ generateZodInfer: config.type === "true"
43
+ ? (0, generate_zod_infer_1.generateZodInfer)(fields[0].modelName, config)
44
+ : "",
45
+ };
46
+ });
47
+ return [
48
+ ZOD_IMPORT,
49
+ "",
50
+ zods
51
+ .flatMap(({ generateZodSchema, generateZodInfer }) => [generateZodSchema, generateZodInfer].filter(Boolean))
52
+ .join("\n\n"),
53
+ ].join("\n");
69
54
  }
@@ -1,10 +1,11 @@
1
+ #!/usr/bin/env node
1
2
  import type { GeneratorOptions } from "@prisma/generator-helper";
2
3
  export type Config = {
3
- output?: string;
4
- file?: string | string[];
5
- schemaName?: "PascalCase" | "camelCase" | string | string[];
6
- typeName?: "PascalCase" | "camelCase" | string | string[];
7
- type?: boolean | string | string[];
8
- comment?: boolean | string | string[];
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[];
9
10
  };
10
11
  export declare function main(options: GeneratorOptions): Promise<void>;
@@ -1,9 +1,8 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
2
- var __importDefault =
3
- (this && this.__importDefault) ||
4
- function (mod) {
5
- return mod && mod.__esModule ? mod : { default: mod };
6
- };
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
7
6
  Object.defineProperty(exports, "__esModule", { value: true });
8
7
  exports.main = main;
9
8
  const generator_helper_1 = require("@prisma/generator-helper");
@@ -11,49 +10,45 @@ const generate_zod_1 = require("./generator/generate-zod");
11
10
  const prettier_1 = require("prettier");
12
11
  const node_fs_1 = __importDefault(require("node:fs"));
13
12
  const DEFAULT_CONFIG = {
14
- output: "./zod",
15
- file: "index.ts",
16
- schemaName: "PascalCase",
17
- typeName: "PascalCase",
18
- type: false,
19
- comment: false,
13
+ output: "./zod",
14
+ file: "index.ts",
15
+ schemaName: "PascalCase",
16
+ typeName: "PascalCase",
17
+ type: false,
18
+ comment: false,
20
19
  };
21
20
  async function main(options) {
22
- const config = {
23
- output: options.generator.output?.value ?? DEFAULT_CONFIG.output,
24
- file: options.generator.config?.file ?? DEFAULT_CONFIG.file,
25
- schemaName:
26
- options.generator.config?.schemaName ?? DEFAULT_CONFIG.schemaName,
27
- typeName: options.generator.config?.typeName ?? DEFAULT_CONFIG.typeName,
28
- type: options.generator.config?.type ?? DEFAULT_CONFIG.type,
29
- comment: options.generator.config?.comment === "true",
30
- };
31
- const content = (0, generate_zod_1.generateZod)(
32
- options.dmmf.datamodel.models,
33
- config,
34
- );
35
- const code = await (0, prettier_1.format)(content, {
36
- parser: "typescript",
37
- printWidth: 100,
38
- singleQuote: true,
39
- semi: false,
40
- });
41
- if (!config.output) {
42
- throw new Error("output is required");
43
- }
44
- if (!node_fs_1.default.existsSync(config.output)) {
45
- node_fs_1.default.mkdirSync(config.output, { recursive: true });
46
- }
47
- const file = config.file ?? "index.ts";
48
- const filePath = `${config.output}/${file}`;
49
- node_fs_1.default.writeFileSync(filePath, code);
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_zod_1.generateZod)(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);
50
45
  }
51
46
  (0, generator_helper_1.generatorHandler)({
52
- onManifest() {
53
- return {
54
- defaultOutput: "./zod/",
55
- prettyName: "Hekireki-Zod",
56
- };
57
- },
58
- onGenerate: main,
47
+ onManifest() {
48
+ return {
49
+ defaultOutput: "./zod/",
50
+ prettyName: "Hekireki-Zod",
51
+ };
52
+ },
53
+ onGenerate: main,
59
54
  });
@@ -3,6 +3,4 @@
3
3
  * @param documentation - The documentation of the field
4
4
  * @returns The Zod documentation
5
5
  */
6
- export declare function isZodDocumentValidation(
7
- documentation?: string,
8
- ): string[];
6
+ export declare function isZodDocumentValidation(documentation?: string): string[];
@@ -8,12 +8,11 @@ const VALIDATION_PATTERNS = ["@z."];
8
8
  * @returns The Zod documentation
9
9
  */
10
10
  function isZodDocumentValidation(documentation) {
11
- if (!documentation) return [];
12
- return documentation
13
- .split("\n")
14
- .filter(
15
- (line) => !VALIDATION_PATTERNS.some((pattern) => line.includes(pattern)),
16
- )
17
- .map((line) => line.trim())
18
- .filter(Boolean);
11
+ if (!documentation)
12
+ return [];
13
+ return documentation
14
+ .split("\n")
15
+ .filter((line) => !VALIDATION_PATTERNS.some((pattern) => line.includes(pattern)))
16
+ .map((line) => line.trim())
17
+ .filter(Boolean);
19
18
  }
@@ -7,7 +7,8 @@ exports.isZodValidation = isZodValidation;
7
7
  * @returns The Zod validation
8
8
  */
9
9
  function isZodValidation(documentation) {
10
- if (!documentation) return null;
11
- const match = documentation.match(/@z\.(.+?)(?:\n|$)/);
12
- return match ? match[1].trim() : null;
10
+ if (!documentation)
11
+ return null;
12
+ const match = documentation.match(/@z\.(.+?)(?:\n|$)/);
13
+ return match ? match[1].trim() : null;
13
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hekireki",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "license": "MIT",
5
5
  "description": "Hekireki is a tool that generates validation schemas for Zod and Valibot, as well as ER diagrams, from Prisma schemas annotated with comments.",
6
6
  "keywords": [
@@ -37,7 +37,7 @@
37
37
  "typecheck": "tsc --noEmit",
38
38
  "test": "vitest run",
39
39
  "coverage": "vitest run --coverage",
40
- "release": "npm pkg fix && npm publish"
40
+ "release": "npm pkg fix && pnpm build && npm publish"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "^22.13.10",