hekireki 0.1.0 → 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 (147) 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/{common/validator/is-fields-validation.d.ts → shared/validator/is-fields.d.ts} +2 -2
  77. package/dist/{common/validator/is-fields-validation.js → shared/validator/is-fields.js} +1 -4
  78. package/package.json +12 -11
  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/generator/mermaid/generator/generate-er-content.d.ts +0 -7
  94. package/dist/generator/mermaid/generator/generate-er-content.js +0 -22
  95. package/dist/generator/mermaid/generator/generate-model-fields.d.ts +0 -7
  96. package/dist/generator/mermaid/generator/generate-model-fields.js +0 -27
  97. package/dist/generator/mermaid/generator/generate-model-info.d.ts +0 -8
  98. package/dist/generator/mermaid/generator/generate-model-info.js +0 -13
  99. package/dist/generator/mermaid/generator/generate-relation-line.d.ts +0 -7
  100. package/dist/generator/mermaid/generator/generate-relation-line.js +0 -16
  101. package/dist/generator/mermaid/index.d.ts +0 -9
  102. package/dist/generator/mermaid/index.js +0 -39
  103. package/dist/generator/mermaid/output/index.d.ts +0 -8
  104. package/dist/generator/mermaid/output/index.js +0 -24
  105. package/dist/generator/mermaid/relationship/build-relation-line.d.ts +0 -14
  106. package/dist/generator/mermaid/relationship/build-relation-line.js +0 -37
  107. package/dist/generator/mermaid/relationship/index.d.ts +0 -12
  108. package/dist/generator/mermaid/relationship/index.js +0 -30
  109. package/dist/generator/mermaid/type/index.d.ts +0 -10
  110. package/dist/generator/mermaid/type/index.js +0 -2
  111. package/dist/generator/mermaid/validator/exclude-many-to-one-relations.d.ts +0 -7
  112. package/dist/generator/mermaid/validator/exclude-many-to-one-relations.js +0 -12
  113. package/dist/generator/mermaid/validator/extract-relations.d.ts +0 -7
  114. package/dist/generator/mermaid/validator/extract-relations.js +0 -25
  115. package/dist/generator/mermaid/validator/is-relation.d.ts +0 -7
  116. package/dist/generator/mermaid/validator/is-relation.js +0 -37
  117. package/dist/generator/mermaid/validator/is-relationship.d.ts +0 -7
  118. package/dist/generator/mermaid/validator/is-relationship.js +0 -11
  119. package/dist/generator/mermaid/validator/parse-relation.d.ts +0 -8
  120. package/dist/generator/mermaid/validator/parse-relation.js +0 -24
  121. package/dist/generator/mermaid/validator/remove-duplicate-relations.d.ts +0 -6
  122. package/dist/generator/mermaid/validator/remove-duplicate-relations.js +0 -11
  123. package/dist/generator/mermaid-er/generator/generate-er-content.d.ts +0 -7
  124. package/dist/generator/mermaid-er/generator/generate-er-content.js +0 -22
  125. package/dist/generator/mermaid-er/generator/generate-model-info.d.ts +0 -8
  126. package/dist/generator/mermaid-er/generator/generate-model-info.js +0 -13
  127. package/dist/generator/mermaid-er/generator/generate-relation-line.d.ts +0 -7
  128. package/dist/generator/mermaid-er/generator/generate-relation-line.js +0 -16
  129. package/dist/generator/mermaid-er/output/index.d.ts +0 -8
  130. package/dist/generator/mermaid-er/output/index.js +0 -24
  131. package/dist/generator/mermaid-er/type/index.js +0 -2
  132. package/dist/generator/valibot/generator/generate-valibot-infer-input.js +0 -16
  133. package/dist/generator/valibot/generator/generate-valibot-properties.d.ts +0 -8
  134. package/dist/generator/valibot/generator/generate-valibot-schema.d.ts +0 -9
  135. package/dist/generator/valibot/generator/generate-valibot-schema.js +0 -15
  136. package/dist/generator/valibot/generator/generate-valibot-schemas.js +0 -21
  137. package/dist/generator/valibot/generator/generate-valibot.d.ts +0 -9
  138. package/dist/generator/valibot/generator/generate-valibot.js +0 -52
  139. package/dist/generator/valibot/validator/is-valibot-documentation.d.ts +0 -1
  140. package/dist/generator/valibot/validator/is-valibot-validation.d.ts +0 -7
  141. package/dist/generator/zod/generator/generate-zod-infer.js +0 -16
  142. package/dist/generator/zod/generator/generate-zod-schema.js +0 -15
  143. package/dist/generator/zod/generator/generate-zod-schemas.js +0 -20
  144. package/dist/generator/zod/generator/generate-zod.d.ts +0 -9
  145. package/dist/generator/zod/generator/generate-zod.js +0 -52
  146. /package/dist/generator/mermaid-er/{type/index.d.ts → types.d.ts} +0 -0
  147. /package/dist/{common/type/index.d.ts → shared/types.d.ts} +0 -0
@@ -1,49 +1,19 @@
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_zod_1 = require("./generator/generate-zod");
10
- const prettier_1 = require("prettier");
11
- const node_fs_1 = __importDefault(require("node:fs"));
12
- const DEFAULT_CONFIG = {
13
- output: './zod',
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_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);
2
+ import { zod } from './generator/zod.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 ?? './zod';
9
+ const file = options.generator.config?.file ?? 'index.ts';
10
+ const zodVersion = options.generator.config?.zod ?? 'v4';
11
+ const content = zod(options.dmmf.datamodel.models, options.generator.config?.type === 'true', options.generator.config?.comment === 'true', zodVersion);
12
+ const code = await fmt(content);
13
+ await fsp.mkdir(output, { recursive: true });
14
+ await fsp.writeFile(`${output}/${file}`, code, { encoding: 'utf-8' });
45
15
  }
46
- (0, generator_helper_1.generatorHandler)({
16
+ generatorHandler({
47
17
  onManifest() {
48
18
  return {
49
19
  defaultOutput: './zod/',
@@ -0,0 +1,2 @@
1
+ export { isZod } from './is-zod.js';
2
+ export { isZodDocument } from './is-zod-document.js';
@@ -0,0 +1,2 @@
1
+ export { isZod } from './is-zod.js';
2
+ export { isZodDocument } from './is-zod-document.js';
@@ -3,4 +3,4 @@
3
3
  * @param documentation - The documentation of the field
4
4
  * @returns The Zod documentation
5
5
  */
6
- export declare function isZodDocumentValidation(documentation?: string): string[];
6
+ export declare function isZodDocument(documentation?: string): string[];
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isZodDocumentValidation = isZodDocumentValidation;
4
1
  const VALIDATION_PATTERNS = ['@z.'];
5
2
  /**
6
3
  * Is Zod documentation
7
4
  * @param documentation - The documentation of the field
8
5
  * @returns The Zod documentation
9
6
  */
10
- function isZodDocumentValidation(documentation) {
7
+ export function isZodDocument(documentation) {
11
8
  if (!documentation)
12
9
  return [];
13
10
  return documentation
@@ -3,4 +3,4 @@
3
3
  * @param documentation - The documentation of the field
4
4
  * @returns The Zod validation
5
5
  */
6
- export declare function isZodValidation(documentation?: string): string | null;
6
+ export declare function isZod(documentation?: string): string | null;
@@ -1,12 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isZodValidation = isZodValidation;
4
1
  /**
5
2
  * Is Zod validation
6
3
  * @param documentation - The documentation of the field
7
4
  * @returns The Zod validation
8
5
  */
9
- function isZodValidation(documentation) {
6
+ export function isZod(documentation) {
10
7
  if (!documentation)
11
8
  return null;
12
9
  const match = documentation.match(/@z\.(.+?)(?:\n|$)/);
@@ -0,0 +1 @@
1
+ export declare function fmt(code: string): Promise<string>;
@@ -0,0 +1,9 @@
1
+ import { format } from 'prettier';
2
+ export async function fmt(code) {
3
+ return await format(code, {
4
+ parser: 'typescript',
5
+ printWidth: 100,
6
+ singleQuote: true,
7
+ semi: false,
8
+ });
9
+ }
@@ -0,0 +1,8 @@
1
+ import type { GroupedFields, ValidField } from '../types.js';
2
+ /**
3
+ * Groups valid fields by model name.
4
+ *
5
+ * @param validFields - The array of valid fields.
6
+ * @returns The grouped fields.
7
+ */
8
+ export declare function groupByModel(validFields: ValidField[]): GroupedFields;
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.groupByModelHelper = groupByModelHelper;
4
1
  /**
5
2
  * Groups valid fields by model name.
6
3
  *
7
4
  * @param validFields - The array of valid fields.
8
5
  * @returns The grouped fields.
9
6
  */
10
- function groupByModelHelper(validFields) {
7
+ export function groupByModel(validFields) {
11
8
  return validFields.reduce((acc, field) => {
12
9
  if (!acc[field.modelName]) {
13
10
  acc[field.modelName] = [];
@@ -0,0 +1 @@
1
+ export {};
@@ -1,9 +1,7 @@
1
1
  /**
2
- * Capitalizes the first letter of a string
3
- *
4
- * @function capitalize
5
- * @param str - String to capitalize
6
- * @returns String with first letter capitalized
2
+ * Capitalize the first letter of a string
3
+ * @param { string } str - String to capitalize
4
+ * @returns { string } String with first letter capitalized
7
5
  *
8
6
  * @example
9
7
  * capitalize('posts') // Returns: 'Posts'
@@ -1,12 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.capitalize = capitalize;
4
1
  /**
5
- * Capitalizes the first letter of a string
6
- *
7
- * @function capitalize
8
- * @param str - String to capitalize
9
- * @returns String with first letter capitalized
2
+ * Capitalize the first letter of a string
3
+ * @param { string } str - String to capitalize
4
+ * @returns { string } String with first letter capitalized
10
5
  *
11
6
  * @example
12
7
  * capitalize('posts') // Returns: 'Posts'
@@ -18,6 +13,6 @@ exports.capitalize = capitalize;
18
13
  * - Returns empty string if input is empty
19
14
  * - Commonly used for generating type names and class names
20
15
  */
21
- function capitalize(str) {
16
+ export function capitalize(str) {
22
17
  return `${str.charAt(0).toUpperCase()}${str.slice(1)}`;
23
18
  }
@@ -0,0 +1 @@
1
+ export { capitalize } from './capitalize.js';
@@ -0,0 +1 @@
1
+ export { capitalize } from './capitalize.js';
@@ -3,10 +3,10 @@
3
3
  * @param modelFields - The model fields
4
4
  * @returns The fields validation
5
5
  */
6
- export declare function isFieldsValidation(modelFields: {
6
+ export declare function isFields(modelFields: {
7
7
  documentation: string | undefined;
8
8
  modelName: string;
9
9
  fieldName: string;
10
10
  comment: string[];
11
11
  validation: string | null;
12
- }[][]): Required<import("../type").Field>[];
12
+ }[][]): Required<import("../types.js").Field>[];
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFieldsValidation = isFieldsValidation;
4
1
  /**
5
2
  * Is fields validation
6
3
  * @param modelFields - The model fields
7
4
  * @returns The fields validation
8
5
  */
9
- function isFieldsValidation(modelFields) {
6
+ export function isFields(modelFields) {
10
7
  return modelFields.flat().filter((field) => field.validation !== null);
11
8
  }
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "hekireki",
3
- "version": "0.1.0",
3
+ "type": "module",
4
+ "version": "0.2.0",
4
5
  "license": "MIT",
5
6
  "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
7
  "keywords": [
@@ -33,24 +34,24 @@
33
34
  "scripts": {
34
35
  "generate": "prisma generate",
35
36
  "deps": "rm -rf node_modules && pnpm install",
36
- "build": "tsc",
37
+ "build": "rm -rf ./dist/* && tsc",
37
38
  "typecheck": "tsc --noEmit",
38
39
  "test": "vitest run",
39
40
  "coverage": "vitest run --coverage",
40
41
  "release": "npm pkg fix && pnpm build && npm publish"
41
42
  },
42
43
  "devDependencies": {
43
- "@prisma/client": "^6.8.2",
44
- "@types/node": "^22.15.29",
45
- "@vitest/coverage-v8": "^3.1.4",
46
- "prisma": "^6.8.2",
47
- "tsx": "^4.19.4",
44
+ "@prisma/client": "^6.10.1",
45
+ "@types/node": "^22.15.34",
46
+ "@vitest/coverage-v8": "^3.2.4",
47
+ "prisma": "^6.10.1",
48
+ "tsx": "^4.20.3",
48
49
  "valibot": "1.1.0",
49
- "vitest": "^3.1.4",
50
- "zod": "^3.25.46"
50
+ "vitest": "^3.2.4",
51
+ "zod": "^3.25.67"
51
52
  },
52
53
  "dependencies": {
53
- "@prisma/generator-helper": "^6.8.2",
54
- "prettier": "^3.5.3"
54
+ "@prisma/generator-helper": "^6.10.1",
55
+ "prettier": "^3.6.2"
55
56
  }
56
57
  }
@@ -1 +0,0 @@
1
- export declare function formatCode(code: string): Promise<string>;
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatCode = formatCode;
4
- const prettier_1 = require("prettier");
5
- async function formatCode(code) {
6
- return await (0, prettier_1.format)(code, {
7
- parser: 'typescript',
8
- printWidth: 100,
9
- singleQuote: true,
10
- semi: false,
11
- });
12
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * Generates a camelCase schema name from a given schema name.
3
- *
4
- * @param schemaName - The original schema name.
5
- * @returns The camelCase schema name.
6
- */
7
- export declare function getCamelCaseSchemaNameHelper(schemaName: string): string;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCamelCaseSchemaNameHelper = getCamelCaseSchemaNameHelper;
4
- const decapitalize_1 = require("../text/decapitalize");
5
- /**
6
- * Generates a camelCase schema name from a given schema name.
7
- *
8
- * @param schemaName - The original schema name.
9
- * @returns The camelCase schema name.
10
- */
11
- function getCamelCaseSchemaNameHelper(schemaName) {
12
- const decapitalizedSchemaName = (0, decapitalize_1.decapitalize)(schemaName);
13
- return `${decapitalizedSchemaName}Schema`;
14
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Generates a PascalCase schema name from a given schema name.
3
- *
4
- * @function getPascalCaseSchemaName
5
- * @param schemaName - The original schema name.
6
- * @returns The PascalCase schema name.
7
- */
8
- export declare function getPascalCaseSchemaNameHelper(schemaName: string): string;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPascalCaseSchemaNameHelper = getPascalCaseSchemaNameHelper;
4
- const capitalize_1 = require("../text/capitalize");
5
- /**
6
- * Generates a PascalCase schema name from a given schema name.
7
- *
8
- * @function getPascalCaseSchemaName
9
- * @param schemaName - The original schema name.
10
- * @returns The PascalCase schema name.
11
- */
12
- function getPascalCaseSchemaNameHelper(schemaName) {
13
- const capitalizedSchemaName = (0, capitalize_1.capitalize)(schemaName);
14
- return `${capitalizedSchemaName}Schema`;
15
- }
@@ -1,9 +0,0 @@
1
- import type { Config } from '../../generator/zod';
2
- /**
3
- * Generates a variable name based on the given name and configuration.
4
- *
5
- * @param name - The original name.
6
- * @param config - The configuration.
7
- * @returns The variable name.
8
- */
9
- export declare function getVariableNameHelper(name: string, config: Config): string;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getVariableNameHelper = getVariableNameHelper;
4
- const capitalize_1 = require("../text/capitalize");
5
- const decapitalize_1 = require("../text/decapitalize");
6
- /**
7
- * Generates a variable name based on the given name and configuration.
8
- *
9
- * @param name - The original name.
10
- * @param config - The configuration.
11
- * @returns The variable name.
12
- */
13
- function getVariableNameHelper(name, config) {
14
- return config.typeName === 'camelCase' ? (0, decapitalize_1.decapitalize)(name) : (0, capitalize_1.capitalize)(name);
15
- }
@@ -1,9 +0,0 @@
1
- import type { Config } from '../../generator/zod';
2
- /**
3
- * Generates a variable schema name based on the given name and configuration.
4
- *
5
- * @param name - The original name.
6
- * @param config - The configuration.
7
- * @returns The variable schema name.
8
- */
9
- export declare function getVariableSchemaNameHelper(name: string, config: Config): string;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getVariableSchemaNameHelper = getVariableSchemaNameHelper;
4
- const get_camel_case_schema_name_helper_1 = require("./get-camel-case-schema-name-helper");
5
- const get_pascal_case_schema_name_helper_1 = require("./get-pascal-case-schema-name-helper");
6
- /**
7
- * Generates a variable schema name based on the given name and configuration.
8
- *
9
- * @param name - The original name.
10
- * @param config - The configuration.
11
- * @returns The variable schema name.
12
- */
13
- function getVariableSchemaNameHelper(name, config) {
14
- return config.schemaName === 'camelCase'
15
- ? (0, get_camel_case_schema_name_helper_1.getCamelCaseSchemaNameHelper)(name)
16
- : (0, get_pascal_case_schema_name_helper_1.getPascalCaseSchemaNameHelper)(name);
17
- }
@@ -1,8 +0,0 @@
1
- import type { GroupedFields, ValidField } from '../type';
2
- /**
3
- * Groups valid fields by model name.
4
- *
5
- * @param validFields - The array of valid fields.
6
- * @returns The grouped fields.
7
- */
8
- export declare function groupByModelHelper(validFields: ValidField[]): GroupedFields;
@@ -1,17 +0,0 @@
1
- /**
2
- * Decapitalizes the first letter of a string
3
- *
4
- * @function decapitalize
5
- * @param str - String to decapitalize
6
- * @returns String with the first letter in lowercase
7
- *
8
- * @example
9
- * decapitalize('Posts') // Returns: 'posts'
10
- * decapitalize('User') // Returns: 'user'
11
- * decapitalize('Api') // Returns: 'api'
12
- *
13
- * @remarks
14
- * - Leaves the rest of the string unchanged
15
- * - Returns an empty string if the input is empty
16
- */
17
- export declare function decapitalize(str: string): string;
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decapitalize = decapitalize;
4
- /**
5
- * Decapitalizes the first letter of a string
6
- *
7
- * @function decapitalize
8
- * @param str - String to decapitalize
9
- * @returns String with the first letter in lowercase
10
- *
11
- * @example
12
- * decapitalize('Posts') // Returns: 'posts'
13
- * decapitalize('User') // Returns: 'user'
14
- * decapitalize('Api') // Returns: 'api'
15
- *
16
- * @remarks
17
- * - Leaves the rest of the string unchanged
18
- * - Returns an empty string if the input is empty
19
- */
20
- function decapitalize(str) {
21
- return `${str.charAt(0).toLowerCase()}${str.slice(1)}`;
22
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +0,0 @@
1
- import type { ERContent, Model } from '../type'
2
- /**
3
- * generate ER content
4
- * @param { readonly Model[] } models - models
5
- * @returns { ERContent } - ER content
6
- */
7
- export declare function generateERContent(models: readonly Model[]): ERContent
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateERContent = generateERContent;
4
- const __1 = require("..");
5
- const extract_relations_1 = require("../validator/extract-relations");
6
- const generate_model_info_1 = require("../generator/generate-model-info");
7
- const remove_duplicate_relations_1 = require("../validator/remove-duplicate-relations");
8
- /**
9
- * generate ER content
10
- * @param { readonly Model[] } models - models
11
- * @returns { ERContent } - ER content
12
- */
13
- function generateERContent(models) {
14
- // extract all relations
15
- const allRelations = models.flatMap(extract_relations_1.extractRelations);
16
- // remove duplicate relations
17
- const uniqueRelations = (0, remove_duplicate_relations_1.removeDuplicateRelations)(allRelations);
18
- // collect all model info
19
- const modelInfos = models.flatMap(generate_model_info_1.generateModelInfo);
20
- // build ER diagram
21
- return [...__1.ER_HEADER, ...uniqueRelations, ...modelInfos, ...__1.ER_FOOTER];
22
- }
@@ -1,7 +0,0 @@
1
- import type { DMMF } from '@prisma/generator-helper'
2
- /**
3
- * generate model fields
4
- * @param { DMMF.Model } model
5
- * @returns { string[] }
6
- */
7
- export declare function generateModelFields(model: DMMF.Model): string[]
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateModelFields = generateModelFields;
4
- const ZOD_ANNOTATION = '@z.';
5
- const VALIBOT_ANNOTATION = '@v.';
6
- /**
7
- * generate model fields
8
- * @param { DMMF.Model } model
9
- * @returns { string[] }
10
- */
11
- function generateModelFields(model) {
12
- return model.fields
13
- .map((field) => {
14
- if (field.relationName) {
15
- return null;
16
- }
17
- const commentPart = field.documentation
18
- ? field.documentation
19
- .split('\n')
20
- .filter((line) => !(line.includes(ZOD_ANNOTATION) || line.includes(VALIBOT_ANNOTATION)))
21
- .join('\n')
22
- .trim()
23
- : '';
24
- return ` ${field.type} ${field.name} ${commentPart ? `"${commentPart}"` : ''}`;
25
- })
26
- .filter((field) => field !== null);
27
- }
@@ -1,8 +0,0 @@
1
- import type { Model } from '../type'
2
- /**
3
- * generate model info
4
- * @function generateModelInfo
5
- * @param model
6
- * @returns
7
- */
8
- export declare function generateModelInfo(model: Model): readonly string[]
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateModelInfo = generateModelInfo;
4
- const generate_model_fields_1 = require("./generate-model-fields");
5
- /**
6
- * generate model info
7
- * @function generateModelInfo
8
- * @param model
9
- * @returns
10
- */
11
- function generateModelInfo(model) {
12
- return [` ${model.name} {`, ...(0, generate_model_fields_1.generateModelFields)(model), ' }'];
13
- }
@@ -1,7 +0,0 @@
1
- import type { Relation } from '../type'
2
- /**
3
- * generate relation line
4
- * @param { Relation } relation
5
- * @returns { string } relation line
6
- */
7
- export declare function generateRelationLine(relation: Relation): string
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateRelationLine = generateRelationLine;
4
- const build_relation_line_1 = require("../relationship/build-relation-line");
5
- /**
6
- * generate relation line
7
- * @param { Relation } relation
8
- * @returns { string } relation line
9
- */
10
- function generateRelationLine(relation) {
11
- const cardinality = (0, build_relation_line_1.buildRelationLine)(relation.type);
12
- if (!cardinality) {
13
- throw new Error(`Unknown relation type: ${relation.type}`);
14
- }
15
- return ` ${relation.fromModel} ${cardinality} ${relation.toModel} : "(${relation.fromField}) - (${relation.toField})"`;
16
- }
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import type { GeneratorOptions } from '@prisma/generator-helper'
3
- export type Config = {
4
- output?: string
5
- file?: string | string[]
6
- }
7
- export declare const ER_HEADER: readonly ['```mermaid', 'erDiagram']
8
- export declare const ER_FOOTER: readonly ['```']
9
- export declare function main(options: GeneratorOptions): Promise<void>
@@ -1,39 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ER_FOOTER = exports.ER_HEADER = void 0;
5
- exports.main = main;
6
- const output_1 = require("./output");
7
- const generator_helper_1 = require("@prisma/generator-helper");
8
- const generate_er_content_1 = require("./generator/generate-er-content");
9
- const DEFAULT_CONFIG = {
10
- output: './mermaid-er',
11
- file: 'ER.md',
12
- };
13
- // ER diagram header
14
- exports.ER_HEADER = ['```mermaid', 'erDiagram'];
15
- // ER diagram footer
16
- exports.ER_FOOTER = ['```'];
17
- // main function
18
- async function main(options) {
19
- const config = {
20
- output: options.generator.output?.value ?? DEFAULT_CONFIG.output,
21
- file: options.generator.config?.file ?? DEFAULT_CONFIG.file,
22
- };
23
- const models = options.dmmf.datamodel.models;
24
- const content = (0, generate_er_content_1.generateERContent)(models);
25
- if (!config.output) {
26
- throw new Error('output is required');
27
- }
28
- (0, output_1.OutputFile)(content, config);
29
- }
30
- // prisma generator handler
31
- (0, generator_helper_1.generatorHandler)({
32
- onManifest() {
33
- return {
34
- defaultOutput: './mermaid-er',
35
- prettyName: 'Hekireki-ER',
36
- };
37
- },
38
- onGenerate: main,
39
- });
@@ -1,8 +0,0 @@
1
- import type { Config } from '..'
2
- import type { ERContent } from '../type'
3
- /**
4
- * Output the ER content to a file
5
- * @param content - The ER content
6
- * @param config - The configuration
7
- */
8
- export declare function OutputFile(content: ERContent, config: Config): void