arkos 1.2.13-test.1 → 1.2.13-test.2
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/dist/cjs/app.js +1 -138
- package/dist/cjs/exports/auth/index.js +1 -6
- package/dist/cjs/exports/controllers/index.js +1 -11
- package/dist/cjs/exports/error-handler/index.js +1 -11
- package/dist/cjs/exports/index.js +1 -12
- package/dist/cjs/exports/middlewares/index.js +1 -7
- package/dist/cjs/exports/prisma/index.js +1 -6
- package/dist/cjs/exports/services/index.js +1 -49
- package/dist/cjs/exports/utils/index.js +1 -44
- package/dist/cjs/exports/validation/index.js +1 -11
- package/dist/cjs/modules/auth/auth.controller.js +1 -194
- package/dist/cjs/modules/auth/auth.router.js +1 -50
- package/dist/cjs/modules/auth/auth.service.js +1 -185
- package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
- package/dist/cjs/modules/base/base.controller.js +1 -158
- package/dist/cjs/modules/base/base.middlewares.js +1 -92
- package/dist/cjs/modules/base/base.router.js +1 -24
- package/dist/cjs/modules/base/base.service.js +1 -128
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
- package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -97
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
- package/dist/cjs/modules/email/email.service.js +1 -104
- package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -146
- package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
- package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -201
- package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
- package/dist/cjs/modules/file-upload/file-upload.router.js +1 -44
- package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -97
- package/dist/cjs/modules/swagger/swagger.router.js +1 -119
- package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -270
- package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -66
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -41
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -29
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -30
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -471
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -575
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -253
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -105
- package/dist/cjs/paths.js +1 -9
- package/dist/cjs/server.js +5 -85
- package/dist/cjs/types/arkos-config.js +1 -3
- package/dist/cjs/types/auth.js +1 -3
- package/dist/cjs/types/index.js +1 -11
- package/dist/cjs/types/router-config.js +1 -3
- package/dist/cjs/utils/arkos-env.js +1 -9
- package/dist/cjs/utils/cli/build.js +6 -212
- package/dist/cjs/utils/cli/dev.js +5 -256
- package/dist/cjs/utils/cli/generate.js +12 -189
- package/dist/cjs/utils/cli/index.js +1 -81
- package/dist/cjs/utils/cli/start.js +5 -94
- package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -24
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +6 -15
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +38 -67
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +8 -36
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -36
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
- package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
- package/dist/cjs/utils/dotenv.helpers.js +1 -43
- package/dist/cjs/utils/features/api.features.js +1 -167
- package/dist/cjs/utils/features/change-case.features.js +1 -67
- package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
- package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
- package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
- package/dist/cjs/utils/helpers/fs.helpers.js +1 -61
- package/dist/cjs/utils/helpers/global.helpers.js +1 -89
- package/dist/cjs/utils/helpers/models.helpers.js +11 -339
- package/dist/cjs/utils/helpers/prisma.helpers.js +1 -52
- package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
- package/dist/cjs/utils/helpers/routers.helpers.js +1 -21
- package/dist/cjs/utils/helpers/text.helpers.js +1 -28
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -451
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -88
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -158
- package/dist/cjs/utils/prisma/types.js +1 -3
- package/dist/cjs/utils/sheu.js +1 -119
- package/dist/cjs/utils/validate-dto.js +1 -17
- package/dist/cjs/utils/validate-schema.js +1 -15
- package/dist/esm/app.js +1 -0
- package/dist/esm/app.js.map +1 -0
- package/dist/esm/exports/auth/index.js +1 -0
- package/dist/esm/exports/auth/index.js.map +1 -0
- package/dist/esm/exports/controllers/index.js +1 -0
- package/dist/esm/exports/controllers/index.js.map +1 -0
- package/dist/esm/exports/error-handler/index.js +1 -0
- package/dist/esm/exports/error-handler/index.js.map +1 -0
- package/dist/esm/exports/index.js +1 -0
- package/dist/esm/exports/index.js.map +1 -0
- package/dist/esm/exports/middlewares/index.js +1 -0
- package/dist/esm/exports/middlewares/index.js.map +1 -0
- package/dist/esm/exports/prisma/index.js +1 -0
- package/dist/esm/exports/prisma/index.js.map +1 -0
- package/dist/esm/exports/services/index.js +1 -0
- package/dist/esm/exports/services/index.js.map +1 -0
- package/dist/esm/exports/utils/index.js +1 -0
- package/dist/esm/exports/utils/index.js.map +1 -0
- package/dist/esm/exports/validation/index.js +1 -0
- package/dist/esm/exports/validation/index.js.map +1 -0
- package/dist/esm/modules/auth/auth.controller.js +1 -0
- package/dist/esm/modules/auth/auth.controller.js.map +1 -0
- package/dist/esm/modules/auth/auth.router.js +1 -0
- package/dist/esm/modules/auth/auth.router.js.map +1 -0
- package/dist/esm/modules/auth/auth.service.js +1 -0
- package/dist/esm/modules/auth/auth.service.js.map +1 -0
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -0
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -0
- package/dist/esm/modules/base/base.controller.js +1 -0
- package/dist/esm/modules/base/base.controller.js.map +1 -0
- package/dist/esm/modules/base/base.middlewares.js +1 -0
- package/dist/esm/modules/base/base.middlewares.js.map +1 -0
- package/dist/esm/modules/base/base.router.js +1 -0
- package/dist/esm/modules/base/base.router.js.map +1 -0
- package/dist/esm/modules/base/base.service.js +1 -0
- package/dist/esm/modules/base/base.service.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -0
- package/dist/esm/modules/email/email.service.js +1 -0
- package/dist/esm/modules/email/email.service.js.map +1 -0
- package/dist/esm/modules/error-handler/error-handler.controller.js +4 -0
- package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/app-error.js +1 -0
- package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/catch-async.js +1 -0
- package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -0
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.router.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.service.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -0
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -0
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
- package/dist/esm/modules/swagger/swagger.router.js +1 -0
- package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
- package/dist/esm/paths.js +1 -0
- package/dist/esm/paths.js.map +1 -0
- package/dist/esm/server.js +5 -0
- package/dist/esm/server.js.map +1 -0
- package/dist/esm/types/arkos-config.js +1 -0
- package/dist/esm/types/arkos-config.js.map +1 -0
- package/dist/esm/types/auth.js +1 -0
- package/dist/esm/types/auth.js.map +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/router-config.js +1 -0
- package/dist/esm/types/router-config.js.map +1 -0
- package/dist/esm/utils/arkos-env.js +1 -0
- package/dist/esm/utils/arkos-env.js.map +1 -0
- package/dist/esm/utils/cli/build.js +6 -0
- package/dist/esm/utils/cli/build.js.map +1 -0
- package/dist/esm/utils/cli/dev.js +5 -0
- package/dist/esm/utils/cli/dev.js.map +1 -0
- package/dist/esm/utils/cli/generate.js +12 -0
- package/dist/esm/utils/cli/generate.js.map +1 -0
- package/dist/esm/utils/cli/index.js +1 -0
- package/dist/esm/utils/cli/index.js.map +1 -0
- package/dist/esm/utils/cli/start.js +5 -0
- package/dist/esm/utils/cli/start.js.map +1 -0
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -0
- package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +21 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +12 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +206 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +36 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +18 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +15 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generators.js +2 -0
- package/dist/esm/utils/cli/utils/template-generators.js.map +1 -0
- package/dist/esm/utils/dotenv.helpers.js +1 -0
- package/dist/esm/utils/dotenv.helpers.js.map +1 -0
- package/dist/esm/utils/features/api.features.js +1 -0
- package/dist/esm/utils/features/api.features.js.map +1 -0
- package/dist/esm/utils/features/change-case.features.js +1 -0
- package/dist/esm/utils/features/change-case.features.js.map +1 -0
- package/dist/esm/utils/helpers/api.features.helpers.js +1 -0
- package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/change-case.helpers.js +1 -0
- package/dist/esm/utils/helpers/change-case.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/deepmerge.helper.js +1 -0
- package/dist/esm/utils/helpers/deepmerge.helper.js.map +1 -0
- package/dist/esm/utils/helpers/fs.helpers.js +1 -0
- package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/global.helpers.js +1 -0
- package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/models.helpers.js +11 -0
- package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/prisma.helpers.js +1 -0
- package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/query-parser.helpers.js +1 -0
- package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/routers.helpers.js +1 -0
- package/dist/esm/utils/helpers/routers.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/text.helpers.js +1 -0
- package/dist/esm/utils/helpers/text.helpers.js.map +1 -0
- package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
- package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -0
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -0
- package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
- package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
- package/dist/esm/utils/prisma/types.js +1 -0
- package/dist/esm/utils/prisma/types.js.map +1 -0
- package/dist/esm/utils/sheu.js +1 -0
- package/dist/esm/utils/sheu.js.map +1 -0
- package/dist/esm/utils/validate-dto.js +1 -0
- package/dist/esm/utils/validate-dto.js.map +1 -0
- package/dist/esm/utils/validate-schema.js +1 -0
- package/dist/esm/utils/validate-schema.js.map +1 -0
- package/package.json +6 -4
- package/dist/cjs/index.js +0 -22
- package/dist/esm/index.d.mts +0 -280
- package/dist/esm/index.mjs +0 -22
- package/dist/exports/index.js +0 -1
- package/dist/types/arkos-config.js +0 -1
- package/dist/types/auth.js +0 -1
- package/dist/types/index.js +0 -1
- package/dist/types/router-config.js +0 -1
- package/dist/utils/arkos-env.js +0 -1
- package/dist/utils/dotenv.helpers.js +0 -1
- package/dist/utils/sheu.js +0 -1
- package/dist/utils/validate-dto.js +0 -1
- package/dist/utils/validate-schema.js +0 -1
|
@@ -1,28 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.capitalize = capitalize;
|
|
4
|
-
exports.removeBeginningSlash = removeBeginningSlash;
|
|
5
|
-
exports.removeEndingSlash = removeEndingSlash;
|
|
6
|
-
exports.removeBothSlashes = removeBothSlashes;
|
|
7
|
-
function capitalize(text) {
|
|
8
|
-
if (!text)
|
|
9
|
-
return "";
|
|
10
|
-
return text
|
|
11
|
-
.split(" ")
|
|
12
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
13
|
-
.join(" ");
|
|
14
|
-
}
|
|
15
|
-
function removeBeginningSlash(str) {
|
|
16
|
-
if (str.startsWith("/"))
|
|
17
|
-
return str.substring(1);
|
|
18
|
-
return str;
|
|
19
|
-
}
|
|
20
|
-
function removeEndingSlash(str) {
|
|
21
|
-
if (str.endsWith("/"))
|
|
22
|
-
return str.substring(0, str.length - 1);
|
|
23
|
-
return str;
|
|
24
|
-
}
|
|
25
|
-
function removeBothSlashes(str) {
|
|
26
|
-
return removeEndingSlash(removeBeginningSlash(str));
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=text.helpers.js.map
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.capitalize=capitalize,exports.removeBeginningSlash=removeBeginningSlash,exports.removeEndingSlash=removeEndingSlash,exports.removeBothSlashes=removeBothSlashes;function capitalize(e){return e?e.split(" ").map(n=>n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" "):""}function removeBeginningSlash(e){return e.startsWith("/")?e.substring(1):e}function removeEndingSlash(e){return e.endsWith("/")?e.substring(0,e.length-1):e}function removeBothSlashes(e){return removeEndingSlash(removeBeginningSlash(e))}
|
|
@@ -1,451 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.EnhancedPrismaJsonSchemaGenerator = void 0;
|
|
7
|
-
const deepmerge_helper_1 = __importDefault(require("../helpers/deepmerge.helper"));
|
|
8
|
-
const models_helpers_1 = require("../helpers/models.helpers");
|
|
9
|
-
const prisma_schema_parser_1 = __importDefault(require("./prisma-schema-parser"));
|
|
10
|
-
class EnhancedPrismaJsonSchemaGenerator {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.schema = prisma_schema_parser_1.default.parse();
|
|
13
|
-
}
|
|
14
|
-
async generateModelSchemas(config) {
|
|
15
|
-
const { modelName, arkosConfig, schemasToGenerate = [
|
|
16
|
-
"model",
|
|
17
|
-
"login",
|
|
18
|
-
"signup",
|
|
19
|
-
"getMe",
|
|
20
|
-
"updateMe",
|
|
21
|
-
"updatePassword",
|
|
22
|
-
"create",
|
|
23
|
-
"createOne",
|
|
24
|
-
"createMany",
|
|
25
|
-
"update",
|
|
26
|
-
"updateOne",
|
|
27
|
-
"updateMany",
|
|
28
|
-
"query",
|
|
29
|
-
"findOne",
|
|
30
|
-
"findMany",
|
|
31
|
-
], } = config;
|
|
32
|
-
const modelModules = await (0, models_helpers_1.importPrismaModelModules)(modelName, arkosConfig);
|
|
33
|
-
const routerConfig = modelModules?.router?.config || {};
|
|
34
|
-
const prismaQueryOptions = modelModules?.prismaQueryOptions || {};
|
|
35
|
-
const authModuleModel = ["auth", "me", "password", "signup", "login"];
|
|
36
|
-
const isAuthModule = authModuleModel.includes(modelName.toLowerCase());
|
|
37
|
-
if (arkosConfig?.swagger?.strict && arkosConfig.swagger.mode !== "prisma")
|
|
38
|
-
return {};
|
|
39
|
-
if (routerConfig?.disable === true)
|
|
40
|
-
return {};
|
|
41
|
-
const model = this.schema.models.find((m) => m.name.toLowerCase() === modelName.toLowerCase());
|
|
42
|
-
if (!model && !isAuthModule)
|
|
43
|
-
throw new Error(`Model ${modelName} not found in schema`);
|
|
44
|
-
const schemas = {};
|
|
45
|
-
if (isAuthModule) {
|
|
46
|
-
await this.generateAuthSchemas(this.schema.models.find((m) => m.name.toLowerCase() === "user"), schemas, arkosConfig, schemasToGenerate, prismaQueryOptions);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
if (model)
|
|
50
|
-
await this.generateCrudSchemas(model, schemas, arkosConfig, schemasToGenerate, prismaQueryOptions, routerConfig);
|
|
51
|
-
}
|
|
52
|
-
return { ...schemas };
|
|
53
|
-
}
|
|
54
|
-
async generateAuthSchemas(model, schemas, arkosConfig, schemasToGenerate, queryOptions, routerConfig) {
|
|
55
|
-
const modelName = "Auth";
|
|
56
|
-
if (!arkosConfig?.authentication)
|
|
57
|
-
return schemas;
|
|
58
|
-
if (schemasToGenerate.includes("login") &&
|
|
59
|
-
!this.isEndpointDisabled("login", routerConfig) &&
|
|
60
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("login", modelName, arkosConfig))) {
|
|
61
|
-
schemas[`LoginSchema`] = this.generateLoginSchema(arkosConfig);
|
|
62
|
-
}
|
|
63
|
-
if (schemasToGenerate.includes("signup") &&
|
|
64
|
-
!this.isEndpointDisabled("signup", routerConfig) &&
|
|
65
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("signup", modelName, arkosConfig))) {
|
|
66
|
-
schemas[`SignupSchema`] = this.generateSignupSchema(model, queryOptions?.signup);
|
|
67
|
-
}
|
|
68
|
-
if (schemasToGenerate.includes("updateMe") &&
|
|
69
|
-
!this.isEndpointDisabled("updateMe", routerConfig) &&
|
|
70
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("updateMe", modelName, arkosConfig))) {
|
|
71
|
-
schemas[`UpdateMeSchema`] = this.generateUpdateMeSchema(model, queryOptions?.updateMe);
|
|
72
|
-
}
|
|
73
|
-
if (schemasToGenerate.includes("updatePassword") &&
|
|
74
|
-
!this.isEndpointDisabled("updatePassword", routerConfig) &&
|
|
75
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("updatePassword", modelName, arkosConfig))) {
|
|
76
|
-
schemas[`UpdatePasswordSchema`] = this.generateUpdatePasswordSchema(model, queryOptions?.updatePassword);
|
|
77
|
-
}
|
|
78
|
-
if (schemasToGenerate.includes("getMe") &&
|
|
79
|
-
!this.isEndpointDisabled("getMe", routerConfig) &&
|
|
80
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("getMe", modelName, arkosConfig))) {
|
|
81
|
-
schemas[`GetMeSchema`] = this.generateResponseSchema(model, queryOptions?.getMe || {}, "findOne");
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
async generateCrudSchemas(model, schemas, arkosConfig, schemasToGenerate, queryOptions, routerConfig) {
|
|
85
|
-
const modelName = model.name;
|
|
86
|
-
const ensureBaseSchemaReference = async (operation, modelName) => {
|
|
87
|
-
const suffix = arkosConfig.validation?.resolver === "zod" ? "Schema" : "Dto";
|
|
88
|
-
const singleOpName = operation === "Create" ? "createOne" : "updateOne";
|
|
89
|
-
const hasLocalValidator = await (0, models_helpers_1.localValidatorFileExists)(singleOpName, modelName, arkosConfig);
|
|
90
|
-
if (hasLocalValidator) {
|
|
91
|
-
return `${operation}${modelName}${suffix}`;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
const modelSchemaKey = `${operation}${modelName}ModelSchema`;
|
|
95
|
-
if (!schemas[modelSchemaKey]) {
|
|
96
|
-
if (operation === "Create") {
|
|
97
|
-
schemas[modelSchemaKey] = this.generateCreateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "createOne"));
|
|
98
|
-
}
|
|
99
|
-
else if (operation === "Update") {
|
|
100
|
-
schemas[modelSchemaKey] = this.generateUpdateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "updateOne"));
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return modelSchemaKey;
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
if (schemasToGenerate.includes("createOne") &&
|
|
107
|
-
!this.isEndpointDisabled("createOne", routerConfig) &&
|
|
108
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("createOne", modelName, arkosConfig))) {
|
|
109
|
-
schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "createOne"));
|
|
110
|
-
}
|
|
111
|
-
if (schemasToGenerate.includes("createMany") &&
|
|
112
|
-
!this.isEndpointDisabled("createMany", routerConfig) &&
|
|
113
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("createMany", modelName, arkosConfig))) {
|
|
114
|
-
const baseSchemaKey = await ensureBaseSchemaReference("Create", modelName);
|
|
115
|
-
schemas[`CreateMany${modelName}ModelSchema`] = {
|
|
116
|
-
type: "array",
|
|
117
|
-
items: { $ref: `#/components/schemas/${baseSchemaKey}` },
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
if (schemasToGenerate.includes("updateOne") &&
|
|
121
|
-
!this.isEndpointDisabled("updateOne", routerConfig) &&
|
|
122
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("updateOne", modelName, arkosConfig))) {
|
|
123
|
-
schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "updateOne"));
|
|
124
|
-
}
|
|
125
|
-
if (schemasToGenerate.includes("updateMany") &&
|
|
126
|
-
!this.isEndpointDisabled("updateMany", routerConfig) &&
|
|
127
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("updateMany", modelName, arkosConfig))) {
|
|
128
|
-
const baseSchemaKey = await ensureBaseSchemaReference("Update", modelName);
|
|
129
|
-
schemas[`UpdateMany${modelName}ModelSchema`] = {
|
|
130
|
-
type: "object",
|
|
131
|
-
properties: {
|
|
132
|
-
data: {
|
|
133
|
-
type: "object",
|
|
134
|
-
$ref: `#/components/schemas/${baseSchemaKey}`,
|
|
135
|
-
},
|
|
136
|
-
where: { type: "object" },
|
|
137
|
-
},
|
|
138
|
-
required: ["data"],
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
if (schemasToGenerate.includes("findOne") &&
|
|
142
|
-
!this.isEndpointDisabled("findOne", routerConfig) &&
|
|
143
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("findOne", modelName, arkosConfig))) {
|
|
144
|
-
schemas[`FindOne${modelName}ModelSchema`] = this.generateResponseSchema(model, this.resolvePrismaQueryOptions(queryOptions, "findOne"), "findOne");
|
|
145
|
-
}
|
|
146
|
-
if (schemasToGenerate.includes("findMany") &&
|
|
147
|
-
!this.isEndpointDisabled("findMany", routerConfig) &&
|
|
148
|
-
!(await (0, models_helpers_1.localValidatorFileExists)("findMany", modelName, arkosConfig))) {
|
|
149
|
-
schemas[`FindMany${modelName}ModelSchema`] = {
|
|
150
|
-
type: "array",
|
|
151
|
-
items: this.generateResponseSchema(model, this.resolvePrismaQueryOptions(queryOptions, "findMany"), "findMany"),
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
generateCreateSchema(model, _) {
|
|
156
|
-
const properties = {};
|
|
157
|
-
const required = [];
|
|
158
|
-
const restrictedFields = ["createdAt", "updatedAt", "deletedAt", "id"];
|
|
159
|
-
if (model.name.toLowerCase() === "auth")
|
|
160
|
-
restrictedFields.push("roles", "role", "isActive", "isStaff", "isSuperUser", "passwordChangedAt", "deletedSelfAccountAt", "lastLoginAt");
|
|
161
|
-
for (const field of model.fields) {
|
|
162
|
-
if (field.isId || restrictedFields.includes(field.name))
|
|
163
|
-
continue;
|
|
164
|
-
if (this.isModelRelation(field.type)) {
|
|
165
|
-
if (!field.isArray) {
|
|
166
|
-
properties[field.connectionField] = {
|
|
167
|
-
type: this.mapPrismaTypeToJsonSchema(model.fields.find((_field) => _field.name === field.connectionField)?.type || "String"),
|
|
168
|
-
};
|
|
169
|
-
if (!field.isOptional && field.defaultValue === undefined)
|
|
170
|
-
required.push(field.name);
|
|
171
|
-
}
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
const property = this.convertFieldToJsonSchema(field);
|
|
175
|
-
properties[field.name] = property;
|
|
176
|
-
if (!field.isOptional &&
|
|
177
|
-
field.defaultValue === undefined &&
|
|
178
|
-
!field.isArray) {
|
|
179
|
-
required.push(field.name);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return {
|
|
183
|
-
type: "object",
|
|
184
|
-
properties,
|
|
185
|
-
required,
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
generateUpdateSchema(model, _) {
|
|
189
|
-
const properties = {};
|
|
190
|
-
const autoFillFields = ["createdAt", "updatedAt", "deletedAt", "id"];
|
|
191
|
-
for (const field of model.fields) {
|
|
192
|
-
if (field.isId || autoFillFields.includes(field.name))
|
|
193
|
-
continue;
|
|
194
|
-
if (this.isModelRelation(field.type)) {
|
|
195
|
-
if (!field.isArray)
|
|
196
|
-
properties[field.connectionField] = {
|
|
197
|
-
type: this.mapPrismaTypeToJsonSchema(model.fields.find((_field) => _field.name === field.connectionField)?.type || "String"),
|
|
198
|
-
};
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
const property = this.convertFieldToJsonSchema(field);
|
|
202
|
-
properties[field.name] = property;
|
|
203
|
-
}
|
|
204
|
-
return {
|
|
205
|
-
type: "object",
|
|
206
|
-
properties,
|
|
207
|
-
required: [],
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
generateResponseSchema(model, options, _) {
|
|
211
|
-
const properties = {};
|
|
212
|
-
const required = [];
|
|
213
|
-
const selectFields = options?.select;
|
|
214
|
-
const includeRelations = options?.include;
|
|
215
|
-
for (const field of model.fields) {
|
|
216
|
-
if (field.name.toLowerCase().includes("password"))
|
|
217
|
-
continue;
|
|
218
|
-
if (selectFields && !selectFields[field.name])
|
|
219
|
-
continue;
|
|
220
|
-
if (this.isModelRelation(field.type)) {
|
|
221
|
-
if (includeRelations?.[field.name]) {
|
|
222
|
-
const relationModel = this.schema.models.find((m) => m.name === field.type);
|
|
223
|
-
if (relationModel) {
|
|
224
|
-
const relationSchema = this.generateNestedRelationSchema(relationModel, includeRelations[field.name]);
|
|
225
|
-
properties[field.name] = field.isArray
|
|
226
|
-
? { type: "array", items: relationSchema }
|
|
227
|
-
: relationSchema;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
continue;
|
|
231
|
-
}
|
|
232
|
-
const property = this.convertFieldToJsonSchema(field);
|
|
233
|
-
properties[field.name] = property;
|
|
234
|
-
if (!field.isOptional)
|
|
235
|
-
required.push(field.name);
|
|
236
|
-
}
|
|
237
|
-
return {
|
|
238
|
-
type: "object",
|
|
239
|
-
properties,
|
|
240
|
-
required,
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
generateNestedRelationSchema(model, includeOptions) {
|
|
244
|
-
const properties = {};
|
|
245
|
-
const required = [];
|
|
246
|
-
const selectFields = includeOptions?.select;
|
|
247
|
-
const nestedIncludes = includeOptions?.include;
|
|
248
|
-
for (const field of model.fields) {
|
|
249
|
-
if (field.name.toLowerCase().includes("password")) {
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
if (selectFields && !selectFields[field.name]) {
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
if (this.isModelRelation(field.type)) {
|
|
256
|
-
if (nestedIncludes?.[field.name]) {
|
|
257
|
-
const relationModel = this.schema.models.find((m) => m.name === field.type);
|
|
258
|
-
if (relationModel) {
|
|
259
|
-
const nestedSchema = this.generateNestedRelationSchema(relationModel, nestedIncludes[field.name]);
|
|
260
|
-
properties[field.name] = field.isArray
|
|
261
|
-
? { type: "array", items: nestedSchema }
|
|
262
|
-
: nestedSchema;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
continue;
|
|
266
|
-
}
|
|
267
|
-
const property = this.convertFieldToJsonSchema(field);
|
|
268
|
-
properties[field.name] = property;
|
|
269
|
-
if (!field.isOptional) {
|
|
270
|
-
required.push(field.name);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
return {
|
|
274
|
-
type: "object",
|
|
275
|
-
properties,
|
|
276
|
-
required,
|
|
277
|
-
};
|
|
278
|
-
}
|
|
279
|
-
generateLoginSchema(arkosConfig) {
|
|
280
|
-
const userNameFields = arkosConfig?.authentication?.login?.allowedUsernames || [];
|
|
281
|
-
const getDisplayName = (field) => {
|
|
282
|
-
if (field.includes("."))
|
|
283
|
-
return field.split(".").pop() || field;
|
|
284
|
-
return field;
|
|
285
|
-
};
|
|
286
|
-
const baseSchema = {
|
|
287
|
-
type: "object",
|
|
288
|
-
properties: {
|
|
289
|
-
password: {
|
|
290
|
-
type: "string",
|
|
291
|
-
minLength: 8,
|
|
292
|
-
},
|
|
293
|
-
},
|
|
294
|
-
required: ["password"],
|
|
295
|
-
};
|
|
296
|
-
userNameFields.forEach((field) => {
|
|
297
|
-
const displayName = getDisplayName(field);
|
|
298
|
-
baseSchema.properties[displayName] = {
|
|
299
|
-
type: "string",
|
|
300
|
-
format: "string",
|
|
301
|
-
description: `Username field: ${field}`,
|
|
302
|
-
};
|
|
303
|
-
});
|
|
304
|
-
if (userNameFields.length > 0) {
|
|
305
|
-
const usernameDisplayNames = userNameFields.map(getDisplayName);
|
|
306
|
-
return {
|
|
307
|
-
...baseSchema,
|
|
308
|
-
anyOf: usernameDisplayNames.map(() => ({
|
|
309
|
-
required: [...baseSchema.required],
|
|
310
|
-
})),
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
return baseSchema;
|
|
314
|
-
}
|
|
315
|
-
generateSignupSchema(model, options) {
|
|
316
|
-
const singupSchema = this.generateCreateSchema(model, options || {});
|
|
317
|
-
const restrictedFields = [
|
|
318
|
-
"roles",
|
|
319
|
-
"role",
|
|
320
|
-
"isActive",
|
|
321
|
-
"isStaff",
|
|
322
|
-
"isSuperUser",
|
|
323
|
-
"passwordChangedAt",
|
|
324
|
-
"deletedSelfAccountAt",
|
|
325
|
-
"lastLoginAt",
|
|
326
|
-
];
|
|
327
|
-
restrictedFields.forEach((field) => {
|
|
328
|
-
delete singupSchema?.properties?.[field];
|
|
329
|
-
});
|
|
330
|
-
return singupSchema;
|
|
331
|
-
}
|
|
332
|
-
generateUpdateMeSchema(model, options) {
|
|
333
|
-
const updateSchema = this.generateUpdateSchema(model, options || {});
|
|
334
|
-
const restrictedFields = [
|
|
335
|
-
"roles",
|
|
336
|
-
"role",
|
|
337
|
-
"isActive",
|
|
338
|
-
"isStaff",
|
|
339
|
-
"isSuperUser",
|
|
340
|
-
"passwordChangedAt",
|
|
341
|
-
"deletedSelfAccountAt",
|
|
342
|
-
"password",
|
|
343
|
-
"lastLoginAt",
|
|
344
|
-
];
|
|
345
|
-
restrictedFields.forEach((field) => {
|
|
346
|
-
delete updateSchema?.properties?.[field];
|
|
347
|
-
});
|
|
348
|
-
return updateSchema;
|
|
349
|
-
}
|
|
350
|
-
generateUpdatePasswordSchema(_, _1) {
|
|
351
|
-
return {
|
|
352
|
-
type: "object",
|
|
353
|
-
properties: {
|
|
354
|
-
currentPassword: { type: "string" },
|
|
355
|
-
newPassword: { type: "string", minLength: 8 },
|
|
356
|
-
},
|
|
357
|
-
required: ["currentPassword", "newPassword"],
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
resolvePrismaQueryOptions(prismaQueryOptions, action) {
|
|
361
|
-
if (!prismaQueryOptions || !action) {
|
|
362
|
-
return {};
|
|
363
|
-
}
|
|
364
|
-
const options = prismaQueryOptions;
|
|
365
|
-
const actionOptions = options[action] || {};
|
|
366
|
-
let mergedOptions = options.queryOptions || {};
|
|
367
|
-
if (options.global)
|
|
368
|
-
mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, options.global);
|
|
369
|
-
const generalOptions = this.getGeneralOptionsForAction(options, action);
|
|
370
|
-
if (generalOptions)
|
|
371
|
-
mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, generalOptions);
|
|
372
|
-
if (actionOptions)
|
|
373
|
-
mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, actionOptions);
|
|
374
|
-
return mergedOptions;
|
|
375
|
-
}
|
|
376
|
-
getGeneralOptionsForAction(options, action) {
|
|
377
|
-
const actionMap = {
|
|
378
|
-
find: ["findOne", "findMany"],
|
|
379
|
-
create: ["createOne", "createMany"],
|
|
380
|
-
update: ["updateOne", "updateMany"],
|
|
381
|
-
delete: ["deleteOne", "deleteMany"],
|
|
382
|
-
save: ["createOne", "createMany", "updateOne", "updateMany"],
|
|
383
|
-
saveOne: ["createOne", "updateOne"],
|
|
384
|
-
saveMany: ["createMany", "updateMany"],
|
|
385
|
-
};
|
|
386
|
-
for (const [optionKey, actions] of Object.entries(actionMap)) {
|
|
387
|
-
if (actions.includes(action) && options[optionKey]) {
|
|
388
|
-
return options[optionKey];
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
return null;
|
|
392
|
-
}
|
|
393
|
-
isEndpointDisabled(endpoint, routerConfig) {
|
|
394
|
-
if (!routerConfig?.disable)
|
|
395
|
-
return false;
|
|
396
|
-
if (typeof routerConfig.disable === "boolean") {
|
|
397
|
-
return routerConfig.disable;
|
|
398
|
-
}
|
|
399
|
-
return (routerConfig.disable[endpoint] ||
|
|
400
|
-
false);
|
|
401
|
-
}
|
|
402
|
-
isModelRelation(typeName) {
|
|
403
|
-
return this.schema.models.some((m) => m.name === typeName);
|
|
404
|
-
}
|
|
405
|
-
convertFieldToJsonSchema(field) {
|
|
406
|
-
const baseType = this.mapPrismaTypeToJsonSchema(field.type);
|
|
407
|
-
const property = { type: baseType };
|
|
408
|
-
if (field.isArray) {
|
|
409
|
-
property.type = "array";
|
|
410
|
-
property.items = { type: this.mapPrismaTypeToJsonSchema(field.type) };
|
|
411
|
-
}
|
|
412
|
-
if (field.defaultValue !== undefined) {
|
|
413
|
-
property.default = field.defaultValue;
|
|
414
|
-
}
|
|
415
|
-
if (field.type === "DateTime") {
|
|
416
|
-
property.format = "date-time";
|
|
417
|
-
}
|
|
418
|
-
if (this.isEnum(field.type)) {
|
|
419
|
-
const enumDef = this.schema.enums.find((e) => e.name === field.type);
|
|
420
|
-
if (enumDef) {
|
|
421
|
-
property.enum = enumDef.values;
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
return property;
|
|
425
|
-
}
|
|
426
|
-
mapPrismaTypeToJsonSchema(prismaType) {
|
|
427
|
-
const typeMap = {
|
|
428
|
-
String: "string",
|
|
429
|
-
Int: "number",
|
|
430
|
-
Float: "number",
|
|
431
|
-
Boolean: "boolean",
|
|
432
|
-
DateTime: "string",
|
|
433
|
-
Json: "object",
|
|
434
|
-
Bytes: "string",
|
|
435
|
-
};
|
|
436
|
-
if (typeMap[prismaType])
|
|
437
|
-
return typeMap[prismaType];
|
|
438
|
-
if (this.isEnum(prismaType))
|
|
439
|
-
return "string";
|
|
440
|
-
if (this.isModelRelation(prismaType))
|
|
441
|
-
return "object";
|
|
442
|
-
return "string";
|
|
443
|
-
}
|
|
444
|
-
isEnum(typeName) {
|
|
445
|
-
return this.schema.enums.some((e) => e.name === typeName);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
exports.EnhancedPrismaJsonSchemaGenerator = EnhancedPrismaJsonSchemaGenerator;
|
|
449
|
-
const enhancedPrismaJsonSchemaGenerator = new EnhancedPrismaJsonSchemaGenerator();
|
|
450
|
-
exports.default = enhancedPrismaJsonSchemaGenerator;
|
|
451
|
-
//# sourceMappingURL=enhaced-prisma-json-schema-generator.js.map
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(p){return p&&p.__esModule?p:{default:p}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.EnhancedPrismaJsonSchemaGenerator=void 0;const deepmerge_helper_1=__importDefault(require("../helpers/deepmerge.helper")),models_helpers_1=require("../helpers/models.helpers"),prisma_schema_parser_1=__importDefault(require("./prisma-schema-parser"));class EnhancedPrismaJsonSchemaGenerator{constructor(){this.schema=prisma_schema_parser_1.default.parse()}async generateModelSchemas(t){const{modelName:s,arkosConfig:e,schemasToGenerate:n=["model","login","signup","getMe","updateMe","updatePassword","create","createOne","createMany","update","updateOne","updateMany","query","findOne","findMany"]}=t,a=await(0,models_helpers_1.importPrismaModelModules)(s,e),i=a?.router?.config||{},r=a?.prismaQueryOptions||{},d=["auth","me","password","signup","login"].includes(s.toLowerCase());if(e?.swagger?.strict&&e.swagger.mode!=="prisma")return{};if(i?.disable===!0)return{};const c=this.schema.models.find(u=>u.name.toLowerCase()===s.toLowerCase());if(!c&&!d)throw new Error(`Model ${s} not found in schema`);const l={};return d?await this.generateAuthSchemas(this.schema.models.find(u=>u.name.toLowerCase()==="user"),l,e,n,r):c&&await this.generateCrudSchemas(c,l,e,n,r,i),{...l}}async generateAuthSchemas(t,s,e,n,a,i){const r="Auth";if(!e?.authentication)return s;n.includes("login")&&!this.isEndpointDisabled("login",i)&&!await(0,models_helpers_1.localValidatorFileExists)("login",r,e)&&(s.LoginSchema=this.generateLoginSchema(e)),n.includes("signup")&&!this.isEndpointDisabled("signup",i)&&!await(0,models_helpers_1.localValidatorFileExists)("signup",r,e)&&(s.SignupSchema=this.generateSignupSchema(t,a?.signup)),n.includes("updateMe")&&!this.isEndpointDisabled("updateMe",i)&&!await(0,models_helpers_1.localValidatorFileExists)("updateMe",r,e)&&(s.UpdateMeSchema=this.generateUpdateMeSchema(t,a?.updateMe)),n.includes("updatePassword")&&!this.isEndpointDisabled("updatePassword",i)&&!await(0,models_helpers_1.localValidatorFileExists)("updatePassword",r,e)&&(s.UpdatePasswordSchema=this.generateUpdatePasswordSchema(t,a?.updatePassword)),n.includes("getMe")&&!this.isEndpointDisabled("getMe",i)&&!await(0,models_helpers_1.localValidatorFileExists)("getMe",r,e)&&(s.GetMeSchema=this.generateResponseSchema(t,a?.getMe||{},"findOne"))}async generateCrudSchemas(t,s,e,n,a,i){const r=t.name,o=async(d,c)=>{const l=e.validation?.resolver==="zod"?"Schema":"Dto",u=d==="Create"?"createOne":"updateOne";if(await(0,models_helpers_1.localValidatorFileExists)(u,c,e))return`${d}${c}${l}`;{const h=`${d}${c}ModelSchema`;return s[h]||(d==="Create"?s[h]=this.generateCreateSchema(t,this.resolvePrismaQueryOptions(a,"createOne")):d==="Update"&&(s[h]=this.generateUpdateSchema(t,this.resolvePrismaQueryOptions(a,"updateOne")))),h}};if(n.includes("createOne")&&!this.isEndpointDisabled("createOne",i)&&!await(0,models_helpers_1.localValidatorFileExists)("createOne",r,e)&&(s[`Create${r}ModelSchema`]=this.generateCreateSchema(t,this.resolvePrismaQueryOptions(a,"createOne"))),n.includes("createMany")&&!this.isEndpointDisabled("createMany",i)&&!await(0,models_helpers_1.localValidatorFileExists)("createMany",r,e)){const d=await o("Create",r);s[`CreateMany${r}ModelSchema`]={type:"array",items:{$ref:`#/components/schemas/${d}`}}}if(n.includes("updateOne")&&!this.isEndpointDisabled("updateOne",i)&&!await(0,models_helpers_1.localValidatorFileExists)("updateOne",r,e)&&(s[`Update${r}ModelSchema`]=this.generateUpdateSchema(t,this.resolvePrismaQueryOptions(a,"updateOne"))),n.includes("updateMany")&&!this.isEndpointDisabled("updateMany",i)&&!await(0,models_helpers_1.localValidatorFileExists)("updateMany",r,e)){const d=await o("Update",r);s[`UpdateMany${r}ModelSchema`]={type:"object",properties:{data:{type:"object",$ref:`#/components/schemas/${d}`},where:{type:"object"}},required:["data"]}}n.includes("findOne")&&!this.isEndpointDisabled("findOne",i)&&!await(0,models_helpers_1.localValidatorFileExists)("findOne",r,e)&&(s[`FindOne${r}ModelSchema`]=this.generateResponseSchema(t,this.resolvePrismaQueryOptions(a,"findOne"),"findOne")),n.includes("findMany")&&!this.isEndpointDisabled("findMany",i)&&!await(0,models_helpers_1.localValidatorFileExists)("findMany",r,e)&&(s[`FindMany${r}ModelSchema`]={type:"array",items:this.generateResponseSchema(t,this.resolvePrismaQueryOptions(a,"findMany"),"findMany")})}generateCreateSchema(t,s){const e={},n=[],a=["createdAt","updatedAt","deletedAt","id"];t.name.toLowerCase()==="auth"&&a.push("roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","lastLoginAt");for(const i of t.fields){if(i.isId||a.includes(i.name))continue;if(this.isModelRelation(i.type)){i.isArray||(e[i.connectionField]={type:this.mapPrismaTypeToJsonSchema(t.fields.find(o=>o.name===i.connectionField)?.type||"String")},!i.isOptional&&i.defaultValue===void 0&&n.push(i.name));continue}const r=this.convertFieldToJsonSchema(i);e[i.name]=r,!i.isOptional&&i.defaultValue===void 0&&!i.isArray&&n.push(i.name)}return{type:"object",properties:e,required:n}}generateUpdateSchema(t,s){const e={},n=["createdAt","updatedAt","deletedAt","id"];for(const a of t.fields){if(a.isId||n.includes(a.name))continue;if(this.isModelRelation(a.type)){a.isArray||(e[a.connectionField]={type:this.mapPrismaTypeToJsonSchema(t.fields.find(r=>r.name===a.connectionField)?.type||"String")});continue}const i=this.convertFieldToJsonSchema(a);e[a.name]=i}return{type:"object",properties:e,required:[]}}generateResponseSchema(t,s,e){const n={},a=[],i=s?.select,r=s?.include;for(const o of t.fields){if(o.name.toLowerCase().includes("password")||i&&!i[o.name])continue;if(this.isModelRelation(o.type)){if(r?.[o.name]){const c=this.schema.models.find(l=>l.name===o.type);if(c){const l=this.generateNestedRelationSchema(c,r[o.name]);n[o.name]=o.isArray?{type:"array",items:l}:l}}continue}const d=this.convertFieldToJsonSchema(o);n[o.name]=d,o.isOptional||a.push(o.name)}return{type:"object",properties:n,required:a}}generateNestedRelationSchema(t,s){const e={},n=[],a=s?.select,i=s?.include;for(const r of t.fields){if(r.name.toLowerCase().includes("password")||a&&!a[r.name])continue;if(this.isModelRelation(r.type)){if(i?.[r.name]){const d=this.schema.models.find(c=>c.name===r.type);if(d){const c=this.generateNestedRelationSchema(d,i[r.name]);e[r.name]=r.isArray?{type:"array",items:c}:c}}continue}const o=this.convertFieldToJsonSchema(r);e[r.name]=o,r.isOptional||n.push(r.name)}return{type:"object",properties:e,required:n}}generateLoginSchema(t){const s=t?.authentication?.login?.allowedUsernames||[],e=a=>a.includes(".")&&a.split(".").pop()||a,n={type:"object",properties:{password:{type:"string",minLength:8}},required:["password"]};if(s.forEach(a=>{const i=e(a);n.properties[i]={type:"string",format:"string",description:`Username field: ${a}`}}),s.length>0){const a=s.map(e);return{...n,anyOf:a.map(()=>({required:[...n.required]}))}}return n}generateSignupSchema(t,s){const e=this.generateCreateSchema(t,s||{});return["roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","lastLoginAt"].forEach(a=>{delete e?.properties?.[a]}),e}generateUpdateMeSchema(t,s){const e=this.generateUpdateSchema(t,s||{});return["roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","password","lastLoginAt"].forEach(a=>{delete e?.properties?.[a]}),e}generateUpdatePasswordSchema(t,s){return{type:"object",properties:{currentPassword:{type:"string"},newPassword:{type:"string",minLength:8}},required:["currentPassword","newPassword"]}}resolvePrismaQueryOptions(t,s){if(!t||!s)return{};const e=t,n=e[s]||{};let a=e.queryOptions||{};e.global&&(a=(0,deepmerge_helper_1.default)(a,e.global));const i=this.getGeneralOptionsForAction(e,s);return i&&(a=(0,deepmerge_helper_1.default)(a,i)),n&&(a=(0,deepmerge_helper_1.default)(a,n)),a}getGeneralOptionsForAction(t,s){const e={find:["findOne","findMany"],create:["createOne","createMany"],update:["updateOne","updateMany"],delete:["deleteOne","deleteMany"],save:["createOne","createMany","updateOne","updateMany"],saveOne:["createOne","updateOne"],saveMany:["createMany","updateMany"]};for(const[n,a]of Object.entries(e))if(a.includes(s)&&t[n])return t[n];return null}isEndpointDisabled(t,s){return s?.disable?typeof s.disable=="boolean"?s.disable:s.disable[t]||!1:!1}isModelRelation(t){return this.schema.models.some(s=>s.name===t)}convertFieldToJsonSchema(t){const e={type:this.mapPrismaTypeToJsonSchema(t.type)};if(t.isArray&&(e.type="array",e.items={type:this.mapPrismaTypeToJsonSchema(t.type)}),t.defaultValue!==void 0&&(e.default=t.defaultValue),t.type==="DateTime"&&(e.format="date-time"),this.isEnum(t.type)){const n=this.schema.enums.find(a=>a.name===t.type);n&&(e.enum=n.values)}return e}mapPrismaTypeToJsonSchema(t){const s={String:"string",Int:"number",Float:"number",Boolean:"boolean",DateTime:"string",Json:"object",Bytes:"string"};return s[t]?s[t]:this.isEnum(t)?"string":this.isModelRelation(t)?"object":"string"}isEnum(t){return this.schema.enums.some(s=>s.name===t)}}exports.EnhancedPrismaJsonSchemaGenerator=EnhancedPrismaJsonSchemaGenerator;const enhancedPrismaJsonSchemaGenerator=new EnhancedPrismaJsonSchemaGenerator;exports.default=enhancedPrismaJsonSchemaGenerator;
|
|
@@ -1,88 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PrismaJsonSchemaGenerator = void 0;
|
|
7
|
-
const prisma_schema_parser_1 = __importDefault(require("./prisma-schema-parser"));
|
|
8
|
-
class PrismaJsonSchemaGenerator {
|
|
9
|
-
generateSchema(model) {
|
|
10
|
-
const properties = {};
|
|
11
|
-
const required = [];
|
|
12
|
-
for (const field of model.fields) {
|
|
13
|
-
if (field.isId)
|
|
14
|
-
continue;
|
|
15
|
-
const property = this.convertFieldToJsonSchema(field);
|
|
16
|
-
properties[field.name] = property;
|
|
17
|
-
if (!field.isOptional &&
|
|
18
|
-
field.defaultValue === undefined &&
|
|
19
|
-
!field.isArray) {
|
|
20
|
-
required.push(field.name);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return {
|
|
24
|
-
type: "object",
|
|
25
|
-
properties,
|
|
26
|
-
required,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
convertFieldToJsonSchema(field) {
|
|
30
|
-
const baseType = this.mapPrismaTypeToJsonSchema(field.type);
|
|
31
|
-
const property = {
|
|
32
|
-
type: baseType,
|
|
33
|
-
};
|
|
34
|
-
if (field.isArray) {
|
|
35
|
-
property.type = "array";
|
|
36
|
-
property.items = {
|
|
37
|
-
type: this.mapPrismaTypeToJsonSchema(field.type),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
if (field.defaultValue !== undefined) {
|
|
41
|
-
property.default = field.defaultValue;
|
|
42
|
-
}
|
|
43
|
-
if (field.type === "DateTime") {
|
|
44
|
-
property.format = "date-time";
|
|
45
|
-
}
|
|
46
|
-
const schema = prisma_schema_parser_1.default.parse();
|
|
47
|
-
if (this.isEnum(field.type)) {
|
|
48
|
-
const enumDef = schema.enums.find((e) => e.name === field.type);
|
|
49
|
-
if (enumDef) {
|
|
50
|
-
property.enum = enumDef.values;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return property;
|
|
54
|
-
}
|
|
55
|
-
mapPrismaTypeToJsonSchema(prismaType) {
|
|
56
|
-
const typeMap = {
|
|
57
|
-
String: "string",
|
|
58
|
-
Int: "number",
|
|
59
|
-
Float: "number",
|
|
60
|
-
Boolean: "boolean",
|
|
61
|
-
DateTime: "string",
|
|
62
|
-
Json: "object",
|
|
63
|
-
Bytes: "string",
|
|
64
|
-
};
|
|
65
|
-
if (typeMap[prismaType]) {
|
|
66
|
-
return typeMap[prismaType];
|
|
67
|
-
}
|
|
68
|
-
if (this.isEnum(prismaType)) {
|
|
69
|
-
return "string";
|
|
70
|
-
}
|
|
71
|
-
if (this.isModel(prismaType)) {
|
|
72
|
-
return "object";
|
|
73
|
-
}
|
|
74
|
-
return "string";
|
|
75
|
-
}
|
|
76
|
-
isEnum(typeName) {
|
|
77
|
-
const schema = prisma_schema_parser_1.default.parse();
|
|
78
|
-
return schema.enums.some((e) => e.name === typeName);
|
|
79
|
-
}
|
|
80
|
-
isModel(typeName) {
|
|
81
|
-
const schema = prisma_schema_parser_1.default.parse();
|
|
82
|
-
return schema.models.some((m) => m.name === typeName);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
exports.PrismaJsonSchemaGenerator = PrismaJsonSchemaGenerator;
|
|
86
|
-
const prismaJsonSchemaGenerator = new PrismaJsonSchemaGenerator();
|
|
87
|
-
exports.default = prismaJsonSchemaGenerator;
|
|
88
|
-
//# sourceMappingURL=prisma-json-schema-generator.js.map
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PrismaJsonSchemaGenerator=void 0;const prisma_schema_parser_1=__importDefault(require("./prisma-schema-parser"));class PrismaJsonSchemaGenerator{generateSchema(e){const r={},t=[];for(const s of e.fields){if(s.isId)continue;const n=this.convertFieldToJsonSchema(s);r[s.name]=n,!s.isOptional&&s.defaultValue===void 0&&!s.isArray&&t.push(s.name)}return{type:"object",properties:r,required:t}}convertFieldToJsonSchema(e){const t={type:this.mapPrismaTypeToJsonSchema(e.type)};e.isArray&&(t.type="array",t.items={type:this.mapPrismaTypeToJsonSchema(e.type)}),e.defaultValue!==void 0&&(t.default=e.defaultValue),e.type==="DateTime"&&(t.format="date-time");const s=prisma_schema_parser_1.default.parse();if(this.isEnum(e.type)){const n=s.enums.find(o=>o.name===e.type);n&&(t.enum=n.values)}return t}mapPrismaTypeToJsonSchema(e){const r={String:"string",Int:"number",Float:"number",Boolean:"boolean",DateTime:"string",Json:"object",Bytes:"string"};return r[e]?r[e]:this.isEnum(e)?"string":this.isModel(e)?"object":"string"}isEnum(e){return prisma_schema_parser_1.default.parse().enums.some(t=>t.name===e)}isModel(e){return prisma_schema_parser_1.default.parse().models.some(t=>t.name===e)}}exports.PrismaJsonSchemaGenerator=PrismaJsonSchemaGenerator;const prismaJsonSchemaGenerator=new PrismaJsonSchemaGenerator;exports.default=prismaJsonSchemaGenerator;
|