create-arkos 2.0.0-next.17 → 2.0.0-next.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/index.js +4 -0
  2. package/dist/index.js.map +1 -1
  3. package/dist/utils/project-config-inquirer.js +40 -33
  4. package/dist/utils/project-config-inquirer.js.map +1 -1
  5. package/dist/utils/template-compiler.js +16 -11
  6. package/dist/utils/template-compiler.js.map +1 -1
  7. package/package.json +1 -1
  8. package/templates/basic/.env.hbs +5 -1
  9. package/templates/basic/.gitignore.hbs +2 -0
  10. package/templates/basic/README.md.hbs +1 -1
  11. package/templates/basic/arkos.config.ts.hbs +16 -3
  12. package/templates/basic/jsconfig.json.hbs +3 -3
  13. package/templates/basic/package.json.hbs +31 -13
  14. package/templates/basic/prisma/schema/__tests__/user-role.prisma.hbs.test.ts +2 -2
  15. package/templates/basic/prisma/schema/__tests__/user.prisma.hbs.test.ts +2 -2
  16. package/templates/basic/prisma/schema/auth-permission.prisma.hbs +3 -9
  17. package/templates/basic/prisma/schema/auth-role.prisma.hbs +2 -2
  18. package/templates/basic/prisma/schema/schema.prisma.hbs +2 -3
  19. package/templates/basic/prisma/schema/user-permission.prisma.hbs +18 -0
  20. package/templates/basic/prisma/schema/user.prisma.hbs +4 -2
  21. package/templates/basic/prisma.config.ts.hbs +10 -0
  22. package/templates/basic/public/favicon.ico +0 -0
  23. package/templates/basic/src/app.ts.hbs +9 -7
  24. package/templates/basic/src/modules/auth/auth.policy.ts.hbs +1 -1
  25. package/templates/basic/src/modules/auth/auth.router.ts.hbs +72 -7
  26. package/templates/basic/src/modules/auth/dtos/login.dto.ts.hbs +1 -1
  27. package/templates/basic/src/modules/auth/dtos/signup.dto.ts.hbs +1 -1
  28. package/templates/basic/src/modules/auth/dtos/update-me.dto.ts.hbs +1 -1
  29. package/templates/basic/src/modules/auth/dtos/update-password.dto.ts.hbs +1 -1
  30. package/templates/basic/src/modules/auth-permission/auth-permission.router.ts.hbs +39 -7
  31. package/templates/basic/src/modules/auth-permission/auth-permission.service.ts.hbs +4 -6
  32. package/templates/basic/src/modules/auth-permission/dtos/create-auth-permission.dto.ts.hbs +6 -5
  33. package/templates/basic/src/modules/auth-permission/dtos/{query-auth-role.dto.ts.hbs → query-auth-permission.dto.ts.hbs} +1 -1
  34. package/templates/basic/src/modules/auth-permission/dtos/update-auth-permission.dto.ts.hbs +17 -4
  35. package/templates/basic/src/modules/auth-role/auth-role.router.ts.hbs +38 -6
  36. package/templates/basic/src/modules/auth-role/auth-role.service.ts.hbs +4 -6
  37. package/templates/basic/src/modules/auth-role/dtos/create-auth-role.dto.ts.hbs +1 -1
  38. package/templates/basic/src/modules/auth-role/dtos/query-auth-role.dto.ts.hbs +1 -1
  39. package/templates/basic/src/modules/auth-role/dtos/update-auth-role.dto.ts.hbs +2 -1
  40. package/templates/basic/src/modules/file-upload/file-upload.router.ts.hbs +28 -8
  41. package/templates/basic/src/modules/user/dtos/create-user.dto.ts.hbs +3 -3
  42. package/templates/basic/src/modules/user/dtos/update-user.dto.ts.hbs +3 -3
  43. package/templates/basic/src/modules/user/user.router.ts.hbs +91 -7
  44. package/templates/basic/src/modules/user/user.service.ts.hbs +4 -6
  45. package/templates/basic/src/router.ts.hbs +2 -2
  46. package/templates/basic/src/server.ts.hbs +8 -0
  47. package/templates/basic/src/utils/prisma/index.ts.hbs +48 -2
  48. package/templates/basic/src/utils/validation/api-actions.ts.hbs +2 -2
  49. package/templates/basic/tsconfig.json.hbs +5 -4
  50. package/templates/basic/src/loadables.ts.hbs +0 -29
  51. package/templates/basic/src/modules/auth/auth.route-hook.ts.hbs +0 -66
  52. package/templates/basic/src/modules/auth-permission/auth-permission.route-hook.ts.hbs +0 -35
  53. package/templates/basic/src/modules/auth-role/auth-role.route-hook.ts.hbs +0 -35
  54. package/templates/basic/src/modules/file-upload/file-upload.route-hook.ts.hbs +0 -23
  55. package/templates/basic/src/modules/user/user.route-hook.ts.hbs +0 -88
@@ -1,11 +1,9 @@
1
- import { BaseService } from "arkos/services";
2
- {{#if typescript}}
3
- import { Prisma } from "@prisma/client"
1
+ import { ArkosPrismaService } from "arkos/services";
4
2
 
5
- class UserService extends BaseService<"user"> {}
3
+ {{#if typescript}}
4
+ class UserService extends ArkosPrismaService<"user"> {}
6
5
  {{else}}
7
-
8
- class UserService extends BaseService {}
6
+ class UserService extends ArkosPrismaService {}
9
7
  {{/if}}
10
8
 
11
9
  const userService = new UserService("user");
@@ -1,6 +1,6 @@
1
1
  import { ArkosRouter } from "arkos";
2
2
  import fileUploadRouter from "@/src/modules/file-upload/file-upload.router";
3
- {{#if authentication.type}}
3
+ {{#if (neq authentication.type "none")}}
4
4
  import authRouter from "@/src/modules/auth/auth.router";
5
5
  import userRouter from "@/src/modules/user/user.router";
6
6
  {{/if}}
@@ -12,7 +12,7 @@ import authPermissionRouter from "@/src/modules/auth-permission/auth-permission.
12
12
  const router = ArkosRouter();
13
13
 
14
14
  router.use(fileUploadRouter);
15
- {{#if authentication.type}}
15
+ {{#if (neq authentication.type "none")}}
16
16
  router.use(userRouter);
17
17
  router.use(authRouter);
18
18
  {{/if}}
@@ -0,0 +1,8 @@
1
+ import app from "@/src/app";
2
+ import http from "node:http";
3
+
4
+ app.build();
5
+
6
+ const server = http.createServer(app);
7
+
8
+ app.listen(server);
@@ -1,5 +1,51 @@
1
- import { PrismaClient } from "@prisma/client";
1
+ {{#if (eq prisma.provider "postgresql")}}
2
+ import { PrismaClient } from "@/src/generated/prisma/client";
3
+ import { PrismaPg } from "@prisma/adapter-pg";
2
4
 
3
- export const prisma = new PrismaClient();
5
+ const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL{{#if typescript}} as string{{/if}} });
6
+ export const prisma = new PrismaClient({ adapter });
7
+ {{/if}}
8
+ {{#if (eq prisma.provider "cockroachdb")}}
9
+ import { PrismaClient } from "@/src/generated/prisma/client";
10
+ import { PrismaPg } from "@prisma/adapter-pg";
11
+
12
+ // CockroachDB uses the PostgreSQL wire protocol, so it shares the pg adapter
13
+ const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL{{#if typescript}} as string{{/if}} });
14
+ export const prisma = new PrismaClient({ adapter });
15
+ {{/if}}
16
+ {{#if (eq prisma.provider "mysql")}}
17
+ import { PrismaClient } from "@/src/generated/prisma/client";
18
+ import { PrismaMariaDb } from "@prisma/adapter-mariadb";
19
+
20
+ const dbUrl = new URL(process.env.DATABASE_URL{{#if typescript}} as string{{/if}});
21
+ const adapter = new PrismaMariaDb({
22
+ host: dbUrl.hostname,
23
+ port: Number(dbUrl.port) || 3306,
24
+ user: decodeURIComponent(dbUrl.username),
25
+ password: decodeURIComponent(dbUrl.password),
26
+ database: dbUrl.pathname.replace(/^\//, ""),
27
+ connectionLimit: 5,
28
+ });
29
+ export const prisma = new PrismaClient({ adapter });
30
+ {{/if}}
31
+ {{#if (eq prisma.provider "sqlite")}}
32
+ import { PrismaClient } from "@/src/generated/prisma/client";
33
+ import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
34
+
35
+ const adapter = new PrismaBetterSqlite3({
36
+ url: process.env.DATABASE_URL || "file:./dev.db",
37
+ });
38
+ export const prisma = new PrismaClient({ adapter });
39
+ {{/if}}
40
+ {{#if (eq prisma.provider "sqlserver")}}
41
+ import { PrismaClient } from "@/src/generated/prisma/client";
42
+ import { PrismaMssql } from "@prisma/adapter-mssql";
43
+
44
+ const adapter = new PrismaMssql(process.env.DATABASE_URL{{#if typescript}} as string{{/if}});
45
+ export const prisma = new PrismaClient({ adapter });
46
+ {{/if}}
47
+ {{#if (eq prisma.provider "none")}}
48
+ export const prisma = null;
49
+ {{/if}}
4
50
 
5
51
  export default prisma;
@@ -1,10 +1,10 @@
1
1
  /**
2
- * A simple array of available `apiAction` field when using auto generate API (That uses BaseService)
2
+ * A simple array of available `apiAction` field when using auto generate API (That uses ArkosPrismaService)
3
3
  * class behind the scenes.
4
4
  *
5
5
  * Is worth mentioning that this will be addded into `arkos` as an util.
6
6
  *
7
- * @see {@link https://www.arkosjs.com/docs/advanced-guide/handling-relation-fields-in-prisma-body-requests#the-apiaction-property}
7
+ * @see {@link https://www.arkosjs.com/docs/core-concepts/prisma-orm/handling-relations}
8
8
  */
9
9
  const apiActions = ["connect", "disconnect", "delete", "update", "create"]{{#if typescript}} as const{{/if}};
10
10
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "target": "ES6",
4
- "module": "es2020",
3
+ "target": "es2022",
4
+ "module": "es2022",
5
5
  "moduleResolution": "bundler",
6
6
  "rootDir": ".",
7
7
  "baseUrl": ".",
@@ -15,11 +15,12 @@
15
15
  "lib": ["es6", "dom"],
16
16
  "noImplicitAny": true,
17
17
  "paths": {
18
- "@/*": ["./*"]
18
+ "@/*": ["./*"],
19
+ "@arkosjs/generated": ["./.arkos/index.d.ts"]
19
20
  }
20
21
  },
21
22
  "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.tsx", "src/**/*.jsx", "arkos.config.ts"],
22
- "exclude": ["node_modules", ".build", "src/**/__tests__/**", "src/**/*.test", "src/**/*.spec", "temp", "dist", "build", "uploads"],
23
+ "exclude": ["node_modules", ".build", "src/**/__tests__/**", "src/**/*.test", "src/**/*.spec", "temp", "dist", "build", "uploads", "src/generated", ".arkos"],
23
24
  "watchOptions": {
24
25
  "excludeDirectories": ["**/node_modules", "node_modules"]
25
26
  }
@@ -1,29 +0,0 @@
1
- {{#if typescript}}
2
- import { ArkosLoadable } from "arkos";
3
- {{/if}}
4
- import fileUploadRouteHook from "@/src/modules/file-upload/file-upload.route-hook";
5
- {{#if authentication.type}}
6
- import userRouteHook from "@/src/modules/user/user.route-hook";
7
- import authRouteHook from "@/src/modules/auth/auth.route-hook";
8
- {{/if}}
9
- {{#if (eq authentication.type "dynamic")}}
10
- import authRoleRouteHook from "@/src/modules/auth-role/auth-role.route-hook";
11
- import authPermissionRouteHook from "@/src/modules/auth-permission/auth-permission.route-hook";
12
- {{/if}}
13
-
14
- {{#if typescript}}
15
- {{else}}
16
- /** @type import("arkos").ArkosLoadable */
17
- {{/if}}
18
- const loadables{{#if typescript}}: ArkosLoadable[]{{/if}} = [
19
- fileUploadRouteHook,
20
- {{#if authentication.type}}
21
- userRouteHook,
22
- authRouteHook,
23
- {{/if}}
24
- {{#if (eq authentication.type "dynamic")}}
25
- authRoleRouteHook,
26
- authPermissionRouteHook,
27
- {{/if}}
28
- ]
29
- export default loadables;
@@ -1,66 +0,0 @@
1
- import { ArkosRouteHook } from 'arkos';
2
- {{#if validation.type}}
3
- import LoginDto from '@/src/modules/auth/dtos/login.dto';
4
- import SignupDto from '@/src/modules/auth/dtos/signup.dto';
5
- import UpdateMeDto from '@/src/modules/auth/dtos/update-me.dto';
6
- import UpdatePasswordDto from '@/src/modules/auth/dtos/update-password.dto';
7
- {{/if}}
8
-
9
- const authRouteHook = ArkosRouteHook("auth");
10
-
11
- authRouteHook.login({
12
- {{#if validation.type}}validation: { body: LoginDto },{{/if}}
13
- });
14
-
15
- authRouteHook.signup({
16
- {{#if validation.type}}validation: { body: SignupDto },{{/if}}
17
- prismaArgs: {
18
- omit: { password: true },
19
- },
20
- });
21
-
22
- authRouteHook.getMe({
23
- prismaArgs: {
24
- omit: { password: true },
25
- {{#if (eq authentication.type "dynamic")}}
26
- include: {
27
- {{#if authentication.multipleRoles}}
28
- roles: {
29
- include: {
30
- role: {
31
- include: {
32
- permissions: true,
33
- },
34
- },
35
- },
36
- },
37
- {{else}}
38
- role: {
39
- include: {
40
- role: {
41
- include: {
42
- permissions: true,
43
- },
44
- },
45
- },
46
- },
47
- {{/if}}
48
- },
49
- {{/if}}
50
- },
51
- });
52
-
53
- authRouteHook.updateMe({
54
- {{#if validation.type}}validation: { body: UpdateMeDto },{{/if}}
55
- prismaArgs: {
56
- omit: { password: true },
57
- },
58
- });
59
-
60
- authRouteHook.updatePassword({
61
- {{#if validation.type}}validation: { body: UpdatePasswordDto },{{/if}}
62
- });
63
-
64
- authRouteHook.logout({});
65
-
66
- export default authRouteHook;
@@ -1,35 +0,0 @@
1
- import { ArkosRouteHook } from 'arkos';
2
- {{#if authentication}}
3
- import authPermissionPolicy from '@/src/modules/auth-permission/auth-permission.policy';
4
- {{/if}}
5
- {{#if validation.type}}
6
- import CreateAuthPermissionDto from '@/src/modules/auth-permission/dtos/create-auth-permission.dto';
7
- import UpdateAuthPermissionDto from '@/src/modules/auth-permission/dtos/update-auth-permission.dto';
8
- import QueryAuthPermissionDto from '@/src/modules/auth-permission/dtos/query-auth-permission.dto';
9
- {{/if}}
10
- const authPermissionRouteHook = ArkosRouteHook("auth-permission");
11
-
12
- authPermissionRouteHook.createOne({
13
- {{#if validation.type}}validation: { body: CreateAuthPermissionDto },{{/if}}
14
- {{#if authentication}}authentication: authPermissionPolicy.Create,{{/if}}
15
- });
16
-
17
- authPermissionRouteHook.findOne({
18
- {{#if authentication}}authentication: authPermissionPolicy.View,{{/if}}
19
- });
20
-
21
- authPermissionRouteHook.findMany({
22
- {{#if validation.type}}validation: { query: QueryAuthPermissionDto },{{/if}}
23
- {{#if authentication}}authentication: authPermissionPolicy.View,{{/if}}
24
- });
25
-
26
- authPermissionRouteHook.updateOne({
27
- {{#if validation.type}}validation: { body: UpdateAuthPermissionDto },{{/if}}
28
- {{#if authentication}}authentication: authPermissionPolicy.Update,{{/if}}
29
- });
30
-
31
- authPermissionRouteHook.deleteOne({
32
- {{#if authentication}}authentication: authPermissionPolicy.Delete,{{/if}}
33
- });
34
-
35
- export default authPermissionRouteHook;
@@ -1,35 +0,0 @@
1
- import { ArkosRouteHook } from 'arkos';
2
- {{#if authentication}}
3
- import authRolePolicy from '@/src/modules/auth-role/auth-role.policy';
4
- {{/if}}
5
- {{#if validation.type}}
6
- import CreateAuthRoleDto from '@/src/modules/auth-role/dtos/create-auth-role.dto';
7
- import UpdateAuthRoleDto from '@/src/modules/auth-role/dtos/update-auth-role.dto';
8
- import QueryAuthRoleDto from '@/src/modules/auth-role/dtos/query-auth-role.dto';
9
- {{/if}}
10
- const authRoleRouteHook = ArkosRouteHook("auth-role");
11
-
12
- authRoleRouteHook.createOne({
13
- {{#if validation.type}}validation: { body: CreateAuthRoleDto },{{/if}}
14
- {{#if authentication}}authentication: authRolePolicy.Create,{{/if}}
15
- });
16
-
17
- authRoleRouteHook.findOne({
18
- {{#if authentication}}authentication: authRolePolicy.View,{{/if}}
19
- });
20
-
21
- authRoleRouteHook.findMany({
22
- {{#if validation.type}}validation: { query: QueryAuthRoleDto },{{/if}}
23
- {{#if authentication}}authentication: authRolePolicy.View,{{/if}}
24
- });
25
-
26
- authRoleRouteHook.updateOne({
27
- {{#if validation.type}}validation: { body: UpdateAuthRoleDto },{{/if}}
28
- {{#if authentication}}authentication: authRolePolicy.Update,{{/if}}
29
- });
30
-
31
- authRoleRouteHook.deleteOne({
32
- {{#if authentication}}authentication: authRolePolicy.Delete,{{/if}}
33
- });
34
-
35
- export default authRoleRouteHook;
@@ -1,23 +0,0 @@
1
- import { ArkosRouteHook } from 'arkos';
2
- {{#if authentication}}
3
- import fileUploadPolicy from '@/src/modules/file-upload/file-upload.policy';
4
- {{/if}}
5
- const fileUploadRouteHook = ArkosRouteHook("file-upload");
6
-
7
- fileUploadRouteHook.findFile({
8
- {{#if authentication}}authentication: fileUploadPolicy.View,{{/if}}
9
- });
10
-
11
- fileUploadRouteHook.uploadFile({
12
- {{#if authentication}}authentication: fileUploadPolicy.Create,{{/if}}
13
- });
14
-
15
- fileUploadRouteHook.updateFile({
16
- {{#if authentication}}authentication: fileUploadPolicy.Update,{{/if}}
17
- });
18
-
19
- fileUploadRouteHook.deleteFile({
20
- {{#if authentication}}authentication: fileUploadPolicy.Delete,{{/if}}
21
- });
22
-
23
- export default fileUploadRouteHook;
@@ -1,88 +0,0 @@
1
- import { ArkosRouteHook } from 'arkos';
2
- {{#if authentication}}
3
- import userPolicy from '@/src/modules/user/user.policy';
4
- {{/if}}
5
- {{#if validation.type}}
6
- import CreateUserDto from '@/src/modules/user/dtos/create-user.dto';
7
- import UpdateUserDto from '@/src/modules/user/dtos/update-user.dto';
8
- {{/if}}
9
-
10
- const userRouteHook = ArkosRouteHook("user");
11
-
12
- userRouteHook.createOne({
13
- {{#if validation.type}}validation: { body: CreateUserDto },{{/if}}
14
- {{#if authentication}}authentication: userPolicy.Create,{{/if}}
15
- prismaArgs: {
16
- omit: { password: true },
17
- },
18
- });
19
-
20
- userRouteHook.findOne({
21
- {{#if authentication}}authentication: userPolicy.View,{{/if}}
22
- prismaArgs: {
23
- omit: { password: true },
24
- {{#if (eq authentication.type "dynamic")}}
25
- include: {
26
- {{#if authentication.multipleRoles}}
27
- roles: {
28
- include: {
29
- role: {
30
- include: {
31
- permissions: true,
32
- },
33
- },
34
- },
35
- },
36
- {{else}}
37
- role: {
38
- include: {
39
- role: {
40
- include: {
41
- permissions: true,
42
- },
43
- },
44
- },
45
- },
46
- {{/if}}
47
- },
48
- {{/if}}
49
- },
50
- });
51
-
52
- userRouteHook.findMany({
53
- {{#if authentication}}authentication: userPolicy.View,{{/if}}
54
- prismaArgs: {
55
- omit: { password: true },
56
- {{#if (eq authentication.type "dynamic")}}
57
- include: {
58
- {{#if authentication.multipleRoles}}
59
- roles: {
60
- include: {
61
- role: true,
62
- },
63
- },
64
- {{else}}
65
- role: {
66
- include: {
67
- role: true,
68
- },
69
- },
70
- {{/if}}
71
- },
72
- {{/if}}
73
- },
74
- });
75
-
76
- userRouteHook.updateOne({
77
- {{#if validation.type}}validation: { body: UpdateUserDto },{{/if}}
78
- {{#if authentication}}authentication: userPolicy.Update,{{/if}}
79
- prismaArgs: {
80
- omit: { password: true },
81
- },
82
- });
83
-
84
- userRouteHook.deleteOne({
85
- {{#if authentication}}authentication: userPolicy.Delete,{{/if}}
86
- });
87
-
88
- export default userRouteHook;