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.
- 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
|
@@ -1,49 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
output:
|
|
14
|
-
file: '
|
|
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
|
-
|
|
16
|
+
generatorHandler({
|
|
47
17
|
onManifest() {
|
|
48
18
|
return {
|
|
49
19
|
defaultOutput: './zod/',
|
|
@@ -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
|
|
7
|
+
export function isZodDocument(documentation) {
|
|
11
8
|
if (!documentation)
|
|
12
9
|
return [];
|
|
13
10
|
return documentation
|
|
@@ -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
|
|
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,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
|
|
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
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* @
|
|
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
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* @
|
|
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
|
|
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("../
|
|
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
|
|
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
|
-
"
|
|
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.
|
|
44
|
-
"@types/node": "^22.15.
|
|
45
|
-
"@vitest/coverage-v8": "^3.
|
|
46
|
-
"prisma": "^6.
|
|
47
|
-
"tsx": "^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.
|
|
50
|
-
"zod": "^3.25.
|
|
50
|
+
"vitest": "^3.2.4",
|
|
51
|
+
"zod": "^3.25.67"
|
|
51
52
|
},
|
|
52
53
|
"dependencies": {
|
|
53
|
-
"@prisma/generator-helper": "^6.
|
|
54
|
-
"prettier": "^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,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,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,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,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,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
|