arkos 1.2.13-beta → 1.2.13-test.1
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 +138 -1
- package/dist/cjs/app.js.map +1 -1
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/modules/base/base.middlewares.js +4 -4
- package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
- package/dist/cjs/modules/swagger/swagger.router.js +62 -43
- package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +82 -62
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +23 -16
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +40 -11
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +419 -9
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +253 -0
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +31 -20
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
- package/dist/cjs/paths.js +9 -1
- package/dist/cjs/server.js +85 -5
- package/dist/cjs/server.js.map +1 -1
- package/dist/cjs/types/arkos-config.js.map +1 -1
- package/dist/cjs/utils/cli/dev.js +7 -7
- package/dist/cjs/utils/cli/dev.js.map +1 -1
- package/dist/cjs/utils/cli/start.js +4 -3
- package/dist/cjs/utils/cli/start.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +1 -1
- package/dist/cjs/utils/features/api.features.js +1 -1
- package/dist/cjs/utils/features/api.features.js.map +1 -1
- package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/models.helpers.js +43 -21
- package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +451 -0
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +88 -0
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -0
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +158 -0
- package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -0
- package/dist/cjs/utils/prisma/types.js +3 -0
- package/dist/cjs/utils/prisma/types.js.map +1 -0
- package/dist/esm/index.d.mts +280 -0
- package/dist/esm/index.mjs +22 -0
- package/dist/exports/index.js +1 -0
- package/dist/types/arkos-config.js +1 -0
- package/dist/types/auth.js +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/modules/base/base.middlewares.d.ts +4 -4
- package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +34 -0
- package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +2 -2
- package/dist/types/router-config.js +1 -0
- package/dist/types/types/arkos-config.d.ts +3 -1
- package/dist/types/utils/helpers/models.helpers.d.ts +18 -4
- package/dist/types/utils/prisma/enhaced-prisma-json-schema-generator.d.ts +34 -0
- package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +10 -0
- package/dist/types/utils/prisma/prisma-schema-parser.d.ts +18 -0
- package/dist/types/utils/prisma/types.d.ts +48 -0
- package/dist/utils/arkos-env.js +1 -0
- package/dist/utils/dotenv.helpers.js +1 -0
- package/dist/utils/sheu.js +1 -0
- package/dist/utils/validate-dto.js +1 -0
- package/dist/utils/validate-schema.js +1 -0
- package/package.json +11 -6
- package/dist/esm/app.js +0 -1
- package/dist/esm/app.js.map +0 -1
- package/dist/esm/exports/auth/index.js +0 -2
- package/dist/esm/exports/auth/index.js.map +0 -1
- package/dist/esm/exports/controllers/index.js +0 -4
- package/dist/esm/exports/controllers/index.js.map +0 -1
- package/dist/esm/exports/error-handler/index.js +0 -4
- package/dist/esm/exports/error-handler/index.js.map +0 -1
- package/dist/esm/exports/index.js +0 -8
- package/dist/esm/exports/index.js.map +0 -1
- package/dist/esm/exports/middlewares/index.js +0 -2
- package/dist/esm/exports/middlewares/index.js.map +0 -1
- package/dist/esm/exports/prisma/index.js +0 -3
- package/dist/esm/exports/prisma/index.js.map +0 -1
- package/dist/esm/exports/services/index.js +0 -9
- package/dist/esm/exports/services/index.js.map +0 -1
- package/dist/esm/exports/utils/index.js +0 -4
- package/dist/esm/exports/utils/index.js.map +0 -1
- package/dist/esm/exports/validation/index.js +0 -4
- package/dist/esm/exports/validation/index.js.map +0 -1
- package/dist/esm/modules/auth/auth.controller.js +0 -187
- package/dist/esm/modules/auth/auth.controller.js.map +0 -1
- package/dist/esm/modules/auth/auth.router.js +0 -44
- package/dist/esm/modules/auth/auth.router.js.map +0 -1
- package/dist/esm/modules/auth/auth.service.js +0 -178
- package/dist/esm/modules/auth/auth.service.js.map +0 -1
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +0 -73
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -1
- package/dist/esm/modules/base/base.controller.js +0 -150
- package/dist/esm/modules/base/base.controller.js.map +0 -1
- package/dist/esm/modules/base/base.middlewares.js +0 -81
- package/dist/esm/modules/base/base.middlewares.js.map +0 -1
- package/dist/esm/modules/base/base.router.js +0 -17
- package/dist/esm/modules/base/base.router.js.map +0 -1
- package/dist/esm/modules/base/base.service.js +0 -120
- package/dist/esm/modules/base/base.service.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +0 -77
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +0 -44
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +0 -89
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +0 -165
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +0 -1
- package/dist/esm/modules/email/email.service.js +0 -97
- package/dist/esm/modules/email/email.service.js.map +0 -1
- package/dist/esm/modules/error-handler/error-handler.controller.js +0 -107
- package/dist/esm/modules/error-handler/error-handler.controller.js.map +0 -1
- package/dist/esm/modules/error-handler/utils/app-error.js +0 -15
- package/dist/esm/modules/error-handler/utils/app-error.js.map +0 -1
- package/dist/esm/modules/error-handler/utils/catch-async.js +0 -10
- package/dist/esm/modules/error-handler/utils/catch-async.js.map +0 -1
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +0 -160
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
- package/dist/esm/modules/file-upload/file-upload.controller.js +0 -266
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +0 -1
- package/dist/esm/modules/file-upload/file-upload.router.js +0 -38
- package/dist/esm/modules/file-upload/file-upload.router.js.map +0 -1
- package/dist/esm/modules/file-upload/file-upload.service.js +0 -314
- package/dist/esm/modules/file-upload/file-upload.service.js.map +0 -1
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -87
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
- package/dist/esm/modules/swagger/swagger.router.js +0 -94
- package/dist/esm/modules/swagger/swagger.router.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +0 -247
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +0 -63
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +0 -38
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +0 -19
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +0 -24
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +0 -436
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +0 -159
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +0 -84
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +0 -1
- package/dist/esm/paths.js +0 -1
- package/dist/esm/paths.js.map +0 -1
- package/dist/esm/server.js +0 -5
- package/dist/esm/server.js.map +0 -1
- package/dist/esm/types/arkos-config.js +0 -2
- package/dist/esm/types/arkos-config.js.map +0 -1
- package/dist/esm/types/auth.js +0 -2
- package/dist/esm/types/auth.js.map +0 -1
- package/dist/esm/types/index.js +0 -8
- package/dist/esm/types/index.js.map +0 -1
- package/dist/esm/types/router-config.js +0 -2
- package/dist/esm/types/router-config.js.map +0 -1
- package/dist/esm/utils/arkos-env.js +0 -7
- package/dist/esm/utils/arkos-env.js.map +0 -1
- package/dist/esm/utils/cli/build.js +0 -206
- package/dist/esm/utils/cli/build.js.map +0 -1
- package/dist/esm/utils/cli/dev.js +0 -249
- package/dist/esm/utils/cli/dev.js.map +0 -1
- package/dist/esm/utils/cli/generate.js +0 -183
- package/dist/esm/utils/cli/generate.js.map +0 -1
- package/dist/esm/utils/cli/index.js +0 -74
- package/dist/esm/utils/cli/index.js.map +0 -1
- package/dist/esm/utils/cli/start.js +0 -86
- package/dist/esm/utils/cli/start.js.map +0 -1
- package/dist/esm/utils/cli/utils/cli.helpers.js +0 -16
- package/dist/esm/utils/cli/utils/cli.helpers.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -33
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -18
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -232
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -61
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -37
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -32
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generators.js +0 -25
- package/dist/esm/utils/cli/utils/template-generators.js.map +0 -1
- package/dist/esm/utils/dotenv.helpers.js +0 -37
- package/dist/esm/utils/dotenv.helpers.js.map +0 -1
- package/dist/esm/utils/features/api.features.js +0 -160
- package/dist/esm/utils/features/api.features.js.map +0 -1
- package/dist/esm/utils/features/change-case.features.js +0 -31
- package/dist/esm/utils/features/change-case.features.js.map +0 -1
- package/dist/esm/utils/helpers/api.features.helpers.js +0 -103
- package/dist/esm/utils/helpers/api.features.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/change-case.helpers.js +0 -161
- package/dist/esm/utils/helpers/change-case.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/deepmerge.helper.js +0 -113
- package/dist/esm/utils/helpers/deepmerge.helper.js.map +0 -1
- package/dist/esm/utils/helpers/fs.helpers.js +0 -52
- package/dist/esm/utils/helpers/fs.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/global.helpers.js +0 -47
- package/dist/esm/utils/helpers/global.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/models.helpers.js +0 -300
- package/dist/esm/utils/helpers/models.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/prisma.helpers.js +0 -44
- package/dist/esm/utils/helpers/prisma.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/query-parser.helpers.js +0 -40
- package/dist/esm/utils/helpers/query-parser.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/routers.helpers.js +0 -16
- package/dist/esm/utils/helpers/routers.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/text.helpers.js +0 -22
- package/dist/esm/utils/helpers/text.helpers.js.map +0 -1
- package/dist/esm/utils/sheu.js +0 -117
- package/dist/esm/utils/sheu.js.map +0 -1
- package/dist/esm/utils/validate-dto.js +0 -11
- package/dist/esm/utils/validate-dto.js.map +0 -1
- package/dist/esm/utils/validate-schema.js +0 -9
- package/dist/esm/utils/validate-schema.js.map +0 -1
|
@@ -0,0 +1,253 @@
|
|
|
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
|
+
const enhaced_prisma_json_schema_generator_1 = __importDefault(require("../../../../utils/prisma/enhaced-prisma-json-schema-generator"));
|
|
7
|
+
class MissingJsonSchemasGenerator {
|
|
8
|
+
extractModelNameFromSchemaRef(schemaRef) {
|
|
9
|
+
const match = schemaRef.match(/#\/components\/schemas\/(?:Create|Update|UpdateMany|FindOne|FindMany|CreateMany)?(.+?)(?:ModelSchema|Schema)$/);
|
|
10
|
+
if (match) {
|
|
11
|
+
let modelName = match[1];
|
|
12
|
+
if (modelName === "Auth" ||
|
|
13
|
+
modelName === "Login" ||
|
|
14
|
+
modelName === "Signup" ||
|
|
15
|
+
modelName === "GetMe" ||
|
|
16
|
+
modelName === "UpdateMe" ||
|
|
17
|
+
modelName === "UpdatePassword") {
|
|
18
|
+
return "Auth";
|
|
19
|
+
}
|
|
20
|
+
return modelName;
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
extractActionFromOperationId(operationId) {
|
|
25
|
+
if (operationId.includes("createMany"))
|
|
26
|
+
return "createMany";
|
|
27
|
+
if (operationId.includes("updateMany"))
|
|
28
|
+
return "updateMany";
|
|
29
|
+
if (operationId.includes("deleteMany"))
|
|
30
|
+
return "deleteMany";
|
|
31
|
+
if (operationId.startsWith("create"))
|
|
32
|
+
return "createOne";
|
|
33
|
+
if (operationId.startsWith("update"))
|
|
34
|
+
return "updateOne";
|
|
35
|
+
if (operationId.startsWith("delete"))
|
|
36
|
+
return "deleteOne";
|
|
37
|
+
if (operationId.startsWith("find") &&
|
|
38
|
+
(operationId.includes("ById") || operationId.includes("One")))
|
|
39
|
+
return "findOne";
|
|
40
|
+
if (operationId.startsWith("find"))
|
|
41
|
+
return "findMany";
|
|
42
|
+
if (operationId.includes("login") || operationId === "login")
|
|
43
|
+
return "login";
|
|
44
|
+
if (operationId.includes("signup") || operationId === "signup")
|
|
45
|
+
return "signup";
|
|
46
|
+
if (operationId.includes("getMe") || operationId === "getMe")
|
|
47
|
+
return "getMe";
|
|
48
|
+
if (operationId.includes("updateMe") || operationId === "updateMe")
|
|
49
|
+
return "updateMe";
|
|
50
|
+
if (operationId.includes("updatePassword") ||
|
|
51
|
+
operationId === "updatePassword")
|
|
52
|
+
return "updatePassword";
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
extractModelNameFromOperationId(operationId) {
|
|
56
|
+
let modelName = operationId
|
|
57
|
+
.replace(/^(create|update|delete|find)Many/i, "")
|
|
58
|
+
.replace(/^(create|update|delete|find)/i, "")
|
|
59
|
+
.replace(/ById$/i, "")
|
|
60
|
+
.replace(/s$/, "");
|
|
61
|
+
if (operationId.includes("login") ||
|
|
62
|
+
operationId.includes("signup") ||
|
|
63
|
+
operationId.includes("getMe") ||
|
|
64
|
+
operationId.includes("updateMe") ||
|
|
65
|
+
operationId.includes("updatePassword")) {
|
|
66
|
+
return "Auth";
|
|
67
|
+
}
|
|
68
|
+
return modelName || null;
|
|
69
|
+
}
|
|
70
|
+
extractSchemaRefsWithContext(obj, refs = new Map(), context = {}) {
|
|
71
|
+
if (typeof obj !== "object" || obj === null) {
|
|
72
|
+
return refs;
|
|
73
|
+
}
|
|
74
|
+
if (Array.isArray(obj)) {
|
|
75
|
+
obj.forEach((item) => this.extractSchemaRefsWithContext(item, refs, context));
|
|
76
|
+
return refs;
|
|
77
|
+
}
|
|
78
|
+
if (obj.operationId && typeof obj.operationId === "string") {
|
|
79
|
+
context = { ...context, operationId: obj.operationId };
|
|
80
|
+
}
|
|
81
|
+
if (obj.$ref && typeof obj.$ref === "string") {
|
|
82
|
+
refs.set(obj.$ref, { ...context });
|
|
83
|
+
}
|
|
84
|
+
Object.values(obj).forEach((value) => {
|
|
85
|
+
this.extractSchemaRefsWithContext(value, refs, context);
|
|
86
|
+
});
|
|
87
|
+
return refs;
|
|
88
|
+
}
|
|
89
|
+
extractPathSchemaRefs(paths) {
|
|
90
|
+
const refs = new Map();
|
|
91
|
+
Object.entries(paths).forEach(([path, pathItem]) => {
|
|
92
|
+
if (!pathItem)
|
|
93
|
+
return;
|
|
94
|
+
Object.entries(pathItem).forEach(([method, operation]) => {
|
|
95
|
+
if (!operation || typeof operation !== "object")
|
|
96
|
+
return;
|
|
97
|
+
const context = {
|
|
98
|
+
method,
|
|
99
|
+
path,
|
|
100
|
+
operationId: operation.operationId,
|
|
101
|
+
};
|
|
102
|
+
this.extractSchemaRefsWithContext(operation, refs, context);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
return refs;
|
|
106
|
+
}
|
|
107
|
+
getSchemaNameFromRef(ref) {
|
|
108
|
+
const match = ref.match(/#\/components\/schemas\/(.+)$/);
|
|
109
|
+
return match ? match[1] : null;
|
|
110
|
+
}
|
|
111
|
+
async generateMissingJsonSchemas(currentPaths, currentJsonSchemas, arkosConfig) {
|
|
112
|
+
const missingSchemas = {};
|
|
113
|
+
const schemaRefsWithContext = this.extractPathSchemaRefs(currentPaths);
|
|
114
|
+
const modelActions = new Map();
|
|
115
|
+
for (const [ref, context] of schemaRefsWithContext) {
|
|
116
|
+
const schemaName = this.getSchemaNameFromRef(ref);
|
|
117
|
+
if (!schemaName)
|
|
118
|
+
continue;
|
|
119
|
+
if (currentJsonSchemas[schemaName])
|
|
120
|
+
continue;
|
|
121
|
+
if (!schemaName.includes("ModelSchema") && !schemaName.includes("Schema"))
|
|
122
|
+
continue;
|
|
123
|
+
let modelName = null;
|
|
124
|
+
let action = null;
|
|
125
|
+
if (context.operationId) {
|
|
126
|
+
modelName = this.extractModelNameFromOperationId(context.operationId);
|
|
127
|
+
action = this.extractActionFromOperationId(context.operationId);
|
|
128
|
+
}
|
|
129
|
+
if (!modelName || !action) {
|
|
130
|
+
modelName = modelName || this.extractModelNameFromSchemaRef(ref);
|
|
131
|
+
action = action || this.extractActionFromSchemaRef(ref);
|
|
132
|
+
}
|
|
133
|
+
if (modelName && action) {
|
|
134
|
+
if (!modelActions.has(modelName))
|
|
135
|
+
modelActions.set(modelName, new Set());
|
|
136
|
+
modelActions.get(modelName).add(action);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (const [modelName, actions] of modelActions) {
|
|
140
|
+
try {
|
|
141
|
+
const actionsArray = Array.from(actions);
|
|
142
|
+
const generatedSchemas = await enhaced_prisma_json_schema_generator_1.default.generateModelSchemas({
|
|
143
|
+
modelName,
|
|
144
|
+
arkosConfig,
|
|
145
|
+
schemasToGenerate: actionsArray,
|
|
146
|
+
});
|
|
147
|
+
Object.entries(generatedSchemas).forEach(([key, schema]) => {
|
|
148
|
+
let mappedKey = key;
|
|
149
|
+
const authModuleModel = ["auth", "login", "me", "password", "me"];
|
|
150
|
+
if (authModuleModel.includes(modelName.toLowerCase())) {
|
|
151
|
+
if (key === "LoginSchema")
|
|
152
|
+
mappedKey = "LoginSchema";
|
|
153
|
+
else if (key === "SignupSchema")
|
|
154
|
+
mappedKey = "SignupSchema";
|
|
155
|
+
else if (key === "GetMeSchema")
|
|
156
|
+
mappedKey = "GetMeSchema";
|
|
157
|
+
else if (key === "UpdateMeSchema")
|
|
158
|
+
mappedKey = "UpdateMeSchema";
|
|
159
|
+
else if (key === "UpdatePasswordSchema")
|
|
160
|
+
mappedKey = "UpdatePasswordSchema";
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
if (key.includes("ModelSchema")) {
|
|
164
|
+
mappedKey = key;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
mappedKey = `${key}ModelSchema`;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
missingSchemas[mappedKey] = schema;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.warn(`Failed to generate schemas for model ${modelName}:`, error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return missingSchemas;
|
|
178
|
+
}
|
|
179
|
+
extractActionFromSchemaRef(schemaRef) {
|
|
180
|
+
if (schemaRef.includes("CreateMany"))
|
|
181
|
+
return "createMany";
|
|
182
|
+
if (schemaRef.includes("Create"))
|
|
183
|
+
return "createOne";
|
|
184
|
+
if (schemaRef.includes("UpdateMany"))
|
|
185
|
+
return "updateMany";
|
|
186
|
+
if (schemaRef.includes("Update") &&
|
|
187
|
+
!schemaRef.includes("UpdateMe") &&
|
|
188
|
+
!schemaRef.includes("UpdatePassword"))
|
|
189
|
+
return "updateOne";
|
|
190
|
+
if (schemaRef.includes("FindMany"))
|
|
191
|
+
return "findMany";
|
|
192
|
+
if (schemaRef.includes("FindOne"))
|
|
193
|
+
return "findOne";
|
|
194
|
+
if (schemaRef.includes("Login"))
|
|
195
|
+
return "login";
|
|
196
|
+
if (schemaRef.includes("Signup"))
|
|
197
|
+
return "signup";
|
|
198
|
+
if (schemaRef.includes("GetMe"))
|
|
199
|
+
return "getMe";
|
|
200
|
+
if (schemaRef.includes("UpdateMe"))
|
|
201
|
+
return "updateMe";
|
|
202
|
+
if (schemaRef.includes("UpdatePassword"))
|
|
203
|
+
return "updatePassword";
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
analyzeMissingSchemas(currentPaths, currentJsonSchemas) {
|
|
207
|
+
const schemaRefsWithContext = this.extractPathSchemaRefs(currentPaths);
|
|
208
|
+
const allRefs = [];
|
|
209
|
+
const missingRefs = [];
|
|
210
|
+
const existingRefs = [];
|
|
211
|
+
const modelActions = [];
|
|
212
|
+
for (const [ref, context] of schemaRefsWithContext) {
|
|
213
|
+
const refWithContext = { ref, context };
|
|
214
|
+
allRefs.push(refWithContext);
|
|
215
|
+
const schemaName = this.getSchemaNameFromRef(ref);
|
|
216
|
+
if (!schemaName)
|
|
217
|
+
continue;
|
|
218
|
+
if (currentJsonSchemas[schemaName]) {
|
|
219
|
+
existingRefs.push(refWithContext);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
missingRefs.push(refWithContext);
|
|
223
|
+
let modelName = null;
|
|
224
|
+
let action = null;
|
|
225
|
+
if (context.operationId) {
|
|
226
|
+
modelName = this.extractModelNameFromOperationId(context.operationId);
|
|
227
|
+
action = this.extractActionFromOperationId(context.operationId);
|
|
228
|
+
}
|
|
229
|
+
if (!modelName || !action) {
|
|
230
|
+
modelName = modelName || this.extractModelNameFromSchemaRef(ref);
|
|
231
|
+
action = action || this.extractActionFromSchemaRef(ref);
|
|
232
|
+
}
|
|
233
|
+
if (modelName && action) {
|
|
234
|
+
modelActions.push({
|
|
235
|
+
model: modelName,
|
|
236
|
+
action,
|
|
237
|
+
ref,
|
|
238
|
+
operationId: context.operationId,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
allRefs,
|
|
245
|
+
missingRefs,
|
|
246
|
+
existingRefs,
|
|
247
|
+
modelActions,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const missingJsonSchemaGenerator = new MissingJsonSchemasGenerator();
|
|
252
|
+
exports.default = missingJsonSchemaGenerator;
|
|
253
|
+
//# sourceMappingURL=missing-json-schemas-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"missing-json-schemas-generator.js","sourceRoot":"","sources":["../../../../../../src/modules/swagger/utils/helpers/missing-json-schemas-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { OpenAPIV3 } from \"openapi-types\";\nimport { ArkosConfig } from \"../../../../exports\";\nimport enhancedPrismaJsonSchemaGenerator from \"../../../../utils/prisma/enhaced-prisma-json-schema-generator\";\n\n/**\n * Used to backfill missing json schema contained in paths in situation such as when using a `arkosConfig.swagger.mode` different from prisma and `strict` to false, in this situation the jsonSchemas paths are filled with $ref pointing to non existent jsonSchema components.\n */\nclass MissingJsonSchemasGenerator {\n /**\n * Extract model name from schema reference\n * @example\n * \"#/components/schemas/CreateUserModelSchema\" -> \"User\"\n * \"#/components/schemas/FindManyPostModelSchema\" -> \"Post\"\n */\n private extractModelNameFromSchemaRef(schemaRef: string): string | null {\n const match = schemaRef.match(\n /#\\/components\\/schemas\\/(?:Create|Update|UpdateMany|FindOne|FindMany|CreateMany)?(.+?)(?:ModelSchema|Schema)$/\n );\n if (match) {\n let modelName = match[1];\n // Handle special auth cases\n if (\n modelName === \"Auth\" ||\n modelName === \"Login\" ||\n modelName === \"Signup\" ||\n modelName === \"GetMe\" ||\n modelName === \"UpdateMe\" ||\n modelName === \"UpdatePassword\"\n ) {\n return \"Auth\";\n }\n return modelName;\n }\n return null;\n }\n\n /**\n * Extract action type from operationId\n * @example\n * \"createManyUser\" -> \"createMany\"\n * \"findUsers\" -> \"findMany\"\n * \"updateUser\" -> \"updateOne\"\n */\n private extractActionFromOperationId(operationId: string): string | null {\n // Handle bulk operations first (more specific patterns)\n if (operationId.includes(\"createMany\")) return \"createMany\";\n if (operationId.includes(\"updateMany\")) return \"updateMany\";\n if (operationId.includes(\"deleteMany\")) return \"deleteMany\";\n\n // Handle single operations\n if (operationId.startsWith(\"create\")) return \"createOne\";\n if (operationId.startsWith(\"update\")) return \"updateOne\";\n if (operationId.startsWith(\"delete\")) return \"deleteOne\";\n if (\n operationId.startsWith(\"find\") &&\n (operationId.includes(\"ById\") || operationId.includes(\"One\"))\n )\n return \"findOne\";\n if (operationId.startsWith(\"find\")) return \"findMany\";\n\n // Handle auth operations\n if (operationId.includes(\"login\") || operationId === \"login\")\n return \"login\";\n if (operationId.includes(\"signup\") || operationId === \"signup\")\n return \"signup\";\n if (operationId.includes(\"getMe\") || operationId === \"getMe\")\n return \"getMe\";\n if (operationId.includes(\"updateMe\") || operationId === \"updateMe\")\n return \"updateMe\";\n if (\n operationId.includes(\"updatePassword\") ||\n operationId === \"updatePassword\"\n )\n return \"updatePassword\";\n\n return null;\n }\n\n /**\n * Extract model name from operationId\n * @example\n * \"createManyUser\" -> \"User\"\n * \"findUsers\" -> \"User\"\n * \"updateUser\" -> \"User\"\n */\n private extractModelNameFromOperationId(operationId: string): string | null {\n // Remove common prefixes and suffixes to isolate model name\n let modelName = operationId\n .replace(/^(create|update|delete|find)Many/i, \"\")\n .replace(/^(create|update|delete|find)/i, \"\")\n .replace(/ById$/i, \"\")\n .replace(/s$/, \"\"); // Remove plural 's'\n\n // Handle auth operations\n if (\n operationId.includes(\"login\") ||\n operationId.includes(\"signup\") ||\n operationId.includes(\"getMe\") ||\n operationId.includes(\"updateMe\") ||\n operationId.includes(\"updatePassword\")\n ) {\n return \"Auth\";\n }\n\n return modelName || null;\n }\n\n /**\n * Recursively extract all $ref values from an object along with their context\n */\n private extractSchemaRefsWithContext(\n obj: any,\n refs: Map<\n string,\n { operationId?: string; method?: string; path?: string }\n > = new Map(),\n context: { operationId?: string; method?: string; path?: string } = {}\n ): Map<string, { operationId?: string; method?: string; path?: string }> {\n if (typeof obj !== \"object\" || obj === null) {\n return refs;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item) =>\n this.extractSchemaRefsWithContext(item, refs, context)\n );\n return refs;\n }\n\n // Update context when we find operationId\n if (obj.operationId && typeof obj.operationId === \"string\") {\n context = { ...context, operationId: obj.operationId };\n }\n\n if (obj.$ref && typeof obj.$ref === \"string\") {\n refs.set(obj.$ref, { ...context });\n }\n\n Object.values(obj).forEach((value) => {\n this.extractSchemaRefsWithContext(value, refs, context);\n });\n\n return refs;\n }\n\n /**\n * Extract schema references from paths with context\n */\n private extractPathSchemaRefs(\n paths: OpenAPIV3.PathsObject\n ): Map<string, { operationId?: string; method?: string; path?: string }> {\n const refs = new Map<\n string,\n { operationId?: string; method?: string; path?: string }\n >();\n\n Object.entries(paths).forEach(([path, pathItem]) => {\n if (!pathItem) return;\n\n Object.entries(pathItem).forEach(([method, operation]) => {\n if (!operation || typeof operation !== \"object\") return;\n\n const context = {\n method,\n path,\n operationId: (operation as any).operationId,\n };\n\n this.extractSchemaRefsWithContext(operation, refs, context);\n });\n });\n\n return refs;\n }\n\n /**\n * Extract schema name from $ref\n * @example\n * \"#/components/schemas/CreateUserModelSchema\" -> \"CreateUserModelSchema\"\n */\n private getSchemaNameFromRef(ref: string): string | null {\n const match = ref.match(/#\\/components\\/schemas\\/(.+)$/);\n return match ? match[1] : null;\n }\n\n async generateMissingJsonSchemas(\n currentPaths: OpenAPIV3.PathsObject,\n currentJsonSchemas: Record<string, any>,\n arkosConfig: ArkosConfig\n ): Promise<Record<string, any>> {\n const missingSchemas: Record<string, any> = {};\n\n // Extract all schema references with their context (operationId, method, path)\n const schemaRefsWithContext = this.extractPathSchemaRefs(currentPaths);\n\n // Group missing schemas by model and collect required actions\n const modelActions = new Map<string, Set<string>>();\n\n for (const [ref, context] of schemaRefsWithContext) {\n const schemaName = this.getSchemaNameFromRef(ref);\n if (!schemaName) continue;\n\n // Check if schema already exists\n if (currentJsonSchemas[schemaName]) continue;\n\n // Only process ModelSchema references\n if (!schemaName.includes(\"ModelSchema\") && !schemaName.includes(\"Schema\"))\n continue;\n\n let modelName: string | null = null;\n let action: string | null = null;\n\n // First try to get model and action from operationId (more reliable)\n if (context.operationId) {\n modelName = this.extractModelNameFromOperationId(context.operationId);\n action = this.extractActionFromOperationId(context.operationId);\n }\n\n // Fallback to schema ref analysis if operationId didn't work\n if (!modelName || !action) {\n modelName = modelName || this.extractModelNameFromSchemaRef(ref);\n action = action || this.extractActionFromSchemaRef(ref);\n }\n\n if (modelName && action) {\n if (!modelActions.has(modelName))\n modelActions.set(modelName, new Set());\n\n modelActions.get(modelName)!.add(action);\n }\n }\n\n // Generate schemas for each model\n for (const [modelName, actions] of modelActions) {\n try {\n const actionsArray = Array.from(actions) as any[];\n\n const generatedSchemas =\n await enhancedPrismaJsonSchemaGenerator.generateModelSchemas({\n modelName,\n arkosConfig,\n schemasToGenerate: actionsArray,\n });\n\n // Map generated schemas to the expected naming convention\n Object.entries(generatedSchemas).forEach(([key, schema]) => {\n // The enhanced generator might use different naming conventions\n // We need to map them to match what's expected in the $refs\n let mappedKey = key;\n const authModuleModel = [\"auth\", \"login\", \"me\", \"password\", \"me\"];\n\n // Handle auth schemas\n if (authModuleModel.includes(modelName.toLowerCase())) {\n if (key === \"LoginSchema\") mappedKey = \"LoginSchema\";\n else if (key === \"SignupSchema\") mappedKey = \"SignupSchema\";\n else if (key === \"GetMeSchema\") mappedKey = \"GetMeSchema\";\n else if (key === \"UpdateMeSchema\") mappedKey = \"UpdateMeSchema\";\n else if (key === \"UpdatePasswordSchema\")\n mappedKey = \"UpdatePasswordSchema\";\n } else {\n // Handle model schemas - ensure they match the expected naming pattern\n if (key.includes(\"ModelSchema\")) {\n mappedKey = key;\n } else {\n // Add ModelSchema suffix if missing\n mappedKey = `${key}ModelSchema`;\n }\n }\n\n missingSchemas[mappedKey] = schema;\n });\n } catch (error) {\n console.warn(\n `Failed to generate schemas for model ${modelName}:`,\n error\n );\n }\n }\n\n return missingSchemas;\n }\n\n /**\n * Legacy method - extract action type from schema reference (kept for backward compatibility)\n */\n private extractActionFromSchemaRef(schemaRef: string): string | null {\n if (schemaRef.includes(\"CreateMany\")) return \"createMany\";\n if (schemaRef.includes(\"Create\")) return \"createOne\";\n if (schemaRef.includes(\"UpdateMany\")) return \"updateMany\";\n if (\n schemaRef.includes(\"Update\") &&\n !schemaRef.includes(\"UpdateMe\") &&\n !schemaRef.includes(\"UpdatePassword\")\n )\n return \"updateOne\";\n if (schemaRef.includes(\"FindMany\")) return \"findMany\";\n if (schemaRef.includes(\"FindOne\")) return \"findOne\";\n if (schemaRef.includes(\"Login\")) return \"login\";\n if (schemaRef.includes(\"Signup\")) return \"signup\";\n if (schemaRef.includes(\"GetMe\")) return \"getMe\";\n if (schemaRef.includes(\"UpdateMe\")) return \"updateMe\";\n if (schemaRef.includes(\"UpdatePassword\")) return \"updatePassword\";\n\n return null;\n }\n\n /**\n * Debug method to analyze what schemas are missing with enhanced context\n */\n analyzeMissingSchemas(\n currentPaths: OpenAPIV3.PathsObject,\n currentJsonSchemas: Record<string, any>\n ): {\n allRefs: Array<{ ref: string; context: any }>;\n missingRefs: Array<{ ref: string; context: any }>;\n existingRefs: Array<{ ref: string; context: any }>;\n modelActions: {\n model: string;\n action: string;\n ref: string;\n operationId?: string;\n }[];\n } {\n const schemaRefsWithContext = this.extractPathSchemaRefs(currentPaths);\n\n const allRefs: Array<{ ref: string; context: any }> = [];\n const missingRefs: Array<{ ref: string; context: any }> = [];\n const existingRefs: Array<{ ref: string; context: any }> = [];\n const modelActions: {\n model: string;\n action: string;\n ref: string;\n operationId?: string;\n }[] = [];\n\n for (const [ref, context] of schemaRefsWithContext) {\n const refWithContext = { ref, context };\n allRefs.push(refWithContext);\n\n const schemaName = this.getSchemaNameFromRef(ref);\n if (!schemaName) continue;\n\n if (currentJsonSchemas[schemaName]) {\n existingRefs.push(refWithContext);\n } else {\n missingRefs.push(refWithContext);\n\n let modelName: string | null = null;\n let action: string | null = null;\n\n // Try operationId first\n if (context.operationId) {\n modelName = this.extractModelNameFromOperationId(context.operationId);\n action = this.extractActionFromOperationId(context.operationId);\n }\n\n // Fallback to schema ref\n if (!modelName || !action) {\n modelName = modelName || this.extractModelNameFromSchemaRef(ref);\n action = action || this.extractActionFromSchemaRef(ref);\n }\n\n if (modelName && action) {\n modelActions.push({\n model: modelName,\n action,\n ref,\n operationId: context.operationId,\n });\n }\n }\n }\n\n return {\n allRefs,\n missingRefs,\n existingRefs,\n modelActions,\n };\n }\n}\n\nconst missingJsonSchemaGenerator = new MissingJsonSchemasGenerator();\n\nexport default missingJsonSchemaGenerator;\n"]}
|
|
@@ -10,7 +10,6 @@ exports.getSchemaRef = getSchemaRef;
|
|
|
10
10
|
exports.generatePathsForModels = generatePathsForModels;
|
|
11
11
|
const models_helpers_1 = require("../../../../utils/helpers/models.helpers");
|
|
12
12
|
const utils_1 = require("../../../../exports/utils");
|
|
13
|
-
const pluralize_1 = __importDefault(require("pluralize"));
|
|
14
13
|
const get_system_json_schema_paths_1 = require("./get-system-json-schema-paths");
|
|
15
14
|
const get_authentication_json_schema_paths_1 = require("./get-authentication-json-schema-paths");
|
|
16
15
|
const generate_zod_json_schema_1 = require("./json-schema-generators/generate-zod-json-schema");
|
|
@@ -18,10 +17,11 @@ const generate_class_validator_json_schemas_1 = require("./json-schema-generator
|
|
|
18
17
|
const generate_prisma_json_schemas_1 = require("./json-schema-generators/generate-prisma-json-schemas");
|
|
19
18
|
const generate_prisma_model_main_routes_1 = require("./json-schema-generators/prisma-models/generate-prisma-model-main-routes");
|
|
20
19
|
const generate_prisma_model_parent_routes_1 = require("./json-schema-generators/prisma-models/generate-prisma-model-parent-routes");
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const sheu_1 = __importDefault(require("../../../../utils/sheu"));
|
|
21
|
+
async function getOpenAPIJsonSchemasByConfigMode(arkosConfig) {
|
|
22
|
+
switch (arkosConfig?.swagger.mode) {
|
|
23
23
|
case "prisma":
|
|
24
|
-
return await (0, generate_prisma_json_schemas_1.generatePrismaJsonSchemas)();
|
|
24
|
+
return await (0, generate_prisma_json_schemas_1.generatePrismaJsonSchemas)(arkosConfig);
|
|
25
25
|
case "class-validator":
|
|
26
26
|
return await (0, generate_class_validator_json_schemas_1.generateClassValidatorJsonSchemas)();
|
|
27
27
|
case "zod":
|
|
@@ -56,14 +56,30 @@ function kebabToHuman(kebabStr) {
|
|
|
56
56
|
.join(" ");
|
|
57
57
|
}
|
|
58
58
|
function getSchemaRef(schemaName, mode) {
|
|
59
|
+
const lowerSchemaName = schemaName.toLowerCase();
|
|
60
|
+
const specialCases = [
|
|
61
|
+
"getme",
|
|
62
|
+
"updateme",
|
|
63
|
+
"login",
|
|
64
|
+
"signup",
|
|
65
|
+
"updatepassword",
|
|
66
|
+
"password",
|
|
67
|
+
"me",
|
|
68
|
+
];
|
|
69
|
+
const isSpecialCase = specialCases.some((keyword) => keyword === lowerSchemaName);
|
|
70
|
+
if (isSpecialCase && mode === "prisma") {
|
|
71
|
+
return `#/components/schemas/${schemaName}Schema`;
|
|
72
|
+
}
|
|
59
73
|
switch (mode) {
|
|
60
74
|
case "prisma":
|
|
75
|
+
return `#/components/schemas/${schemaName}ModelSchema`;
|
|
61
76
|
case "zod":
|
|
62
77
|
return `#/components/schemas/${schemaName}Schema`;
|
|
63
78
|
case "class-validator":
|
|
64
79
|
return `#/components/schemas/${schemaName}Dto`;
|
|
65
80
|
default:
|
|
66
|
-
|
|
81
|
+
sheu_1.default.error(`Unknown Arkos.js swagger documentation provided, available options are prisma, zod or class-validator but received ${mode}`);
|
|
82
|
+
return "";
|
|
67
83
|
}
|
|
68
84
|
}
|
|
69
85
|
async function generatePathsForModels(arkosConfig) {
|
|
@@ -72,23 +88,18 @@ async function generatePathsForModels(arkosConfig) {
|
|
|
72
88
|
return {};
|
|
73
89
|
let paths = {};
|
|
74
90
|
const models = (0, models_helpers_1.getModels)();
|
|
75
|
-
const mode = swaggerConfig.mode;
|
|
76
91
|
for (const model of models) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const pascalModelName = (0, utils_1.pascalCase)(model);
|
|
80
|
-
const humanReadableName = kebabToHuman(modelName);
|
|
81
|
-
const humanReadableNamePlural = pluralize_1.default.plural(humanReadableName);
|
|
82
|
-
const modelModules = await (0, models_helpers_1.importPrismaModelModules)(model, arkosConfig);
|
|
83
|
-
const routerConfig = modelModules.router?.config;
|
|
84
|
-
if (routerConfig?.disable === true)
|
|
85
|
-
continue;
|
|
86
|
-
await (0, generate_prisma_model_main_routes_1.generatePrismaModelMainRoutesPaths)(paths, routeName, pascalModelName, humanReadableName, humanReadableNamePlural, routerConfig, mode);
|
|
87
|
-
if (routerConfig?.parent)
|
|
88
|
-
await (0, generate_prisma_model_parent_routes_1.generatePrismaModelParentRoutePaths)(paths, routeName, pascalModelName, humanReadableName, humanReadableNamePlural, routerConfig, mode);
|
|
92
|
+
await (0, generate_prisma_model_main_routes_1.generatePrismaModelMainRoutesPaths)(model, paths, arkosConfig);
|
|
93
|
+
await (0, generate_prisma_model_parent_routes_1.generatePrismaModelParentRoutePaths)(model, paths, arkosConfig);
|
|
89
94
|
}
|
|
90
|
-
paths = {
|
|
91
|
-
|
|
95
|
+
paths = {
|
|
96
|
+
...paths,
|
|
97
|
+
...(0, get_system_json_schema_paths_1.getSystemJsonSchemaPaths)(),
|
|
98
|
+
};
|
|
99
|
+
paths = {
|
|
100
|
+
...paths,
|
|
101
|
+
...((await (0, get_authentication_json_schema_paths_1.getAuthenticationJsonSchemaPaths)(arkosConfig)) || {}),
|
|
102
|
+
};
|
|
92
103
|
return paths;
|
|
93
104
|
}
|
|
94
105
|
//# sourceMappingURL=swagger.router.helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/swagger/utils/helpers/swagger.router.helpers.ts"],"names":[],"mappings":";;;;;AAgBA,8EAeC;AAED,4DAwBC;AAED,oCAKC;AAED,
|
|
1
|
+
{"version":3,"file":"swagger.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/swagger/utils/helpers/swagger.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosConfig } from \"../../../../exports\";\nimport { getModels } from \"../../../../utils/helpers/models.helpers\";\nimport { pascalCase } from \"../../../../exports/utils\";\nimport { OpenAPIV3 } from \"openapi-types\";\nimport { getSystemJsonSchemaPaths } from \"./get-system-json-schema-paths\";\nimport { getAuthenticationJsonSchemaPaths } from \"./get-authentication-json-schema-paths\";\nimport { generateZodJsonSchemas } from \"./json-schema-generators/generate-zod-json-schema\";\nimport { generateClassValidatorJsonSchemas } from \"./json-schema-generators/generate-class-validator-json-schemas\";\nimport { generatePrismaJsonSchemas } from \"./json-schema-generators/generate-prisma-json-schemas\";\nimport { generatePrismaModelMainRoutesPaths } from \"./json-schema-generators/prisma-models/generate-prisma-model-main-routes\";\nimport { generatePrismaModelParentRoutePaths } from \"./json-schema-generators/prisma-models/generate-prisma-model-parent-routes\";\nimport sheu from \"../../../../utils/sheu\";\n\n/**\n * Helps choosing the right json schemas according to swagger configurations\n */\nexport async function getOpenAPIJsonSchemasByConfigMode(\n arkosConfig: ArkosConfig\n) {\n switch (arkosConfig?.swagger!.mode) {\n case \"prisma\":\n return await generatePrismaJsonSchemas(arkosConfig);\n case \"class-validator\":\n return await generateClassValidatorJsonSchemas();\n case \"zod\":\n return await generateZodJsonSchemas();\n default:\n throw Error(\n \"Unknown mode for auto documentation, supported values are prisma, class-validator, zod or json-schemas\"\n );\n }\n}\n\nexport function getCorrectJsonSchemaName(\n type: string,\n modelName: string,\n suffix: \"Dto\" | \"Schema\"\n): string {\n const pascalModelName = pascalCase(modelName);\n\n const map: Record<string, string> = {\n model: pascalModelName,\n create: `Create${pascalModelName}`,\n createMany: `CreateMany${pascalModelName}`,\n findOne: `FindOne${pascalModelName}`,\n findMany: `FindMany${pascalModelName}`,\n update: `Update${pascalModelName}`,\n updateMany: `UpdateMany${pascalModelName}`,\n query: `Query${pascalModelName}`,\n login: \"Login\",\n signup: \"Signup\",\n updateMe: \"UpdateMe\",\n updatePassword: \"UpdatePassword\",\n };\n\n const baseName = map[type] ?? pascalCase(type);\n return `${baseName}${suffix}`;\n}\n\nexport function kebabToHuman(kebabStr: string): string {\n return kebabStr\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nexport function getSchemaRef(\n schemaName: string,\n mode: \"prisma\" | \"zod\" | \"class-validator\"\n): string {\n // Check if schemaName (lowercase) contains any of the specified keywords\n const lowerSchemaName = schemaName.toLowerCase();\n const specialCases = [\n \"getme\",\n \"updateme\",\n \"login\",\n \"signup\",\n \"updatepassword\",\n \"password\",\n \"me\",\n ];\n const isSpecialCase = specialCases.some(\n (keyword) => keyword === lowerSchemaName\n );\n\n // If it's a special case and mode is prisma, return zod style instead\n if (isSpecialCase && mode === \"prisma\") {\n return `#/components/schemas/${schemaName}Schema`;\n }\n\n switch (mode) {\n case \"prisma\":\n return `#/components/schemas/${schemaName}ModelSchema`;\n case \"zod\":\n return `#/components/schemas/${schemaName}Schema`;\n case \"class-validator\":\n return `#/components/schemas/${schemaName}Dto`;\n default:\n sheu.error(\n `Unknown Arkos.js swagger documentation provided, available options are prisma, zod or class-validator but received ${mode}`\n );\n return \"\";\n }\n}\n\nexport async function generatePathsForModels(\n arkosConfig: ArkosConfig\n): Promise<OpenAPIV3.PathsObject> {\n const swaggerConfig = arkosConfig?.swagger;\n\n if (!swaggerConfig) return {};\n\n let paths: OpenAPIV3.PathsObject = {};\n const models = getModels();\n\n for (const model of models) {\n // Generate main routes\n await generatePrismaModelMainRoutesPaths(model, paths, arkosConfig);\n\n // Generate parent routes if configured\n await generatePrismaModelParentRoutePaths(model, paths, arkosConfig);\n }\n\n // Add system routes\n paths = {\n ...paths,\n ...getSystemJsonSchemaPaths(),\n };\n\n // Add authentication routes\n paths = {\n ...paths,\n ...((await getAuthenticationJsonSchemaPaths(arkosConfig)) || {}),\n };\n\n return paths;\n}\n"]}
|
package/dist/cjs/paths.js
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
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.ROOT_DIR = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
exports.ROOT_DIR = path_1.default.resolve(__dirname, "../..");
|
|
9
|
+
//# sourceMappingURL=paths.js.map
|
package/dist/cjs/server.js
CHANGED
|
@@ -1,5 +1,85 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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.server = exports._arkosConfig = void 0;
|
|
7
|
+
exports.terminateApplicationRunningProcessAndServer = terminateApplicationRunningProcessAndServer;
|
|
8
|
+
exports.getArkosConfig = getArkosConfig;
|
|
9
|
+
exports.getExpressApp = getExpressApp;
|
|
10
|
+
exports.initApp = initApp;
|
|
11
|
+
const app_1 = require("./app");
|
|
12
|
+
const deepmerge_helper_1 = __importDefault(require("./utils/helpers/deepmerge.helper"));
|
|
13
|
+
const http_1 = __importDefault(require("http"));
|
|
14
|
+
const models_helpers_1 = require("./utils/helpers/models.helpers");
|
|
15
|
+
const sheu_1 = __importDefault(require("./utils/sheu"));
|
|
16
|
+
const text_helpers_1 = require("./utils/helpers/text.helpers");
|
|
17
|
+
process.on("uncaughtException", (err) => {
|
|
18
|
+
sheu_1.default.error("\nUNCAUGHT EXCEPTION! SHUTTING DOWN...\n", {
|
|
19
|
+
timestamp: true,
|
|
20
|
+
bold: true,
|
|
21
|
+
});
|
|
22
|
+
console.error(err.name, err.message);
|
|
23
|
+
console.error(err);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
});
|
|
26
|
+
let server;
|
|
27
|
+
let _app;
|
|
28
|
+
exports._arkosConfig = {
|
|
29
|
+
welcomeMessage: "Welcome to our RESTful API generated by Arkos, find out more about Arkos at www.arkosjs.com",
|
|
30
|
+
port: Number(process.env.CLI_PORT) || Number(process.env.PORT) || 8000,
|
|
31
|
+
host: process.env.CLI_HOST || process.env.HOST || "localhost",
|
|
32
|
+
fileUpload: {
|
|
33
|
+
baseUploadDir: "uploads",
|
|
34
|
+
baseRoute: "/api/uploads",
|
|
35
|
+
},
|
|
36
|
+
available: false,
|
|
37
|
+
};
|
|
38
|
+
async function initApp(arkosConfig = {}) {
|
|
39
|
+
(0, models_helpers_1.initializePrismaModels)();
|
|
40
|
+
exports._arkosConfig.available = true;
|
|
41
|
+
exports._arkosConfig = (0, deepmerge_helper_1.default)(exports._arkosConfig, arkosConfig);
|
|
42
|
+
const port = process.env.CLI_PORT ||
|
|
43
|
+
exports._arkosConfig.port ||
|
|
44
|
+
process.env.PORT ||
|
|
45
|
+
"port" in exports._arkosConfig
|
|
46
|
+
? exports._arkosConfig.port
|
|
47
|
+
: 8000;
|
|
48
|
+
_app = await (0, app_1.bootstrap)(exports._arkosConfig);
|
|
49
|
+
const time = new Date().toTimeString().split(" ")[0];
|
|
50
|
+
if (port) {
|
|
51
|
+
exports.server = server = http_1.default.createServer(_app);
|
|
52
|
+
if (exports._arkosConfig?.configureServer)
|
|
53
|
+
await exports._arkosConfig.configureServer(server);
|
|
54
|
+
server.listen(Number(port), exports._arkosConfig.host, () => {
|
|
55
|
+
sheu_1.default.ready(`${sheu_1.default.gray(time)} ${(0, text_helpers_1.capitalize)(process.env.NODE_ENV || "development")} server waiting on http://${exports._arkosConfig.host || "localhost"}:${port}`);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
sheu_1.default.warn(`${sheu_1.default.gray(time)} port set to undefined, hence no internal http server was setup.`);
|
|
60
|
+
}
|
|
61
|
+
return _app;
|
|
62
|
+
}
|
|
63
|
+
process.on("unhandledRejection", (err) => {
|
|
64
|
+
sheu_1.default.error("\nUNHANDLED REJECTION! SHUTTING DOWN...\n", {
|
|
65
|
+
timestamp: true,
|
|
66
|
+
bold: true,
|
|
67
|
+
});
|
|
68
|
+
console.error(err.name, err.message);
|
|
69
|
+
console.error(err);
|
|
70
|
+
server?.close(() => {
|
|
71
|
+
process.exit(1);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
function terminateApplicationRunningProcessAndServer() {
|
|
75
|
+
server?.close(() => {
|
|
76
|
+
process.exit(1);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function getArkosConfig() {
|
|
80
|
+
return exports._arkosConfig;
|
|
81
|
+
}
|
|
82
|
+
function getExpressApp() {
|
|
83
|
+
return _app;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=server.js.map
|
package/dist/cjs/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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","sourcesContent":["import { IncomingMessage, Server, ServerResponse } from \"http\";\nimport AppError from \"./modules/error-handler/utils/app-error\";\nimport { Express } from \"express\";\nimport { bootstrap } from \"./app\";\nimport { ArkosConfig } from \"./types/arkos-config\";\nimport deepmerge from \"./utils/helpers/deepmerge.helper\";\nimport http from \"http\";\nimport { initializePrismaModels } from \"./utils/helpers/models.helpers\";\nimport sheu from \"./utils/sheu\";\nimport { capitalize } from \"./utils/helpers/text.helpers\";\n\nprocess.on(\"uncaughtException\", (err) => {\n // if (err.message.includes(\"EPIPE\")) return;\n\n sheu.error(\"\\nUNCAUGHT EXCEPTION! SHUTTING DOWN...\\n\", {\n timestamp: true,\n bold: true,\n });\n console.error(err.name, err.message);\n console.error(err);\n process.exit(1);\n});\n\nlet server: Server<typeof IncomingMessage, typeof ServerResponse>;\nlet _app: Express;\n\nexport let _arkosConfig: ArkosConfig & { available?: boolean } = {\n welcomeMessage:\n \"Welcome to our RESTful API generated by Arkos, find out more about Arkos at www.arkosjs.com\",\n port: Number(process.env.CLI_PORT) || Number(process.env.PORT) || 8000,\n host: process.env.CLI_HOST || process.env.HOST || \"localhost\",\n fileUpload: {\n baseUploadDir: \"uploads\",\n baseRoute: \"/api/uploads\",\n },\n available: false,\n};\n\n/**\n * Initializes the application server.\n *\n * This function starts the server by listening on a specified port.\n * The port is determined by the following order of precedence:\n * 1. The `port` argument passed to the function.\n * 2. Defaults to `8000` if neither is provided.\n *\n * @param {ArkosConfig} arkosConfig - initial configs for the api ( authentication, port).\n * @returns {Promise<Express>} This function returns the Express App after all middlewares configurations.\n * You can prevent it from listen py passing port as undefined\n *\n */\nasync function initApp(arkosConfig: ArkosConfig = {}): Promise<Express> {\n initializePrismaModels();\n _arkosConfig.available = true;\n _arkosConfig = deepmerge(_arkosConfig, arkosConfig);\n\n const port =\n process.env.CLI_PORT ||\n _arkosConfig.port ||\n process.env.PORT ||\n \"port\" in _arkosConfig\n ? _arkosConfig.port\n : 8000;\n\n _app = await bootstrap(_arkosConfig);\n const time = new Date().toTimeString().split(\" \")[0];\n\n if (port) {\n server = http.createServer(_app);\n\n if (_arkosConfig?.configureServer)\n await _arkosConfig.configureServer(server);\n\n server.listen(Number(port), _arkosConfig.host!, () => {\n sheu.ready(\n `${sheu.gray(time)} ${capitalize(process.env.NODE_ENV || \"development\")} server waiting on http://${_arkosConfig.host || \"localhost\"}:${port}`\n );\n });\n } else {\n sheu.warn(\n `${sheu.gray(time)} port set to undefined, hence no internal http server was setup.`\n );\n }\n\n return _app;\n}\n\nprocess.on(\"unhandledRejection\", (err: AppError) => {\n sheu.error(\"\\nUNHANDLED REJECTION! SHUTTING DOWN...\\n\", {\n timestamp: true,\n bold: true,\n });\n console.error(err.name, err.message);\n console.error(err);\n server?.close(() => {\n process.exit(1);\n });\n});\n\n/**\n * Terminates the current running express application, server and process.\n *\n * @returns {void}\n */\nexport function terminateApplicationRunningProcessAndServer(): void {\n server?.close(() => {\n process.exit(1);\n });\n}\n\n/**\n * Gives access to the underlying current configurations being used by **Arkos** by default and also passed through `arkos.init()`\n *\n * @returns {ArkosConfig}\n */\nexport function getArkosConfig(): ArkosConfig {\n return _arkosConfig;\n}\n\nexport function getExpressApp() {\n return _app;\n}\n\nexport { server, initApp };\n"]}
|